区块链中存在的这样一个不可能三角:去中心化、安全性、可拓展性。在区块链刚诞生的时候,去中心化和安全性得到了很好的实现,但随着发展区块链交易成交的速度开始跟不上了,其中CryptoKitties一度让以太坊不堪重负,交易拥堵。对于不修改区块链本身代码,而在现有的链本身上面搭建东西从而达成拓展的方法
区块链中存在的这样一个不可能三角:去中心化、安全性、可拓展性。在区块链刚诞生的时候,去中心化和安全性得到了很好的实现,但随着发展区块链交易成交的速度开始跟不上了,其中 Crypto Kitties
一度让以太坊不堪重负,交易拥堵。对于不修改区块链本身代码,而在现有的链本身上面搭建东西从而达成拓展的方法就是 Layer2 拓展。这种思路目的就是为了在尽可能保证去中心化和安全性的情况下提高可拓展性。
根据实现的设计方向出现了一些分支:侧链、状态通道(State Channel
)、Plasma
、Rollup
。
侧链就是建立一个独立的区块链,这个链有独立的共识机制(即主链是什么共识机制与侧链无关),其通过双向锚定进行沟通,对于主链而言,它是感知不到侧链的存在的,而侧链又具有一定的独立性(主链崩溃并不会影响他的运行,只会影响他的价值)。
双向锚定就是两个链之间的一个沟通,通过一方销毁代币,另一方生成等值代币,从而实现资产的跨链转移。
对于侧链这一概念是需要搭配主链才有的(即有两条链才能称得上主链和侧链),单独看链是没有侧链这一说法的。如我们复制以太坊代码搭建一条链,和真正的以太坊之间搭建起一个双向锚定,那么自建的链就可以称为侧链(我感觉因为其价值低所以才称作侧链),真以太坊链就是主链。
状态通道这个方法就像在两个用户之间建立一个账本一样:创建初记录两者状态,一系列交易后,又得到一个两者状态的最终情况,销毁账本的时候上传这个最终情况的状态。
举个例子就是,A 和 B 之间有一系列交易:
状态通道就是记录 A 和 B 交易开始时候的余额情况,然后根据交易不断修改双方状态,当关闭时返回交易完成的状态,让区块链根据状态通道返回的结果进行这场交易的结算。
在这个过程中只有开启交易(启动状态通道)和结算交易(销毁状态通道)是在链上进行的,而中间的一系列交易在链下进行的,这使得,这种方法适合交易对象固定且交易频率高的用户,这样能为用户省下大量交易费用,同样让主网上的交易大大减少。
但同样存在一些缺点,最明显的就是智能合约问题,这种方法只能转账交易,无法实现智能合约的交互,此外还有其他缺点如:拓展性差、参与双方需要保持在线等缺点。
在 Plasma 中,就是通过创建不同的子链(用于支持不同的业务需求),然后将主链上的交易执行交给子链进行,交易数据也会存储在子链上,但会定期将子链的状态根上传到 L1 主链上,从而实现链的扩容(链下)。
在上面的描述中,主要有几个问题:如何将交易执行交给子链、子链如何保证能将正确的状态同步到主链当中。
首先是交易执行如何交给子链。首先就是 Plasma 在主链上部署一系列智能合约用于锁定用户在在主链上的数字资产与保存、验证子链状态(默克尔树根)。用户将自己的资产发送给 Plasma 的智能合约,然后子链就会产生等值的资产给这个用户。用户就可以在子链上进行交易,如此就实现了将交易执行交给子链。
其次是子链如何保证能将正确的状态同步到主链当中的问题,这其实包含了几个子问题:
验证子链中出现的恶意行为首先是需要理解什么是子链中的恶意行为。在子链中能出现的作恶者有两个:用户 Alice 和运营者 Operator(负责创建和发布区块)。
当 Alice 想作恶时(实现双花),他想以自己账户余额更多时的状态进行提款,意图忽视后来的交易,以此向主链提出退出 Plasma 子链(需要包含一笔退出押金)。主链接收申请后放入列表,等待争议期结束。在争议期期间 Bob 发现了 Alice 的恶意行为,对于 Alice 的余额发起争议(Challenge,提交该笔余额被花费的证明),当主链验证发现 Bob 的争议是正确的,那么 Alice 的提款失败,同时他的退出押金被发送给 Bob。
当 Operator 想作恶时,主要就是发布了恶意区块(没有正确履行自己的义务),这可能有下面的情况
Plasma 的安全性主要依靠争议(用户提供欺诈证明,主链来进行裁决)保证,欺诈证明的提供需要链下完整的区块,而一旦 Operator 拒绝提供完整区块,那么欺诈证明就无法生成了, Operator 甚至能盗取用户财产。
例如:Operator 私自把 Alice 的币转给 Bob ,再从 Bob 处转给 Eve,最后 Eve 进行提款(实际上 Bob 和 Eve 都是 Operator 的账户)。其中 Bob 转给 Eve 的交易可以公开展示,但对于 Alice 转给 BoB 的交易数据扣留,那么人们就无法证明 Eve 的资金有问题,因为 Eve 的资金有问题需要溯源证明 Alice 转账给 Bob 的交易有问题(需要指出这笔交易的数字签名有问题),而 Operator 并没有发布完整的区块(我的理解是默克尔树叶子节点对应的交易的完整数据没有全部展示),人们就无法证明这个 Alice 给 Bob 的交易有问题。
对于这些 Operator 作恶,就需要用户及时退出了(官方作恶,只能跑路了)。
通过以上描述,优点无需描述了(就是链下扩容的那些优点),缺点就是:
在上面的描述中,我们可以知道 Plasma 存在着众多问题,所以在此基础上又出现了 Rollup 这一改进方法。Rollup 的设计方向和 Plasma 很相似:通过将大量交易数据打包(rollup)并与状态根一起提交到以太坊主网,以此让以太坊对提交状态验证提高交易吞吐量和降低交易费用。
个人感觉 Rollup 和 Plasma 的区别就是增加了打包(Rollup)这个部分,并因此以太坊的对于子链的验证方法也有了一些改变。
目前对于 Rollup 的实现又分为两个路线:OP(Optimistic Rollup)、ZK(Zero Knowledge Rollup)。首先我们知道 Rollup 最需要解决的就是数据可用性的问题和交易有效性问题,解决这两个问题就保证了 Rollup 的安全性。而 OP、ZK 就是用于解决这个问题的。
OP 则是采用乐观验证机制,其假设提交的数据都是正确的,然后这次状态的提交存在一个质疑期,用户可以提交欺诈证明来质疑这次状态,证明成功,链上智能合约将会回滚不正确的区块。ZK 则是采用了零知识证明的方法,只有链上的智能合约检查提交的数据和零知识证明,检查通过后,状态提交则认为是有效的。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!