Redemption
Every inference coin can be burned for what it says it is worth. Send INT to the RedemptionVault and it burns your coin and pays you its index value in the same transaction — in USDC, or in DIEM that you can stake at Venice for a dollar of API credit a day per DIEM, for as long as you hold it. Nobody stands between you and the payout: there is no queue and no operator in the path. You choose USD or DIEM at the moment you redeem.
What a redemption does
redeem(coin, amount, payout, minOut, to) does four things in one call: it checks the caps, reads the coin's feed, burns amount of the coin from you, and transfers the payout to to. If anything would fail — the feed is stale, the cap is used up, the inventory is short — the call reverts and you still have your coin.
redeemFor(wallet, coin, amount, payout, minOut, to) is the same call made by the LaunchRouter on your behalf, with the caps keyed to your wallet rather than to the router. Only the router may call it. Every sale of a synthetic pair coin through the router tries this path first: sellForUsd, sellForEth, sellForDiem and swapCoinForUsd all ask quoteRedeem whether the vault can pay, and redeem through it when it can, so selling at the index is the normal outcome rather than a separate action. Only when the vault cannot pay does the router fall through to the peg pool bid. A claim converted to USDC or DIEM takes the same vault-first route.
quoteRedeem(coin, amount, payout, wallet) tells you what you would get, and returns 0 if the redemption would revert for any reason.
The arithmetic
The coin feed is USD × 1e18 per whole coin. Coin amounts are 18-decimal and USDC is 6-decimal, so:
usdValue = amount × price / 1e30 × (1 − feeBps / 10000)
feeBps is 0 at launch, so usdValue is the full index value. A USD redemption pays exactly that out of the coin's own USDC reserve.
A DIEM redemption converts the same number at the DIEM feed, after a spread:
diemOut = usdValue × (1 − diemSpreadBps / 10000) / diemPrice
diemSpreadBps is 100, so a DIEM payout is worth 1% less than a dollar payout. The spread pays for sourcing DIEM on a thin pool and removes the profit from nudging the DIEM feed and redeeming into it. A DIEM payout must be at least MIN_DIEM_OUT, which is 0.1 DIEM — Venice's minimum stake — and below that the call reverts with BelowMinDiem, because a smaller amount could not be staked. With DIEM around $1,700, that minimum is about $172 of coin.
A DIEM payout leaves the coin's USDC balance untouched, because that DIEM was bought out of the same balance earlier by a rebalance call.
A worked example
With INT at $12.00 and DIEM at $1,700, burning 250 INT:
usdValue = 250e18 × 12e18 / 1e30 = 3,000e6, which is $3,000 USDC at a fee of 0.- In DIEM: $3,000 × 0.99 = $2,970, divided by $1,700, is 1.747 DIEM.
Those 1.747 DIEM, staked at Venice, are $1.75 of Venice API credit per day, every day, for as long as you hold the stake. That is the choice in front of you: $3,000 once, or $1.75 a day for as long as Venice honors it.
Caps
Redemptions are capped per rolling UTC day, per coin and per wallet. The caps are amounts of coin, set as a share of the coin's seed — the amount a full ask holds — so they scale with the seed rather than with the price:
| Cap | Launch value | Counts |
|---|---|---|
dailyCapCoin |
20% of the coin's seed amount, which is $20,000 of coin at the seed price for a $100,000 seed | coin burned by everyone, per coin, per day |
walletCapCoin |
5% of the seed amount, $5,000 of coin at the seed price | coin burned by one wallet, per coin, per day |
SeedPegs writes them when it registers each peg (DAILY_CAP_BPS / WALLET_CAP_BPS, 0 = no cap). The owner can change them with configure, and configOf(coin) shows the live values. Counters reset at the UTC day boundary and are always recorded, so redeemedToday(coin) is readable whether or not caps are set. Exceeding a cap reverts with CapExceeded; through the router, the sell falls through to the peg pool bid instead, one tick spacing below the feed.
Caps bound a manipulation window: if a feed is wrong for an hour, they bound how much can be drained against the wrong price. They are not a solvency tool.
When the vault cannot pay
The coin's feed is stale or inactive. Both payouts halt, because _usdValue reads the price through getPrice, which reverts. Selling that coin through the router falls back to the peg bid, one tick spacing below the last feed price.
The DIEM feed is stale. DIEM is priced through the Aerodrome TWAP chain and Chainlink ETH/USD, and a dead link anywhere in it makes DIEM read Stale(). DIEM payouts halt and USDC payouts continue untouched.
The DIEM inventory for that coin is short. The call reverts with InsufficientDiem. This is the common one, because the Aerodrome DIEM pool is thin and the vault buys in tranches of at most $2,000, five minutes apart. The USDC is still there, so the interface offers a dollar redemption instead, and the DIEM comes back as rebalance calls refill the inventory toward its 20–40% share of the coin's reserve. Anyone can make those calls.
The USDC for that coin is short. The call reverts with InsufficientUsd. Reserves are held per coin, so one coin's redemptions cannot drain another's.
Selling a market token straight into DIEM
sellForDiem(token, tokensIn, minDiemOut) on the router sells a market token for its pair coin and turns that coin into DIEM in one transaction. For a synthetic pair it redeems through the vault's DIEM inventory when the inventory can pay, and otherwise goes coin → USDC → Aerodrome → DIEM. On a DIEM-paired market the pair coin already is DIEM. Any market whose pair coin is redeemable carries a "Sell for DIEM" action on its page.
Where the money comes from
Every dollar a buyer pays into a synthetic coin's ask above that coin's $10,000 bid target is forwarded by the PegManager to RedemptionVault.fund(coin, excess) at the next placement. Anyone can add to it with Treasury.topUpVault, which converts protocol-share coin into USDC and funds the vault, and which only runs while that coin's coverage is below 100% — and because that conversion routes through the vault itself, it burns coin and shrinks the liability at the same time. Anyone can also call fund directly for a configured coin.
What that adds up to per coin, against what the coin owes, is Coverage.