mirror of https://github.com/ConsenSys/mythril
Remove create tests (#1307)
parent
fff443f539
commit
27ce7d19fb
@ -1,73 +0,0 @@ |
||||
from mythril.disassembler.disassembly import Disassembly |
||||
from mythril.laser.ethereum.cfg import Node |
||||
from mythril.laser.ethereum.state.environment import Environment |
||||
from mythril.laser.ethereum.state.machine_state import MachineState |
||||
from mythril.laser.ethereum.state.global_state import GlobalState |
||||
from mythril.laser.ethereum.state.world_state import WorldState |
||||
from mythril.laser.ethereum.instructions import Instruction |
||||
from mythril.laser.ethereum.transaction.transaction_models import MessageCallTransaction |
||||
from mythril.laser.ethereum.state.calldata import ConcreteCalldata |
||||
from mythril.laser.ethereum.svm import LaserEVM |
||||
from mythril.laser.smt import symbol_factory |
||||
|
||||
# contract A { |
||||
# uint256 public val = 10; |
||||
# } |
||||
contract_init_code = "6080604052600a600055348015601457600080fd5b506084806100236000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80633c6bb43614602d575b600080fd5b60336049565b6040518082815260200191505060405180910390f35b6000548156fea265627a7a72315820d3cfe7a909450a953cbd7e47d8c17477f2609baa5208d043e965efec69d1ed9864736f6c634300050b0032" |
||||
contract_runtime_code = "6080604052348015600f57600080fd5b506004361060285760003560e01c80633c6bb43614602d575b600080fd5b60336049565b6040518082815260200191505060405180910390f35b6000548156fea265627a7a72315820d3cfe7a909450a953cbd7e47d8c17477f2609baa5208d043e965efec69d1ed9864736f6c634300050b0032" |
||||
|
||||
last_state = None |
||||
created_contract_account = None |
||||
|
||||
|
||||
def execute_create(): |
||||
global last_state |
||||
global created_contract_account |
||||
if not last_state and not created_contract_account: |
||||
code_raw = [] |
||||
for i in range(len(contract_init_code) // 2): |
||||
code_raw.append(int(contract_init_code[2 * i : 2 * (i + 1)], 16)) |
||||
calldata = ConcreteCalldata(0, code_raw) |
||||
|
||||
world_state = WorldState() |
||||
world_state.node = Node("Contract") |
||||
account = world_state.create_account(balance=1000000, address=101) |
||||
account.code = Disassembly("60a760006000f000") |
||||
environment = Environment(account, None, calldata, None, None, None) |
||||
og_state = GlobalState( |
||||
world_state, environment, world_state.node, MachineState(gas_limit=8000000) |
||||
) |
||||
og_state.transaction_stack.append( |
||||
(MessageCallTransaction(world_state=WorldState(), gas_limit=8000000), None) |
||||
) |
||||
|
||||
laser = LaserEVM() |
||||
states = [og_state] |
||||
last_state = og_state |
||||
for state in states: |
||||
new_states, op_code = laser.execute_state(state) |
||||
last_state = state |
||||
if op_code == "STOP": |
||||
break |
||||
states.extend(new_states) |
||||
|
||||
created_contract_address = last_state.mstate.stack[-1].value |
||||
created_contract_account = last_state.world_state.accounts[ |
||||
created_contract_address |
||||
] |
||||
|
||||
return last_state, created_contract_account |
||||
|
||||
|
||||
def test_create_has_code(): |
||||
last_state, created_contract_account = execute_create() |
||||
assert created_contract_account.code.bytecode == contract_runtime_code |
||||
|
||||
|
||||
def test_create_has_storage(): |
||||
last_state, created_contract_account = execute_create() |
||||
storage = created_contract_account.storage |
||||
# From contract, val = 10. |
||||
assert storage[symbol_factory.BitVecVal(0, 256)] == symbol_factory.BitVecVal( |
||||
10, 256 |
||||
) |
Loading…
Reference in new issue