예제 #1
0
 async def test_query_allowance(self):
     ont = sdk.native_vm.aio_ont()
     if sys.version_info >= (3, 7):
         task_list = [
             asyncio.create_task(
                 ont.allowance(acct1.get_address_base58(),
                               acct2.get_address_base58())),
             asyncio.create_task(
                 ont.allowance(acct2.get_address_base58(),
                               acct3.get_address_base58())),
             asyncio.create_task(
                 ont.allowance(acct3.get_address_base58(),
                               acct4.get_address_base58())),
             asyncio.create_task(
                 ont.allowance(acct4.get_address_base58(),
                               acct1.get_address_base58()))
         ]
     else:
         task_list = [
             ont.allowance(acct1.get_address_base58(),
                           acct2.get_address_base58()),
             ont.allowance(acct2.get_address_base58(),
                           acct3.get_address_base58()),
             ont.allowance(acct3.get_address_base58(),
                           acct4.get_address_base58()),
             ont.allowance(acct4.get_address_base58(),
                           acct1.get_address_base58())
         ]
     for task in task_list:
         self.assertGreaterEqual(await task, 0)
예제 #2
0
 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])
예제 #3
0
 def setUp(self):
     pub_keys = [acct1.get_public_key_bytes(), acct2.get_public_key_bytes(), acct3.get_public_key_bytes()]
     multi_address = Address.from_multi_pub_keys(2, pub_keys)
     self.address_list = [acct1.get_address_base58(), acct2.get_address_base58(), acct3.get_address_base58(),
                          acct4.get_address_base58(), multi_address.b58encode()]
     self.gas_price = 500
     self.gas_limit = 20000
예제 #4
0
 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])
예제 #5
0
 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])
예제 #6
0
 async def test_subscribe(self):
     hex_contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9'
     oep4 = sdk.neo_vm.aio_oep4(hex_contract_address)
     response = await sdk.websocket.subscribe(hex_contract_address, True, False, False, False)
     self.assertEqual([hex_contract_address], response['ContractsFilter'])
     self.assertEqual(True, response['SubscribeEvent'])
     self.assertEqual(False, response['SubscribeJsonBlock'])
     self.assertEqual(False, response['SubscribeRawBlock'])
     b58_to_address = acct2.get_address_base58()
     value = 10
     tx_hash = await oep4.transfer(acct1, b58_to_address, value, acct3, 500, 20000)
     self.assertEqual(64, len(tx_hash))
     try:
         event = await asyncio.wait_for(sdk.websocket.recv_subscribe_info(), timeout=10)
         self.assertEqual(False, response['SubscribeBlockTxHashs'])
         self.assertEqual(64, len(event['TxHash']))
         notify = Event.get_notify_by_contract_address(event, hex_contract_address)
         notify = NeoData.parse_addr_addr_int_notify(notify)
         self.assertEqual(hex_contract_address, notify['ContractAddress'])
         self.assertEqual('transfer', notify['States'][0])
         self.assertEqual(acct1.get_address_base58(), notify['States'][1])
         self.assertEqual(b58_to_address, notify['States'][2])
         self.assertEqual(value, notify['States'][3])
     except asyncio.TimeoutError:
         pass
     finally:
         await sdk.websocket.close_connect()
예제 #7
0
 async 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()
     ont = sdk.native_vm.aio_ont()
     amount = 1
     tx_hash = await ont.transfer_from(acct2, b58_from_address,
                                       b58_recv_address, amount, acct2,
                                       self.gas_price, self.gas_limit)
     self.assertEqual(64, len(tx_hash))
     await asyncio.sleep(randint(10, 15))
     event = await sdk.aio_rpc.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['States'][0])
     self.assertEqual(b58_recv_address, notify['States'][1])
     self.assertEqual(self.gas_price * self.gas_limit, notify['States'][3])
     notify = Event.get_notify_by_contract_address(
         event,
         sdk.native_vm.ont().contract_address)
     self.assertEqual('transfer', notify['States'][0])
     self.assertEqual(b58_from_address, notify['States'][1])
     self.assertEqual(b58_recv_address, notify['States'][2])
     self.assertEqual(amount, notify['States'][3])
