关于共识节点的选取规则,请大家多提意见

关于节点出块几率变化的说明

大家好

自Alaya0.15.0版本升级成功后,部分用户反馈不同权重(质押+委托总量)的节点被选中为共识节点的概率和之前的版本差异比较大,在这里跟大家做个简要的说明, 欢迎大家从各自角度反馈不同的意见。

新版本做了什么调整

细心的用户会发现,相对于0.14.0版本,在本次升级后,节点权重低的节点不容易被选中做为出块节点了,而权重高的节点每次被选中的概率相比以前却大大增加。

之所以出现上面的现象是因为底层0.15.0版本对涉及到选取节点算法的一个参数p的取值方式做了调整,这里先简单介绍一下参数p的作用:

  • p的取值越大,则系统越公平,这里说的公平体现在节点被选中出块的概率跟权重占比的差异大
  • p的取值越小,则系统去中心化程度越高,系统越安全,也就意味着权重低的节点被选中的概率相应提高,避免出块节点过于集中,也鼓励更多节点参与共识

Alaya自上线以来p值的变化曲线如下:
p值与版本

如果您对p值的具体含义和算法实现感兴趣,可以参考“二项分布”和“选取共识节点”章节

调整p值计算方法的原因

在alaya网络中,p值是动态计算得出的,因此是时刻变化的,从0.13.2版本到0.14.0版本之间,底层并未对p值的计算方式进行调整,但由上图可以明显看出p值在逐渐减小。

为了防止p值越来越小,0.15.0版本才对p值的计算方法做了调整,目的是防止出现权重高的节点被选中出块的概率过低,出现明显的不公平。

至于具体的调整方式,就需要详细说明一下Alaya网络选举共识节点的规则了。

共识节点的选取规则

目标

Alaya选取共识节点有2个目标:

  1. 公平性:按权益分配出块权,高权重的节点获得多的出块权,低权重的节点获得相对更低的出块权
  2. 去中心化:抑制权力集中,低权重的节点也能参与共识,鼓励更多节点加入,增加网络的安全性

目前Alaya共识上的优化主要就是对以上两点目标做权衡。

Alaya底层选取共识节点涉及两个算法:可验证随机函数(VRF)算法和二项分布,这里简单说明一下两个算法的作用,详细算法请参考技术说明

VRF

简单来说可验证随机函数VRF算法要解决的是选取节点的"随机性"问题,在每次需要选举新的共识节点时,每个节点通过VRF产生一个完全随机的数字,用这个数字来参与选取共识节点。

二项分布

二项分布函数算法能解决的是”按权益分配选票“的问题,如果只有随机性,那么每个节点都有相同的概率被选中出块,这显然打消了大家持有权益的积极性,Alaya网络属于PoS共识,高权重(质押+委托总量)的节点理应比低权重的节点有更多的记账权。

选取共识节点

设单次从总票数N中选取出一张选票的概率为p,为了每次都能从验证节点中选举出指定数量的共识节点,令每个节点做n次独立的次伯努利试验以选出D张选票(期望),则每个节点需要进行试验的次数n是符合二项分布的。

简单点说,对于选取固定的期望值D,权重大的节点(票多)将比权重小的节点机会多(为了抑制权力过于集中,对节点的权重开了根号)

为保证网络稳定性,Alaya每次选取最少8个节点替换原共识节点中的节点,入选新节点的规则为所有剩余76个验证人分别使用VRF算法计算出得出一个(0,1)范围内的随机数y,在各自节点对应的累积二项分布曲线中根据y对应的x值进行排序,取前8个节点进入下一个共识论参与共识。

累积二项分布曲线

本次优化以及原因

在Alaya中,p=D/N,在0.13.2版本中期望值D为固定值200,但由于总权重N在不断增大,导致p值逐渐减小,意味着低权重节点被选中的概率越来越高,高权重的节点被选中的概率越来越低。

由于之前的版本平衡点在逐渐向去中心化程度方向倾斜,本次升级对D的取值使用了按阶梯变化取值:

总权重 期望
1000000 - 10000000 3000
10000000 - 100000000 3000
100000000 - 1000000000 6000
1000000000 - 10000000000 10000
10000000000 - 100000000000 60000

当前网络中质押总权重大约为550万,因此D当前取值为3000。

