Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

提议:引入公信节点缺块率惩罚机制 #7

Open
secp256 opened this issue Dec 28, 2018 · 9 comments
Open

提议:引入公信节点缺块率惩罚机制 #7

secp256 opened this issue Dec 28, 2018 · 9 comments

Comments

@secp256
Copy link
Contributor

secp256 commented Dec 28, 2018

为了增强GXChain网络的容错性,和保障整个网络的稳定, 对于缺块率高的公信节点,提议销毁一定数量抵押资产。引入惩罚机制,用于解决入选的公信节点长时间不出块的情况,由系统自动除名故障的公信节点,备选节点补上。

提议实施方案:

  1. 增加全局参数(理事会可以通过投票,动态调整):
max_missed_rate: 最大的缺块率,如果公信节点缺块率超过max_missed_rate,将被惩罚。 建议设置为80%

reserve_num: 惩罚公信节点时,销毁的资产初始数量(从节点抵押的保证金中扣除)。建议初始设置为5 GXC

reserve_scale:  惩罚的数量呈线性增长,reserve_scale为倍数,如果第一轮被销毁 5 GXC,第二轮会乘以reserve_scale。 建议初始设置为1.25倍

  1. 系统每个维护周期(目前为1小时), 统计当前入选的21个公信节点的缺块率,对于超过max_missed_rate的节点,销毁其抵押资产的reserve_num GXC

  2. reserve_num 由初始值,按线性增长。每次递增为原来的1.5倍。如果上一轮被销毁 5GXC,则下一轮的惩罚将是 5 * 1.25 = 6.25 GXC, 下下轮为 6.25 * 1.25 = 7.8125 GXC。

  3. 目前公信节点抵押资产为1万 GXC,如果节点持续长时间缺块,系统将持续销毁其抵押资产。 抵押资产为0时,节点将被系统除名下线,被排在21名之外。以当前抵押的1万GXC为例,每小时销毁的GXC按线性增长,如果节点在持续缺块的12小时内未及时响应并排除故障,将损失约212GXC的抵押; 如果在24小时内未响应,将损失约3368 GXC; 若29小时内未响应,则将被除名。如果节点处理未抵押状态,将在持续缺块的1小时内被除名。

  4. 被除名下线的节点,不能参与出块。如果重新加入竞选,可以重新抵押。

  5. 节点被除名后,由后续的备选节点按得票排名补上,参与下一轮的出块。

  6. 发生整个网络运行不稳定时(1/3以上节点离线,或者因软件缺陷导致全网停止出块),如果有至少1/3以上节点的缺块率都在max_missed_rate以上,自动关闭惩罚机制。待网络恢复正常后,惩罚机制自动开启。

关于节点缺块率的计算:
GXChain目前每小时出块1197个,21个节点,平均每个节点出块57个。以最高缺块率80%来算,若节点在1小时内缺块数量超过45个,则会被系统惩罚。

@kilmas
Copy link

kilmas commented Dec 29, 2018

赞成这个提议,另加:销毁的Gxc可以补贴给备用节点。

@secp256
Copy link
Contributor Author

secp256 commented Jan 3, 2019

不销毁抵押的保证金的方案: 如果公信节点1小时内缺块率超过max_missed_rate,强制离线。

@cnjsstong
Copy link

基本赞成,但是除名节点的前提是有足够的备选节点一直在 standby,所以个人认为备选节点的激励机制应该和这个方案同步考虑和实施

@cnjsstong
Copy link

另外,建议 max_missed_rate 严格一些。因为按照目前实际统计结果看,除非极端情况出现,缺块比例并不高。比如98%,或者95%?

@secp256
Copy link
Contributor Author

secp256 commented Jan 4, 2019

@cnjsstong
关于备选节点的激励,已经有 issue了,可以在这里 讨论

节点正常运行的情况下,应该在1%以下。如果 max_missed_rate 严格一些的话,我的理解是调整到80%以下,比如50% ? 而不是调整到95%或者更高。 如果调整到95%,以目前21个节点每小时共出块1197个来算,平均单个节点每小时产块57个,如果能够产生3个块以上,缺块率就低于95%了,得不到惩罚。

@chenluyong
Copy link
Contributor

赞成这个提议,另加:销毁的Gxc可以补贴给备用节点。

并不赞成将销毁的GXC补贴给备用节点,因为这看起来毫无根据。

@cnjsstong
Copy link

cnjsstong commented Mar 22, 2019

@cnjsstong
关于备选节点的激励,已经有 issue了,可以在这里 讨论

节点正常运行的情况下,应该在1%以下。如果 max_missed_rate 严格一些的话,我的理解是调整到80%以下,比如50% ? 而不是调整到95%或者更高。 如果调整到95%,以目前21个节点每小时共出块1197个来算,平均单个节点每小时产块57个,如果能够产生3个块以上,缺块率就低于95%了,得不到惩罚。

不好意思说反了,我想说的是 max_missed_rate 应该设置为 2% 或者 5% 的样子(对应正常块比例 98% 或 95%)。

即使考虑到整个网络出现波动的情况,也建议 max_missed_rate 设在比如 20% 或更小的较低的数值。因为对正常运作的节点来说,即使短时间内出现一些缺块,也不会连续数小时都是这样的情况。

@cnjsstong
Copy link

另外建议reserve_scale设置为更大的数值,否则无法起到督促节点及时处理异常情况。

image

@cnjsstong
Copy link

赞成这个提议,另加:销毁的Gxc可以补贴给备用节点。

并不赞成将销毁的GXC补贴给备用节点,因为这看起来毫无根据。

我觉得这并不是毫无依据的。当选节点未能尽职履行自己的职责,需要备用节点来临时顶替,以维持网络的正常运作。在这样的情况下,将对出现问题的当选节点的惩罚,转而奖励给备用节点,还是比较顺理成章的。

目前公信节点的收益,虽然比不上 EOS 等超高的那一档,但还算是可以的。这个情况下,对当选节点要求高一些,我觉得是比较合理的。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants