Uniswap
檢測目的地是否是 Uniswap V3 池
合約有沒有辦法檢查目標地址以查看它是否是 Uniswap V3 池?
所有有效的 Uniswap V3 池都必須實現視圖函式
token0
和token1
.在有問題的地址上呼叫這些函式,並使用這些函式返回的地址來呼叫
getPool
canonicalUniswapV3Factory
。返回的地址UniswapV3Factory.getPool
應與相關合約的地址匹配。如果不是,您可以確定合約地址不是使用規範部署的UniswapV3Factory
,因此不是有效的池。
最簡單的實現是簡單地檢查目標合約的工廠參數,因為所有 Uniswap V3 池的唯一共同點是它們都具有相同的 Uniswap V3 工廠地址,如下所示:
assert(UniswapV3Pool(destination).factory == 0x1F98431c8aD98523631AE4a59f267346ea31F984);
但是,任何人都可以部署包含該數據的模擬合約。就像任何人都可以部署實現 Uniswap V3 對介面的合約一樣。