Ejemplo n.º 1
0
    def test_verify_signature(self):
        sdk.rpc.connect_to_test_net()
        sdk.restful.connect_to_test_net()
        label = 'label'
        identity = sdk.wallet_manager.create_identity(label, password)
        ctrl_acct = sdk.wallet_manager.get_control_account_by_index(
            identity.ont_id, 0, password)
        gas_limit = 20000
        gas_price = 500
        tx_hash = sdk.native_vm.ont_id().registry_ont_id(
            identity.ont_id, ctrl_acct, acct3, gas_limit, gas_price)
        self.assertEqual(64, len(tx_hash))
        time.sleep(randint(6, 10))
        event = sdk.restful.get_smart_contract_event_by_tx_hash(tx_hash)
        hex_contract_address = sdk.native_vm.ont_id().contract_address
        notify = ContractEventParser.get_notify_list_by_contract_address(
            event, hex_contract_address)
        self.assertEqual(hex_contract_address, notify['ContractAddress'])
        self.assertEqual('Register', notify['States'][0])
        self.assertEqual(identity.ont_id, notify['States'][1])

        private_key = utils.get_random_bytes(32)
        public_key = Signature.ec_get_public_key_by_private_key(
            private_key, Curve.P256)
        new_ctrl_acct = Account(private_key)
        hex_new_public_key = public_key.hex()

        tx_hash = sdk.native_vm.ont_id().add_public_key(
            identity.ont_id, ctrl_acct, hex_new_public_key, acct4, gas_limit,
            gas_price)
        time.sleep(randint(6, 10))
        event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash)
        hex_contract_address = sdk.native_vm.ont_id().contract_address
        notify = ContractEventParser.get_notify_list_by_contract_address(
            event, hex_contract_address)
        self.assertIn('PublicKey', notify['States'])
        self.assertIn('add', notify['States'])
        self.assertIn(identity.ont_id, notify['States'])
        self.assertIn(hex_new_public_key, notify['States'])
        result = sdk.native_vm.ont_id().verify_signature(
            identity.ont_id, 1, ctrl_acct)
        self.assertTrue(result)
        result = sdk.native_vm.ont_id().verify_signature(
            identity.ont_id, 2, ctrl_acct)
        self.assertFalse(result)
        result = sdk.native_vm.ont_id().verify_signature(
            identity.ont_id, 1, new_ctrl_acct)
        self.assertFalse(result)
        result = sdk.native_vm.ont_id().verify_signature(
            identity.ont_id, 2, new_ctrl_acct)
        self.assertTrue(result)
 def test_test_hello(self):
     bool_msg = True
     int_msg = 1
     bytes_msg = b'Hello'
     str_msg = 'Hello'
     address_msg = acct.get_address().to_bytes()
     tx_hash = hello_ontology.test_hello(bool_msg, int_msg, bytes_msg,
                                         str_msg, address_msg, acct,
                                         gas_limit, gas_price)
     time.sleep(6)
     event = ontology.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(acct.get_address_base58(), states[5])
Ejemplo n.º 3
0
 def test_oep4_transfer(self):
     hex_contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9'
     func = InvokeFunction('transfer')
     bytes_from_address = acct1.get_address().to_bytes()
     bytes_to_address = acct2.get_address().to_bytes()
     value = 1
     func.set_params_value(bytes_from_address, bytes_to_address, value)
     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', states[0])
     states[1] = ContractDataParser.to_b58_address(states[1])
     self.assertEqual(acct1.get_address().b58encode(), states[1])
     states[2] = ContractDataParser.to_b58_address(states[2])
     self.assertEqual(acct2.get_address().b58encode(), states[2])
     states[3] = ContractDataParser.to_int(states[3])
     self.assertEqual(value, states[3])
 def test_test_struct_list_and_str(self):
     bool_msg = True
     int_msg = 10
     bytes_msg = b'Hello'
     str_msg = 'Hello'
     list_msg = [1, 10, 1024, [1, 10, 1024, [1, 10, 1024]]]
     struct_list = [bool_msg, int_msg, bytes_msg, str_msg, list_msg]
     tx_hash = hello_ontology.test_struct_list_and_str(
         struct_list, str_msg, acct, gas_limit, gas_price)
     time.sleep(6)
     event = ontology.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])
     states[1][0] = ContractDataParser.to_bool(states[1][0])
     self.assertEqual(bool_msg, states[1][0])
     states[1][1] = ContractDataParser.to_int(states[1][1])
     self.assertEqual(int_msg, states[1][1])
     states[1][2] = ContractDataParser.to_bytes(states[1][2])
     self.assertEqual(bytes_msg, states[1][2])
     states[1][3] = ContractDataParser.to_utf8_str(states[1][3])
     self.assertEqual(str_msg, states[1][3])
     states[1][4] = ContractDataParser.to_int_list(states[1][4])
     self.assertEqual(list_msg, states[1][4])
     states[2] = ContractDataParser.to_utf8_str(states[2])
