What an instrument is
An instrument is one place to earn yield: a protocol, an asset, on a chain.
Aave USDC on Base is one instrument. Compound USDC on Base is a different one — same asset,
different protocol. Aave USDC on Arbitrum is a third.
The identifier
Each instrument has a 32-byte id, computed deterministically:executionAddressis the contract the position lives in: the Aave Pool, the Comet market, or the vault itself.marketIddistinguishes markets inside one contract. For per-asset protocols such as Aave and Compound it iskeccak256(abi.encode(underlying)); for vault-based protocols — Morpho, Euler, Fluid — the vault is the market, so it is the vault address widened to 32 bytes.
The chain is readable from the id
The chain is readable from the id
The top four bytes are the chain id.
0x00002105… is Base (8453), 0x0000a4b1… Arbitrum (42161),
0x00000082… Unichain (130). Nothing needs to be looked up to know where an instrument lives —
which is why the calldata endpoint takes no chainId parameter.The id is derived, not assigned
The id is derived, not assigned
It falls out of facts that are already on chain. Two systems computing it from the same market get
the same id, no registry consulted, no allocation step, no authority handing out numbers. Listing a
market is a catalogue entry, not a transaction.
What a row carries
Beyond identity, each instrument carries what you need to decide and to execute:- Tokens — underlying and yield token, with their addresses, symbols and decimals.
- Yield and size —
currentApy,tvl, and the reward breakdown behind them. - History — snapshots and metrics; optionally the derived fields
coefficientOfVariation,historyDays,rewardSharePctandtier, which rank instruments on yield that has held up rather than on today’s headline number. - A recipe — the protocol shape (
erc4626,aave-v3,comet) that tells the calldata builder how this position is entered and exited. A row without one is readable but not executable.
Adding an instrument
Listing a market takes no contract deployment, no registration transaction and no upgrade: the instrument becomes a row with its recipe, and a non-USDC underlying also needs its swap route pinned. That is the whole unit of work — which is why the catalogue can track new markets as fast as they appear rather than as fast as a deployment cycle allows.Next steps
Instruments API
Filtering, enrichment and the full row shape
Atomic Bundles
Turning an instrument id into calls
Metrics API
APY and TVL history per instrument
How It Works
Recipes, swap legs and simulation