从运行的结果看,目前选择的p值偏大,公平性有余,去中心化不足,体现在权重高的节点被选中的概率更高,权重低的节点被选择的概率偏低。

例如:经过一定数量的共识轮,有10万权重的节点A被选中的次数/有1万权重的节点B > 10

继续优化

如何在公平性和去中心化程度之间获得较好的平衡,的确是个两难的事情,欢迎大家一起来献计献策,对平衡策略提出宝贵意见和建议,让Alaya网络更加繁荣。接下来我们也会做更多更细致的测试和验证,并将测试结果提供给社区参考和讨论。

1 Like

【简单点说,对于选取固定的期望值D,权重大的节点(票多)将比权重小的节点机会多(为了抑制权力过于集中,对节点的权重开了根号)】,这里开根号改成取对数,会更好点?

二项分布和选取共识节点
这两个链接是不是没有添加?

感谢建议,之前也测过几组比如1/3次幂,1/5次幂的数据,最后觉得1/2是比较合适的,后续我们可以把现在各个节点的权重数据的不同指数计算出来供大家参考

D的值是否能设计成一段周期后进行动态纠错调整而不是固定值,就像btc难度与算力的关系那样。

假设我们的目标是,有10万权重的节点A被选中的次数/有1万权重的节点B 趋近于10。那可以设置一个区间【8,12】,当比重偏离这个区间的时候就动态调整D值,使得比重在一段周期内回到这个区间。由于总权重也是不断变化的,在加上选取验证人的随机性,那么系统就会一段周期内显得更公平,又会在另一段周期内更去中心化。也挺有趣味性的。

1 Like

看完了整体的原理,大体明白了这个现象产生的原因,确实还是在于D的取值使用了按阶梯变化取值的方式。
即p值在此次版本的升级中增大了15倍,导致产生剧烈的变化。
如果有一个合理的p值,我们是否可以固定p值,不是固定D值

总权重100万的时候,D=3000;
总权重1亿的时候,D=3000。
所以总权重都相差一百倍了,
D还是一个固定值没有变化过,
就并没有体现出阶梯变化的作用啊……

我说一下我的意见,有不对的地方大家指正。

首先,最重要一点,我不认为文章中对公平性的定义是正确的,这个错误的定义导致了后面所有结论都站不住脚。公平我不认为是高权重获得更多的出块权,而应该是根据权重有相应比例的出块权。否则根据上文的定义,那么就是默认马太效应是公平,认为强者通吃是公平,我认为这是典型的资本主义强盗逻辑

打个比方,假设只有两个人,节点1的权重是1,节点2的权重是2,我认为的公平是节点2的出块比例是节点的出块比例的2倍。无论4倍还是出块比例相同都是不公平。

所以,上面说的公平性有余是十分错误的。只能说这一次改变对公平性是否有增加不清楚(因为没有更具体的数据),但对去中心化的影响是消极的。

另外,我再谈一点区块链项目和去中心化的一点想法。我很早就开始了解eth 2.0的相关想法。Casper的核心想法是如果不让强者更强,让弱者也有参与到共识的机会。我认为多数项目是更注重去中心化的

为什么这样呢,也不是完全没有道理。其实有没有发现在社会治理中,关键的并不是如何保障强者的权利,而是如何保障弱者的权利。因为强者总有方法利用现有规则,攫取利益的方法。从这种意义上讲,社会规则,诸如法律、社会道德主要目的都是来保护弱者的。因为强者自有保护其利益的方法。为了支持我的这种想法,我再举个例子:如果法律认定可以随意杀人,强者有没有办法保护自己?肯定是有的,可以花钱雇人,可以买装备等等。但弱者呢?只有被强者鱼肉的份。

为什么说上面的话呢?我认为一种稳定的结果里的规则必然是保护弱者的,这样才能形成一个底盘很大的三角形,拥有较多的弱者作为基础,强者也能爬的更高,形成更稳定的结构。如果形成一个像避雷针一样的强者非常强,弱者很少的结构我认为是不稳定的。

如果仔细的阅读我上面所说的文字,我的观点是怎么样的,大家也清楚了吧。但自己应该算一个弱者(节点排名常年在80名之后),所以难免会屁股决定脑袋,我一说,大家也一看。

