路印——从2.0到3.0

路印协议

一、路印协议2.0及以前

交易流程图:


attachments-2019-10-7LWtQMjA5db68f052c18f.png

1,协议授权 用户授权给LPSC协议,使其能够转出用户想要销售的代币。但是不会冻结用户的代币,换句话说,在执行订单的过程中,用户依然而已自由转移自己的代币。

2,创建订单 用户创建订单,例如使用10A100B,并且指定一定数量的lrx作为矿工费

3,订单广播 钱包(用户)将刚才创建的订单及其数字签名发送到一个或多个中继(类似于中介的概念,矿工),中继会更新他们的订单列表,但是LPSC协议并没有规定各个中继如何定义自己的订单列表。

4,流动性共享 中继可以通过联盟链共享订单,当然也可以不共享,但是共享的好处在于能够加快交易速度并且优化订单的参与度。

5,环路挖矿(订单撮合)  矿工会通过撮合多个不同的订单,尽力按照用户给定或者更好的兑换率促使订单完全成交或者部分成交。环路撮合是路印协议能够为任何交易对提供高流动性的主要原因。如果实际兑换率优于用户指定的兑换率,利润部分由该环路中所有订单共享。作为回报,矿工也可以抽取该利润的一部分或者仅仅只收矿工费。

6,验证与结算 LPSC接收到环路订单之后会进行多次检查,以验证矿工提供的数据,决定该订单环路是否可以完全或部分撮合(取决于环路中订单的成交率以及用户钱包中的代币余额)。如果所有检查都是成功的,LPSC会自动将代币转给用户,同时支付给矿工和钱包相应的费用。如果LPSC判定用户的钱包余额不足时,交易量会按比例缩减:与取消订单(整个过程是单向的人工操作且无法撤销)不同的是,等到足够的代币存入钱包地址后,缩减后的订单会自动增加至初始订单量。

 

名词解释

 

环路撮合:如图

attachments-2019-10-5XJoy7sD5db68f1cb0d8e.png

 

联盟链/中继网络:一种用于订单及流动性分享的中继网络。当节点运行路印中继软件时,它们能够加入现有网络,通过联盟链与其他中继共享流动性。共享订单只需要1-2秒的区块时间。中继可以自行选择加入或者不加入这个联盟链。

 

路印协议智能合约 (LPSC)一套公开且免费的智能合约,可以用来检验从矿工处接收到的订单环路,代表用户无需信任地结算和转账代币,用手续费激励矿工和钱包,以及发布事件。中继/订单浏览器负责监听这些事件,以保持它们的订单和交易历史是最新的。

 

总体框架:

attachments-2019-10-7D9LWXcc5db68f4a47fcd.png

链下主要由Relay维护订单(Order Management)和完成订单的撮合(Settlement Engine)。完成撮合的订单,需要在链上记录(由链上的智能合约实现)。简单的说,2.0协议之前,采用的是链下撮合,链上记录的方式。在这种方式下,所有的交易状态记录在链上,链上的智能合约需要实现很多逻辑:

  • 检查订单的签名信息
  • 检查订单的填充率以及是否取消
  • 检查订单的时间
  • 计算费率
  • 在上述检查和计算完成后,完成token之间的转账

往往一个撮合中包括多个订单,完成这样的一笔撮合大概需要20w30wGAS费用。也就是说,在以太坊区块最大GAS 800w,出块速度是15秒的前提下,路印2.0协议的撮合性能大概是:每秒大约2笔撮合。

 

二、路印协议3.0

 

框架如下

attachments-2019-10-qfosvGBQ5db68f7212d29.png

采用零知识证明(ZKP)技术,路印协议3.0保留了部分2.0的功能,其所有的撮合逻辑都在链下完成(同样的,采用联盟链共享流动性)。每一笔撮合(Settlement)都会生成证明并提交到链上,证明链下的撮合正确无误。

 

路印协议采用和以太一致的账户模型,所有的账户的状态(余额)都记录在链下。

所有和状态相关的操作,都是在链下更改,提交Proof到链上记录。因为存在链上链下的状态同步,账户的任何操作有三个状态:

1/ Committed (操作已经提交)2/ Verified (该操作已经提供了相应的Proof3/ Finalized(之前的所有的操作都已经提交正确的Proof

以用户Deposit“充值的操作为例:

attachments-2019-10-3AOsgeQ55db68f9bc9f0b.png

用户转账到路印协议的智能合约,转账在链上确认(链上完成充值)。该操作的状态就是“Committed”。链下的Relay,监测到“Committed”的状态后,更改链下的状态,生成Proof,并将证明提交到链上,此时该充值操作的状态为“Verified” - 链下也已经完成充值。如果之前的所有操作都是Verified,那该操作的状态就是Finalized(也就是这个状态是确定的,不会被篡改的)。

 

为了支持DEX的业务场景,并结合ZKP的技术要求,路印3.0将链下的状态用三层的四叉Merkle树来表示:

attachments-2019-10-SGlLUnAJ5db68fbf0465a.png

第一层是N=20层的四叉树,维护DEX的所有账户信息(也就是能支持400w左右的用户)。

第二层是M=8层的四叉树,支持一个账户下的所有Token信息。一个Token一个叶子节点。

第三层是K=14层的四叉树,一个账户下某个TokenOrder信息。

 

所有的操作,都会更改这三层Merkle,完成状态的变化。路印3.0协议支持如下的一些操作:

1On-chain Deposits (在线充值)

2 On-chain Withdrawals(在线提币)

3 Off-chain Settlements (链下撮合)

4 Off-chain Withdrawals (链下提币)

5 Off-chain Order Cancellation(链下取消订单)

6 Off-chain Transfers (链下转账)

 

每一次order撮合,会引起Trade树根的变化,从而引起Balance树根的变化,从而引起Account树根的变化。各个中继就是负责维护各自的Merkle

 

在链上,虽然智能合约不再需要验证和记录撮合信息,但是,需要提供Order信息以及各种操作的证明。Order信息可以通过Calldata存储在链上。在链上验证Groth16Proof,还是比较昂贵的。一个Proof的验证,目前需要50w左右的GAS费用。在君士坦丁堡升级后,可以降到原来1/4左右。

为了进一步节省链上的GAS费用,路印3.0设计了“Batching”的操作处理(批量处理),也就是多个同类操作,一起生成一个Proof。多个同类操作,被打包在一起,称为“Block”(和区块链中的Block不是一个含义)。在足够多的交易的情况下,路印3.0TPS在目前的以太坊上达到了350。在君士坦丁堡升级后,TPS能达到1400。每笔交易平均下来的费用大约在1美分。

  • 发表于 2019-10-28 14:51
  • 阅读 ( 91 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
曹欢

区块链开发

1 篇文章

作家榜 »

  1. 社区运营-小以 623 文章
  2. 社区运营-小链 243 文章
  3. 涂晶 82 文章
  4. 于中阳Mercina-zy 79 文章
  5. 李晓琼 44 文章
  6. 兄弟连区块链培训 42 文章
  7. 刘言秋 38 文章
  8. 吴寿鹤 36 文章