mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Allow four indexed arguments for anynomous events.
This commit is contained in:
parent
5053e153ec
commit
b6ddde9372
@ -554,7 +554,9 @@ bool TypeChecker::visit(EventDefinition const& _eventDef)
|
||||
{
|
||||
if (var->isIndexed())
|
||||
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.");
|
||||
if (!type(*var)->canLiveOutsideStorage())
|
||||
typeError(*var, "Type is required to live outside storage.");
|
||||
|
@ -2400,9 +2400,9 @@ BOOST_AUTO_TEST_CASE(event_anonymous_with_topics)
|
||||
{
|
||||
char const* sourceCode = R"(
|
||||
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) {
|
||||
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);
|
||||
BOOST_REQUIRE_EQUAL(m_logs.size(), 1);
|
||||
BOOST_CHECK_EQUAL(m_logs[0].address, m_contractAddress);
|
||||
BOOST_CHECK_EQUAL(h256(m_logs[0].data), h256(u256(value)));
|
||||
BOOST_REQUIRE_EQUAL(m_logs[0].topics.size(), 2);
|
||||
BOOST_CHECK(m_logs[0].data == encodeArgs("abc"));
|
||||
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[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)
|
||||
|
@ -1107,6 +1107,24 @@ BOOST_AUTO_TEST_CASE(event_too_many_indexed)
|
||||
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)
|
||||
{
|
||||
char const* text = R"(
|
||||
|
Loading…
Reference in New Issue
Block a user