EON 1.4 – 版本变更和更新说明
概述
本文档将概述 1.4 更新中引入的各种变化。它将提供您应该了解的领域的列表,以及如何使用新功能更新您的锻造器的说明。
在 1.4 版中,我们通过自动在forger节点托管提供商和将 ZEN 质押到forger节点的 ZEN 持有者之间分配奖励,在协议层面上提高了质押系统的可用性。forger节点现在可以指定一个智能合约,允许委托人领取奖励。每个forger节点在首次注册时都会声明将forger节点收入的百分比重定向到智能合约。
Horizen 提供了一个工厂合约,可用于向forger节点分配奖励,尽管可以使用任何合约。提供的智能合约将根据委托人的质押金额按比例向委托人分配奖励。
1.4 版还为forger引入了最低质押要求(10 ZEN),以实现最佳安全实践。
需要注意的是,现有的forger节点无需进行任何更改,100% 的forger收入将继续像现在一样发送到forger指定的奖励地址。否则,您可以指定一个智能合约来分配奖励(本文档中提供了说明)。
EON 1.4 Gobi 测试网硬分叉将于 6 月 10 日星期一,即纪元 2274(UTC 时间上午 9:21)进行。
GOBI 候选发布标签:https://github.com/HorizenOfficial/eon/releases/tag/1.4.0-RC1
Docker Compose 更新:https://github.com/HorizenOfficial/compose-evm-simplified/releases/tag/1.4.0-RC1
股权管理的变化
请查看以下信息以了解此更新中发生的变化。这对于运行 Forger 节点的用户来说很重要,因为某些功能已发生更改。
将推出一个新的原生智能合约来管理与权益相关的操作。该合约位于地址0x000000000000000000000222222222222222222333。其界面的完整文档可在此处找到。
在地址 0x0000000000000000000000222222222222222222222 公开的旧智能合约将被弃用,并且在 1.4 硬分叉之后调用其所有方法都会出错。
下表总结了最重要的差异。
详细信息:更改之前 <> 之后
操作 |
EON < 1.4 |
EON 1.4 |
宣布新的forger |
不需要(只需使用标准质押操作创建质押即可) |
新端点 / transaction/registerForger最少需要 10 ZEN |
添加股权(通过智能合约调用) |
旧质押合约上的委托方法。质押所有者(可以取消质押的地址)可以是任何地址 |
新权益合约上的委托方法(权益所有者将始终是交易发送者) |
添加权益(通过 http 端点) |
无法使用 |
|
提取股权(通过智能合约调用) |
撤销旧的股权合同 需要 StakeId 和额外签名 无法部分提款 |
退出新的股权合同 无需 stakeId 也无需额外签名 可以部分提款 |
提取质押资金(通过 http 端点) |
无法使用 |
|
属于委托人地址的质押 |
旧质押合约上的getPagedForgersStakesByUser (返回列表中每个 stakeId 有 1 个元素) |
新的权益合约上的getPagedForgersStakesByDelegator (返回列表中每个forger有 1 个元素,其总赌注为) |
特定forger拥有或委托的股份 |
不可用(可以使用getPagedForgersStakes检索整个列表,然后稍后进行过滤) |
新的质押合约上的getPagedForgersStakesByForger |
质押总额 |
旧质押合约上的 stakeOf : 仅返回当前值,且仅由委托人返回 |
新股权合约的股权总额。 可以查询前几个时期的历史数据,并按委托人和/或forger进行过滤 |
彩票 |
forger将参与抽奖,金额不限 |
仅当拥有+委托权益> = 10 ZEN 时,forger才会参与抽奖 |
注册forger名单 |
无法使用 |
getPagedForgers在新质押合约上 |
将Factory合约部署到 EON 进行分发
Horizen 提供了智能合约的默认实现,用于处理forger的委托人之间的奖励重新分配。
要部署的工厂合约是DelegatedStakingFactory.sol。
要执行部署,存储库中已有一个脚本。应执行以下步骤:
- 克隆项目。
- 确保DelegatedStaking合约使用了ForgerStakesV2原生智能合约的正确硬编码地址。
- 运行npm run install来安装项目依赖项——需要 Node.JS 和 NPM。
- 复制/重命名.env文件中的.env.example文件,并使用应部署 Factory 智能合约的钱包的私钥填充 PRIVATE_KEY 参数。无需其他参数。
- 运行命令npx hardhat run ./scripts/deployFactory.ts –network <network_name>将 <network_name> 替换为在hardhat.config.ts文件中定义的链上将部署合约的链的名称。
锻造者注册并设置奖励分配智能合约
以下说明是设置新锻造节点所需的所有步骤。如果您已经有一个节点,则只需(可选)按照步骤 2分配 EON 智能合约以分配奖励。
第一步:forger登记
每个forger现在必须先注册,然后才能参与抽奖并获得质押委托。与实际流程相比,这是一个额外的步骤(到目前为止,这足以创建初始质押)。
可以通过调用 forger 节点上的新 http 端点来执行注册:
该方法将接受以下参数:
- 签署公钥
- 公共密钥
- 奖励分享
- 智能合约地址
- 质押金额
(更多信息请参见上面的链接)
请注意,rewardShare和smartContractAddress一旦设置就被视为不可变的,以后不能更改 (要使用不同的值,forger必须注册新密钥,并要求委托人取消质押+质押到新密钥)。
步骤 2:更新 EON 1.4 之前已经存在的forger
EON 1.4 之前已经存在的forger不需要步骤 1 中描述的明确注册:他们将被自动迁移和注册。
但请注意,如果他们拥有的总股份(自有 + 委托)<10 ZEN,则在 1.4 硬分叉激活后他们将无法再伪造任何区块,并且您需要将股份增加到 10 ZEN 或更多。
所有迁移的forger都会有字段 rewardShare = 0 和 smartContractAddress = none,这意味着他们不会将任何百分比的奖励重定向到额外的智能合约(旧的 EON 版本中也会发生同样的行为)。
在 http 端点中可以找到一种更新这些字段的方法:
该方法将接受以下参数:
- 签署公钥
- 公共密钥
- 奖励分享
- 智能合约地址
(更多信息请参见上面的链接)
请注意,此方法只能调用一次,并且仅当它们的值等于:(rewardShare= 0,smartContractAddress= null)时才调用。换句话说, rewardShare和smartContractAddress一旦设置,就被视为不可变的,无法更改(要使用不同的值,forger必须注册新密钥,并要求委托人取消质押并质押到新密钥)。
重要提示:出于安全原因,updateForger 操作只能从硬分叉激活后的两个共识时期开始(25 小时)才可行。
步骤 3:收集质押
与实际的智能合约类似,新的原生智能合约将公开将股权委托给forger并撤回股权的方法。
委托(bytes32 signPubKey,bytes32 vrf1,bytes1 vrf2 )
如果forger之前没有注册过,该方法将会失败(记住,硬分叉激活之前存在的forger将默认被视为已注册)。
提取(bytes32 signPubKey,bytes32 vrf1,bytes1 vrf2,uint256金额)
权益的所有者必须是发送 tx 的人。
必须有足够的股份,但现在也可以部分撤回股份。
未抵押的金额将被退回至发送者余额。
请注意,新系统简化了质押处理,因为:
- 不再有“stakeId”的概念。现在,stake 只是与特定forger和委托人地址相关联的金额,可以通过多次委托和提现操作随时间增加或减少。
- 调用委托和提取方法不需要除了标准的类似以太坊的交易签名之外的其他签名:这使得它们也可以从 Ledger 等硬件钱包轻松调用。
步骤4:奖励计算
在每个提款时期结束时,将应用相同的算法来奖励forger,但如果forger指定的 rewardShare > 0,则先前发送到forger地址的金额将分成两部分。
还实施了以下附加变更:
- 端点 /block/getFeePayments
- RPC 端点 zen_getFeePayments
他们的结果将保持与现在相同的格式,但也将包括支付给智能合约地址的奖励(如果定义)。
我们还将详细说明来自主链重新分配的金额:为了兼容,它们将进入附加字段valueFromMainchain和valueFromFees :
第五步:领取委托人奖励
指向智能合约的金额必须通过合约在委托人之间重新分配。分配是合约实施的责任。Horizen 的合约根据质押金额和质押时期提供公平分配。Horizen 提供的默认智能合约实施公开了一种声明方法来执行此操作:
claimReward (地址所有者)
请注意,任何人都可以代表所有者调用声明方法(对交易的发送者没有任何限制)。
任何forger都可以自由部署自己的智能合约。请阅读原生智能合约文档,了解可在智能合约逻辑中使用的有用方法。
主链奖励——新规则
在单个提款时期内,从特殊地址 0x00000000000000000000033333333333333333333 重新分配给forger的最大 ZEN 数量现在限制为以下公式表示的最大值:
-
MAX_VALUE_REDISTRIBUTED = 总和 [提现时期包含的每个主链区块引用的主链区块奖励 Coinbase 的 10%]
-
超出限额的资金将保留在地址余额中,并将在接下来的时期重新分配。
例如:当前主链区块奖励:6.25 ZEN提现周期内主链区块引用数量:100 MAX_VALUE_REDISTRIBUTED = 10%(6.25) * 100 = 62.5 ZEN
发行说明
有关 EON 1.4 中引入的其他更改的其他信息,请参阅 EON 1.4 和 SDK 的发行说明: