def test_approve(self): sdk = OntologySdk() sdk.set_rpc(local_rpc_address) oep4 = sdk.neo_vm().oep4() oep4.set_contract_address(contract_address) private_key1 = "5f2fe68215476abb9852cfa7da31ef00aa1468782d5ca809da5c4e1390b8ee45" private_key2 = "f00dd7f5356e8aee93a049bdccc44ce91169e07ea3bec9f4e0142e456fd39bae" owner_acct = Account(private_key1, SignatureScheme.SHA256withECDSA) hex_owner_address = owner_acct.get_address_hex() spender = Account(private_key2, SignatureScheme.SHA256withECDSA) b58_spender_address = spender.get_address_base58() hex_spender_address = spender.get_address_hex() amount = 100 gas_limit = 20000000 gas_price = 0 tx_hash = oep4.approve(owner_acct, b58_spender_address, amount, owner_acct, gas_limit, gas_price) self.assertEqual(len(tx_hash), 64) sdk = OntologySdk() sdk.set_rpc(local_rpc_address) time.sleep(6) try: event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) notify = event['Notify'][0] self.assertEqual(hex_owner_address, notify['States'][1]) self.assertEqual(hex_spender_address, notify['States'][2]) self.assertEqual('64', notify['States'][3]) except SDKException as e: raised = False self.assertTrue(raised, e)
def test_approve(self): sdk = OntologySdk() sdk.set_rpc(remote_rpc_address) contract_address = '6fe70af535887a820a13cfbaff6b0b505f855e5c' oep4 = sdk.neo_vm().oep4() oep4.set_contract_address(contract_address) private_key1 = '523c5fcf74823831756f0bcb3634234f10b3beb1c05595058534577752ad2d9f' private_key2 = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf' owner_acct = Account(private_key1, SignatureScheme.SHA256withECDSA) hex_owner_address = owner_acct.get_address_hex() spender = Account(private_key2, SignatureScheme.SHA256withECDSA) b58_spender_address = spender.get_address_base58() hex_spender_address = spender.get_address_hex() amount = 100 gas_limit = 20000000 gas_price = 500 tx_hash = oep4.approve(owner_acct, b58_spender_address, amount, owner_acct, gas_limit, gas_price) self.assertEqual(len(tx_hash), 64) sdk = OntologySdk() sdk.set_rpc(remote_rpc_address) time.sleep(6) try: event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) notify = event['Notify'][0] self.assertEqual(hex_owner_address, notify['States'][0]) self.assertEqual(hex_spender_address, notify['States'][1]) self.assertEqual('64', notify['States'][2]) except SDKException as e: raised = False self.assertTrue(raised, e)
def test_transfer_multi(self): sdk = OntologySdk() sdk.set_rpc(local_rpc_address) oep4 = sdk.neo_vm().oep4() oep4.set_contract_address(contract_address) private_key1 = "5f2fe68215476abb9852cfa7da31ef00aa1468782d5ca809da5c4e1390b8ee45" private_key2 = "f00dd7f5356e8aee93a049bdccc44ce91169e07ea3bec9f4e0142e456fd39bae" private_key3 = "da213fb4cb1b12269c20307dadda35a7c89869c0c791b777fd8618d4159db99c" acct1 = Account(private_key1, SignatureScheme.SHA256withECDSA) acct2 = Account(private_key2, SignatureScheme.SHA256withECDSA) acct3 = Account(private_key3, SignatureScheme.SHA256withECDSA) b58_from_address1 = acct1.get_address_base58() hex_from_address1 = acct1.get_address_hex() from_address_list = [hex_from_address1, hex_from_address1] b58_to_address2 = acct2.get_address_base58() b58_to_address3 = acct3.get_address_base58() hex_to_address2 = acct2.get_address_hex() hex_to_address3 = acct3.get_address_hex() to_address_list = [hex_to_address2, hex_to_address3] value_list = [1, 2] # print("b58 addr 1 is ", b58_from_address1) # print("b58 addr 1 is ", b58_to_address2) # print("b58 addr 1 is ", b58_to_address3) transfer1 = [b58_from_address1, b58_to_address2, value_list[0]] transfer2 = [b58_from_address1, b58_to_address3, value_list[1]] signers = [acct1] args = [] args.append(transfer1) args.append(transfer2) gas_limit = 20000000 gas_price = 500 tx_hash = oep4.transfer_multi(args, signers[0], signers, gas_limit, gas_price) self.assertEqual(64, len(tx_hash)) sdk = OntologySdk() sdk.set_rpc(local_rpc_address) time.sleep(10) try: event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) # print("event is ", event) notify = event['Notify'][0:-1] # print("notify is ", notify) self.assertEqual(len(args), len(notify)) for index in range(len(notify)): self.assertEqual(from_address_list[index], notify[index]['States'][1]) self.assertEqual(to_address_list[index], notify[index]['States'][2]) self.assertEqual(value_list[index], int(notify[index]['States'][3])) except SDKException as e: raised = False self.assertTrue(raised, e)
def test_transfer_multi(self): sdk = OntologySdk() sdk.set_rpc(remote_rpc_address) contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9' oep4 = sdk.neo_vm().oep4() oep4.set_contract_address(contract_address) private_key1 = '523c5fcf74823831756f0bcb3634234f10b3beb1c05595058534577752ad2d9f' private_key2 = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf' private_key3 = '1383ed1fe570b6673351f1a30a66b21204918ef8f673e864769fa2a653401114' acct1 = Account(private_key1, SignatureScheme.SHA256withECDSA) acct2 = Account(private_key2, SignatureScheme.SHA256withECDSA) acct3 = Account(private_key3, SignatureScheme.SHA256withECDSA) args = 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.1, 2.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] args.append(transfer1) args.append(transfer2) gas_limit = 20000000 gas_price = 500 tx_hash = oep4.transfer_multi(args, signers[0], signers, gas_limit, gas_price) self.assertEqual(64, len(tx_hash)) sdk = OntologySdk() sdk.set_rpc(remote_rpc_address) time.sleep(6) try: decimal = oep4.get_decimal() event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) notify = event['Notify'][:-1] self.assertEqual(len(args), len(notify)) for index in range(len(notify)): self.assertEqual('transfer', bytes.fromhex(notify[index]['States'][0]).decode()) self.assertEqual(from_address_list[index], notify[index]['States'][1]) self.assertEqual(to_address_list[index], notify[index]['States'][2]) array = bytearray(binascii.a2b_hex(notify[index]['States'][3].encode('ascii'))) array.reverse() notify_value = int(binascii.b2a_hex(array).decode('ascii'), 16) self.assertEqual((10 ** decimal) * value_list[index], notify_value) except SDKException as e: raised = False self.assertTrue(raised, e)
def test_transfer_multi(self): sdk = OntologySdk() sdk.set_rpc(remote_rpc_address) contract_address = '6fe70af535887a820a13cfbaff6b0b505f855e5c' oep4 = sdk.neo_vm().oep4() oep4.set_contract_address(contract_address) private_key1 = '523c5fcf74823831756f0bcb3634234f10b3beb1c05595058534577752ad2d9f' private_key2 = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf' private_key3 = '1383ed1fe570b6673351f1a30a66b21204918ef8f673e864769fa2a653401114' acct1 = Account(private_key1, SignatureScheme.SHA256withECDSA) acct2 = Account(private_key2, SignatureScheme.SHA256withECDSA) acct3 = Account(private_key3, SignatureScheme.SHA256withECDSA) args = 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] args.append(transfer1) args.append(transfer2) gas_limit = 20000000 gas_price = 500 tx_hash = oep4.transfer_multi(args, signers[0], signers, gas_limit, gas_price) self.assertEqual(64, len(tx_hash)) sdk = OntologySdk() sdk.set_rpc(remote_rpc_address) time.sleep(6) try: event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) notify = event['Notify'][:-1] self.assertEqual(len(args), len(notify)) for index in range(len(notify)): self.assertEqual(from_address_list[index], notify[index]['States'][0]) self.assertEqual(to_address_list[index], notify[index]['States'][1]) self.assertEqual(value_list[index], int(notify[index]['States'][2])) except SDKException as e: raised = False self.assertTrue(raised, e)
async def test_change_recovery(self): identity = sdk.wallet_manager.create_identity(password) ctrl_acct = sdk.wallet_manager.get_control_account_by_index(identity.ont_id, 0, password) tx_hash = await sdk.native_vm.aio_ont_id().registry_ont_id(identity.ont_id, ctrl_acct, acct3, self.gas_price, self.gas_limit) self.assertEqual(64, len(tx_hash)) await asyncio.sleep(randint(10, 15)) event = sdk.restful.get_contract_event_by_tx_hash(tx_hash) hex_contract_address = sdk.native_vm.aio_ont_id().contract_address notify = Event.get_notify_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() tx_hash = await sdk.native_vm.aio_ont_id().add_recovery(identity.ont_id, ctrl_acct, b58_recovery_address, acct2, self.gas_price, self.gas_limit) await asyncio.sleep(randint(10, 15)) event = sdk.rpc.get_contract_event_by_tx_hash(tx_hash) notify = Event.get_notify_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(little_endian=False), notify['States'][3]) ddo = await sdk.native_vm.aio_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: await sdk.native_vm.aio_ont_id().change_recovery(identity.ont_id, b58_new_recovery_address, ctrl_acct, acct2, self.gas_price, self.gas_limit) except SDKException as e: self.assertIn('operator is not the recovery', e.args[1]) tx_hash = await sdk.native_vm.aio_ont_id().change_recovery(identity.ont_id, b58_new_recovery_address, recovery, acct2, self.gas_price, self.gas_limit) await asyncio.sleep(randint(10, 15)) event = sdk.rpc.get_contract_event_by_tx_hash(tx_hash) notify = Event.get_notify_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(little_endian=False), notify['States'][3])
def test_transfer_from(self): sdk = OntologySdk() sdk.set_rpc(remote_rpc_address) contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9' oep4 = sdk.neo_vm().oep4() oep4.set_contract_address(contract_address) private_key1 = '523c5fcf74823831756f0bcb3634234f10b3beb1c05595058534577752ad2d9f' private_key2 = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf' private_key3 = '1383ed1fe570b6673351f1a30a66b21204918ef8f673e864769fa2a653401114' spender_acct = Account(private_key2, SignatureScheme.SHA256withECDSA) from_acct = Account(private_key1, SignatureScheme.SHA256withECDSA) b58_from_address = from_acct.get_address_base58() hex_from_address = from_acct.get_address_hex() to_acct = Account(private_key3, SignatureScheme.SHA256withECDSA) b58_to_address = to_acct.get_address_base58() hex_to_address = to_acct.get_address_hex() gas_limit = 20000000 gas_price = 500 value = 1 tx_hash = oep4.transfer_from(spender_acct, b58_from_address, b58_to_address, value, from_acct, gas_limit, gas_price) self.assertEqual(64, len(tx_hash)) sdk = OntologySdk() sdk.set_rpc(remote_rpc_address) time.sleep(6) try: decimal = oep4.get_decimal() event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) notify = event['Notify'][0] self.assertEqual(2, len(notify)) self.assertEqual('transfer', bytes.fromhex(notify['States'][0]).decode()) self.assertEqual(hex_from_address, notify['States'][1]) self.assertEqual(hex_to_address, notify['States'][2]) array = bytearray(binascii.a2b_hex(notify['States'][3].encode('ascii'))) array.reverse() notify_value = int(binascii.b2a_hex(array).decode('ascii'), 16) self.assertEqual((10 ** decimal) * value, notify_value) except SDKException as e: raised = False self.assertTrue(raised, e)
def test_transfer_from(self): sdk = OntologySdk() sdk.set_rpc(remote_rpc_address) contract_address = '6fe70af535887a820a13cfbaff6b0b505f855e5c' oep4 = sdk.neo_vm().oep4() oep4.set_contract_address(contract_address) private_key1 = '523c5fcf74823831756f0bcb3634234f10b3beb1c05595058534577752ad2d9f' private_key2 = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf' private_key3 = '1383ed1fe570b6673351f1a30a66b21204918ef8f673e864769fa2a653401114' spender_acct = Account(private_key2, SignatureScheme.SHA256withECDSA) from_acct = Account(private_key1, SignatureScheme.SHA256withECDSA) hex_from_address = from_acct.get_address_hex() to_acct = Account(private_key3, SignatureScheme.SHA256withECDSA) hex_to_address = to_acct.get_address_hex() b58_to_address = to_acct.get_address_base58() gas_limit = 20000000 gas_price = 500 value = 1 tx_hash = oep4.transfer_from(spender_acct, from_acct, b58_to_address, value, from_acct, gas_limit, gas_price) self.assertEqual(64, len(tx_hash)) sdk = OntologySdk() sdk.set_rpc(remote_rpc_address) time.sleep(6) try: event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) notify = event['Notify'][0] self.assertEqual(2, len(notify)) self.assertEqual(hex_from_address, notify['States'][0]) self.assertEqual(hex_to_address, notify['States'][1]) self.assertEqual('01', notify['States'][2]) except SDKException as e: raised = False self.assertTrue(raised, e)
def test_approve(self): sdk = OntologySdk() sdk.set_rpc(remote_rpc_address) contract_address = '1ddbb682743e9d9e2b71ff419e97a9358c5c4ee9' oep4 = sdk.neo_vm().oep4() oep4.set_contract_address(contract_address) private_key1 = '523c5fcf74823831756f0bcb3634234f10b3beb1c05595058534577752ad2d9f' private_key2 = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf' owner_acct = Account(private_key1, SignatureScheme.SHA256withECDSA) hex_owner_address = owner_acct.get_address_hex() spender = Account(private_key2, SignatureScheme.SHA256withECDSA) b58_spender_address = spender.get_address_base58() hex_spender_address = spender.get_address_hex() amount = 100 gas_limit = 20000000 gas_price = 500 tx_hash = oep4.approve(owner_acct, b58_spender_address, amount, owner_acct, gas_limit, gas_price) self.assertEqual(len(tx_hash), 64) sdk = OntologySdk() sdk.set_rpc(remote_rpc_address) time.sleep(6) try: decimal = oep4.get_decimal() event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) notify = event['Notify'][0] states = notify['States'] self.assertEqual('approval', bytes.fromhex(states[0]).decode()) self.assertEqual(hex_owner_address, states[1]) self.assertEqual(hex_spender_address, states[2]) array = bytearray(binascii.a2b_hex(states[3].encode('ascii'))) array.reverse() notify_value = int(binascii.b2a_hex(array).decode('ascii'), 16) self.assertEqual((10 ** decimal) * amount, notify_value) except SDKException as e: raised = False self.assertTrue(raised, e)
def test_transfer_from(self): sdk = OntologySdk() sdk.set_rpc(local_rpc_address) oep4 = sdk.neo_vm().oep4() oep4.set_contract_address(contract_address) private_key1 = "5f2fe68215476abb9852cfa7da31ef00aa1468782d5ca809da5c4e1390b8ee45" private_key2 = "f00dd7f5356e8aee93a049bdccc44ce91169e07ea3bec9f4e0142e456fd39bae" private_key3 = "da213fb4cb1b12269c20307dadda35a7c89869c0c791b777fd8618d4159db99c" spender_acct = Account(private_key2, SignatureScheme.SHA256withECDSA) from_acct = Account(private_key1, SignatureScheme.SHA256withECDSA) hex_from_address = from_acct.get_address_hex() to_acct = Account(private_key3, SignatureScheme.SHA256withECDSA) hex_to_address = to_acct.get_address_hex() b58_to_address = to_acct.get_address_base58() gas_limit = 20000000 gas_price = 0 value = 1 tx_hash = oep4.transfer_from(spender_acct, from_acct, b58_to_address, value, from_acct, gas_limit, gas_price) self.assertEqual(64, len(tx_hash)) sdk = OntologySdk() sdk.set_rpc(local_rpc_address) time.sleep(6) try: event = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash) notify = event['Notify'][0] self.assertEqual(2, len(notify)) self.assertEqual(hex_from_address, notify['States'][1]) self.assertEqual(hex_to_address, notify['States'][2]) self.assertEqual('01', notify['States'][3]) except SDKException as e: raised = False self.assertTrue(raised, e)
def test_get_address_hex(self): hex_private_key = '523c5fcf74823831756f0bcb3634234f10b3beb1c05595058534577752ad2d9f' account = Account(hex_private_key, SignatureScheme.SHA256withECDSA) hex_address = '4756c9dd829b2142883adbe1ae4f8689a1f673e9' self.assertEqual(hex_address, account.get_address_hex())
def test_get_address_hex_reverse(self): hex_private_key = '523c5fcf74823831756f0bcb3634234f10b3beb1c05595058534577752ad2d9f' account = Account(hex_private_key, SignatureScheme.SHA256withECDSA) hex_reverse_address = 'e973f6a189864faee1db3a8842219b82ddc95647' self.assertEqual(hex_reverse_address, account.get_address_hex(little_endian=False))
def test_add_recovery(self): identity = sdk.wallet_manager.create_identity(password) ctrl_acct = sdk.wallet_manager.get_control_account_by_index( identity.ont_id, 0, password) tx_hash = sdk.native_vm.ont_id().registry_ont_id( identity.ont_id, ctrl_acct, acct3, 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) hex_contract_address = sdk.native_vm.ont_id().contract_address notify = Event.get_notify_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() tx_hash = sdk.native_vm.ont_id().add_recovery(identity.ont_id, ctrl_acct, b58_recovery_address, acct2, self.gas_price, self.gas_limit) time.sleep(randint(10, 15)) event = sdk.rpc.get_contract_event_by_tx_hash(tx_hash) notify = Event.get_notify_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(little_endian=False), 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().add_recovery(identity.ont_id, ctrl_acct, b58_new_recovery_address, acct2, self.gas_price, self.gas_limit) except SDKException as e: self.assertIn('already set recovery', e.args[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, recovery, hex_new_public_key, acct2, self.gas_price, self.gas_limit, True) time.sleep(randint(10, 15)) event = sdk.rpc.get_contract_event_by_tx_hash(tx_hash) notify = Event.get_notify_by_contract_address(event, hex_contract_address) self.assertEqual(hex_contract_address, notify['ContractAddress']) self.assertEqual('PublicKey', notify['States'][0]) self.assertEqual('add', notify['States'][1]) self.assertEqual(identity.ont_id, notify['States'][2]) self.assertEqual(2, notify['States'][3]) self.assertEqual(hex_new_public_key, notify['States'][4]) 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.assertIn(ctrl_acct.get_ont_id(), ddo['Owners'][1]['PubKeyId']) self.assertEqual('ECDSA', ddo['Owners'][1]['Type']) self.assertEqual('P256', ddo['Owners'][1]['Curve']) self.assertEqual(hex_new_public_key, ddo['Owners'][1]['Value']) self.assertEqual(0, len(ddo['Attributes'])) self.assertEqual(recovery.get_address_base58(), ddo['Recovery']) self.assertEqual(identity.ont_id, ddo['OntId']) self.assertEqual(b58_recovery_address, ddo['Recovery']) tx_hash = sdk.native_vm.ont_id().revoke_public_key( identity.ont_id, recovery, hex_new_public_key, acct3, self.gas_price, self.gas_limit, True) time.sleep(randint(10, 15)) event = sdk.rpc.get_contract_event_by_tx_hash(tx_hash) notify = Event.get_notify_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, recovery, hex_new_public_key, acct3, self.gas_price, self.gas_limit, True) except SDKException as e: self.assertIn('public key has already been revoked', e.args[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() try: sdk.native_vm.ont_id().add_public_key(identity.ont_id, new_recovery, hex_new_public_key, acct2, self.gas_price, self.gas_limit, True) except SDKException as e: self.assertIn('no authorization', e.args[1])