Crust 提供了 Web3 生态系统的去中心化存储网络,支持包罗 IPFS 在内的多种存储层协议,并对应用层提供接口。Crust 的技能栈还可以或许支持去中心化计较层。Crust 旨在构建一个重视数据隐私和所有权的漫衍式云生态系统。
本文作者为 Jenner @ Patract Labs 。
这篇文章基于Polkadot的6be14014提交(2020/12),目标是先容Polkadot在平行链角度上的系统架构。
脚色
架构图
链
Relay chain:中继链,认真平台安详性。
Parachain:平行链,拥有本身独立的状态与业务逻辑,共享中继链提供的安详性。
节点
validator:验证人,认真中继链的出块,同时验证来自收集者的证明,与其他验证人举办共鸣投票。中继链全节点,需要抵押DOT。
collator:收集者,为验证人收集平行链的生意业务和状态转移证明(collation)。平行链全节点,同时内嵌中继链全节点处事,不必然需要抵押DOT,可以由平行链自行鼓励。留意,平行线程的 collator 需要持有DOT,以便参加出块资格的拍卖。
fishermen:渔民,监控验证人和收集者,查抄无效的候选收据。collator 可能 validator 都可以作为 fishermen,需要抵押DOT。
平行链节点布局
平行链节点主要有以下两点变换。
共鸣
collator 在平行链上的脚色雷同于以往的独立链上的 validator。可是 collator 只提供候选区块,然后交由中继链上的 validator 举办共鸣。所以,平行链不再需要本身的共鸣机制。虽然,可以保存对 collator 的选择机制。
双处事
平行链节点与以往单链节点的差异在于:需要启动一其中继链全节点处事。内嵌的中继链全节点处事中,包括了 overseer (关于 overseer 在“中继链节点布局”部门先容)与子系统处事,而且将 overseer_handle 共享给 collator,在collator_protocol上注册为?collator_side。因此,collator 能与 validator 通过 overseer 进动作静交互,譬喻通报候选区块相关动静。别的,平行链全节点还需要通过内嵌的中继链节点来“跟从”中继链的出块。所谓“跟从”,指的是平行链全节点的最佳区块为中继链上最佳区块包括的相应平行链区块,终结区块亦如此。
中继链节点布局
relay_chain中继链上除了必需的基本组件外,较量重要的就是overseer与子系统。
overseer
overseerOverseer 主要有以下成果:
启动和封锁一系列子系统
作为子系统之间的动静总线
监听外部事件,触发子系统相应任务
动静协议
overseer 向子系统发送两种范例的动静:Communication,?Signal。
Communication:子系统之间交互的动静被封装在Communication范例中,按照被封装的动静范例通报到指定的子系统。譬喻子系统A向子系统B发送一个动静M:1. A向overseer发送AllMessages::B{M};2. overseer收到后,向B发送FromOverseer::Communication{M}。
Signal:系统动静,譬喻块导入、块终结、封锁子系统,被封装在Signal中。系统动静会被广播到所有子系统。
子系统
今朝设计上共有18个子系统,个中3个未完全实现。
Collator相关
collation_generation_subsystem:collator在块更新时生成collation
collator_protocol_subsystem:collation的请求与回应,按照validator/collator的脚色执行对应的任务
候选区块共鸣
candidate_selection_subsystem:触发对collation的请求,收到collation后请求投票
candidate_backing_subsystem:对collation投票,签署statement
statement_distribution_subsystem:广播statement
pov_distribution_subsystem:广播PoV
apporoval_subsystems(TODO):在finalize前对候选区块的再次查抄
可用性相关
availability_distribution_subsystem
bitfield_signing_subsystem
bitfield_distribution_subsystem
availability_recovery(TODO)
东西类子系统
candidate_validation_subsystem:验证候选区块
provisioner_subsystem:提供平行链相关的出块打包数据
runtime_api_subsystem:挪用runtime api
availability_store_subsystem:存储可用性数据
network_bridge_subsystem:与collation相关数据在节点间通报的网桥协议
chain_api_subsystem
misbehavior_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_candidate
collator_signature_payload签名
生成CandidateReceipt(包括erasure_root和CandidateCommitments的hash),发送CollatorProtocolMessage::DistributeCollation给 collator_protocol_subsystem。
通知validator
collator_protocol_subsystem 监听Communication(CollatorProtocolMessage),process_msg处理惩罚动静。收到DistributeCollation后,查抄para_id,然后distribute_collation向validator广播。
determine_core:计较当前平行链分派到的core
determine_our_validators:计较分派到该平行链的validator荟萃,包罗当前荟萃和下一次分派的荟萃
connect_to_validators:同时毗连当前validator荟萃和下一组validator
distribute_collation:查抄collation在active-leaves上,collation没有在该relay parent上呈现
毗连上新的validator后,在collator protocol子系统中handle_validator_connected
发送一个CollatorProtocolMessage::Declare给validator,注册collator
假如validator是属于该平行链的验证人荟萃,那么advertise_collation,向validator 发送CollatorProtocolMessage::AdvertiseCollation?,通知validator筹备发送collation了。
回应请求
收到validator动静CollatorProtocolMessage::RequestCollation
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。