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 завершается с ошибкой «Транзакция отменена: селектор функций не был распознан, и резервной функции нет»

Эта ошибка вызвана ошибкой каски или контракта?

0 ответов

Другие вопросы по тегам