2 Likes

感谢分享,很认同您的观点,但可能有一点点小的误解,上面所说的公平性和您提的“根据权重有相应比例的出块权”其实不矛盾, 我们同样认为当选比例与权重占比在一定范围内应该趋近于相等但又不能相等,实际上为了避免权益集中,我们在计算权重时使用了开平方根(类似于二次方投票)


当前的难点在于如果按总权重阶梯取值,则随着总权重的不断增大会出现初期权力集中(p>1)后期不公平(p<1)的情况

感谢反馈
由于在PoS共识中每一个Token代表一个”权益“ (票)
从总量的”票“中选出一定数量的”代表票“是p的含义,但无论票的总量还是节点持有票的数量都是动态变化的,我们实际上期望的是节点持票比重保持不变的情况下累积二项分布曲线保持不变,但由上面说明可知,一条曲线由n(节点权重)和p两个参数确定F(n,p) 如果只固定p值,则随着后续n值不断增大曲线在不断发生改变,实际效果也不会是我们所期望的

非常好的提议 :100:,欢迎大家就@jiucai的观点发表看法

说一下对0.15版本的看法吧

1.前几个版本其实对头部节点很不友好的,包括节点激励政策也是。简单说就是排前面的一个节点6万币的质押的收益是远远小于2个3万币质押节点的收益的。1个头部节点比2个尾部节点出块数少就不说了,每个周期他们还多一份质押奖励,质押奖励相当于100个出块奖励,再加上所有节点激励政策没拉开差距,本质就是在吃大锅饭。那排前面的节点还不如一个节点分成两个,3个运营赚得多。那以后的结果就是排第一和排第101的质押量差距肯定就越来越少,那多出来的币要去哪里,当然是砸给市场让韭菜接盘了。所以新一期节点的激励政策我是很支持的,送币也一期比一期少,明显就是要加剧节点之间的竞争,告别大锅饭时代,对之前搞投机撸多节点的也起到一定的限制作用。

2.说到公平问题。那我这个曾经买币被套经过不断抄底最终解套的用户那就要吐槽一下了。前期送币给节点当启动资金公不公平?锁仓的币能委托公不公平?多开小号多申请撸节点的公不公平?我觉得官方对节点已经很好了,就差帮节点把服务器钱给出了。为了更公平,那我也提议质押100个币就能当节点,备选节点扩充到1001个,每个备选节点都能获得质押奖励和项目方的激励。这显然节点们和官方是不会同意的。

3.回到问题本身,官方这个版本的改动初衷是合理的,但改得出问题了,偏向另一个极端了。我的建议上一个帖子就已经说了,但不知道能不能建立一个合理的模型出来。

4.有人问我那普通用户怎么办?玩过游戏没,玩过LoL没?正所谓一代版本一代神,代代版本玩盖伦。充钱买币选择高收益率的节点委托就完事了。

1 Like

感谢支持和理解,相信有了您和大家的参与会让alaya更好

不知我的理解对不对:
1:权重=抵押+委托。
2:出块的概率=权重开根号。
如果满足这两点,是不是就相对公平,再在的规则是这样的吧?

1 Like

其实我觉得把抵押和委托放在一起算权重是不大合理的。
抵押的数量解锁需要的时间长,而且需要跑服务器,所以抵押应该比委托对网络的贡献更大。这样算来一个6W的节点不如两个3W的节点是应该的。一个6W的节点有5W是流动资金,只需要一台服务器。而两个3W的节点只有4W是流动资金,需要两台服务器。

我也觉得这样比较好,让程序自动调整,但每次步子不能太大,一点一点纠正。
再就是一点,我感觉权重的计算方法也要调整,根据对网络的贡献大小来算,具体一点就是抵押部分和委托部分占不同的权重。

质押本身每个周期都有质押奖励了,服务器如果是云服务器的话,相比出块的奖励和官方的激励应该占很少一部分吧。

现阶段节点有奖励是节点得到的非常多。但现在设计的规则也应该考虑到后期节点没有官方激励时的情况。

对于阶梯的D值,我们可以考虑更为平滑的曲线也不是阶梯么,每达到另外的一个阶段时候。变化会非常的大

嗯嗯,满足这2点相对合理,但不算是最公平,还是要权衡