以太坊低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