#javascript #ethereum #solidity #web3 #web3js
#язык JavaScript #эфириум #прочность #web3 #web3js
Вопрос:
Я был с этой ошибкой в течение нескольких дней, я пытаюсь автоматически рассчитать необходимое проскальзывание в блинах, для этого я пробую разные проценты и вызываю estimateGas, чтобы узнать, не завершится ли транзакция неудачно. Но я получаю только ошибку «TransferHelper: TRANSFER_FROM_FAILED». Я перепробовал множество методов, и ни один из них не работает для меня. Я уверен, что контракт одобрен и что он должен работать на стороне блокчейна. В pancakeswap это работает для меня, тот же кошелек, те же токены и те же суммы. Я не понимаю, что он может потерпеть неудачу.
const Web3 = require("web3"); const abi = require("./abi.json"); const web3 = new Web3("https://bsc-dataseed.binance.org/"); const contract = new web3.eth.Contract(abi, "0x10ed43c718714eb63d5aa57b78b54704e256024e"); function isValid(res) { return new Promise((resolve, reject) =gt; { contract.methods.swapExactTokensForTokens(res[0], res[1], ["TOKEN_A", "TOKEN_B" ], "MI_WALLET", 1639969436 ).estimateGas(function(error, result) { console.log(error.message) if(error.message.includes("INSUFFICIENT_OUTPUT_AMOUNT")) { console.log("Bad slippage") reject() } else if(error) { reject() } else { resolve() } }); }) } (async () =gt; { contract.methods.getAmountsOut("20000000000", ["TOKEN_A", "TOKEN_B" ]).call().then(async res =gt; { const data = res; let slippage = 0; while (true) { try { await isValid(data); break; } catch(e) { slippage ; console.log(slippage / 100 * data[1]) let newS = data[1] - (slippage / 100 * data[1]) console.log(slippage, newS); if(slippage == 20) { break; } } } console.log(slippage) }) })();
Спасибо вам всем!