string Transact::natspecNotice(Address _to, bytes const& _data) { if (ethereum()->codeAt(_to, PendingBlock).size()) { string userNotice = m_natSpecDB->getUserNotice(ethereum()->postState().codeHash(_to), _data); if (userNotice.empty()) return "Destination contract unknown."; else { NatspecExpressionEvaluator evaluator; return evaluator.evalExpression(QString::fromStdString(userNotice)).toStdString(); } } else return "Destination not a contract."; }
} ] } ])"; char const* transaction = R"({ "jsonrpc": "2.0", "method": "eth_call", "params": [{ "to": "0x8521742d3f456bd237e312d6e30724960f72517a", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000004" }], "id": 6 })"; NatspecExpressionEvaluator e(abi, transaction , "multiply"); // when string result = e.evalExpression("Will multiply `a` by 7 and return `a * 7`.").toStdString(); // then BOOST_CHECK_EQUAL(result, "Will multiply 4 by 7 and return 28."); } BOOST_AUTO_TEST_CASE(natspec_js_eval_error) { dev::test::TestOutputHelper::initTest(); // given NatspecExpressionEvaluator e; // when string result = e.evalExpression("`test(`").toStdString(); // then BOOST_CHECK_EQUAL(result, "Natspec evaluation failed, wrong input params");