111201.com · 
当前位置:开奖现场直播 > 111201.com >
Algorand源码架构分析
发布时间: 2019-09-11

  本篇主要介绍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值最小的那一个,那停止时间是什么呢,就是说这个时间段的结束时间是什么呢?

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

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

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

  金色相对论之开启实物合约新篇章,明星Bakkt能否成牛市之钥,于9月9...

  暴走时评:据报道,Bakkt Warehouse于上周开始营业,客户已...

  暴走时评:Finney是世界上首款支持区块链的智能手机,很快将在孟加拉...

  暴走时评:根据美国商业和金融服务公司穆迪(Moody)的说法,区块链技...

  前言:S2F是用来对比特币价值进行预测的模型。那么,S2F是否是虚假的...

  9月5晚上八点,女侠区块链“灵魂拷问”活动第十六期在线上正式开始,并由...六合最快开奖现场直播


管家婆| 香港挂牌| 2018年香港开码结果| 48877铁算盘一肖中特| 本港台直播| 白小姐| 全年绝杀二肖| 白小姐马报资料2018| 794888.com| 白小姐心水论坛| 乖乖图库118图库| 256677.com|