Web3.0重新来临-第三篇:Polkadot如何集成4个区块链网络,对我们开发者意味着什么
发布于 3 个月前 作者 yuelipeng 151 次浏览 最后一次编辑是 2 个月前 来自 用户社区

原文:https://blog.stephantual.com/title-12deb5d6eeed

关于作者:Stephan Tual是Slock.it的创始人和COO、以太坊前CCO。

5954d6d3e5fcb.png

声明:这篇博客中的任何观点都来自我个人。我的观点不代表我的雇主、投资人或合作伙伴。最后这里的所有内容都不应作为投资建议。

597ea2e2dca1e.png

多简单,即使一个5岁小孩都可以画出来(也许不完全准确,但Leonardo干的不错)

介绍和感谢

在我之前的博客里,我描述了Polkadot是什么,也许更重要的是它不是什么。今天,我将从一个更高层面来描述它如何工作,并帮助你理解跨链中继交易。

其中更复杂的技术,例如Polkadot的POS共识和它中继链的细节将会在下一篇文章中描述。

感谢Peter Czaban花时间给我灌输他的技术理解,当然还要感谢Gavin Wood写了一篇非常清晰且简洁的文章,才能让我分析他在Polkadot riot频道的评论。感谢Rob Habermeir 和 Edward Thomson 花时间来检查这篇文章。

优点概览

首先快速解释一些名词:“平行链”是指连接Polkadot中继链的现有或将来的区块链。“状态机”是指任何状态的大脑或CPU(对于以太坊就是EVM)。状态机处理网络上广播的交易。你也许听说过“状态转换函数”,本质上他们把链的老状态修改到新状态,给账户带来更新、新增和删除。

通过Polkadot的中继链,一条平行链可以发送任何信息给另一条平行链。这些消息可以调用智能合约的函数,这些函数也可以完成平行链状态机的任意功能。

根据平行链的功能可以分为:

  • 连接私有链到公有链(比如IBM Hyperledger的合约调用以太坊公有链的合约,之后再根据返回值做处理)

  • 允许跨链价值转移(比如发送Zcash到比特币网络,或者以太币到比特币网络)

  • 平滑迁移至更新/更好的链:厌倦了当前的区块链,那就转移到新的子链。

  • 获取由于一些限制目前平台还无法支持的复杂运算,比如浮点数运算。

  • 直接为智能合约获取先知数据和其他已认证的数据。

理解不同状态机可以用来完成不同的任务是很重要的:

  • 有些状态证明数据很小,可以很容易地实现高效的轻客户端,经常被用在仅有代币转账功能的简单状态机上。(例如Waves)

  • 有些让隐私更简单(例如Zcash)

  • 有些设计了企业级的访问权限(例如Iroha)

  • 有些更适合做形式化验证(例如Tezos)

所以,Polkadot如何工作?

官方的白皮书对大部分人来讲太神秘,真实的实现会比较容易理解。

跨链交易和标准的外部签名交易非常不同,简单讲就是,这意味着中继链上的验证人们手工把交易从来源链的出口队列转移到目标链的入口队列。验证人通过运行特定平行链的全节点来验证状态转换。他们被称为是“有抵押的”人,意味着他们必须存放一定的安全性押金,如果他们作恶将会被惩罚。

这里有个重要的含义:Polkadot最终支持多少种平行链,依赖于开发了多少种中继合约。有些链只需要适度的开发工作,有些链是完全不重要的,另外一些链只是有连接的可能,而且是那些链的验证人不乱来的话。

目前,Polkadot只开发了一部分,全面开发将会在融资之后。因此这个系列的文章只能当成是实验性的,目前的Polkadot和它的真正实现可能会变化很多。

我们来看一下四个实战例子。从实现角度上说,“链”是个很宽泛的概念,所以我必须选择一些技术来说明下挑战和可能性。

类似以太坊的方案和Polkadot

以太坊是目前智能合约的黄金标准,很多企业私有链也选择兼容它。Polkadot能连接以太坊或所有类似以太坊的链,这对项目成功是非常关键的,因为这标志着和世界500强的很多企业正在开发的联盟链也兼容。

从Polkadot到以太坊的交易路由需要一个用Solidity编写的“内向”合约。转移Polkadot中继链的数据给以太坊的激励方式是:任何人只要提供包含有效块头的区块,就可以获得奖励。

维持一个以太坊转接桥的成本大概是每天540,000gas。这样计算这个合约的成本是公平合理的,尤其考虑到以太坊正在开发的扩容方案(Polkadot的论文中提到每天45美元,也可能过于乐观,但如果考虑到扩容还是合理的)。一个通过转接桥转发的基本交易的花费大概是0.11美元,如果附加合约计算可能要花费更多。

更多的缓存和捆绑交易策略将会进一步降低成本。

很多性能和成本的优化都严重依赖以太坊本身的开发。以太坊已经在Metropolis(或其他)分叉中增加类似Schnorr签名这样的新原语,这样的话,相比于验签和执行底层交易,我们就能看到接近0成本的实现。

反过来(以太坊到Polkadot)也会是相似的。一个以太坊合约想要联系Polkadot的一个平行链合约,需要使用一个Solidity的“外向”合约。那个合约会收费并且使用以太坊内置的日志功能来证明交易的存在。Polkadot的验证人需要运行一个全节点来验证是否有效,但更轻量的方法也是可以的,第三方可以提交有效性的块头和证明数据,但也要惩罚提供错误证明的人。

类似比特币的方案和Polkadot

