区块链性能优化新方案

本文是笔者之前博文的整合:

  • 初识 Plasma
  • Plasma —— 以太坊扩容新方案
  • 区块链性能提升——链上设计之道

相关论文

  • Plasma: Scalable Autonomous Smart Contracts
  • The Road to Scalable Blockchain Designs

扩容背景

区块链性能优化新方案_第1张图片
Scalable Blockchain

扩容背景

尽管建立在信息开放和自由的理想之上,互联网已经变得越来越中心化:只有少数大公司可以控制谁可以访问信息。 为了抵消这一趋势,一些建议被提出,以便信息存储和处理不集中在任何单一实体中。由于区块链的固有缺陷,比特币系统已经变得越来越中心化,并且越来越低效。 为了解决这个问题,大量替代解决方案被提了出来:

  • Off-chain(链外)解决方案允许小型和频繁的交易发生在与主链并行并由主链背书的侧链实例上。
  • On-chain(链上)解决方案直接修改区块链设计以支持高性能。

常见方案

而解决低吞吐量的问题,目前有几种比较流行的解决方案:

  • 增加区块的大小可以提高一定的吞吐量,但会有很大的限制——计算性能和带宽的限制,会导致整个网络在广播的时候效率非常低下。
  • 链下交易需要提前支付一些数字货币作为押金,之后通过线下手段来跟其他人进行支付,最后把结算放在链上。但链下交易缺乏对线下节点的有效监督,中心化的优势减少了。
  • 代理人共识协议通过权益证明或者官方验证,选出若干代理人。之后通过某种协议,形成一个共识,产生区块广播给整个网络。问题是代理人是否能够公正的代表大多数人的利益。

区块链性能

有两个测量指标与区块链扩展性直接相关:交易吞吐量(区块链可以处理交易的最大速率)和延迟(确认交易已包含在区块链中的时间)。吞吐量和延迟是提升区块链性能的瓶颈问题,从研究的角度也更具挑战性。比特币的交易吞吐量是其区块大小和块间间隔(时间)的函数。在当前块大小为1MB和10分钟块间间隔的情况下,最大吞吐量限制在每秒约7个交易;而创建交易的客户必须平均等待至少10分钟以确保交易包含在区块链中。相比之下,像 Visa 这样的主流支付处理公司可以在几秒钟内确认交易,并且每秒处理吞吐量高达24,000次。目前的研究集中在开发显著提高区块链性能的解决方案,同时保持其去中心化特性。


链上扩容

这里介绍链上提升区块链性能的新方案。

区块链性能优化新方案_第2张图片
Legends used in Models

比特币区块链

比特币是一个P2P网络,任何节点都可以加入并成为网络的一部分。 如果一个节点收到一个新的区块,它会将其广播到网络的其余节点。 所有节点都可以接收和发送广播,但只有领导者节点才可以向区块链追加信息。为了阻止不诚实的领导者将系统带入泥潭, 这就会涉及到挖矿,这也是领导者节点被称为矿工的原因。 如果矿工幸运地找到哈希难题的答案,它会提出要追加到区块链下一个区块。为了激励矿工解决哈希难题并提出下一个区块,允许成功的矿工为自己支付一些金钱作为报酬或扣除交易输出的一部分作为交易费用。

区块链性能优化新方案_第3张图片
Bitcoin Blockchian Model

多区块单一领导

Bitcoin-NG 分享了比特币的信任模型,将领导者选举与交易序列化解耦。Bitcoin-NG将时间划分为epoch,领导者节点可以在其epoch期间单方面向区块链追加多笔交易,直到新领导者节点被选出。 Bitcoin-NG中有两种区块:密钥区块和微区块。 密钥区块包含一个难题答案,用于领导者选举。密钥区块还包含一个公钥,用于签署由领导者节点生成的后续微区块。每个区块都包含对前一个微区块和密钥区块的引用。费用会在当前领导者(40%)和下一个领导者(60%)之间分配。与比特币类似,通过增长(聚合所有密钥区块的)最长分支来解决分叉问题。

为了对微区块中创建分叉的领导者节点进行惩罚,后续的领导者节点可以在其关键块(包含被剪枝分叉中的第一个块的头部)之后插入特殊的有毒交易作为欺诈证据。这使恶意领导者节点的报酬无效,报酬的一小部分支付给告发领导者。当一位新领导者选出但前任领导者还没有收到,并继续产生微区块时,分叉也会出现。然而,一旦新领导者选举的宣布达到所有节点,这些分叉就会得到解决。

