manticore/examples/evm/coverage.py
Mark Mossberg 7875aaf5fd
Rename manticore.seth to manticore.ethereum (#665)
* Rename file

* Fixup refs

* update logging

* Update docs

* Update docstr

* Clean docs
2017-12-22 14:05:37 -05:00

39 lines
1.1 KiB
Python

from manticore.ethereum import ManticoreEVM
m = ManticoreEVM()
m.verbosity(3)
#And now make the contract account to analyze
source_code = file('coverage.sol').read()
user_account = m.create_account(balance=1000)
bytecode = m.compile(source_code)
#Initialize contract
contract_account = m.create_contract(owner=user_account,
balance=0,
init=bytecode)
m.transaction( caller=user_account,
address=contract_account,
value=None,
data=m.SByte(164),
)
#Up to here we get only ~30% coverage.
#We need 2 transactions to fully explore the contract
m.transaction( caller=user_account,
address=contract_account,
value=None,
data=m.SByte(164),
)
print "[+] There are %d reverted states now"% len(m.final_state_ids)
print "[+] There are %d alive states now"% len(m.running_state_ids)
for state_id in m.running_state_ids:
print m.report(state_id)
print "[+] Global coverage: %x"% contract_account
print m.coverage(contract_account)