UpshiftDocs

ABI Functions

Contract ABIs bundled with the Upshift SDK for vaults, tokens, loans, and reward distribution.

The Upshift SDK includes all necessary contract ABIs (Application Binary Interfaces) for interacting with Upshift vaults and related contracts. All ABIs are exported with the ABI_ prefix.

Typing support for TypeScript

The SDK provides a createContract utility function to create a strongly typed contract class from a given ABI object.

import { createContract, ABI_LENDING_POOL_V2 } from '@augustdigital/sdk';

const vaultContract = createContract({
  address: '0x...',
  abi: ABI_LENDING_POOL_V2,
  provider,
});

// vaultContract is fully typed
vaultContract.maxSupply();

Vault ABIs

ABI_LENDING_POOL

Legacy lending pool contract ABI (vault v1.0).

import { ABI_LENDING_POOL } from '@augustdigital/sdk';

Main Functions:

  • deposit(uint256 assets, address receiver)
  • withdraw(uint256 assets, address receiver, address owner)
  • asset() - Get underlying token address
  • totalAssets() - Get total vault assets
  • convertToShares(uint256 assets) - Convert assets to shares
  • convertToAssets(uint256 shares) - Convert shares to assets

ABI_LENDING_POOL_V2

Current lending pool contract ABI (vault v2.0) with separate receipt tokens.

import { ABI_LENDING_POOL_V2 } from '@augustdigital/sdk';

Main Functions:

  • deposit(uint256 assets, address receiver) - Deposit assets
  • requestRedeem(uint256 shares, address receiver, address owner) - Request withdrawal
  • redeem(uint256 year, uint256 month, uint256 day, uint256 receiverIndex, address receiver) - Claim withdrawal
  • asset() - Get underlying token
  • totalAssets() - Get total vault TVL
  • decimals() - Get vault decimals
  • maxDeposit(address) - Check deposit limits
  • previewDeposit(uint256 assets) - Preview deposit
  • previewRedeem(uint256 shares) - Preview redemption

Example:

import { ethers } from 'ethers';
import { ABI_LENDING_POOL_V2 } from '@augustdigital/sdk';

const vaultContract = new ethers.Contract(
  '0xVaultAddress...',
  ABI_LENDING_POOL_V2,
  provider,
);

// Query vault data
const totalAssets = await vaultContract.totalAssets();
const assetAddress = await vaultContract.asset();
const decimals = await vaultContract.decimals();

console.log(`TVL: ${ethers.formatUnits(totalAssets, decimals)}`);

ABI_LENDING_POOL_V3

Next-generation lending pool contract ABI (vault v3.0).

import { ABI_LENDING_POOL_V3 } from '@augustdigital/sdk';

Similar interface to V2 with additional features and optimizations.

ABI_TOKENIZED_VAULT_V2

Tokenized vault V2 contract ABI.

import { ABI_TOKENIZED_VAULT_V2 } from '@augustdigital/sdk';

Main Functions:

  • deposit(uint256 assets, address receiver)
  • mint(uint256 shares, address receiver)
  • withdraw(uint256 assets, address receiver, address owner)
  • redeem(uint256 shares, address receiver, address owner)

ABI_TOKENIZED_VAULT_V2_RECEIPT

Receipt token contract for Tokenized Vault V2.

import { ABI_TOKENIZED_VAULT_V2_RECEIPT } from '@augustdigital/sdk';

Standard ERC20 interface for vault receipt tokens.

ABI_TOKENIZED_VAULT_V2_WHITELISTED_ASSETS

Whitelisted assets management for Tokenized Vault V2.

import { ABI_TOKENIZED_VAULT_V2_WHITELISTED_ASSETS } from '@augustdigital/sdk';

Token ABIs

ABI_ERC20

Standard ERC20 token contract ABI.

import { ABI_ERC20 } from '@augustdigital/sdk';

Main Functions:

  • balanceOf(address account) - Get token balance
  • allowance(address owner, address spender) - Check allowance
  • approve(address spender, uint256 amount) - Approve spending
  • transfer(address to, uint256 amount) - Transfer tokens
  • transferFrom(address from, address to, uint256 amount) - Transfer from
  • totalSupply() - Get total supply
  • decimals() - Get token decimals
  • symbol() - Get token symbol
  • name() - Get token name

