上一篇中,讲到了怎样在Near网络中跑一个验证者节点。https://www.jianshu.com/p/d00033c83063
但是,要成为一个合格的验证者节点,这是不够的,需要建一个质押资金池,并且能够接受他人的委托存币。当资金池的币量满足Near网络的条件(这个条件是动态的)后,才能加入100个验证者名单之列。
建议质押资金池有两个途径。一是用命令行建立,二是用staking pool factory建立
一、先讲用命令行建立资金池
1.建立名为staking-pool的文件夹,并且下载合约
mkdir staking-pool
cd staking-pool
git clone https://github.com/near/initial-contracts
cd initial-contracts
cd staking-pool
由于上一篇文章,我们已经下载安装了rust,并且把wasm 添加到了 toolchain,这里我们开始直接在staking-pool文件夹里面编译:
./build.sh
2.创建新的合约账户
near create_account my_validator --masterAccount=owner
其中, my_validator要填写你第一次运行节点时候设置的那个验证者用户名 格式为 XXXX.YYYY.betanet。一定要一致,不一致以后无法生产区块。
owner替换成你betanet钱包账号 YYYY.betanet
3.为刚才新创建的合约账户部署合约
near deploy --accountId=my_validator --wasmFile=res/staking_pool.wasm
注意,路径res/staking_pool.wasm 可能会因为系统不同有所差别,填写自己正确的路径
4.初始化合约
near call my_validator new'{"owner_id": "owner", "stake_public_key": "CE3QAXyVLeScmY9YeEyR3Tw9yXfjBPzFLzroTranYtVb", "reward_fee_fraction": {"numerator": 10, "denominator": 100}}'--account_id owner
这个要把 my_validator换成你自己的验证者用户名。owner替换成你的betanet钱包账号,stake_public_key换成你自己的(在.near/betanet/validator_key.json里面),这里reward_fee_fraction费率设置的10%,可以根据你自己的需求调节。 account_id 后面写的是 你的验证者用户名。
这样命令行创建的质押资金池就建好了
二、用staking pool factory建立质押资金池
这就相对简单多了,网址:https://near-examples.github.io/staking-pool-factory/
出现如下界面:
点Log in with Near Wallet to creat a new staking pool,然后出现如下界面:
stakingpool ID 填写你刚才创建的验证者用户名 XXXX.YYYY.betanet,Owner ID 写成你的betanet钱包账号,stake_public_key换成你自己的(在.near/betanet/validator_key.json里面),费率根据自己的需求设置。填写好后点击Create Staking Pool创建按钮,这将要需要扣除30个测试币。
这样你的质押资金池就建立好啦。
然后,删除所有key来锁住合约:
near delete-key --accessKey ed25519:.................................... --accountId my_validator
其中 Key换成自己的, accountID 后面的换成自己的验证者用户名 XXXX.YYYY.betanet
接下来,进入github里面near项目,stakewar仓库,地址:
https://github.com/nearprotocol/stakewars
找到VALIDATORS.md这个文件并点击:
然后点笔符号进行编辑
里面已经有很多人添加了节点信息,自己按照格式添加一行,写自己的信息。注意格式不要写错了。
写完之后,填写Update VALIDATORS.md,然后点绿色的Proposed change提交。提交之后,点击 Create pull request, 发起pull request请求,项目方成员审核通过后,你的名字就会添加到验证者名单中。
接下来就可以多方推广,让别人把自己手里的币存到你的质押资金池里面了。
存币100:
near call stakingpool.youlaiwuqu.betanet deposit '{}' --accountId 你自己的betanet钱包用户名 --amount 100
质押100:
near call stakingpool.youlaiwuqu.betanet stake '{"amount": "100000000000000000000000000"}' --accountId 你自己的betanet钱包用户名
刷新生效:
near call stakingpool.youlaiwuqu.betanet ping '{}' --accountId 你自己的betanet钱包用户名