区块链性能优化新方案_第4张图片
Multi-blocks per Leader

集体领导

该方案采用多个领导者共同快速决定是否应该将区块添加到区块链中。ByzCoin 通过扩展Bitcoin-NG取代比特币的概率性交易一致性保证,以实现高交易吞吐量。好处在于,区块链仍然是无分叉的即使客户提交的交易将被添加到区块链中,因为所有领导者都立即就区块有效性达成一致。 ByzCoin修改了Bitcoin-NG的密钥区块生成机制:一组领导者,而不是单个领导者,产生一个密钥区块,然后是微区块。领导者小组由近期时间窗口的矿工动态组成。每个矿工的投票能力与其在当前时间窗口的挖矿区块数量成正比,这是其哈希能力。当一位新矿工解决难题之后,它将成为现任领导小组的一员,更进一步,替换出最老的矿工。 ByzCoin使用与比特币相同的激励模式,但报酬由领导者小组成员按其比例分摊。

区块链性能优化新方案_第5张图片
Collective leaders

领导者小组被组织成一个消息通信树,其中最新的矿工(领导者)在树的根部。领导者运行一个具有线性消息传递复杂度的实用拜占庭容错协议的修改版本,以生成一个集体签名,证明至少三分之二的共识小组成员见证并验证了该微区块。网络中的节点可以以时间复杂度验证该微区块已被共识小组验证为有效。这种设计解决了Bitcoin-NG的限制——恶意领导者节点可以创建微区块分叉:在 ByzCoin中,这要求领导者小组成员的三分之二多数为恶意节点。此外,Bitcoin-NG遭受竞争条件困扰:一位尚未收到新领导者的老领导者节点可能会继续错误地在较早的微区块上进行挖矿。在 ByzCoin中,领导者小组成员确保新领导者建立在最新的微区块之上。

平行区块链增长

在这种方法中,多个领导者并行增长区块链的不同部分。比特币具有增长区块链的线性过程:矿工尝试解决难题,找到答案的矿工追加下一个区块。交易可以由多个子节点进行潜在的验证。此外,每次交易还会包含一笔报酬,这笔报酬由验证该交易的交易收取。随着更多的节点直接或间接地验证它,报酬值会降低,因此新节点有更多的动机来验证最新的交易。该系统已被证明是收敛的,这意味着在某一时刻有一个交易连接到之前的所有交易。作为这种图结构的结果,矿工可以并行地增长交易图的不同分支。系统中的正常(非矿工)节点在收到交易时验证它们。除了对交易及其双亲的工作量证明正确性和结构有效性进行标准检查之外,节点还验证该交易不是双花。

区块链性能优化新方案_第6张图片
Parallel Blockchain Extension

分片交易

Elastico将节点分成称为“委员会”的组,每个委员会管理交易的一个子集(分片)。上部分片处理前10个交易,而下部分片处理后续10个交易。在委员会内,节点运行拜占庭一致性协议以协定交易区块。如果该区块已被足够的节点签名,委员会将其发送给最终委员会。最终委员会将从委员会收到的一系列交易整理到一个最终区块中,然后在其成员之间运行拜占庭一致协议以增长区块链,并将附加区块广播给其他委员会。系统按epoch运行:分配给委员会的节点仅在epoch期间内有效。在这个epoch结束时,这些节点解决当前最终委员会产生的随机字符串难题,并将求解答案发送给下一个最终委员会。因此,在每个epoch,一个节点与委员会中的不同节点搭档,管理一组不同的交易。委员会数量与系统中可用算力成线性比例关系,但一个委员会内的节点数量是固定的。因此,随着更多节点加入网络,交易吞吐量增加而延迟不会增加,因为这里有一个解耦:一致性协议所需的消息与添加到区块链的最终区块的计算和广播之间的解耦。

区块链性能优化新方案_第7张图片
Sharding transactions

侧链扩容

目前的区块链技术存在不少问题,比如成本较高,吞吐量非常低,还有智能合约的安全性问题,而侧链则可以较好的解决这些问题。侧链是相对一个主链而言的,比如说比特币的侧链,相对是说以比特币为主。一个主链可以有多个侧链,每一个侧链,都可以承载不同的业务。其实侧链也是一种分片技术,只不过侧链是按应用来分片,就是说,根据不同的场景,用不同的链去承载不同的业务。