Ejemplo n.º 5
0
 def test_dict_in_ctx(self):
     hex_contract_address = '6690b6638251be951dded8c537678200a470c679'
     bool_value = True
     int_value = 100
     str_value = 'value3'
     dict_value = {'key': 'value'}
     list_value = [1, 10, 1024, [1, 10, 1024, [1, 10, 1024]]]
     dict_msg = {
         'key': dict_value,
         'key1': int_value,
         'key2': str_value,
         'key3': bool_value,
         'key4': list_value
     }
     func = InvokeFunction('testMapInMap')
     func.set_params_value(dict_msg)
     tx_hash = sdk.rpc.send_neo_vm_transaction(hex_contract_address, None,
                                               acct1, gas_limit, gas_price,
                                               func, 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('mapInfo', states[0])
     states[1] = ContractDataParser.to_dict(states[1])
     self.assertTrue(isinstance(states[1], dict))
Ejemplo n.º 6
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 = 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])
    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_test_list_and_str(self):
     list_msg = [1, 2, 3]
     tx_hash = hello_ontology.test_list(list_msg, acct, gas_limit,
                                        gas_price)
     time.sleep(6)
     event = ontology.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('testMsgList', states[0])
     states[1] = ContractDataParser.to_int_list(states[1])
     self.assertEqual(list_msg, states[1])
Ejemplo n.º 9
0
 def query_transfer_event(self, tx_hash):
     event = self.__sdk.get_network().get_smart_contract_event_by_tx_hash(
         tx_hash)
     notify = ContractEventParser.get_notify_list_by_contract_address(
         event, self.__hex_contract_address)
     notify['States'][0] = ContractDataParser.to_utf8_str(
         notify['States'][0])
     notify['States'][1] = ContractDataParser.to_b58_address(
         notify['States'][1])
     notify['States'][2] = ContractDataParser.to_b58_address(
         notify['States'][2])
     notify['States'][3] = ContractDataParser.to_int(notify['States'][3])
     return notify
Ejemplo n.º 10
0
    def test_new_transfer_transaction(self):
        sdk.rpc.connect_to_test_net()
        from_acct = acct1
        to_acct = acct2

        b58_from_address = from_acct.get_address_base58()
        b58_to_address = to_acct.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(from_acct)
        tx.add_sign_transaction(to_acct)
        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(6, 10))

        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])
