# DeFi on Tempo: figures and how to verify them

Page: https://defidash.co
Page generated: 2026-11-02T06:51:10.732Z. Refreshed every 5 minutes; each section below states its own source and time.
Status: ok

Everything here is public on-chain data or a public API. No keys are needed.

## Sources and freshness on this build

| Section | Source | As of |
|---|---|---|
| Assets | live: `totalSupply()` at block 47042962 (2026-11-02T06:50:41.000Z) | 2026-11-02T06:50:41.000Z |
| Vaults and markets | live: RPC at block 47042962 (2026-11-02T06:50:41.000Z) | 2026-11-02T06:50:41.000Z |
| Vault APY | live: Morpho API (its own indexing time; not pinned to the block) | 2026-11-02T06:51:10.732Z |
| DEX quotes and liquidity | live: DEX precompile at block 47042962 (2026-11-02T06:50:41.000Z) | 2026-11-02T06:50:41.000Z |
| DEX volume | live: fill and swap events over the 24 hours of blocks before block 47042962 (2026-11-02T06:50:41.000Z) | 2026-11-02T06:50:41.000Z |

A section whose live read fails keeps the dated snapshot; the page marks it "as of <date>" beside its heading.

## Chain and conventions

- Tempo mainnet, chain id 4217. RPC: `https://rpc.tempo.xyz`. In testing, JSON-RPC batch requests were rejected; send calls individually.
- Every token below has 6 decimals: amount = raw / 1e6.
- USD: OUSD, USDC.e, pathUSD, USDT0, USDB, DLUSD and BUIDL are valued at $1 each. This is a par policy, not a market price, an issuer-backing claim or a redemption guarantee (the Morpho API, for example, prices pathUSD and OUSD slightly above $1). cbBTC and PRIME use the Morpho API price (`assetByAddress { price { usd } }`) at read time, applied to their whole history, so their history ignores price moves.
- Non-USD stablecoins use the ECB euro reference rates (`https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml`) as of 2026-10-30, in USD per unit: EUR 1.11720, GBP 1.33989, BRL 0.18408. Applied to their whole history. If no rate can be read they are left out, never valued at $1.
- Price checks (second sources; a check never sets a value, Status alerts beyond 200 bp): cbBTC $78,002 vs $78,375 from Morpho market oracle 0xa59e9acd8499343ae7b944df898fc20388acd245 (-47.5 bp); PRIME $1.0672 vs $1.0669 from Uniswap v4 pathUSD/PRIME spot (3.5 bp).
- Contract reads on a live build are pinned to one block: pass `--block 47042962` to `cast call` to reproduce them exactly.
- Example: `cast call <token> "totalSupply()(uint256)" --block <block> --rpc-url https://rpc.tempo.xyz`
- Explorer: `https://explore.tempo.xyz/address/<address>` for any token or vault below.

## Headline figures

| Figure | Value | Definition |
|---|---|---|
| Assets on Tempo | $753,741,126 | Sum of totalSupply x price for every asset in the Assets table (OUSD, USDC.e, pathUSD, USDT0, BUIDL, PRIME, cbBTC, USDB, DLUSD, EURC.e, GBPA, BRLA). Not every token on Tempo: other TIP-20 tokens (thousands created by the factory, most of them tests) are not included; CADD and EURAU are under $100. Not the warehouse's assets-on-platform measure. |
| USD stablecoins (part of the above) | $721,241,742 | OUSD, USDC.e, pathUSD, USDT0, USDB, DLUSD at $1 |
| Same assets, 30 days earlier | $759,895,285 (USD stablecoins $729,204,014) | Same tokens, measure and prices, at the last block before 2026-10-04 00:00 UTC (the end of 2026-10-03) |
| Morpho vault assets | $67,214,205 | Sum of totalAssets() of the 5 vaults below: assets managed now, including earned yield; not cumulative deposits |
| Borrowed from vaults | $26,303 | Attribution, not vault debt: per vault, sum over every market it supplies of allocation x market utilization (markets of any size) |
| Withdrawable now (all vaults) | $67,144,578 | Idle in every vault, plus each market's unborrowed cash counted once, capped by the claims of vaults whose liquidity adapter uses that market. An estimate before execution constraints, not a guarantee |
| Enshrined DEX volume, 24h | $2,768 | Base-token fills on every enshrined book between tracked tokens, from `OrderFilled` events; a two-book route counts on both books |
| Top vault APY, 30d | 3.27% (Sentora OUSD Main) | Highest 30-day historical net APY, rewards included, among listed vaults with at least $100,000 in assets |

## Assets

Source: `totalSupply()` on each token at block 47042962 (2026-11-02T06:50:41.000Z). History: the same call at the last block before each 00:00 UTC (archive reads work on the public RPC). A day before a token existed reads as no value.

| Symbol | Name | Kind | Address | Value (USD) |
|---|---|---|---|---|
| OUSD | Open USD | Stablecoin | `0x20c0000000000000000000006a37da5c996874be` | 599,953,380.25 |
| pathUSD | pathUSD | Stablecoin | `0x20c0000000000000000000000000000000000000` | 40,327,821.48 |
| USDB | USDBridge | Stablecoin | `0x20c0000000000000000000003158081efd85bfc2` | 40,269,813.12 |
| USDC.e | Bridged USDC (Stargate) | Stablecoin | `0x20c000000000000000000000b9537d11c60e8b50` | 26,696,374.14 |
| BUIDL | BlackRock USD Institutional Digital Liquidity Fund | Yield-bearing | `0xb5ff12bd8010baef823d1bfa2ce6bdc0109cbb24` | 17,154,815.86 |
| USDT0 | USDT0 | Stablecoin | `0x20c00000000000000000000014f22ca97301eb73` | 10,887,858.71 |
| PRIME | Hastra PRIME | Yield-bearing | `0x20c00000000000000000000058d0b8b2cfdb358c` | 10,279,945.56 |
| cbBTC | Coinbase Wrapped BTC | Bitcoin | `0x20c000000000000000000000c412ec89d0c08be5` | 3,119,338.80 |
| DLUSD | DeelUSD | Stablecoin | `0x20c0000000000000000000006fd9a167923ba194` | 3,106,493.89 |
| EURC.e | Bridged EURC (Stargate) | Non-USD stablecoin | `0x20c0000000000000000000001621e21f71cf12fb` | 1,869,065.82 |
| GBPA | Agant GBP | Non-USD stablecoin | `0x20c0000000000000000000000a6da882d075a4c3` | 66,995.82 |
| BRLA | BRLA Token | Non-USD stablecoin | `0x20c000000000000000000000f047dd7018e50367` | 9,222.26 |

