Examples

Vault Dashboard

A minimal vault dashboard showing vault state and user position.

import { useVault, useUserBalance, useVaults } from '@yo-protocol/react'
import { useAccount } from 'wagmi'
import { formatUnits } from 'viem'

function VaultDashboard() {
  const { address } = useAccount()
  const { vaults } = useVaults()

  return (
    <div>
      <h1>Available Vaults</h1>
      {vaults.map((v) => (
        <VaultRow key={v.address} address={v.address} account={address} />
      ))}
    </div>
  )
}

function VaultRow({ address, account }) {
  const { vault, isLoading } = useVault(address)
  const { position } = useUserBalance(address, account)

  if (isLoading) return <div>Loading...</div>

  return (
    <div>
      <h2>{vault?.name}</h2>
      <p>TVL: {vault ? formatUnits(vault.totalAssets, vault.assetDecimals) : ''}</p>
      {position && (
        <p>Your balance: {formatUnits(position.assets, vault!.assetDecimals)}</p>
      )}
    </div>
  )
}

Deposit Flow

Full deposit flow with approval check, approve, and deposit.

Withdraw Flow

Redeem vault shares for underlying assets via the Yo Gateway.

Deposit with Automatic Approval

Using depositWithApproval to handle the approve-if-needed + deposit flow in one call.

AA Wallet Bundling

Using prepared transactions to build a bundle for account abstraction wallets.

Checking Pending Redemptions

Query pending async redemptions using the React hook or core client.

Core SDK (No React)

Using @yo-protocol/core directly for server-side or script usage.

Provider Setup (Next.js)

Complete provider setup for a Next.js App Router project.