Llevo un par de días con este error, estoy tratando de calcular el Slippage necesario en PancakeSweap automáticamente, para esto estoy probando diferentes porcentajes y llamo a estimarGas para ver si falla la transacción. Pero solo recibo el error "TransferHelper: TRANSFER_FROM_FAILED". He probado muchos métodos y ninguno me funciona. Estoy seguro de que el contrato está aprobado y que debería funcionar en el lado de la cadena de bloques. En pancakeswap me funciona, mismo monedero, mismos tokens y mismas cantidades. No entiendo que puede fallar.
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) => { 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 () => { contract.methods.getAmountsOut("20000000000", ["TOKEN_A", "TOKEN_B" ]).call().then(async res => { 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) }) })();¡Gracias a todos!