Ejemplo n.º 11
0
 def test_list(self):
     hex_contract_address = '6690b6638251be951dded8c537678200a470c679'
     list_msg = [1, 10, 1024, [1, 10, 1024, [1, 10, 1024]]]
     func = InvokeFunction('testList')
     func.set_params_value(list_msg)
     tx_hash = sdk.rpc.send_neo_vm_transaction(hex_contract_address, None,
                                               acct1, gas_limit, gas_price,
                                               func, 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('testMsgList', states[0])
     states[1] = ContractDataParser.to_int_list(states[1])
     self.assertEqual(list_msg, states[1])
Ejemplo n.º 12
0
    def test_oep4_transfer_multi(self):
        hex_contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9'
        bytes_from_address1 = acct1.get_address().to_bytes()
        bytes_to_address1 = acct2.get_address().to_bytes()
        value1 = 2
        transfer1 = [bytes_from_address1, bytes_to_address1, value1]
        bytes_from_address2 = acct2.get_address().to_bytes()
        bytes_to_address2 = acct3.get_address().to_bytes()
        value2 = 1
        transfer2 = [bytes_from_address2, bytes_to_address2, value2]
        func = InvokeFunction('transferMulti')
        func.set_params_value(transfer1, transfer2)
        try:
            tx_hash = sdk.rpc.send_neo_vm_transaction(hex_contract_address,
                                                      acct1, acct2, gas_limit,
                                                      gas_price, func, False)
        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_list = ContractEventParser.get_states_by_contract_address(
            event, hex_contract_address)
        states_list[0][0] = ContractDataParser.to_utf8_str(states_list[0][0])
        self.assertEqual('transfer', states_list[0][0])
        states_list[0][1] = ContractDataParser.to_b58_address(
            states_list[0][1])
        self.assertEqual(acct1.get_address().b58encode(), states_list[0][1])
        states_list[0][2] = ContractDataParser.to_b58_address(
            states_list[0][2])
        self.assertEqual(acct2.get_address().b58encode(), states_list[0][2])
        states_list[0][3] = ContractDataParser.to_int(states_list[0][3])
        self.assertEqual(value1, states_list[0][3])

        states_list[1][0] = ContractDataParser.to_utf8_str(states_list[1][0])
        self.assertEqual('transfer', states_list[1][0])
        states_list[1][1] = ContractDataParser.to_b58_address(
            states_list[1][1])
        self.assertEqual(acct2.get_address().b58encode(), states_list[1][1])
        states_list[1][2] = ContractDataParser.to_b58_address(
            states_list[1][2])
        self.assertEqual(acct3.get_address().b58encode(), states_list[1][2])
        states_list[1][3] = ContractDataParser.to_int(states_list[1][3])
        self.assertEqual(value2, states_list[1][3])
Ejemplo n.º 13
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_test_dict_in_ctx(self):
     bool_value = True
     int_value = 100
     str_value = 'value3'
     dict_value = {'key': 'value'}
     list_value = [1, 10, 1024, [1, 10, 1024, [1, 10, 1024]]]
     dict_msg = {
         'key': dict_value,
         'key1': int_value,
         'key2': str_value,
         'key3': bool_value,
         'key4': list_value
     }
     tx_hash = hello_ontology.test_dict_in_ctx(dict_msg, acct, gas_limit,
                                               gas_price)
     time.sleep(6)
     event = ontology.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('mapInfo', states[0])
     states[1] = ContractDataParser.to_dict(states[1])
     self.assertTrue(isinstance(states[1], dict))
Ejemplo n.º 15
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])
Ejemplo n.º 16
0
    def test_change_recovery(self):
        sdk.rpc.connect_to_test_net()
        sdk.restful.connect_to_test_net()
        label = 'label'
        identity = sdk.wallet_manager.create_identity(label, password)
        ctrl_acct = sdk.wallet_manager.get_control_account_by_index(
            identity.ont_id, 0, password)
        gas_limit = 20000
        gas_price = 500
        tx_hash = sdk.native_vm.ont_id().registry_ont_id(
            identity.ont_id, ctrl_acct, acct3, gas_limit, gas_price)
        self.assertEqual(64, len(tx_hash))
        time.sleep(5)
        event = sdk.restful.get_smart_contract_event_by_tx_hash(tx_hash)
        hex_contract_address = sdk.native_vm.ont_id().contract_address
        notify = ContractEventParser.get_notify_list_by_contract_address(
            event, hex_contract_address)
        self.assertEqual(hex_contract_address, notify['ContractAddress'])
        self.assertEqual('Register', notify['States'][0])
        self.assertEqual(identity.ont_id, notify['States'][1])

        rand_private_key = utils.get_random_bytes(32).hex()
        recovery = Account(rand_private_key, SignatureScheme.SHA256withECDSA)
        b58_recovery_address = recovery.get_address_base58()
        gas_limit = 20000
        gas_price = 500
        tx_hash = sdk.native_vm.ont_id().add_recovery(identity.ont_id,
                                                      ctrl_acct,
                                                      b58_recovery_address,
                                                      acct2, gas_limit,
                                                      gas_price)
        time.sleep(5)
        event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash)
        notify = ContractEventParser.get_notify_list_by_contract_address(
            event, hex_contract_address)
        self.assertEqual(hex_contract_address, notify['ContractAddress'])
        self.assertEqual('Recovery', notify['States'][0])
        self.assertEqual('add', notify['States'][1])
        self.assertEqual(identity.ont_id, notify['States'][2])
        self.assertEqual(recovery.get_address_hex_reverse(),
                         notify['States'][3])
        ddo = sdk.native_vm.ont_id().get_ddo(identity.ont_id)
        self.assertIn(ctrl_acct.get_ont_id(), ddo['Owners'][0]['PubKeyId'])
        self.assertEqual('ECDSA', ddo['Owners'][0]['Type'])
        self.assertEqual('P256', ddo['Owners'][0]['Curve'])
        self.assertEqual(ctrl_acct.get_public_key_hex(),
                         ddo['Owners'][0]['Value'])
        self.assertEqual(0, len(ddo['Attributes']))
        self.assertEqual(recovery.get_address_base58(), ddo['Recovery'])
        self.assertEqual(identity.ont_id, ddo['OntId'])

        rand_private_key = utils.get_random_bytes(32).hex()
        new_recovery = Account(rand_private_key,
                               SignatureScheme.SHA256withECDSA)
        b58_new_recovery_address = new_recovery.get_address_base58()

        try:
            sdk.native_vm.ont_id().change_recovery(identity.ont_id,
                                                   b58_new_recovery_address,
                                                   ctrl_acct, acct2, gas_limit,
                                                   gas_price)
        except SDKException as e:
            self.assertIn('operator is not the recovery', e.args[1])
        tx_hash = sdk.native_vm.ont_id().change_recovery(
            identity.ont_id, b58_new_recovery_address, recovery, acct2,
            gas_limit, gas_price)
        time.sleep(5)
        event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash)
        notify = ContractEventParser.get_notify_list_by_contract_address(
            event, hex_contract_address)

        self.assertEqual(hex_contract_address, notify['ContractAddress'])
        self.assertEqual('Recovery', notify['States'][0])
        self.assertEqual('change', notify['States'][1])
        self.assertEqual(identity.ont_id, notify['States'][2])
        self.assertEqual(new_recovery.get_address_hex_reverse(),
                         notify['States'][3])
