接着上一篇 heco private chain 搭建流程

最高可添加 21个 validator节点, miner.start()的 validator节点大于总量的 1/2+1时会正常出块

1. 扒合约

把 heco系统合约地址 https://github.com/stars-labs/heco-contracts/tree/master/contracts 的合约代码扒下来, 想办法弄到remix里

2. 编译版本

修改 Solidity compilerCOMPILER编译版本为 v0.6.1, 其他版本会编译不通过

3. 选择验证者

编译通过后到 Deploy&run transactions 页面, 点击 ENVIRONMENT下面的选项, 选择 Injected Web3 , ACCOUNT连接到初始验证者(genesis.json里的那一个)地址, 保证账户有余额

contract address

  • 0x000000000000000000000000000000000000f000 // validators contract address
  • 0x000000000000000000000000000000000000f001 // punish contract address
  • 0x000000000000000000000000000000000000f002 // proposal contract address

选择 CONTRACT 下的 Proposal-Proposal.sol, 设置 At Address0x000000000000000000000000000000000000f002, 然后点击 At Address按钮, 点击展开 Deployed Contracts下的 PROPOSAL AT 0X000...0F002 (BLOCKCHAIN)

第 5, 6, 7步会用到

4. 获取事件 id

使用 web3监听以太坊合约, 下面会用到, 代码执行会报错, 不用管, 提出返回数据的 returnValues 中的 id
执行第 6步前需要运行监听代码, 第 6步执行后提取 id

5. 申请成为出块节点

选择执行 createProposal

参数

  • dst 需要申请添加的地址
  • details 附加信息 (选填)

对于 genesis.json 的预设地址, 默认会在系统初始化时, 自动添加到审核通过

6. 审核出块申请

选择执行 voteProposal,当前设计, 合约签名地址需要为已经通过申请的用户, 赞同总数或者拒绝总数, 哪个先超过当前正在出块人数的 1/2+1, 就执行对应的决定, 这个不合理, 应该是需要正在出块人中的1/2+1赞同才有效, 那些之前通过审核, 但不是正在出块的地址, 没有审核资格

参数

  • id 对应第 4 步提出的 id
  • auth 是否通过(true/false)

7. 取消出块资质

选择执行 setUnpassed,目前合约需要当前合约权限才能禁止掉其他人, 不合理, 后面进行合约修改, 同样需要发起申请, 通过1/2+1人通过, 才会取消对应地址的资格

8. 切换到申请者地址

选择 CONTRACT 下的 Validators-Validators.sol, 设置 At Address0x000000000000000000000000000000000000f000, 然后点击 At Address按钮, 然后点击展开 Deployed Contracts下的 VALIDATORS AT 0X000...0F000 (BLOCKCHAIN)
第 9, 10, 12步会用到

点击 ENVIRONMENT下面的选项, 选择 Injected Web3 , ACCOUNT切换到申请者地址, 保证账户有余额

9. 创建 validator地址

选择执行 createOrEditValidator, 需要先申请, 通过后才允许创建

参数

  • feeAddr 该矿工领取奖励时的接收地址 (申请者地址)
  • moniker 昵称 (选填)
  • identity 身份 (选填)
  • website 网址 (选填)
  • email 邮箱 (选填)
  • details 附加信息 (选填)

10. 抵押系统代币

VALUE 下面的第一个文本框里输入质押数量, 第二个选择单位为 Ether

选择执行 stake, 需要创建完 validator, 才能进行抵押,抵押量不小于 32 ether, 后面挖矿奖励会根据当前用户抵押量所占总比例进行分配

11. 矿工主动提交所得,进行分配

链程序出块后, 自动执行 distributeBlockReward将打包所得手续费转到合约进行池分配 (后期排查, 节点程序是否可作恶, 抽水), 代币总量到合约后, 合约根据currentValidatorSet中各自地址抵押总额, 以及各自占比进行分配记账 (validatorInfo[地址].hbIncoming)

12. 领取出块奖励

选择执行 withdrawProfits, 参数validator为矿工地址, 执行签名地址需要与创建时设置的feeAddr一致, 领取时间间隔24小时 (28800块)

参考:
Heco 编译及多节点部署: https://www.bcskill.com/index.php/archives/1017.html

标签: none

添加新评论