Plasma 介绍

Plasma 作为一种以太坊扩容方案,对以太坊主链可扩展性的提高通过将大量交易和计算下放到侧链来实现。其基本思想是将所有交易都被触及的共享账簿区块链,转换成一个用户可以私下交换消息的模型;使用 P2P 支付渠道和 Ethereum 的存款网络来保存来自区块链系统的担保;节点之间通信以促进传输,与 Ethereum 区块链通信以管理存款。

Plasma 架构

类似哈希表,Plasma实际上用一个“链中链”来支撑分布式扩容、以太坊的中央工作卸载。

区块链性能优化新方案_第8张图片
image

如图是 Plasma 架构,最底层是主区块链,是合约和支付的判决层,合约本身在主链上。Plasma 链上包含了当前账本的状态,可以在主链上清算和赎回(如果存在欺诈将允许资金的赎回)。Plasma 提供了一种链嵌套的结构,实现资金的可扩容的存取。闪电网络又基于其上,支持即时支付。

区块链性能优化新方案_第9张图片
image

更详细来说:节点自身被激励去运行一个链;每个节点都可以创建一个自定义的 Plasma 链;Plasma 是一系列的智能合约,允许在主链里有许多的区块链;主链可以强制 Plasma 链中的状态,是全局计算的强制检查者,计算和惩罚那些存在欺诈的行为;许多的 Plasma 的区块链可以并存,且有他们独自的商业逻辑和合约术语;Plasma 将会由 EVM 智能合约组成,并直接在以太坊上运行;Plasma 执行次数不多,却能代表大量计算得到的金融账本实体。

Plasma 的核心部分由以下几部分构成::

  • 激励层——用于持续以优化的价格执行合约,树形地组织子链来提高效率
  • MapReduce框架——构建一个状态转换的的欺诈证明
  • 共识机制——尝试构建一个和比特币的共识激励类似的机制
  • UTXO提交位图——保证在主链下的确定的状态转换,同时尽可能降低退出费用,允许在数据不可用或者其它Byzantine行为时可以退出。
Plasma 区块链

多方通道可以代表他人持有某个状态,这个框架被称为一个 Plasma 区块链。Plasma 链支持存取资金,通过在欺诈证明中提供状态转换证明。

  • 区块链性能优化新方案_第10张图片
    image
    Alice 的1 以太币被Plasma的一个区块捕捉,送到了根链。
  • 区块链性能优化新方案_第11张图片
    image
    区块 4 被检查出有欺骗行为了,因此 Alice 的钱被直接提交到了主链上。

Plasma 使能

Plasma 本质上是一系列运行在以太坊主链上的智能合约,只需处理少量来自侧链的请求,海量的交易和计算都在侧链上完成。不同于以太坊主链目前使用的 POW 共识算法,侧链将使用 POS 等更高的共识机制。因此,侧链提供了可扩展性,而主链保证了安全性和去中心化。

链中链

Plasma 是一系列运行在根区块链(Mainnet Ethereum区块链)之上的契约。根网络契约只处理来自子区块链的少量提交,而子区块链在大多数情况下都能进行非常大的计算。子链门会把自己的提交定期地根区块链广播。根区块链就如同是最高法院,所有下级法院都要从它那里获得权力。并非所有数据都传播给所有各方,各方负责定期监控他们感兴趣的特定链,并惩罚欺诈行为。在发生攻击时,参与者可以迅速而廉价地从子链大量退出到根链。

Plasma区块链层级排布在树中,将会最大化数据可用性、安全性,并可以最小化成本。挖掘只在根上进行,并且具有充分的安全性,安全性和证明从根链流动。

区块链性能优化新方案_第12张图片
image

每个子区块链都有它的 token 作为验证激励,并在其受欺诈时用做保护。一旦发现欺诈,就会失去其保证金。

区块链性能优化新方案_第13张图片
image

区块转移图:如图为Plasma的层级排布。参与者可以集体将其资金到其他链上,以免其父链是一个欺诈链。当出现攻击行为的时候,子区块的提交被广播至父链或者根链。

权益证明 PoS

