Who it’s for
Teams building compliance, AML, transaction-monitoring, and forensics tooling: anything that needs a complete, ordered, defensible record of what an address did and what it holds. The goal is a full audit trail you own: every event in sequence, every counterparty, the address’s current and historical positions, and the standing risk it has granted, all reconstructable from Moralis-indexed, normalized per-block onchain data.The recipe bundle
This use case combines a small set of recipes. Start with Wallet History as the chronological backbone, layer Token Transfers and Swaps by Wallet for asset-level and DEX-activity trails, Token Balances by Wallet and Native Balances for the address’s full asset positions, and Token Approvals for the standing risk surface.Wallet History already contains the transfer, swap, and approval events. If a single, filterable event feed per address is enough, the backbone recipe alone is your audit trail. Add the standalone recipes when you want dedicated, differently-keyed tables: Token Transfers keyed by token for counterparty tracing, Swaps by Wallet for trade-level notional, Token Approvals for live-allowance reconciliation, and Token Balances by Wallet + Native Balances for current/historical position snapshots. Add the log recipes when you need raw, decode-it-yourself completeness: events on custom or non-standard contracts that the decoded feeds don’t cover, which an audit can’t afford to miss.
How the pieces fit
- Wallet History is the spine: the complete, ordered, classified feed for one address. Each row is tagged
sent/received/self/minted/burnedviadirection, and the event kind viaevent_type, so a full activity timeline falls out of one table. - Token Transfers and Swaps by Wallet are asset-first and trade-first views of the same source events, keyed for the questions a forensics workflow asks: “who did this address transact with for token X” and “what was the USD notional of each trade.”
- Token Balances by Wallet, Native Balances, and Token Approvals describe state: the address’s token and native positions over time, and the standing allowances it has granted. Balances answer “what does this address hold, now or at block N”; approvals are the risk surface: an unrevoked unlimited allowance is live exposure regardless of activity.
- The log recipes are the completeness backstop. The decoded feeds cover standard transfers, swaps, and approvals; Contract Logs and Logs by Event Signature capture everything else (custom protocol events, non-standard contracts, interactions with a flagged address) as raw
topic0…3+datayou decode against the ABI. For audit defensibility, “we indexed every event” beats “we indexed the events we had a decoder for.”
Building the per-address audit trail
The compliance question is “show me everything this address did, in order.” That is the Wallet History feed, read reorg-safe withFINAL:
(token, spender), dropping anything revoked to zero:
argMax over (block_number, log_index) rather than a bare WHERE sign = 1 so the read is correct under the collapsing log-table model and converges after reorgs.
Notes and considerations
- Read canonical state correctly. On ClickHouse, every fact table follows the collapsing log-table pattern. Read with
FINALor a sign-aware aggregate (argMax,sum(sign)), never a bareWHERE sign = 1, so the trail stays correct across chain reorganizations. - Approvals are EVM-only (ERC-20
Approval(owner, spender, value)). Value the exposure, not allowance × price. An unlimited approval is2^256-1, so dollar-weighting it is meaningless; treat unrevoked unlimited allowances as a categorical risk flag. - Chains. Wallet History, Token Transfers, Token Balances by Wallet, Native Balances, and Swaps by Wallet are chain-parametrized across EVM and Solana; Token Approvals is EVM only.
- Counterparty enrichment is yours. The recipes deliver the complete, ordered primitives: addresses, amounts, directions, counterparties. Sanctions screening, address labelling, and risk scoring are downstream layers your application runs over this trail.
- Decimals and USD. Scale raw
amount/valuetext fields by10^token_decimalsbefore reporting; source decimals from a Token Metadata sync. Wallet History folds USD inline where decimals are known (swaps, LP changes); Swaps by Wallet carriesnotional_usdper trade. - Completeness for audit. Run the ClickHouse path in
hybridmode so the trail backfills full history and then stays current, reorg-safe, at the chain head. - Pairing. For valuation across every asset, add Token Prices; for holder-side context on a token of interest, add Token Holders.
Get started
Data Feeds is in early access.Try it today
Build an owned, auditable per-address trail with the Moralis team.