Ejemplo n.º 17
0
    def test_add_and_remove_public_key(self):
        sdk.rpc.connect_to_test_net()
        sdk.restful.connect_to_test_net()
        label = 'label'
        identity = sdk.wallet_manager.create_identity(label, password)
        ctrl_acct = sdk.wallet_manager.get_control_account_by_index(
            identity.ont_id, 0, password)
        gas_limit = 20000
        gas_price = 500
        tx_hash = sdk.native_vm.ont_id().registry_ont_id(
            identity.ont_id, ctrl_acct, acct3, gas_limit, gas_price)
        self.assertEqual(64, len(tx_hash))
        time.sleep(randint(6, 10))
        event = sdk.restful.get_smart_contract_event_by_tx_hash(tx_hash)
        hex_contract_address = sdk.native_vm.ont_id().contract_address
        notify = ContractEventParser.get_notify_list_by_contract_address(
            event, hex_contract_address)
        self.assertEqual(hex_contract_address, notify['ContractAddress'])
        self.assertEqual('Register', notify['States'][0])
        self.assertEqual(identity.ont_id, notify['States'][1])

        private_key = utils.get_random_bytes(32)
        public_key = Signature.ec_get_public_key_by_private_key(
            private_key, Curve.P256)
        hex_new_public_key = public_key.hex()

        tx_hash = sdk.native_vm.ont_id().add_public_key(
            identity.ont_id, ctrl_acct, hex_new_public_key, acct4, gas_limit,
            gas_price)
        time.sleep(randint(6, 10))
        event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash)
        hex_contract_address = sdk.native_vm.ont_id().contract_address
        notify = ContractEventParser.get_notify_list_by_contract_address(
            event, hex_contract_address)
        self.assertIn('PublicKey', notify['States'])
        self.assertIn('add', notify['States'])
        self.assertIn(identity.ont_id, notify['States'])
        self.assertIn(hex_new_public_key, notify['States'])
        try:
            sdk.native_vm.ont_id().add_public_key(identity.ont_id, ctrl_acct,
                                                  hex_new_public_key, acct4,
                                                  gas_limit, gas_price)
        except SDKException as e:
            self.assertIn('already exists', e.args[1])
        tx_hash = sdk.native_vm.ont_id().revoke_public_key(
            identity.ont_id, ctrl_acct, hex_new_public_key, acct3, gas_limit,
            gas_price)
        time.sleep(5)
        event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash)
        notify = ContractEventParser.get_notify_list_by_contract_address(
            event, hex_contract_address)
        self.assertIn('PublicKey', notify['States'])
        self.assertIn('remove', notify['States'])
        self.assertIn(identity.ont_id, notify['States'])
        self.assertIn(hex_new_public_key, notify['States'])
        try:
            sdk.native_vm.ont_id().revoke_public_key(identity.ont_id,
                                                     ctrl_acct,
                                                     hex_new_public_key, acct3,
                                                     gas_limit, gas_price)
        except SDKException as e:
            self.assertIn('public key has already been revoked', e.args[1])