当我们发现一个区块时,我们很自然地会觉得他是最长的那条链,但也不是非常确定它是不是最长的。为保证它是最长的,我们要附加自己的块并广播给网络中的参与者,来增大它的机率。区块扣留攻击在这种机制中的问题被无限放大。关于区块扣留问题的可以参考我博客的这个文章或者论文“Proof-of-Work ” Proves Not to Work version 0.2 和 Majority Is Not Enough: Bitcoin Mining Is Vulnerable。

文章中提供的解决方案是允许权益所有者在主链或父Plasma链中发布一个新区块的提交哈希。

  • 验证者仅会在他们完全验证过的节点上建新的区块,为了鼓励最大化的信息共享,他们可以并行创建区块。
  • 设计了一个验证者激励,来让最近100个块与他们的当前的权益成正比(比如,如果一个节点的权益占3成,那么过去的100个块也需要占3成)。
  • 超出的费用将会进入一个池在将来支付费用。在每个块里存在一个包含最近的100个块(和一个nonce)的提交。
  • 正确的链将是总权重最高的链,一段时间后整个链将会确定下来(finalize)。
区块链性能优化新方案_第14张图片
image
MapReduce 分治

之所以我把 Plasma 视作是一个分布式区块链,主要原因还是说到了 MapReduce。我在大二云计算课上实现了一个关于 PageRank 算法的 Hadoop 程序,发现这个思想跟 MapReduce 分治如出一辙。

MapReduce 是一种编程模型,用于大规模数据集的并行运算。概念"Map"和"Reduce",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。下图为 Plasma 的 MapReduce 模型。

区块链性能优化新方案_第15张图片
image
左侧蓝色虚线是 Plasma 从父节点传递到子节点的消息。子节点必须在
个节点内提交到父节点,否则链将暂停。向子链通过数据分发工作,子链提交工作证明。上图中,第三级的子节点完成这些计算,并返回一个字典表。结果字典表会做为提交的一部分被返回回来,字典表在子链中被组合并提交到父节点,最终完成一个全局的字典。这使在大规模情况下强制计算执行成为可能。

区块链性能优化新方案_第16张图片
image

节点仅仅需要关注那些它希望执行的数据。如果经济行为或者计算发生在其它的 Plasma 链上,它不需要执行。

Plasma 机制

子链中的所有状态,都通过欺诈证明强制执行,从而允许任何参与方检验无效区块,推断区块数据的可用性。来自主链的存款将直接发送给主合约。合约有责任跟踪当前的提交状态,使用欺诈证明来惩罚无效的提交,以及执行取款。

欺诈证明

欺诈证明(智能契约逻辑)强制执行,检查子区块链中的所有状态。欺诈证明确保了所有状态转换都是有效的。此外,这些欺诈证明还强制执行了一个交互式协议的资金提取。

区块链性能优化新方案_第17张图片
image

区块4通过前一个块的数据和第4个块中的Merkel证明是欺诈的。

区块链性能优化新方案_第18张图片
image

Alice 有所有区块的数据,所以在主链上提交了一个欺诈证明。第4个区块从而变得无效并回滚,无效区块提交者失去了在智能合约中的押金从而得到了惩罚。在某些设置的时间以后,区块将确定下来。应该通过完整的校验区块确保在没有欺诈的区块上继续建立区块。

