Data access · 9 min read

Monitoring tokenized assets onchain: a real treasury fund, decoded

A tokenized treasury fund is a regulated security that lives on a public chain. BlackRock's BUIDL fund is the obvious example, and rather than describe what you could watch, this guide pulls its actual onchain life with one query: who shares are issued to, the issuer's own control events, and holder transfers, all in a single query's raw logs that you decode by their topic0, with no node and no integration built per issuer. Every value below comes straight from the Portal, pinned to a fixed block so you can run it yourself.

Updated 2026-06-18 · By the SQD team

1. A regulated security, live onchain

BUIDL is the BlackRock USD Institutional Digital Liquidity Fund, a tokenized money-market fund issued via Securitize. It is a permissioned token: only approved wallets can hold it, and each share tracks a US dollar. On Ethereum its contract resolves, from an open token list rather than memory, to a single deterministic address (0x7712…2aec):

portal_resolve_entity('BUIDL', ethereum-mainnet)
{ "symbol": "BUIDL",
"name": "BlackRock USD Institutional Digital Liquidity Fund",
"address": "0x7712c34205737192402172409a8f7ccef8aa2aec",
"decimals": 6,
"source": "coingecko_token_list" }

For a risk, compliance, or treasury desk, the questions about an instrument like this are concrete: who holds it, when shares are issued or redeemed, where they move, and what control actions the issuer takes. The claim this guide makes good on is that all of that is onchain and reachable in one query shape, decoded, without operating a node or wiring up a bespoke feed for each issuer.

2. What its onchain life actually looks like

One bounded query returns every BUIDL log in a block. This pulls block 25,344,852:

your terminal
curl -s -X POST https://portal.sqd.dev/datasets/ethereum-mainnet/stream \
-H 'content-type: application/json' \
-d '{
"type": "evm",
"fromBlock": 25344852, "toBlock": 25344852,
"logs": [{ "address": ["0x7712c34205737192402172409a8f7ccef8aa2aec"] }],
"fields": {
"log": { "topics": true, "data": true, "transactionHash": true }
}
}'

That block holds a single BUIDL transaction that does something specific and, to most people, invisible: the fund distributes its yield by minting new shares to its holders. In this one transaction it issued new BUIDL to a batch of whitelisted wallets, thirty-three of them, each a separate mint, all returned by the one query above:

Daily yield issuance new shares (BUIDL)
Real, from block 25,344,852 (2026-06-18), transaction 0x9214…0e2d. Each row is a Transfer from the zero address, the largest 4,693.97 shares. Eleven blocks later, transaction 0xc78c…0fb6 shows a secondary transfer of 326.81 BUIDL between two approved holders. Issuance, yield, and movement, all onchain.

A monitoring agent does not have to know any of this in advance. It points one query at the contract, gets every event in the window as raw logs, and reads the issuance off the Transfer-from-zero rows, matching topic0 to the known ERC-20 Transfer signature. The same query on a wider window is the fund's full issuance and transfer history.

3. The control events that ride alongside

A tokenized security carries more than transfers, and the extra events ride in the same log stream. Every BUIDL mint above is paired, in the same transaction, with a second event the standard ERC-20 ABI does not recognize. Here are both, raw from the stream for one holder: the Transfer, whose topic0 is the well-known ERC-20 signature, and the event riding alongside it, whose topic0 is not:

