VimenDocs
Guides

Redeeming

Unwind a basket into its constituents. Always available, no fee.

Redemption is the product's core trust guarantee: no state of the contract (no pause, no cap, no guardian action) can ever block a redeem. A dedicated test in the suite redeems while minting is paused and the supply cap is below total supply, and it must always pass.

In the app

Enter an amount on the basket's redeem tab, preview the constituent amounts you'll receive, confirm one transaction. No approval is needed (you're burning your own tokens), and there is no redeem fee.

Prefer to exit to a single asset? Use zap-redeem to burn and sell everything for USDG or ETH in one transaction.

From a contract or script

IBasketToken basket = IBasketToken(0xe1c1ADAD813736427B334e798fd2EbC7d2C7A9DF); // MAG7

// preview what 1.0 MAG7 unwinds into
(address[] memory tokens, uint256[] memory amounts) = basket.backingOf(1e18);

basket.redeem(1e18, msg.sender);
  • Payouts are floor(amount × units[i] / 1e18) per constituent; rounding favors the vault by at most 1 wei per token.
  • redeem burns from the caller and sends constituents to to.
  • Emits Redeemed(sender, to, basketAmount).

The one thing that can interrupt redemption

Redemption transfers the underlying tokens, so it depends on those tokens being transferable. Robinhood Stock Tokens are issuer-controlled: if the issuer freezes or pauses a constituent, redeeming the whole basket reverts until the freeze lifts, because redemption is all-or-nothing by design (there is deliberately no partial-redeem escape hatch; it would complicate the contract's invariants).

This is issuer risk, inherited and not removable: it applies to holding the Stock Tokens directly just as much as through a basket. It is the main reason deposits are capped and the dominant item in Risks. (HOOD6's chain-native constituents have no issuer and no freeze function.)

On this page