Я использую Etherscan API для различных деталей Ethereum.
Мне нужно узнать tokens
переведенный адрес токена с исходного контракта (скажем, А) на конкретный адрес (скажем, Б).
Для этого мне нужно будет перебрать все транзакции B
и все и посмотреть, соответствует ли какая-либо транзакция транзакции Event Logs
, если да, то ключ дает мне значение передачи токена.A
Events
B
data
Но у меня нет возможности узнать, в каком блоке будут эти транзакции, поэтому мне придется перебирать все блоки, поскольку API поддерживает не более 1000 результатов за один вызов. У меня нет возможности узнать, на скольких блоках этот предел будет быть достигнуто, поэтому я повторяю шагами 1000
, это очень медленно и может занять несколько часов.
API принимает fromBlock
и toBlock
параметр. В настоящее время последний блок находится в ~ 4287262. Как я могу эффективно разбивать результаты на страницы, учитывая, что если я использую шаг 1000 для блоков, потребуется ~ 4000 вызовов, что кажется очень неэффективным.
Один из способов, который я оптимизировал, — посмотреть, в каком блоке был создан контракт. Это эффективно устраняет 95% блоков и использует многопоточность для других блоков, но это все еще медленно.
Любой другой способ/метод/предложение было бы здорово.
Я предполагаю, что то, что вы имели в виду под неэффективностью, зависит от времени или данных.
Поскольку ваша идея состоит в том, чтобы разбивать результаты на страницы, вам не нужно, чтобы все вызовы API происходили одновременно. Поскольку вы можете вызывать только тот раздел, который необходимо просмотреть в данный момент, следовательно, со временем дизайн API должен извлекать только 1000 результатов не будут проблемой (попытка получить все результаты может привести к еще большей задержке при начальном рендеринге — и я думаю, что получение только 1000 результатов на самом деле лучше для просмотра с разбивкой на страницы).
И ваше соображение об эффективности связано с данными (количество переданных данных), вы собираетесь сохранять только данные, используемые заголовки запроса вызова API и ответа. По сравнению с объемом передаваемых данных размеры заголовков ничтожны. Я проверил это с помощью запроса Postman к API журнала событий etherscan, и результаты были следующими:
Таким образом, объем данных, которые вы пытаетесь сохранить, намного меньше по сравнению с переданными данными, и если не все журналы будут просмотрены, ранняя загрузка всех из них фактически будет пустой тратой данных. Следовательно, дизайн API эффективен и в отношении данных.
И, насколько я понимаю, поскольку это дизайн поставщиков API, если вы все еще хотите это сделать, вариант — найти другой API для получения данных о событиях.
Вы также можете ссылаться на ссылки здесь и здесь .
Надеюсь это поможет.
Ачала Диссанаяке
Гарг10мая
Адиль