- Any notes or instructions assume your using Ubuntu
This low-maintained cheatsheet supports Validators and Delegators who use near-cli to manage their stake.
Replace nearkat.stakingpool with the name of your pool, and pool_admin.nearkat with the owner/administrator of the pool (or the account that is staking the tokens).
If you get stuck, give a look to the troubleshooting page, open an issue, or join near.chat on Discord
- REQUIRED: To send commands to the guildnet network
echo "export NODE_ENV=guildnet" >> ~/.profile
source ~/.profile
- To switch networks mid-session
export NODE_ENV=testnet
-
This uses the staking pool factory to deploy a staking pool. On the guildnet network you are free to deploy your own contracts if you choose. All pools deployed with this method on guildnet will end with the
.stake.guildnetsuffix. -
A staking pool contract is required for all validators. Please remember the staking pool contract controls all rewards, tracks delegations, and generally keeps track of everything.
-
Call the staking pool factory
stake.guildnetto deploy the contract
near call stake.guildnet create_staking_pool '{"staking_pool_id": "nearkat", "owner_id": "pool_admin.nearkat", "stake_public_key": "ed25519:00000000000000000000000000000000000000000042", "reward_fee_fraction": {"numerator": 10, "denominator": 100}}' --accountId="pool_admin.nearkat" --amount=30 --gas=300000000000000
From the example above, you have to replace:
nearkatwith the name of your staking pool (HEADS UP: the factory automatically adds its name to this parameter, creatingnearkat.stakingpool)pool_admin.nearkatwith the wallet that will control the staking pooled25519:0..042with the public key in yourvalidator.jsonfile25with the fees that you like (in this case 25 over 100 is 25% of fees!)pool_admin.nearkatin the --accountId with your pool admin account- be sure to have
30NEAR available in your account (HEADS UP: keep the minimum balance to pay the storage stake)
This method allows you to run your own fork of the staking pool.
- Deploy the smart contract in the account
my_cool_pool.nearkat(replacemy_cool_pool.nearkataccount with your cool pool name)
near deploy --accountId=my_cool_pool.nearkat --wasmFile=res/staking_pool_with_shares.wasm
(replace my_cool_pool.nearkat, pool_admin.nearkat, stake_public_key and reward_fee_fraction accordingly)
near call my_cool_pool.nearkat new '{"owner_id": "pool_admin.nearkat", "stake_public_key": "ed25519:00000000000000000000000000000000000000000042", "reward_fee_fraction": {"numerator": 25, "denominator": 100}}' --accountId pool_admin.nearkat
The pool above will have 25% of fees (25 numerator, 100 denominator).
- HINT: Copy/Paste everything after this line into a text editor and use search and replace
Once your pool is deployed, you can issue the commands below
- Retrieve the owner ID of the staking pool
near view nearkat.stakingpool get_owner_id '{}'
- Issue this command to retrieve the validators local name and public key
cat .near/guildnet/validator_key.json | grep "account_id\|public_key"
- Issue this command to retrieve the public key the network has for your validator
near view nearkat.stakingpool get_staking_key '{}'
- If the validator name does not match you will need to delete the guildnet folder and start over
- If the public key does not match you can update the staking key like this (replace the pubkey below with the key in your
validator.jsonfile)
near call nearkat.stakingpool update_staking_key '{"stake_public_key": "ed25519:00000000000000000000000000000000000000000042"}' --accountId pool_admin.nearkat
In order to get a validator seat you must first submit a proposal with an appropriate amount of stake. Proposals are sent for epoch +2. Meaning if you send a proposal now, if approved, you would get the seat in 3 epochs. You should submit a proposal every epoch to ensure your seat. To send a proposal we use the ping command. A proposal is also sent if a stake or unstake command is sent to the staking pool contract.
- Ping the pool, paying gas from account
pool_admin.nearkat
near call nearkat.stakingpool ping '{}' --accountId pool_admin.nearkat
- Deposit 10,000 NEAR for the account
pool_admin.nearkat. You should always deposit funds then issue a staking command.
near call nearkat.stakingpool deposit '' --accountId pool_admin.nearkat --amount 10000
- Stake 10,000 NEAR (value in YoctoNEAR) with the account
pool_admin.nearkat
near call nearkat.stakingpool stake '{"amount": "10000000000000000000000000000"}' --accountId pool_admin.nearkat
- Unstake 10,000 NEAR(value in YoctoNEAR) from the account
pool_admin.nearkat
near call nearkat.stakingpool unstake '{"amount": "10000000000000000000000000000"}' --accountId pool_admin.nearkat
- Withdraw 10,000 NEARs in YoctoNEAR from the account
pool_admin.nearkat
near call nearkat.stakingpool withdraw '{"amount": "10000000000000000000000000000"}' --accountId pool_admin.nearkat
- Retrieve the total balance in YoctoNEAR for the account
pool_admin.nearkat
near view nearkat.stakingpool get_account_total_balance '{"account_id": "pool_admin.nearkat"}'
- Retrieve the staked balance in YoctoNEAR for the account
pool_admin.nearkat
near view nearkat.stakingpool get_account_staked_balance '{"account_id": "pool_admin.nearkat"}'
- Retrieve the unstaked balance in YoctoNEAR for the account
pool_admin.nearkat
near view nearkat.stakingpool get_account_unstaked_balance '{"account_id": "pool_admin.nearkat"}'
- Check if the unstaked balance for the account
pool_admin.nearkatis unlocked. You can only withdraw funds from a contract if they are unlocked.
near view nearkat.stakingpool is_account_unstaked_balance_available '{"account_id": "pool_admin.nearkat"}'
- Pause
near call nearkat.stakingpool pause_staking '{}' --accountId pool_admin.nearkat
- Resume
near call nearkat.stakingpool resume_staking '{}' --accountId pool_admin.nearkat