Tengo 2 preguntas en realidad:
¿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?
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.
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 assert
en el código.)
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 assert
o throw
por ejemplo).
Si la transacción falla, no obtendrá ningún mensaje de error que no sea "sin gasolina", porque lo que sucede cuando a throw
o assert
golpea 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:
eth_getBlockByNumber
obtener información del bloque.eth.getTransaction
obtener gasUsed
_eth_getTransactionReceipt
obtener gasprice
_gasUsed * gasPrice
obtener tarifas de transacción.
JS
usuario19510
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?JS