UpshiftDocs

Quick Start

Install the Upshift TypeScript SDK, initialize it with your RPC providers, and run a complete deposit flow.

The Upshift SDK provides comprehensive TypeScript methods for interacting with Upshift vaults and services across multiple blockchain networks. Whether you're building web applications, backend services, or integrations, the SDK offers a unified interface for EVM and Solana chains.

Note: If you would like to integrate our SDK on your own front end, please reach out to us as we would need to add your domain to our whitelist so you do not get restricted by CORS.

Key Features

Multi-Chain Support

  • EVM Chains: Ethereum, Arbitrum, Base, BSC, Avalanche, and more — wagmi/viem and ethers signers supported
  • Solana: Native Solana program support with full vault functionality
  • Stellar: Stellar vault deposit, redeem, and position queries
  • Sui: Ember vault read operations
  • Unified interface across all supported chains

Comprehensive Vault Operations

  • Query all vaults or specific vault details
  • Fetch user positions and balances
  • Get loan data and allocations
  • Retrieve historical APY and TVL data
  • Track user transaction history

Transaction Support

  • Deposit assets into vaults (EVM and Solana)
  • Adapter deposits with alternative tokens (ETH, WETH, native tokens)
  • Multi-asset vault deposits
  • Request withdrawals/redemptions
  • Claim available redemptions
  • Approve token spending

Getting Started

Installation

Install the package in your project directory with:

npm install @augustdigital/sdk

The package is published on npm: @augustdigital/sdk

Initialization

Then, initialize the SDK in your project using your Upshift API key and various provider RPC URLs:

import AugustSDK from '@augustdigital/sdk';

const sdk = new AugustSDK({
  // Required: stable kebab-case slug identifying your application.
  appName: '<APP_NAME>',
  // Provide the RPC endpoints for onchain interactions.
  // At least one RPC endpoint is required.
  providers: {
    1: `https://mainnet.infura.io/v3/${INFURA_API_KEY}`,
    42161: `https://arb-mainnet.g.alchemy.com/v2/${ALCHEMY_KEY}`,
  },
  keys: {
    august: 'YOUR_AUGUST_API_KEY',   // Optional: required for vault allocations, health factors, and sub-account operations
  },
});

Note: the first provider in the providers object will be what network the SDK is initially connected to.

Development Mode

Enable console logging for debugging:

const sdk = new AugustSDK({
  appName: '<APP_NAME>', // required
  providers: {
    1: 'https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY',
  },
  monitoring: {
    env: 'DEV', // Enables console logs
  },
});

With Solana Support

Include Solana by adding its RPC endpoint with chain ID -1:

const sdk = new AugustSDK({
  appName: '<APP_NAME>', // required
  providers: {
    1: 'https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY',
    42161: 'https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY',
    -1: 'https://api.mainnet-beta.solana.com', // Solana Mainnet
  },
});

End-to-End Deposit Walkthrough

The snippets below show a complete deposit flow against an EVM vault. Substitute the vault address with the one you're integrating against.

1. Connect a wallet

Either ethers or wagmi/viem works — setSigner accepts both. With ethers:

import { JsonRpcProvider, Wallet } from 'ethers';

const provider = new JsonRpcProvider(
  'https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY',
);
const wallet = new Wallet(process.env.PRIVATE_KEY!, provider);
sdk.evm.setSigner(wallet);

With wagmi/viem (browser):

import { useWalletClient } from 'wagmi';

const { data: walletClient } = useWalletClient();
if (walletClient) sdk.evm.setSigner(walletClient);

2. Preview the deposit

previewDeposit returns the shares you would receive without broadcasting a transaction:

const shares = await sdk.evm.previewDeposit({
  vault: '0x...', // your vault address
  amount: 1_000_000n, // 1 USDC (6 decimals)
});

3. Check the allowance

const owner = await wallet.getAddress();
const current = await sdk.evm.allowance({ vault: '0x...', owner });
if (current < 1_000_000n) {
  await sdk.evm.vaultApprove({
    target: '0x...',
    wallet: owner,
    amount: '1',
    wait: true,
  });
}

4. Deposit

const txHash = await sdk.evm.vaultDeposit({
  target: '0x...',
  wallet: owner,
  amount: '1',
});

5. Request a redemption

Standard (queued) redemption:

await sdk.evm.vaultRequestRedeem({
  target: '0x...',
  wallet: owner,
  amount: '0.5',
});

Instant redemption (if supported by the vault):

await sdk.evm.vaultRequestRedeem({
  target: '0x...',
  wallet: owner,
  amount: '0.5',
  isInstantRedeem: true,
});

6. Handle errors

Every public method throws typed errors that subclass AugustSDKError. See the Error Handling page for the full reference; the short version:

import {
  AugustValidationError,
  AugustTimeoutError,
  AugustSDKError,
} from '@augustdigital/sdk';

try {
  await sdk.evm.vaultDeposit({ target, wallet: owner, amount: '1' });
} catch (err) {
  if (err instanceof AugustValidationError) showFormError(err.message);
  else if (err instanceof AugustTimeoutError) scheduleRetry(err.timeoutMs);
  else if (err instanceof AugustSDKError) reportError(err.code, err.cause);
  else throw err;
}

Read Helpers Reference

The EVM adapter exposes typed read helpers so you don't have to reach into the ABIs:

MethodDescription
previewDepositShares minted for a given deposit amount.
previewRedeemAssets returned for a given share amount.
allowanceRaw ERC-20 allowance the owner has granted the vault.
balanceOfRaw ERC-20 balance for any token / owner.
maxDepositMaximum deposit currently accepted by the vault.

All return raw bigint values so BigInt math stays precise.

Example App

We also have an example app that can be found in this repo: github.com/upshift-protocol/example-sdk-app

The example app can be found at starter.upshift.finance