После того, как я смог проверить баланс учетной записи, я ищу способ перечислить все транзакции для данной учетной записи Ethereum через протокол json-rpc. Я не нашел подходящего метода на https://github.com/ethereum/wiki/wiki/JSON-RPC .
Подобно https://etherscan.io/txs?a=0xbb9bc244d798123fde783fcc1c72d3bb8c189413 , я пытаюсь создать проводник, который показывает все транзакции с данной учетной записи.
Как можно найти все транзакции, отправленные на адрес? задается аналогичный вопрос, но я не ищу решение через третье лицо, а запрашиваю напрямую мой узел ethereum по протоколу json-rpc.
Я что-то упускаю? Возможно ли это сделать через интерфейс json-rpc?
Если вы хотите создать такое исследование etherscan.io
, вам нужно просмотреть все данные в сети ethereum и сохранить все txs в базе данных.
Не существует прямого метода rpc для получения всех транзакций, связанных с учетной записью.
Принятый ответ на вопрос Как найти все транзакции, отправленные на адрес? не предполагает участия третьих лиц.
Сценарий в ответе использует API Javascript Web3, который:
Под капотом он взаимодействует с локальным узлом через вызовы RPC. web3.js работает с любым узлом Ethereum, который предоставляет слой RPC.
Например, где скрипт делает:
var block = eth.getBlock(i, true);
вы можете использовать JSON-RPCeth_getBlockByNumber
Возвращает информацию о блоке по номеру блока.
Параметры
- КОЛИЧЕСТВО|ТЕГ — целое число номера блока или строка «самый ранний», «самый последний» или «ожидающий», как в параметре блока по умолчанию.
- Boolean — если true, он возвращает полные объекты транзакций, если false — только хэши транзакций.
API Javascript упрощает выполнение запросов JSON-RPC, но вы можете перенести сценарий на другой язык и выполнять запросы JSON-RPC. Кроме того, обратите внимание на комментарий к принятому ответу о том, что для получения «внутренних транзакций» вам понадобится больше, чем скрипт .
Известным узлам Ethereum не хватает функциональности для получения списка транзакций для ETH-адреса (аккаунта).
Для решения проблемы существует бесплатное стороннее решение с открытым исходным кодом — индексатор транзакций Ethereum: https://github.com/Adamant-im/ETH-transactions-storage .
Индексатор позволяет исследовать транзакции по адресу Ethereum и получить историю любого пользователя/кошелька одним движением, как это делает Etherscan. Индексатор написан на Python. Он работает как служба в фоновом режиме:
Индексатор подключается к узлу Ethereum и извлекает транзакции с помощью JSON RPC, создавая индекс транзакций в базе данных Postgres. Первый индексатор будет хранить транзакции, начиная с указанного вами блока. После этого он будет проверять наличие новых блоков каждые 20 секунд и обновлять индекс. Вы можете изменить интервал.
API для индексатора транзакций Ethereum публикуется инструментом Postgrest. Если вам нужно предоставить общедоступный API, используйте любой веб-сервер, например nginx, и настройте прокси на порт Postgrest в config.
После создания индекса вы можете использовать такие запросы, как
curl -k -X GET "http://localhost:3000/?and=(contract_to.eq.,or(txfrom.eq.0x6b924750e56a674a2ad01fbf09c7c9012f16f094,txto.eq.0x6b924750e56a674a2ad01fbf09c7c9012f16f094))&order=time.desc&limit=25"
или же
https://yourserver.com/ethtxs?and=(contract_to.eq.,or(txfrom.eq.0x6b924750e56a674a2ad01fbf09c7c9012f16f094,txto.eq.0x6b924750e56a674a2ad01fbf09c7c9012f16f094))&order=time.desc&limit=25
Запрос покажет 25 последних транзакций для адреса Ethereum 0x6b924750e56a674a2ad01fbf09c7c9012f16f094, упорядоченных по отметке времени.
Ксавье Лепретр B9lab
from
свойству. На самом деле нужно построить массу других индексов. Можете ли вы добавить ссылку на свой код? Звучит как интересный проект.