干货

路印协议 3.0 ——使用 zkSNARK 扩展去中心化交易所

曾汨   |     |   1879 次阅读

宣布一件令人振奋的事情!今天我们发布的最新颖、最快速、最具前瞻性的协议——路印协议 3.0,能解决代币交易中速度及免信任之间的矛盾。

路印协议 3.0 有两大主要优势:

  1. 大幅提高吞吐量降低成本
  2. 支持即时结算

整合以上两个优势后,这个协议将彻底颠覆以往去中心化交易所的交易体验。

完整的设计文档: https://github.com/Loopring/protocols/blob/master/packages/loopring_v3/DESIGN.md

基于区块链的资产当然要在区块链上交易啦!不然真的会很迷。既然有了不建立在信任基础上的密码学货币,这么珍贵、这么神奇的资产为什么还要委托给需要信任的中间人来交易?为什么还要交易 IOU(欠条)?为什么还要将资产从渗透整个金融领域的开放平台上移走?

很多人都禁不起这样的灵魂拷问。与此同时,中心化交易所状况频出,外部黑客攻击或是交易所监守自盗等问题让我们防不胜防,甚至连交易量的真实性也无从考证(不过,有人正试图弄清楚)。

坦白来说,在中心化交易所进行数字货币和代币交易确实有(过)优势——因为在去中心化交易所上交易不(总)是那么有趣且好上手的。通常会面临用户体验、流动性及可扩展性这三大障碍。不过我们这群小伙伴,特别是以太坊 DeFi 社区的开发者们,在加强流动性及创建媲美 web 2.0 时代应用的 dapp 方面,已经取得长足的进展。

然而可扩展性问题依然有待解决,特别是涉及到免信任型交易。我们必须面对这样一个现实,如果无法大幅提升去中心化交易所的可扩展性(或是从底层提升以太坊的性能),就无法解决这个问题。考虑到这一点,路印协议开发团队在过去半年时间里正在着重解决可扩展性问题。

我们最新发布的路印协议 3.0,直击可扩展性问题这一痛点,并使用最有效的解决手段——零知识证明

零知识证明概述🔐

我们一直在思考如何解决可扩展性问题。这一点从一开始就在影响我们的设计决策(从 1.0 到 2.0)—— 实现一种结合链下订单消息传递及链上结算的混合模型,也就是说,尽可能将大部分事务放到链下,只在必要时使用区块链来确保关键事务的正确性。

协议 3.0 有点像是把这种逻辑推向了极端。现在,我们能在链下做更多事,包含结算 ......同时确保安全性。

为实现这一点,我们在协议 3.0 中引入了零知识证明(ZKPs)。它是一种密码学工具,能够让某个 证明者 自证“已经完成某项计算或知道某个密钥”——同时无需将计算结果或密钥透露给 验证方

零知识证明听起来对隐私保护有很大作用对不对?举例来说,某个投资俱乐部对于会员的要求是身家超过 X 美元,我可以通过零知识证明来证明自己达到了这个入会门槛,同时不需要透露具体的金额;这个俱乐部也能肯定我说的是事实。这听起来有点复杂,不过该技术已经被用于一些注重私密性的加密货币,如 ZCash 。

除了隐私保障,零知识证明也有助于提升复杂系统的可扩展性。除了自证身家超过 X 美元之外,作为一个去中心化交易所的所有者,我还能够证明用户的账户余额是否正确(无需展示具体金额)、用户的交易是否正确结算、用户的转账是否完成等等——你能想到的一切关于去中心化交易所的操作。这些操作都不是通过智能合约完成,而是直接在链下进行,然后生成一个能让所有人都相信我所言属实的证明。

这就是协议 3.0 的目标:以不牺牲安全性为前提进行扩容

在协议 3.0 中,账户余额和历史交易等相关数据都是通过默克尔树保存在链下,让用户之间的交易结算能够在链下以更新默克尔树的方式完成,避免耗时又昂贵的链上交易。

同时,这也不会造成安全性下降的问题,因为零知识证明能够保证这些交易如宣称那样是真实且已执行的。协议 3.0 仍然是 100% 无中间方,对终端用户来说充分安全的——即使存在恶意的去中心化交易所运营者,他们也无法偷走代币。