예제 #8
0
    async def test_transfer_multi(self):
        oep4 = sdk.neo_vm.aio_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)

        tx_hash = await oep4.transfer_multi(transfer_list, signers, acct1, 500, 20000000)
        self.assertEqual(64, len(tx_hash))
        await asyncio.sleep(randint(14, 20))
        notify_list = await oep4.query_multi_transfer_event(tx_hash)
        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])
예제 #9
0
 async def test_balance_of(self):
     address_list = [acct1.get_address_base58(), acct2.get_address_base58(), acct3.get_address_base58(),
                     acct4.get_address_base58()]
     for address in address_list:
         balance = await sdk.native_vm.aio_ont().balance_of(address)
         self.assertTrue(isinstance(balance, int))
         self.assertGreaterEqual(balance, 0)
예제 #10
0
 def test_send_raw_transaction_pre_exec(self):
     b58_address = acct1.get_address_base58()
     tx = sdk.native_vm.ong().new_transfer_tx(b58_address, acct2.get_address(), 2, b58_address, 500, 20000)
     tx.sign_transaction(acct1)
     result = sdk.rpc.send_raw_transaction_pre_exec(tx)
     self.assertTrue(Data.to_bool(result['Result']))
     self.assertEqual(result['Gas'], 20000)
     self.assertEqual(result['State'], 1)
예제 #11
0
 def test_tx_signature(self):
     b58_from_address = acct1.get_address_base58()
     b58_to_address = acct2.get_address_base58()
     tx = sdk.native_vm.ont().new_transfer_tx(b58_from_address, b58_to_address, 10, b58_from_address, 0, 20000)
     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]))
예제 #12
0
 def test_send_raw_transaction(self):
     b58_from_address = acct1.get_address_base58()
     b58_to_address = 'AW352JufVwuZReSt7SCQpbYqrWeuERUNJr'
     tx = sdk.native_vm.ong().new_transfer_tx(b58_from_address,
                                              b58_to_address, 1,
                                              b58_from_address, 500, 20000)
     tx.sign_transaction(acct1)
     tx_hash = sdk.restful.send_raw_transaction(tx)
     self.assertEqual(tx_hash, tx.hash256_explorer())
예제 #13
0
 async def test_get_balance(self):
     pub_keys = [acct1.get_public_key_bytes(), acct2.get_public_key_bytes(), acct3.get_public_key_bytes()]
     multi_address = Address.from_multi_pub_keys(2, pub_keys)
     address_list = [acct1.get_address_base58(), acct2.get_address_base58(), acct3.get_address_base58(),
                     acct4.get_address_base58(), multi_address.b58encode()]
     for address in address_list:
         balance = await sdk.websocket.get_balance(address)
         self.assertTrue(isinstance(balance, dict))
         self.assertGreaterEqual(balance['ONT'], 0)
         self.assertGreaterEqual(balance['ONG'], 0)
예제 #14
0
 async def test_unbound_ong(self):
     address_list = [
         acct1.get_address_base58(),
         acct2.get_address_base58(),
         acct3.get_address_base58(),
         acct4.get_address_base58()
     ]
     for address in address_list:
         unbound_ong = await sdk.native_vm.aio_ong().unbound(address)
         self.assertGreaterEqual(unbound_ong, 0)
