Skip to main content
Version: 3.0

Stake AVT

Stakes the specified amount of AVT, locking its free usage in order to earn rewards.


First time stakers must stake a minimum of 100 AVT.

await api.send.stake(AMOUNT_TO_STAKE)

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 Relayer here.

const { AvnApi, SetupMode, SigningMode } = require("avn-api");
const AVN_GATEWAY_URL = "";

const singleUserOptions = {
suri: "0x5392ca60a61aea99fce14358798de93c1bc11c3696a905718738c71fae539c24", // this is from the generated example account
setupMode: SetupMode.SingleUser,
signingMode: SigningMode.SuriBased,

const avnSdk = new AvnApi(AVN_GATEWAY_URL, singleUserOptions);

//Amount of AVT in 18 decimals
const AMOUNT_TO_STAKE = '1000000000000000000';

async function main() {
await avnSdk.init();
const api = await avnSdk.apis();

let result = await api.send.stake(AMOUNT_TO_STAKE);
// Returns a request id

(async () => {
await main();

You have now successfully submitted a transaction to the AVN.


You can query the state of your transaction here using the returned request id.


There are two JSON-RPC methods to staking AVT.

  1. proxyStakeAvt - Only to be used for first time stakers.
  2. proxyIncreaseStake Only to be used for current stakers.


This should only be used for first time stakers - please query getStakingStatus to check first.

POST <https://AVN_GATEWAY_URL/send>

Content-Type: application/json Authorization': bearer <awtToken>


The initial staking requires 2 sets of proofs, one to cover the bonding step and one to cover the nominating step


  • relayer [required] - a string representing the relayer's SS58 address
  • user [required] - a string representing the user's SS58 address
  • payer [required] - a string representing the payer's SS58 address
  • amount [required] - a string integer value representing the full amount of AVT to stake
  • targets [required] - The list of validators to nominate
  • nonce [required] - string integer value of the current proxy nonce of type 'staking'
  • proxySignature [required] - a proof signed by the user allowing the transaction to be proxied
  • feePaymentSignature [required] - a proof signed by the payer allowing the relayer fees to be paid
  • paymentNonce [required] - string integer value of the current payment nonce of the payer

JSON-RPC Example

curl https://AVN-API-URL/send \
-H "Content-Type: application/json" \
-H "Authorization: bearer <awtToken>" \
-d '{"jsonrpc":"2.0", "method":"proxyStakeAvt", "params":{"relayer": "5FbUQ...F3TeGyu6UoZaryTh",
"user": "5HMYezk4gRAoed...p7DGZM8rSTyf", "payer": "5HMYezk4gRAoed...p7DGZM8rSTyf",
"amount": "51000000000000000000", "targets": ["5CB8eZjJraPR7e...UHYUAG7HbnR", "5DHXA2pDmGM...zNw6EpBe9GgHKkunkL",
"5F6tYYDzZvGk...mUqSb3Q85nmkRa7JSMj", "5GNCn4Tyb3sgCF9...AZQWF1N1ikyVV",
"5HdTonR7WyEtwAR...1jzXXnzdgknViqiYyh"], "nonce": "112",
"proxySignature": "0x3c9d46239bb5426c9d253a2404c6444a12...7f055b93dd74ed9bb79a8ff10fe1343a4130602bdf32b2010b48d",
"feePaymentSignature": "0x82603b6dd7d63101a93db4402b57792443d1068...4ab61ff13ac81285bdc1304435a9338ade873bc84",
"paymentNonce": "10071"}, "id":1}'


This endpoint can only be called while the eraElectionWindow is closed. If it is called during an election, the following error response will be returned:

"message":"Invalid Request",
"data": {
"gatewayError":"election window is open",