所有计算都在链下完成的情况下,我们就能减少与以太坊主链的交互频率,减轻网络负载。事实上,去中心化交易所提交到以太坊区块链上的东西就是前面提到的证明——证明去中心化交易所在链下所做的计算都是正确的。通过零知识证明,尤其是 zkSNARK (我们选用的一种零知识证明技术形式),验证者或者(在路印协议中)用于验证证明的智能合约都能够高效快捷地进行验证(毫秒级)。

路印协议 3.0 概述📝

任何人都能在路印协议上创建一个新的交易所——由所有者负责处理业务相关的功能,比如注册代币、设置维护模式、设置运营者等等;由运营者负责创建、提交、验证区块。

这里指的区块不是以太坊链上的区块,而是单指与去中心化交易所上的事务(如交易结算)相关的数据段。这类区块会依据被打包的交易进行状态变更,将默克尔树从当前状态更新为新状态。接着需要证明区块中打包交易的正确性并向以太坊主网提供证明,这一步是通过零知识证明实现的。

为了最大化吞吐量,协议 3.0 目前只支持链下结算。所有余额都保存在默克尔树上;用户给我们的智能合约存入代币或者取出代币,余额在默克尔树上更新(注:你无需依赖中间方,因为整个过程都是免信任的,没有资金丢失的风险)。

独立运行

区块提交必须依序进行,以便默克尔树依序从已知旧状态更新为新状态。为了让各自独立的参与方可以同时进行结算,协议 3.0 允许创建独立的交易合约;也就是说,每个合约都是独立运行的,用户的账户及订单不能与其他合约共享。

联合运行

另外,去中心化交易所也能选择共用一个交易合约,以便共享订单和用户帐户——如果他们愿意的话。这样一来,这些交易所就不用各自建立基础设施来创建区块并生成证明了。

运营者可以是个简单的以太坊地址,也可以是允许多个运营者联合 提交/验证 区块的复杂合约,这些都能由交易所自行设置。

这种协作式的运营者合约也能用于实施链下数据可得性系统——一个简单的方案是,各个运营者需要在区块提交前进行签名,可以通过运营者合约检查其有效性。只要其中一个运营者守信用并真正分享数据,就能保证数据的可得性。

同样的,交易所的所有者也可以是合约!例如,交易所所有者可以是某种治理合约或去中心化自治组织,能够同时管理多个去中心化交易所。这些都是由去中心化交易所自己决定的,而且可以按需进行更新迭代,同时不会扰乱交易所业务。

有状态+用户粘性

基于以上分析,我们的设想是,大多数交易会通过一个合约完成,其中,交易所 所有者/运营者 均由合约来充当。因为区块内包含了所有去中心化交易所的操作,所以这样做既能增加资产流动性,也能有效提升交易效率、降低延时、增加吞吐量。

还有很重要的一点是,这样做极大地增加路印协议 “有状态” 的可能性——能够保存有价值的状态、用户、流动性等等。一组良好协作、蓬勃发展的去中心化交易所很难被解散或分叉,这也增加路印协议的安全性,永续性,及价值。

[如何将一组去中心化交易所构建在同一个合约上可以实现灵活的业务逻辑并分享 订单/手续费,详情请见此处。]

最后还有一点,考虑到账户余额是在链下结算的,交易者使用(且喜欢)交易框架,会产生原生的用户粘性。因此,性能良好的去中心化交易所、或是共用同一个合约的去中心化交易所群组,都能够聚集一批忠实用户。我们对此感到期待,因为我们的目标就是在此协议上支持成功的去中心化交易所 。

吞吐量及成本数据🐆

让我们听听好消息——究竟提升了多少性能?

根据目前的实现情况而言,在不提供链上数据可得性的情况下,在以太坊上可实现每秒 450 次交易;在提供链上数据可得性的情况下,在以太坊上可实现每秒 80 次交易。相比之下,前几版路印协议(和其他去中心化交易所)只能达到每秒 2 次交易左右。

-不包含创建链下证明的成本(保守估计 $0.005,实际上应该更低)。-

这只是个开端,吞吐量在短期内还会大幅提升。近期还会引入更高效的哈希函数以及更简单的费用环路,在不提供链上数据可得性的情况下,我们能够达到在每个以太坊区块完成 10,000–20,000 个订单环或是每秒完成 1000 次交易

[更多性能数值详见此处。]

这非常令人兴奋。我们终于有了能够实现去中心化交易所商业化的工具,帮助去中心化交易所与中心化交易所抗衡

