Coinswap 交易所

简介

该文档描述了Constant Product Market Maker Model代币交换协议在IRISHub上的实现。

Coinswap支持Token对IRIS、Token对Token的兑换,整个兑换过程完全由链上自动完成,你可以在IRISHub上使用多资产管理功能。

通过Coinswap交易之前,需要做市商以当前市场价格(以IRIS代币为基准)抵押代币到流动性池,之后两种代币的汇率将根据链上兑换行情产生实时变化。当流动性池中的兑换比例和当前市场上不一致,套利者就会有利可图,他们通过兑换另一种代币,从而使汇率接近市场价格。

兑换过程中,将扣除3/1000的手续费,重新加入到流动性池中,作为做市商提供流动性的回报。做市商可以随时取回自己的代币而不需要一个锁定期,这在挤兑情况发生时,做市商及时撤出抵押资金会很有用途,避免造成过大的损失。所以流动性池中抵押的代币数量越大,兑换过程中造成的汇率变化才相对稳定,进而促使做市商的收益率越大。

概念

流动性池

存放抵押代币、无私钥控制的系统账户,该账户主要包含三部分,IRIS、Token、流动性证券(作为做市商持有流动性的凭证,并且可以转让)。每种代币(除IRIS)都有各自的流动性池,以便计算两则的相对价格。

流动性

流动性池中可以相互兑换的两种资产,向流动性池中抵押这两种资产,可以认为是为流动性池提供流动性,在取回抵押资产时,可以自动获得用户兑换交易时收取的相关手续费

做市商

任何向流动性池抵押代币的个人、组织、机构。

做市公式

采用恒定乘积作为做市公式:x * y = kx代表x代币的数量,y代表y代币的数量。在兑换过程中,k值保持不变,只有做市商增加/减少流动性时,该值才会变化。

操作

  • 增加流动性

    做市商为了获取兑换过程中的手续费,可以通过抵押自己的代币到流动性池中,主要包含两种情况:

    • 创建流动性池

      如果当前链上不存在该代币的流动性池,做市商需要根据当前市场的行情,按比例抵押固定数量的代币和IRIS,这一步相当于初始化流动性池,并为代币定价。做市商如果不按当前市场定价,那么套利者发现有差价可图,就会发生兑换行为,直至价格接近当前市场价格。在这个过程中,完全通过市场需求来调整代币的相对价格

    • 增加流动性

      如果当前链上存在该代币的流动性池,做市商抵押代币的时候,需要按照当前流动性池的兑换比例,分别抵押两种代币,计算时我们以IRIS代币为基准,计算出需要抵押的另一种代币的数量,如果抵押的代币比例不符合当前流动性池的兑换比例,交易将失败。这样就尽可能的避免因为套利者的存在而使做市商做市亏损。

    抵押完成之后,系统将锁定抵押的代币,并发放流动性凭证到用户账户,该流动性凭证同样可以参与转账交易。

  • 兑换代币

    当存在某种代币的流动性池后,用户就可以根据自己的需求发起兑换交易,在兑换过程中,需要从输入的代币中扣除3/1000的手续费(该参数可以通过governance模块发起提议修改)。从交易的分类上,总共有如下两种情况:

    • 购买代币

      如果用户购买某种固定数量的代币,系统将以购买的代币的数量和当前流动性池的存量情况,计算出用户需要支付的另一种代币的数量,用户支付的代币数量小于系统计算值,交易失败。

    • 出售代币

      如果用户出售固定数量的代币,系统将以出售代币的数量和当前流动性池的存量情况,计算出用户得到的另一种代币的数量,如果用户指定的另一种代币数量大于当前系统计算值,交易失败。

    在以上两种情况下,系统支持Token对Token的兑换,这要求这两种代币都存在抵押的流动性,系统将经过两次兑换,Token1 --> IRIS,IRIS-->Token2。每次兑换都将收取3/1000的手续费。

  • 减少流动性

    做市商抵押代币之后,收到了对应代币的流动性凭证,可以通过该凭证换回抵押的代币,并且获得做市奖励。提现流动性后,将从用户账户和流动池中销毁同等数量的流动性凭证。

附加说明

本模块没有提供command入口,只提供了相关的REST接口,可以通过该API发起以上交易,这里我们提供了一个Coinswap交易所示例,具体使用方法见说明。