По сути, я хочу иметь возможность отслеживать баланс смарт-контрактов и уникальные транзакции за определенный период времени, например, последние 24 часа, последний час и так далее.
Каков наилучший подход к этому? Как мне хранить данные, которые я получаю, чтобы создать свой API, SQL/NoSQL db?
Заранее спасибо!
Вы можете получить баланс эфира смарт-контракта в любом блоке, используя Web3 JSON RPC, который доступен через библиотеки Web3, такие как Web3.js:
web3.eth.getBalance(address [, defaultBlock] [, callback])
Как видите, вызов этой функции поддерживает вход «блок», который можно использовать для получения баланса эфира по указанному адресу в определенном блоке.
Блоки не создаются с идеальными интервалами, но вы должны быть в состоянии приблизиться к нужному блоку, предполагая, что среднее время блока составляет ~ 15 секунд.
Затем вы можете подтвердить, что у вас есть правильный блок, получив значение timestamp
из блока ( web3.eth.getBlock()
) и отрегулировав его при необходимости.
Такая логика интегрирована в это приложение JavaScript: График баланса ETH ( код )
Получить количество транзакций для контракта сложнее, потому что входящие транзакции для контракта не индексируются сетью.
Мои предложения заключались бы в отслеживании транзакций, которые генерируют Event .
Получить все прошедшие события для контракта можно с помощью:
myContract.getPastEvents(event[, options][, callback])
Исходя из этого, вы должны получить довольно хорошее представление об активности смарт-контракта с течением времени. Особенно, если контракт представляет собой токен ERC20, который должен генерировать Transfer
событие всякий раз, когда токены передаются, и должен генерировать такое же событие при создании токенов.
Однако, чтобы действительно получить все внутренние и внешние транзакции, вам нужно будет просмотреть каждый блок с момента создания контракта и найти эти транзакции (насколько мне известно). Это то, что делает Etherscan, и это нетривиальная задача.
Деметерка Ионуц-Александру
Шон Табризи
Деметерка Ионуц-Александру
Шон Табризи
Деметерка Ионуц-Александру