def test_native_vm_transaction(self): amount = 1 asset = sdk.native_vm.asset() tx = asset.new_transfer_transaction('ont', acct2.get_address_base58(), acct1.get_address_base58(), amount, acct1.get_address_base58(), 20000, 500) tx.sign_transaction(acct1) tx.add_sign_transaction(acct2) try: tx_hash = sdk.rpc.send_raw_transaction(tx) self.assertEqual(64, len(tx_hash)) except SDKException as e: self.assertIn('[Transfer] balance insufficient', e.args[1]) tx = asset.new_transfer_transaction('ont', acct1.get_address_base58(), acct2.get_address_base58(), amount, acct1.get_address_base58(), 20000, 500) tx.sign_transaction(acct2) tx.add_sign_transaction(acct1) try: tx_hash = sdk.rpc.send_raw_transaction(tx) self.assertEqual(64, len(tx_hash)) except SDKException as e: self.assertIn('[Transfer] balance insufficient', e.args[1])
def test_get_balance(self): acct_balance = sdk.rpc.get_balance(acct1.get_address_base58()) try: acct_balance['ont'] except KeyError: raised = True self.assertFalse(raised, 'Exception raised') try: acct_balance['ong'] except KeyError: raised = True self.assertFalse(raised, 'Exception raised') acct_balance_2 = sdk.rpc.get_balance(acct1.get_address_base58()) try: acct_balance_2['ont'] except KeyError: raised = True self.assertFalse(raised, 'Exception raised') try: acct_balance_2['ong'] except KeyError: raised = True self.assertFalse(raised, 'Exception raised') acct_balance_3 = sdk.rpc.get_balance(acct1.get_address_base58()) try: acct_balance_3['ont'] except KeyError: raised = True self.assertFalse(raised, 'Exception raised') try: acct_balance_3['ong'] except KeyError: raised = True self.assertFalse(raised, 'Exception raised') acct_balance_4 = sdk.rpc.get_balance(acct1.get_address_base58()) try: acct_balance_4['ont'] except KeyError: raised = True self.assertFalse(raised, 'Exception raised') try: acct_balance_4['ong'] except KeyError: raised = True self.assertFalse(raised, 'Exception raised')
def test_unbound_ong(self): b58_address1 = acct1.get_address_base58() b58_address2 = acct2.get_address_base58() b58_address3 = acct3.get_address_base58() b58_address4 = acct4.get_address_base58() try: acct1_unbound_ong = sdk.native_vm.asset().query_unbound_ong( b58_address1) self.assertGreaterEqual(acct1_unbound_ong, 0) except SDKException as e: self.assertIn('ConnectTimeout', e.args[1]) try: acct2_unbound_ong = sdk.native_vm.asset().query_unbound_ong( b58_address2) self.assertGreaterEqual(acct2_unbound_ong, 0) except SDKException as e: self.assertIn('ConnectTimeout', e.args[1]) try: acct3_unbound_ong = sdk.native_vm.asset().query_unbound_ong( b58_address3) self.assertGreaterEqual(acct3_unbound_ong, 0) except SDKException as e: self.assertIn('ConnectTimeout', e.args[1]) try: acct4_unbound_ong = sdk.native_vm.asset().query_unbound_ong( b58_address4) self.assertGreaterEqual(acct4_unbound_ong, 0) except SDKException as e: self.assertIn('ConnectTimeout', e.args[1])
def test_new_transfer_transaction(self): sdk.rpc.connect_to_test_net() b58_from_address = acct1.get_address_base58() b58_to_address = acct2.get_address_base58() b58_payer_address = b58_to_address amount = 1 gas_price = 500 gas_limit = 20000 tx = sdk.native_vm.asset().new_transfer_transaction( 'ont', b58_from_address, b58_to_address, amount, b58_payer_address, gas_limit, gas_price) tx.sign_transaction(acct1) tx.add_sign_transaction(acct2) try: tx_hash = sdk.rpc.send_raw_transaction(tx) self.assertEqual(64, len(tx_hash)) except SDKException as e: self.assertIn('balance insufficient', e.args[1]) return time.sleep(randint(7, 12)) event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) ont_contract_address = '0100000000000000000000000000000000000000' notify = ContractEventParser.get_notify_list_by_contract_address( event, ont_contract_address) self.assertEqual('transfer', notify['States'][0]) self.assertEqual(b58_from_address, notify['States'][1]) self.assertEqual(b58_to_address, notify['States'][2]) self.assertEqual(amount, notify['States'][3]) ong_contract_address = '0200000000000000000000000000000000000000' notify = ContractEventParser.get_notify_list_by_contract_address( event, ong_contract_address) self.assertEqual('transfer', notify['States'][0]) self.assertEqual(b58_payer_address, notify['States'][1]) self.assertEqual(gas_price * gas_limit, notify['States'][3])
def test_transfer_multi_args(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 ] hex_contract_address = 'ca91a73433c016fbcbcf98051d385785a6a5d9be' func = InvokeFunction('transfer_multi_args') func.set_params_value(transfer_1, transfer_2) tx_hash = self.send_tx(hex_contract_address, acct1, acct2, func) if len(tx_hash) == 0: return time.sleep(randint(7, 12)) event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) states = ContractEventParser.get_states_by_contract_address( event, hex_contract_address) states[0] = ContractDataParser.to_utf8_str(states[0]) self.assertEqual('transfer_multi_args', states[0]) states[1][0][0] = ContractDataParser.to_b58_address(states[1][0][0]) self.assertEqual(acct1.get_address_base58(), states[1][0][0]) states[1][0][1] = ContractDataParser.to_b58_address(states[1][0][1]) self.assertEqual(acct2.get_address_base58(), states[1][0][1]) states[1][0][2] = ContractDataParser.to_int(states[1][0][2]) self.assertEqual(10, states[1][0][2]) states[1][1][0] = ContractDataParser.to_b58_address(states[1][1][0]) self.assertEqual(acct2.get_address_base58(), states[1][1][0]) states[1][1][1] = ContractDataParser.to_b58_address(states[1][1][1]) self.assertEqual(acct3.get_address_base58(), states[1][1][1]) states[1][1][2] = ContractDataParser.to_int(states[1][1][2]) self.assertEqual(100, states[1][1][2])
def test_add_multi_sign_transaction(self): asset = sdk.native_vm.asset() pub_keys = [acct1.get_public_key_bytes(), acct2.get_public_key_bytes(), acct3.get_public_key_bytes()] m = 2 b58_multi_address = Address.b58_address_from_multi_pub_keys(m, pub_keys) amount = 1 gas_price = 500 gas_limit = 20000 tx_hash = asset.send_transfer('ont', acct2, b58_multi_address, amount, acct2, gas_limit, gas_price) self.assertEqual(64, len(tx_hash)) tx_hash = asset.send_transfer('ong', acct2, b58_multi_address, amount, acct2, gas_limit, gas_price) self.assertEqual(64, len(tx_hash)) b58_acct1_address = acct1.get_address_base58() b58_acct2_address = acct2.get_address_base58() self.assertEqual('ATyGGJBnANKFbf2tQMp4muUEZK7KuZ52k4', b58_multi_address) tx = sdk.native_vm.asset().new_transfer_transaction('ong', b58_acct1_address, b58_multi_address, amount, b58_acct1_address, gas_limit, gas_price) tx.add_sign_transaction(acct1) tx = sdk.native_vm.asset().new_transfer_transaction('ont', b58_multi_address, b58_acct2_address, amount, b58_acct1_address, gas_limit, gas_price) tx.sign_transaction(acct1) tx.add_multi_sign_transaction(m, pub_keys, acct1) tx.add_multi_sign_transaction(m, pub_keys, acct2) tx_hash = sdk.rpc.send_raw_transaction(tx) self.assertEqual(64, len(tx_hash))
def test_new_transfer_from_transaction(self): sdk.rpc.connect_to_test_net() sender = acct2 b58_sender_address = sender.get_address_base58() b58_payer_address = sender.get_address_base58() b58_from_address = acct1.get_address_base58() b58_recv_address = sender.get_address_base58() amount = 1 gas_limit = 20000 gas_price = 500 tx = sdk.native_vm.asset().new_transfer_from_transaction('ont', b58_sender_address, b58_from_address, b58_recv_address, amount, b58_payer_address, gas_limit, gas_price) tx.add_sign_transaction(sender) try: tx_hash = sdk.rpc.send_raw_transaction(tx) except SDKException as e: msg1 = 'balance insufficient' msg2 = 'already in the tx pool' self.assertTrue(msg1 in e.args[1] or msg2 in e.args[1]) return self.assertEqual(64, len(tx_hash)) time.sleep(randint(6, 10)) event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) self.assertEqual('0100000000000000000000000000000000000000', event['Notify'][0]['ContractAddress']) self.assertEqual('0200000000000000000000000000000000000000', event['Notify'][1]['ContractAddress'])
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 = sdk.rpc.send_neo_vm_transaction(hex_contract_address, None, acct1, gas_limit, gas_price, notify_args, False) time.sleep(randint(6, 10)) event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) states = ContractEventParser.get_states_by_contract_address( event, hex_contract_address) states[0] = ContractDataParser.to_utf8_str(states[0]) self.assertEqual('testHello', states[0]) states[1] = ContractDataParser.to_bool(states[1]) self.assertEqual(bool_msg, states[1]) states[2] = ContractDataParser.to_int(states[2]) self.assertEqual(int_msg, states[2]) states[3] = ContractDataParser.to_bytes(states[3]) self.assertEqual(bytes_msg, states[3]) states[4] = ContractDataParser.to_utf8_str(states[4]) self.assertEqual(str_msg, states[4]) states[5] = ContractDataParser.to_b58_address(states[5]) self.assertEqual(acct1.get_address_base58(), states[5])
def test_allowance(self): contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9' oep4 = sdk.neo_vm.oep4() oep4.hex_contract_address = contract_address b58_owner_address = acct1.get_address_base58() b58_spender_address = acct2.get_address_base58() allowance = oep4.allowance(b58_owner_address, b58_spender_address) self.assertGreaterEqual(allowance, 1)
def test_new_withdraw_ong_transaction(self): sdk.rpc.connect_to_test_net() b58_claimer_address = acct1.get_address_base58() b58_recv_address = acct1.get_address_base58() b58_payer_address = acct1.get_address_base58() amount = 1 gas_price = 500 gas_limit = 20000 for _ in range(3): tx = sdk.native_vm.asset().new_withdraw_ong_transaction( b58_claimer_address, b58_recv_address, amount, b58_payer_address, gas_limit, gas_price) tx.add_sign_transaction(acct1) try: tx_hash = sdk.rpc.send_raw_transaction(tx) self.assertEqual(64, len(tx_hash)) except SDKException as e: msg = 'already in the tx pool' self.assertTrue(msg in e.args[1])
def test_transfer_multi(self): sdk = OntologySdk() sdk.rpc.connect_to_test_net() contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9' oep4 = sdk.neo_vm.oep4() oep4.hex_contract_address = contract_address transfer_list = list() b58_from_address1 = acct1.get_address_base58() b58_from_address2 = acct2.get_address_base58() hex_from_address1 = acct1.get_address_hex() hex_from_address2 = acct2.get_address_hex() from_address_list = [hex_from_address1, hex_from_address2] b58_to_address1 = acct2.get_address_base58() b58_to_address2 = acct3.get_address_base58() hex_to_address1 = acct2.get_address_hex() hex_to_address2 = acct3.get_address_hex() to_address_list = [hex_to_address1, hex_to_address2] value_list = [1, 2] transfer1 = [b58_from_address1, b58_to_address1, value_list[0]] transfer2 = [b58_from_address2, b58_to_address2, value_list[1]] signers = [acct1, acct2, acct3] transfer_list.append(transfer1) transfer_list.append(transfer2) gas_limit = 20000000 gas_price = 500 tx_hash = oep4.transfer_multi(transfer_list, signers[0], signers, gas_limit, gas_price) self.assertEqual(64, len(tx_hash)) sdk = OntologySdk() sdk.rpc.connect_to_test_net() time.sleep(randint(6, 10)) try: event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) notify_list = event['Notify'][:-1] self.assertEqual(len(transfer_list), len(notify_list)) for index, notify in enumerate(notify_list): self.assertEqual( 'transfer', ContractDataParser.to_utf8_str(notify['States'][0])) self.assertEqual(from_address_list[index], notify['States'][1]) self.assertEqual(to_address_list[index], notify['States'][2]) notify_value = ContractDataParser.to_int(notify['States'][3]) self.assertEqual(value_list[index], notify_value) except SDKException as e: raised = False self.assertTrue(raised, e)
def test_unbound_ong(self): acct1_unbound_ong = sdk.native_vm.asset().query_unbound_ong( acct1.get_address_base58()) self.assertGreaterEqual(int(acct1_unbound_ong), 0) acct2_unbound_ong = sdk.native_vm.asset().query_unbound_ong( acct4.get_address_base58()) self.assertGreaterEqual(int(acct2_unbound_ong), 0) acct3_unbound_ong = sdk.native_vm.asset().query_unbound_ong( acct4.get_address_base58()) self.assertGreaterEqual(int(acct3_unbound_ong), 0) acct4_unbound_ong = sdk.native_vm.asset().query_unbound_ong( acct4.get_address_base58()) self.assertGreaterEqual(int(acct4_unbound_ong), 0)
def test_tx_signature(self): b58_from_address = acct1.get_address_base58() b58_to_address = acct2.get_address_base58() tx = sdk.native_vm.asset().new_transfer_transaction( 'ont', b58_from_address, b58_to_address, 10, b58_from_address, 20000, 0) tx.sign_transaction(acct1) self.assertTrue( acct1.verify_signature(tx.hash256(), tx.sig_list[0].sig_data[0])) self.assertFalse( acct2.verify_signature(tx.hash256(), tx.sig_list[0].sig_data[0])) tx.add_sign_transaction(acct2) self.assertTrue( acct2.verify_signature(tx.hash256(), tx.sig_list[1].sig_data[0]))
def test_transfer(self): sdk.rpc.connect_to_test_net() b58_to_address = acct1.get_address_base58() try: tx_hash = sdk.native_vm.asset().transfer('ont', acct2, b58_to_address, 1, acct4, 20000, 500) except SDKException as e: self.assertIn('balance insufficient', e.args[1]) return time.sleep(randint(7, 12)) event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) self.assertEqual('0100000000000000000000000000000000000000', event['Notify'][0]['ContractAddress']) self.assertEqual('0200000000000000000000000000000000000000', event['Notify'][1]['ContractAddress'])
def test_new_approve_transaction(self): b58_send_address = acct2.get_address_base58() b58_payer_address = acct2.get_address_base58() b58_recv_address = acct1.get_address_base58() amount = 5 gas_price = 500 gas_limit = 20000 try: tx = sdk.native_vm.asset().new_approve_transaction( 'ont', b58_send_address, b58_recv_address, amount, b58_payer_address, gas_limit, gas_price) tx.sign_transaction(acct2) tx_hash = sdk.rpc.send_raw_transaction(tx) self.assertEqual(64, len(tx_hash)) except SDKException as e: self.assertIn('balance insufficient', e.args[1])
def test_send_transfer(self): sdk.rpc.connect_to_test_net() asset = sdk.native_vm.asset() from_acct = acct2 payer = acct4 b58_to_address = acct1.get_address_base58() amount = 1 gas_price = 500 gas_limit = 20000 try: tx_hash = asset.send_transfer('ont', from_acct, b58_to_address, amount, payer, gas_limit, gas_price) except SDKException as e: self.assertIn('balance insufficient', e.args[1]) return time.sleep(randint(6, 10)) event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) self.assertEqual('0100000000000000000000000000000000000000', event['Notify'][0]['ContractAddress']) self.assertEqual('0200000000000000000000000000000000000000', event['Notify'][1]['ContractAddress'])
def test_transfer_multi(self): contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9' oep4 = sdk.neo_vm.oep4() oep4.hex_contract_address = contract_address transfer_list = list() b58_from_address1 = acct1.get_address_base58() b58_from_address2 = acct2.get_address_base58() from_address_list = [b58_from_address1, b58_from_address2] b58_to_address1 = acct2.get_address_base58() b58_to_address2 = acct3.get_address_base58() to_address_list = [b58_to_address1, b58_to_address2] value_list = [1, 2] transfer1 = [b58_from_address1, b58_to_address1, value_list[0]] transfer2 = [b58_from_address2, b58_to_address2, value_list[1]] signers = [acct1, acct2, acct3] transfer_list.append(transfer1) transfer_list.append(transfer2) gas_limit = 20000000 gas_price = 500 tx_hash = oep4.transfer_multi(transfer_list, signers[0], signers, gas_limit, gas_price) self.assertEqual(64, len(tx_hash)) time.sleep(randint(6, 10)) notify_list = oep4.query_multi_transfer_event(tx_hash) try: self.assertEqual(len(transfer_list), len(notify_list)) for index, notify in enumerate(notify_list): self.assertEqual('transfer', notify['States'][0]) self.assertEqual(from_address_list[index], notify['States'][1]) self.assertEqual(to_address_list[index], notify['States'][2]) self.assertEqual(value_list[index], notify['States'][3]) except SDKException as e: raised = False self.assertTrue(raised, e)
def test_query_balance(self): b58_address = acct1.get_address_base58() try: balance = sdk.native_vm.asset().query_balance('ont', b58_address) self.assertTrue(isinstance(balance, int)) self.assertGreaterEqual(balance, 0) except SDKException as e: self.assertIn('ConnectTimeout', e.args[1]) try: balance = sdk.native_vm.asset().query_balance('ong', b58_address) self.assertTrue(isinstance(balance, int)) self.assertGreaterEqual(balance, 0) except SDKException as e: self.assertIn('ConnectTimeout', e.args[1]) b58_address = acct2.get_address_base58() try: balance = sdk.native_vm.asset().query_balance('ong', b58_address) self.assertTrue(isinstance(balance, int)) self.assertGreaterEqual(balance, 1) except SDKException as e: self.assertIn('ConnectTimeout', e.args[1])
def test_transfer_from(self): sdk.rpc.connect_to_test_net() b58_from_address = acct1.get_address_base58() b58_recv_address = acct2.get_address_base58() for _ in range(3): try: tx_hash = sdk.native_vm.asset().transfer_from( 'ont', acct2, b58_from_address, b58_recv_address, 1, acct2, 20000, 500) self.assertEqual(64, len(tx_hash)) time.sleep(randint(7, 12)) event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) self.assertEqual('0100000000000000000000000000000000000000', event['Notify'][0]['ContractAddress']) self.assertEqual('0200000000000000000000000000000000000000', event['Notify'][1]['ContractAddress']) except SDKException as e: msg1 = 'balance insufficient' msg2 = 'ConnectTimeout' msg3 = 'already in the tx pool' self.assertTrue(msg1 in e.args[1] or msg2 in e.args[1] or msg3 in e.args[1])
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' notify_args = InvokeFunction('notify_args') notify_args.set_params_value(bool_msg, int_msg, list_msg, str_msg, bytes_address_msg) rpc_address = 'http://polaris5.ont.io:20336' sdk.set_rpc_address(rpc_address) try: response = sdk.rpc.send_neo_vm_transaction(hex_contract_address, None, None, 0, 0, notify_args, True) except SDKException as e: self.assertIn('already in the tx pool', e.args[1]) return sdk.rpc.connect_to_test_net() response['Result'] = ContractDataParser.to_bool(response['Result']) self.assertEqual(1, response['State']) self.assertEqual(20000, response['Gas']) self.assertEqual(True, response['Result']) notify = response['Notify'][0] self.assertEqual(hex_contract_address, notify['ContractAddress']) states = notify['States'] states[0] = ContractDataParser.to_utf8_str(states[0]) self.assertEqual('notify args', states[0]) states[1] = ContractDataParser.to_bool(states[1]) self.assertEqual(True, states[1]) states[2] = ContractDataParser.to_int(states[2]) self.assertEqual(int_msg, states[2]) states[3] = ContractDataParser.to_int_list(states[3]) self.assertEqual(list_msg, states[3]) states[4] = ContractDataParser.to_utf8_str(states[4]) self.assertEqual(str_msg, states[4]) states[5] = ContractDataParser.to_b58_address(states[5]) self.assertEqual(acct1.get_address_base58(), states[5])
def test_get_balance(self): sdk = OntologySdk() sdk.rpc.connect_to_test_net() base58_address = 'ANH5bHrrt111XwNEnuPZj6u95Dd6u7G4D6' address_balance = sdk.rpc.get_balance(base58_address) try: address_balance['ont'] except KeyError: raised = True self.assertFalse(raised, 'Exception raised') try: address_balance['ong'] except KeyError: raised = True self.assertFalse(raised, 'Exception raised') address_balance = sdk.rpc.get_balance(acct1.get_address_base58()) try: address_balance['ont'] except KeyError: raised = True self.assertFalse(raised, 'Exception raised') try: address_balance['ong'] except KeyError: raised = True self.assertFalse(raised, 'Exception raised') multi_address_balance = sdk.rpc.get_balance(multi_address.b58encode()) try: multi_address_balance['ont'] except KeyError: raised = True self.assertFalse(raised, 'Exception raised') try: multi_address_balance['ong'] except KeyError: raised = True self.assertFalse(raised, 'Exception raised')
def test_transfer_multi_args(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 ] hex_contract_address = 'ca91a73433c016fbcbcf98051d385785a6a5d9be' func = InvokeFunction('transfer_multi_args') func.set_params_value(transfer_1, transfer_2) try: tx_hash = sdk.rpc.send_neo_vm_transaction(hex_contract_address, acct1, acct2, gas_limit, gas_price, func, False) self.assertEqual(64, len(tx_hash)) except SDKException as e: self.assertIn('already in the tx pool', e.args[1]) return time.sleep(randint(6, 10)) event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) states = ContractEventParser.get_states_by_contract_address( event, hex_contract_address) states[0] = ContractDataParser.to_utf8_str(states[0]) self.assertEqual('transfer_multi_args', states[0]) states[1][0][0] = ContractDataParser.to_b58_address(states[1][0][0]) self.assertEqual(acct1.get_address_base58(), states[1][0][0]) states[1][0][1] = ContractDataParser.to_b58_address(states[1][0][1]) self.assertEqual(acct2.get_address_base58(), states[1][0][1]) states[1][0][2] = ContractDataParser.to_int(states[1][0][2]) self.assertEqual(10, states[1][0][2]) states[1][1][0] = ContractDataParser.to_b58_address(states[1][1][0]) self.assertEqual(acct2.get_address_base58(), states[1][1][0]) states[1][1][1] = ContractDataParser.to_b58_address(states[1][1][1]) self.assertEqual(acct3.get_address_base58(), states[1][1][1]) states[1][1][2] = ContractDataParser.to_int(states[1][1][2]) self.assertEqual(100, states[1][1][2])
def test_oep4_approve(self): hex_contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9' func = InvokeFunction('approve') bytes_owner_address = acct1.get_address().to_bytes() bytes_spender_address = acct2.get_address().to_bytes() amount = 10 func.set_params_value(bytes_owner_address, bytes_spender_address, amount) tx_hash = sdk.rpc.send_neo_vm_transaction(hex_contract_address, acct1, acct2, gas_limit, gas_price, func, False) self.assertEqual(64, len(tx_hash)) time.sleep(randint(6, 10)) event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) states = ContractEventParser.get_states_by_contract_address( event, hex_contract_address) states[0] = ContractDataParser.to_utf8_str(states[0]) self.assertEqual('approval', states[0]) states[1] = ContractDataParser.to_b58_address(states[1]) self.assertEqual(acct1.get_address_base58(), states[1]) states[2] = ContractDataParser.to_b58_address(states[2]) self.assertEqual(acct2.get_address_base58(), states[2]) states[3] = ContractDataParser.to_int(states[3]) self.assertEqual(amount, states[3])
def test_multi_serialize(self): pub_keys = [ acct1.get_public_key_bytes(), acct2.get_public_key_bytes(), acct3.get_public_key_bytes() ] m = 2 multi_address = Address.address_from_multi_pub_keys(m, pub_keys) b58_multi_address = multi_address.b58encode() b58_acct1_address = acct1.get_address_base58() b58_acct2_address = acct2.get_address_base58() gas_price = 500 gas_limit = 20000 tx1 = sdk.native_vm.asset().new_transfer_transaction( 'ong', b58_multi_address, b58_acct2_address, 1000000000, b58_acct1_address, gas_limit, gas_price) tx_bytes = tx1.serialize() tx2 = Transaction.deserialize_from(tx_bytes) self.assertEqual(dict(tx1), dict(tx2)) tx2.sign_transaction(acct1) tx_bytes = tx2.serialize() tx3 = Transaction.deserialize_from(tx_bytes) self.assertEqual(dict(tx2), dict(tx3)) tx3.add_multi_sign_transaction(m, pub_keys, acct1) tx_bytes = tx3.serialize() tx4 = Transaction.deserialize_from(tx_bytes) self.assertEqual(dict(tx3), dict(tx4)) tx4.add_multi_sign_transaction(m, pub_keys, acct2) tx_bytes = tx4.serialize() tx5 = Transaction.deserialize_from(tx_bytes) self.assertEqual(dict(tx4), dict(tx5)) tx_hash = sdk.rpc.send_raw_transaction(tx5) self.assertEqual(64, len(tx_hash)) sleep(6) event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) contract_address = '0200000000000000000000000000000000000000' notify = ContractEventParser.get_notify_list_by_contract_address( event, contract_address) for event in notify: self.assertEqual(event['States'][0], 'transfer') multi_address = Address.address_from_multi_pub_keys(m, pub_keys[::-1]) b58_multi_address = multi_address.b58encode() b58_acct1_address = acct1.get_address_base58() b58_acct2_address = acct2.get_address_base58() tx1 = sdk.native_vm.asset().new_transfer_transaction( 'ong', b58_multi_address, b58_acct2_address, 100000, b58_acct1_address, gas_limit, gas_price) tx_bytes = tx1.serialize() tx2 = Transaction.deserialize_from(tx_bytes) self.assertEqual(dict(tx1), dict(tx2)) tx2.sign_transaction(acct1) tx_bytes = tx2.serialize() tx3 = Transaction.deserialize_from(tx_bytes) self.assertEqual(dict(tx2), dict(tx3)) tx3.add_multi_sign_transaction(m, pub_keys, acct1) tx_bytes = tx3.serialize() tx4 = Transaction.deserialize_from(tx_bytes) self.assertEqual(dict(tx3), dict(tx4)) tx4.add_multi_sign_transaction(m, pub_keys, acct2) tx_bytes = tx4.serialize() tx5 = Transaction.deserialize_from(tx_bytes) self.assertEqual(dict(tx4), dict(tx5)) tx_hash = sdk.rpc.send_raw_transaction(tx5) self.assertEqual(64, len(tx_hash)) sleep(6) event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) contract_address = '0200000000000000000000000000000000000000' notify = ContractEventParser.get_notify_list_by_contract_address( event, contract_address) for event in notify: self.assertEqual(event['States'][0], 'transfer')