Git Product home page Git Product logo

solana-nft-staking-program's Introduction

Solana NFT Staking

This is a reference NFT Staking Program & Client for Solana NFTs. This program is compatible with both Candy Machine v1 and Candy Machine v2 NFTs.


Disclaimer

Use at your own risk. I will not answer any support-related inquiries about this repository. If you have any issues or want any changes made, please make a fork or open a pull request.

This program was initially built during Solana v1.8.0. A closed source version is actively maintained and updated for Shadowy Super Coders. I will not be sharing those updates.

Yes, I do know this program does not use Metaplex's new "Collections" feature. No, I will not implement it in this open source repository. Feel free to open a PR with the changes if you'd like.


Support

If this repo helped you or your project in any way, any tips sent to A858S5BKJhrbc4mm8VcMMRWthBgtMu2AjDkAmrEKKEdD on Solana are highly appreciated.

Contributions by https://github.com/Ru5ty0ne

Staking Setup + Commands

Reward token

  • NOTE: Only have to do this in development. In production, the reward token should already exist and you just have to transfer some into the vault later.

spl-token create-token --decimals 0

  • NOTE: Any decimal spl token will work. Just using 0 for development purposes.

spl-token create-account <mint>

  • NOTE: replace with the returned mint address from above

spl-token mint <mint> 1000000

Proof token

  • NOTE: This should be a 0 decimal token. Only mint the number based on however large your NFT collection is. You can mint more if needed, but it shouldn't be necessary.

spl-token create-token --decimals 0

spl-token create-account <mint>

spl-token mint <mint> 10000

Set admin, proof_mint and reward_mint variables in program/src/lib.rs

cd program && cargo build-bpf

  • NOTE: If cargo build-bpf doesn't work for you, run rm -rf ~/.cache/solana and then re-run the build command again. This should force solana to re-download and link the bpf utilities.

Deployment will cost about 3.31 sol

solana program deploy /path/to/nft-staking-v2/program/target/deploy/staking.so

Set reward_mint, proof_mint and program_id variables in client/src/main.rs

Run commands below in client directory

cargo build

Generate vault and transfer reward+proof tokens into the vault

cargo run -- generate_vault_address -e dev -s /path/to/deployer/id.json --min_period 60 --reward_period 10 --bonus_percentage 0 --bonus_period 30

  • NOTE: periods in seconds
  • NOTE: You can use decimals for reward period, min_period, bonus_percentage, and bonus_period. If you do use decimals, do extensive testing to make sure you get the expected amount in rewards and the timing is all correct.

spl-token transfer <reward_mint> 1000000 <vault-address> --fund-recipient

  • NOTE: second address is the vault address returned from generate_vault_address cmd

spl-token transfer <proof_mint> 10000 <vault-address> --fund-recipient

  • NOTE: second address is the vault address returned from generate_vault_address cmd

Add candy machine ID to whitelist

cargo run -- add_to_whitelist -e dev -s /path/to/deployer/id.json --reward 1 --maxreward 30 --candy_machine <candy-machine-creator-address>

  • <candy-machine-creator-address> is the first creator address on the NFTs in your collection. This should be a creator with 0% share.

Client commands

cargo run -- stake -e dev -s /path/to/deployer/id.json --nft <nft-token-address>

  • Stakes your NFT into the program vault, gives you a proof token back

cargo run -- stake_withdraw -e dev -s /path/to/deployer/id.json --nft <nft-token-address>

  • "Claims" your tokens on your nft without unstaking

cargo run -- unstake -e dev -s /path/to/deployer/id.json --nft <nft-token-address>

  • Unstakes your NFT and claims tokens at the same time

  • NOTE: Wait 60s before unstaking/claiming, as the min_period above is set to 60s. You can set this to 0 or 1 if you'd like users to instantly claim or unstake

cargo run -- withdraw -e dev -s /path/to/deployer/id.json --amount 10

  • NOTE: This is an admin-only command that lets you withdraw your reward tokens out of stake vault. This is a failsafe in case you need to kill this staking program and create a new one.

solana-nft-staking-program's People

Contributors

tracy-codes avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.