def create_account(): password = request.json.get('password') label = request.json.get('label') hex_private_key = util.get_random_bytes(32).hex() app.config['WALLET_MANAGER'].create_account_from_private_key(label, password, hex_private_key) app.config['WALLET_MANAGER'].save() return json.jsonify({'hex_private_key': hex_private_key})
def test_new_add_recovery_transaction(self): ont_id = sdk.native_vm().ont_id() gas_limit = 20000 gas_price = 500 private_key = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf' acct = Account(private_key, SignatureScheme.SHA256withECDSA) b58_address = acct.get_address_base58() acct_did = "did:ont:" + b58_address hex_public_key = acct.get_public_key_hex() rand_private_key = util.get_random_bytes(32).hex() recovery = Account(rand_private_key, SignatureScheme.SHA256withECDSA) b58_recovery_address = recovery.get_address_base58() tx = ont_id.new_add_recovery_transaction(acct_did, hex_public_key, b58_recovery_address, b58_address, gas_limit, gas_price) tx = sdk.sign_transaction(tx, acct) try: sdk.rpc.send_raw_transaction(tx) except SDKException as e: msg = 'Other Error, [NeoVmService] service system call error!: [SystemCall] service execute ' \ 'error!: [Invoke] Native serivce function execute error!: add recovery failed: already ' \ 'set recovery' self.assertEqual(59000, e.args[0]) self.assertEqual(msg, e.args[1])
def create_account(): password = request.json.get('password') label = request.json.get('label') hex_private_key = util.get_random_bytes(32).hex() wallet_manager.create_account_from_private_key(label, password, hex_private_key) wallet_manager.save() return json.jsonify({'hex_private_key': hex_private_key})
def test_b58decode(self): length = 20 rand_code = util.get_random_bytes(length) address = Address(rand_code) b58_address = address.b58encode() zero = Address.b58decode(b58_address).to_array() self.assertEqual(rand_code, zero) decode_address = Address.b58decode(b58_address).to_array() self.assertEqual(rand_code, decode_address)
def create_account_from_prikey(self, label: str, pwd: str, private_key: bytes): salt = get_random_bytes(16) info = self.create_account_info(label, pwd, salt, private_key) for index in range(len(self.wallet_in_mem.accounts)): if info.address_base58 == self.wallet_in_mem.accounts[ index].address: return self.wallet_in_mem.accounts[index] return None
def test_import_identity(self): wm = WalletManager() wm.open_wallet("./test.json") salt = get_random_bytes(16) privete_key = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf' acct = Account(a2b_hex(privete_key.encode())) enpri = acct.export_gcm_encrypted_private_key("1", salt, 16384) wm.import_identity("label2", enpri, "1", salt, acct.get_address_base58())
def test_b58decode(self): length = 20 rand_code = util.get_random_bytes(length) address = Address(rand_code) b58_address = address.b58encode() zero = Address.b58decode(b58_address) self.assertEqual(rand_code, zero) decode_address = Address.b58decode(b58_address, is_bytes=False) self.assertTrue(isinstance(decode_address, Address)) self.assertEqual(rand_code, decode_address.to_array())
def test_export_gcm_encrypted_private_key(self): private_key = util.get_random_bytes(32).hex() account = Account(private_key, SignatureScheme.SHA256withECDSA) b58_address = account.get_address_base58() salt = util.get_random_hex_str(16) password = '******' enc_private_key = account.export_gcm_encrypted_private_key(password, salt, 16384) decoded_private_key = account.get_gcm_decoded_private_key(enc_private_key, password, b58_address, salt, 16384, SignatureScheme.SHA256withECDSA) self.assertEqual(private_key, decoded_private_key)
def create_identity(): label = request.json.get('label') password = request.json.get('password') hex_private_key = util.get_random_bytes(32).hex() try: new_identity = app.config['WALLET_MANAGER'].create_identity_from_private_key(label, password, hex_private_key) except SDKException as e: return json.jsonify({'result': e}), 500 app.config['WALLET_MANAGER'].save() return json.jsonify({'hex_private_key': hex_private_key, 'ont_id': new_identity.ont_id}), 200
def test_export_gcm_encrypted_private_key(self): private_key = "75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf" account = Account(util.hex_to_bytes(private_key), SignatureScheme.SHA256withECDSA) salt = util.get_random_bytes(16) enc_private_key = account.export_gcm_encrypted_private_key("1", salt, 16384) import_private_key = account.get_gcm_decoded_private_key(enc_private_key, "1", account.get_address_base58(), salt, 16384, SignatureScheme.SHA256withECDSA) self.assertEqual(import_private_key.hex(), private_key)
def test_send_raw_transaction(self): private_key = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf' acct = Account(a2b_hex(private_key.encode())) private_key2 = get_random_bytes(32) acct2 = Account(private_key2) tx = Asset.new_transfer_transaction("ont", acct.get_address_base58(), acct2.get_address_base58(), 2, acct.get_address_base58(), 20000, 500) tx = sdk.sign_transaction(tx, acct) res = sdk.rpc.send_raw_transaction(tx) self.assertEqual(len(res), 64)
def test_new_add_remove_public_key_transaction(self): ont_id = sdk.native_vm().ont_id() private_key = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf' acct = Account(private_key, SignatureScheme.SHA256withECDSA) hex_public_key = acct.get_public_key_hex() rand_private_key = util.get_random_bytes(32).hex() rand_acct = Account(rand_private_key, SignatureScheme.SHA256withECDSA) hex_new_public_key = rand_acct.get_public_key_hex() b58_address = acct.get_address_base58() acct_did = "did:ont:" + b58_address gas_limit = 20000 gas_price = 500 tx = ont_id.new_add_public_key_transaction(acct_did, hex_public_key, hex_new_public_key, b58_address, gas_limit, gas_price) tx = sdk.sign_transaction(tx, acct) tx_hash = sdk.rpc.send_raw_transaction(tx) time.sleep(6) notify = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash)['Notify'] self.assertEqual('PublicKey', notify[0]['States'][0]) self.assertEqual('add', notify[0]['States'][1]) self.assertEqual(acct_did, notify[0]['States'][2]) self.assertEqual(hex_new_public_key, notify[0]['States'][4]) try: sdk.rpc.send_raw_transaction(tx) except SDKException as e: msg = 'Other Error, [NeoVmService] service system call error!: [SystemCall] service execute error!:' \ ' [Invoke] Native serivce function execute error!: add key failed: already exists' self.assertEqual(59000, e.args[0]) self.assertEqual(msg, e.args[1]) tx = ont_id.new_remove_public_key_transaction(acct_did, hex_public_key, hex_new_public_key, b58_address, gas_limit, gas_price) tx = sdk.sign_transaction(tx, acct) tx_hash = sdk.rpc.send_raw_transaction(tx) time.sleep(6) notify = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash)['Notify'] self.assertEqual('PublicKey', notify[0]['States'][0]) self.assertEqual('remove', notify[0]['States'][1]) self.assertEqual(acct_did, notify[0]['States'][2]) self.assertEqual(hex_new_public_key, notify[0]['States'][4]) try: sdk.rpc.send_raw_transaction(tx) except SDKException as e: msg = 'Other Error, [NeoVmService] service system call error!: [SystemCall] service execute ' \ 'error!: [Invoke] Native serivce function execute error!: remove key failed: ' \ 'public key has already been revoked' self.assertEqual(59000, e.args[0]) self.assertEqual(msg, e.args[1])
def test_send_add_remove_public_key_transaction(self): ont_id = sdk.native_vm().ont_id() label = 'label' password = '******' private_key = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf' acct = Account(private_key, SignatureScheme.SHA256withECDSA) identity = sdk.wallet_manager.create_identity_from_private_key( label, password, private_key) rand_private_key = util.get_random_bytes(32).hex() rand_acct = Account(rand_private_key, SignatureScheme.SHA256withECDSA) hex_new_public_key = rand_acct.get_public_key_hex() password = '******' gas_limit = 20000 gas_price = 500 tx_hash = ont_id.send_add_public_key_transaction( identity, password, hex_new_public_key, acct, gas_limit, gas_price) time.sleep(6) notify = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash)['Notify'] self.assertEqual('PublicKey', notify[0]['States'][0]) self.assertEqual('add', notify[0]['States'][1]) self.assertEqual(identity.ont_id, notify[0]['States'][2]) self.assertEqual(hex_new_public_key, notify[0]['States'][4]) try: ont_id.send_add_public_key_transaction(identity, password, hex_new_public_key, acct, gas_limit, gas_price) except SDKException as e: msg = 'Other Error, [NeoVmService] service system call error!: [SystemCall] service execute' \ ' error!: [Invoke] Native serivce function execute error!: add key failed: already exists' self.assertEqual(59000, e.args[0]) self.assertEqual(msg, e.args[1]) tx_hash = ont_id.send_remove_public_key_transaction( identity, password, hex_new_public_key, acct, gas_limit, gas_price) time.sleep(6) notify = sdk.rpc.get_smart_contract_event_by_tx_hash(tx_hash)['Notify'] self.assertEqual('PublicKey', notify[0]['States'][0]) self.assertEqual('remove', notify[0]['States'][1]) self.assertEqual(identity.ont_id, notify[0]['States'][2]) self.assertEqual(hex_new_public_key, notify[0]['States'][4]) try: ont_id.send_remove_public_key_transaction(identity, password, hex_new_public_key, acct, gas_limit, gas_price) except SDKException as e: msg = 'Other Error, [NeoVmService] service system call error!: [SystemCall] service execute ' \ 'error!: [Invoke] Native serivce function execute error!: remove key failed: ' \ 'public key has already been revoked' self.assertEqual(59000, e.args[0]) self.assertEqual(msg, e.args[1])
def test_get_random_bytes(self): try: length = -1 util.get_random_bytes(length) except ValueError: raised = True self.assertTrue(raised, 'Exception raised') length = 0 self.assertEqual(len(util.get_random_bytes(length)), length) length = 1 self.assertEqual(len(util.get_random_bytes(length)), length) length = 64 self.assertEqual(len(util.get_random_bytes(length)), length) length = 256 self.assertEqual(len(util.get_random_bytes(length)), length) length = 1024 self.assertEqual(len(util.get_random_bytes(length)), length) length = 2048 self.assertEqual(len(util.get_random_bytes(length)), length)
def test_send_add_recovery_transaction(self): ont_id = sdk.native_vm().ont_id() label = 'label' password = '******' private_key = '75de8489fcb2dcaf2ef3cd607feffde18789de7da129b5e97c81e001793cb7cf' acct = Account(private_key, SignatureScheme.SHA256withECDSA) identity = sdk.wallet_manager.create_identity_from_private_key(label, password, private_key) rand_private_key = util.get_random_bytes(32).hex() recovery = Account(rand_private_key, SignatureScheme.SHA256withECDSA) b58_recovery_address = recovery.get_address_base58() password = '******' gas_limit = 20000 gas_price = 500 try: ont_id.send_add_recovery_transaction(identity, password, b58_recovery_address, acct, gas_limit, gas_price) except SDKException as e: msg = 'Other Error, [NeoVmService] service system call error!: [SystemCall] ' \ 'service execute error!: [Invoke] Native serivce function execute error!: ' \ 'add recovery failed: already set recovery' self.assertEqual(59000, e.args[0]) self.assertEqual(msg, e.args[1])
def create_account(self, label: str, pwd: str) -> AccountData: priv_key = get_random_bytes(32) salt = get_random_bytes(16) account = self.__create_account(label, pwd, salt, priv_key, True) return self.wallet_file.get_account_by_address( account.get_address_base58())
def create_identity_from_prikey(self, label: str, pwd: str, private_key: bytes): salt = get_random_bytes(16) identity = self.__create_identity(label, pwd, salt, private_key) private_key = None return identity
def create_identity(self, label: str, pwd: str): priv_key = get_random_bytes(32) salt = get_random_bytes(16) return self.__create_identity(label, pwd, salt, priv_key)
self.wallet_in_mem.identities[index].controls[0].salt) private_key = Account.get_gcm_decoded_private_key( key, pwd, addr, salt, Scrypt().get_n(), self.scheme) return Account(private_key, self.scheme) return None if __name__ == '__main__': # test wallet load and save private_key = '99bbd375c745088b372c6fc2ab38e2fb6626bc552a9da47fc3d76baa21537a1c' private_key = a2b_hex(private_key.encode()) scheme = SignatureScheme.SHA256withECDSA acct0 = Account(private_key, scheme) encrypted_key = 'T3uep1USsEqiJbP4O+CKsl2AWfpGjvuVSKxpoKeGdEUa0nfLHHjIq3G4xOz7a4PC' wallet_path = 'test.json' w = WalletManager() w.open_wallet(wallet_path) salt = get_random_bytes(16) # w.import_account("123", encrypted_key, '234', acct0.get_address_base58(), salt) if False: w.create_random_account("label", "1") w.create_random_identity("label-ontid", "1") w.create_account_from_prikey("label123", "1", private_key) w.create_identity_from_prikey("label123-ontid", "1", private_key) if True: acctTmp = w.get_account("AMJYVc3vHK7vZ3XfFXsBP9r9sGN1cYYeQN", "1") print(acctTmp.get_address_base58()) print(w.wallet_in_mem.accounts[0].__dict__) w.save(wallet_path)