Skip to main content

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:
  • executionAddress is the contract the position lives in: the Aave Pool, the Comet market, or the vault itself.
  • marketId distinguishes markets inside one contract. For per-asset protocols such as Aave and Compound it is keccak256(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.
Two consequences worth knowing:
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.
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 sizecurrentApy, tvl, and the reward breakdown behind them.
  • History — snapshots and metrics; optionally the derived fields coefficientOfVariation, historyDays, rewardSharePct and tier, 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.
Sorting the catalogue by raw APY puts short-lived incentive spikes on top. enrich=true with maxCv, minHistoryDays or tier=Core is the honest ranking.

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