es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Intercambio Uniswap USDC => ETH

Intentando intercambiar USDC a ETH con Uniswap y Ethers, pero siempre estoy obteniendo errores.


async function swapUsdcToEth(amount, walledAddress) {
const usdc = await Fetcher.fetchTokenData(chainId, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48');
const eth = await Fetcher.fetchTokenData(chainId, '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2');
const pair = await Fetcher.fetchPairData(usdc, eth);
const route = new Route([pair], usdc);
const amountIn = new TokenAmount(usdc, amount);
const trade = new Trade(route, amountIn, TradeType.EXACT_INPUT);
const slippageTolerance = new Percent('50', '10000');
const value = ethers.BigNumber.from(trade.inputAmount.raw.toString()).toHexString();
const amountOutMin = ethers.BigNumber.from(trade.minimumAmountOut(slippageTolerance).raw.toString()).toHexString();
const deadline = Math.floor(Date.now() / 1000) + 60 * 20;
const uniswapRouterV2Address = '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D';
const provider = new ethers.providers.JsonRpcProvider('https://mainnet.infura.io/v3/b9fkdmkdkdv4937b52ea9637cf1d1bd');
const signer = new ethers.Wallet(walledAddress, provider);
const uniswap = new ethers.Contract(
uniswapRouterV2Address,
['function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)'],
signer
);
try {
const tx = await uniswap.swapExactTokensForETH(value, amountOutMin, [walledAddress], walledAddress, deadline);
const receipt = await tx.wait();
console.log('transaction was mined in block', receipt.blockNumber);
} catch (e) {
console.log(e);
}
}

Recibo errores como este: ‘Error: no se puede estimar el gas; la transacción puede fallar o requerir un límite de gas manual’. ¿Qué estoy haciendo mal?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El error que está recibiendo está relacionado con el proceso de estimación de gas. Cada transacción en la red de Ethereum requiere una cierta cantidad de gas para ejecutarse, lo cual se paga en ETH. La función swapExactTokensForETH en su código no está pudiendo estimar la cantidad de gas necesaria para ejecutar la transacción, lo que puede llevar a que la transacción falle o requiera un límite de gas manual.

    Para solucionar este problema, puede intentar especificar el parámetro gasLimit en su transacción. Puede establecer un valor suficientemente alto para asegurarse de que la transacción se procese con éxito, pero no tan alto que desperdicie ETH en tarifas de gas innecesarias. Por ejemplo, puede intentar agregar el siguiente código a su función swapUsdcToEth:

    const gasLimit = ethers.BigNumber.from('800000'); // establezca un límite de gas personalizado
    const tx = await uniswap.swapExactTokensForETH(value, amountOutMin, [walledAddress], walledAddress, deadline, { gasLimit });
    

    Al establecer un límite de gas personalizado, puede evitar el error de estimación de gas y asegurarse de que su transacción se procese con éxito en la red de Ethereum.

Comments are closed.