Etherscan api: ¿cómo obtener la tarifa de transacción?

Por ejemplo: abra este https://etherscan.io/tx/0xcb1e3530950cf2c43a307bcb5645ae71a12c76a60831617badd04aea3efe68aa

es uno al azar

Veo estas informaciones en la página web:

Gas Limit:
136,500

Gas Used by Transaction:
35,531 (26.03%)

Gas Price:
0.000000008 Ether (8 Gwei)

Transaction Fee:
0.000284248 Ether ($0.05)

yo se que fee = gas_price x used_gas=>0.000000008 x 35,531 = 0.000284248 eth

Perfecto.

Estoy interesado en leer, a través de api, la tarifa de transacción convertida en dinero real , como puede ver, hay un$0.05

No puedo llamar a una sola API para devolver esta información en Etherscan.

¿Qué puedo hacer para tener esta información?

Vocación

https://api.etherscan.io/api?module=proxy&action=eth_getTransactionByHash&txhash=0xcb1e3530950cf2c43a307bcb5645ae71a12c76a60831617badd04aea3efe68aa&apikey=your_api_key

Solo obtengo estas informaciones

{
"jsonrpc": "2.0",
"id": 1,
"result": {
  "blockHash": "0xd8d3b1532b376dcb34c6c36fc7bc167cfc048cfcb3cc53a9ab7dab7f383d4240",
  "blockNumber": "0x961a86",
  "from": "0xcc5ce245a296667aca1b5855f1a05ca950017e68",
  "gas": "0x21534",
  "gasPrice": "0x1dcd65000",
  "hash": "0xcb1e3530950cf2c43a307bcb5645ae71a12c76a60831617badd04aea3efe68aa",
  "input": "0x1cff79cd00000000000000000000000050b881ceafece2034b899205fbbd7bafc0c0d23000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000104a70e78c1000000000000000000000000f173214c720f58e03e194085b1db28b50acdeead000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca00000000000000000000000056178a0d5f301baf6cf3e1cd53d9863437345bf9000000000000000000000000000000000000000000000000a688906bd8b000000000000000000000000000000000000000000000000002bd494127192db3364000000000000000000000000000000000000000000000000000450ed6b3b61f2e000000000000000000000000000000000000000000000000000000005e8ee87a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000",
  "nonce": "0x514",
  "to": "0xa57bd00134b2850b2a1c55860c9e9ea100fdd6cf",
  "transactionIndex": "0x4e",
  "value": "0x0",
  "v": "0x1c",
  "r": "0xa03627e5bc49b850afb92774a4dc21c436da8bfe569688dfbd14fc9c58a2bdbb",
  "s": "0x59ddaf4c96b60f413d713902abb1f802fbe3266afd3a61e82a8e635b44522fed"
  }
}

Dónde

"gas": "0x21534"=> en decimal es 136,500[límite de gas]

"gasPrice"○: "0x1dcd65000"=> en decimal es 8,000,000,000[precio de la gasolina]

También intenté llamar a https://api.etherscan.io/api?module=proxy&action=eth_getTransactionReceipt&txhash=0xcb1e3530950cf2c43a307bcb5645ae71a12c76a60831617badd04aea3efe68aa&apikey=your_api_key

Este es el resultado

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "blockHash": "0xd8d3b1532b376dcb34c6c36fc7bc167cfc048cfcb3cc53a9ab7dab7f383d4240",
    "blockNumber": "0x961a86",
    "contractAddress": null,
    "cumulativeGasUsed": "0x778412",
    "from": "0xcc5ce245a296667aca1b5855f1a05ca950017e68",
    "gasUsed": "0x8acb",
    "logs": [],
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "status": "0x1",
    "to": "0xa57bd00134b2850b2a1c55860c9e9ea100fdd6cf",
    "transactionHash": "0xcb1e3530950cf2c43a307bcb5645ae71a12c76a60831617badd04aea3efe68aa",
    "transactionIndex": "0x4e"
  }
}

aquí tengo

"cumulativeGasUsed": "0x778412"  => 7,832,594 [ what  ??? ]
"gasUsed": "0x8acb"              => 35,531    [ gas used by this transaction]

Entonces, para reconstruir la información de la página web, necesito 2 llamadas api, para recuperar el precio del gas y el gas usado.

