SunSwap v3兑换简介
SunSwap V3兑换协议核心概念: 做市商原理、流动性池及兑换
Last updated
SunSwap V3兑换协议核心概念: 做市商原理、流动性池及兑换
Last updated
尽管SunSwap V2在去中心化交易领域取得了巨大成功,但它也存在一些局限性。其中一个主要问题是流动性的利用率低。SunSwap V3引入了集中资金利用率的概念,允许流动性提供者将资金集中在特定价格范围内。这意味着他们可以更有效地提供流动性,并在价格波动较大的区间内获得更高的收益。
为了解决这个问题,SUN.io团队开发了SunSwap V3。SunSwap V3于2023年6月推出,引入了一种新的交易模型,称为"集中流动性"。在SunSwap V3中,流动性提供者可以选择在特定价格范围内提供资金,而不是将资金固定在一个交易对中。这样可以提高流动性的效率,并为交易者提供更好的价格选择。SunSwap V3引入了动态手续费模型,使流动性提供者能够在不同价格范围内设置不同的手续费率。这样可以提高流动性提供者的收益,并激励他们提供更多的流动性。
基于恒定乘积公式来推演兑换的逻辑, 以x和y代表两种代币(假设为X和Y)的数量,则:
L 被称作流动性。池子中的流动性是两种 token 资产数量的组合。我们知道,按照公式,两种代币数量乘积为k,因此我们可以用来衡量池子流动性。L 实际上是x和y的几何平均数。
y/x是token0和token1的价格。由于池子里两种代币的价格互为倒数,我们在计算中仅使用其中一个(SunSwap V3使用的是y/x)。
同样的L也表示了输出数量的变化与的变化关系:
证明:
Factory
主网合约地址: TThJt8zaJzJMhCEScH7zWKnp5buVZqys9x
nile测试网合约地址:TUTGcsGDRScK1gsDPMELV2QZxeESWb1Gac
SwapRouter
主网合约地址: TQAvWQpT9H916GckwWDJNhYZvQMkuRL7PN
nile测试网合约地址:TFkswj6rUfK3cQtFGzungCkNXxD2UCpEVD
NonfungiblePositionManager
主网合约地址: TLSWrv7eC1AZCXkRjpqMZUmvgd99cj7pPF
nile测试网合约地址:TPQzqHbCzQfoVdAV6bLwGDos8Lk2UjXz2R
我们利用TronWeb与合约交互, 初始化TronWeb实例后, 就能很方便的与线上合约交互
获取流动性地址
名称:getPool(address,address,uint24)
调用合约:Factory
参数:token0地址,token1地址,fee率
返回值:pool的地址
获取pool的信息
名称:slot0()
调用合约:pool合约(通过factory可以获得该合约地址)
参数:无
返回值: 1、当前价格(获取的价格进行平方除以2的192次方获得当前价格);2、当前所在tick;3、观测值数组的最新更新索引;4、当前存储的观测值的最大数量;5、在观察中触发的下一个要存储的最大观测值数;6、当前协议费占提款时掉期费的百分比;7、池子是否已锁定
获取用户tokenId
名称:tokenOfOwnerByIndex(address,uint256)
调用合约:NonfungiblePositionManager
参数:用户地址,用户的第n个流动性证明
返回值: tokenId
获取用户流动性
名称:positions(uint256)
调用合约:NonfungiblePositionManager
参数:tokenId
返回值: 1、nonce;2、tokenId授权地址;3、池子中token0地址;4、池子中token1地址;5、池子fee率;6、选择的position的最低值;7、选择的position最高值;8、流动性;9、10、截至对单个头寸的最后一次操作时总头寸的费用增长;11、12、截至上次计算,该头寸欠多少未收集的代币
交易
名称:exactInput(ExactInputParams)
调用合约:SwapRouter
参数:[path的encode,用户地址,deadline]
添加流动性
名称:increaseLiquidity(IncreaseLiquidityParams)
调用合约:NonfungiblePositionManager
参数:[tokenId,token0添加的数量,token1添加数量,token0最小添加量,token1最小添加量,deadline]
降低流动性
名称:decreaseLiquidity(DecreaseLiquidityParams)
调用合约:NonfungiblePositionManager
参数:[tokenId,需要移除的流动性,获得最小token0数量,获得最小token1数量,deadline]
获取奖励
名称:collect(CollectParams)
调用合约:NonfungiblePositionManager
参数:[tokenId,接受奖励地址,获得token0的最大奖励,获得token1的最大奖励]
因为,故: