hardhat не может вызвать pancakeCall от пары.своп с ошибкой «Транзакция отменена: селектор функций не был распознан, и нет резервной функции»
I use npx hardhat node --fork https.. --fork-block-number 13845988
и попробуйте ручную функцию замены блинов
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;
import "hardhat/console.sol";
interface IPancakeCallee {
function pancakeCall(address sender, uint amount0, uint amount1, bytes calldata data) external;
}
interface IRouter {
function getAmountsOut(uint amountIn, address[] memory path) external view returns (uint[] memory amounts);
}
interface IPancakePair {
function token0() external view returns (address);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
}
contract Arbot is IPancakeCallee {
address owner;
address _bnb = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
address _squid = 0x87230146E138d3F296a9a77e497A2A83012e9Bc5;
address _mdex_router = 0x7DAe51BD3E3376B8c7c4900E9107f12Be3AF1bA8;
address _mdex_wbnb_squid_pair = 0x038625dDCD10fde5253f1b3db84E53339D50f82F;
function test(uint256 _amountIn) public payable {
address[] memory _path1 = new address[](2);
_path1[0] = _bnb;
_path1[1] = _squid;
uint[] memory step1 = IRouter(_mdex_router).getAmountsOut(_amountIn, _path1);
uint _step1AmountOut = step1[1];
console.log("SQUID", _step1AmountOut);
IPancakePair(_mdex_wbnb_squid_pair).swap(_step1AmountOut, 0, address(this), new bytes(0));
}
function pancakeCall(address sender, uint amount0, uint amount1, bytes calldata data) external override {
address token0 = IPancakePair(msg.sender).token0(); // fetch the address of token0
console.log("token0",token0);
}
}
он работает, я могу получить console.log
SQUID 1956464793801464361684
Но я хочу использовать функцию pancakeCall, тогда я отправляю байтовые данные
IPancakePair(_mdex_wbnb_squid_pair).swap(_step1AmountOut, 0, address(this), new bytes(1));
Если вы отправляете байтовые данные в функцию парного обмена
...
if (data.length > 0) IPancakeCallee(to).pancakeCall(msg.sender, amount0Out, amount1Out, data);
...
эта линия работает
Хотя у меня функция pancakeCall завершается с ошибкой «Транзакция отменена: селектор функций не был распознан, и резервной функции нет»
Эта ошибка вызвана ошибкой каски или контракта?