0

testnet で pancakeswap ルーター v2 を使用して、busd トークンを bnb (wbnb) に交換しようとしています。私はCALL_EXCEPTIONを持っていますが。

コードに飛び込む前に、bscscanにも同じ問題があります。関連しているかどうかはわかりませんが、契約の承認に成功したにもかかわらず、許容値として 0 が返されます。コードから値を取得する方法を次に示します。入力に関係なく、支払い総額 (金額 + ガス料金) は変わりません。

swapExactTokensForEth の失敗画像

これがテストネットの私の資産です。

テストネット資産

amountIn 値は busdContract.balanceOf メソッドの戻り値で埋められます

const abi = await retrieveAbi(tokenIn);
erc = new ethers.Contract(
    tokenIn,
    abi,
    account
);

const balance = await erc.balanceOf(process.env.WALLET_ADDRESS);

amountOutMin は pancakeswapRouter.getAmountsOut メソッドによって計算されます

let amountOutMin = 0;
if (parseInt(slippage) !== 0) {
    const amounts = await router.getAmountsOut(amountIn, [tokenIn, tokenOut]);
    amountOutMin = amounts[1].sub(amounts[1].mul(slippage).div(100));
}

return amountOutMin;

承認トークン:

const tx = await erc.approve(
        tokenIn,
        tokenAmount,
        {
            gasPrice: gasPrice,
            gasLimit: gasLimit
        }
    );

    const receipt = await tx.wait();

Sell 関数 (実際に CALL_EXCEPTION エラーをスローする場所):

const tx = await router.swapExactTokensForETH(
        amountIn,
        amountOutMin,
        [tokenIn, tokenOut],
        process.env.WALLET_ADDRESS,
        Date.now() + 1000 * 60 * 5, // 5 minutes
        {
            gasPrice: gasPrice,
            gasLimit: gasLimit
        }
    );

    const receipt = await tx.wait();

また、カスタムの金額を指定して、取得した abi (busd abi) の 10 進数値を使用して計算しようとしましたが、うまくいきませんでした。同じエラーが発生します: CALL_EXCEPTION。

const amountIn = ethers.utils.parseUnits('100', decimals);

エラーメッセージも失敗したトランザクションも、手がかりを与えてくれません。code=CALL_EXCEPTIONとだけ表示されます。これは私をどこにも導きません。

問題は承認と許可に関するものだと思います。承認取引は成功したのに、ウォレットのBusd枠が常にゼロです。よろしくお願いします。

画像に表示されている変数は次のとおりです。

211064843184329663888 amountIn
468509127086739224 amountOutMin
0x8301f2213c0eed49a7e28ae4c3e91722919b8b47 tokenIn (BUSD)
0xae13d989dac2f0debff460ac112a837c89baa7cd tokenOut (WBNB)
4

1 に答える 1