【我的区块链之路】- 瞎JB说一通polkadot - Go语言中文社区

【我的区块链之路】- 瞎JB说一通polkadot


Polkadot 总结

什么是 Polkadot

  • Polkadot是区块链的集合,由多个区块链组成,异构。 Polkadot的主要目的是连接现在独立的区块链。使用Polkadot,可以在不同的区块链之间进行通信和数据传输。

  • Polkadot主打跨链。

主要架构

在这里插入图片描述

几种角色:

  • RelayChain (中继链):类似 cosmos的 cosmos hub,不支持智能合约。

  • ParaChain (平行链):类似 cosmos的 Zone,支持智能合约。

  • Bridge(桥接):类似 cosmos的 Peg Zone。

  • Substrate:是一个用于构建区块链的技术堆栈,与Cosmos中Cosmos SDK的作用十分相似。

图中
展示了收集人收集并且广播用户的交易,也广播候选区块给钓鱼人和验证人。
展示了用户提交一个交易,先转移到平行链外部,然后通过中继链再转移到另一条平行链,成为一个可以被那里的账户执行的交易。

注意: Polkadot的Relay Chain和Cosmos Hub都不支持智能合约,但它们都可以连接到支持智能合约的链。

和cosmos的区别

  • 需要质押 dot 才能将 ParaChain 链链接到 RelayChain。

  • Parachain和Relay Chain共享“池安全”(pool security),而Cosmos则由Zone来保护自己的网络安全。

  • Substrate是一个用于构建区块链的技术堆栈。这与Cosmos使用The Cosmos SDK所做的完全相似。Polkadot网络建立在Substrate之上,就像Cosmos Hub建立在Cosmos SDK之上。你不必担心共识或网络,你可以只关注区块链应用程序。Substrate是用Rust编写的,但状态机的核心功能编译成WebAssembly。它可以使用编译的Rust代码或通过WebAssembly解释器本机运行。

  • 相对于Cosmos 的PegZone,Polkadot有Bridge。

  • 相对Cosmos来说多了“钓鱼人”这种角色。

和以太坊的区别

去除 gas 机制。依赖“交易提交”的入口队列缓存来阻止一条链给另一条链塞满交易数据。

Polkadot 的一些指标

Polkadot中的几种角色

有四个基本的角色在维持Polkadot网络:

在这里插入图片描述

  • 验证人(validator)
    有最高权限,帮助在Polkadot网络里打包新区块。在每个区块上,每个节点都必须准备接收一个已提交的来自平行链上的新区块。验证人不一定拥有所有平行链的全同步数据,所以他们希望把这个提议平行链新区块的工作指派给第三方,也就是收集人。验证人小组一旦都确定性地批准了自己所属平行链的新块,他们就必须开始批准中继链自身的区块。

  • 收集人(collator)
    交易收集人是帮助验证人制造有效的平行链区块的群体(存储和验证新的Parachain区块的任务)。他们必须运行一个特定平行链的全节点,这也意味着他们有全部的必要信息,可以打包新块并执行交易,就跟目前PoW区块链的矿工一样。在正常情况下,他们会收集并执行交易,并创建一个”未密封”(unsealed)的区块,再加上一个零知识证明一起提交给一个或多个当前负责提议(proposing)该平行链区块的验证人。

  • 提名人(nominator)
    提名人是一个拥有权益的群体,他们把安全性押金委托给验证人。照他们的委托比例,他们也会受到和验证人总押金同样比例的奖励和扣减。

  • 钓鱼人(fisherman)
    钓鱼人并不直接和区块打包的过程相关。他们是独立的“赏金猎人“,激励他们的是一次性的大额奖励。钓鱼人只要及时举报并证明至少一个有抵押的参与方存在非法行为,他们就能获得奖励。

