Chia blockchain 流动性池的设计与实现原理

  本文主要探讨一下Chia 区块链的流动性池的设计以及实现原理,其中如果有不对的地方,大家可以相互交流,共同进步。

众所周知,流动性池的设计源自于ETH网络上面的UNISWAP,主要的特点为:

       1 X*Y=Z,X和Y分别代表两种不同的TOKEN,Z代表他们的乘积。Z是不变的,变化的部分是X和Y。

       2 用户购买或是出售TOKEN的时候,交易的对象是流动性池,而不是用户。

       3 用户可以向流动性池质押两种TOKEN,来提供流动性,同时获得流动池的TOKEN来做为回报。

       4 用户取消质押的时候,同时返还这两种TOKEN。

  UNISWAP流动性池的设计主要使用ETH的solidity,可以借助ETH的账户模型,在solidity中得到地址的余额,然后再加上一些的逻辑运算,就可以完成用户和流动性池之间交易。

  Chia区块链跟比特币类似,基于UTXO模型,有一定的编程能力,链上开发语言是Chialisp。但是Chialisp中无法得到某个地址的余额,也无法得到某个钱包的所有地址。这样的困局就导致了无法完全通过Chialisp来实现Swap的功能,必须要有PYTHON或是其它程序开发语言一起配合来完成查询余额,计算,转账等操作。

  这样就会带来一个严重的问题,就是在Chia区块链下面的流动性池的实现,需要两种语言同时配合。Chialisp是链上语言,PYTHON是链下语言,如果把整个SWAP系统开放源代码,那么用户也没有办法校验SWAP提供商运行的代码就是在GITHUB上面开放源码的那一套代码。所以SWAP提供商的信誉在这个时候就非常重要。

  即使有这样的很多不方便之处,但Chia区块链流动性池的功能也是很急需的。因为传统的订单BOOK的模式,无法给交易对提供充足的流动性,导致了交易双方的交易意愿很低,从而使整个交易活动接近于停止。

  那么,下一步的讨论就是如何使用PYTHON和Chialisp来实现流动性池的设计。

1 所需要的TOKEN

       1 XCH:链上标准COIN

       2 TOKEN A:暂时命名为ROSE,和XCH互换的TOKEN

       3 TOKEN B:暂时命名为SHARE,流动性池的权益证明,用户提供流动性以后,会得到一定数量的SHARE,用于证明用户的质押过程。当用户取消质押时,需要先退还该TOKEN,然后会得到对应的XCH和ROSE。

       4 TOKEN C:暂时命名为LPT,整个SWAP发行的代币,定期发放给为SWAP提供流动性的用户。

2 流动性池的生命周期

       1 初始发行:需要项目方自己来定价。假设ROSE的项目方,决定ROSE的初始价格为0.001XCH,那么ROSE的项目方就需要初始存入10XCH和10000ROSE,做为流动性池的初始流动性。为了保证项目的初始流动性,初始流动性中XCH的最低为10XCH。

       2 用户质押:在过一段时间以后,流动性池里面两种代币的比例发生了变化,变成了1XCH:1200ROSE。这个时候用户如果质押的话,就需要同时按1XCH:1200ROSE的比例同时存入两种代币,做为质押凭证,用户将会收到一定金额的SHARE。

       3 取消质押:用户想要取消质押,就需要将获得的SHARE归还给流动性池,然后流动性池将会按最新的代币比例返还给用户这两种代币。

       4 购买TOKEN:用户支出XCH或是ROSE,然后得到ROSE或是XCH。

3 流动性池的手续费

       1 每次交易,SWAP将会收取0.5%做为手续费,0.3%通过流动性池返还给流动性的提供者,0.2%归SWAP所有并且用于在公开市场回购SWAP的TOKEN。

       2 每次交易,用户需要支付0.0001XCH(最大值)为做手续费,来防止DUST攻击。

4 流动性池的激励机制

       1 凡事是给流动性池提供流动性的用户都可以获得SWAP发放的LPT

       2 SWAP将会使用一部分手续费变换为现金,用于支付LPT在其它交易所上市的费用,也会拿出来一部分手续费在公开市场上面回购LPT,余下的部分做为SWAP项目的运营资金

5 流动性池的设计原理

       1 计算流动性池中XCH和ROSE的余额

       2 假设用户花数量为A的ROSE来购买,通过X*Y=Z的公式,理论上面可以得到B数量的XCH

       3 花费包的交易:转移数量为A的ROSE给流动性池的ROSE地址,同时流动性池转移数量为B*0.99的XCH给用户和B*0.01的XCH给SWAP。同时用户需要支付0.0001XCH的矿工费。这两个交易需要同时打入同一个花费包里面。

       4 用户质押,取消质押跟上面原理一样。

6 流动性池的缺点

       1 目前需要PYTHON和Chialip两种语言结合实现。因为Chialisp无法得到地址的余额,导致了X*Y=Z的计算过程,只能依赖于PYTHON来进行计算,而PYTHON的代码是链下运行的,这样就无法使整个计算过程公开透明,也没有办法保证这个过程有相应的公证性,只能依赖SWAP运营商的信誉度。

       2 为了使PYTHON程序拿到更加准确的地址余额,必须使整个处理过程串行化,并且每个交易过程中间必须要有一定的时间间隔来确保查询出来的余额是准确的,这样会导致SWAP交易的频率会降低很多

       3 为了SWAP的交易速度,如果订单的交易金额占整个流动性的比例小于1%,则可以并行处理

7 预计发布时间:

       预计会在2022.03.10发布第一个测试版本。