Как получить информацию о транзакциях, такую ​​как лимит газа и цена газа, из Etherscan?

Эта ссылка показывает последние 500 тысяч транзакций, и при нажатии на каждую из них открывается страница с информацией, включая лимит газа, цену на газ, использованный газ и т. д.

https://etherscan.io/txs

Как я могу получить информацию для всех 500k автоматическим способом, потому что это утомительно и нецелесообразно делать это вручную.

Etherscan предлагает прокси-API для базового узла. В квитанции о переводе будет указана указанная вами информация: etherscan.io/apis#proxy .
Обратите внимание, что скорость API ограничена 5 запросами в секунду. Если вам действительно нужны подробности обо всех 500 тыс. транзакций, вам потребуется почти 28 часов на то, чтобы вбить их API... (Это после того, как вы каким-то образом получите список транзакций для ввода в API.)
Спасибо за ваш повтор; не очень понимаю, как это работает, например, не могли бы вы показать пример для извлечения первых 1000 транзакций? Я был бы признателен, что

Ответы (1)

В API от etherscan нет методов для получения списка последних N транзакций. Решение — загрузить блоки (с транзакциями) и прочитать из них данные.

Предполагая в среднем 250 транзакций на блок (источник: https://bitinfocharts.com/ethereum/ ) с 5 запросами в секунду, вы получите данные через пару часов.

Это можно легко сделать с помощью python, и вы можете использовать эти инструменты:

https://github.com/corpetty/py-etherscan-api

или

https://github.com/jfdelgad/etherscanAPI в этом последнем вы можете просто сделать:

из etherscanAPI импортировать etherscan

apikey = 'yourAPIkey'
myapi = etherscan(apikey, 'mainnet')

currentblock = myapi.getBlockNumber()
txlist = []
i = 0
txcount = 0;
while txcount < 1000:
    block = myapi.getBlockByNumber(int(currentblock,16)-i)
    txlist.append(block['transactions'])
    txcount = txcount + len(block['transactions'])
    i = i + 1
    print(txcount)

txlist = [i for sublist in txlist for i in sublist]

затем txlistбудет список словарей, содержащих все данные последних (>) 1000 транзакций.

например, txlis[0] будет иметь словарь:

{'blockHash': '0x60265fe6cffcbd2dc5f3872c4eb151e17919296270210985df3ef2249d99171c',
 'blockNumber': '0x63973b',
 'from': '0x5e032243d507c743b061ef021e2ec7fcc6d3ab89',
 'gas': '0xafc8',
 'gasPrice': '0xcce416600',
 'hash': '0x940cdd338b4ec8f9b2b63c01a88683f8658f9a388d79873c6bb913b34e579dd8',
 'input': '0x',
 'nonce': '0x193dd',
 'r': '0xcffe406e06ac7f5049798785d1ead4d9420aa763838592e275b997d6efb411d7',
 's': '0x5db6e46eae1dae407b4e54c49e50ccb17a41a6569cb848aae021f06d4d7fb450',
 'to': '0xf67fa6500b490a05c29a47b40a9e3b72e3044a15',
 'transactionIndex': '0x0',
 'v': '0x26',
 'value': '0x4563918244f40000'}

и вы можете получить параметры, например: txlist[0]['gas']

надеюсь это поможет

Спасибо! я получил ошибку TypeError: getBlockNumber () отсутствует 1 обязательный позиционный аргумент: «я». Кроме того, какие атрибуты есть у txlist, которые я могу распечатать?
Вы правы, я обновил код, чтобы исправить ошибку, я запускаю его, и теперь он работает. Также в списке есть словари, поэтому, чтобы получить, например, gasтранзакцию iв списке, можно получить с помощьюtxlist[i]['gas']
Привет, Хайме. Мне интересно, почему API не печатает «газ, используемый транзакцией», например, здесь etherscan.io/tx/… ?
Это потому, что код считывает транзакции и (если я не ошибаюсь) стоимость фактически использованного газа доступна в квитанции транзакции. Вы можете использовать метод API, myapi.getTransactionReceipt(txhash)где txhash — это хэш транзакции, тогда вы получите квитанцию, содержащую значение использованного газа.
Следуя этому, как я могу декодировать ввод транзакции, чтобы узнать, какой метод был вызван и какие аргументы были переданы (и типы аргументов)?
Я думаю, вам следует задать новый вопрос. Дайте мне знать, и я постараюсь ответить на него. Писать код в комментариях непросто.
пожалуйста, посмотрите мой вопрос здесь ethereum.stackexchange.com/questions/68225/… . Спасибо