为了预防由于私钥泄露给钓鱼人所导致的过渡奖励,钓鱼人上报关于单个验证人的非法消息签名的基础奖励是从最小开始的,这个奖励会随着其他钓鱼人上报更多的非法签名而逐渐增加。依据Polkadot的基本的安全性假设:至少三分之二的验证人是诚实的,渐近线将设置在66%。

钓鱼人某种程度上和目前区块链系统的全节点相似,他们所需要的资源相对较少,也没必要承诺稳定的在线时间和大的带宽。他们只需要提交很少的押金。这个押金用于预防浪费验证人计算时间和计算资源的女巫攻击。它是立即可以提现的,但如果监测到一个不当行为的验证人,可能会收获很大的奖励。

惩罚

共识算法下,会惩罚一个没有履行他们职责的验证人。最开始如果不是有意的错误,就只是会扣留他们的奖励,但如果是重复的错误会扣减他们的押金(通过烧毁),例如双向签名(double-signing)或合谋提供一个非法区块等可证明的恶意行为,会导致他们丧失全部的押金(烧毁一小部分,大部分奖励给信息提供方和诚实的验证人)。

一个不完整的将导致惩罚的行为列表:

  • 属于一条平行链的验证人小组,却不为该平行链的区块提供合法性验证;
  • 签名了该平行链一个不合法的区块;
  • 不去处理出口队列中被投票为已生效的消息;
  • 不参与到共识流程中;
  • 在中继链两个竞争性的分叉上同时签名。

有些行为会威胁到网络的完整性(例如签名不合法的平行链区块,或者签名多个分叉),为了驱逐这些验证人,会没收他们的押金。另外还有一些不那么严重的行为(例如不参与到共识流程中)或者那些无法清晰判别的行为(例如处于一个低效的小组),只会导致一小部分的押金被处罚。

举报交易也要经过共识过程,通过2/3 以上验证人验证,打包进区块,惩罚和奖励也都是区块链交易。

共识

Polkadot通过一个现代的异步(asynchronous)拜占庭容错(BFT)算法【Npos】达成对有效区块的相互共识。算法受简单的Tendermint和HoneyBadgerBFT启发。实际上是: Aurand 和 Tendermint for PBFT 的混合共识机制,名为:GRANDPA。

在这里插入图片描述

在上图中,注意节点1,节点2和节点3如何在其中都有块A,B和C. 因为节点1,2和3具有多于总桩数的1/3,所以块A,B和C被最终确定。但是,其余的块未完成,因为它们没有足够的节点包括它们。

它确定了至少1/3节点链中的哪些块并最终确定它们。它还可以给不同的验证器赋予不同的权重,例如,通过协议中的赌注量。

对于中继链区块和平行链区块的打包过程是在同一个共识生成机制中,两类块共同组成了中继链的内容:平行链并不是由他们的小组隔离地进行“提交”之后再被收集的。

每个参与方都有一系列以签名形式存在的来源于其他参与方的信息,描述着每条平行链的候选块和中继链的候
选块。

  • 平行链的验证:

验证人抵押了大量的保证金,以获取打包和验证区块资格。验证人一旦完成了前一个区块的打包,他们就可以自由
地为后面的几轮共识准备平行链的候选块。

会依据密码学算法,把验证人随机地分成很多个组。一条平行链对应一组,甚至每个块的组也都可能不一样
验证人组需要提供平行链的候选块,还要保证它们是有效的(否则损失押金)

验证人一开始通过平行链收集人或他的某个副验证人找到一个平行链候选块。平行链候选块的数据包含区块头、前块头、外部数据输入、出口队列数据、状态转换有效性的内部证明数据(merkle trie)。
一旦一个验证人接收到了这么一个候选块,他们就在本地验证它。一旦完成验证,入口提交和外部交易(或代表的其他)都会根据链的规则而被固定。通过这个规定,一系列的出口提交都会被创建,而且确实符合收集人的候选块要求。最终会一起检查合理填充的块头和候选块头。验证人完成了对候选块的校验后,就对块头哈希进行投票,并发送必要的验证信息给小组里的其他副验证人。

  • 平行链收集人:

