区块链扩容系列之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。 


|**************************************************
* 本文来自CSDN博主"爱踢门",喜欢请点关注
* 转载请标明出处:http://blog.csdn.net/itleaks
***************************************************|
EOS生态访问:https://eosfavor.com
公众号:区块链斜杠青年

欢迎大家加我微信:itleaks

猜你喜欢

转载自blog.csdn.net/ITleaks/article/details/82863285
MVP