Merge pull request #122 from chriseth/anonymousEventsWithFourIndexedParams

Allow four indexed arguments for anynomous events.
This commit is contained in:
chriseth 2015-10-07 17:01:37 +02:00
commit 68bf6e60c5
3 changed files with 27 additions and 5 deletions

View File

@ -554,7 +554,9 @@ bool TypeChecker::visit(EventDefinition const& _eventDef)
{ {
if (var->isIndexed()) if (var->isIndexed())
numIndexed++; numIndexed++;
if (numIndexed > 3) if (_eventDef.isAnonymous() && numIndexed > 4)
typeError(_eventDef, "More than 4 indexed arguments for anonymous event.");
else if (!_eventDef.isAnonymous() && numIndexed > 3)
typeError(_eventDef, "More than 3 indexed arguments for event."); typeError(_eventDef, "More than 3 indexed arguments for event.");
if (!type(*var)->canLiveOutsideStorage()) if (!type(*var)->canLiveOutsideStorage())
typeError(*var, "Type is required to live outside storage."); typeError(*var, "Type is required to live outside storage.");

View File

@ -2400,9 +2400,9 @@ BOOST_AUTO_TEST_CASE(event_anonymous_with_topics)
{ {
char const* sourceCode = R"( char const* sourceCode = R"(
contract ClientReceipt { contract ClientReceipt {
event Deposit(address indexed _from, bytes32 indexed _id, uint _value) anonymous; event Deposit(address indexed _from, bytes32 indexed _id, uint indexed _value, uint indexed _value2, bytes32 data) anonymous;
function deposit(bytes32 _id, bool _manually) { function deposit(bytes32 _id, bool _manually) {
Deposit(msg.sender, _id, msg.value); Deposit(msg.sender, _id, msg.value, 2, "abc");
} }
} }
)"; )";
@ -2412,10 +2412,12 @@ BOOST_AUTO_TEST_CASE(event_anonymous_with_topics)
callContractFunctionWithValue("deposit(bytes32,bool)", value, id); callContractFunctionWithValue("deposit(bytes32,bool)", value, id);
BOOST_REQUIRE_EQUAL(m_logs.size(), 1); BOOST_REQUIRE_EQUAL(m_logs.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].address, m_contractAddress); BOOST_CHECK_EQUAL(m_logs[0].address, m_contractAddress);
BOOST_CHECK_EQUAL(h256(m_logs[0].data), h256(u256(value))); BOOST_CHECK(m_logs[0].data == encodeArgs("abc"));
BOOST_REQUIRE_EQUAL(m_logs[0].topics.size(), 2); BOOST_REQUIRE_EQUAL(m_logs[0].topics.size(), 4);
BOOST_CHECK_EQUAL(m_logs[0].topics[0], h256(m_sender)); BOOST_CHECK_EQUAL(m_logs[0].topics[0], h256(m_sender));
BOOST_CHECK_EQUAL(m_logs[0].topics[1], h256(id)); BOOST_CHECK_EQUAL(m_logs[0].topics[1], h256(id));
BOOST_CHECK_EQUAL(m_logs[0].topics[2], h256(value));
BOOST_CHECK_EQUAL(m_logs[0].topics[3], h256(2));
} }
BOOST_AUTO_TEST_CASE(event_lots_of_data) BOOST_AUTO_TEST_CASE(event_lots_of_data)

View File

@ -1107,6 +1107,24 @@ BOOST_AUTO_TEST_CASE(event_too_many_indexed)
SOLIDITY_CHECK_ERROR_TYPE(parseAndAnalyseReturnError(text), TypeError); SOLIDITY_CHECK_ERROR_TYPE(parseAndAnalyseReturnError(text), TypeError);
} }
BOOST_AUTO_TEST_CASE(anonymous_event_four_indexed)
{
char const* text = R"(
contract c {
event e(uint indexed a, bytes3 indexed b, bool indexed c, uint indexed d) anonymous;
})";
ETH_TEST_CHECK_NO_THROW(parseAndAnalyse(text), "Parsing and Name Resolving Failed");
}
BOOST_AUTO_TEST_CASE(anonymous_event_too_many_indexed)
{
char const* text = R"(
contract c {
event e(uint indexed a, bytes3 indexed b, bool indexed c, uint indexed d, uint indexed e) anonymous;
})";
SOLIDITY_CHECK_ERROR_TYPE(parseAndAnalyseReturnError(text), TypeError);
}
BOOST_AUTO_TEST_CASE(event_call) BOOST_AUTO_TEST_CASE(event_call)
{ {
char const* text = R"( char const* text = R"(