平行链收集人不需要交押金,他们完成的是类似目前区块链网络(也就是当前平行链)里矿工的任务。他们属于特定的平行链。为了开展工作,他们必须要有完全同步的中继链和平行链。

为了保持两条区块链的同步,他们必须维护一个交易池来“钓取”(fish)交易,并接收公网上正确验证的交易。有了链和交易池,收集人就可以为每个块的被选验证人(由于同步了中继链所以知道他们身份)打包新的候选块,再附属一些必要信息(例如从节点网络来的有效性证明等【零知识证明】),然后提交给验证人。
**他们收集所有交易的手续费作为回报(收集人的回报)。

  • 节点轮换的问题:

**在基础协议的预案里,每个块的验证人小组随机变换,验证人被随机分配去验证某条平行链的交易。**如何在不相关的节点间传递数据会是一个问题,这就必须依赖一个全分布式并且连接良好的节点网络,才能保证所需的跳跃距离(最坏的延迟)只按照网络规模(一个类似的 Kademlia 的协议会有帮助)的 log 级别增长,要么就必须延长区块时间,来支持必要的连接谈判,建立能够满足该节点当前通信需求的节点集合连接。

这些都不是好的方案:
强迫变成更长的出块时间会让网络无法支持一些特定的程序或区块链。即使是一个完美公平的网络连接也会导致带宽浪费,因为要推送大量数据给不相关的节点,所以会影响到网络的伸缩功能。

解决:
一个可以降低延迟的优化方案是降低平行链验证人集合的易变性,在一段区块后才重新分配,或者一段时间内只轮换一个验证人。通过提高平行链局部的可预测性,来降低节点轮换的次数,并仍然保证连接的优势,我们就可以保证节点间连接的随机性。

目标平行链的收集人执行交易,生成区块,由验证人组敲定。Polkadot 采用混合共识协议,出块协议的英文缩写是BABE,小孩子;敲定协议的缩写是: GRANDPA。

跨链

在这里插入图片描述

跨链交易和目前标准的外部交易没有区别。这些交易会有个来源方字段,用来辨别平行链的身份,还有个可以是任意长度的地址。

跨链交易需支付的手续费,通过来源平行链目的平行链的谈判逻辑来管理。

跨链交易的问题可以用一个简单的队列机制解决,这个队列用梅克尔树(Merkle tree)来保证数据真实。中继链的任务是把交易从来源平行链的出口队列转移到目的平行链的入队列。已转发的交易会在中继链上被引用,而不是中继链自身的交易。

为了预防一条平行链往另一条平行链发送垃圾交易,规定在在前一个块结束后,发送每一个交易时,目标平行链的入队列不能太大。如果区块处理完后,入队列太大,那么目的平行链会被看做是饱和了,接下来的几个块里就不会再路由交易给它,直到入队列降到临界值以下。这些队列在中继链上管理,允许各平行链相互决定他们的饱和度大小。

和以太坊的交互及和比特币的交互,貌似都需要特别定制处理。

  • 平行链的注册:

必须通过全民公投才能注册新的平行链。且有一些暂停和删除平行链的操作。

  • 平行链的暂停:
    为暂停操作是个紧急措施,所以会采用验证人动态投票的方式,而不是通过全民公投。对于重启操作,可能直接通过验证人投票,也可能通过全民公投来完成。

    • 平行链的删除:
      删除操作平行链只能通过全民公投来进行,而且要提供一个宽松的平滑退出过渡期,能让它们成为一个独立的区块链或变成其他共识系统的一部分。这个期限可能是几个月,而且最好由平行链根据自身的需求来制定。

结论:

实现起来复杂

新颖的地方为,创建平行链需要质押和投票。

增加了钓鱼人角色来监控作恶节点。

组件化公链,和Cosmos做法一个样

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_25870633/article/details/94839645
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