From 816d1afbb365edf97fe8ce9aff52a6d4a722909c Mon Sep 17 00:00:00 2001 From: Kevin Gorham Date: Thu, 13 Aug 2020 20:44:05 -0400 Subject: [PATCH] New: Add lightwalletd service for fetching t-addr txs. --- .../android/sdk/service/LightWalletGrpcService.kt | 14 ++++++++++++++ .../ecc/android/sdk/service/LightWalletService.kt | 10 ++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/main/java/cash/z/ecc/android/sdk/service/LightWalletGrpcService.kt b/src/main/java/cash/z/ecc/android/sdk/service/LightWalletGrpcService.kt index bce0c0a6..f882cff6 100644 --- a/src/main/java/cash/z/ecc/android/sdk/service/LightWalletGrpcService.kt +++ b/src/main/java/cash/z/ecc/android/sdk/service/LightWalletGrpcService.kt @@ -97,6 +97,20 @@ class LightWalletGrpcService private constructor( return channel.createStub().getTransaction(Service.TxFilter.newBuilder().setHash(ByteString.copyFrom(txId)).build()) } + override fun getTAddressTransactions( + tAddress: String, + blockHeightRange: IntRange + ): List { + if (blockHeightRange.isEmpty() || tAddress.isBlank()) return listOf() + + channel.resetConnectBackoff() + val result = channel.createStub().getAddressTxids( + Service.TransparentAddressBlockFilter.newBuilder().setAddress(tAddress) + .setRange(blockHeightRange.toBlockRange()).build() + ) + return result.toList() + } + override fun reconnect() { twig("closing existing channel and then reconnecting to" + " ${connectionInfo.host}:${connectionInfo.port}?usePlaintext=${connectionInfo.usePlaintext}") diff --git a/src/main/java/cash/z/ecc/android/sdk/service/LightWalletService.kt b/src/main/java/cash/z/ecc/android/sdk/service/LightWalletService.kt index 7f519b4b..3102ddbf 100644 --- a/src/main/java/cash/z/ecc/android/sdk/service/LightWalletService.kt +++ b/src/main/java/cash/z/ecc/android/sdk/service/LightWalletService.kt @@ -1,5 +1,6 @@ package cash.z.ecc.android.sdk.service +import cash.z.ecc.android.sdk.db.entity.ConfirmedTransaction import cash.z.wallet.sdk.rpc.CompactFormats import cash.z.wallet.sdk.rpc.Service @@ -52,6 +53,15 @@ interface LightWalletService { */ fun submitTransaction(spendTransaction: ByteArray): Service.SendResponse + /** + * Gets all the transactions for a given t-address over the given range. In practice, this is + * effectively the same as an RPC call to a node that's running an insight server. The data is + * indexed and responses are fairly quick. + * + * @return a list of transactions that correspond to the given address for the given range. + */ + fun getTAddressTransactions(tAddress: String, blockHeightRange: IntRange): List + /** * Fetch the details of a known transaction. *