На dune.com создал запрос на извлечение всех созданных адресов из eth. Вот сам SQL-запрос:
SELECT address
from ethereum.traces
where
block_number>={{tillBlock}}-{{step}}
and block_number<={{tillBlock}}
and success=true
and type='create'
Переменные внутри {{}} подставляются снаружи.
Есть кнопка RUN, которая создает задачу и ждет ее завершения.
Но сканировать все 15млн блоков руками неблагодарное дело, в том числе из-за того, что когда адресов в ответе больше 1млн, это дико лагает. И нельзя извлечь все адреса простым копированием, нет такой кнопки.
А теперь про то, как это ускорить:
Если открыть инспектор браузера(f12->network) и посмотреть, что творится при клике на RUN, увидим, что создается task через http.post.graphql запрос, и раз в несколько секунд проверяется статус task’а. Когда статус меняется, результат работы выгружается отдельным graphql запросом.
Заголовки (Authorization,X-Dune-Access-Token
) истекают очень быстро, поэтому нужно часто выполнять http.post./session с куками авторизованного юзера, чтобы обновить их.
Итого, общая структура (nodejs,typescript,got) скрипта такая:
⁃ Обновляем токены сессии перед каждым graphql запросам
⁃ Создаем task, передаем tillBlock, step
⁃ Ждем окончания выполнения задачи
⁃ Запрашиваем результаты выполнения и выделяем адреса
⁃ Сохраняем в файл (fs.appendFileSync) одна строка = 1 адрес.
Скрипт однопоточный, чтобы не перегрузить dune, который бесплатно дает извлекать такие данные.