Skip to main content
Version: 3.0

The End to End Guide For Transferring Tokens between accounts on the AVN

This guide will walk you through successfully submitting a transaction to the AVN and verifying the state of the transaction.

The first thing we need to do is ensure that you have npm installed. You'll find instructions on how to do this here. You'll also find instructions on how to install the avn-api library. Once that's done, the next step is to think about how you would like to go about setting up your Substrate uri (SURI). You can either do this as an environmental variable or as an option during initialisation. Both options are here. For this guide, we'll use the options method.

Note, all transactions on the AVN must be paid for using AVT, so going forward it's important for you to have some AVT in your account. There are multiple ways to purchase AVT and this page provides instructions on how to get some. Note: If you haven't submitted a transaction on the AvN previously, you need a minimum of 1 AVT in your account to use the API. The AVT needs to be lifted (moved) to the Aventus Network, and there are also instructions for that too here. If you have a designated account registered on the Gateway to pay your fees, your account is not subject to pay transaction fees or have the 1 AVT balance requirement.

Once you have some AVT in your account, of which you can check your account balance by using the explorer here, let's get to the exciting bit, submitting a transaction to the AVN. For this guide, we'll show a simple transaction submitting 10 AVT from one account to another.


This operation uses a relayer account that the sender authorizes to submit the transfer transaction. You can learn more about relayers here.

You can get the AVN_GATEWAY_URL and AVN_RELAYER here.

const { AvnApi, SetupMode, SigningMode } = require("avn-api");
const AVN_GATEWAY_URL = "gateway url of your chosen network"
const options = {
suri: "suri of your account",
setupMode: SetupMode.SingleUser,
signingMode: SigningMode.SuriBased,
hasPayer: true,

// The AvN address or public key of the recipient account.
const RECIPIENT_ACCOUNT = "5ab310..."; //the SS58 address or public key of the recipient on the Aventus network.

// The Ethereum address of the Token's smart contract
const TOKEN_CONTRACT = "0x1234...";

// Amount to Transfer
const AMOUNT = "10000000000000000000";

async function main() {
const avnSdk = new AvnApi(AVN_GATEWAY_URL, options);
await avnSdk.init();
const api = await avnSdk.apis();

let requestId = await api.send.transferToken(
// Save the request id of the transaction.
(async () => {
await main();

Expected Transaction Submission Output


Congratulations! You've now successfully submitted a transaction to the AVN.

State of the Transaction

To query the AvN on the state of the transaction, you can poll the state.

let status = await api.poll.requestState(requestId);

Expected State Output

"txHash": "0x37b5aa6...ae1c773c0acbc63dc90",
"status": "Processed",
"blockNumber": "125412",
"transactionIndex": "2"