示例#1
0
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.";
}
示例#2
0
		}
		]
	}
	])";
	
	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");