def test_transfer_tx(self): amount = 100 func = WasmInvokeFunction('transfer') func.set_params_value( acct1.get_address(), Address.b58decode('AazEvfQPcQ2GEFFPLF1ZLwQ7K5jDn81hve'), amount) tx = sdk.wasm_vm.make_invoke_transaction(self.oep4_contract_address, func, acct2.get_address(), self.gas_price, self.gas_limit) target_payload = '0faeff23255536928b308e5caa38bc2dc14f30c341087472616e7366657246b1a18af6b7c9f8a4602f9f73' \ 'eeb3030f0c29b7d2c124dd088190f709b684e0bc676d70c41b377664000000000000000000000000000000' self.assertEqual(target_payload, tx.payload.hex()) tx.sign_transaction(acct1, acct2) result = sdk.rpc.send_raw_transaction_pre_exec(tx) self.assertEqual('01', result.get('Result')) self.assertEqual(1, result.get('State')) notify_list = Event.get_event_from_event_list_by_contract_address( result.get('Notify'), self.oep4_contract_address) self.assertEqual(self.oep4_contract_address, notify_list[0].get('ContractAddress')) states = notify_list[1].get('States') self.assertEqual('transfer', WasmData.to_utf8(states[0])) self.assertEqual(acct1.get_address().b58encode(), WasmData.to_b58_address(states[1])) self.assertEqual('AazEvfQPcQ2GEFFPLF1ZLwQ7K5jDn81hve', WasmData.to_b58_address(states[2])) self.assertEqual(amount, WasmData.to_int(states[3]))
def test_notify(self): hex_contract_address = '6690b6638251be951dded8c537678200a470c679' notify_args = InvokeFunction('testHello') bool_msg = True int_msg = 1 bytes_msg = b'Hello' str_msg = 'Hello' bytes_address_msg = acct1.get_address().to_bytes() notify_args.set_params_value(bool_msg, int_msg, bytes_msg, str_msg, bytes_address_msg) tx_hash = self.send_tx(hex_contract_address, None, acct1, notify_args) if len(tx_hash) == 0: return time.sleep(randint(10, 15)) event = sdk.rpc.get_contract_event_by_tx_hash(tx_hash) states = Event.get_states_by_contract_address(event, hex_contract_address) states[0] = Data.to_utf8_str(states[0]) self.assertEqual('testHello', states[0]) states[1] = Data.to_bool(states[1]) self.assertEqual(bool_msg, states[1]) states[2] = Data.to_int(states[2]) self.assertEqual(int_msg, states[2]) states[3] = Data.to_bytes(states[3]) self.assertEqual(bytes_msg, states[3]) states[4] = Data.to_utf8_str(states[4]) self.assertEqual(str_msg, states[4]) states[5] = Data.to_b58_address(states[5]) self.assertEqual(acct1.get_address_base58(), states[5])
def test_notify_pre_exec(self): bool_msg = True int_msg = 1024 list_msg = [1, 1024, 2048] str_msg = 'Hello' bytes_address_msg = acct1.get_address().to_bytes() hex_contract_address = '4855735ffadad50e7000d73e1c4e96f38d225f70' func = InvokeFunction('notify_args') func.set_params_value(bool_msg, int_msg, list_msg, str_msg, bytes_address_msg) sdk.rpc.set_address('http://polaris5.ont.io:20336') response = sdk.rpc.send_neo_vm_tx_pre_exec(hex_contract_address, func) self.assertEqual(1, response['State']) self.assertEqual(20000, response['Gas']) notify = response['Notify'][0] self.assertEqual(hex_contract_address, notify['ContractAddress']) states = notify['States'] states[0] = Data.to_utf8_str(states[0]) self.assertEqual('notify args', states[0]) states[1] = Data.to_bool(states[1]) self.assertEqual(True, states[1]) states[2] = Data.to_int(states[2]) self.assertEqual(int_msg, states[2]) states[3] = Data.to_int_list(states[3]) self.assertEqual(list_msg, states[3]) states[4] = Data.to_utf8_str(states[4]) self.assertEqual(str_msg, states[4]) states[5] = Data.to_b58_address(states[5]) self.assertEqual(acct1.get_address_base58(), states[5])
def test_transfer_multi_args_0(self): transfer_1 = [ acct1.get_address().to_bytes(), acct2.get_address().to_bytes(), 10 ] transfer_2 = [ acct2.get_address().to_bytes(), acct3.get_address().to_bytes(), 100 ] transfer_list = [transfer_1, transfer_2] hex_contract_address = 'ca91a73433c016fbcbcf98051d385785a6a5d9be' func = InvokeFunction('transfer_multi') func.set_params_value(transfer_list) tx_hash = sdk.rpc.send_neo_vm_transaction(hex_contract_address, acct1, acct2, self.gas_price, self.gas_limit, func, False) self.assertEqual(64, len(tx_hash)) time.sleep(randint(10, 15)) event = sdk.rpc.get_contract_event_by_tx_hash(tx_hash) states = Event.get_states_by_contract_address(event, hex_contract_address) states[0] = Data.to_utf8_str(states[0]) states[1][0][0] = Data.to_b58_address(states[1][0][0]) self.assertEqual(acct1.get_address_base58(), states[1][0][0]) states[1][0][1] = Data.to_b58_address(states[1][0][1]) self.assertEqual(acct2.get_address_base58(), states[1][0][1]) states[1][0][2] = Data.to_int(states[1][0][2]) self.assertEqual(10, states[1][0][2]) states[1][1][0] = Data.to_b58_address(states[1][1][0]) self.assertEqual(acct2.get_address_base58(), states[1][1][0]) states[1][1][1] = Data.to_b58_address(states[1][1][1]) self.assertEqual(acct3.get_address_base58(), states[1][1][1]) states[1][1][2] = Data.to_int(states[1][1][2]) self.assertEqual(100, states[1][1][2])
def test_get_memory_pool_tx_state(self): tx_hash = '0000000000000000000000000000000000000000000000000000000000000000' with self.assertRaises(SDKException): sdk.rpc.get_memory_pool_tx_state(tx_hash) oep4 = sdk.neo_vm.oep4() oep4.hex_contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9' b58_to_address = 'AazEvfQPcQ2GEFFPLF1ZLwQ7K5jDn81hve' tx = oep4.new_transfer_tx(acct1.get_address(), b58_to_address, 10, acct1.get_address(), 500, 20000000) tx.sign_transaction(acct1) tx_hash = sdk.rpc.send_raw_transaction(tx) self.assertEqual(64, len(tx_hash)) try: tx_state = sdk.rpc.get_memory_pool_tx_state(tx_hash) self.assertTrue(isinstance(tx_state, list)) except SDKException as e: self.assertEqual(59000, e.args[0])
def test_total_supply_tx(self): func = WasmInvokeFunction('totalSupply') tx = sdk.wasm_vm.make_invoke_transaction(self.oep4_contract_address, func, acct1.get_address(), self.gas_price, self.gas_limit) payload = '0faeff23255536928b308e5caa38bc2dc14f30c30c0b746f74616c537570706c79' self.assertEqual(payload, tx.payload.hex()) tx.sign_transaction(acct1) result = sdk.rpc.send_raw_transaction_pre_exec(tx) self.assertEqual(100_000_000_000, WasmData.to_int(result.get('Result')))
def test_write_storage_transaction(self): func = WasmInvokeFunction('storage_write') func.set_params_value('key', 'value') tx = sdk.wasm_vm.make_invoke_transaction( self.basic_test_case_contract_address, func, acct1.get_address(), self.gas_price, self.gas_limit) target_payload = '5daf0ec53b21abfab6459c7ba7f760c376e18ebf180d73746f726167655f7772697465036b65790576616c7565' self.assertEqual(target_payload, tx.payload.hex()) tx.sign_transaction(acct1) tx_hash = sdk.rpc.send_raw_transaction(tx) self.assertEqual(64, len(tx_hash))
async def test_transfer_from_tx(self): acct2_b58_address = acct2.get_address_base58() tx_hash = await sdk.native_vm.aio_ong().transfer_from( acct2, acct1.get_address(), acct2_b58_address, 1, acct2, 500, 20000) self.assertEqual(64, len(tx_hash)) await asyncio.sleep(randint(14, 20)) event = await sdk.aio_rpc.get_contract_event_by_tx_hash(tx_hash) notify_list = Event.get_notify_by_contract_address( event, sdk.native_vm.aio_ong().contract_address) self.assertEqual(2, len(notify_list))
async def test_transfer_from_tx(self): acct2_b58_address = acct2.get_address_base58() tx_hash = await sdk.native_vm.aio_ont().transfer_from(acct2, acct1.get_address(), acct2_b58_address, 1, acct2, self.gas_price, self.gas_limit) self.assertEqual(64, len(tx_hash)) await asyncio.sleep(randint(14, 20)) event = await sdk.aio_rpc.get_contract_event_by_tx_hash(tx_hash) notify = Event.get_notify_by_contract_address(event, sdk.native_vm.aio_ont().contract_address) self.assertEqual('transfer', notify['States'][0]) self.assertEqual(acct1.get_address_base58(), notify['States'][1]) self.assertEqual(acct2.get_address_base58(), notify['States'][2]) self.assertEqual(1, notify['States'][3])
def test_transfer_from_tx(self): acct2_b58_address = acct2.get_address_base58() tx_hash = sdk.native_vm.ong().transfer_from(acct2, acct1.get_address(), acct2_b58_address, 1, acct2, self.gas_price, self.gas_limit) self.assertEqual(64, len(tx_hash)) time.sleep(randint(14, 20)) event = sdk.default_network.get_contract_event_by_tx_hash(tx_hash) notify_list = Event.get_notify_by_contract_address( event, sdk.native_vm.ong().contract_address) self.assertEqual(2, len(notify_list))
def test_oep4_transfer(self): hex_contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9' func = InvokeFunction('transfer') bytes_from_address = acct1.get_address().to_bytes() bytes_to_address = acct2.get_address().to_bytes() value = 1 func.set_params_value(bytes_from_address, bytes_to_address, value) tx_hash = self.send_tx(hex_contract_address, acct1, acct2, func) if len(tx_hash) == 0: return time.sleep(randint(10, 15)) event = sdk.rpc.get_contract_event_by_tx_hash(tx_hash) states = Event.get_states_by_contract_address(event, hex_contract_address) states[0] = Data.to_utf8_str(states[0]) self.assertEqual('transfer', states[0]) states[1] = Data.to_b58_address(states[1]) self.assertEqual(acct1.get_address().b58encode(), states[1]) states[2] = Data.to_b58_address(states[2]) self.assertEqual(acct2.get_address().b58encode(), states[2]) states[3] = Data.to_int(states[3]) self.assertEqual(value, states[3])
def test_oep4_balance_of(self): hex_contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9' func = InvokeFunction('balanceOf') self.assertEqual(bytearray(b'\x00\xc1\tbalanceOf'), func.create_invoke_code()) bytes_address = acct1.get_address().to_bytes() func.set_params_value(bytes_address) target = bytearray( b'\x14F\xb1\xa1\x8a\xf6\xb7\xc9\xf8\xa4`/\x9fs\xee\xb3\x03\x0f\x0c)\xb7Q\xc1\tbalanceOf' ) self.assertEqual(target, func.create_invoke_code()) result = sdk.rpc.send_neo_vm_tx_pre_exec(hex_contract_address, func) balance = result['Result'] balance = Data.to_int(balance) self.assertGreater(balance, 100)
def test_oep4_transfer_multi(self): hex_contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9' bytes_from_address1 = acct1.get_address().to_bytes() bytes_to_address1 = acct2.get_address().to_bytes() value1 = 2 transfer1 = [bytes_from_address1, bytes_to_address1, value1] bytes_from_address2 = acct2.get_address().to_bytes() bytes_to_address2 = acct3.get_address().to_bytes() value2 = 1 transfer2 = [bytes_from_address2, bytes_to_address2, value2] func = InvokeFunction('transferMulti') func.set_params_value(transfer1, transfer2) tx_hash = sdk.default_network.send_neo_vm_transaction( hex_contract_address, acct1, acct2, self.gas_price, self.gas_limit, func, False) time.sleep(randint(10, 15)) event = sdk.rpc.get_contract_event_by_tx_hash(tx_hash) states_list = Event.get_states_by_contract_address( event, hex_contract_address) states_list[0][0] = Data.to_utf8_str(states_list[0][0]) self.assertEqual('transfer', states_list[0][0]) states_list[0][1] = Data.to_b58_address(states_list[0][1]) self.assertEqual(acct1.get_address().b58encode(), states_list[0][1]) states_list[0][2] = Data.to_b58_address(states_list[0][2]) self.assertEqual(acct2.get_address().b58encode(), states_list[0][2]) states_list[0][3] = Data.to_int(states_list[0][3]) self.assertEqual(value1, states_list[0][3]) states_list[1][0] = Data.to_utf8_str(states_list[1][0]) self.assertEqual('transfer', states_list[1][0]) states_list[1][1] = Data.to_b58_address(states_list[1][1]) self.assertEqual(acct2.get_address().b58encode(), states_list[1][1]) states_list[1][2] = Data.to_b58_address(states_list[1][2]) self.assertEqual(acct3.get_address().b58encode(), states_list[1][2]) states_list[1][3] = Data.to_int(states_list[1][3]) self.assertEqual(value2, states_list[1][3])
async def test_transfer(self): amount = 1 ont = sdk.native_vm.aio_ont() tx_hash = await ont.transfer(acct2, acct1.get_address(), amount, acct4, self.gas_price, self.gas_limit) await asyncio.sleep(randint(14, 20)) event = await sdk.aio_rpc.get_contract_event_by_tx_hash(tx_hash) notify = Event.get_notify_by_contract_address(event, ont.contract_address) self.assertEqual('transfer', notify['States'][0]) self.assertEqual(acct2.get_address_base58(), notify['States'][1]) self.assertEqual(acct1.get_address_base58(), notify['States'][2]) self.assertEqual(amount, notify['States'][3]) notify = Event.get_notify_by_contract_address(event, sdk.native_vm.aio_ong().contract_address) self.assertEqual('transfer', notify['States'][0]) self.assertEqual(acct4.get_address_base58(), notify['States'][1]) self.assertEqual(self.gas_price * self.gas_limit, notify['States'][3])
async def test_withdraw_ong(self): amount, gas_price, gas_limit = 1, 500, 20000 tx_hash = await sdk.native_vm.aio_ong().withdraw( acct1, acct1.get_address(), amount, acct2, gas_price, gas_limit) self.assertEqual(64, len(tx_hash)) await asyncio.sleep(randint(14, 20)) event = await sdk.aio_rpc.get_contract_event_by_tx_hash(tx_hash) notify = Event.get_notify_by_contract_address( event, sdk.native_vm.aio_ong().contract_address) self.assertEqual('transfer', notify[0]['States'][0]) self.assertEqual(acct1.get_address_base58(), notify[0]['States'][2]) self.assertEqual(amount, notify[0]['States'][3]) notify = Event.get_notify_by_contract_address( event, sdk.native_vm.aio_ong().contract_address) self.assertEqual('transfer', notify[1]['States'][0]) self.assertEqual(acct2.get_address_base58(), notify[1]['States'][1]) self.assertEqual(gas_price * gas_limit, notify[1]['States'][3])
def test_withdraw_ong(self): amount = 1 tx_hash = sdk.native_vm.ong().withdraw(acct1, acct1.get_address(), amount, acct2, self.gas_price, self.gas_limit) self.assertEqual(64, len(tx_hash)) time.sleep(randint(14, 20)) event = sdk.default_network.get_contract_event_by_tx_hash(tx_hash) notify = Event.get_notify_by_contract_address( event, sdk.native_vm.ong().contract_address) self.assertEqual('transfer', notify[0]['States'][0]) self.assertEqual(acct1.get_address_base58(), notify[0]['States'][2]) self.assertEqual(amount, notify[0]['States'][3]) notify = Event.get_notify_by_contract_address( event, sdk.native_vm.ong().contract_address) self.assertEqual('transfer', notify[1]['States'][0]) self.assertEqual(acct2.get_address_base58(), notify[1]['States'][1]) self.assertEqual(self.gas_price * self.gas_limit, notify[1]['States'][3])
async def test_allowance(self): oep4 = sdk.neo_vm.aio_oep4() oep4.hex_contract_address = contract_address allowance = await oep4.allowance(acct1.get_address(), acct2.get_address()) self.assertGreaterEqual(allowance, 1)
def test_approve(self): tx_hash = sdk.native_vm.gas().approve(acct2, acct1.get_address(), 10, acct2, 500, 20000) self.assertEqual(64, len(tx_hash))