当然,如果有数百万计的资产实现代币化,并且需要不断转手时,我们离所需的吞吐量仍然还差几个量级。不过,我们对此还是很有信心的,毕竟还有零知识证明等二层扩展方案,和分片等一层(以太坊)扩容改进方案。

[链上数据可得性指的是去中心化交易所的所有历史纪录都能在以太坊主网上查到,任何第三方都可以在任何时间点重构交易所的状态;更多细节详见此处。]

其他功能🎄

扩展性是协议 3.0 的关注点及驱动力,除此之外还有其他一些很棒的功能已经实现。部分功能继承/优化自协议 2.0 ,还有一部分只适用于协议 3.0 。点击这个文档能看到整个功能列表;要查阅完整的说明则建议阅读设计文档。有以下几个要点:

  • 可以选择是否提供链上数据可得性——去中心化交易所可以选择放弃这个功能,以此增加吞吐量并降低手续费。
  • 默认支持所有 ERC20 代币及 ETH ,ETH 不需要转化为 WETH
  • 所有代币都能用作交易手续费,而 LRC 可以从中得到好处。(译者注:因为不管使用什么代币,手续费中都会有一部分交给合约,从市场上买来 LRC 并烧掉)
  • 允许匹配部分订单(即只吃某订单中的一部分),并自动缩放订单。
  • 加强双重授权功能,避免 订单/交易 被中间方窃取(基于协议 2.0 做的加强)。
  • 独家支持订单别名功能。
  • 去中心化交易所的运营者可以 LRC “购买” 信誉,也就是实现利益绑定。
  • 支持 “维护模式”——去中心化交易所的运营者能购买一定停机时间来升级后端。
  • 保证去中心化交易所的运营方能够准时完成任务(特别是处理存取款)的内嵌机制

LRC 的其他附加功用🚴🏾

上文提及的功能不会一一展开,我会讲讲最后三个。这三点很有趣,因为:

A. 他们有助于确保去中心化交易所更加公平公正地运转

B. 随着机制优化,LRC 会具备更多原生使用价值

质押

创建交易所需要质押 LRC 。任何人(不只是所有者和运营者)都能在交易所质押 LRC;只有在交易所正常关闭且所有使用者的账户余额都取出之后,才可以取出押金。

押金能保证交易所正确运行。之所以能做到这一点,是因为 1)如果没有及时生成区块证明,押金就会被销毁,2)交易所自动将资金归还给用户后就会关闭,只有这时用户才可以取回押金。如果缴纳大量押金的交易所作恶,他们将损失惨重、一无所获,因为运营者无法监守自盗。

注意:因为协议默认具有安全性,所以不是强制要求质押。不过,质押能实现风险共担,而且用来区分不同的去中心化交易所;重要的是,质押可以防止用户遭遇数据可得性问题。当不需要实施数据可得性的时候,即使只有运营者能重构默克尔树,质押机制依然能够保证所有资金会正确返还给用户,否则交易所就会失去押金。

维护模式

交易所所有者可以让交易所暂时 处于暂停状态。例如,在更新交易所后台的时候就能使用这个功能。

交易所所有者能购买停工期,也就是通过销毁 LRC 换取停工期;停工期还可以通过多次购买来得到延长。

这个功能是必需的,因为运营者 必须 处理上链请求,否则交易所就会进入不可逆的退款(关闭)模式。维护模式允许交易所暂时停止处理上链请求(避免处理不及时)。不过,用户请求旨在确保用户可以在需要之时取款——因此,收取维护费的目的是确保交易所不能无限期停留在维护模式。

及时执行存/取款

每个人都讨厌等待,特别是涉及到钱的时候。

如果交易所运营者没有及时处理用户的存取款请求,手续费就会直线下降;如果运营者没有在用户发起取款请求后自动将代币转入目标地址,就会被罚款(从押金里扣)——其中 50% 的罚款用于奖励愿意处理该请求的其他运营者(用户可以选择自己上),另外 50% 则销毁。

事实上还有个功能

订单别名非常酷,这里多做一点解释。订单别名允许交易者在多个订单中重复使用相同的交易历史时段。除了能够更安全地更新订单,避免新老订单同时达成交易之外,还支持一些有趣的吃单逻辑。

举例来说,用户能够在同一个交易 “时段” 内创建一个 “用 X 枚 代币 Z 购买 N 枚 代币 A 或 M 枚 代币 B (或其他代币)” 的买单;在这种规则情况下,用户不会花费超过 X 枚 代币 Z ,但是能买到 [0, N] 枚 代币 A 且/或 [0, M] 枚 代币 B

