Solidity

單元測試 UniswapV2Pair - 對非合約賬戶的函式呼叫

  • December 7, 2021

我正在嘗試使用 Hardhat 為令牌創建單元測試並在本地執行它們。該代幣使用 Uniswap 兌換 ETH。

在每次單元測試之前,我…

  1. 部署WETHUniswapV2FactoryUniswapV2Router02
  2. 部署我的令牌
  • 令牌的建構子呼叫uniswapFactory.createPair(this, weth)

這一切正常,我可以用我的令牌執行測試。

但是,我的一個單元測試呼叫了一個最終呼叫的函式:

***Stack Trace***
UniswapV2Router02._swapSupportingFeeOnTransferTokens
UniswapV2Router02.swapExactTokensForEthSupportingFeeOnTransferTokens

https://github.com/Uniswap/v2-periphery/blob/master/contracts/UniswapV2Router02.sol#L321

當它到達 line 時329,它會出錯Transaction reverted: function call to a non-contract account

參考:

創建Pair程式碼: https ://github.com/Uniswap/v2-core/blob/master/contracts/UniswapV2Factory.sol#L23


我認為這意味著該對的地址不是本地部署的合約。

為了讓我的配對成為工作契約,我還需要做什麼?

我以為createPair()就夠了。

Factory.createPair()將有效地部署您的配對合約,而在使用 UniswapLibrary.pairFor() 時,您將根據 uniswapV2Pair 字節碼 keccak256 雜湊(get_pair() 中的“INIT_CODE”)獲得任何潛在配對的理論地址。如果這個散列值與基於您的實際部署的散列值不同(即“舊”值保持硬編碼),createPair 和pairFor 將返回不同的值。

有關V3 中的類似概念,請參閱https://ethereum.stackexchange.com/a/112709/68134

引用自:https://ethereum.stackexchange.com/questions/114170