¿Cómo determinar el precio del gas y el gas utilizado?

Tengo 2 preguntas en realidad:

  1. ¿Cómo determinar el precio del gas? Metamask completa esto por mí, pero siempre es demasiado bajo cuando hago clic en enviar. ¿Básicamente, todos los valores en ETH Gas Station parecen demasiado bajos? ¿Cuánto límite de gas poner?

  2. He conseguido una transferencia mediante el uso de valores altos. pero fracasó a pesar de todo. ¿Parece que ahora perdí 0.0105 Ether ($13.66)? ¿Hay alguna manera de recuperar esto? ¿Hay alguna manera de NO cometer estos errores? Es realmente una curva de aprendizaje muy alta (y costosa).

Ver: https://etherscan.io/tx/0x2d68ca04e623509c05713a8b80c857e49cc80d3a71aadebd0aca7eb2511c57cd

Gracias por cualquier ayuda.

Respuestas (4)

Creo que entendiste algo al revés... estableciste un límite de gas de 42000, que evidentemente era insuficiente. Casi nunca debe ajustar el límite de gas, ya que se determina con mucha precisión con anticipación. MetaMask debería obtener el límite de gas adecuado para usted.

También establece un precio de gasolina muy alto: 250 gwei, cuando https://www.ethgasstation.info/ dice que 80 gwei deberían procesar su transacción en 2 minutos.

No, no hay forma de recuperar el éter que pagó por esa transacción.

En el futuro, deje que MetaMask elija el límite de gasolina y establezca el precio de la gasolina consultando https://www.ethgasstation.info/ .

EDITAR

Debo señalar que un error de falta de gas también puede ocurrir cuando algo más sale mal en la transacción. Algunos tipos de errores pueden hacer que se consuma todo el gas. (Por ejemplo, un asserten el código.)

Hola, gracias por ese conocimiento. Metamask me da los precios de la gasolina como preestablecidos, están bastante cerca de lo que sugiere la estación de servicio. Sin embargo, el límite de gas siempre comienza en 0, entonces, ¿cómo determino qué límite usar? ¿Existe tal cosa como establecer el límite de gas demasiado alto?
Eso es muy extraño. MetaMask debería poder estimar correctamente el gas que necesita. El único inconveniente de establecer un límite de gas alto es que si un error (por ejemplo, un assert) hace que se consuma todo el gas, terminará pagando más de lo necesario. Para esta transacción en particular, creo que 100,000 es bastante alto, pero no entiendo por qué MetaMask se equivocaría. ¿Ves algún mensaje de error?
Ningún mensaje de error aparte de que falló. De hecho, fue mi primera transacción que no fracasó de inmediato debido a un "gas intrínseco demasiado bajo". Desafortunadamente, MetaMask no completó el límite de gas de 21000, solo le permite agregar el valor usted mismo desde 21000 hasta casi el infinito. De cualquier manera, gracias por la ayuda, desearía leer una guía primero.

Si está buscando el costo del gas de una transacción histórica como la mía, aquí está su respuesta.

GasCost(tx) = GasPrice * GasUsed

Puede usar web3 para obtener las 2 piezas de información necesarias, pero hará 2 llamadas diferentes:

web3.eth.getTransaction(txHash)

devuelve un objeto que incluye gasPrice.

web3.eth.getTransactionReceipt(txHash)

devuelve un objeto que incluye gasUsed.

Con estas dos piezas combinadas, tiene el costo del gas para una transacción histórica específica.

El límite de gas puede (concebiblemente) establecerse en el valor que desee: la transacción utilizará el gas que use y cualquier cantidad de gas que supere el uso será reembolsada, excepto... y esta es una excepción muy importante. -si la transacción falla (debido a un asserto throwpor ejemplo).

Si la transacción falla, no obtendrá ningún mensaje de error que no sea "sin gasolina", porque lo que sucede cuando a throwo assertgolpea es que se consume toda la gasolina restante (hasta el límite de gasolina) y la transacción regresa (eso es por qué dije que el límite de gas importa, importa cuando falla, no importa cuando no falla). Pero @smarx tiene razón: deje que Metamask haga el ajuste.

Una vez que has gastado la gasolina, no puedes recuperarla. Piénselo de esta manera: la máquina que extrajo el bloque hizo el trabajo de decidir si la transacción tuvo éxito o no. Esa máquina (es decir, el minero) no debe ser penalizada porque ejecutó una función que falló. La función se ejecutó, eso le costó dinero al minero, él / ella deberían recibir un pago.

El costo total de la transacción (solo para su información) es gas used* gas price.

Si desea calcular la tarifa de transacción en bloque, puede calcularla de la siguiente manera:

  1. eth_getBlockByNumberobtener información del bloque.
  2. Obtenga la información del bloque anterior Obtenga el hash de cada transacción.
  3. eth.getTransactionobtener gasUsed_
  4. eth_getTransactionReceiptobtener gasprice_
  5. gasUsed * gasPriceobtener tarifas de transacción.
  6. Sume todas las tarifas de transacción.