【问题标题】:How to understand uniswap v3 swap event?如何理解uniswap v3 掉期事件?
【发布时间】:2023-01-05 23:35:22
【问题描述】:

https://docs.uniswap.org/protocol/reference/core/interfaces/pool/IUniswapV3PoolEvents

在 uniswap v3 文档中,有一些描述。

  event Swap(
    address sender,
    address recipient,
    int256 amount0,
    int256 amount1,
    uint160 sqrtPriceX96,
    uint128 liquidity,
    int24 tick
  )

但是我很难理解 amount0 和 amount1 是什么。 以这个交易为例,Swap 6,767.400346701675410697 LOOKS For 2.681 Ether On Uniswap V3。 https://etherscan.io/tx/0xeb4a0eeecd6e19a1204b37339b9b7236b5219419fc7174e559edf27afc37937c#eventlog

最后是交换事件。

输出的eth数量在哪里?

谢谢!

【问题讨论】:

    标签: solidity go-ethereum uniswap


    【解决方案1】:

    amount0 和 amount1 是相同的,有点...... amount 0 显示固定数量,但 amount1 显示符号中的数字。原理相同但格式不同

    【讨论】:

      【解决方案2】:

      这可能是一个迟到的答案,但我只是偶然发现了同样的问题,并认为它可能对其他人有所帮助。

      不幸的是,Etherscan 不擅长显示数字,目前不知道负数的概念。 以下是解码给定日志的方法:

      在例如beaconcha.in,获取发出日志的原始数据:

      0xffffffffffffffffffffffffffffffffffffffffffffffffdacb2cb45d2d800000000000000000000000000000000000000000000000016edc8bc819f8b8b50900000000000000000000000000000000000000324b97f19a3936459e285115b700000000000000000000000000000000000000000000053f31c5c8cac5d23340000000000000000000000000000000000000000000000000000000000001321a
      

      正如您已经知道事件的参数,这些参数可用于解码这些数据。文档中缺少一件事: 前两个参数(发件人和收件人)已编入索引。索引参数不是日志数据的一部分。您可以在 source code 本身中找到它:

          event Swap(
              address indexed sender,
              address indexed recipient,
              int256 amount0,
              int256 amount1,
              uint160 sqrtPriceX96,
              uint128 liquidity,
              int24 tick
          );
      

      或者作为 pool's contract ABI on Etherscan 的一部分。

      给定非索引参数类型int256,int256,uint160,uint128,int24,您可以使用online ABI decoder在线解码这些参数:

      Example of how to input the data

      这会按给定顺序生成解码后的参数:

      -2681000000000000000,6767400346701675410697,3984803190183823086827191997879,24777563784443426124608,78362
      

      要进一步了解它们,您必须知道池的token0token1是什么。这必须仔细检查,因为它们只是按 UniswapV3 的字母顺序排序。对于给定的池,这些是:

      token0 = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 = WETH (18 decimals)
      token1 = 0xf4d2888d29D722226FafA5d9B24F9164c092421E = LOOKS (18 decimals)
      

      应用小数产生以下金额:

      amount0 = -2.681000000000000000 WETH
      amount1 = 6767.400346701675410697 LOOKS
      

      正如文档中所定义的,两者都是“池中余额的增量”,措辞不同,可以理解为:

      amount0: how many of token0 the pool received during this swap
      amount1: how many of token1 the pool received during this swap
      

      由于 amount0 为负(amount0amount1 之一必须为负),这意味着矿池“损失”了 2.681 ETH 并“获得”了 ~6767.4 LOOKS。对于交换的发起者来说,情况恰恰相反,他们花费了 2.681 ETH 并获得了 ~6767.4 LOOKS。

      或者正如 Etherscan 所说,他们将 ~6767.4 LOOKS 换成了 2.681 ETH。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-04
        • 2022-08-29
        • 2022-11-10
        • 2022-10-26
        • 1970-01-01
        • 2022-07-29
        • 1970-01-01
        • 2022-10-22
        相关资源
        最近更新 更多