use redeem

Mutation hook for redeeming vault shares for underlying assets via the Yo Gateway, with transaction tracking and automatic query invalidation.

const { redeem, isPending, isSuccess, hash, instant, assetsOrRequestId } = useRedeem({ vault: 'yoETH' })

Usage

import { useRedeem } from '@yo-protocol/react'

function RedeemButton({ shares }: { shares: bigint }) {
  const {
    redeem,
    isPending,
    isSuccess,
    hash,
    instant,
    assetsOrRequestId,
    error,
    reset,
  } = useRedeem({
    vault: 'yoETH',
    onSubmitted: (hash) => console.log('Redeemed:', hash),
  })

  return (
    <div>
      <button onClick={() => redeem(shares)} disabled={isPending}>
        {isPending ? 'Redeeming...' : 'Redeem'}
      </button>

      {isSuccess && (
        <div>
          <p>Redemption complete! Tx: {hash}</p>
          {instant !== undefined && (
            <p>{instant ? 'Instant redemption' : `Pending — request ID: ${assetsOrRequestId}`}</p>
          )}
        </div>
      )}
      {error && (
        <p>
          Error: {error.message}
          <button onClick={reset}>Dismiss</button>
        </p>
      )}
    </div>
  )
}
circle-info

Instant vs async redemptions

The gateway redeem may complete instantly if sufficient liquidity is available. If not, the redemption remains pending for up to 24 hours. The YoGatewayRedeem event's instant field indicates which path was taken.

Options

Option
Type
Default
Description

vault

Address | VaultId

Required. Target vault

onSubmitted

(hash: Hash) => void

Called after the transaction is sent

onConfirmed

(hash: Hash) => void

Called after the transaction is confirmed on-chain

onError

(error: Error) => void

Called on error

Return Value

Field
Type
Description

redeem

(shares: bigint) => Promise<Hash>

Redeem the given share amount for underlying assets

isPending

boolean

true while the transaction is being sent or confirmed

isError

boolean

true if the transaction failed

error

Error | null

Error object

isSuccess

boolean

true after the transaction is confirmed on-chain

hash

Hash | undefined

Transaction hash once submitted

instant

boolean | undefined

true if redemption completed instantly, false if pending. Available after confirmation.

assetsOrRequestId

bigint | undefined

Assets returned (if instant) or pending request ID. Available after confirmation.

reset

() => void

Reset all state back to idle

Behavior

Behavior
Detail

Query invalidation

Automatically invalidates useUserBalance queries on success

Confirmation tracking

Uses useWaitForTransactionReceipt internally

Error propagation

Fires both the local onError callback and the global YieldProvider.onError handler

Slippage protection

Uses quotePreviewRedeem to calculate minAssetsOut with default 0.5% slippage