Solidity
單元測試 UniswapV2Pair - 對非合約賬戶的函式呼叫
我正在嘗試使用 Hardhat 為令牌創建單元測試並在本地執行它們。該代幣使用 Uniswap 兌換 ETH。
在每次單元測試之前,我…
- 部署
WETH
、UniswapV2Factory
和UniswapV2Router02
。- 部署我的令牌
- 令牌的建構子呼叫
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