Plasma 资金变动
  • Plasma 链上的存款

    • 区块链性能优化新方案_第19张图片
      image
      Alice 有一个1 ETH 的账户。她想将之发送到子 Plasma 链。她将它发送到 Plasma 合约。需要经历以下步骤:
      1. 将货币或代币发送到主链的 Plasma 合约。
      2. Plasma 区块链引入了一个即将到来的交易证明。
      3. 存款者在子 Plasma 链上签名一个交易,激活交易。
    • 区块链性能优化新方案_第20张图片
      image
      Alice 现在在 Plasma 区块链中有1ETH。资金由主链上的智能合约持有,但账本记录在某个特定的Plasma 区块链上。
  • Plasma 链上的状态转换

    1. Alice 希望在 Plasma 链上转移他的资金给 Bob(不需要将完整的记录提交到区块链上)。她创建了一个交易,在 Plasma 链上花费她的支出、签名,并广播这个交易。
    2. 这个交易被 Plasma 链的验证者校验后,头部的信息会作为区块的一部分放入父 Plasma 链或者主链,最终会被提交并打包到主链中。
    3. AliceBob 观察到了这个交易,签名确认他们看到了这个交易和区块。确认需要签名同时被包含进另一个 Plasma 区块中。
  • Plasma 链上的取款

    • Plasma 链上的一般取款

      1. 一个签名的取款交易被提交到根链或父Plasma链;
      2. 存在一个预定义超时周期用于调解纠纷;
      3. 存在第二个延迟来等待任何由较低的区块确认高度的取款请求;
      4. (如果取款是正常行为)取款者可以在根链或父链上赎回资金。
    • Plasma 链上的快速取款

      • 快速取款与简单取款的构建方式类似,但资金会发送到一个合约以进行原子交换。根链上被交换的资金会存在高低时间锁。
      1. Alice 愿付出时间价值获得快速取款,流动性供应商提供这个服务并与 Alice 协调一致在根链上进行一个取款。
      2. 资金被锁定在 Plasma 特定输出的某个合约上。
      3. 双方广播一个在 Plasma 链上的交易。
      4. 合约的条款是如果确定,那么支付就可以在 Plasma 链上进行;反之,Alice 赎回自己的资金。
      5. 上述 Plasma 块确定后,流动性供应商创建了一个链上合约,向 Alice 收取服务收费。
    • Plasma 链上的大量取款(一般在退出时候发生

      • Plasma 需要用户通过区块扣留来检测拜占庭行为,用户也有责任及时的退出不正确的 Plasma 链。主链上不可能探测某个区块是否处于区块扣留的状态,状态转换对于非常大的区块和是十分昂贵的。批量退出保证了 Plasma 链的拜占庭行为在某个时间和链暂停期间,不会影响大家的资金。
      1. Alice 与其它人协调一致以实现在 Plasma 链上的批量退出。
      2. 退出的执行者协调资金要发送到的目标链,且自动承诺承认资金在批量退出后,在新链上的资金可用性。
      3. 退出的执行者验证了到数据还可用时的链数据。
      4. 用户在下载所有签名后对这个大量取款再签一次名。
      5. 退出的执行者然后会关注当前是否有其它退出交易,同时移除那些可能的重复,然后签名这个退出交易,广播交易到根链或者父 Plasma 链。
      6. 如果出现重复的取款,退出的执行者可以一个较短的宽限期内更新位图和余额。
      7. 任何网络中的参与者可以通过 DMET 挑战 MEIT 中的数据。
      8. 如果没有挑战,那么在前述的 MEIT 的确定时间后,用户将收到他们的资金。

总结与感想

区块链技术去中心化、透明性、以及不可篡改性的特性驱使我们探索这个技术更广泛的应用。但公有链的低吞吐量,即性能的低下,是技术落地中,当下项目应用严峻的问题。

一些其他的方案如 Casper、Sharding、Raiden Network 也在探索更普适的扩容方案。读完 Plasma 白皮书,十分佩服这个团队的能力,同时也质疑这个框架的“大众友好性”,编写一个安全可靠的智能合约将是一个艰巨的任务。

新技术带了新挑战,新形式的产生势必带来很多新问题,同时推动区块链技术的研究,以太坊技术问题的领域也将更加浩渺。


参考资料

喝水不忘挖井人”,这里感谢为我带来灵感的参考

  • Plasma: Scalable Autonomous Smart Contracts -- [Article]
  • The Road to Scalable Blockchain Designs -- [Article]
  • 中文版白皮书:
    • Plasma白皮书(一)
    • Plasma白皮书(二)
    • Plasma白皮书(三)
    • Plasma白皮书(四)
  • 提升区块链架构性能的N种方法
  • 区块链性能效率提升
  • 区块链扩容技术Plasma研究之核心篇
  • 区块链性能提升:链上设计之道
  • 我所知道的Plasma
  • Plasma in 10 minutes

更多资源

您可以从这些地方获得在线资源和其他关于 Plasma 的工作:

  • Plasma白皮书笔记

  • 区块链扩容之路笔记

  • 初识 Plasma —— 译自 Plasma in 10 minutes

    • 初识 Plasma

    • 初识 Plasma

  • Plasma —— 以太坊扩容新方案

    • Plasma —— 以太坊扩容新方案
    • Plasma —— 以太坊扩容新方案
  • 区块链性能提升——链上设计之道

    • 区块链性能提升——链上设计之道
    • 区块链性能提升——链上设计之道
  • 本文在线链接——区块链性能优化新方案

    • 区块链性能优化新方案
    • 区块链性能优化新方案

你可能感兴趣的:(区块链性能优化新方案)