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_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_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_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_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_remove_attribute_transaction(self): ont_id = sdk.native_vm.ont_id() hex_public_key = acct2.get_public_key_hex() b58_address = acct2.get_address_base58() acct_did = "did:ont:" + b58_address gas_limit = 20000 gas_price = 500 path = 'try' tx = ont_id.new_remove_attribute_transaction(acct_did, hex_public_key, path, b58_address, gas_limit, gas_price) tx.sign_transaction(acct2) try: tx_hash = sdk.rpc.send_raw_transaction(tx) self.assertEqual(tx.hash256_explorer(), tx_hash) time.sleep(randint(6, 10)) notify = sdk.rpc.get_smart_contract_event_by_tx_hash( tx_hash)['Notify'] self.assertEqual('Attribute', notify[0]['States'][0]) self.assertEqual('remove', notify[0]['States'][1]) self.assertEqual(acct_did, notify[0]['States'][2]) self.assertEqual('try', bytes.fromhex(notify[0]['States'][3]).decode()) except SDKException as e: self.assertEqual(59000, e.args[0]) self.assertIn('attribute not exist', e.args[1])
async def subscribe_oep4_case(self, event_loop): from_acct = acct1 hex_contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9' b58_to_address = acct2.get_address_base58() value = 10 subscribe_task = event_loop.create_task(TestWebsocketClient.subscribe_oep4_transfer_event(hex_contract_address)) transfer_task = event_loop.create_task( TestWebsocketClient.oep4_transfer(hex_contract_address, from_acct, b58_to_address, value)) try: response, event = await asyncio.wait_for(subscribe_task, timeout=10) self.assertEqual([hex_contract_address], response['ConstractsFilter']) self.assertEqual(True, response['SubscribeEvent']) self.assertEqual(False, response['SubscribeJsonBlock']) self.assertEqual(False, response['SubscribeRawBlock']) self.assertEqual(False, response['SubscribeBlockTxHashs']) self.assertEqual(64, len(event['TxHash'])) notify = ContractEventParser.get_notify_list_by_contract_address(event, hex_contract_address) notify = ContractDataParser.parser_oep4_transfer_notify(notify) self.assertEqual(hex_contract_address, notify['ContractAddress']) self.assertEqual('transfer', notify['States'][0]) self.assertEqual(from_acct.get_address_base58(), notify['States'][1]) self.assertEqual(b58_to_address, notify['States'][2]) self.assertEqual(value, notify['States'][3]) tx_hash = await transfer_task self.assertEqual(64, len(tx_hash)) except asyncio.TimeoutError: pass await websocket_client.close_connect()
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_query_balance(self): sdk.rpc.connect_to_test_net() asset = sdk.native_vm.asset() private_key = utils.get_random_hex_str(64) acct = Account(private_key, SignatureScheme.SHA256withECDSA) b58_address = acct.get_address_base58() try: balance = 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 = 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 = 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_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_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_send_raw_transaction(self): b58_from_address = acct2.get_address_base58() b58_to_address = 'AW352JufVwuZReSt7SCQpbYqrWeuERUNJr' tx = sdk.native_vm.asset().new_transfer_transaction('ong', b58_from_address, b58_to_address, 1, b58_from_address, 20000, 500) tx.sign_transaction(acct2) try: tx_hash = sdk.rpc.send_raw_transaction(tx) self.assertEqual(tx_hash, tx.hash256_explorer()) except SDKException as e: self.assertTrue('ConnectTimeout' in e.args[1])
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_approve(self): b58_recv_address = acct2.get_address_base58() for _ in range(3): try: tx_hash = sdk.native_vm.asset().approve( 'ont', acct1, b58_recv_address, 10, acct2, 20000, 500) self.assertEqual(len(tx_hash), 64) except SDKException as e: msg1 = 'no balance enough' 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_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_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_send_raw_transaction_pre_exec(self): sdk = OntologySdk() sdk.rpc.connect_to_test_net() random_pk = get_random_hex_str(64) random_acct = Account(random_pk) b58_address_1 = acct2.get_address_base58() random_b58_address = random_acct.get_address_base58() tx = sdk.native_vm.asset().new_transfer_transaction('ong', b58_address_1, random_b58_address, 2, b58_address_1, 20000, 500) tx.sign_transaction(acct2) result = sdk.rpc.send_raw_transaction_pre_exec(tx) self.assertEqual(result['Result'], '01') self.assertEqual(result['Gas'], 20000) self.assertEqual(result['State'], 1)
def test_send_raw_transaction(self): sdk = OntologySdk() sdk.rpc.connect_to_test_net() b58_from_address = acct2.get_address_base58() b58_to_address = 'AW352JufVwuZReSt7SCQpbYqrWeuERUNJr' amount = 1 gas_price = 500 gas_limit = 20000 tx = sdk.native_vm.asset().new_transfer_transaction('ong', b58_from_address, b58_to_address, amount, b58_from_address, gas_limit, gas_price) tx.sign_transaction(acct2) tx_hash = sdk.rpc.send_raw_transaction(tx) self.assertEqual(tx_hash, tx.hash256_explorer())
def test_new_transfer_from_transaction(self): sdk.rpc.connect_to_test_net() b58_sender_address = acct2.get_address_base58() b58_payer_address = acct2.get_address_base58() b58_from_address = acct1.get_address_base58() b58_recv_address = acct2.get_address_base58() tx = sdk.native_vm.asset().new_transfer_from_transaction( 'ont', b58_sender_address, b58_from_address, b58_recv_address, 1, b58_payer_address, 20000, 500) tx.add_sign_transaction(acct2) 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(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_send_raw_transaction_pre_exec(self): random_pk = get_random_hex_str(64) random_acct = Account(random_pk) b58_address_1 = acct2.get_address_base58() random_b58_address = random_acct.get_address_base58() tx = sdk.native_vm.asset().new_transfer_transaction('ong', b58_address_1, random_b58_address, 2, b58_address_1, 20000, 500) tx.sign_transaction(acct2) try: result = sdk.rpc.send_raw_transaction_pre_exec(tx) self.assertEqual(result['Result'], '01') self.assertEqual(result['Gas'], 20000) self.assertEqual(result['State'], 1) except SDKException as e: self.assertTrue('ConnectTimeout' in e.args[1])
def test_new_registry_ont_id_transaction(self): ont_id = sdk.native_vm.ont_id() hex_public_key = acct2.get_public_key_hex() b58_address = acct2.get_address_base58() acct_did = DID_ONT + b58_address gas_limit = 20000 gas_price = 500 tx = ont_id.new_registry_ont_id_transaction(acct_did, hex_public_key, b58_address, gas_limit, gas_price) tx.sign_transaction(acct2) self.assertEqual(64, len(tx.hash256(is_hex=True))) self.assertEqual(598, len(tx.serialize(is_hex=True))) try: sdk.rpc.send_raw_transaction(tx) except SDKException as e: self.assertEqual(59000, e.args[0]) self.assertIn('already registered', e.args[1])
def test_transfer(self): contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9' oep4 = sdk.neo_vm.oep4() oep4.hex_contract_address = contract_address from_acct = acct1 gas_limit = 20000000 gas_price = 500 b58_to_address = acct2.get_address_base58() value = 10 tx_hash = oep4.transfer(from_acct, b58_to_address, value, from_acct, gas_limit, gas_price) self.assertEqual(64, len(tx_hash)) time.sleep(6) notify = oep4.query_transfer_event(tx_hash) self.assertEqual('transfer', notify['States'][0]) self.assertEqual(from_acct.get_address_base58(), notify['States'][1]) self.assertEqual(b58_to_address, notify['States'][2]) self.assertEqual(value, notify['States'][3])
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_send_approve(self): sender = acct1 payer = acct2 sdk.rpc.connect_to_test_net() asset = sdk.native_vm.asset() b58_recv_address = acct2.get_address_base58() amount = 10 gas_limit = 20000 gas_price = 500 try: tx_hash = asset.send_approve('ont', sender, b58_recv_address, amount, payer, gas_limit, gas_price) self.assertEqual(len(tx_hash), 64) except SDKException as e: msg = 'no balance enough' self.assertEqual(59000, e.args[0]) self.assertIn(msg, e.args[1]) try: tx_hash = asset.send_approve('ong', sender, b58_recv_address, amount, payer, gas_limit, gas_price) self.assertEqual(len(tx_hash), 64) except SDKException as e: msg = 'no balance enough' self.assertEqual(59000, e.args[0]) self.assertIn(msg, e.args[1])
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')