diff --git a/apps/shared/wallet/src/LogosWalletProvider.cpp b/apps/shared/wallet/src/LogosWalletProvider.cpp index f23321f..6015c61 100644 --- a/apps/shared/wallet/src/LogosWalletProvider.cpp +++ b/apps/shared/wallet/src/LogosWalletProvider.cpp @@ -609,18 +609,11 @@ void LogosWalletProvider::loadSnapshotAsync(quint64 generation, SnapshotCallback state->snapshot.publicAccountReads.append( state->publicReads.at(index)); } - m_impl->logos->logos_execution_zone.saveAsync( - [this, generation, state](int result) mutable { - if (generation != m_generation) - return; - if (result != WALLET_FFI_SUCCESS) - state->snapshot.failure = WalletFailure::SaveFailed; - if (state->snapshot.ok()) { - m_snapshot = state->snapshot; - m_snapshotReady = true; - } - state->callback(std::move(state->snapshot)); - }); + if (state->snapshot.ok()) { + m_snapshot = state->snapshot; + m_snapshotReady = true; + } + state->callback(std::move(state->snapshot)); }; if (entries.isEmpty()) { diff --git a/apps/shared/wallet/tests/cpp/LogosWalletProviderTest.cpp b/apps/shared/wallet/tests/cpp/LogosWalletProviderTest.cpp index 3be6565..c1d9e47 100644 --- a/apps/shared/wallet/tests/cpp/LogosWalletProviderTest.cpp +++ b/apps/shared/wallet/tests/cpp/LogosWalletProviderTest.cpp @@ -52,6 +52,7 @@ private slots: void adoptsOpenWalletAndCachesSnapshots(); void opensConfiguredWalletWhenNoSharedSessionExists(); void opensAndReadsAsynchronously(); + void avoidsSavingAfterUnchangedAsynchronousSnapshots(); void createsAndPersistsWallet(); void validatesCompletePublicAccountPayloads(); void fallsBackToBalanceWhenPublicReadFails(); @@ -182,6 +183,29 @@ void LogosWalletProviderTest::opensAndReadsAsynchronously() QVERIFY(batchRead); } +void LogosWalletProviderTest::avoidsSavingAfterUnchangedAsynchronousSnapshots() +{ + LogosModules modules; + modules.logos_execution_zone.sequencerAddress = QStringLiteral("http://sequencer"); + modules.logos_execution_zone.currentBlockHeight = 12; + modules.logos_execution_zone.lastSyncedBlock = 12; + LogosWalletProvider provider(&modules); + + bool connected = false; + provider.connectAsync({}, [&connected](WalletSession session) { + connected = session.ok(); + }); + QVERIFY(connected); + QCOMPARE(modules.logos_execution_zone.saveCalls, 0); + + bool refreshed = false; + provider.snapshotAsync(true, [&refreshed](WalletSnapshot snapshot) { + refreshed = snapshot.ok(); + }); + QVERIFY(refreshed); + QCOMPARE(modules.logos_execution_zone.saveCalls, 0); +} + void LogosWalletProviderTest::createsAndPersistsWallet() { QTemporaryDir directory;