Exemple #1
0
 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])
Exemple #11
0
 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)
Exemple #12
0
 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])
Exemple #13
0
    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])
Exemple #15
0
 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'])
Exemple #20
0
 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])
Exemple #22
0
 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])
Exemple #26
0
 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])
Exemple #27
0
    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')