perf(amm): cache verified token definitions

This commit is contained in:
Ricardo Guilherme Schmidt
2026-07-17 21:39:09 -03:00
parent 6ccd37b231
commit b71be34edf
8 changed files with 744 additions and 15 deletions
@@ -20,12 +20,21 @@ public:
int clearCalls = 0;
int createAccountCalls = 0;
mutable int readCalls = 0;
int publicAccountReadCalls = 0;
int submitCalls = 0;
int disconnectCalls = 0;
bool lastForceRefresh = false;
bool lastAccountWasPublic = false;
WalletPaths lastPaths;
WalletTransaction lastTransaction;
QStringList lastPublicAccountIds;
bool deferPublicAccountReads = false;
struct PendingPublicAccountRead {
QStringList accountIds;
AccountReadsCallback callback;
};
QVector<PendingPublicAccountRead> pendingPublicAccountReads;
WalletSession connect(const WalletPaths& paths) override
{
@@ -83,16 +92,21 @@ public:
void readPublicAccountsAsync(const QStringList& accountIds,
AccountReadsCallback callback) override
{
QVector<WalletAccountRead> results = readResults;
if (results.isEmpty()) {
results.reserve(accountIds.size());
for (const QString& accountId : accountIds) {
WalletAccountRead result = readResult;
result.accountId = accountId;
results.append(std::move(result));
}
++publicAccountReadCalls;
lastPublicAccountIds = accountIds;
if (deferPublicAccountReads) {
pendingPublicAccountReads.append({ accountIds, std::move(callback) });
return;
}
callback(std::move(results));
callback(accountReads(accountIds));
}
void completePendingPublicAccountReads()
{
QVector<PendingPublicAccountRead> pending;
pending.swap(pendingPublicAccountReads);
for (PendingPublicAccountRead& read : pending)
read.callback(accountReads(read.accountIds));
}
WalletSubmission submitPublicTransaction(
@@ -104,4 +118,19 @@ public:
}
void disconnect() override { ++disconnectCalls; }
private:
QVector<WalletAccountRead> accountReads(const QStringList& accountIds) const
{
QVector<WalletAccountRead> results = readResults;
if (results.isEmpty()) {
results.reserve(accountIds.size());
for (const QString& accountId : accountIds) {
WalletAccountRead result = readResult;
result.accountId = accountId;
results.append(std::move(result));
}
}
return results;
}
};