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/viemandetherssigners 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/sdkThe 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:
| Method | Description |
|---|---|
previewDeposit | Shares minted for a given deposit amount. |
previewRedeem | Assets returned for a given share amount. |
allowance | Raw ERC-20 allowance the owner has granted the vault. |
balanceOf | Raw ERC-20 balance for any token / owner. |
maxDeposit | Maximum 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