From 1135353a8461104866e576b4b62865725ad9922e Mon Sep 17 00:00:00 2001 From: Carter Jernigan Date: Fri, 15 Jul 2022 07:09:00 -0400 Subject: [PATCH] [#606] Fix BlockHeight read from CompactBlockStore --- .../android/sdk/block/CompactBlockProcessor.kt | 15 ++++++++------- .../sdk/internal/block/CompactBlockDbStore.kt | 5 +++-- .../sdk/internal/block/CompactBlockStore.kt | 2 +- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/sdk-lib/src/main/java/cash/z/ecc/android/sdk/block/CompactBlockProcessor.kt b/sdk-lib/src/main/java/cash/z/ecc/android/sdk/block/CompactBlockProcessor.kt index f1d1dc83..f5a86edd 100644 --- a/sdk-lib/src/main/java/cash/z/ecc/android/sdk/block/CompactBlockProcessor.kt +++ b/sdk-lib/src/main/java/cash/z/ecc/android/sdk/block/CompactBlockProcessor.kt @@ -304,13 +304,15 @@ class CompactBlockProcessor internal constructor( ProcessorInfo( networkBlockHeight = downloader.getLatestBlockHeight(), lastScannedHeight = getLastScannedHeight(), - lastDownloadedHeight = BlockHeight.new( - network, - max( - getLastDownloadedHeight().value, - lowerBoundHeight.value - 1 + lastDownloadedHeight = getLastDownloadedHeight()?.let { + BlockHeight.new( + network, + max( + it.value, + lowerBoundHeight.value - 1 + ) ) - ), + }, lastDownloadRange = null, lastScanRange = null ).let { initialInfo -> @@ -574,7 +576,6 @@ class CompactBlockProcessor internal constructor( progress = (i / batches.toFloat() * 100).roundToInt() _progress.send(progress) val lastDownloadedHeight = downloader.getLastDownloadedHeight() - .takeUnless { it < network.saplingActivationHeight } updateProgress(lastDownloadedHeight = lastDownloadedHeight) downloadedBlockHeight = end } diff --git a/sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/block/CompactBlockDbStore.kt b/sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/block/CompactBlockDbStore.kt index 70bfe930..812cdc43 100644 --- a/sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/block/CompactBlockDbStore.kt +++ b/sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/block/CompactBlockDbStore.kt @@ -11,7 +11,6 @@ import cash.z.ecc.android.sdk.model.BlockHeight import cash.z.ecc.android.sdk.type.ZcashNetwork import cash.z.wallet.sdk.rpc.CompactFormats import kotlinx.coroutines.withContext -import kotlin.math.max /** * An implementation of CompactBlockStore that persists information to a database in the given @@ -24,7 +23,9 @@ class CompactBlockDbStore private constructor( private val cacheDao = cacheDb.compactBlockDao() - override suspend fun getLatestHeight(): BlockHeight = BlockHeight.new(network, max(0L, cacheDao.latestBlockHeight())) + override suspend fun getLatestHeight(): BlockHeight? = runCatching { + BlockHeight.new(network, cacheDao.latestBlockHeight()) + }.getOrNull() override suspend fun findCompactBlock(height: BlockHeight): CompactFormats.CompactBlock? = cacheDao.findCompactBlock(height.value)?.let { CompactFormats.CompactBlock.parseFrom(it) } diff --git a/sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/block/CompactBlockStore.kt b/sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/block/CompactBlockStore.kt index 0c29f011..f0be0166 100644 --- a/sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/block/CompactBlockStore.kt +++ b/sdk-lib/src/main/java/cash/z/ecc/android/sdk/internal/block/CompactBlockStore.kt @@ -12,7 +12,7 @@ interface CompactBlockStore { * * @return the latest block height. */ - suspend fun getLatestHeight(): BlockHeight + suspend fun getLatestHeight(): BlockHeight? /** * Fetch the compact block for the given height, if it exists.