Skip to content

Nosana Staking

The staking program allows users to stake NOS tokens for a variable amount of time.

The staking dashboard can be found here: https://dashboard.nosana.com/stake/

There are 2 values associated with a users stake:

  • Staked NOS
  • xNOS (Staked NOS x duration)

The staked NOS is the amount of tokens that the vault actually holds for the user that can be slashed or unstaked, while xNOS is a value indicating a users rank for purposes like giveaways and voting.

Program Information

InfoDescription
TypeSolana Program
Source CodeGitHub
Build StatusAnchor Verified
Accounts3
Instructions10
Types0
Errors13
Domainnosana-staking.sol
AddressnosScmHY2uR24Zh751PmGj9ww9QRNHewh9H59AfrTJE

Instructions

A number of 10 instruction are defined in the Nosana Staking program.

To load the program with Anchor.

typescript
const programId = new PublicKey('nosScmHY2uR24Zh751PmGj9ww9QRNHewh9H59AfrTJE');
const idl = await Program.fetchIdl(programId.toString());
const program = new Program(idl, programId);

Init

Initialize the SettingsAccount.

Account Info

The following 4 account addresses should be provided when invoking this instruction.

NameTypeDescription
settingsThe SettingsAccount address.
authorityThe signing authority of the program invocation.
systemProgramThe official Solana system program address. Responsible for system CPIs.
rentThe official Solana rent address. Responsible for lamports.
Solana Dispatch ID

The Solana dispatch ID for the Init Instruction is dc3bcfec6cfa2f64, which can also be expressed as an 8 byte discriminator:

json
[220,59,207,236,108,250,47,100]
Example with Anchor

To invoke the Init Instruction with Anchor TS.

typescript
let tx = await program.methods
  .init()
  .accounts({
    settings,          // ✓ writable, 𐄂 signer
    authority,         // ✓ writable, ✓ signer
    systemProgram,     // 𐄂 writable, 𐄂 signer
    rent,              // 𐄂 writable, 𐄂 signer
  })
  .signers([authorityKey])
  .rpc();

Accounts

A number of 3 accounts make up for the Nosana Staking Program's state.

Settings Account

The SettingsAccount struct holds the information about the slashing authority and token account. The total size of this account is 72 bytes.

NameTypeSizeOffsetDescription
authoritypublicKey328The signing authority of the program invocation.
tokenAccountpublicKey3240The token account where slash deposits will go.
Anchor Account Discriminator

The first 8 bytes, also known as Anchor's 8 byte discriminator, for the Settings Account are 3f59cb9b4ced733a, which can also be expressed in byte array:

json
[63,89,203,155,76,237,115,58]

Errors

A number of 13 errors are defined in the Nosana Staking Program.

Nosana Error

6000 - Amount Not Enough

This amount is not enough.

Diagram

xNOS calculation

For people that like to know exactly how Nosana calculate a stakers's score, we've written it down as a function . Where denotes the number of Nosana Tokens a staker has staked in the Nosana Staking Program.

The parameter denotes time in seconds, which represents the duration a staker has staked his or her tokens. The parameter is subject to a set. The stake duration belongs to the set of integers , such that is greater than or equal to seconds and less than or equal to seconds.

Because it's somewhat difficult to intuitively understand numbers of this magnitude, we can simplify above function to use days rather seconds, which are denoted .

The stake duration belongs to the set of natural numbers , such that is greater than or equal to days and less than or equal to days.

In more simple phrasing. A staker can stake Nosana Tokens for a minimum of two weeks and a maximum of one year. The longer the duration of a stake, the higher the multiplier against the number of tokens in stake. The maximum multiplier is this system is , because .

On the Nosana website you can find a xNOS calculator.