失败并出现错误 'PancakeLibrary: INSUFFICIENT_AMOUNT'

Fail with error 'PancakeLibrary: INSUFFICIENT_AMOUNT'

我正在尝试分叉 PANCAKESWAP,一切似乎都运行良好,我可以添加流动性,但每当我决定添加与 BNB 相关的流动性(即调用 addLiquidityETH 函数)交易时返回该错误消息。

经过一番挖掘,我发现它只出现在整个路由器的一个地方。

// given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
    require(amountA > 0, 'PancakeLibrary: INSUFFICIENT_AMOUNT'); // THIS IS WHERE TRIGGERS THE REVERT!!
    require(reserveA > 0 && reserveB > 0, 'PancakeLibrary: INSUFFICIENT_LIQUIDITY');
    amountB = amountA.mul(reserveB) / reserveA;
}

并且这个 quote 函数在 _addLiquidity 函数中被调用,如下所示。

// **** ADD LIQUIDITY ****
function _addLiquidity(
    address tokenA,
    address tokenB,
    uint amountADesired,
    uint amountBDesired,
    uint amountAMin,
    uint amountBMin
) internal virtual returns (uint amountA, uint amountB) {
    // create the pair if it doesn't exist yet
    if (IPancakeFactory(factory).getPair(tokenA, tokenB) == address(0)) {
        IPancakeFactory(factory).createPair(tokenA, tokenB);
    }
    (uint reserveA, uint reserveB) = PancakeLibrary.getReserves(factory, tokenA, tokenB);
    if (reserveA == 0 && reserveB == 0) {
        (amountA, amountB) = (amountADesired, amountBDesired);
    } else {
        uint amountBOptimal = PancakeLibrary.quote(amountADesired, reserveA, reserveB); // here calls the quote function
        if (amountBOptimal <= amountBDesired) {
            require(amountBOptimal >= amountBMin, 'PancakeRouter: INSUFFICIENT_B_AMOUNT');
            (amountA, amountB) = (amountADesired, amountBOptimal);
        } else {
            uint amountAOptimal = PancakeLibrary.quote(amountBDesired, reserveB, reserveA); // and here too
            assert(amountAOptimal <= amountADesired);
            require(amountAOptimal >= amountAMin, 'PancakeRouter: INSUFFICIENT_A_AMOUNT');
            (amountA, amountB) = (amountAOptimal, amountBDesired);
        }
    }
}

到目前为止,这些是唯一调用 quote 的地方,这将导致事务被还原,但我似乎找不到任何错误我的意思是,AmountA 显然是 > 0.

任何帮助将不胜感激。

编辑:

错误来自我这边,我正在调试我没有将 BNB 发送到合约的旧交易,我认为这与我在未来交易中收到的错误相同,决定检查并发现我收到的错误是 INSUFFICIENT_A_AMOUNT,通过将 amountETHMinamountTokenMin 设置为 0[= 来修复它39=]

错误来自我这边,我正在调试我没有将 BNB 发送到合约的旧交易,我认为这与我在未来交易中收到的错误相同,决定检查并发现我收到的错误是 INSUFFICIENT_A_AMOUNT,通过将 amountETHMinamountTokenMin 设置为 0

我遇到过这个错误,这是修复错误的演示 java 代码。

    raw = RawTransaction.createTransaction(
        nonce,
        gasProvider.getGasPrice(),
        gasProvider.gasLimit,
        contractAddress,
        amountEth.toWei(),  //>>> add amount of bnb here, when create rawTransaction
        FunctionEncoder.encode(function)
    )
rawTransactionManager.signAndSend(raw)