Contract Integration

Examples for integrating with YieldFi v3 smart contracts. The v3 contracts use a Manager contract for deposits/redemptions and Vault contracts (ERC-4626) for vault tokens.

Getting V3 Contract ABIs

V3 contract ABIs are included in the SDK package:

import ManagerV3ABI from "yieldfi-sdk/abis/v3/Manager.json";
import VaultABI from "yieldfi-sdk/abis/v3/Vault.json";

Or import from the abis directory in your project:

import ManagerV3ABI from "./abis/v3/Manager.json";
import VaultABI from "./abis/v3/Vault.json";

Deposit to Vault

Deposit assets to a v3 vault using the Manager contract.

import {
  connectManagerV3,
  connectVault,
  getContractAddresses,
  Chain,
} from "yieldfi-sdk";
import { ethers } from "ethers";
import ManagerV3ABI from "yieldfi-sdk/abis/v3/Manager.json";

// Request Redemption (V3)

//Request redemption from a v3 vault. Shares are locked in a queue until processed.

//### Using Wagmi

import { connectManagerV3, getContractAddresses, Chain } from "yieldfi-sdk";
import { ethers } from "ethers";
import { useAccount, useWalletClient } from "wagmi";
import ManagerV3ABI from "yieldfi-sdk/abis/v3/Manager.json";

function RedemptionButton() {
  const { address } = useAccount();
  const { data: walletClient } = useWalletClient();

  const requestRedemption = async (
    vaultAddress: string,
    shares: bigint,
    receiver?: string
  ) => {
    if (!walletClient || !address) {
      throw new Error("Wallet not connected");
    }

    const provider = new ethers.BrowserProvider(walletClient);
    const signer = await provider.getSigner();

    const contracts = getContractAddresses(Chain.ETHEREUM);
    const managerV3 = connectManagerV3(contracts.manager, ManagerV3ABI, signer);

    // Request redemption (shares are locked, not burned)
    const redeemTx = await managerV3.requestRedemption(
      vaultAddress,
      shares,
      address, // Owner
      receiver || address // Receiver (defaults to owner)
    );

    const receipt = await redeemTx.wait();
    console.log(`Redemption requested: ${receipt.hash}`);
    return receipt;
  };

  return (
    <button
      onClick={() =>
        requestRedemption(
          "0x5bE91d34FeFbB7554497a74e25dC6df96bFef5DB",
          ethers.parseUnits("100", 18)
        )
      }
    >
      Request Redemption
    </button>
  );
}

Using Browser Provider

Check Vault Balance (V3)

Check vault token balance and convert between shares and assets.

Using Wagmi

Using Browser Provider

Check Redemption Queue (V3)

Check redemption queue status and entries.

Using Wagmi

Using Browser Provider

Cancel Redemption (V3)

Cancel a pending redemption request.

Using Wagmi

Using Browser Provider

Process Redemption (V3) - Admin/Operator Only

Process a redemption from the queue. This is typically called by vault operators.

Using Wagmi

Using Browser Provider

Complete V3 Integration Example

Complete example showing deposit, balance check, and redemption flow using wagmi:

Using Browser Provider Directly

V3 Contract Features

Manager V3 Contract

  • Deposit: Deposit assets to vaults with slippage protection (minShares)

  • Request Redemption: Request redemption (shares are locked, not burned)

  • Cancel Redemption: Cancel pending redemption requests

  • Process Redemption: Process redemptions from queue (operator only)

  • Redemption Queue: Query queue entries and status

Vault Contract (ERC-4626)

  • Standard ERC-4626: Full ERC-4626 vault interface

  • Share Locking: Shares can be locked for redemption requests

  • Asset Conversion: convertToAssets() and convertToShares() methods

  • Preview Functions: Preview deposit/redeem amounts

Getting Contract Addresses

Type Safety

The SDK provides full TypeScript types for v3 contracts:

Wallet Integration Best Practices

Always Check Wallet Connection

Handle User Rejection

Request Account Access

Last updated