pero no tengo ninguna cita de eth, y esto es realmente lo que necesito

Encontraste una solución ?

Respuestas (3)

Puede usar la API de CryptoCompare, por ejemplo:

const ETH_AMOUNT = "0.000284248";

const request = require("request");
const Decimal = require("decimal.js");

request.get("https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD", function(error, response, body) {
    if (error)
        throw new Error(error);
    else if (!response)
        throw new Error("no response");
    else if (response.statusCode != 200)
        throw new Error("bad response");
    else
        convert(JSON.parse(body).USD);
});

function convert(usdRate) {
    const USD_AMOUNT = new Decimal(ETH_AMOUNT).mul(usdRate);
    console.log(USD_AMOUNT.toFixed(2 /* decimal places */));
}
Gracias por la sugerencia, pero de esta manera necesito 2 llamadas api para etherscan (o usando web3js, son 2 llamadas de todos modos) y 1 llamada api para cryptocompare; Esperaré y luego comenzaré a hacer web scraping...
@realtebo: necesita 1 llamada api para etherscan y otra llamada api para cryptocompare. AFAIK, etherscan no proporciona precios de FIAT a ETH, por lo que no es como si pudiera hacer esto solo a través de etherscan de todos modos.
No, necesitamos 2 llamadas a etherscan, porque no solo necesito gasUsed sino también gasPrice, y ellos necesitan 2 llamadas. En realidad, ya hemos cambiado a métodos web3.js equivalentes (getTransaction y getTransactionReceipt). Bueno, pruebe cryptocompare pronto
@realtebo, ¿alguna vez encontró una solución para no hacer dos llamadas API a etherscan? ¿Es posible obtener la tarifa de transacción con una sola llamada?
No, no encontré la manera, lo siento.
Dependiendo de su caso de uso, etherscan devuelve todo, al menos para permitirle calcular la tarifa trx en ETH. Si obtienes todos los trx. para una cuenta ( docs.etherscan.io/api-endpoints/… ), se incluyen todos los valores necesarios (gasPrice y gasUsed). El único valor que falta es el par histórico ETH/USD.

Estaba haciendo algo similar (pero calc antes de enviar un tx).

El proceso es para

  1. Obtenga el precio promedio de la moneda en la que desea el valor, es decir, USD. Coingecko tiene una API gratuita que devuelve una lista de los precios de los intercambios. Tomo el promedio de esos para llegar a un precio actual.
  2. Obtener el precio por unidad. es decir, para llevar USD a Gwei, lo harías avgPriceUSD / 1000000000. Esto le dará USD por Gwei. Con esto ya puedes hacer una búsqueda.
  3. Calcular el gas utilizado. Parece que tienes eso cubierto con un montón de estas respuestas.
  4. Simplemente multiplique el gas por gwei por la cantidad de gas (en gwei) que ha gastado.

Si está tratando de resolver esto para tx en el pasado, necesitará obtener el precio en un momento determinado. (puede usar la API gratuita de coingecko o su preferencia).

Espero haber entendido bien tu pregunta original. Leyendo de nuevo, podría haberlo hecho. Voy a dejar esto y borrarlo si no porque tengo que correr. jajaja.

No sé si mientras tanto pudo resolver el problema, pero a partir del 7 de enero de 2022, la llamada a la API eth_getTransactionReceiptdevuelve un campo llamado effectiveGasPriceque corresponde al mismo valor que devuelve la eth_getTransactionByHashllamada a la API, que es "0x1dcd65000".

Tomemos otra transacción, en este caso:

0xf23766719c61461673d9e6f5cdc1e9ba42c958c07b924bfb9809cd58c244b4c0

effectiveGasPricede eth_getTransactionReceipt: 0x19bbced2d3

gasPricede eth_getTransactionByHash: 0x19bbced2d3

En otras palabras, eth_getTransactionReceiptes suficiente para recuperar tanto el precio del gas como el gas utilizado.

Un poco mal entendido. Tengo gasPrecio Necesito el precio del gas en EUROS o DOLARES
Para eso tienes que hacer otra llamada api, o pagas el servicio api pro para obtener el precio de ether en USD, desde la ethdailypricellamada api, o usas otro servicio como coingecko por el precio en USD y EURO pero no será el mismo valor que en la página etherscan