Skip to main content

Wallet SDK Overview

Notice: Beta ReleaseπŸ”΄β€‹

This library is under rapid development and there may be frequent breaking changes. An audit is pending.

Avalanche Wallet SDK (Beta)​

The Avalanche Wallet SDK is a TypeScript library for creating and managing non-custodial wallets on the Avalanche network.

It provides high-level methods to transact on Avalanche's X-Chain, P-Chain and C-Chain.

The wallet types are supported:

  • Singleton Wallets
  • Ledger Wallets
  • Mnemonic Wallets
  • XPUB Wallets

Using avalanche-wallet-sdk, developers can:

  • Receive and send tokens and NFTs.
  • Transfer funds between chains
  • Add a node to the validator set
  • Delegate stake to a validator
  • Create keystore files from wallet instances
  • Get the transaction history of a wallet
  • Mint NFTs on the X-Chain

Installation​

Source code can be found in this library's Github repo.

Install with npm​

npm install --save @avalabs/avalanche-wallet-sdk

Install with yarn​

yarn add @avalabs/avalanche-wallet-sdk

Classes​

See here for Classes exposed by this library.

Example Usage​

Event Listeners​

Every wallet instance will fire events to indicate changes in its state.

// Create a wallet instance
let myWallet = MnemonicWallet.create()

// Fired when the wallet starts using a new address
// Used only with HD wallets (Mnemonic, Ledger, and XPUB)
myWallet.on('addressChanged', (addresses)=>{
// Use the most recent addresses from the wallet
})

// Fired when X chain balance is updated
myWallet.on('balanceChangedX', (newBalance)=>{
// Recent X chain balance
})

// Fired when P chain AVAX balance is updated
myWallet.on('balanceChangedP', (newBalance)=>{
// Recent P chain AVAX balance
})

// Fired when C chain AVAX balance is updated
myWallet.on('balanceChangedC', (newBalance)=>{
// Recent C chain AVAX balance
})

Sending AVAX​

import {MnemonicWallet, BN} from '@avalabs/avalanche-wallet-sdk'

let myWallet = MnemonicWallet.create()

// Mnemonic wallets need to find their HD index on startup
await myWallet.resetHdIndices()

// Update the UTXOs
await myWallet.updateUtxosX()

// Send 1 nAVAX
let to = "X-avax1r20dtfehaat9wev69ajzzfcwtll903vlcx50uh"
let amount = new BN(1)
let txID = await myWallet.sendAvax(to, amount)

Changing Networks​

By default the SDK is connected to the Avalanche Mainnet.

import { NetworkConstants, Network} from '@avalabs/avalanche-wallet-sdk';

// Set to Mainnet
Network.setNetwork(NetworkConstants.MainnetConfig)

// Set to Fuji Testnet
Network.setNetwork(NetworkConstants.TestnetConfig)

Printing BN (Big Number)​

Token amounts are represented in their smallest divisible unit using BN.js. The Utils namespace has helper functions to display BN numbers in a human readable way.

import {Utils} from '@avalabs/avalanche-wallet-sdk'

// On X-Chain and P-Chain AVAX has 9 decimals
let amtX = new BN(1234567000000)
Utils.bnToAvaxX(amtX) // 1,234.567

// On the C-Chain it has 18
let amtC = new BN(1234567000000000000000)
Utils.bnToAvaxC(amtC) // 1,234.567

Websocket Provider​

Use the WebsocketProvider class to update wallet balances in real time without polling.

import { Network, NetworkConstants } from 'avalanche-wallet-sdk';

// Create a websocket provider from the network currently used by the SDK
const provider = Network.WebsocketProvider.fromActiveNetwork()

// To track wallets and update their balances
provider.trackWallet(myWallet)

// To stop tracking wallets
// Make sure to call this to avoid memory leaks
provider.removeWallet(myWallet)

// To change provider network
provider.setNetwork(NetworkConstants.TestnetConfig) // connect to Fuji testnet

Adding ERC20 Tokens​

The SDK comes loaded with a set of ERC20 contracts. You can add additional contracts like this:

import { Assets } from '@avalabs/avalanche-wallet-sdk'

// Will try to fetch details about the ERC20 contract
try{
await Assets.addErc20Token('0x34B6C87bb59Eb37EFe35C8d594a234Cd8C654D50'); // Testnet DAI
}catch(e){
// Contract not found or not valid
}

// or from known data
let tokenData = {
chainId: 43114,
address: '0xbA7dEebBFC5fA1100Fb055a87773e1E99Cd3507a',
decimals: 18,
name: 'Dai Stablecoin',
symbol: 'DAI',
}

Assets.addErc20TokenFromData(tokenData)