Home / Solutions / Compliance
Compliance

Onchain transaction monitoring data: traces and state diffs, not just logs

Most indexers give you event logs. SQD gives you logs, internal calls, delegate calls, and state diffs together, the full execution footprint of a transaction. The hops a log-only feed cannot see, internal value and storage writes, are exactly the ones an investigation cares about. SQD is the data layer beneath your KYT or screening stack, not the screening itself.

225+ Networks
Traces Internal calls
State diffs Storage writes
Genesis Full history
Capabilities

Built for Compliance at scale

/

Complete execution traces

Every internal call, delegate call, and CREATE, not just the top-level transaction. When funds route through four intermediate contracts, all four hops are traces you follow by callTo and callFrom; a transactions-only view sees only the first.

=

State diffs for flows with no event

See exactly which storage slots changed and their before and after values. Reconstruct flows that bypass Transfer events entirely, an internal-ledger contract that moves value by writing storage directly, which event-only indexers are blind to.

+

Cross-chain fund tracking

The same query shape runs on 225+ networks. Following funds onto another chain is a one-line dataset change, not a separate integration per chain, with full history from genesis.

#

Structured exports for your stack

Structured, timestamped, decoded records, every field typed, every timestamp in UTC, streamed into your own store via the Squid or Pipes SDK. Feed them to an AML, KYT, or screening system; attribution and risk scoring stay with those tools.

Beyond event logs

Logs tell you what a contract chose to emit. Traces tell you what moved.

A log is written only when a contract's code emits one. Native value (ETH) moving emits no Transfer log; value moved by a contract mid-execution (an internal call) emits no log; and a contract can change balances by writing storage directly, with no event at all. Monitoring built on logs alone is blind to all three, which are exactly the paths used to obscure a flow of funds.

The gap is measurable. Filtering transactions by recipient looks like it captures everything that touched an address, but it misses every internal call that reached it through another contract. Over 20 Ethereum blocks (19,000,000 to 19,000,020), the WETH contract was the top-level recipient of 29 transactions but appeared in 2,370 internal-call traces:

MeasureCount
  • transactions where to = WETH29
  • internal-call traces touching WETH2,370
  • hops a transactions-only view misses2,341
WETH on Ethereum, blocks 19,000,000-19,000,020

The fix is to query traces, not transactions. This filter catches an address whether it received or sent value, at any depth, and joins each hop back to its transaction:

follow funds through internal calls
POST https://portal.sqd.dev/datasets/ethereum-mainnet/stream
{
"type": "evm",
"fromBlock": 19000000,
"toBlock": 19000500,
"traces": [
{ "type": ["call"], "callTo": ["0x...address..."], "transaction": true },
{ "type": ["call"], "callFrom": ["0x...address..."], "transaction": true }
],
"fields": {
"transaction": { "hash": true, "from": true, "to": true, "value": true },
"trace": { "type": true, "traceAddress": true, "callFrom": true, "callTo": true, "callValue": true, "callCallType": true }
}
}

traceAddress places each hop in the call tree; callValue is the value moved; callCallType separates a call from a delegatecall. Traces carry a transactionIndex, not a hash, so the query joins the transaction to tie each hop to one.

Below logs and calls

State diffs: the flows that leave no event

The hardest movements to follow leave no value-bearing call at all: a contract that maintains an internal balance ledger and moves funds by writing a storage slot. A state diff records which slots a transaction changed, with the previous and next value, the lowest-level evidence of what a transaction did. One real row that comes back, a USDC balance moving:

one changed storage slot, USDC
{
"address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"key": "0xd8a9b02cd36b54a798f62669d55d1e39cd3e2ef2f355be927a2823214d182bdc",
"kind": "*",
"prev": "0x...7243adebb", // 30,672.608955 USDC
"next": "0x...7420843bb" // 31,172.608955 USDC
}

Decoded, that is a 500 USDC transfer recorded as a storage write. Follow callValue through the traces and nothing moves here, because a token transfer carries no ETH, so the amount lives only in this diff. State diffs ride on a transactions query, the only filter that joins traces, logs, and diffs together for a transaction's complete footprint. The full walkthrough is in the compliance data guide.

The data layer, not the screening

SQD is the substrate; attribution stays with your stack

What SQD provides

The onchain record: logs, traces, and state diffs for a transaction, decoded and joined under one hash, across 225+ networks from genesis. Streamed into your own store via the Squid or Pipes SDK, ready to feed an AML, KYT, or screening system as structured, timestamped records.

What stays with your vendor

Attribution (linking an address to a real-world entity), risk scoring, sanctions lists, and Travel Rule message exchange. Onchain data shows what an address did, not who controls it. Chainalysis, Elliptic, and TRM Labs add attribution and risk scoring on top of the onchain record, and that screening is only as good as how complete the record is, which is what the traces and state diffs above make complete.

Use Cases

What teams build with SQD

AML transaction screening with full trace depth
Sanctions monitoring across all supported chains
Fund-flow reconstruction through nested contract calls
Suspicious activity report data preparation
Exchange compliance feeds with decoded transfers
KYT and Travel Rule data layers (attribution stays with your vendor)

Frequently asked questions

What is onchain transaction monitoring?
Onchain transaction monitoring is the continuous indexing and analysis of blockchain transactions to detect suspicious patterns, sanctions exposure, and AML/CFT risk. Doing it well needs full execution traces, state diffs, and decoded transfers across every chain a customer touches. Event-log-only monitoring misses internal transfers, delegate calls, and direct storage writes that bypass standard transfer-event patterns.
Can I produce a defensible, reproducible record of a transaction?
Yes. SQD returns a transaction's full footprint, the top-level call, every internal hop, every emitted event, and every storage change, joined under one transaction hash, each independently verifiable against the chain. That completeness is what makes a record reproducible and checkable later rather than taken on trust. Attribution and the regulatory judgment stay with your screening tools and compliance team.
Can SQD power a Travel Rule integration?
SQD provides the underlying transaction and counterparty data that Travel Rule workflows depend on. It does not sign or transmit Travel Rule messages between VASPs; it is the data layer beneath the Travel Rule providers, exchange compliance teams, and analytics platforms that do. The chain provides the transfer (asset, amount, addresses, timestamp); the identity data is exchanged off-chain through dedicated Travel Rule protocols.
How does SQD compare to Chainalysis for KYT?
Chainalysis, TRM Labs, and Elliptic offer end-to-end KYT products with curated risk scoring and entity attribution. SQD is the data layer underneath: raw, decoded, cross-chain transaction data with full traces and state diffs. Compliance teams use SQD to build proprietary monitoring with control over rules and thresholds, or to feed an existing KYT stack with normalized onchain data. Attribution, linking an address to a real-world entity, is off-chain intelligence those vendors specialize in, not something onchain data alone provides.
What chains are supported for compliance?
All 225+ supported chains, including EVM L1s and L2s (Ethereum, Base, Arbitrum, Polygon, BNB, Avalanche), Solana, Substrate parachains, Bitcoin, and Hyperliquid. Cross-chain monitoring is served through a single API. See the full list on the supported chains page.
Get started

Your blockchain data infrastructure, handled.

Private Portal. Dedicated. Validated. Managed. Tell us what you're building, we'll show you what it looks like on SQD.