作者 | Andreas Wallendahl译者 | Guoxi
责编 | 乔治
出品 | 区块链大本营(blockchain_camp)
可扩展性一直是以太坊的一大痛点,以太坊 2.0 的升级计划中关于可扩展性的改进占据了半壁江山。在以太坊 2.0 计划面世半年后的今天,可扩展性问题有所好转了么?
本文主要概述现有以太坊可扩展性解决方案以及这些方案所做出的折衷,同时为区块链开发人员总结了一些可以开箱即用的可扩展性解决方案。
可扩展性究竟难在哪里?
为什么可扩展性难题如此之难?我经常说到“可扩展性三元悖论( Trilemma ,也被称为三难选择)”,这是因为区块链必须在各个属性之间做出折衷。对于所有区块链来说,同时获得去中心化、可扩展性、安全性三个属性并非易事。
— — 以太坊联合创始人 Vitalik Buterin,2017年11月
比特币和以太坊等无需许可的公共区块链在第一层选择了优化去中心化和安全性这两个属性,因而它们在可扩展性上都表现不佳。
在这些区块链中,任何参与者都可以花费相当低的时间和资本承诺成为一名验证者,低门槛吸引了成千上万的挖矿节点参与到工作量证明中,保护区块链免受 51% 算力攻击,这种高度的去中心化带来了高度的安全性,按照今年 4 月份的数据来算,在以太坊区块链上执行 51% 算力攻击的成本为每小时 10 万美元,作为加密货币中的老大哥,在比特币区块链上执行 51% 算力攻击的成本为每小时 35 万美元。
得益于高度的去中心化和高度的安全性,以太坊备受人们的青睐,从而成为全球区块链经济中的首选,并为去中心化应用程序提供了一个良好的平台。
但是,以太坊在去中心化和安全性方面光鲜的背后则是在可扩展性上的巨大牺牲。虽说以太坊对于简单交易的理论处理速度上限为每秒 14-15 笔,但在当下,以太坊每秒只能处理大约 5 笔交易,一旦达到每秒 6 笔交易就会出现负载过重的现象。对于任何主流的消费者应用或金融应用来说,这个数量级都太小了,更何况是作为一个全球性的平台。
以太坊可扩展性最大的制约条件是,像以太坊这样无需许可的公共区块链需要每一个挖矿节点验证每一笔交易。
— — Josh Stark,《深入理解以太坊第二层可扩展性解决方案》
这么严重的问题,难道整个以太坊社区都坐视不管么?并没有,事实上以太坊基金会对以太坊 2.0 中的区块链基础设施升级有着一个完整的规划路线图,在其中可扩展性占据了重要的地位,也就是说在未来几年里以太坊将集中力量解决可扩展性问题。
但是远水解不了近渴,如果我们现在正在构建的应用程序需要可扩展性,那该怎么办呢?当然了,这取决于你具体的使用场景。即使将来以太坊 2.0 在可扩展性方面取得了巨大成功,你可能也不希望将所有的交易都发送到以太坊主网/第一层上,你还是会选择第二层解决方案。
如今以太坊仍存在以下3大痛点
- 速度慢:交易的吞吐量过低,有时交易的数量超过区块链的承载能力就会造成区块链网络中的高延迟。
- 价格昂贵:用户需要为每笔交易支付燃料费用,而随着交易数的增多,燃料费用以及以太币价格也随之水涨船高。
- 用户体验急需改善:用户必须签署每一笔交易,直到这笔交易被区块链确认后才可以发起下一笔交易。
可扩展性解决方案都有哪些?
接下来,我们来聊聊当前业界都有哪些已经落地了的可扩展性解决方案,这里我们只讨论最常用的 5 个,当然了这并不是全部,除此之外业界还有很多能提升区块链交易吞吐量的可扩展性解决方案,就比如说区块链链下计算,但由于篇幅原因这里不做过多讨论。
- 区块链链下交易签署(元交易):使用以太坊的公钥私钥对来在区块链链下签署交易,你可以把交易存储在本地或发送出去,甚至还可以以点对点的形式传递,最终交易被发送到区块链上时会按照交易的内容和数字签名更新区块链的状态(例如,增加投票( #votes ),更新以太坊预言机( oracle )价格)。
- 支付通道:交易对手之间在区块链链下建立的连接,支付通道可以用来执行交易,它只向区块链上传最终的交易结果。
- 状态通道:交易对手之间在区块链链下建立的连接,每笔交易都会更新当前的状态,最终的状态会通过一笔交易记录在区块链上。
- 侧链以及转接桥( Bridges ):通过交易转接桥智能合约以及相应的交易中继机制将包含以太坊完整功能的侧链锚定到以太坊主网上。
- Plasma 链:包含以太坊所有功能的子链,Plasma 链会定期将其状态的变化提交到根区块链(例如以太坊主网)上。
可扩展性解决方案的折衷
各个解决方案的安全性、吞吐量、可用性以及使用成本怎么样?下表做了详细的总结。
各解决方案的原理及具体实现
以下介绍的可扩展性解决方案都是开源且支持开箱即用的,你可以将它们用在去中心化应用程序中。不过需要注意的是,这些可扩展性解决方案都仍处于开发阶段,在你的应用主网上线之前一定要仔细审计它们的安全性。
为了方便使用,这里并没有列出那些还没有真正落地或是代码还未开源的可扩展性解决方案。
1、区块链链下交易签署(元交易)
- 用户使用以太坊公钥私钥对在区块链链下签署交易,公钥私钥对可以由 keccak256 哈希算法计算得出。
- 这笔签署后的交易可以存储在星际文件系统中( InterPlanetary File System,IPFS )或数据库中,然后分批加入到以太坊主网上的一笔笔交易中。
- 就比如说,如果你想要在以太坊主网上声明一些东西的所有权,你可以将这些声明汇总起来作为主网上的一笔交易,而不需要分别为每一个声明发起一笔交易。
- 你可以通过点对点日志存储系统 scuttlebot 来点对点地传递这笔交易,当接收方通过公钥验证交易有效时,交易就可以用作以太坊主网上智能合约的预言机输入。
- 如果交易的设置允许,那么智能合约在接收交易后可以执行交易中的内容。
- 在以太坊柏林开发者大会上,稳定币 MakerDAO 团队基于链下交易签署的方法提出了一种链下价格预言机的解决方案。
可参考资源
- Karl Floersch:哈希函数以及交易签署基础教程
https://cryptoeconomics.study/
- Mario Conti:基于链下交易签署的价格预言机
https://view.ly/v/Rt275OYzLCI1
- Vitalik Buterin:以太坊预言机
https://blog.ethereum.org/2014/07/22/ethereum-and-oracles/
2、支付通道与状态通道
状态通道
- 交易的双方将各自的区块链初始状态(例如,每一方的账户余额)锁定在一个智能合约中,你可以简单地把这个智能合约看作是一个多重签名的钱包。这样确保了在状态通道运行期间智能合约中的资金一直处于冻结状态,直到双方共同签名进行解锁。
- 交易的双方通过不断传递状态的更新(例如各自账户余额的更新)来进行交易。只要双方对最终的状态更新没有异议,他们随时可以共同签名来解锁智能合约中锁定的资金。
- 当双方完成交易时,他们会各自向智能合约提交状态更新。如果他们的状态更新相匹配,那么最终的状态(就比如说每一方的账户余额)会被写入到区块链中,通常情况下,这时的状态会与状态通道开启时的初始状态有所不同。
支付通道
状态通道只能用以太币以及 ERC-20 通证计价,而支付通道没有这种局限性。
支付通道精简的结构允许更大的吞吐量和更高效的设计,因为支付通道只会更新一个(或很少的几个)状态:净差额(the net balance)。
出现争议该怎么办?
- 根据协议设计,由交易双方签名的每个状态更新都会被分配一个唯一的随机数( nonce ),用以标识出每一次状态更新。在遇到争议时,以随机数较新的状态为参考。
- 在一次交易中,当甲方提交状态更新时,他的挑战期也随之开始。在此期间,乙方可以提交一个随机数较新的状态更新。如果乙方没有提交状态更新,挑战期计时器到期,智能合约将会选择随机数较新的状态(即甲方最后提交的状态)作为最终状态,将此状态上传至区块链并按照此状态解锁并返还资金。
现有的项目以及实现
- 以太坊雷电网络(Raiden):一种支付通道解决方案,它支持近乎即时、费用低廉且可扩展的交易。闪电网络是对以太坊区块链功能的完善,它兼容所有 ERC-20 通证。
- Connext:Connext 正在构建一个开源的点对点微支付基础设施。他们的第一款产品使用了以太坊区块链上的支付通道,支付通道可以将许多区块链链下交易汇集成数量很少的链上交易。
3、侧链以及转接桥
转接桥(或称中继)将交易信息从运行着各自共识算法的侧链传递到以太坊主网中。它会在主网上锁定资金或状态(或是同时锁定),并在侧链上运行去中心化应用程序收集并处理交易。
- 用户将其在以太坊主网上的以太币/ ERC-20 通证存入转接桥智能合约。
- 期间去中心化应用程序会一直运行,当所有交易完成后,用户可以在以太坊主网上取回自己的以太币/ ERC-20 通证。
- 用户只需要支付存款和取款这两笔交易的手续费。
- 对于在侧链上运行的交易,用户可能还需要支付较少的交易费用,侧链 Loom 和 POA 都存在运行成本,因而 Loom 向去中心化应用程序以 Loom 通证的形式收取手续费,POA 则要求用户在侧链上以 POA 通证的形式支付燃料费用。
- 想要消除侧链上的燃料费用,你完全可以把去中心化应用程序运行在一条私有区块链上,但这样做最大的一个挑战是,你需要吸引矿工来私有区块链上挖矿。
可参考资源
- 观看视频:Parity 转接桥在以太坊测试网络 Ropsten 和 Kovan 上使用以太币/ ERC-20 通证的测试部署
Parity Bridge Ropsten-Kovan Ether-ERC20 Test Deployment
- 区块链资产管理公司 Melonport 和区块链平台公司 Colony 已经开始实现并测试 Parity 转接桥,去中心化商业平台 Swarm.City 和区块链非营利组织 Giveth 正在测试转接桥上的消息传递机制
- 转接桥技术详解:
https://wiki.parity.io/Bridge
- 转接桥智能合约代码:
https://github.com/poanetwork/poa-bridge-contracts
现有的项目以及实现
- POA 网络是一个基于以太坊旨在为智能合约提供开源框架的平台。
POA 网络是以太坊的一个侧链解决方案,在共识机制方面它使用了权威证明( Proof of Authority,POA )。
- Loom 是一个以太坊第二层可扩展性解决方案,它专为社交、游戏等需要非常高吞吐量的去中心化应用程序设计。开发人员可以使用 Loom 软件开发工具包( SDK )建立一条专为可扩展性优化的侧链:去中心化应用程序区块链(dAppChain),其使用了 DPoS 共识机制。
- SKALE 的弹性侧链继承了标准侧链的全部优点,同时它还提供完全去中心化网络带来的安全保障。弹性侧链具有性能强大、可配置、兼容以太坊/ Web3 协议的特点。
4、Plasma 链
Plasma 链技术概览
- 初始化 Plasma 链,编写智能合约,并将其提交给根区块链;
- 交易都在 Plasma 链中运行,Plasma 链会定期向根区块链提交数据(Plasma 链中的区块哈希值);
- Plasma 链的共识规则建立在防伪证明( fraud proofs )上。如果某一区块是无效的,任何人都可以提交区块无效的证据来回滚区块链;
- 每条 Plasma 链都可以设置独有的规则,以便对特殊用途的去中心化应用程序做出优化。
现有的项目以及实现
正在开发 Plasma 链的团队:包括 FourthStateLabs、OmiseGo、Kyokan 和 Plasma 团队。
- Kyokan 最小可行 Plasma 链:为了方便开发人员快速上手,Kyokan 面向支付场景实现了最小可行 Plasma 链( minimal viable plasma,MVP )。
- Plasma 团队:Plasma 团队致力于为整个以太坊社区提供开源的 Plasma 链实现,他们的使命是通过探索 Plasma 链的全部潜力来推动第二层可扩展性技术的发展。
以上为以太坊可扩展性解决方案的原理及具体实现,你看好哪一种?或者说你还是否看好以太坊,请留言告诉营长吧