Skip to content

Commit

Permalink
Disabled EVM events in testcases by default (#2417)
Browse files Browse the repository at this point in the history
* disabled EVM events in testcases by default

* fix test
  • Loading branch information
ggrieco-tob committed Apr 2, 2021
1 parent 2e990ba commit 47326e6
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 19 deletions.
44 changes: 25 additions & 19 deletions manticore/ethereum/manticore.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,11 @@
60 * 60,
"Default timeout for matching sha3 for unsound states (see unsound symbolication).",
)
consts.add(
"events",
False,
"Show EVM events in the testcases.",
)


def flagged(flag):
Expand Down Expand Up @@ -1666,27 +1671,28 @@ def _generate_testcase_ex(self, state, message="", name="user"):
json.dump(txlist, txjson)

# logs
with testcase.open_stream("logs") as logs_summary:
is_something_symbolic = False
for log_item in blockchain.logs:
is_log_symbolic = issymbolic(log_item.memlog)
is_something_symbolic = is_log_symbolic or is_something_symbolic
solved_memlog = state.solve_one(log_item.memlog)

logs_summary.write("Address: %x\n" % log_item.address)
logs_summary.write(
"Memlog: %s (%s) %s\n"
% (
binascii.hexlify(solved_memlog).decode(),
printable_bytes(solved_memlog),
flagged(is_log_symbolic),
)
)
logs_summary.write("Topics:\n")
for i, topic in enumerate(log_item.topics):
if consts.events:
with testcase.open_stream("logs") as logs_summary:
is_something_symbolic = False
for log_item in blockchain.logs:
is_log_symbolic = issymbolic(log_item.memlog)
is_something_symbolic = is_log_symbolic or is_something_symbolic
solved_memlog = state.solve_one(log_item.memlog)

logs_summary.write("Address: %x\n" % log_item.address)
logs_summary.write(
"\t%d) %x %s" % (i, state.solve_one(topic), flagged(issymbolic(topic)))
"Memlog: %s (%s) %s\n"
% (
binascii.hexlify(solved_memlog).decode(),
printable_bytes(solved_memlog),
flagged(is_log_symbolic),
)
)
logs_summary.write("Topics:\n")
for i, topic in enumerate(log_item.topics):
logs_summary.write(
"\t%d) %x %s" % (i, state.solve_one(topic), flagged(issymbolic(topic)))
)

with testcase.open_stream("constraints") as smt_summary:
smt_summary.write(str(state.constraints))
Expand Down
2 changes: 2 additions & 0 deletions tests/ethereum/test_general.py
Original file line number Diff line number Diff line change
Expand Up @@ -752,6 +752,8 @@ def test_gen_testcase_only_if(self):
}
}
"""
consts = config.get_group("evm")
consts.events = True
user_account = self.mevm.create_account(balance=10 ** 10)
contract_account = self.mevm.solidity_create_contract(source_code, owner=user_account)
input_sym = self.mevm.make_symbolic_value()
Expand Down

0 comments on commit 47326e6

Please sign in to comment.