* A more complete example to initialize and explore a smart contract with manticore * Removed outdated comments
47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
from manticore.ethereum import ManticoreEVM
|
|
################ Script #######################
|
|
|
|
m = ManticoreEVM()
|
|
#And now make the contract account to analyze
|
|
source_code = '''
|
|
contract C {
|
|
uint n;
|
|
function C(uint x) {
|
|
n = x;
|
|
}
|
|
function f(uint x) payable returns (bool) {
|
|
if (x == n) {
|
|
return true;
|
|
}
|
|
else{
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
'''
|
|
|
|
user_account = m.create_account(balance=1000)
|
|
print "[+] Creating a user account", user_account
|
|
|
|
contract_account = m.solidity_create_contract(source_code, owner=user_account, args=[42])
|
|
print "[+] Creating a contract account", contract_account
|
|
print "[+] Source code:"
|
|
print source_code
|
|
|
|
print "[+] Now the symbolic values"
|
|
symbolic_data = m.make_symbolic_buffer(320)
|
|
symbolic_value = None
|
|
m.transaction(caller=user_account,
|
|
address=contract_account,
|
|
data=symbolic_data,
|
|
value=symbolic_value )
|
|
|
|
|
|
print "[+] Resulting balances are:"
|
|
for state in m.running_states:
|
|
balance = state.platform.get_balance(user_account)
|
|
print state.solve_one(balance)
|
|
|
|
m.finalize()
|
|
print "[+] Look for results in %s"% m.workspace
|