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
| Info | Description |
|---|---|
| Type | Solana Program |
| Source Code | GitHub |
| Build Status | Anchor Verified |
| Accounts | 3 |
| Instructions | 10 |
| Types | 0 |
| Errors | 13 |
| Domain | nosana-staking.sol |
| Address | nosScmHY2uR24Zh751PmGj9ww9QRNHewh9H59AfrTJE |
Instructions
A number of 10 instruction are defined in the Nosana Staking program.
To load the program with Anchor.
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.
| Name | Type | Description |
|---|---|---|
settings | The SettingsAccount address. | |
authority | The signing authority of the program invocation. | |
systemProgram | The official Solana system program address. Responsible for system CPIs. | |
rent | The 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:
[220,59,207,236,108,250,47,100]Example with Anchor
To invoke the Init Instruction with Anchor TS.
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.
| Name | Type | Size | Offset | Description |
|---|---|---|---|---|
authority | publicKey | 32 | 8 | The signing authority of the program invocation. |
tokenAccount | publicKey | 32 | 40 | The 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:
[63,89,203,155,76,237,115,58]Errors
A number of 13 errors are defined in the Nosana Staking Program.
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.