波卡区块链

    Polkadot(波卡)是将多个专用区块链连接到一个统一网络中的区块链基础设施。

 

本文基于“波卡区块链白皮书”,也就是Gavin Wood的“POLKADOT: VISION FOR A HETEROGENEOUS MULTI-CHAIN FRAMEWORK DRAFT 1”。

    目前区块链技术有五大挑战:

    可扩展性(Scalability):随着规模的增大,区块链设施不能消耗过多的资源。

    可独立性(Isolatability):对于不同的需要,区块链设施要能提供多样的服务。

    可建设性(Developability):要有足够工具和API方便开发者。

    可治理性(Governance):网络要能随时间进化,决策要民主,要能有效领导去中心化系统达成目标。

    可应用性(Applicability):可以解决实际问题。

Polkadot着重于解决前两个问题。虽然这个网络应该对这五个问题都有帮助。

在原有的区块链设施(比如属于Proof-of-work的比特币和以太坊,以及属于Proof-of-Stake的NXT和BitShares中,由于状态转移机制(执行交易)和共识规范化机制(就交易达成共识)挂钩,大大限制了交易速度(从3000次/秒到30次/秒)。并且为了兼容最慢的机器,也大大降低了效率。Polkadot将状态转移机制和共识机制脱钩,实现了可扩展性。

    在Polkadot先前的工作:

    Chain fibers:单一中继链(Relay Chain),多条同质(Homogeneous)链

    1.无全局状态的系统:

    Factom:有可扩展性,但应用范围受限

    Tangle: 用有向无环关系图来记录状态变化。但是问题规模大了就难以对付。

    UTXO模型: Tangle的简化版。只能进行价值转移。由于没有全局状态记录而难以与其他系统交互。

    2.异构链系统:

    Side-chains: 对比特币协议的增强,提供比特币与side-chains之间不可信的互动。

    Cosmos: 多链系统。把Nakamoto的PoW共识换成了Jae Kwon的Tendermint共识。局限于数字资产而非任意信息。

    3.Casper

    以太坊模型的增强协议。使用PoS共识,协议较为复杂,提供一定的可扩展性。是以太坊的Hard-fork。

    注:Hard-fork指对于网络的大升级,需要所有用户更新协议系统。

    而Polkadot则是完全可扩展、面向未来、无需过于复杂或硬分叉,支持无分叉升级。

    Previous Work

总之,Polkadot是一个可扩展的异质多链(scalable heterogeneous multi-chain),提供接口让其它区块链接到它上面,促进不同链之间的交流,是区块链中的基础设施,提供了链的集体安全(pooled-security)和可信沟通(trust-free interchain tranbility)。

波卡区块链中的角色:

验证人(Validator):核心人物,验证新的区块。需要抵押一定资产(保证自己诚实)才能成为验证人,或者是让提名人抵押资产后提名自己。需要长时间高带宽运行中继链代理程序。当平行链要产生区块时,就需要选出一批验证人来验证区块。验证完平行链区块,验证人还要验证中继链区块,这涉及更新事物队列的状态(本质是将数据从平行链的输出队列移动到另一个平行链的输入队列)、处理已验证的中继链的交易集合、验证最终块(包括最后一次更新平行链)。

验证人诚实地完成自己的工作就能得到金钱奖励。不小心犯错会扣押奖励,多次犯错将从验证人的抵押资金中扣钱。有计划地欺骗、伪造会直接没收抵押资金。

提名人(nominator):提名人抵押一些资金后就可以提名自己信任的验证人了。验证人获得的奖励中有一部分会分给提名人。

整理人(collator):协助验证人生成有效的平行链区块,为特定一个平行链维护一个“全节点”(保留所有关于该平行链的必要信息),从而能够制作新区块和执行交易。这和当前PoW区块链上的矿工工作类似。正常情况下整理人整理并执行交易产生一个未密封的块以及零知识证明(zero-knowledge proof)提供给验证人。

注:零知识证明(zero-knowledge proof):一方向另一方证明一个东西是真的但是不提供关于这个东西的任何额外信息。

钓鱼人(fisherman):通过及时证明恶意行为获得赏金。举报协作性的、有计划的高智商恶意行为能够获得更高的赏金。

 

图解波卡区块链工作原理

    波卡区块链的工作方式:

    波卡区块链采用NPos(Nominated Proof-of-Stake)共识机制,参与者通过在区块链上抵押加密货币来换取能够记录区块(以获得奖励)的资格。

    首先,提名人质押一些钱,从而能够提名自己信任的验证人(让他被选上参加记录区块链工作)。

    其次,验证人质押一些钱,然后产生区块记录正确的资讯。

    第三,整理人收集并整理平行链中的交易记录。整理完并确认正确后把资讯交给验证人。

    第四,验证人将资讯记录到中继链区块上。

    钓鱼人一直在寻找恶意行为,随时准备抓住恶意者。

    验证人完成工作获得钱。提名人也得到一定分成。整理人获得交易费。钓鱼人通过抓住恶意行为获得赏金。

 

 

    工作方式

工作细节:

1.共识:波卡在中继链上对一些有效区块达成了底层共识。利用了现代异步BFT算法(a modern asynchronous Byzantine fault-tolerant algorighm),从Tendermint和HoneyBadgerBFT中获得启发。

注:Byzantine falult-tolerant拜占庭容错性指的是一个计算机网络中即使有结点进行恶意通信仍然能够继续运作的性质。来自于莱斯利·兰波特的拜占庭将军问题。9位将军在战场上共进退,他们互相写信交流。其中出了一个叛徒。现在四个正常将军投票前进,四个正常将军投票后退。叛徒将军知道后告诉前进将军他投票前进,告诉后退将军他投票后退。所有正常将军都认为自己的选择得到过半数支持,就按着自己的选择行了。结果一半将军前进,一半将军后退,9位将军被敌军打得全军覆没。这就描述了一个不具有拜占庭容错性的信息网络。

2.验证人选举并不频繁(最多一天一次,一般一季度一次),验证人退出后还需要三个月才能拿回押金(防止抢完就跑)。

3.一个简单的“检查点”门闩防止危险的链重组超过特定深度。同时硬分叉(剧烈的协议变化)定期发生,把最新信息输出给客户。有效防止远程的无风险攻击。

4.平行链表头在中继链中被封闭。防止重复支出。(和比特币的side-chains和merge-mining采用的策略相同)除此之外,波卡还通过用密码学的方法随机把验证人分成到不同平行链中来确保平行中状态转移的有效性。

 

 

from original paper

在上图中,中心的七边形是Polkadot的中心部分,七边形上的小圆圈是中继链。

左上角的绿色部分中,上半部分代表整理人获得了交易信息并把这些信息在整理人团体中传播开来。然后整理人把信息交给验证人(中心七边形中的倒三角)。这些倒三角有不同颜色是因为验证人是被随机划分给不同的平行链的。每个验证人有与他平行链相同的颜色。验证人把整理人提供的信息写到中继链上使之成为整个系统的共识。验证人会定期随机换颜色,为了防止验证人合伙作弊。

绿色部分中的下半部分中的小星星是在处理从其他平行链来的交易。比如从左下角红色部分的一个账户(小星星)中,交易信息先通过红色部分的中继链进入七边形,然后通过绿色部分与七边形连接的中继链进入绿色部分中的账户(小星星)中。这种跨链转账功能是波卡特有的。

下方的灰色部分是波卡通过一个平行链转接桥和以太坊连接在了一起。

右边的粉色五边形是可扩展性的关键。如果只考虑中间的七边形,那么它的可扩展性是有限的,一般最多只能接100个平行链。这是因为每个平行链需要的验证人数量是固定的。而过多平行链导致验证人过多,过多验证人严重降低网络速度。

而这个粉色五边形的意思就是:平行链可以变成中继链。

链间通讯:

链间通讯通过一个基于Merkle tree的队列方式解决。中继链的维护者将交易信息从一个平行链的输出队列移动到目的地平行链的输入队列。为了防止一个平行链对另一个平行链用大量垃圾信息进行攻击,输入队列有一个上限,若信息到来时输入队列已经满了就不能再加入信息。有一个变量记录输入队列满了没有,这样第一次无法加入时就能立刻汇报情况。

 

但是在第二次无法加入时,由于信息传输和外部交易生产区块链上一样是异步的,没有返回值,所以就没法及时汇报情况。

注:merkle tree又称binary hash tree

 

from original paper

上图中,绿色部分是一个平行链,其中的星星是一个账户。两个箭头分别为输入Merkle树和输出Merkle树。输入树从前面一个区块的验证人得到交易信息,路由引用放在输入Merkle树中,绿色平行链中的账户从输入树中得到交易信息。账户发送信息给输出树,索引存放在输出树中,输出树把交易信息传递给下一个区块的验证人。

1.信息从波卡到以太坊:

通过在利益相关者中投票投出一些验证人,然后在这些验证人中选择BFT共识机制,我们得以在人数适中且稳定的验证人集体中形成安全的共识。

注:BFT共识(Byzantine Fault Tolerance)是一种能够让计算机系统在一些部分崩溃的情况下仍然能形成共识的性质。

比如在有144个验证人的系统中,用四秒钟产生一个块后,需要过三分之二的人同意,再加上60分钟的验证时间中没人提出质疑,就可以认为该块是“已被验证的块”。

以太坊托管一个break-in contract,可以维持144个签署人,在EVM(Ethereum Virtual Machine以太坊虚拟机)环境下采用单位成本为3000gas(gas:一种计算消耗计算资源多少的单位)的椭圆曲线数字签名(elliptic curve digital signature, ECDSA),遵守三分之二通过的共识机制,从而验证来自波卡的交易信息。

以太坊验证一条来自波卡的指令成本最多为300000gas以下。而总体计算资源上限是5.5M gas(300000 gas是它的6%)。

成本计算:假设验证人一天换一批。维持波卡到以太坊的桥一天需要540000gas,也就是一年45美金。基本交易信息一次过桥的成本是0.11美金。批发过桥更能将单位成本降到0.01美金。

2.信息从以太坊到波卡:

以太坊这样传输合约信息到波卡的一个平行链上:做一个break-out contract,支付所需费用,发布一个日志指令,从而让别人能够通过Merkle proof验证其存在性,并且验证其表头是有效的。

3.波卡和比特币的对接

由于比特币的性质,实现安全对接有难度。虚拟平行链技术也许有希望做到这一点。

接下来分析波卡的协议。协议主要分为三部分:共识机制、平行链接口、跨链传输的发送路线。

中继链操作

中继链和以太坊类似,基于状态,状态把信息存储地址映射到账户信息、主要结余(mainly balances?)和一个交易柜台上。在中继链上存放账户只为一个目的:用于计算谁在系统中拥有多少代币。

然而,在中继链上不能:部署交易合约、记录计算成本。

如果中继链有基于以太坊虚拟机(EVM)的虚拟机(VM),系统就会进行一些改动以保证尽可能简单。

如果不是以太坊虚拟机,一般就用WebAssembly(wasm)后端。

质押合约

质押合约维护验证人集合。它管理:哪些账户现在是验证人、哪些账户能很快成为验证人、哪些账户为自己选择的验证人质押了代币,以及账户的质押数额、可接受的回报率、地址和短期身份。

质押合约允许人成为验证人,或者推出验证人团体。

质押的流动性问题

如果所有的代币都被质押了,那就没有足够的货币流动性来定价了。所以取出20%的代币强制其处于流通状态。

没收验证人工资(Bond Confiscation/ Burning)

以下行为将导致验证人损失工资和质押金:无法为一个平行链提供共识、主动证明无效的平行链区块、在达成共识的阶段不作为、在相互竞争的分叉上验证中继链区块。

验证人的奖励要能够吸引人们来验证,同时也不能过大,诱发有人用黑客手段强迫验证人做出非法行为导致其丢失工资。

平行链注册表

所有平行链在平行链注册表中被定义。平行链注册表存放每条链的静态信息(链序号和验证协议的身份信息)和动态信息(交易寻路系统需要全局信息的部分,比如平行链的信息进入队列)。

敲定中继区块

所谓敲定(sealing),就是最终从一群可选择的区块中确定出哪个算是真实有效的。每个验证人都会拿到一张调查问卷,询问他们关于各个区块的看法,主要是关于区块有效性、可用性和正式性的看法。

每个验证人都回答这两个问题:

你拥不拥有这个区块的输出交易信息,从而能够验证接下来的区块?(可用性)

这个区块有效吗?是否所有指向外部的指针都有效?

验证人对区块进行投票。投票就选举出了一个正式的、公认的区块,区块也就被敲定了。

经验规律是,延迟=网络参与者人数*链数量。每条链上的人数是差不多的。所以延迟和链数量平方增长得差不多快。

以下是一些加速敲定过程的方案:

1、宽松时间条件:需要33%+1的验证人对可用性投票,但大家没必要一起投,可以在时间上分散开来。

2、公众参与。发动公众监督验证人有没有谎报一个区块是可用的。

3、找一批人为可用性担保。他们要为所有重要的链间数据作证。

一条平行链上的整理人要随机多样选择。防止内部封闭信息给恶意攻击铺路。

面对可能耗时过长(over-weight)的区块,验证人投票形成意见决定要不要及时止损(放弃验证这个区块)。

为防止整理人可能会给验证人发送恶意区块,消耗验证人大量计算资源,验证人只应该接收得到有资金支持的中继链账户签名的区块,而且应该优先选择信用良好的整理人发过来的区块。

跨链交易发送接收系统(interchain transaction routing)

维护跨链交易发送接收系统是中继链和其上验证人的工作。这个系统将交易信息从出发平行链的输出端变化到输入平行链的进入端。

egress[n][from][to]:从from平行链到to平行链在区块n中目前的输出队列信息

Validators[n][s]:平行链s在区块n上的验证人集合

Chain[n][v]:验证人v在区块n上被分派给的链。

block.egress[to]:从平行链区块block来要到to目的地平行链的输出队列

假设所有人都知道后面两个区块n和n+1的子分组。S代表一个平行链,s代表子分组。整理人S是平行链S上的整理人。

1. S上的整理人的工作:联系S在区块n上的验证人Validators[n][S]

2.S上的整理人的工作:对每个子分组s,确保至少能和1个S在n上的验证人取得联系

3.S上的整理人的工作:对每个子分组s,假定所有从子分组s到平行链S在区块n中的输出队列信息egress[n-1][s][S]都可用(所有从上一个区块到S的交易请求都可用)

4.S上的整理人的工作:为S制作区块候选人b(包括b.header, b.ext, b.proof, b.receipt, b.egress)

5.S上的整理人的工作:确保外部交易信息b.ext对于其他整理人和验证人都可用

6.S上的整理人的工作:对每个子分组s,发送输出信息egress[n][S][s]=(b.header, b.receipt, b.egress[s])给下一个区块子分组中的接收方Validators[n+1][s]

V是一个验证人

7.验证人V的工作:和所有要在同一条链上验证同一个区块的验证人建立联系。也就是连接所有满足Chain[n+1][v]=N的验证人v,其中N=Chain[n+1][V]。

8.验证人V的工作:为这个区块整理所有数据输入。也就是对每个子分组s,取得egress[n-1][s][Chain[n][V]]。

9.验证人V的工作:接受对这个区块的候选证明proof[Chain[n][V]]。对区块的有效性进行投票。

10.验证人V的工作:接受给下一个区块的候选输出数据,即对每个子分组s,接受egress[n][s][N]。对区块输出的可用性进行投票。给在同一区块同一条链上的相关验证人发布最新信息。

11.验证人V的工作:等待,直到所有人达成一致意见。

对于外部数据的可用性检测问题,可以单独找出一批验证人来负责此事。或者激励整理人验证某个平行链区块上外部数据的可用性。

交易信息路由系统:每个平行链头包括一个输出字典树根节点(egress-trie-root),字典树容纳了routing-base bins。每个bin都是拼接起来的输出输出交易信息。

注:这个机制的瑕疵可能会遭受post-bomb攻击,以上机制可以进一步升级为Hyper-cube Routing,它可以减轻随链数量增加对验证人数量增加的要求。

平行链验证

验证人的主要工作是证明平行链的区块是有效的,包括检查状态转换、外部交易、输入队列中交易请求的执行状态、输出队列最终状态等等。验证人通过平行链整理人(parachain collator)或者其他验证人得到区块。

平行链整理人完成了当今矿工的大部分任务,他们在某一条平行链上保持中继链和平行链完全同步(比如说维持平行链进入队列的当前状态)。除此以外,他们通过维持交易队列来寻找交易并且接受来自公共网络的已经被正确验证的区块。从这些工作中,平行链整理人得到手续费。

在网络协议方面,波卡仍然在不断研究。对于“万能协议”:Web 3协议的研发基本失败。现在打算在原有的一些协议的基础上升级扩展。这些协议主要是Peer-to-Peer协议,比如以太坊的devp2p, IPFS的libp2p,GNU的GNUnet。

协议的可行性

跨链交易支付:

在波卡中没有像在以太坊中有一整套的计算资源记账体系(以太坊有gas)。这让系统更加简单方便。然而如果有一个平行链试图让另一条平行链消耗大量算力,怎么办?

一方面,可以利用输入队列有上限和缓冲区的特性,防止一条链给另一条链发送大量垃圾数据进行破坏。

另一方面,可以确保验证人在开始计算之前已经根据问题的规模得到一定报酬。

增加链:

加链虽然代价不大,但也有成本。加链增大验证人数量,每个验证人分到的报酬降低,系统延迟增大。

所以验证人或利益相关群体在加链时需要支付一定价格。新链可能是净贡献为零的(比如财团链、doge-chains、特定于某个应用程序的链),或是对于网络有内在价值的,给网络增加了别处找不到的功能(比如保密性、内部可扩展性、关联服务)。

利益相关群体应该被激励加入子链,一方面有经济利益,一方面可以扩展网络功能。

综上,波卡是一个可扩展的、异质的多链协议。有潜力兼容一些现有的区块链网络。在这样一个协议下,参与人可以根据自己的利益来自由行动,一起创造一个整体的实用系统,同时来自现有区块链的人加入波卡也不需要过多额外成本。

待解决的问题:

1、如何从网络分叉中恢复(尤其是恢复共识协议)

2、债券没收和奖励分红尚待探究。现在的“赢者通吃”模式可能对钓鱼人不是一个很好的激励。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值