예제 #15
0
    def test_invoke_transaction(self):
        """
        from ontology.interop.System.Runtime import Notify

        def main(operation, args):
            if operation == 'hello':
                return hello(args[0])
            return False


        def hello(msg):
            Notify(["hello", msg])
            return msg
        """
        avm_code = '51c56b6c58c56b6a00527ac46a51527ac46a52527ac46a51c30568656c6c6f7d9c7c756427' \
                   '00006a53527ac46a52c300c3516a53c3936a53527ac46a53c36a00c365f2006c7566620300' \
                   '006c75660111c56b6a00527ac46a51527ac46a51c300947600a0640c00c16a52527ac4620e' \
                   '007562030000c56a52527ac46a52c3c0517d9c7c75641c00006a53527ac46a52c300c36a54' \
                   '527ac4516a55527ac4625c006a52c3c0527d9c7c756421006a52c300c36a53527ac46a52c3' \
                   '51c36a54527ac4516a55527ac4616232006a52c3c0537d9c7c756424006a52c300c36a5352' \
                   '7ac46a52c351c36a54527ac46a52c352c36a55527ac462050000f100c176c96a56527ac46a' \
                   '53c36a57527ac46a57c36a54c37d9f7c756419006a56c36a57c3c86a57c36a55c3936a5752' \
                   '7ac462e0ff6a56c36c756656c56b6a00527ac46a51527ac46a52527ac46203000568656c6c' \
                   '6f6a52c352c176c9681553797374656d2e52756e74696d652e4e6f746966796a52c36c7566'
        contract_address = sdk.neo_vm.address_from_avm_code(avm_code).hex()
        self.assertEqual('f7b9970fd6def5229c1f30ad15372bd1c20bb260',
                         contract_address)
        hello = NeoInvokeFunction('hello')
        hello.set_params_value('ontology')
        tx = sdk.neo_vm.make_invoke_transaction(contract_address, hello,
                                                acct1.get_address_base58(),
                                                500, 20000)
        response = sdk.rpc.send_raw_transaction_pre_exec(tx)
        self.assertEqual(1, response['State'])
        response['Result'] = NeoData.to_utf8_str(response['Result'])
        self.assertEqual('ontology', response['Result'])
        tx.sign_transaction(acct1)
        tx_hash = sdk.rpc.send_raw_transaction(tx)
        sleep(10)
        for _ in range(5):
            try:
                event = sdk.rpc.get_contract_event_by_tx_hash(tx_hash)
                if isinstance(event, dict) and event.get('Notify', '') != '':
                    notify = Event.get_notify_by_contract_address(
                        event, contract_address)
                    self.assertEqual(contract_address,
                                     notify['ContractAddress'])
                    self.assertEqual('hello',
                                     NeoData.to_utf8_str(notify['States'][0]))
                    self.assertEqual('ontology',
                                     NeoData.to_utf8_str(notify['States'][1]))
                    break
            except SDKException:
                continue
            sleep(2)
예제 #16
0
 def test_native_vm_transaction(self):
     amount = 1
     tx = sdk.native_vm.ont().new_transfer_tx(acct2.get_address_base58(),
                                              acct1.get_address_base58(),
                                              amount,
                                              acct1.get_address_base58(),
                                              500, 20000)
     tx.sign_transaction(acct1)
     tx.add_sign_transaction(acct2)
     tx_hash = sdk.rpc.send_raw_transaction(tx)
     self.assertEqual(64, len(tx_hash))
     tx = sdk.native_vm.ont().new_transfer_tx(acct1.get_address_base58(),
                                              acct2.get_address_base58(),
                                              amount,
                                              acct1.get_address_base58(),
                                              500, 20000)
     tx.sign_transaction(acct2)
     tx.add_sign_transaction(acct1)
     tx_hash = sdk.rpc.send_raw_transaction(tx)
     self.assertEqual(64, len(tx_hash))
예제 #17
0
 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])
