ICRC-1/ICRC-3 Generic way to get a transaction list for an account

Hi everyone,

I’ve been looking into the ICRC-1 standard recently, especially how achievable it would be to create a generic wallet implementation for all tokens that follow the standard. It appears to me, though, that there’s one thing that could make the shipping of a fully satisfactory solution a much harder task, I failed to find a generic way to fetch a list of token transactions for the specified account. I was looking for an indexer that provides such functionality, but without much luck.

During my search, I stumbled upon a draft for the ICRC-3 standard that is meant to standarize the way of accessing the transaction history, I even gave it a try with the ckBTC canister (I believe it implements the draft, doesn’t it?) and, though I found it to be a brilliant idea to have such feature coming directly from a canister, it sadly provides only a base functionality that doesn’t seem really scalable on the client side (depending on the canister activity, it could mean hundreds of network requests just to find an entry involving specific account).

Digging deeper into ckBTC I’ve noticed it comes with an indexer canister (Canister: n5wcd-faaaa-aaaar-qaaea-cai - IC Dashboard) that does exactly what I was looking for. Unfortunately, I didn’t find any signs that such a companion is part of any standard.

Is there a plan to somehow extend the ICRC standards with a similar indexer? Or maybe would it be feasible to make a method such as get_account_transactions in ckBTC’s indexer directly part of ICRC-3?

3 Likes

Hi @jsamol,

Yes there is! This came up at one of the last working group meetings and the consensus is that it is a good idea to standardize the account-transactions-indexer. Since the indexer is a separate canister and builds on top of the ICRC-3 methods, the latest conclusion is to standardize the indexer in a separate (extension) ICRC-standard (4?,5?) once the ICRC-3 standard is final.

1 Like

In addition, you may want to take a look at the Rosetta Standard. Ideally we’d have a rosetta implementation that could be plugged into any ICRC1 canister that would be able to serve up the proper queries to a rosetta service that external clients could use. The one DFINITY provides for ICP(and that OGY uses) has this built in. It should not be difficult to extend this to motoko and I know the DFINITY team was looking at reimplementing it in rust with some improvements.

1 Like

Perfect! I’m glad to hear that and really looking forward to seeing some work done in that direction. I guess it’s too early to talk about even rough ETAs, though, isn’t it?

That’s a good hint, I actually must have overlooked Rosetta. Thanks!