区块链扩容系列之Plasma MVP

以太坊低TPS一直被诟病,最近V神提出一种将以太坊TPS提升到500的方案,一经发表就被BM调侃。

可见以太坊低TPS目前确实严重阻碍了以太坊的发展,连V神都不得不经常发声。我们知道以太坊低TPS的一个关键原因是以太坊采用POW,因而将部分交易计算量分散到其他非POW网络是提升TPS的一个方向。Plasma就是这样一个非POW网络(侧链),Plasma子链矿工可以是DPOS节点,甚至可以是任意确定的单独个体,从而可以让执行效率成本增长,并具备良好的scaling。

由于Plasma子链数据由子链矿工维护,而子链矿工可能只有21个节点甚至一个节点,子链的数据安全性就是一个很大问题。当初以太坊采用POW就是为了保证链的安全性,如果为了提升TPS而损失安全性,那直接将以太坊从POW改为DPOS即可,没必要搞Plasma侧链了,因而Plasma子链仍要维持POW级别的安全。这个子链的安全性就是通过merkle验证机制保障的。子链矿工维护子链的交易数据详情,而主链只保存交易merkle树根Hash并验证子链交易数据的正确性。下面就以Plasma MVP版本实现为例来解读这个安全保障机制。

Plasma MVP

Plasma MVP 全称是Minimal Viable Plasma,采用UTXO模型,整体结构图如下

Plasma MVP目的是以非常简单的方式提供Plasma链的基本安全属性。

Plasma的安全性主要包括如下几点:

1)资产不能被双花

资产不能被双花需要有两个保证

转移到Plasma子链的资产必须冻结,不能在主链使用,这个通过Plasma Contract合约锁定主网资产

Plasma子链不能存在双花交易

由于子链安全性很弱,矿工也可能是作恶节点,因而需要有其他机制来保障子链交易的安全性。

2)Plasma链下的资产能自由兑回主链

这个通过startExit实现,用户可以不需要通过operator直接调用, 因而能及时赎回资产。

Plasma系统角色

用户(client):

参与Plasma系统的普通用户,想在Plasma子链高效低成本转账的用户

Plasma子链矿工(operator):

Plasma系统的维护者,负责将子链区块信息打包到主链

Plasma主链智能合约:

负责保存子链少量数据,验证子链操作的正确性合理性。

Plasma智能合约接口

deposit():

用户充值资产,智能合约会产生一个UTXO

startExit(uint256 _utxoPos, bytes _txBytes, bytes _proof, bytes _sigs)

用户退出以提取资产。退出时需要提供要退出的UTXO的信息。智能合约通过_utxoPos可以计算出区块及oUtxoIndex,然后根据该交易的完整数据及_proof(Merkle路径), 即可验证该utxo是否是一个合法的utxo,但是该utxo是否在后面的区块被使用掉(spent), 智能合约是没有足够的信息去检测的。交易内容中有,startExit操作需要引用一笔交易TxA,用以证明代币T的所有权归属于用户U,以及TxA的“直接祖先”TxB,连同这两笔交易所在的区块。

challengeExit(uint256 _cUtxoPos, uint256 _eUtxoIndex, bytes _txBytes, bytes _proof, bytes _sigs, bytes _confirmationSig)

由于智能合约保存的数据有限,没法检验一个utxo是否已经被消耗。因而需要其他机制来检测双花行为。challengeExit就可以用于惩罚双花行为的。client保存了所有交易的细节,自然知道哪些exit操作是一个双花行为,通过传递证据调用challengeExit来挑战这些非法退出操作。

submitBlock(bytes32 root):

子链矿工向合约提交区块信息的接口,只需提供区块交易merkle树根hash

Plasma区块生产

有两种方式生产区块。

1)用户充值主链资产(比如ETH)

用户通过调用Plasma主链智能合约Deposit接口充值资产到Plasma链,智能合约会构造一个充值交易和一个区块,该区块只包含该充值交易。Plasma子链需要监听主链智能合约事件,并将该充值区块数据保存到本地。

2)子链矿工(operator)创建区块。该区块包含子链里的交易

UTXO合法性检验

任何一个UTXO都是一个交易的out, 要检验UTXO的合法性,只需要检测某一合法交易的对应输出是否包含该UTXO。由于Plasma主链智能合约只保存区块的交易merkle树根hash, 因而智能合约时没法直接检测的,调用者必须提供证据。这个证据就是交易数据+merkle路径。

智能合约通过交易数据算出叶子节点hash,然后通过橙色的兄弟节点hash(merkle路径)递归计算就可以得到root hash,然后比较该root hash和合约里保存的root hash即可知道tx data是否是真正的数据。merkle树的更多信息可以看看这篇文章:https://blog.csdn.net/ITleaks/article/details/79992072

作恶惩罚机制分析

Plasma模型下,普通用户和矿工(operator)都可作恶。

用户作恶:

可通过startExit来提取已经被花掉的utxo,即双花。这种情况下,只需其他用户发现该行为并通过challengeExit即可阻止该行为。同时,为了给challengeExit足够的时间,startExit调用后,调用者并不能立即获得主链资产,必须等待7天且没有被challenge成功才行。

矿工作恶:

1)向主链提交错误区块,由于submitBlock只接受merkle root hash,没有足够信息来检测区块内容的正确性。

这种情况下,普通用户可以通过监听区块内容检测是否是正确区块,如果发现operator作恶,普通用户啥都没法干,只有通过startExit赎回自己的资产并退出这个子链。

2)operator不工作

operator为了避免普通用户发现自己的错误区块数据,可以选择不给用户发送区块信息,用户自然就没法发现operator的做恶行为。为了避免这种情况,普通用户可以定时检测operator是否在出块及发送区块信息,如果发现operator已失联,可调用startExit赎回资产并退出该子链。

作恶行为检测激励

利益驱动:

当用户A调用startExti赎回一个属于用户B的utxo时,用户B自然有动力去发现并举报这次作恶行为,否则B会丢掉属于自己的资产。

奖励驱动:

用户在调用startExit时必须抵押一定量的资产,当被challenge成功时,挑战者获得押金。

MVP的限制

Operator作恶或者子链瘫痪时,可能会出现挤兑现象而导致challengeExit操作阻塞,进而导致非法startExit超期而成功。

Plasma参与方需要保存全网所有数据。目前只支持ETH。

公众号:区块链斜杠青年

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180927G0HHVT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券