内容简介:在steem区块链的网络中,节点分为两种角色,
Witness是什么
在steem区块链的网络中,节点分为两种角色, Witness
和 非Witness
。
非Witness
是steem区块链网络的普通参与者,可以从其他节点接受数据、传播数据。
Witness
则是steem区块链网络的维持者,他们通常要保持24小时在线,是steem区块链的基石,负责区块链的收集交易、打包交易和出块工作,同时还运行着steem的经济学相关的工作。正应为他们要不断的在线、工作,会消耗一定的资金来维持服务,因此,在他们出块后会得到一定的
STEEM Power
作为回报。
在steem区块链的网络中,对 Witness
进行不停的调度,在每一调度轮次中,会抽获取投票最高的前20个 Witness
节点和一个随机抽取的 Witness
节点组成一个21节点的集合(有些地方讲的是19个投票最高的节点和1个矿工节点和1个随机节点,这是比较老的算法,从第17次硬分叉后,删除了矿工节点,投票最高的节点变为20个),在洗牌后依次负责出块,每3秒钟出一个块。如果负责出块的 Witness
节点在自己负责的时间范围内没有进行出块,不影响负责下一个时间区间的 Witness
节点进行出块,但是没有及时出块的 Witness
节点不会获得报酬并且可能被投票出局。
关于选举
每个steem用户可以给30个 Witness
进行投票。会使用steemd客户端的用户,可以通过steemd客户端进行投票。其他用户还可以在 steemit.com
网站上进行投票。
另外用户还可以设置代理投票,然后将自己投票权重转义给代理人,代理人负责投票。
出块
当用户自身成为 Witness
后,在自己节点启动时,可以开启 witness_plugin
,在启动后, witness_plugin
会启动一个 定时器
来定期调用
block_production_loop
函数来判断,是否轮到自己出块。(注意:其中判断时,会调用
get_slot_time(1)
,其意义为获取下一次该出块的时间)。如果
当前时间对应的 Witness
是自己,则进行出块
。
调度
当网络中第一个节点启动后,会创建出一个 创世块
进行冷启动,此后在每一次接受一个新块后,都会调用
update_witness_schedule
进行一次调度的更新。 当当前块高度能被21整除时
,意味着,一个调度周期的结束。其会重新挑选出一批 Witness
,进行下一周期的出块。这里同时意味着,如果在一个周期内有 Witness
没能成功出块时,会有一些 Witness
在一个调度周期内能出块多次。
我认为这是一个BUG,因为在同一个周期内, Witness
之间收益是不相等的
。
当一个周期开始是, 首先按投票数进行排序,取出投票数最高的20个节点 ,然后 根据虚拟调度时间来选取一个备份节点 。选取好足够节点后,然后进行 洗牌 。
同时再调度的过程中,还会计算一些基本数据,比如:
-
选中的
Witness
中, 主流版本 是什么,因为steem是通过硬分叉进程升级的,不同版本的各种逻辑会有不同,当某些策略可能需要等到网络中的多数Witness
都升级到某个版本后才能开始生效,因此在每一轮调度中,都会刷新当前的主流版本。 -
更新一些与
Witness
相关的 经济学数据
总结
可以看出与 Witness
相关逻辑都比较简单,加起来一共可能只有几百行代码而已,整体上跟最前面算法描述一致,没有特别多的细节需要注意。
注意 :在调度与出块之间存在数据竞态,出块时可能访问的已经释放的内存,从而崩溃。
附录
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 以太坊源码分析(36)ethdb源码分析
- [源码分析] kubelet源码分析(一)之 NewKubeletCommand
- libmodbus源码分析(3)从机(服务端)功能源码分析
- [源码分析] nfs-client-provisioner源码分析
- [源码分析] kubelet源码分析(三)之 Pod的创建
- Spring事务源码分析专题(一)JdbcTemplate使用及源码分析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
第二曲线:跨越“S型曲线”的二次增长
[英]查尔斯·汉迪(Charles Handy) / 苗青 / 机械工业出版社 / 2017-6 / 49.00
S型曲线是每个组织和企业在预测未来时一定会参考的工具,一切事物的发展都逃不开S型曲线(“第一曲线”)。 然而,从公司组织、企业治理、市场的变化,到个人职业发展、社会人际关系以及未来的教育与社会价值,多维度地探讨这个世界需要重新以不同的角度来思考问题,不能够总是停留在“第一曲线”的世界。 如果组织和企业能在第一曲线到达巅峰之前,找到带领企业二次腾飞的“第二曲线”,并且第二曲线必须在第一曲......一起来看看 《第二曲线:跨越“S型曲线”的二次增长》 这本书的介绍吧!