testnet で pancakeswap ルーター v2 を使用して、busd トークンを bnb (wbnb) に交換しようとしています。私はCALL_EXCEPTIONを持っていますが。
コードに飛び込む前に、bscscanにも同じ問題があります。関連しているかどうかはわかりませんが、契約の承認に成功したにもかかわらず、許容値として 0 が返されます。コードから値を取得する方法を次に示します。入力に関係なく、支払い総額 (金額 + ガス料金) は変わりません。
これがテストネットの私の資産です。
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)