王中王开奖记录,香港马会开奖结果直播,456999神算子开奖结果,www.k1235.com,www.zl345345.com

456999神算子开奖结果

Algorand源码架构分析

发布日期:2019-10-09 06:39   来源:未知   阅读:

  本篇主要介绍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的每个细节知识进行深入的阐述,而是从代码的大框架上做一个简单说明,希望可以帮助大家理清数据流的走向,把握源码架构。

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

  从2009年1月3日,比特币的第一个区块诞生到如今,已经过去了整整10...

  世界经济是一个复杂的系统,在过去的一个世纪中经历了许多不同的发展阶段。...

  9月2日,BITKER交易所的用户群里传来一条消息:BITKER交易所...

  比特币9月6日讯 原央行支付结算司副司长穆长春已经正式担任央行数字货币...

  我们通常认为比特币站在银行业的对立面,这个新兴行业要做的就是消除并颠覆...

返回