该功能的实际用例是使用某种代币来购买任意一种稳定币,或是使用某种代币来购买 ETH 或 WETH 。在这些情况下,用户可能不在乎自己会买到哪种币,只是想增加达成交易的概率。

手续费模式依旧灵活

协议 3.0 依旧沿用了协议 2.0 中介绍的手续费模式,交易者能够继续支付任意一种代币作为手续费,去中心化交易所则赚取这些手续费,但 LRC 受到协议层通缩设定影响,总供给量会随着网络使用量的增加而减少。

如果去中心化交易所用起来像中心化交易所💸

如一开始提到的,去中心化交易所的交易体验会发生巨大变化; 事实上,我们以后可能都不会刻意提到 “去中心化交易所”这个词——未来,加密交易只会在去中心化交易所上进行。协议 3.0 就是这项转变的开端。

将来,基于路印协议 3.0 的去中心化交易所会带来如去中心化交易所那样快速便捷的交易体验。结算也能及时获得签验。

交易流程

用户通过账户在交易所创建订单,订单会被记录在去中心化交易所的订单簿上。

去中心化交易所将会匹配订单,并通过环形匹配私钥和双重授权密钥签署订单。订单环中订单完成流程如下:

  • 订单环结算完成之后,去中心化交易所的图形用户界面会立即更新,订单会显示 “已完成” 状态,但还未得到验证。
  • 去中心化交易所将订单环发送给运营者;收到订单环之后,运营者必须尽快提交区块。
  • 在最大容许时间限制内,运营者会生成证明并验证区块。

订单交易完成之后,去中心化交易所会显示“已验证”标识。订单有以下几种状态标识:

  • 在订单簿中 “未匹配
  • 由去中心化交易所 “完成匹配
  • 已提交” 入区块
  • 通过生成证明 “完成验证
  • 一旦该订单所在区块得到最终确定,即表明该订单得到 “最终确定”(包含该订单环的区块以及之前的所有区块均已被验证)

只有区块得到最终确定之后,订单环的结算结果才真正实现不可逆转。

挑战🌔

我们依然面临一些挑战,其中最值得注意的就是 SNARKs 需要进行“可信设置”;我们不会在此深入探讨,只要知道有些可信设置如果执行不当(随机性不足),从理论上来说会带来构建虚假证明的风险。好消息是,这个问题已经几乎被解决——Sonic:近似免信任的启动设置

相关思考🔭

路印协议 3.0 前景非常鼓舞人心。这个世界似乎终于能够开始正视去中心化交易所,认识到它将在未来代币化的世界中成为价值转移的途径;我们很荣幸能贡献一份心力。

去中心化交易所领域的革新速度也让我们非常吃惊。目前出现许多协议和项目,让我们意识到自己虽然已经是链圈的 “老人” 了,仍然要持续保持行动及思考,不然就会被淘汰;对此我们仍然保持谦逊且积极的心态。

再呼吁一次,请查阅我们协议 3.0 完整的设计文档,下周我们将开源代码库,请保持关注。在未来一两个月内,我们预计会部署测试网络,并在半年内发布主网。

如果你有意愿协助我们一起开发协议 3.0,请联系 foundation@loopring.org 。

致谢🏅

感谢所有让零知识证明在以太坊上成为可行的贡献者们。特别感谢 BarryWhitehatHarryR 进行的汇总和整合工作;感谢 Sean Bowe 及 ZCash 团队的推进,以及我们后续十分期待能一起合作的 Matter 实验室团队;当然不能忘了感谢 Vitalik 在这个领域的研究

我们还要感谢自家人 Brecht Devos,他超乎常人的学习及编码能力,让他在协议 3.0 上做出许多卓越的贡献。

路印协议 3.0 设计

文档👈🏼:https://github.com/Loopring/docs/wiki/Loopring3_Design


原文链接: https://medium.com/loopring-protocol/loopring-protocol-3-0-zksnarks-for-scalability-845b35a8b75b
作者: Matthew Finestone
翻译&校对: IAN LIU & 闵敏

本文由原作者授权 EthFans 翻译及再出版。


你可能还会喜欢:

干货 | 零知识证明: 抛砖引玉
干货 | 运行在区块链上的交易所
观点 | 去中心化交易所——交易者的避风港

 
0 人喜欢