Example:

import { ethers } from 'ethers';
import { ABI_ERC20 } from '@augustdigital/sdk';

const tokenContract = new ethers.Contract(
  '0xTokenAddress...',
  ABI_ERC20,
  provider,
);

// Check balance
const balance = await tokenContract.balanceOf('0xWalletAddress...');

// Approve spending
const signer = provider.getSigner();
const tx = await tokenContract
  .connect(signer)
  .approve('0xSpenderAddress...', ethers.parseUnits('100', 18));
await tx.wait();

ABI_ERC4626

Standard ERC4626 tokenized vault ABI.

import { ABI_ERC4626 } from '@augustdigital/sdk';

Main Functions:

  • deposit(uint256 assets, address receiver)
  • mint(uint256 shares, address receiver)
  • withdraw(uint256 assets, address receiver, address owner)
  • redeem(uint256 shares, address receiver, address owner)
  • asset() - Get underlying asset
  • totalAssets() - Get total managed assets
  • convertToShares(uint256 assets)
  • convertToAssets(uint256 shares)
  • previewDeposit(uint256 assets)
  • previewMint(uint256 shares)
  • previewWithdraw(uint256 assets)
  • previewRedeem(uint256 shares)

ABI_ERC721

Standard ERC721 NFT contract ABI.

import { ABI_ERC721 } from '@augustdigital/sdk';

Main Functions:

  • balanceOf(address owner)
  • ownerOf(uint256 tokenId)
  • transferFrom(address from, address to, uint256 tokenId)
  • safeTransferFrom(address from, address to, uint256 tokenId)
  • approve(address to, uint256 tokenId)
  • getApproved(uint256 tokenId)
  • setApprovalForAll(address operator, bool approved)

Utility ABIs

ABI_LOAN

Loan contract ABI for the Upshift lending protocol.

import { ABI_LOAN } from '@augustdigital/sdk';

Main Functions:

  • principal() - Get loan principal
  • apr() - Get annual percentage rate
  • borrower() - Get borrower address
  • lender() - Get lender address
  • paymentInterval() - Get payment frequency
  • makePayment(uint256 amount) - Make loan payment

ABI_REWARD_DISTRIBUTOR

Reward distribution contract ABI.

import { ABI_REWARD_DISTRIBUTOR } from '@augustdigital/sdk';

Main Functions:

  • claimRewards(address user) - Claim pending rewards
  • pendingRewards(address user) - Check pending rewards
  • rewardToken() - Get reward token address

Using ABIs

Creating Contract Instances

import { ethers } from 'ethers';
import { ABI_LENDING_POOL_V2, ABI_ERC20 } from '@augustdigital/sdk';

const provider = new ethers.JsonRpcProvider('https://...');

// Create vault contract
const vault = new ethers.Contract(
  '0xVaultAddress...',
  ABI_LENDING_POOL_V2,
  provider,
);

// Create token contract
const token = new ethers.Contract('0xTokenAddress...', ABI_ERC20, provider);

Reading Contract Data

import { ABI_LENDING_POOL_V2 } from '@augustdigital/sdk';

const vault = new ethers.Contract('0xVault...', ABI_LENDING_POOL_V2, provider);

// Query vault state
const [totalAssets, assetAddress, decimals] = await Promise.all([
  vault.totalAssets(),
  vault.asset(),
  vault.decimals(),
]);

console.log('Total Assets:', ethers.formatUnits(totalAssets, decimals));
console.log('Asset Token:', assetAddress);

Writing to Contracts

import { ABI_LENDING_POOL_V2, ABI_ERC20 } from '@augustdigital/sdk';

const signer = await provider.getSigner();

// Approve vault to spend tokens
const token = new ethers.Contract(assetAddress, ABI_ERC20, signer);

const approveTx = await token.approve(
  vaultAddress,
  ethers.parseUnits('100', 18),
);
await approveTx.wait();

// Deposit into vault
const vault = new ethers.Contract(vaultAddress, ABI_LENDING_POOL_V2, signer);

const depositTx = await vault.deposit(
  ethers.parseUnits('100', 18),
  await signer.getAddress(),
);
await depositTx.wait();

console.log('Deposit successful!');