mirror of
https://github.com/logos-blockchain/lez-programs.git
synced 2026-08-25 06:01:11 +00:00
perf(wallet): skip redundant wallet account probes
This commit is contained in:
@@ -229,15 +229,7 @@ void LogosWalletProvider::connectAsync(const WalletPaths& paths, SessionCallback
|
||||
finishOpen(true, WalletFailure::None);
|
||||
return;
|
||||
}
|
||||
m_impl->logos->logos_execution_zone.list_accountsAsync(
|
||||
[this, generation, finishOpen, openStored](QVariantList accounts) mutable {
|
||||
if (generation != m_generation)
|
||||
return;
|
||||
if (!accounts.isEmpty())
|
||||
finishOpen(true, WalletFailure::None);
|
||||
else
|
||||
openStored();
|
||||
});
|
||||
openStored();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -468,9 +460,8 @@ bool LogosWalletProvider::sharedWalletIsOpen() const
|
||||
{
|
||||
if (!m_impl->logos)
|
||||
return false;
|
||||
if (!m_impl->logos->logos_execution_zone.get_sequencer_addr().isEmpty())
|
||||
return true;
|
||||
return !m_impl->logos->logos_execution_zone.list_accounts().isEmpty();
|
||||
// A live wallet always has a configured, non-empty sequencer URL.
|
||||
return !m_impl->logos->logos_execution_zone.get_sequencer_addr().isEmpty();
|
||||
}
|
||||
|
||||
WalletSnapshot LogosWalletProvider::loadSnapshot()
|
||||
|
||||
@@ -51,6 +51,7 @@ class LogosWalletProviderTest : public QObject {
|
||||
private slots:
|
||||
void adoptsOpenWalletAndCachesSnapshots();
|
||||
void opensConfiguredWalletWhenNoSharedSessionExists();
|
||||
void opensStoredWalletAsynchronouslyWithoutAccountProbe();
|
||||
void opensAndReadsAsynchronously();
|
||||
void avoidsSavingAfterUnchangedAsynchronousSnapshots();
|
||||
void createsAndPersistsWallet();
|
||||
@@ -144,6 +145,7 @@ void LogosWalletProviderTest::opensConfiguredWalletWhenNoSharedSessionExists()
|
||||
QVERIFY(!session.adopted);
|
||||
QCOMPARE(modules.logos_execution_zone.openCalls, 1);
|
||||
QCOMPARE(modules.logos_execution_zone.openedStorage, storage);
|
||||
QCOMPARE(modules.logos_execution_zone.listCalls, 1);
|
||||
|
||||
LogosModules missingModules;
|
||||
LogosWalletProvider missingProvider(&missingModules);
|
||||
@@ -151,6 +153,28 @@ void LogosWalletProviderTest::opensConfiguredWalletWhenNoSharedSessionExists()
|
||||
WalletFailure::WalletMissing);
|
||||
}
|
||||
|
||||
void LogosWalletProviderTest::opensStoredWalletAsynchronouslyWithoutAccountProbe()
|
||||
{
|
||||
QTemporaryDir directory;
|
||||
QVERIFY(directory.isValid());
|
||||
const QString storage = directory.filePath(QStringLiteral("storage.json"));
|
||||
QFile file(storage);
|
||||
QVERIFY(file.open(QIODevice::WriteOnly));
|
||||
file.close();
|
||||
|
||||
LogosModules modules;
|
||||
LogosWalletProvider provider(&modules);
|
||||
bool connected = false;
|
||||
provider.connectAsync({ directory.filePath(QStringLiteral("wallet.json")), storage },
|
||||
[&connected](WalletSession session) {
|
||||
connected = session.ok() && !session.adopted;
|
||||
});
|
||||
|
||||
QVERIFY(connected);
|
||||
QCOMPARE(modules.logos_execution_zone.openCalls, 1);
|
||||
QCOMPARE(modules.logos_execution_zone.listCalls, 1);
|
||||
}
|
||||
|
||||
void LogosWalletProviderTest::opensAndReadsAsynchronously()
|
||||
{
|
||||
LogosModules modules;
|
||||
|
||||
Reference in New Issue
Block a user