Solidity
因未知原因委託呼叫恢復
我正在嘗試
delegatecall
從我的契約中對 PancakeSwap Routerv2 進行交換,以執行交換,但由於某種原因它無法正常工作。這是我的程式碼:// pancakeswap router address address public CAKE_ROUTER = 0x10ED43C718714eb63d5aA57B78B54704E256024E; function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external override returns (bool success) { (success, ) = CAKE_ROUTER.delegatecall( abi.encodeWithSignature("swapExactTokensForTokens(uint256,uint256,address[],address,uint256)", amountIn, amountOutMin, path, to, deadline) ); require(success, "swapExactTokensForTokens: failed"); }
程式碼正在恢復
require(success)
語句。關於我做錯了什麼的任何想法?這是我第一次嘗試實現委託呼叫,所以我感覺我沒有 100% 正確理解事物。路由器地址和選擇器是正確的(我認為)。
你試圖做的事情是行不通的。
當您
delegatecall
在路由器上使用時,它將在您的契約swapExactTokensForTokens
上下文中執行該功能。這有點像您將其複制/粘貼
swapExactTokensForTokens
到您的契約中。該函式將嘗試使用合約的儲存變數。當它找不到合適的儲存變數來執行函式時,它很可能會恢復,例如對的地址等等。