## Morpho vaults (Vault V2)

Sources (contract reads at block 47042962 (2026-11-02T06:50:41.000Z)):
- Assets: `totalAssets()` on the vault.
- Idle: `balanceOf(vault)` on the vault's asset token.
- Markets: discovered on each read. The vault's adapters: `adaptersLength()` and `adapters(uint256)` on the vault; each adapter's markets: `marketIdsLength()` and `marketIds(uint256)`. A market a curator adds is read without a config change; an adapter that does not list its markets fails the section (it keeps the dated snapshot) rather than dropping allocations.
- Allocation per market: `expectedSupplyAssets(bytes32 marketId)` on the adapter (accrued). Collateral, loan and LLTV of a newly found market come from `idToMarketParams` and the tokens' `symbol()`.
- Liquidity adapter: `liquidityAdapter()` and `liquidityData()` on the vault; the data encodes the MarketParams of the market withdrawals are pulled from (market id = keccak256(abi.encode(params))).
- APY: Morpho API `https://api.morpho.org/graphql`, `vaultV2ByAddress(address, chainId: 4217) { avgNetApy(lookback: THIRTY_DAYS) avgNetApyExcludingRewards(lookback: THIRTY_DAYS) }`. Historical 30-day averages, not forecasts. Net includes public reward campaigns (eligibility can vary); organic excludes them. `null` means no history, not 0%.
- Wrapper vaults holding claims on these vaults are excluded so the same assets are not counted twice (e.g. `0x83a1491f3e7f8dAAB8F787a631334b9ca7a87023`, whose adapter's `morphoVaultV1()` is Sentora pathUSD).
- Vault list: every Vault V2 created by the factory `0x3de400e3f79113194fa5af6ae5c474947e0c82db` (`CreateVaultV2` events; a generated list plus a scan of blocks since it, cached by day). Shown when the deposit token is tracked, `totalAssets()` is at least $1,000, the name is not test-named and the adapters list their markets (a wrapper's adapter holds another vault, so it does not). This build: 183 created; not shown: 9 with an untracked deposit token, 168 under $1,000, 0 test-named, 1 wrappers (`0x83a1491f3e7f8daab8f787a631334b9ca7a87023`).

Definitions:
- Borrowed (attributed) = sum over markets of allocation x utilization. Borrowers borrow from markets; a vault is a supplier. This attributes market debt to suppliers pro rata.
- Withdrawable now = idle + (with a liquidity adapter) min(the vault's claim in that market, the market's supply - borrow). Without a liquidity adapter, supplied funds need a curator deallocation first and are not counted. Market cash is shared: per-vault figures are standalone and do not add up; the headline counts each market's cash once.
- The page hides vaults under $100,000 in assets; this file lists all of them, and totals include them.

Each vault accepts exactly one token (ERC-4626 `asset()`). Collateral = the collateral token of each market the vault allocates at least $1 to.

| Vault | Deposit token | Collateral | Curator | Listed | Vault address | Market adapter | Liquidity market | Assets | Idle | Borrowed (attributed) | Withdrawable now | APY 30d | Organic 30d |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Sentora OUSD Main | OUSD | cbBTC | Sentora | yes | `0x0d136e26b4d9e4836fc5cb202baeb49cb6f5df48` | `0x8232c6e2643e7F6A6BB60A410cA7Fd07344BC97F` | none | 44,125,555.73 | 44,122,835.34 | 2,525.11 | 44,122,835.34 | 3.27% | 0.41% |
| Sentora pathUSD | pathUSD | cbBTC | Sentora | yes | `0x9a044ae05e5e6290dcf56afd69548565e957a626` | `0x799cd096e5eBc436DaECEF85392b2ecF196dfBE6` | cbBTC/pathUSD | 22,821,487.84 | 22,821,040.12 | 158.06 | 22,821,487.84 | 3.24% | 0.01% |
| Tempo Earn | OUSD | none | Gauntlet | yes | `0xb86b3ccce82f6cb767c45afb9fb032ae5fde3592` | `0x15992c2Dc528a8fD3110Ac7E7Cc243b0c8a65a2f` | none | 200,035.46 | 200,035.45 | 0.01 | 200,035.45 | unknown | unknown |
| Tempo Earn | pathUSD | cbBTC | Gauntlet | yes | `0xc609656ed9ef219c98c8e549bf729144f211f06e` | `0xC57654274056A6e62C169b81274bd6b895CE8dea` | none | 66,905.36 | 0.00 | 23,619.50 | 0.00 | 3.17% | 1.17% |
| Gauntlet pathUSD Frontier | pathUSD | syrupUSDC | Gauntlet | no | `0xe5235da8ad839dd2a9de1f1069c89ca3575b5208` | `0x4DDBdf96df6c301097267DaBb6c5626A02964d40` | none | 220.87 | 219.87 | 0.08 | 219.87 | 3.25% | 0.00% |

Allocations (USD):

- Sentora OUSD Main -> cbBTC/OUSD `0x9797e5e8fd49f66cbf8896f78392208ecdb5a637c4974a3af64c699f71615956`: 2,720.393391
- Sentora pathUSD -> cbBTC/pathUSD `0x75add2f66f5c81917f6fd3b9603481defc1098359515d91c652913437ada14f5`: 447.719265
- Tempo Earn -> cbBTC/OUSD `0x9797e5e8fd49f66cbf8896f78392208ecdb5a637c4974a3af64c699f71615956`: 0.008979
- Tempo Earn -> cbBTC/pathUSD `0x75add2f66f5c81917f6fd3b9603481defc1098359515d91c652913437ada14f5`: 66,905.359482
- Gauntlet pathUSD Frontier -> cbBTC/pathUSD `0x75add2f66f5c81917f6fd3b9603481defc1098359515d91c652913437ada14f5`: 0.002309
- Gauntlet pathUSD Frontier -> syrupUSDC/pathUSD `0xbaac31dc2fd22c08bedb0ea21d30f3fce2c8db713507cd737d18d2c239f71ac4`: 1.000603

Example (Morpho API):

```sh
curl -s https://api.morpho.org/graphql -H 'content-type: application/json' \
  -d '{"query":"{ vaultV2ByAddress(address: \"0x0d136e26b4d9e4836fc5cb202baeb49cb6f5df48\", chainId: 4217) { name totalAssetsUsd idleAssetsUsd liquidityUsd avgNetApy(lookback: THIRTY_DAYS) avgNetApyExcludingRewards(lookback: THIRTY_DAYS) } }"}'
```

## Morpho lending markets

Morpho Blue: `0x10ee9aac980a180dd4dcfc96c746d60b0ea88f97`. Every market the vaults allocate to is read and used for exposure; the page shows those with more than $1,000 supplied.

- State: `market(bytes32 id)` returns totalSupplyAssets, totalSupplyShares, totalBorrowAssets, totalBorrowShares, lastUpdate, fee. Stored values lag; live figures here add interest accrued to the read block: interest = borrow x (exp(rate x (block time - lastUpdate)) - 1), added to both supply and borrow.
- Parameters: `idToMarketParams(bytes32 id)` returns loanToken, collateralToken, oracle, irm, lltv.
- Borrow APY: `borrowRateView(marketParams, market)` on the IRM returns a per-second rate; APY = exp(rate x 31,536,000 / 1e18) - 1.

| Market (collateral / loan) | Market id | LLTV | Supplied | Borrowed | Cash | Utilization | Borrow APY | On page |
|---|---|---|---|---|---|---|---|---|
| cbBTC / pathUSD | `0x75add2f66f5c81917f6fd3b9603481defc1098359515d91c652913437ada14f5` | 77% | 67,356.489163 | 23,778.764634 | 43,577.724529 | 35.30% | 1.16% | yes |
| cbBTC / OUSD | `0x9797e5e8fd49f66cbf8896f78392208ecdb5a637c4974a3af64c699f71615956` | 86% | 2,722.407034 | 2,526.974931 | 195.432103 | 92.82% | 3.87% | yes |
| syrupUSDC / pathUSD | `0xbaac31dc2fd22c08bedb0ea21d30f3fce2c8db713507cd737d18d2c239f71ac4` | 91.5% | 1.201819 | 0.099152 | 1.102667 | 8.25% | 0.03% | no |

Other Morpho markets on Tempo are not read (Morpho API, 7 Oct): 10 under the threshold, 8 whose loan token has no USD price, 1 test-named. These reasons can overlap.

## Stablecoin DEX

Enshrined DEX precompile: `0xdec0000000000000000000000000000000000000`. One tick = 0.1 bp of par; price = (100000 + tick) / 100000.

- Pair identity: each base token's current `quoteToken()` (TIP-20), read on-chain. A book is read only if it matches the configured pair; a migrated pair falls back and is logged, never silently re-attributed.
- Quotes: `quoteSwapExactAmountIn(address tokenIn, address tokenOut, uint128 amountIn)` on the precompile. A revert means not enough liquidity ("exceeds book"). The DEX charges no fee beyond the order price; the network transaction fee is excluded. Cost = 1 - received / input.
- Best bid / ask: from the $1 quotes (sell $1 of base = bid; 1 / (base received for $1 of quote) = ask).
- At best price: liquidity at the best tick, `getTickLevel(address base, int16 tick, bool isBid)`, third return value (the first two are order-list pointers).
- Total: the largest input that fills at any price, found by bisecting `quoteSwapExactAmountIn` between filling and reverting, to 0.1%. Both in the input token.
- Volume: `OrderFilled(uint128 indexed orderId, address indexed maker, address indexed taker, uint128 amountFilled, bool partialFill)` logs from the precompile over the 24 hours of blocks before the read (block time averaged over the last 100,000 blocks), in 100,000-block `eth_getLogs` ranges. `amountFilled` / 1e6 is in the book's base token, valued at its price ($1 for USD stablecoins). Each fill's book: `getOrder(orderId)` one block before the order's first fill in the window, then `books(bookKey)` for base and quote. Trading volume per book; a swap routed through two books counts on both. Not unique swaps or payment volume. This build: 130 fills from block 46885029; 0 excluded (on a book with an untracked or unpriced token, or an order whose book could not be read).
- The Tempo API's depth route comes from an indexer and has missed levels; it is not used for live figures.
- Retired books (USDC.e/pathUSD, USDT0/pathUSD since 30 Sep 2026) are excluded from liquidity; their orders can only be cancelled.

| Pair | Base address | Best bid | Best ask | Spread (bp) | Volume 24h |
|---|---|---|---|---|---|
| OUSD/pathUSD | `0x20c0000000000000000000006a37da5c996874be` | 0.99990 | 1.00000 | 1.0 | $215.44 |
| USDC.e/OUSD | `0x20c000000000000000000000b9537d11c60e8b50` | 0.99990 | 1.00030 | 4.0 | $2,552.03 |

## Uniswap v4

PoolManager: `0x33620f62c5b9b2086dd6b62f4a297a9f30347029` (deployed at block 6455926). 167 pools initialized; 19 are quoted: both currencies are assets this page tracks (no memecoins or test tokens), no hooks (a hook can change results) and a fee of at most 1%. 18 come from the list generated by `scripts/scan-uniswap-v4.mts` at block 44146182; 1 more from `Initialize` events since, read per UTC day and cached.

- No Quoter is deployed on Tempo, so quotes are simulated from pool state read with `extsload(bytes32)` on the PoolManager at the pinned block: slot0 (sqrtPriceX96, tick, protocolFee, lpFee), liquidity, the tick bitmap and each crossed tick's liquidityNet, using v4's TickMath, SqrtPriceMath and SwapMath. Pool state lives at keccak256(abi.encode(poolId, 6)) with liquidity at +3, ticks at +4, tick bitmap at +5. Checked against an independent quote: 1,000 pathUSD -> 5,163.97 BRLA in pool `0x16cfb625...f184` at block 43097195.
- Each amount uses the best single pool for it; a router splitting across pools can do slightly better. Simulations stop if the price would move more than 2x (a pool with full-range liquidity absorbs any input at some price), shown as "exceeds liquidity".
- Within 1% (both venues): the largest input whose cost stays within 1% (vs par for two $1 tokens, else vs the pool's spot), by bisection to 0.1%. For an order book this is everything resting within 1% of par.
- Pool liquidity is per pool. The PoolManager's token balances (what TVL sites often report) are shared across every pool, memecoins included, and are not swappable depth for any one pair.
- Volume: `Swap` events for the quoted pools over the 24 hours of blocks before the read, valued on the side with a known price.

| Pair | Pools | Spot (b per a) | Volume 24h |
|---|---|---|---|
| pathUSD/USDC.e | 6 | 0.999839 | $6,823.89 |
| pathUSD/USDT0 | 4 | 1.00071 | $147.02 |
| pathUSD/cbBTC | 2 | 0.0000125412 | $0.00 |
| USDT0/USDC.e | 2 | 0.999303 | $1.35 |
| pathUSD/BRLA | 2 | 5.19977 | $0.00 |
| pathUSD/PRIME | 2 | 0.937321 | $0.00 |
| OUSD/cbBTC | 1 | 0.0000127975 | $0.01 |

## Swap quotes by pair (best venue per amount)

### USD stablecoin matrix

Cost in bp of swapping $10,000 of the row's token into the column's, best venue (enshrined DEX including multi-hop, or the best single Uniswap v4 pool); "-" = cannot fill. Pairs outside the table below are quoted at the swap sizes only (no depth search).

No swap route at any size on either venue (left out of the grid): USDB, DLUSD.

| From \ to | OUSD | pathUSD | USDC.e | USDT0 |
|---|---|---|---|---|
| OUSD | · | 1.0 | 3.0 | 1.0 |
| pathUSD | 0.0 | · | 3.0 | 1.0 |
| USDC.e | 1.0 | 2.0 | · | 2.0 |
| USDT0 | - | - | - | · |

Columns are the input amount in USD (input tokens = USD / token price). Each cell is the better of the enshrined DEX (multi-hop included: the precompile routes through the quote-token tree, read from each token's `quoteToken()`) and the best single Uniswap v4 pool, with tokens received, cost and venue. Cost = 1 - (tokens received x the price this page values them at) / USD in, in bp: par for dollar stablecoins, the market FX rate for non-USD ones, the Morpho API price for PRIME and cbBTC (prices in the Assets section). It includes spread, fee, price impact and any gap between the venue's price and that value; negative = more than the tokens are worth. The page shows $100, $10K and $1M. Within 1% is the deepest single venue, measured from that venue's own starting price (depth, not cost). Pairs that cannot fill $1,000 either way are hidden on the page, except tokens over $1,000,000 with no route at all.

| Swap | $1 | $100 | $10,000 | $1,000,000 | Within 1% (USD) | Route |
|---|---|---|---|---|---|---|
| pathUSD -> PRIME | 0.93723 PRIME (-2.5 bp, Uniswap v4) | 93.723 PRIME (-2.5 bp, Uniswap v4) | 9,372.3 PRIME (-2.5 bp, Uniswap v4) | 937,147 PRIME (-1.7 bp, Uniswap v4) | 8,665,641 (Uniswap v4) | Uniswap v4 |
| PRIME -> pathUSD | 0.99954 pathUSD (4.6 bp, Uniswap v4) | 99.955 pathUSD (4.5 bp, Uniswap v4) | 9,995.4 pathUSD (4.6 bp, Uniswap v4) | 999,446 pathUSD (5.5 bp, Uniswap v4) | 7,252,460 (Uniswap v4) |  |
| pathUSD -> BRLA | 5.1992 BRLA (429.5 bp, Uniswap v4) | 519.57 BRLA (435.9 bp, Uniswap v4) | 48,668 BRLA (1,041.3 bp, Uniswap v4) | exceeds liquidity | 1,464 (Uniswap v4) | Uniswap v4 |
| BRLA -> pathUSD | 1.0446 pathUSD (-446.5 bp, Uniswap v4) | 104.39 pathUSD (-439.1 bp, Uniswap v4) | 9,750.7 pathUSD (249.3 bp, Uniswap v4) | exceeds liquidity | 1,401 (Uniswap v4) |  |
| pathUSD -> EURC.e | no route | no route | no route | no route | none | No route |
| EURC.e -> pathUSD | no route | no route | no route | no route | none |  |

Hidden on the page: pathUSD/GBPA, pathUSD/cbBTC.

Volume 24h by venue: Enshrined DEX $2,767.89, 86 trades, 49 traders, largest `0xc72f894016a9cf97548d4ec701f2f8f6705dee02` 89.3%; Uniswap v4 $6,972.27, 207 trades, 76 traders, largest `0xb01caea8c6c47bbf4f4b4c5080ca642043359c2e` 29.9%.
Trades are distinct transactions with a counted fill or swap; traders are their distinct senders (`eth_getTransactionByHash` -> `from`, the signing account, not a router in between); largest is the sender with the most volume and its share.

## Where to earn

Each way to earn on a token: the vaults shown on the page and the Morpho markets with more than $1,000 supplied (anyone can supply a market directly).

- Yield 30d: realized, from chain state at the last block before 00:00 UTC 30 days ago and at the read block, annualized: (now / then)^(1 / years) - 1. A vault: `convertToAssets(uint256 shares)` for a fixed share amount (10^(decimals + 6)); a market: `totalSupplyAssets / totalSupplyShares` from `market(bytes32)`, as stored. After fees, before reward campaigns. none = under 30 days old.
- With rewards: Morpho API `avgNetApy(lookback: THIRTY_DAYS)`, including public reward campaigns (they pay out separately; eligibility can vary). Vaults only.
- Withdrawable now: a vault's figure above; a market's unborrowed cash. Past yield, not a forecast.

| Deposit | Where | Address or market id | Size (USD) | Yield 30d | With rewards | Withdrawable now |
|---|---|---|---|---|---|---|
| OUSD | Morpho market, cbBTC collateral | `0x9797e5e8fd49f66cbf8896f78392208ecdb5a637c4974a3af64c699f71615956` | 2,722 | 1.73% | n/a | 195 |
| OUSD | Sentora OUSD Main | `0x0d136e26b4d9e4836fc5cb202baeb49cb6f5df48` | 44,125,556 | 0.43% | 3.27% | 44,122,835 |
| OUSD | Tempo Earn | `0xb86b3ccce82f6cb767c45afb9fb032ae5fde3592` | 200,035 | none | n/a | 200,035 |
| pathUSD | Morpho market, cbBTC collateral | `0x75add2f66f5c81917f6fd3b9603481defc1098359515d91c652913437ada14f5` | 67,356 | 2.54% | n/a | 43,578 |
| pathUSD | Sentora pathUSD | `0x9a044ae05e5e6290dcf56afd69548565e957a626` | 22,821,488 | 0.01% | 3.24% | 22,821,488 |

## Pegs (mid vs pathUSD)

Each dollar stablecoin's mid price against pathUSD (the root of the quote-token tree), from the best venue's $10,000 quotes in both directions: (pathUSD received per token + 1 / tokens received per pathUSD) / 2, each at $10,000 of input. A symmetric spread or fee cancels. Quoting at size keeps a small pool that has drifted from setting the price; a market that cannot fill $10,000 both ways is thin, has no mid and does not alert. There is no on-chain USD price, so this compares stablecoins with each other. The status line above alerts beyond 50 bp.

| Token | Mid (pathUSD) | Deviation |
|---|---|---|
| OUSD | 0.99995 | -0.5 bp |
| USDC.e | 1.00005 | 0.5 bp |
| USDT0 | thin: cannot fill $10,000 both ways | n/a |
| USDB | no market | n/a |
| DLUSD | no market | n/a |

## Flows

The 7 complete UTC days 2026-10-26 to 2026-11-01, each from the last block before 00:00 UTC to the last before the next 00:00. USD at this build's prices (see Chain and conventions). Each day is read once and cached.

### Bridged (LayerZero, Chainlink CCIP, Across, Relay)

- In: `OFTReceived(bytes32 guid, uint32 srcEid, address toAddress, uint256 amountReceivedLD)`; out: `OFTSent(bytes32 guid, uint32 dstEid, address fromAddress, uint256 amountSentLD, uint256 amountReceivedLD)` (amountSentLD). Logs from every address, so every OFT contract on Tempo is found; counted when its `token()` is a tracked, priced asset.
- CCIP: token-pool events `ReleasedOrMinted(uint64 indexed remoteChainSelector, address token, address sender, address recipient, uint256 amount)` (in) and `LockedOrBurned(uint64 indexed remoteChainSelector, address token, address sender, uint256 amount)` (out), from every address; counted when the event's token is tracked and priced.
- Across (intent bridge): SpokePool events `FundsDeposited` (out: inputToken, inputAmount, destinationChainId) and `FilledRelay` (in: outputToken, outputAmount, originChainId), from every address; chains are EVM chain ids.
- Relay (intent bridge): out = transfers into its depository `0x4cd00e387622c35bddb9b4c962c136462338bc31` by anyone but its solver; in = transfers from its solver `0xf70da97812cb96acdf810712aa562db8dfa3dbef` to accounts (no code, or an EIP-7702 delegation), not contracts (its own inventory moves). The other chain is not recorded on Tempo, so Relay is its own row.
- Not covered: tokens an issuer moves between chains by burning here and minting there (e.g. OUSD on Base, Ethereum, Solana), which appear under Issued on Tempo with no destination; and any bridge not listed here.
- Counted (contract, token): USDT0 LayerZero OFT `0xaf37e8b6c9ed7f6318979f56fc287d76c30847ff`, USDC.e LayerZero OFT `0x8c76e2f6c5ceda9aa7772e7eff30280226c44392`, PRIME CCIP pool `0xffdf3b641b4a90cdc4b6cfec8f68386c877b571a`, USDC.e Across SpokePool `0x2d4710f04da90184255782d3715224a6c776955d`, pathUSD Across SpokePool `0x2d4710f04da90184255782d3715224a6c776955d`, USDC.e Relay `0x4cd00e387622c35bddb9b4c962c136462338bc31`, USDT0 Relay `0x4cd00e387622c35bddb9b4c962c136462338bc31`, USDC.e Relay `0xf70da97812cb96acdf810712aa562db8dfa3dbef`, pathUSD Relay `0xf70da97812cb96acdf810712aa562db8dfa3dbef`, USDT0 Relay `0xf70da97812cb96acdf810712aa562db8dfa3dbef`, OUSD Relay `0xf70da97812cb96acdf810712aa562db8dfa3dbef`, cbBTC CCIP pool `0x3b54b8c2bcbb673a42c98db9f6ec95128d46c71e`, OUSD Relay `0x4cd00e387622c35bddb9b4c962c136462338bc31`, EURC.e LayerZero OFT `0x7753dc8d4bd48db599da21e08b1ab1d6fdffdc71`, PRIME CCIP pool `0x608fa11227fef4be0290936894fc8490dd7cda1e`.
- Chains are named only where certain, and the two protocols share a row per named chain. LayerZero endpoint ids: 30101 Ethereum, 30102 BNB Chain, 30106 Avalanche, 30109 Polygon, 30110 Arbitrum, 30111 Optimism, 30168 Solana, 30181 Mantle, 30183 Linea, 30184 Base, 30214 Scroll, 30255 Fraxtal. CCIP chain selectors: 5009297550715157269 Ethereum, 4949039107694359620 Arbitrum, 15971525489660198786 Base, 124615329519749607 Solana. EVM chain ids (Across): 1 Ethereum, 10 Optimism, 56 BNB Chain, 130 Unichain, 137 Polygon, 8453 Base, 42161 Arbitrum, 43114 Avalanche, 57073 Ink, 59144 Linea. Chains under $1,000 gross in the week are summed as Other.

| Chain | Bridge keys | In | Out | Net | Largest Tempo address (share of gross) |
|---|---|---|---|---|---|
| Ethereum | lz:30101, across:1 | $19,173,468 | $19,838,939 | -$665,472 | `0x4c2c0f0bb2631b02ac9299c59690914ee7a200b8` (41%) |
| Relay (chain not on Tempo) | relay: | $5,701,696 | $5,663,715 | +$37,981 | `0xe8e449da0fd0392ce1fc8da44b12ba67585ad916` (30%) |
| Solana | ccip:124615329519749607 | $2,271,872 | $5,718,990 | -$3,447,118 | `0x21d66d23fe27bb4175c866d4d3ee9bc12c4824e3` (72%) |
| Polygon | lz:30109, across:137 | $3,808,623 | $4,023,591 | -$214,969 | `0x4611cacfc562c882efb01bdda1e5326440c07ce2` (51%) |
| Arbitrum | lz:30110, across:42161 | $2,924,638 | $2,394 | +$2,922,244 | `0xf70da97812cb96acdf810712aa562db8dfa3dbef` (97%) |
| Base | lz:30184, across:8453, ccip:15971525489660198786 | $240,771 | $259,451 | -$18,680 | `0xa482828c5f78a44b905c46a87ff392f2ea2fdc73` (50%) |
| Avalanche | lz:30106 | $35,033 | $0 | +$35,033 | `0x5e023c31e1d3dcd08a1b3e8c96f6ef8aa8fcacd1` (100%) |
| LayerZero eid 30295 | lz:30295 | $7,120 | $0 | +$7,120 | `0x601bccdd997a63f7ca1e92adb879f9e04983b110` (100%) |
| chain 1868 | across:1868 | $1,427 | $3,837 | -$2,410 | `0xfd03abcadaf3f930fa4e37eb2f6ea3a44a41b7f0` (72%) |
| chain 5042 | across:5042 | $1,427 | $1,862 | -$435 | `0x7fee41cf3b5da34e7538097b11303830a5e2d818` (25%) |
| chain 143 | across:143 | $11 | $2,895 | -$2,884 | `0xe6db30da89e8c6492da3677fa9b5a7d59124995e` (96%) |
| chain 999 | across:999 | $9 | $1,854 | -$1,845 | `0x8ded83b21347a23779004eba17c6c1ee3a62f6d5` (90%) |
| Optimism | across:10, lz:30111 | $1,681 | $51 | +$1,630 | `0x29bc7947a2c91744b8fe651c7c2f5fc3e19ef2f5` (94%) |
| Ink | across:57073 | $783 | $806 | -$22 | `0x5b1936341b228ea4ef39f988bc60e970b0f4f303` (44%) |
| Other chains (10) | lz:30393, across:130, lz:30339, lz:30340, across:56, lz:30102, lz:30600, lz:30181, across:4663, lz:30365, lz:30362 | $49 | $485 | -$435 | none |
| All chains | | $34,168,607 | $35,518,869 | -$1,350,262 | |

### Issued on Tempo

- Minted: `Transfer(from = 0x0)`; burned: `Transfer(to = 0x0)` on the token. Net = minted - burned (the change in supply from issuance). Gross can far exceed net when a payment rail mints on deposit and burns on payout.
- Signer: tx.from of a sample of up to 8 mints and 8 burns per token per day, spread over the day; Called: tx.to, or the first call target of a Tempo (type 0x76) transaction. Shares are of the sampled transactions. Addresses only; no issuer is attributed from the chain.

| Token | Net | Minted | Burned | Mints | Burns | Signers (share of sample) | Called |
|---|---|---|---|---|---|---|---|
| OUSD | +$69,808,285 | $122,108,261 | $52,299,975 | 444 | 297 | `0xf080385c4d3e08859cfb26b379d3752b7e51395a` (100%) | `0x19810813f2e46cf01e7c543f6d8c3ecc8ea2001e` (100%) |
| pathUSD | -$3,410,684 | $30,720,656 | $34,131,340 | 19 | 4 | `0xf080385c4d3e08859cfb26b379d3752b7e51395a` (100%) | `0x19810813f2e46cf01e7c543f6d8c3ecc8ea2001e` (100%) |
| USDB | -$52,590,683 | $75,007,051 | $127,597,734 | 66 | 510 | `0xf080385c4d3e08859cfb26b379d3752b7e51395a` (100%) | `0x19810813f2e46cf01e7c543f6d8c3ecc8ea2001e` (100%) |
| DLUSD | -$161,755 | $2,613,215 | $2,774,970 | 23 | 1042 | `0xf080385c4d3e08859cfb26b379d3752b7e51395a` (100%) | `0x19810813f2e46cf01e7c543f6d8c3ecc8ea2001e` (100%) |

Daily net, all chains (bridged): 10-03 -$1,187,813, 10-04 -$2,992,595, 10-05 +$1,071,935, 10-06 -$1,053,455, 10-07 -$1,213,034, 10-08 -$50,478,237, 10-09 +$204,539, 10-10 +$119,938, 10-11 -$1,749,616, 10-12 -$1,808,661, 10-13 -$11,257,335, 10-14 -$2,120,843, 10-15 +$70,589, 10-16 -$1,093,917, 10-17 -$536,217, 10-18 -$406,578, 10-19 -$1,178,121, 10-20 +$236,301, 10-21 +$1,231,164, 10-22 +$12,162,747, 10-23 -$2,037,098, 10-24 -$1,543,757, 10-25 -$258,758, 10-26 -$1,716,204, 10-27 +$708,443, 10-28 +$2,091,403, 10-29 -$3,673,912, 10-30 +$2,009,751, 10-31 +$25,547, 11-01 -$795,289.

## FX vs market

Each non-USD stablecoin against pathUSD on Tempo, beside the market rate used to value it (ECB, as of 2026-10-30). Rates in the market's convention: USD per unit for EUR and GBP, units per USD for BRL.

- Tempo: mid of the best venue's $100 quotes both ways (USD per token = (pathUSD received per token + 1 / tokens received per pathUSD) / 2), converted to the convention above. A symmetric fee cancels; a market that cannot fill $100 both ways has none.
- Market rate: Twelve Data read at most hourly (the last good rate serves until a read succeeds), else the ECB daily reference rate. Status alerts when it has not updated for 3 hours of open FX market (Sunday 22:00 to Friday 22:00 UTC; ECB: 54).
- Check: the ECB reference rate is read with each Twelve Data rate. Beyond 300 bp for any currency the ECB rate is used instead; beyond 200 bp Status alerts. No check on this build.
- vs market: Tempo rate / market rate - 1, both in the quoted convention (for USD/BRL, + = more reais per dollar on Tempo).
- Swap costs against the market rate are in the DEX table (pathUSD -> token and back). The enshrined DEX is USD-only, so every FX route is Uniswap v4.

| Pair | Token | Market | Tempo | vs market |
|---|---|---|---|---|
| USD/BRL | BRLA | 5.43251 | 5.19984 | -428.3 bp |
| EUR/USD | EURC.e | 1.11720 | no market | n/a |
| GBP/USD | GBPA | 1.33989 | no market | n/a |

## Watchlist (not counted)

TIP-20 tokens the page does not track that could be stablecoins, for a person to classify. From `scripts/scan-tip20.mts` at block 43982479: the factory (`0x20fc000000000000000000000000000000000000`) created 4,451 tokens; 404 have a fiat `currency()`, are untracked, hold 1M to 1e12 units and are not test-named. The 40 with the most Transfer events over ~7 days are listed. Not counted or valued anywhere: a token joins the page only with an independent price (par for a fiat stablecoin someone has classified, or an outside price), never its own pool price. Supply is in token units, not USD. Wrappers and receipt tokens (e.g. Sentora vault shares) are listed too; they would double count if added.

| Token | Name | Currency | Supply (units) | Transfers ~7d | Address |
|---|---|---|---|---|---|
| RD | Reserve Ledger Dollar | USD | 100,729,784 | 24,705 | `0x20c00000000000000000000089caf7c622ae4b0f` |
| senpathUSDE | Sentora pathUSD (Earn) | USD | 8,379,092 | 9,110 | `0x20c000000000000000000000a4fd6202f154a670` |
| ORD | Open Reserve Ledger Dollar | USD | 510,906,284 | 162 | `0x20c000000000000000000000ab375577424a678d` |
| ENSH | Enshrined | USD | 100,000,000 | 13 | `0x20c000000000000000000000109394a271f6aae6` |
| METRONOME | Metronome | USD | 1,000,000,000 | 12 | `0x20c00000000000000000000007affa1073fbc0ea` |
| TDOGE | Tempo Doge | USD | 111,314,157,245 | 10 | `0x20c000000000000000000000d5d5815ae71124d1` |
| ROSIE | Rosie | USD | 1,000,000,000 | 6 | `0x20c000000000000000000000435f6827071ecaa2` |
| BILLIONS | Billions | USD | 1,000,000,000 | 4 | `0x20c0000000000000000000008bcaa57703106472` |
| CTO | Community Tempover | USD | 1,000,000,000 | 3 | `0x20c0000000000000000000009031a5f00659f90a` |
| METRONOME | METRONOME | USD | 7,000,000,000 | 0 | `0x20c000000000000000000000c41014c10b44ab76` |
| PRINT | StablePrinter | USD | 1,000,002,000 | 0 | `0x20c000000000000000000000ecee5527730655e0` |
| STRUONG | struongUSD | USD | 1,000,000,000 | 0 | `0x20c00000000000000000000019469c4f98ace06c` |
| TIME | TIME | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000cbfed27b23c932c8` |
| TIME | TIME | USD | 1,000,000,000 | 0 | `0x20c00000000000000000000033b0c257e2cc902d` |
| TPEPE | Tempo Pepe | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000bd384a26e505a898` |
| TIMECOIN | TIMECOIN | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000b814ad150e3e4afa` |
| TIPCOIN | Tipcoin | USD | 1,000,000,000 | 0 | `0x20c00000000000000000000050fc428e61350859` |
| DogePay | DogePay | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000cf939117217d467d` |
| PEON | Peon | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000a70a65dcd29f45be` |
| UP | UP | USD | 1,000,000,000 | 0 | `0x20c0000000000000000000003208563dedecdf4c` |
| HODL | HODL | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000e102f4800204e83a` |
| HODL | HODL | USD | 1,000,000,000 | 0 | `0x20c00000000000000000000047326ebd3d4b51ff` |
| SDOGE | ShrineDoge | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000a773135b14e524e0` |
| TIP | Tempo Instant Paymen | USD | 1,000,000,000 | 0 | `0x20c0000000000000000000008cb88e89a57615d2` |
| TIME | TIME | USD | 1,000,000,000 | 0 | `0x20c0000000000000000000004ec718a9a2c1d218` |
| TA | Tempo Agent | USD | 1,000,000,000 | 0 | `0x20c0000000000000000000000189ec8a7a16e46f` |
| TEPO | TEPO | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000938b1e1688604fd1` |
| USDUT | Unstable dollar | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000089c577c9633e8ef` |
| TEMPO | Temporal | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000e8a1e8c7756efb2b` |
| TSHIBA | TempoShiba | USD | 1,000,000,000 | 0 | `0x20c00000000000000000000042af09cee89480f8` |
| ELONT | ElonTempo | USD | 1,000,000,000 | 0 | `0x20c0000000000000000000004bc0316d7a18b438` |
| NYAW | Temponyan | USD | 1,000,000,000 | 0 | `0x20c00000000000000000000053be7ef0362474ab` |
| SENDIT | look at this | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000e33c59a65303327d` |
| BEAT | BEAT | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000be9fd658eab8f188` |
| 33 | 33 | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000c968c5703d877a82` |
| LUNA | tempo dev dog | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000189a0be85246f408` |
| TAMPON | Bloody Tampon | USD | 1,000,000,000 | 0 | `0x20c00000000000000000000029375de6441be77b` |
| POP | Popcat | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000699e9d5f24ec9d86` |
| MLHR | MyLovelyHorseRescue | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000f85177e86ba353f9` |
| LUNA | Luna | USD | 1,000,000,000 | 0 | `0x20c000000000000000000000fb3dfe3a6b7877aa` |

## 90-day history

Each UTC day is read once and cached: the same volume method over that day's blocks (the last block before 00:00 UTC to the last before the next 00:00, found from block timestamps), and each vault's `totalAssets()` at the day's last block. Valued at current prices, like asset history. The page draws these as sparklines, with the current figures as the last point.

| Day (UTC) | Enshrined DEX | Uniswap v4 |
|---|---|---|
| 2026-10-03 | $62,690.98 | $1,229,647.25 |
| 2026-10-04 | $596,853.75 | $1,850,989.10 |
| 2026-10-05 | $2,752.38 | $1,231,296.58 |
| 2026-10-06 | $3,873.66 | $928,175.12 |
| 2026-10-07 | $18,293.23 | $1,247,035.85 |
| 2026-10-08 | $8,897.72 | $313,538.06 |
| 2026-10-09 | $29,623.79 | $3,964.59 |
| 2026-10-10 | $4,292.78 | $6,182.55 |
| 2026-10-11 | $1,871.50 | $1,537,522.94 |
| 2026-10-12 | $76,071.47 | $1,851,029.83 |
| 2026-10-13 | $7,147.40 | $9,867.25 |
| 2026-10-14 | $77,583.69 | $516,203.93 |
| 2026-10-15 | $14,438.34 | $7,818.32 |
| 2026-10-16 | $237,638.69 | $1,241,560.31 |
| 2026-10-17 | $9,916.41 | $620,595.00 |
| 2026-10-18 | $7,653.00 | $1,243,038.40 |
| 2026-10-19 | $71,641.27 | $624,871.34 |
| 2026-10-20 | $6,141.86 | $625,065.19 |
| 2026-10-21 | $1,800,775.24 | $627,080.65 |
| 2026-10-22 | $22,294.36 | $1,569,302.57 |
| 2026-10-23 | $51,800.83 | $1,575,362.72 |
| 2026-10-24 | $25,907.70 | $1,895,154.80 |
| 2026-10-25 | $18,553.71 | $7,484.66 |
| 2026-10-26 | $9,342.62 | $1,591,584.48 |
| 2026-10-27 | $12,145.76 | $636,134.84 |
| 2026-10-28 | $211,204.85 | $643,375.43 |
| 2026-10-29 | $116,877.26 | $959,348.35 |
| 2026-10-30 | $315,857.39 | $972,354.55 |
| 2026-10-31 | $4,328.27 | $1,025.24 |
| 2026-11-01 | $1,481.43 | $963,322.12 |

Last 30 of 89 days shown. Vault assets at day end:

| Vault | End of 2026-10-03 | End of 2026-10-26 | Now |
|---|---|---|---|
| Sentora OUSD Main | 4.00 | 42,637,877.66 | 44,125,555.73 |
| Sentora pathUSD | 38,806,748.71 | 22,817,555.16 | 22,821,487.84 |
| Tempo Earn | 0.00 | 200,035.45 | 200,035.46 |
| Tempo Earn | 279,420.70 | 67,446.79 | 66,905.36 |
| Gauntlet pathUSD Frontier | 5,765.96 | 220.96 | 220.87 |

## Not shown

- YLDS: about $5 on Tempo (warehouse, 6 Oct), so not material here.
- Wrapper vaults holding claims on the vaults above.
- Test-named Morpho markets.

## Known limits

- Assets on Tempo is a named set of tokens, not every token on Tempo.
- Non-USD stablecoin supply includes treasury and prefunding balances (EURC.e especially); it is not swappable liquidity. The enshrined DEX is USD-only; non-USD swaps need another venue (see Uniswap v4).
- Curator names and listing come from the Morpho API; a discovered vault it does not know shows curator unknown and listing unknown.
- Withdrawable now does not simulate a withdrawal: owner-specific limits, gates and timelocks are not checked.
- APY and the cbBTC and PRIME prices come from the Morpho API, with its own indexing time, not the pinned block.
