Plasma —— 以太坊扩容新方案

Posted by Nino Lau on December 24, 2018

相关工作

Plasma: Scalable Autonomous Smart Contracts – [Article]


Plasma 背景

随着区块链技术的发展,主链需要非常巨大的计算能力才能完成工作证明。如果采用集中式计算,需要耗费相当长的时间来完成,大大降低了区块链系统的执行效率,以太坊的扩容问题亟待解决。分布式计算下方中央的工作,将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率。

Plasma 应运而生。作为一种以太坊扩容方案,对以太坊主链可扩展性的提高通过将大量交易和计算下放到侧链来实现。其基本思想是将所有交易都被触及的共享账簿区块链,转换成一个用户可以私下交换消息的模型;使用 P2P 支付渠道和 Ethereum 的存款网络来保存来自区块链系统的担保;节点之间通信以促进传输,与 Ethereum 区块链通信以管理存款。Plasma 本质上是一系列运行在以太坊主链上的智能合约,只需处理少量来自侧链的请求,海量的交易和计算都在侧链上完成。不同于以太坊主链目前使用的 POW 共识算法,侧链将使用 POS 等更高的共识机制。因此,侧链提供了可扩展性,而主链保证了安全性和去中心化。


Plasma 架构

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

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

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

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

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

Plasma 区块链

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

  • Alice 的1 以太币被Plasma的一个区块捕捉,送到了根链。
  • 区块 4 被检查出有欺骗行为了,因此 Alice 的钱被直接提交到了主链上。

链中链

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

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

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

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


权益证明 PoS

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

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

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


MapReduce 分治

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

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

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

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


欺诈证明

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

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

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


Plasma 资金变动

  • Plasma 链上的存款

    • Alice 有一个1 ETH 的账户。她想将之发送到子 Plasma 链。她将它发送到 Plasma 合约。需要经历以下步骤:
      1. 将货币或代币发送到主链的 Plasma 合约。
      2. Plasma 区块链引入了一个即将到来的交易证明。
      3. 存款者在子 Plasma 链上签名一个交易,激活交易。
    • 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 白皮书,十分佩服这个团队的能力,同时也质疑这个框架的“大众友好性”,编写一个安全可靠的智能合约将是一个艰巨的任务。

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


参考资料

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


更多资源

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