live response · portal.sqd.dev (two paired logs, same holder)
// the mint: a standard ERC-20 Transfer, topic0 is the known signature
{ "topics": [
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"0x0000000000000000000000000000000000000000000000000000000000000000",
"0x000000000000000000000000ce90bf97f11efe8967febe4159fc636f0d09ada6" ],
"data": "0x000000000000000000000000000000000000000000000000000000000fac7380" }
// 0x0fac7380 = 262960000 = 262.96 BUIDL
// the paired issuer event, same tx, same holder; topic0 not in the ERC-20 ABI
{ "topics": [
"0x7bbff60f84adf6a9b6881c0bae9f63e6f324d55f6ddeb2cf3213414a2f058d4a",
"0x000000000000000000000000ce90bf97f11efe8967febe4159fc636f0d09ada6" ],
"data": "0x000000000000000000000000000000000000000000000000000000000fac7380
0000000000000000000000000000000000000000000000000000000000000000" }
// first word 262960000 (matches the Transfer), second word 0

That topic0 resolves to Issue(address,uint256,uint256), BUIDL's own issuance event: the holder sits in the indexed topic, and the first word of the data, 262960000, matches the paired transfer to the same holder. You name issuer-specific events like this by supplying the issuer's ABI, which is exactly the work a monitoring desk does once per asset. The Portal's job is to make sure none of the events are missing: it hands you every log, the standard ones and the issuer-specific ones alike, keyed by topic0.

Some regulated tokens standardize this vocabulary. The ERC-3643 (T-REX) standard defines named compliance events that an identity-and-freeze framework emits, with these signatures (quoted from its token interface):

  • AddressFrozen Account frozen or unfrozen
    (address indexed _userAddress, bool indexed _isFrozen, address indexed _owner)
  • TokensFrozen Partial balance frozen
    (address indexed _userAddress, uint256 _amount)
  • Paused Transfers halted
    (address _userAddress)
  • RecoverySuccess Tokens recovered to a new wallet
    (address indexed _lostWallet, address indexed _newWallet, address indexed _investorOnchainID)
Signatures from TokenySolutions/T-REX. Whether an asset uses BUIDL's Issue event or T-REX's AddressFrozen, the monitoring mechanic is identical: filter the asset's logs, decode against its ABI, cite the block and transaction. A blocked transfer under a restriction standard like ERC-1404 reverts rather than emitting, so the durable trail is these control events plus the transfers that went through.

4. Every deployment, one shape; pin the contract

Tokenized funds increasingly deploy across several chains, and the query does not change between them. The identical decoded-log request runs on every chain SQD indexes, swapping only the dataset name and the asset's per-chain address, the same way the stablecoin guide reads one token across chains.

One mistake quietly ruins this. An event signature is global: the Transfer topic0 (0xddf2...3b3ef) is identical on every ERC-20 on every chain, so a query that filters by the event but not by a contract returns transfers from thousands of unrelated tokens at once.

FilterReturns
  • event onlyevery contract with that signature (noise)
  • event + contract pinonly BUIDL on that chain (signal)

The symbol is not safe to reuse across chains either. Resolving BUIDL on Base does not return BlackRock's fund; it lands on an unrelated token called GoHacker.AI (0x4b73…6642) with 18 decimals instead of BUIDL's 6, so a symbol-based filter would watch the wrong contract and misread every amount. Pin the per-chain contract, not the ticker.

So monitoring starts by resolving the asset's exact address per chain and always pinning it in the filter, which is why the first call in this guide was resolve_entity, not a global event scan.

5. Movement and control events, not balances

Two boundaries keep this honest. First, the data is the events the contract emits, issuance, transfers, and control actions, not a reconstructed per-holder balance series. You can watch every share issued and moved, which is what monitoring needs; turning that into holder positions over time is a separate aggregation you build on your own rows. Second, onchain events attest to onchain actions only. The BUIDL issuance proves shares were minted to those wallets; it does not prove the offchain treasuries behind them. This is a precise, timestamped trail of onchain activity, and it is not a proof of reserves. Stating both is what makes the monitoring trustworthy rather than overclaimed.

6. Why this is harder elsewhere

Curated token-activity APIs are built around the ERC-20 surface: transfers and balances. The issuer-specific control events, BUIDL's Issue, a T-REX token's AddressFrozen, an allowlist change, are not part of that standard surface, so they tend not to be exposed as queryable, decoded, citable data.

Getting every log a regulated token emits, the standard events named and the issuer-specific ones handed back raw to decode against the ABI, and doing it across every chain the asset is deployed on in one query shape, is the harder thing. It needs raw decoded logs for arbitrary signatures, not a fixed transfer-and-balance endpoint, which is what reading logs directly off the Portal provides.

For the same one-query-shape mechanics applied to a stablecoin, see stablecoin data. For the agent pattern that drives the monitoring loop, see AI agents and onchain data, and to wire the tools into an editor, the Portal MCP setup.

Frequently asked questions

Can I see a tokenized treasury fund's activity onchain?
Yes, in full. BlackRock's BUIDL fund (the USD Institutional Digital Liquidity Fund, contract 0x7712c34205737192402172409a8f7ccef8aa2aec on Ethereum) issues, distributes yield, and transfers entirely onchain. A single Portal query over one block returns its real activity: at block 25,344,852 it minted new shares to a batch of whitelisted wallets as a daily yield distribution, the largest 4,693.97 BUIDL, each mint paired with the issuer's own control event. None of it needs a node or a per-issuer integration.
What control events does a tokenized asset emit beyond Transfer?
It depends on the issuer's contract, and that is the point: the events ride in the same log stream as transfers. BUIDL emits an Issue(address,uint256,uint256) event alongside each share issuance. Tokens built on the ERC-3643 (T-REX) standard emit a shared compliance vocabulary: AddressFrozen, TokensFrozen, Paused, RecoverySuccess. Either way they ride in the same log stream. The raw Stream API curl shown in this guide hands back their topics and data to decode yourself; the portal_evm_query_logs MCP tool with decode=true does that step for you, naming the events it knows and returning the raw topic0 for the issuer-specific ones.
Why does decode=true sometimes return event_name null?
Because the generic decoder behind decode=true (the portal_evm_query_logs MCP tool) only knows standard signatures like ERC-20 Transfer. An issuer-specific event, such as BUIDL's Issue, comes back with event_name null and its raw topic0. You name it by supplying the issuer's ABI, or by resolving the signature: BUIDL's 0x7bbff60f...058d4a resolves to Issue(address,uint256,uint256), and the amount in its data matches the paired Transfer to the same holder.
Why must I pin the exact contract address when monitoring an asset?
Because an event signature is global. The Transfer topic0 is identical on every ERC-20 on every chain, so filtering by the event alone returns transfers from thousands of unrelated tokens. You pin the asset's exact contract per chain, which is why monitoring starts by resolving the address, not by scanning an event globally.
Does this tell me each holder's balance, or that the fund is backed?
No to both. The data is the events the contract emits: issuance, transfers, control actions, with exact block and transaction. It is movement and control-event evidence, not a reconstructed per-holder balance series and not an attestation that the offchain treasuries exist. Keep those separate; the onchain record is a precise, timestamped trail of what happened onchain, not a proof of reserves.

Monitoring tokenized assets?

See how issuance, transfer, and control-event data feed RWA tooling on the RWA solution page.