虽然集成以太坊智能合约(尤其是基于EVM的链)是Polkadot的一个重要里程碑,但如果不理会加密货币的鼻祖以及目前最大市值的比特币,将会是非常愚蠢的。

从Polkadot到以太坊的集成依赖于以太坊可以完美承载内向和外向合约,甚至容纳每天144个验证人的分配(注意这个数字是随意选择的,越多越好)。根据以太坊经常性升级的风格,也可能会通过硬分叉带来新的功能支持更高效的验证手段。

不幸的是,目前的比特币的实现有非常非常多的功能限制,大多数客户端只接受最多3方的多重签名。想要把这个数字扩展得高点(更不用说144个)需要比特币通过硬分叉来升级它的协议,从历史经验上来看,这已经被证明是非常困难的。然而新的功能却被积极地吸纳进以太坊生态中(看看即将到来的Metropolis升级列表),硬分叉在比特币的世界是非常让人头疼的问题。

入金(押金)的安全性随着验证人数量的增加而增加。一个解决方案是组织一个小的却高额抵押的验证人集合,但这也要给能够在两条链间转移的金额设置一个上限。

因为比特币的某种分叉已临近,所以也不是不可能看到比特币的平行链。有些观点认为比特币隔离见证分叉的支持者也支持例如Schnorr签名等新想法,这就可以降低集成的难度。不管怎样,在完成更直截了当的以太坊集成后,我们很可能看到Polkadot和比特币的集成,因为这个操作还需要DOT权益持有人的合作(阅读下面的社区开发章节)

类似IOTA的方案和Polkadot

在区块链世界里的各种项目中,IOTA就既没有链也没有块。这给我们带来了很大的挑战,值得进行深入研究,因为它将增进今天我们对链交互性的理解。

引用Gavin Wood对这个问题的评论:问题是IOTA并没有任何形式的全局确定性状态或交易,所以要制造轻节点证明一个给定的交易确实发生过是不可能的。但制造这个证明又是Polkadot集成外部链的关键要求,所以这可能是个非同寻常的、不大可能完成的任务。

IOTA不是一条区块链,而是有向无环图。因此,也没有父哈希来追踪交易是否发生。本质上你需要经常性地追踪一个全局定义的状态,等待它达到实用的最终确定性。完全最终确定本身也不是什么大问题,但实用确定性也足够了(比如社区定义的以太坊需120个块和比特币需6个块)。

然而,全局定义的状态是非常重要的。IOTA看起来只是提供了局部的最终确定性,而且是非必要线性相关的片段。

好消息是,也可能有某种解决方案(包括Gavin Wood建议的),保持一个分离的梅克尔树,包含有向无环图中至少有一定深度的交易,并把这个梅克尔树作为全局状态。

类似Cosmos的方案和Polkadot

Polkadot并不是唯一致力于链和链交互的项目,但它是目前唯一支持智能合约方法跨链远程调用的项目,其他专注于价值转移类的事情。我们来看下,Polkadot怎么和其他类似Cosmos的代币交易方案交互。

再次引用Gavin Wood的话,我们看到Cosmos很难连接tendermint家族外的系统。Polkadot对它的平行链只做很少的假设,一个达到交易确定性的区块可以独立和快速地与父块哈希验证,验证人有多种方式可以发挥他们的集体性权威。

因此,如果Cosmos可以连接Polkadot,那Polkadot就没有什么理由不能。Cosmos被设计来交互基于tendermint共识的代币链。它消息协议的层级更低,严重依赖于tendermint的立即最终确定性模型。

对开发人员意味着什么?

作为一个区块链开发人员,你也许想混合各种状态机的功能,因为目前不论市场团队如何宣称,始终没有一条链支持所有功能。我本人不认为这个状态会在最近几年内改变,碎片化甚至还会加剧。

如果你不满足于只是做区块链的PoC,你会发现不知道该选择什么样的状态引擎,因为你要根据特定行业的不同特点来决定(健康、法律、物联网等)。在这个方面就是Polkadot的闪光点。

就像web开发框架让开发人员可以专注于其网站功能,而不用去关心底层的“管道”,Polkadot给了你打造状态机的基石,包括通信和状态转换的安全性都由Polkadot整体中继链的权益保证(抵押的集体代币)。你不需要担心是否达到最小的安全阈值或更加去中心化的矿工群体。

进而,Polkadot给所有链带来了单一的最终确定机制。最终确定性意味着哪个交易是被认为拥有“一致性”的——换句话说就是在某个时间点链处于什么状态。一些区块链比如以太坊和比特币,通过对又挖出区块的个数作为社区和交易所的共识标准。以太坊的这个数字是120,比特币是6。其他使用不同机制的链也内置了最终确定性。

当采用了Polkadot,平行链本质上放弃了自己决定最终确定性的权利,从而换来了和其他链交互的能力。

最后还会提供给你一个标准的消息队列,所有的路由作为验证人共识的一部分,也减少了开发难度。不论什么情况,你的交易都会确保被路由到正确的平行链。

结论和下一步

这篇文章本意有点长,所以我不得不拆分为两半。在下一篇文章中,我将根据在指定时间内发给我的问题,转发一个迷你FAQ问答。下一篇文章分析Polkadot中继链的POS模型,问答在此之后。

通常,你可以加入web3的slack(http://tiny.cc/web3chat)中独立的频道,比如#polkadot频道。

我希望这对你有用,你可以在r/web3 subreddit 里问一些通用问题,也可以在官方/r/polkadot_io 里问一些技术问题。

回到顶部