๐Ÿ’ฐVaults

This package contains read and write methods for all August Digital vaults, as featured on the Kelp DAO restaking app.

Introduction

The LendingPool contract is a timelock-enabled ERC4626-compliant token vault designed to increase the utilisation of a liquid restaking token (LRT) through lending and borrowing activities. Users with LRT can become lenders by depositing their tokens in to the vault. The vault operator then lends the collected tokens or funds to borrowers through loan contracts. Lenders can withdraw from the scheme at any time, and the vault operator reserves the right to call the loans whenever necessary to ensure the required funds are available for returning to the lenders.

Using the SDK

You can use either the methods individually or by using the initialized AugustVaults class. If you're using methods directly, you will be required to pass a the RPC URL so we recommend using a the class instead.

In these documentation examples, we will present the methods as if they're being used as a member of the exported AugustVaults class (i.e. AugustVaults.<METHOD_NAME>).

Installation

Install the package in your project directory with:

npm install @augustdigital/vaults

Available Methods

Fetching Vault Data

Get All Lending Vaults

Returns an array of of all August Digital vaults including all relevant on-chain details about the vault.

// @param options (optional) - base options provided to most getters
async getVaults(options?: { chainIds?: number[]; loans?: boolean; allocations?: boolean })
[
    {
        address: IAddress; // vault address
        chainId: number;
        name: string; // vault name
        symbol: string; // vault symbol
        description: string; // vault description
        startDatetime: string; // vault start datetime
        status: 'active' | 'closed' | 'testing'; // vault status
        internalType?: 'lendingPool' | 'tokenizedVault';
        publicType?: 'Lending' | 'Defi Yield' | 'Pre-deposit';
        tags: string[]; // label displayed per vault
        isFeatured: boolean; // if featured on upshift
        isVisible: boolean; // if visible on upshift
        reserveTarget: number; // reserve target
        reserveTolerance: number; // reserve tolerance
        decimals: number;
        totalAssets: INormalizedNumber;
        totalSupply: INormalizedNumber;
        loansOperator: IAddress;
        maxSupply: INormalizedNumber;
        subaccounts: ITokenizedVaultSubaccount[];
        underlying: {
            // vault underlying token details
            address: IAddress;
            symbol: string;
            decimals: number;
        };
        apy: number;
        apyBreakdown: IVaultApy;
        rewards: IVaultRewards;
        strategists: IVaultStrategist[];
        weeklyPerformanceFee: number;
        platformFee: {
            fee: number;
            isWaived: boolean;
        };
        lagDuration: number;
        // Optionals
        loans?: IVaultLoan[];
        allocations?: IVaultAllocations;
        position?: IVaultPosition;
        maxDailyDrawdown: number;
        risk: string;
    }
    ...
]

Get Lending Pool

Returns a single August Digital Vault including all the on-chain details about the pool.

// @param vault - vault contract address
// @param chainId (optional) - vault chain id
async getVault({ vault: IAddress; chainId?: number; options?: IVaultBaseOptions })
[
    {
        address: IAddress; // vault address
        chainId: number;
        name: string; // vault name
        symbol: string; // vault symbol
        description: string; // vault description
        startDatetime: string; // vault start datetime
        status: 'active' | 'closed' | 'testing'; // vault status
        internalType?: 'lendingPool' | 'tokenizedVault';
        publicType?: 'Lending' | 'Defi Yield' | 'Pre-deposit';
        tags: string[]; // label displayed per vault
        isFeatured: boolean; // if featured on upshift
        isVisible: boolean; // if visible on upshift
        reserveTarget: number; // reserve target
        reserveTolerance: number; // reserve tolerance
        decimals: number;
        totalAssets: INormalizedNumber;
        totalSupply: INormalizedNumber;
        loansOperator: IAddress;
        maxSupply: INormalizedNumber;
        subaccounts: ITokenizedVaultSubaccount[];
        underlying: {
            // vault underlying token details
            address: IAddress;
            symbol: string;
            decimals: number;
        };
        apy: number;
        apyBreakdown: IVaultApy;
        rewards: IVaultRewards;
        strategists: IVaultStrategist[];
        weeklyPerformanceFee: number;
        platformFee: {
            fee: number;
            isWaived: boolean;
        };
        lagDuration: number;
        // Optionals
        loans?: IVaultLoan[];
        allocations?: IVaultAllocations;
        position?: IVaultPosition;
        maxDailyDrawdown: number;
        risk: string;
    }
    ...
] 

Get Available Redemptions

Returns a list of all available redemptions including the required parameters for a Vault.claim contract write method.

// @param vault - vault contract address
// @param chainId (optional) - vault chain id
async getAvailableRedemptions({ vault: IAddress; chainId?: number; wallet?: IAddress })
[
    {
      id: string;
      hash: string;
      timestamp: number;
      receiver: IAddress;
      day: INormalizedNumber;
      month: INormalizedNumber;
      year: INormalizedNumber;
      amount: INormalizedNumber;
      date: Date;
      vault: IAddress;
    },
    ...
]

Get Positions Across All Vaults

Returns a list of all staked positions for a given wallet address across all Vaults for the given network in a way where the object contains all required parameters to pass to Vault.claim.

// @param wallet - user wallet address
// @param vault (optional) - vault address
// @param chainId (optional) - chain id to fetch vault positions from
// @param showAllVaults (optional) - if wanting the IVault object to be included
async getPositions({
    vault?: IAddress;
    wallet: IAddress;
    chainId?: IChainId;
    showAllVaults?: boolean;
  })
[
    {
        ...vault?: IVault;
        vault: IAddress;
        status: string;
        availableRedemptions: {
          id: string;
          hash: string;
          timestamp: number;
          receiver: IAddress;
          day: INormalizedNumber;
          month: INormalizedNumber;
          year: INormalizedNumber;
          amount: INormalizedNumber;
          date: Date;
          vault: IAddress;
        }[];
        pendingRedemptions: {
          id: string;
          hash: string;
          timestamp: number;
          receiver: IAddress;
          day: INormalizedNumber;
          month: INormalizedNumber;
          year: INormalizedNumber;
          amount: INormalizedNumber;
          date: Date;
          vault: IAddress;
        }[];
        redeemable: INormalizedNumber;
        walletBalance: INormalizedNumber;
      }
      ...
]

Last updated