예제 #18
0
 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()
     ong = sdk.native_vm.ong()
     tx_hash = ong.transfer_from(acct2, b58_from_address, b58_recv_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 = Event.get_notify_by_contract_address(event,
                                                   ong.contract_address)
     self.assertEqual(2, len(notify))
예제 #19
0
 async 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()
     ong = sdk.native_vm.aio_ong()
     tx_hash = await ong.transfer_from(acct2, b58_from_address,
                                       b58_recv_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 = Event.get_notify_by_contract_address(event,
                                                   ong.contract_address)
     self.assertEqual(2, len(notify))
예제 #20
0
 async def test_transfer_from(self):
     oep4 = sdk.neo_vm.aio_oep4()
     oep4.hex_contract_address = contract_address
     b58_from_address = acct1.get_address_base58()
     b58_to_address = acct3.get_address_base58()
     value = 1
     tx_hash = await oep4.transfer_from(acct2, b58_from_address, b58_to_address, value, acct1, 500, 20000000)
     self.assertEqual(64, len(tx_hash))
     await asyncio.sleep(randint(14, 20))
     event = await oep4.query_transfer_from_event(tx_hash)
     self.assertEqual(contract_address, event.get('ContractAddress', ''))
     self.assertEqual('transfer', event['States'][0])
     self.assertEqual(b58_from_address, event['States'][1])
     self.assertEqual(b58_to_address, event['States'][2])
     self.assertEqual(value, event['States'][3])
예제 #21
0
 async def test_approve(self):
     oep4 = sdk.neo_vm.aio_oep4()
     oep4.hex_contract_address = contract_address
     b58_spender_address = acct2.get_address_base58()
     amount = 10
     tx_hash = await oep4.approve(acct1, b58_spender_address, amount, acct1, 500, 20000000)
     self.assertEqual(len(tx_hash), 64)
     await asyncio.sleep(randint(14, 20))
     event = await oep4.query_approve_event(tx_hash)
     self.assertEqual(contract_address, event.get('ContractAddress', ''))
     states = event['States']
     self.assertEqual('approval', states[0])
     self.assertEqual(acct1.get_address_base58(), states[1])
     self.assertEqual(b58_spender_address, states[2])
     self.assertEqual(amount, states[3])
예제 #22
0
 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])
예제 #23
0
 def test_claim_demo(self):
     pub_keys = sdk.native_vm.ont_id().get_public_keys(identity1.ont_id)
     try:
         pk = pub_keys[0]
         kid = pk['PubKeyId']
     except IndexError:
         kid = '03d0fdb54acba3f81db3a6e16fa02e7ea3678bd205eb4ed2f1cfa8ab5e5d45633e#keys-1'
     iss_ont_id = identity2.ont_id
     sub_ont_id = identity1.ont_id
     exp = int(time()) + 1000
     context = 'https://example.com/template/v1'
     clm = dict(Name='NashMiao',
                JobTitle='SoftwareEngineer',
                HireData=str(time()))
     clm_rev = dict(type='AttestContract',
                    addr='8055b362904715fd84536e754868f4c8d27ca3f6')
     claim = sdk.service.claim()
     claim.set_claim(kid, iss_ont_id, sub_ont_id, exp, context, clm,
                     clm_rev)
     try:
         claim.generate_signature(identity2_ctrl_acct)
     except SDKException as e:
         msg = 'get key failed'
         self.assertTrue(msg in e.args[1])
         claim.generate_signature(identity2_ctrl_acct, verify_kid=False)
     tx = claim.new_commit_tx(identity2_ctrl_acct.get_address_base58(),
                              acct1.get_address_base58(), self.gas_price,
                              self.gas_limit)
     tx.sign_transaction(identity2_ctrl_acct)
     tx.add_sign_transaction(acct1)
     tx_hash = sdk.rpc.send_raw_transaction(tx)
     sleep(12)
     blockchain_proof = claim.generate_blk_proof(tx_hash)
     self.assertTrue(claim.validate_blk_proof())
     b64_claim = claim.to_base64()
     claim_list = b64_claim.split('.')
     self.assertEqual(4, len(claim_list))
     claim_recv = sdk.service.claim()
     claim_recv.from_base64(b64_claim)
     self.assertEqual(dict(claim), dict(claim_recv))
     proof_node = blockchain_proof.proof_node
     if proof_node[0]['Direction'] == 'Right':
         proof_node[0]['Direction'] = 'Left'
     else:
         proof_node[0]['Direction'] = 'Right'
     claim.blk_proof.proof_node = proof_node
     self.assertFalse(claim.validate_blk_proof())
예제 #24
0
 async def test_get_memory_pool_tx_state(self):
     tx_hash = '0000000000000000000000000000000000000000000000000000000000000000'
     try:
         await sdk.aio_rpc.get_memory_pool_tx_state(tx_hash)
     except SDKException as e:
         if 'unknown transaction' not in e.args[1]:
             raise e
     oep4 = sdk.neo_vm.oep4()
     oep4.hex_contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9'
     b58_from_address = acct1.get_address_base58()
     b58_to_address = 'AazEvfQPcQ2GEFFPLF1ZLwQ7K5jDn81hve'
     tx = oep4.new_transfer_tx(b58_from_address, b58_to_address, 10, b58_from_address, 500, 200000)
     tx.sign_transaction(acct1)
     tx_hash = await sdk.aio_rpc.send_raw_transaction(tx)
     self.assertEqual(64, len(tx_hash))
     tx_state = await sdk.aio_rpc.get_memory_pool_tx_state(tx_hash)
     self.assertTrue(isinstance(tx_state, list))
