Solidity

因未知原因委託呼叫恢復

  • August 10, 2021

我正在嘗試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到您的契約中。該函式將嘗試使用合約的儲存變數。當它找不到合適的儲存變數來執行函式時,它很可能會恢復,例如對的地址等等。

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