Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

756
Visualizações
Establecer límite de gas en el método de contrato en ethers.js

Problema

Estoy intentando usar un método de contrato en la red de prueba (ropsten), pero falla debido a este error:

razón: 'no se puede estimar el gas; la transacción puede fallar o puede requerir un límite de gas manual', código: 'UNPREDICTABLE_GAS_LIMIT'

Código

Creé una instancia del contrato inteligente y quería llamarlo método de registro:

 const registrationContract = new ethers.Contract(ADDRESS, abi, signer); const hashedDomain = utils.keccak256(utils.toUtf8Bytes(domain)); const register = await registrationContract.register(hashedDomain, walletAddress);

¿ Ethers.js proporciona una función para establecer el límite en el contrato? ¿O se puede hacer esto de otra manera? No encontré uno en la documentación .

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Puede establecer el límite de gas con un objeto como último argumento, para una transacción de transferencia simple, podría hacer algo como esto:

 const tx = { to: toAddress, value: ethers.utils.parseEther(value), gasLimit: 50000, nonce: nonce || undefined, }; await signer.sendTransaction(tx);

Si está realizando una transacción a un contrato inteligente, la idea es la misma, pero asegúrese de configurar el último parámetro en uno de sus métodos abi, por ejemplo:

 const tx = await contract.safeTransferFrom(from, to, tokenId, amount, [], { gasLimit: 100000, nonce: nonce || undefined, });

Esto puede corregir el error UNPREDICTABLE_GAS_LIMIT, ya que al informarlo manualmente, los éteres saltan una llamada al método rpc al proveedor que solicita el gas_limit calculado.

about 4 years ago · Juan Pablo Isaza Relatório

0

Complementando la respuesta, cuando define gasLimit manualmente, es importante comprender:

  1. el valor configurado se reserva y se envía en llamada de contrato, por lo que la cuenta del llamante debe tener al menos ese valor en su billetera;

  2. por supuesto, después de que se completa la transacción, el gas restante se devuelve a la billetera de la persona que llama;

  3. entonces hay un problema cuando para la misma llamada de transacción, dependiendo por ejemplo de la cantidad de argumentos, tiene una amplia gama de posibilidades de valores de gas y, a veces, el valor establecido es muy alto y desproporcionado para transacciones de gas pequeñas.

Entonces, para solucionar este problema y establecer dinámicamente gasLimit, usó la función para estimar el gas de transacción (estimateGas) de Ethers y luego proporcionó un porcentaje de error de margen adicional.

Podría ser algo como esto donde gasMargin() calcula el gas final para pasar en la llamada tx (en este caso solo agrega 10%).

 const gasEstimated = await registrationContract.estimateGas.register(hashedDomain, walletAddress); const register = await registrationContract.register(hashedDomain, walletAddress), { gasLimit: Math.ceil(gasMargin(gasEstimated, 1.1)) });
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda