From 1f0798619af2f87b240e94895563b84244c6af0e Mon Sep 17 00:00:00 2001 From: julian Date: Thu, 30 May 2024 22:06:48 -0600 Subject: [PATCH] save spark set cache scanned timestamps --- lib/wallets/isar/models/wallet_info.dart | 2 ++ lib/wallets/wallet/impl/firo_wallet.dart | 16 ++++++++------ .../spark_interface.dart | 21 ++++++++++++++----- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/lib/wallets/isar/models/wallet_info.dart b/lib/wallets/isar/models/wallet_info.dart index a2b7ae126..55fc5e8a6 100644 --- a/lib/wallets/isar/models/wallet_info.dart +++ b/lib/wallets/isar/models/wallet_info.dart @@ -508,4 +508,6 @@ abstract class WalletInfoKeys { static const String lelantusCoinIsarRescanRequired = "lelantusCoinIsarRescanRequired"; static const String enableLelantusScanning = "enableLelantusScanningKey"; + static const String firoSparkCacheSetTimestampCache = + "firoSparkCacheSetTimestampCacheKey"; } diff --git a/lib/wallets/wallet/impl/firo_wallet.dart b/lib/wallets/wallet/impl/firo_wallet.dart index 3e8acd0f3..3372e11bd 100644 --- a/lib/wallets/wallet/impl/firo_wallet.dart +++ b/lib/wallets/wallet/impl/firo_wallet.dart @@ -589,7 +589,12 @@ class FiroWallet extends Bip39HDWallet @override Future recover({required bool isRescan}) async { // reset last checked values - groupIdTimestampUTCMap = {}; + await info.updateOtherData( + newEntries: { + WalletInfoKeys.firoSparkCacheSetTimestampCache: {}, + }, + isar: mainDB.isar, + ); final start = DateTime.now(); final root = await getRootHDNode(); @@ -753,7 +758,6 @@ class FiroWallet extends Bip39HDWallet updateUTXOs(), ]); - final List> futures = []; if (enableLelantusScanning) { futures.add(lelantusFutures[0]); @@ -776,10 +780,10 @@ class FiroWallet extends Bip39HDWallet await Future.wait([ if (enableLelantusScanning) recoverLelantusWallet( - latestSetId: latestSetId!, - usedSerialNumbers: usedSerialsSet!, - setDataMap: setDataMap!, - ), + latestSetId: latestSetId!, + usedSerialNumbers: usedSerialsSet!, + setDataMap: setDataMap!, + ), recoverSparkWallet( latestSparkCoinId: latestSparkCoinId, ), diff --git a/lib/wallets/wallet/wallet_mixin_interfaces/spark_interface.dart b/lib/wallets/wallet/wallet_mixin_interfaces/spark_interface.dart index 426217fac..b0409c899 100644 --- a/lib/wallets/wallet/wallet_mixin_interfaces/spark_interface.dart +++ b/lib/wallets/wallet/wallet_mixin_interfaces/spark_interface.dart @@ -21,6 +21,7 @@ import '../../../utilities/logger.dart'; import '../../crypto_currency/crypto_currency.dart'; import '../../crypto_currency/interfaces/electrumx_currency_interface.dart'; import '../../isar/models/spark_coin.dart'; +import '../../isar/models/wallet_info.dart'; import '../../models/tx_data.dart'; import '../intermediate/bip39_hd_wallet.dart'; import 'electrumx_interface.dart'; @@ -720,9 +721,6 @@ mixin SparkInterface ); } - // TODO: look into persistence for this? - Map groupIdTimestampUTCMap = {}; - /// Should only be called within the standard wallet [recover] function due to /// mutex locking. Otherwise behaviour MAY be undefined. Future recoverSparkWallet({ @@ -764,9 +762,15 @@ mixin SparkInterface final Map>> rawCoinsBySetId = {}; + final groupIdTimestampUTCMap = + info.otherData[WalletInfoKeys.firoSparkCacheSetTimestampCache] + as Map? ?? + {}; + final latestSparkCoinId = await electrumXClient.getSparkLatestCoinId(); for (int i = 1; i <= latestSparkCoinId; i++) { - final lastCheckedTimeStampUTC = groupIdTimestampUTCMap[i] ?? 0; + final lastCheckedTimeStampUTC = + groupIdTimestampUTCMap[i.toString()] as int? ?? 0; final info = await FiroCacheCoordinator.getLatestSetInfoForGroupId( i, ); @@ -789,12 +793,19 @@ mixin SparkInterface rawCoinsBySetId[i] = coinsRaw; } - groupIdTimestampUTCMap[i] = max( + groupIdTimestampUTCMap[i.toString()] = max( lastCheckedTimeStampUTC, info?.timestampUTC ?? lastCheckedTimeStampUTC, ); } + await info.updateOtherData( + newEntries: { + WalletInfoKeys.firoSparkCacheSetTimestampCache: groupIdTimestampUTCMap, + }, + isar: mainDB.isar, + ); + final List newlyIdCoins = []; for (final groupId in rawCoinsBySetId.keys) { final myCoins = await compute(