您现在的位置:主页 > 财神论坛54123com >

Algorand源码架构分析

文章来源:本站原创 发布时间:2019-09-09 点击数:

  本篇主要介绍Algorand源码中关于agreement的模块结构及业务逻辑架构,也是源码中比较难以理解的地方,其它诸如节点、区块、密码、P2P网络的结构与其它区块链项目都是大同小异,很容易理解,这里就不再赘述。

  Node模块中还提供了各种pool,这些pool用于对网络中的proposal与vote进行验证时的任务队列。

  协议是Algorand最重要的一个模块,在其中用service做一个总的任务调试,状态机负责对投票进行统计,demux负责具体action的执行,从网络上收集proposal与vote,是Algorand的二元拜占庭(BBA)实现的部分。

  模块A做完自己的具体工作,会给externalEvent通道写入event,模块B从这些通道读数据,进行对应的统计处理;

  模块B正好反过来,是input的消费者,曾道人玄机解码,是output与ready的生产者。

  这里的代码主要是对vote与proposal进行统计,一个区块共识周期内的两轮多步投票的统计都是在这里完成的,分为5层状态机,每层只负责处理与自己有关的,上层处理不了的,移交给下层状态机,下层状态机将处理结果返回给上层状态机,最终发出对应的action。

  Player即playmachine实现了整个状态机的最顶层功能,负责记录当前哪个区块第几个阶段第几步的共识环节,以及超时等基础信息。

  voteTracker是step层的主类,用来存储vote,是最初发出vote超过阈值的地方。

  在这一模块中定义有两个类,一个是router接口,一个是routerHandle结构体。前者用于真正的event处理,而后者只是为了构造一个新的结构,加入写日志功能及标明状态机类型,起辅助功能。routerHandle的dispatch最终其实是转到了对应的router的dispatch中去执行的。

  状态机针对vote与proposal进行统计后,会发出一系统的action,这些都由各个对应的类去处理。

  在actions.go里会看到不同种类的action,我们只要在对应的类里去查就知道如何处理各个action,action就是对应我们实际要处理的各个动作。

  在demux.go文件里,next函数负责从消息通道里获取消息,转化成对应的事件传给状态机

  MakeProposals发出一个proposal,其实就是提议一个区块,同时自己对这个区块进行投票。MakeVotes就是对proposal直接进行投票。

  我们知道是对credential,也就是凭证做排序,最小的就是领导者。这些其实发生在每一个节点上,在每一个节点上对所有voteVerified的事件做处理,比较大小得到。

  这里的freezer就是proposalSeeker的一个对象,这个类负责记录credential值最小的那一个,那停止时间是什么呢,0422金多宝开奖口服NMN可有效补偿年龄增长,就是说这个时间段的结束时间是什么呢?

  这样freeze就对leader完成了选定,我们再查什么时候发出这个事件。这个是由超时函数来控制的,在主状态机里,timeout事件,当step是soft步骤时,超时,就进入cert阶段,这时就得终止这个credential最小值的选择了。

  本篇并未对Algorand的每个细节知识进行深入的阐述,而是从代码的大框架上做一个简单说明,希望可以帮助大家理清数据流的走向,把握源码架构。

  声明:链世界登载此文仅出于分享区块链知识,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。此文如侵犯到您的合法权益,请联系我们

  金色周报 区块链、数字货币信息推荐阅读《中国央行:将于9月16日下调金...

  2017年末,伴随着加密货币币价的高光时刻,区块链游戏《加密猫》火了,...

  近年来区块链技术的研究与应用以爆发的态势在增长,其应用范围已经不限于比...

  近期推出Hardcore栏目,为读者提供流行项目介绍或者深度解读。本期...

  前言:原子交换是不同区块链上的代币实现点对点交易的方法。它的好处就是两...

  1. 比特币ETF为何如此重要?比特币ETF 被市场寄予厚望,普遍认为...

红姐心水高手论坛| 11149香港马会| 0820香港九龙| 手机现场开奖记录| 彩霸王| 小鱼儿沦坛| 767cc香港挂牌| 一肖中特| 玄机图| 免费一肖中特| 黄大仙预测| 香港苹果报| 白小姐中特| 六开彩开奖| 白小姐中特网开奖记录|