def test_timestamp(self): contract_a = make_contract("", "uint256") vm = create_evm_vm([contract_a], False, False) arbsys = contract_templates.get_arbsys() arbsys_abi = ContractABI(arbsys) arbinfo = contract_templates.get_info_contract() arbinfo_abi = ContractABI(arbinfo) output_handler = create_output_handler([contract_a, arbinfo_abi]) inbox = value.Tuple([]) inbox = messagestack.addMessage( inbox, value.Tuple( make_msg_val( value.Tuple( [0, address, arbsys_abi.timestampUpperBound(0, 0)]), 0)), ) inbox = messagestack.addMessage( inbox, value.Tuple( make_msg_val( value.Tuple( [0, address, arbsys_abi.currentMessageTimestamp(1, 0)]), 0, 543, )), ) inbox = messagestack.addMessage( inbox, value.Tuple( make_msg_val( value.Tuple([ CALL_TX_TYPE, address, arbsys_abi.call_timestampUpperBound() ]), 34, )), ) vm.env.messages = inbox run_until_block(vm, self) self.assertEqual(len(vm.logs), 3) parsed_out0 = output_handler(vm.logs[0]) parsed_out1 = output_handler(vm.logs[1]) parsed_out2 = output_handler(vm.logs[2]) self.assertIsInstance(parsed_out0, EVMReturn) self.assertIsInstance(parsed_out1, EVMReturn) self.assertIsInstance(parsed_out2, EVMReturn) self.assertEqual(parsed_out0.output_values[0], 73657336) self.assertEqual(parsed_out1.output_values[0], 543) self.assertEqual(parsed_out2.output_values[0], 73657336)
def test_clone(self): evm_code = make_simple_code() contract_a = make_contract(evm_code, "uint256") arbsys = contract_templates.get_arbsys() arbsys_abi = ContractABI(arbsys) vm = create_evm_vm([contract_a], False, False) output_handler = create_output_handler([contract_a, arbsys_abi]) inbox = value.Tuple([]) inbox = messagestack.addMessage( inbox, value.Tuple( make_msg_val( value.Tuple( [0, address, contract_a.testMethod(0, 0)] ) # type # sender ) ), ) inbox = messagestack.addMessage( inbox, value.Tuple( make_msg_val( value.Tuple( [ 0, address, arbsys_abi.cloneContract(1, 0, contract_a.address_string), ] ) # type # sender ) ), ) vm.env.messages = inbox run_until_block(vm, self) self.assertEqual(len(vm.logs), 2) parsed_out0 = output_handler(vm.logs[0]) parsed_out1 = output_handler(vm.logs[1]) self.assertIsInstance(parsed_out0, EVMReturn) self.assertIsInstance(parsed_out1, EVMReturn) correct_value = parsed_out0.output_values[0] created_contract_address = parsed_out1.output_values[0] created_contract = make_contract(evm_code, "uint256", created_contract_address) fake_contract = make_contract( evm_code, "uint256", "0x3c1b4360234d8e65a9e162ef82d70bee71324512" ) output_handler = create_output_handler( [contract_a, arbsys_abi, created_contract, fake_contract] ) inbox = value.Tuple([]) inbox = messagestack.addMessage( inbox, value.Tuple( make_msg_val( value.Tuple( [0, address, fake_contract.testMethod(2, 0)] ) # type # sender ) ), ) inbox = messagestack.addMessage( inbox, value.Tuple( make_msg_val( value.Tuple( [0, address, created_contract.testMethod(3, 0)] ) # type # sender ) ), ) vm.env.messages = inbox run_until_block(vm, self) self.assertEqual(len(vm.logs), 4) parsed_out2 = output_handler(vm.logs[2]) parsed_out3 = output_handler(vm.logs[3]) self.assertIsInstance(parsed_out2, EVMStop) self.assertIsInstance(parsed_out3, EVMReturn) self.assertEqual(parsed_out3.output_values[0], correct_value)
def test_seq(self): contract_a = make_contract("", "uint256") vm = create_evm_vm([contract_a], False, False) arbsys = contract_templates.get_arbsys() arbsys_abi = ContractABI(arbsys) output_handler = create_output_handler([contract_a]) inbox = value.Tuple([]) inbox = messagestack.addMessage( inbox, value.Tuple( make_msg_val( value.Tuple( [1, 2345, value.Tuple([address, 100000])] ) # type # sender ) ), ) inbox = messagestack.addMessage( inbox, value.Tuple( make_msg_val( value.Tuple( [ CALL_TX_TYPE, address, arbsys_abi.call_getTransactionCount(address_string), ] ) # type # sender ) ), ) inbox = messagestack.addMessage( inbox, value.Tuple( make_msg_val( value.Tuple( [ 0, address, arbsys_abi.withdrawEth(0, 0, dest_address_string, 50000), ] ) # type # sender ) ), ) inbox = messagestack.addMessage( inbox, value.Tuple( make_msg_val( value.Tuple( [ CALL_TX_TYPE, address, arbsys_abi.call_getTransactionCount(address_string), ] ) # type # sender ) ), ) inbox = messagestack.addMessage( inbox, value.Tuple( make_msg_val( value.Tuple( [ 0, address, arbsys_abi.withdrawEth(5, 0, dest_address_string, 50000), ] ) # type # sender ) ), ) inbox = messagestack.addMessage( inbox, value.Tuple( make_msg_val( value.Tuple( [ 0, address, arbsys_abi.withdrawEth(1, 0, dest_address_string, 50000), ] ) # type # sender ) ), ) vm.env.messages = inbox run_until_block(vm, self) self.assertEqual(len(vm.logs), 6) parsed_out0 = output_handler(vm.logs[0]) parsed_out1 = output_handler(vm.logs[1]) parsed_out2 = output_handler(vm.logs[2]) parsed_out3 = output_handler(vm.logs[3]) parsed_out4 = output_handler(vm.logs[4]) parsed_out5 = output_handler(vm.logs[5]) self.assertIsInstance(parsed_out0, EVMStop) self.assertIsInstance(parsed_out1, EVMReturn) self.assertIsInstance(parsed_out2, EVMStop) self.assertIsInstance(parsed_out3, EVMReturn) self.assertIsInstance(parsed_out4, EVMInvalidSequence) self.assertIsInstance(parsed_out5, EVMStop) self.assertEqual(parsed_out1.output_values[0], 0) self.assertEqual(parsed_out3.output_values[0], 1) self.assertEqual(len(vm.sent_messages), 2) self.assertEqual( vm.sent_messages[0], value.Tuple([1, address, value.Tuple([dest_address, 50000])]), ) self.assertEqual( vm.sent_messages[1], value.Tuple([1, address, value.Tuple([dest_address, 50000])]), )