Ejemplo n.º 18
0
    def test_add_and_remove_attribute(self):
        sdk.rpc.connect_to_test_net()
        sdk.restful.connect_to_test_net()
        ont_id = sdk.native_vm.ont_id()
        label = 'label'
        identity = sdk.wallet_manager.create_identity(label, password)
        ctrl_acct = sdk.wallet_manager.get_control_account_by_index(
            identity.ont_id, 0, password)
        gas_limit = 20000
        gas_price = 500
        tx_hash = sdk.native_vm.ont_id().registry_ont_id(
            identity.ont_id, ctrl_acct, acct3, gas_limit, gas_price)
        self.assertEqual(64, len(tx_hash))
        time.sleep(randint(6, 10))
        event = sdk.restful.get_smart_contract_event_by_tx_hash(tx_hash)
        hex_contract_address = sdk.native_vm.ont_id().contract_address
        notify = ContractEventParser.get_notify_list_by_contract_address(
            event, hex_contract_address)
        self.assertEqual(hex_contract_address, notify['ContractAddress'])
        self.assertEqual('Register', notify['States'][0])
        self.assertEqual(identity.ont_id, notify['States'][1])

        attribute = Attribute('hello', 'string', 'attribute')
        gas_limit = 20000
        gas_price = 500
        tx_hash = ont_id.add_attribute(identity.ont_id, ctrl_acct, attribute,
                                       acct2, gas_limit, gas_price)
        time.sleep(randint(6, 10))
        event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash)
        notify = ContractEventParser.get_notify_list_by_contract_address(
            event, hex_contract_address)
        self.assertEqual('Attribute', notify['States'][0])
        self.assertEqual('add', notify['States'][1])
        self.assertEqual(identity.ont_id, notify['States'][2])
        self.assertEqual(
            'hello', ContractDataParser.to_utf8_str(notify['States'][3][0]))

        attrib_key = 'hello'
        tx_hash = ont_id.remove_attribute(identity.ont_id, ctrl_acct,
                                          attrib_key, acct3, gas_limit,
                                          gas_price)
        time.sleep(randint(6, 10))
        event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash)
        notify = ContractEventParser.get_notify_list_by_contract_address(
            event, hex_contract_address)
        self.assertEqual('Attribute', notify['States'][0])
        self.assertEqual('remove', notify['States'][1])
        self.assertEqual(identity.ont_id, notify['States'][2])
        self.assertEqual('hello',
                         ContractDataParser.to_utf8_str(notify['States'][3]))
        try:
            ont_id.remove_attribute(identity.ont_id, ctrl_acct, attrib_key,
                                    acct3, gas_limit, gas_price)
        except SDKException as e:
            self.assertIn('attribute not exist', e.args[1])
        attrib_key = 'key'
        try:
            ont_id.remove_attribute(identity.ont_id, ctrl_acct, attrib_key,
                                    acct3, gas_limit, gas_price)
        except SDKException as e:
            self.assertIn('attribute not exist', e.args[1])
Ejemplo n.º 19
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()
        amount = 1000000000
        gas_price = 500
        gas_limit = 20000
        sdk = OntologySdk()
        sdk.rpc.connect_to_test_net()
        tx1 = sdk.native_vm.asset().new_transfer_transaction(
            'ong', b58_multi_address, b58_acct2_address, amount,
            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()
        amount = 100000
        gas_price = 500
        gas_limit = 20000
        tx1 = sdk.native_vm.asset().new_transfer_transaction(
            'ong', b58_multi_address, b58_acct2_address, amount,
            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')