| Table | Description |
|---|---|
| Balances | Transaction-level balances of SOL and SPL tokens from genesis, plus latest balance snapshots updated hourly. |
| Token Transfers | Records transfers of SPL tokens and SOL from one address to another. |
| Credit Debit | Records amount and credit/debit direction for every transfer event of assets with USD value using double-entry bookkeeping. |
| Balance Changes | Transaction-level balance changes with counterparty attribution, consolidating balance changes per transaction. |
| PNL | Transaction-level profit and loss records with realized and unrealized PNL calculations for portfolio analysis. |
Edge cases in Solana transfers
There are several known edge cases of solana’s transfer activity.1. Transfer of token account ownership as a means to move tokens
Although less conventional (and perhaps not recommended), it is possible to transfer the ownership of a token account. This is done via the setAuthority method. ✅ Allium’s coverage status: These transfers can be found with the filtertransfer_type = 'token_account_transfer'
2. Return of SOL balances from account closures
When closing a token account, a non-WSOL account is guaranteed to have 0 balance when closing, so only the rent is returned to thedestination of the close instruction.
When closing a WSOL account, it is possible to have non-zero balance of WSOL tokens. Upon closing, these WSOL tokens will be returned as SOL tokens to the destination.
✅ Alium’s coverage status: when a token account is closed, both the rent return + remaining WSOL balance is summed and indicated in the amount transferred. Such records can be found with transfer_type='account_closure_sol_balance_transfer'.
3. Transfers by PDA not holding balances
It is possible for an account to send SOL (i.e. is thefrom party of a SOL transfer) without actually holding any balance. In this tx, the account B51Nfh3X6Dqu4BzsafwzeknU7n2CraNneLsdAfs3zaSU shows total outgoing transfers of 0.115 SOL, but based on the SOL Balance Change tab, the account starts with 0 SOL balance. In addition, the account did not have rent deposited, and no funding activity prior to the outgoing transfers.
✅ Allium’s coverage status: The transfers themselves are indexed. However, when closing such accounts (as explained in #4), it would then seem as though it has a negative balance to return. In our data, we set amount=0 for the such cases. In the current dataset this applies to 29/1.7b rows.
4. Invisible SOL transfers
It is possible to move SOL without calling the systemtransfer and transferChecked method. In this tx, there are no visible transfer instructions for the sale of the NFT (~0.27 SOL), but looking at the SOL Balance Change tab, the buyer and seller of the NFT indeed have their SOL balance changed.
Allium’s coverage status: We currently use pre_balances and post_balances of the raw transaction data to infer amounts transferred, but only in the context of tensorswap sells (specifically the SellNftTokenPool method) to get NFT trades. All other indexing of invisible transfers will be on a case-by-case basis. If you intend to sum up transfers within a transaction for reconciliation, balance changes would be more suitable.
5. Collection of fees with TokenExtension program
In the TokenExtension program, in the fee extension, spl tokens can be collected by a fee authority usingwithdrawWithheldTokensFromAccounts and harvestWithheldTokensToMint. However, these 2 instructions do not generate transfer instructions, and the amount collected is not indicated. More info here and here.
Allium’s coverage status: Transfers of spl tokens as a result of calling fee collection methods withdrawWithheldTokensFromAccounts and harvestWithheldTokensToMint are not indexed yet, we estimate that this results in <0.01% transfers being missing.