def test_relayTransferTokenTxnBySlave(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() walletd._public_stub.PushTransaction = Mock( return_value=xrd_pb2.PushTransactionResp(error_code=xrd_pb2.PushTransactionResp.SUBMITTED)) service = WalletAPIService(walletd) resp = service.AddNewAddressWithSlaves(xrdwallet_pb2.AddNewAddressWithSlavesReq(), context=None) qaddress = resp.address addr_state = AddressState.get_default(walletd.qaddress_to_address(qaddress)) slaves = walletd.get_slave_list(qaddress) addr_state.add_slave_pks_access_type(bytes(hstr2bin(slaves[0][0].pk)), 0) walletd._public_stub.GetAddressState = Mock( return_value=xrd_pb2.GetAddressStateResp(state=addr_state.pbdata)) alice_xmss = get_alice_xmss(4) bob_xmss = get_bob_xmss(4) qaddresses_to = [alice_xmss.qaddress, bob_xmss.qaddress] amounts = [1000000000, 1000000000] resp = service.RelayTransferTokenTxnBySlave( xrdwallet_pb2.RelayTransferTokenTxnBySlaveReq(addresses_to=qaddresses_to, amounts=amounts, token_txhash='', fee=100000000, master_address=qaddress), context=None) self.assertEqual(resp.code, 0) self.assertIsNotNone(resp.tx)
def test_addNewAddress(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) resp = service.AddNewAddress(xrdwallet_pb2.AddNewAddressReq(), context=None) self.assertEqual(resp.code, 0) self.assertEqual(resp.address[0], 'Q')
def test_relayTransferTokenTxn(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) resp = service.AddNewAddress(xrdwallet_pb2.AddNewAddressReq(), context=None) qaddress = resp.address addr_state = AddressState.get_default(walletd.qaddress_to_address(qaddress)) walletd._public_stub.GetAddressState = Mock( return_value=xrd_pb2.GetAddressStateResp(state=addr_state.pbdata)) walletd._public_stub.IsSlave = Mock( return_value=xrd_pb2.IsSlaveResp(result=True)) walletd._public_stub.GetOTS = Mock( return_value=xrd_pb2.GetOTSResp(next_unused_ots_index=0, unused_ots_index_found=True)) alice_xmss = get_alice_xmss(4) bob_xmss = get_bob_xmss(4) qaddresses_to = [alice_xmss.qaddress, bob_xmss.qaddress] amounts = [1000000000, 1000000000] walletd._public_stub.PushTransaction = Mock( return_value=xrd_pb2.PushTransactionResp(error_code=xrd_pb2.PushTransactionResp.SUBMITTED)) resp = service.RelayTransferTokenTxn(xrdwallet_pb2.RelayTransferTokenTxnReq(addresses_to=qaddresses_to, amounts=amounts, token_txhash='', fee=100000000, master_address=None, signer_address=qaddress, ots_index=0), context=None) self.assertEqual(resp.code, 0) self.assertIsNotNone(resp.tx)
def test_relayMessageTxnBySlave(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() walletd._public_stub.PushTransaction = Mock( return_value=xrd_pb2.PushTransactionResp(error_code=xrd_pb2.PushTransactionResp.SUBMITTED)) service = WalletAPIService(walletd) resp = service.AddNewAddressWithSlaves(xrdwallet_pb2.AddNewAddressWithSlavesReq(), context=None) qaddress = resp.address addr_state = AddressState.get_default(walletd.qaddress_to_address(qaddress)) slaves = walletd.get_slave_list(qaddress) addr_state.add_slave_pks_access_type(bytes(hstr2bin(slaves[0][0].pk)), 0) walletd._public_stub.GetAddressState = Mock( return_value=xrd_pb2.GetAddressStateResp(state=addr_state.pbdata)) resp = service.RelayMessageTxnBySlave( xrdwallet_pb2.RelayMessageTxnReq(message=b'Hello xrd!', fee=100000000, master_address=qaddress), context=None) self.assertEqual(resp.code, 0) self.assertIsNotNone(resp.tx)
def test_relayMessageTxn(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() walletd._public_stub.PushTransaction = Mock( return_value=xrd_pb2.PushTransactionResp(error_code=xrd_pb2.PushTransactionResp.SUBMITTED)) service = WalletAPIService(walletd) resp = service.AddNewAddress(xrdwallet_pb2.AddNewAddressReq(), context=None) qaddress = resp.address addr_state = AddressState.get_default(walletd.qaddress_to_address(qaddress)) walletd._public_stub.GetAddressState = Mock( return_value=xrd_pb2.GetAddressStateResp(state=addr_state.pbdata)) walletd._public_stub.GetOTS = Mock( return_value=xrd_pb2.GetOTSResp(next_unused_ots_index=0, unused_ots_index_found=True)) resp = service.RelayMessageTxn(xrdwallet_pb2.RelayMessageTxnReq(message=b'Hello xrd!', fee=100000000, master_address=None, signer_address=qaddress, ots_index=0), context=None) self.assertEqual(0, resp.code) self.assertIsNotNone(resp.tx)
def run(): logger.initialize_default(force_console_output=True).setLevel(logging.INFO) file_handler = logger.log_to_file() file_handler.setLevel(logging.INFO) LOG_FORMAT_CUSTOM = '%(asctime)s| %(levelname)s : %(message)s' # noqa logger.set_colors(False, LOG_FORMAT_CUSTOM) logger.set_unhandled_exception_handler() walletd = WalletD() # noqa wallet_server = grpc.server( ThreadPoolExecutor(max_workers=config.user.wallet_api_threads), maximum_concurrent_rpcs=config.user.wallet_api_max_concurrent_rpc) add_WalletAPIServicer_to_server(WalletAPIService(walletd), wallet_server) wallet_server.add_insecure_port("{0}:{1}".format( config.user.wallet_api_host, config.user.wallet_api_port)) wallet_server.start() logger.info("WalletAPIService Started") try: while True: sleep(60) except Exception: # noqa wallet_server.stop(0)
def test_addAddressFromSeed(self): with set_xrd_dir("wallet_ver1"): qaddress = "Q010400ff39df1ba4d1d5b8753e6d04c51c34b95b01fc3650c10ca7b296a18bdc105412c59d0b3b" hex_seed = "0104008441d43524996f76236141d16b7b324323abf796e77ad7c874622a82f5744bb803f9b404d25733d0db82be7ac6f3c4cf" walletd = WalletD() service = WalletAPIService(walletd) resp = service.AddAddressFromSeed(xrdwallet_pb2.AddAddressFromSeedReq(seed=hex_seed), context=None) self.assertEqual(resp.code, 0) self.assertEqual(resp.address, qaddress)
def test_listAddresses(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) resp = service.AddNewAddress(xrdwallet_pb2.AddNewAddressReq(), context=None) address = resp.address resp = service.ListAddresses(xrdwallet_pb2.ListAddressesReq(), context=None) self.assertEqual(resp.addresses[0], address)
def test_addNewAddressWithSlaves(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() walletd._public_stub.PushTransaction = Mock( return_value=xrd_pb2.PushTransactionResp(error_code=xrd_pb2.PushTransactionResp.SUBMITTED)) service = WalletAPIService(walletd) resp = service.AddNewAddressWithSlaves(xrdwallet_pb2.AddNewAddressWithSlavesReq(), context=None) self.assertEqual(resp.code, 0) self.assertEqual(resp.address[0], 'Q')
def test_getWalletInfo(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) resp = service.GetWalletInfo(xrdwallet_pb2.GetWalletInfoReq(), context=None) self.assertEqual(resp.version, 1) self.assertEqual(resp.address_count, 0) self.assertFalse(resp.is_encrypted)
def test_getRecoverySeeds(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) service.AddAddressFromSeed(xrdwallet_pb2.AddAddressFromSeedReq(seed=self.mnemonic), context=None) resp = service.GetRecoverySeeds(xrdwallet_pb2.GetRecoverySeedsReq(address=self.qaddress), context=None) self.assertEqual(resp.hexseed, self.hex_seed) self.assertEqual(resp.mnemonic, self.mnemonic)
def test_isValidAddress(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) qaddress = "Q010400ff39df1ba4d1d5b8753e6d04c51c34b95b01fc3650c10ca7b296a18bdc105412c59d0b3b" resp = service.IsValidAddress(xrdwallet_pb2.ValidAddressReq(address=qaddress), context=None) self.assertEqual(resp.valid, "True") qaddress = "Q010400ff39df1ba4d1d5b8753e6d04c51c34b95b01fc3650c10ca7b296a18bdc105412c59d0b00" resp = service.IsValidAddress(xrdwallet_pb2.ValidAddressReq(address=qaddress), context=None) self.assertEqual(resp.valid, "False")
def test_getHeight(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) walletd._public_stub.GetHeight = Mock( return_value=xrd_pb2.GetHeightResp(height=1001)) resp = service.GetHeight(xrdwallet_pb2.HeightReq(), context=None) self.assertEqual(resp.code, 0) self.assertEqual(resp.height, 1001)
def test_getTotalBalance(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) walletd._public_stub.GetTotalBalance = Mock( return_value=xrd_pb2.GetTotalBalanceResp(balance=6000)) resp = service.GetTotalBalance(xrdwallet_pb2.TotalBalanceReq(), context=None) self.assertEqual(resp.code, 0) self.assertEqual(resp.balance, "6000")
def test_getAddressFromPK(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) pk = '01020016ecb9f39b9f4275d5a49e232346a15ae2fa8c50a2927daeac189b8c5f2d1' \ '8bc4e3983bd564298c49ae2e7fa6e28d4b954d8cd59398f1225b08d6144854aee0e' resp = service.GetAddressFromPK(xrdwallet_pb2.AddressFromPKReq(pk=pk), context=None) self.assertEqual(resp.code, 0) self.assertEqual(resp.address, 'Q010200670246b0026436b717f199e3ec5320ba6ab61d5eddff811ac199a9e9b871d3280178b343')
def test_encryptWallet(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) service.AddNewAddress(xrdwallet_pb2.AddNewAddressReq(), context=None) resp = service.EncryptWallet(xrdwallet_pb2.EncryptWalletReq(), context=None) self.assertEqual(resp.code, 1) resp = service.EncryptWallet(xrdwallet_pb2.EncryptWalletReq(passphrase=self.passphrase), context=None) self.assertEqual(resp.code, 0) resp = service.EncryptWallet(xrdwallet_pb2.EncryptWalletReq(passphrase=self.passphrase), context=None) self.assertEqual(resp.code, 1)
def test_getTransactionsByAddress(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) walletd._public_stub.GetMiniTransactionsByAddress = Mock( return_value=xrd_pb2.GetMiniTransactionsByAddressResp(mini_transactions=[], balance=0)) resp = service.GetTransactionsByAddress( xrdwallet_pb2.TransactionsByAddressReq(address=get_alice_xmss(4).qaddress), context=None) self.assertEqual(resp.code, 0) self.assertEqual(len(resp.mini_transactions), 0) self.assertEqual(resp.balance, 0)
def test_removeAddress(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) resp = service.AddNewAddress(xrdwallet_pb2.AddNewAddressReq(), context=None) address = resp.address resp = service.ListAddresses(xrdwallet_pb2.ListAddressesReq(), context=None) self.assertEqual(len(resp.addresses), 1) resp = service.RemoveAddress(xrdwallet_pb2.RemoveAddressReq(address=address), context=None) self.assertEqual(resp.code, 0) resp = service.ListAddresses(xrdwallet_pb2.ListAddressesReq(), context=None) self.assertEqual(len(resp.addresses), 0)
def test_getBlockByNumber(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) block = xrd_pb2.Block() block.header.hash_header = b'001122' block.header.block_number = 1 walletd._public_stub.GetBlockByNumber = Mock( return_value=xrd_pb2.GetBlockResp(block=block)) resp = service.GetBlockByNumber(xrdwallet_pb2.BlockByNumberReq(block_number=1), context=None) self.assertEqual(resp.code, 0) self.assertEqual(resp.block.header.hash_header, bin2hstr(block.header.hash_header)) self.assertEqual(resp.block.header.block_number, block.header.block_number)
def test_getOTS(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) ots_bitfield_by_page = xrd_pb2.OTSBitfieldByPage(ots_bitfield=[b'\x00'] * 10, page_number=1) walletd._public_stub.GetOTS = Mock( return_value=xrd_pb2.GetOTSResp(ots_bitfield_by_page=[ots_bitfield_by_page], next_unused_ots_index=1, unused_ots_index_found=True)) resp = service.GetOTS(xrdwallet_pb2.OTSReq(address=self.qaddress), context=None) self.assertEqual(resp.code, 0) self.assertEqual(len(resp.ots_bitfield_by_page), 1) self.assertEqual(resp.ots_bitfield_by_page[0], ots_bitfield_by_page) self.assertEqual(resp.next_unused_ots_index, 1)
def test_getTransaction(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) tx = xrd_pb2.Transaction() tx.fee = 10 tx.transaction_hash = b'1234' tx.message.message_hash = b'hello' pk = '01020016ecb9f39b9f4275d5a49e232346a15ae2fa8c50a2927daeac189b8c5f2d1' \ '8bc4e3983bd564298c49ae2e7fa6e28d4b954d8cd59398f1225b08d6144854aee0e' tx.public_key = bytes(hstr2bin(pk)) walletd._public_stub.GetTransaction = Mock( return_value=xrd_pb2.GetTransactionResp(tx=tx, confirmations=10)) resp = service.GetTransaction(xrdwallet_pb2.TransactionReq(tx_hash=tx.transaction_hash), context=None) self.assertEqual(resp.code, 0) self.assertIsNotNone(resp.tx) self.assertEqual(resp.tx.transaction_hash, bin2hstr(tx.transaction_hash)) self.assertEqual(resp.confirmations, "10")
def test_changePassphrase(self): with set_xrd_dir("wallet_ver1"): walletd = WalletD() service = WalletAPIService(walletd) service.AddNewAddress(xrdwallet_pb2.AddNewAddressReq(), context=None) resp = service.ListAddresses(xrdwallet_pb2.ListAddressesReq(), context=None) self.assertEqual(resp.code, 0) self.assertEqual(len(resp.addresses), 1) resp = service.EncryptWallet(xrdwallet_pb2.EncryptWalletReq(passphrase=self.passphrase), context=None) self.assertEqual(resp.code, 0) resp = service.ListAddresses(xrdwallet_pb2.ListAddressesReq(), context=None) self.assertEqual(resp.code, 1) resp = service.UnlockWallet(xrdwallet_pb2.UnlockWalletReq(passphrase=self.passphrase), context=None) self.assertEqual(resp.code, 0) resp = service.ListAddresses(xrdwallet_pb2.ListAddressesReq(), context=None) self.assertEqual(resp.code, 0) resp = service.LockWallet(xrdwallet_pb2.LockWalletReq(), context=None) self.assertEqual(resp.code, 0) new_passphrase = "Hello World" resp = service.ChangePassphrase( xrdwallet_pb2.ChangePassphraseReq(oldPassphrase=self.passphrase, newPassphrase=new_passphrase), context=None) self.assertEqual(resp.code, 0) resp = service.UnlockWallet(xrdwallet_pb2.UnlockWalletReq(passphrase=self.passphrase), context=None) self.assertEqual(resp.code, 1) resp = service.UnlockWallet(xrdwallet_pb2.UnlockWalletReq(passphrase=new_passphrase), context=None) self.assertEqual(resp.code, 0)