在这两个月,我们有幸见证了路印 3.0 的协议发布,并于 Github 上开源了其 最新技术设计 和相关实现。这次 3.0 的发布是路印在去中心化交易网络协议中的一个大进步,它结合了创新的区块链技术和零知识证明( ZKPs )加密大幅提高吞吐量,并且可以部署在任何支持智能合约的平台上。
相比于 2.0 设计, .0 提供了 2 种模式的去中心化协议,分别是开启数据可用性和关闭数据可用性模式,前者提高了 40 倍吞吐,后者提高了 225 倍。
除了 3.0 以外,还发布了一个新型拍卖协议 Oedax ,这两者正在为去中心化交易所的扩容探索新的路径。
本文将从技术逻辑和技术细节入手,让小白用户也能快速搭建去中心化交易所。
一、使用新型 Merkle Tree 保存账户、余额、成交历史
Merkle Tree 广泛应用于众多分布式应用中,早在比特币时代,就被用来做交易的 SPV 证明,方便轻节点校验交易存在性。而在许多可编程智能合约平台里,比如以太坊, Merkle Tree 还常常用来存放智能合约数据。
在 3.0 的设计中,为了更好的支持 Off-chain 和 On-chain 两种模式,开发人员设计了一个新型 Merkle Tree ,主要用来组织 Account 、 Balance 以及 TradeHistory 三者之间的关系和数据,并提供快速验证的能力。
从上图不难发现,一个账户下可以支持多种 Token ,而 Loopring 生态系统中的每个参与者都在同一个树中拥有一个账户。同时 3.0 中采用账户级别的 nonce 设计,而不是 Token 级别的 nonce 设计。
事实上,在以太坊的账户模型里,也是使用账户级别的 nonce 设计, nonce 值可以简单理解为该账户所有的交易数量。但是不同于以太坊,路印的 Merkle Tree 和账户模型中考虑了多种 Token 以及 Off-chain 请求。
每一次交易都会为用户修改 3 个 token 余额,包括 tokenS 、 tokenB 和 tokenF 。该设计带来的最大好处就是每次交易操作的代价都较低。对于每一笔交易,账户本身所在的 Merkle Tree 修改只涉及到一条 Merkle Path 。虽然 Balance Tree 需要修改 3 次,但是由于 Balance Tree 本身比较小,代价同样较低。
二、三种 Block 状态
为了让 Merkle Proof 的证明生成并行化, 3.0 的架构中给区块设定了三种状态,分别是 Committed 、 Verified 和 Finalized 。
其中, Commited 的 Block 表示该区块已经上链,但是未能被 Proven 。 Verified Block 表示该区块已经提交并通过验证,但是尚未验证此块之前的所有块,而 Finalized Block 则表示该区块和该块之前的所有块都应被验证。我们会在 第五节 的案例中为大家介绍如何利用这些 Block 的特性创建一个去中心化交易所。
在 3.0 的设计中, Proof 可以不按顺序提交。 Proof 随时可以生成,但是直到最大证明生成后才真正有效。比如在比特币里,我们需要在至少 6 个块以后才能认为交易的 SPV 证明是不可篡改的,在以太坊里由于出块速度的不同,这个最大证明时间可能为 12 个区块以上。
或许有部分用户担心资金丢失的风险, 在 3.0 的设计架构中,最差的情况也就是发生区块和状态回滚。所有之前请求的块和对应交易内容需要被重新执行,证明也会重新生成。但是相比于 Merkle Proof 并行化带来的收益,这点回滚成本可以忽略。同时, Merkle Tree 的回滚可以通过内容寻址的特性来快速完成,浪费的代价仅仅是少部分的存储容量。
三、五种 Circuit 排列
3.0 的设计中,还支持 5 种 Circuit 排列:
① Ring Settlement
② Deposit
③ Off-chain withdrawal
④ On-chain withdrawal
⑤ Order Cancellation
这五种 Circuit 覆盖了所有 Circuit ,不管是否支持链上数据可用性。同时,为了减少证明时间,还为这几种 Circuit 设计了动态的 Block 配置。
四、性能测试结果
根据官方的测试结果,我们可以发现, 3.0 的性能相比于 2.0 有了一个甚至两个数量级的提升,而每笔交易的 Gas 费用则减少到了原来的几十分之一甚至 1% 以下。这对于去中心化交易所来说无疑是具有致命诱惑的。
五、基于 3.0 快速搭建去中心化交易所
第一步,设置交易所
Loopring 合约提供了完备的接口,你只需要发送一笔交易调用 Loopring 合约上的 createExchange ,就可以创造出一个全新的交易所合约。
第二步,交易
① 用户可以使用交易所账户创建订单,订单将会被添加到 DEX 的订单薄中。
②DEX 将订单与另一个订单进行匹配,并使用 ring-matcher 私钥和订单的 dual-author 密钥进行环签名。
③ 在 Ring Settlement 结束后,订单可以显示为已填写,但尚未验证状态。
④DEX 将 Ring 发送给交易所的运营商,由于这些 Ring 将要在合理时间内完成,因此运营商架将会在收到 Ring 之后立刻调用 commitBlock 操作。
⑤ 操作员在允许的最大时间内生成证据并调用 verifyBlock 接口。
⑥DEX 现在可以显示额外的 “ 已验证 ” 表示以填写订单。
第三步,订单状态与不可逆
每个订单都会有以下几种状态:
· Unmatched :不与某一个订单簿匹配
· Matched :与 DEX 匹配
· Commited :已经调用 commitBlock 并成块
· Verified :在一个块中验证
· Finalized :该块包括其之前的所有块都被证明
只有处于最后一个 Finalized 状态的数据才是真正不可逆的。我们可以从上面的流程发现,相比于 2.0 的协议, 3.0 在交易所的部署上越发简单快捷, 甚至小白用户都可以部署自己的去中心化交易所!
随着 3.0 的发布和相关合约的升级, TPS 和 Gas 费用不再是制约发展的主要瓶颈,现有的 TPS 已经可以满足大部分的去中心化和中心化交易所的场景。
-END-
作者:区块链技术专员
声明:本文为作者独立观点,不代表区块链研习社立场,亦不构成任何投资意见或建议。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 因为它,中心化交易所要慌(黄)了吗?
- [译] 去中心化交易所 (DEX) 协议整理
- 区块链3.0时代 多中心化交易所形态
- 如何在去中心化交易所中(DEX)集成0x协议
- 通过 Go 在去中心化交易所OceanOne上挂单买卖Bitcoin
- PHP比特币开发教程:在去中心化交易所OceanOne上挂单买卖比特币
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C# 6.0本质论
[美] Mark Michaelis(马克·米凯利斯)、[美] Eric Lippert(埃里克·利珀特) / 周靖、庞燕 / 人民邮电出版社 / 2017-2-1 / 108
这是C#领域中一部广受好评的名作,作者用一种易于理解的方式详细介绍了C#语言的各个方面。全书共有21章和4个附录(其中哟2个附录从网上下载),介绍了C#语言的数据类型、操作符、方法、类、接口、异常处理等基本概念,深入讨论了泛型、迭代器、反射、线程和互操作性等高级主题,还介绍了LINQ技术,以及与其相关的扩展方法、分部方法、Lambda表达式、标准查询操作符和查询表达式等内容。每章开头的“思维导图”......一起来看看 《C# 6.0本质论》 这本书的介绍吧!