예제 #25
0
 def test_transfer(self):
     amount = 1
     gas = sdk.native_vm.gas()
     tx_hash = gas.transfer(acct1, acct2.get_address(), amount, acct4,
                            self.gas_price, self.gas_limit)
     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,
                                                   gas.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(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])
예제 #26
0
 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])
예제 #27
0
 def test_transfer_from(self):
     b58_from_address = acct2.get_address_base58()
     b58_recv_address = acct1.get_address_base58()
     ont = sdk.native_vm.ont()
     amount = 1
     tx_hash = ont.transfer_from(acct1, b58_from_address, b58_recv_address, amount, acct2, self.gas_price,
                                 self.gas_limit)
     self.assertEqual(64, len(tx_hash))
     time.sleep(randint(10, 15))
     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['States'][0])
     self.assertEqual(b58_from_address, notify['States'][1])
     self.assertEqual(self.gas_price * self.gas_limit, notify['States'][3])
     notify = Event.get_notify_by_contract_address(event, sdk.native_vm.ont().contract_address)
     self.assertEqual('transfer', notify['States'][0])
     self.assertEqual(b58_from_address, notify['States'][1])
     self.assertEqual(b58_recv_address, notify['States'][2])
     self.assertEqual(amount, notify['States'][3])
예제 #28
0
 async def test_send_raw_transaction(self):
     b58_from_address = acct1.get_address_base58()
     b58_to_address = acct2.get_address_base58()
     tx = sdk.native_vm.ong().new_transfer_tx(b58_from_address, b58_to_address, 1, b58_from_address, 500, 20000)
     tx.sign_transaction(acct1)
     tx_hash = await sdk.websocket.send_raw_transaction(tx)
     self.assertEqual(64, len(tx_hash))
     await asyncio.sleep(6)
     event = dict()
     for _ in range(0, 10):
         event = await sdk.websocket.get_contract_event_by_tx_hash(tx_hash)
         if isinstance(event, dict) and event.get('TxHash', '') == tx_hash:
             break
         await asyncio.sleep(2)
     await sdk.websocket.close_connect()
     self.assertTrue(isinstance(event, dict))
     self.assertEqual(tx_hash, event['TxHash'])
     self.assertEqual(1, event['State'])
     self.assertEqual('0200000000000000000000000000000000000000', event['Notify'][0]['ContractAddress'])
     self.assertEqual('0200000000000000000000000000000000000000', event['Notify'][1]['ContractAddress'])
예제 #29
0
 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])
예제 #30
0
    def test_add_multi_sign_transaction(self):
        pub_keys = [
            acct1.get_public_key_bytes(),
            acct2.get_public_key_bytes(),
            acct3.get_public_key_bytes()
        ]
        m = 2
        b58_multi_address = Address.from_multi_pub_keys(m,
                                                        pub_keys).b58encode()
        amount = 1
        gas_price = 500
        gas_limit = 20000
        tx_hash = sdk.native_vm.ont().transfer(acct2, b58_multi_address,
                                               amount, acct2, gas_price,
                                               gas_limit)
        self.assertEqual(64, len(tx_hash))
        tx_hash = sdk.native_vm.ong().transfer(acct2, b58_multi_address,
                                               amount, acct2, gas_price,
                                               gas_limit)
        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.ong().new_transfer_tx(b58_acct1_address,
                                                 b58_multi_address, amount,
                                                 b58_acct1_address, gas_price,
                                                 gas_limit)
        tx.add_sign_transaction(acct1)

        tx = sdk.native_vm.ont().new_transfer_tx(b58_multi_address,
                                                 b58_acct2_address, amount,
                                                 b58_acct1_address, gas_price,
                                                 gas_limit)
        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))