PolkaWorld
波卡第一中文社区,带你寻找Web3.0时代新机遇!
本文作者为Jenner@?PatractLabs?。
这篇文章基于Polkadot的6be14014提交,目的是介绍Polkadot在平行链角度上的系统架构。
角色
架构图
链
Relaychain:中继链,负责平台安全性。Parachain:平行链,拥有自己独立的状态与业务逻辑,共享中继链提供的安全性。节点
validator:验证人,负责中继链的出块,同时验证来自收集者的证明,与其他验证人进行共识投票。中继链全节点,需要抵押DOT。collator:收集者,为验证人收集平行链的交易和状态转移证明。平行链全节点,同时内嵌中继链全节点服务,不一定需要抵押DOT,可以由平行链自行激励。注意,平行线程的collator需要持有DOT,以便参与出块资格的拍卖。fishermen:渔民,监控验证人和收集者,检查无效的候选收据。collator或者validator都可以作为fishermen,需要抵押DOT。
平行链节点结构
平行链节点主要有以下两点变动。
OKB突破6.4美元关口 日内涨幅为12.67%:OKEx数据显示,OKB短线上涨,突破6.4美元关口,现报6.401美元,日内涨幅达到12.67%,行情波动较大,请做好风险控制。[2020/9/14]
共识
collator在平行链上的角色类似于以往的独立链上的validator。但是collator只提供候选区块,然后交由中继链上的validator进行共识。所以,平行链不再需要自己的共识机制。当然,可以保留对collator的选择机制。
双服务
平行链节点与以往单链节点的不同在于:需要启动一个中继链全节点服务。内嵌的中继链全节点服务中,包含了overseer与子系统服务,并且将overseer_handle共享给collator,在collator_protocol上注册为?collator_side。因此,collator能与validator通过overseer进行消息交互,例如传递候选区块相关消息。另外,平行链全节点还需要通过内嵌的中继链节点来“跟随”中继链的出块。所谓“跟随”,指的是平行链全节点的最佳区块为中继链上最佳区块包含的相应平行链区块,终结区块亦如此。
中继链节点结构
relay_chain
当前DeFi借贷总量为12.05亿美元:金色财经报道,据DeBank数据显示,当前DeFi借贷总量约为12.05亿美元。其中,Compound平台约9.68亿美元,占总体份额80.35%,Maker平台约1.86亿美元,占总体份额15.46%,Aave平台约2931万美元,占总体份额2.43%。注:DeFi其实质是基于一套开放的账户体系,保证全球任何人都可以无门槛使用的一系列金融服务。这些金融服务主要由一些开源的智能合约来提供,整个服务的代码和账目都可以在区块链上进行公开审计。[2020/7/13]
中继链上除了必须的基础组件外,比较重要的就是overseer与子系统。
overseer
overseer
Overseer主要有以下功能:
启动和关闭一系列子系统作为子系统之间的消息总线监听外部事件,触发子系统相应任务消息协议
overseer向子系统发送两种类型的消息:Communication,?Signal。
Communication:子系统之间交互的消息被封装在Communication类型中,根据被封装的消息类型传递到指定的子系统。例如子系统A向子系统B发送一个消息M:1.A向overseer发送AllMessages::B{M};2.overseer收到后,向B发送FromOverseer::Communication{M}。Signal:系统消息,例如块导入、块终结、关闭子系统,被封装在Signal中。系统消息会被广播到所有子系统。子系统
动态 | Stellar发布Stellar Core v12.2.0:Stellar官方今日宣布,Stellar已发布Stellar Core v12.2.0版本。新版本将有效改善系统稳定性,并引入了一种新的元格式,它将在以后的默认情况下启用,以便在旧的分类账中添加丢失的数据。[2019/11/27]
目前设计上共有18个子系统,其中3个未完全实现。
Collator相关
collation_generation_subsystem:collator在块更新时生成collationcollator_protocol_subsystem:collation的请求与回应,根据validator/collator的角色执行对应的任务候选区块共识
candidate_selection_subsystem:触发对collation的请求,收到collation后请求投票candidate_backing_subsystem:对collation投票,签署statementstatement_distribution_subsystem:广播statementpov_distribution_subsystem:广播PoVapporoval_subsystems(TODO):在finalize前对候选区块的再次检查可用性相关
波卡周报:Polkadot 0.9.2已发布 等待平行链Shell升级为Statemine:据波卡周报,Polkadot 0.9.2 已发布,等待平行链Shell升级为Statemine。1.Polkadot 国库今天刚刚销毁掉了147,042个DOT,目前还有1461万个DOT等待大家去申请。2.Shell 平行链正在 Kusama 网络上运行。3.Kusama 第 108 号公投(强制恢复一个账户)没有被通过。4.Encounter 是一个独特的身份系统,正在申请成为 Kusama 的公益链。5.Kusama 理事会已经通过并执行了 Motion 295,它消除了由于 CPU 峰值导致不允许在 9010 Runtime 升级期间发送 imOnline 消息而导致的 115 个验证器的 slash 惩罚。6.Kusama 理事正投票 297 motion,以资助将 Kusama 集成到 Klever 钱包中。7.Kusama 国库目前有 345,211 KSM,有 690.42 KSM 会在一天后销毁掉。[2021/5/23 22:35:12]
availability_distribution_subsystembitfield_signing_subsystembitfield_distribution_subsystemavailability_recovery(TODO)工具类子系统
Polkadot智能合约平台Clover Finance发布第一版测试网:1月19日消息,Polkadot 生态智能合约平台 Clover Finance 正式发布第一版测试网,目前仅对开发者和专业节点开放。[2021/1/19 16:31:15]
candidate_validation_subsystem:验证候选区块provisioner_subsystem:提供平行链相关的出块打包数据runtime_api_subsystem:调用runtimeapiavailability_store_subsystem:存储可用性数据network_bridge_subsystem:与collation相关数据在节点间传递的网桥协议chain_api_subsystemmisbehavior_arbitration(TODO)Collator
以平行链上的Collator为例,介绍节点如何与子系统协作。
启动
平行链启动时,build_polkadot_full_node启动一个中继链全节点,包含overseer和子系统,并且在collator_protocol_subsystem注册为collator_side。如果要以collator的身份启动节点,启动时需要设定--collator,类似于以往独立链设定--validator启动验证人节点。follow_polkadot:根据中继链的出块来更新平行链初始化collation_generation_subsystem,在此时注册collator.produce_candidate,用来生成collation。在collator_protocol_subsystem上注册Collator所在的para_id。start_collator:polkadot_full_node.client.execute_with(StartCollator},collator和polkadot_full_node共享一个overseer_handler。准备候选区块
collation_generation_subsystem?启动后会循环handle_incoming。接受到ActiveLeavesUpdate后handle_new_activations。propose一个候选区块build_collation:构建候选区块的Collation开启wait_to_announce任务,注册成为StatementListener。当收到validator发来的Statement::Seconded就广播当前候选区块request_full_validation_data_ctx?在中继链上获取辅助验证的数据ValidationData。task_config.collator?->?produce_candidatecollator_signature_payload签名生成CandidateReceipt,发送CollatorProtocolMessage::DistributeCollation给collator_protocol_subsystem。通知validator
collator_protocol_subsystem监听Communication(CollatorProtocolMessage),process_msg处理消息。收到DistributeCollation后,检查para_id,然后distribute_collation向validator广播。determine_core:计算当前平行链分配到的coredetermine_our_validators:计算分配到该平行链的validator集合,包括当前集合和下一次分配的集合connect_to_validators:同时连接当前validator集合和下一组validatordistribute_collation:检查collation在active-leaves上,collation没有在该relayparent上出现连接上新的validator后,在collatorprotocol子系统中handle_validator_connected发送一个CollatorProtocolMessage::Declare给validator,注册collator如果validator是属于该平行链的验证人集合,那么advertise_collation,向validator发送CollatorProtocolMessage::AdvertiseCollation?,通知validator准备发送collation了。回应请求
收到validator消息CollatorProtocolMessage::RequestCollationsend_collation:回应validtor。回应的message中包含CandidateReceipt和PoV,发送CollatorProtocolMessage::Collation(request_id,receipt,pov)给validator。由于这是节点间通信,overseer的中继只能作用于节点内的子系统之间,所以这个消息是被封装在NetworkBridgeMessage::SendCollationMessage中的,通过network_bridge_subsystem向validator转发消息。出块
当中继链上statement被checked后,collator在平行链上announce_block,此时为暂时同步。最佳区块和终结区块跟随中继链的出块。
More
实际上,以上所描述的Collator与子系统的交互也可以说是以Collator角度的平行链出块流程。关于以Validator角度的平行链出块流程将在《平行链节点的出块流程》中介绍。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。