如何计算Go中Uniswap V3和SushiSwap的价格影响?

问题描述 投票:0回答:1

我目前正在使用 Go 在以太坊网络上构建一个交易机器人。我正在通过 Uniswap V3 和 SushiSwap 的 API 检索数据,并且正在努力正确计算价格影响。

对于 Uniswap V3,我可以从 API 访问以下数据点:

  • sqrt价格
  • 流动性
  • 代币0价格
  • 代币1价格

对于SushiSwap(类似于Uniswap V2),我可以检索:

  • 预留0
  • 预留1
  • 代币0价格
  • 代币1价格

我知道对于SushiSwap,使用恒定乘积公式

x * y = k
,我可以通过模拟交易前后准备金的变化来得出价格影响。然而,我在将此方法应用于 Uniswap V3 时遇到了麻烦,因为它使用基于
sqrtPrice
和流动性的不同定价模型。

我想使用 Uniswap V3 和 SushiSwap 的 API 提供的数据来计算其价格影响。

我的具体问题是:

  1. 如何从 Uniswap V3 的
    sqrtPrice
    和流动性值中得出代币储备?
  2. 一旦我有了储备金或任何其他必要的值,我应该如何计算价格影响?

我希望有任何示例或详细解释,尤其是 Go(如果可能的话),因为那是我正在使用的语言。

到目前为止,我尝试了两种不同的方法来计算 Uniswap V3 的价格影响:

  1. 使用
    sqrtPrice
    和流动性直接计算:我尝试通过直接使用提供的
    sqrtPrice
    和流动性模拟交易来计算价格影响。然而,这通常会导致不正确或极端的值,例如-100%的价格影响,特别是对于流动性低或无效的矿池
    sqrtPrice
  2. sqrtPrice
    和流动性中得出储备金:我还尝试根据这些值计算代币储备金,并应用 SushiSwap 中使用的相同方法,但这也没有产生准确的结果,可能是由于 Uniswap V3 处理方式的差异定价。

尽管做出了这些努力,我仍无法匹配实际 dApp 上显示的结果。任何有关如何正确计算 Uniswap V3 和 SushiSwap 价格影响的指导将不胜感激。

go ethereum solidity dex
1个回答
0
投票

在 Uniswap v3 上,您可以直接向他们的报价者智能合约询问价格影响。

如何从 Uniswap V3 的 sqrtPrice 和流动性值中得出代币储备?

你不能,因为你不知道流动性的形状以及以 NFT 表示的个人范围内的流动性头寸。

一旦我有了储备金或任何其他必要的值,我应该如何计算价格影响?

其他必要的值包括 Uniswap v3 池中 CLMM 流动性的状态,这很难从以太坊 VM 状态中提取出来。直接调用报价者智能合约更简单。

SushiSwap 相当于 Uniswap v2,您可以找到大量如何计算 Uniswap v2 价格的示例,包括此处的教程

从技术上讲,这些是“ABI”(应用程序二进制接口),它只是智能合约代码上的符号转储。 API 是您对 JSON-RPC 节点调用的内容。

© www.soinside.com 2019 - 2024. All rights reserved.