Skip to content

Latest commit

 

History

History
731 lines (599 loc) · 81.1 KB

API_DOCUMENTATION_RU.md

File metadata and controls

731 lines (599 loc) · 81.1 KB

Blockchair.com API v.2.0.10 - документация

Blockchair logo

Содержание

Changelog

  • v.2.0.10 - Jan 29th 2019 - Added Dogecoin support in test mode
  • v.2.0.9 - 12 декабря - Добавлена поддержка Bitcoin SV в тестовом режиме; обновлены возможности агрегации данных
  • v.2.0.8 - 26 ноября - Появилась возможность получать транзакции в сыром виде, см. Получение транзакций в сыром виде
  • v.2.0.7 - 22 ноября - Появилась возможность рассылать транзакции через API, см. Рассылка транзакций
  • v.2.0.6 - 8 октября - В бета-режиме добавлена возможность агрегировать информацию из блокчейнов, см. Поддержка агрегирования данных ниже
  • v.2.0.5 - 8 октября - Исправлен баг с подсчётом balance и received у bitcoin[-cash]|litecoin-адресов в колле {chain}/dashboards/address/{address}, когда имелись специфические неподтверждённые транзакции
  • v.2.0.4 - 3 октября - Добавлены некоторые полезные поля к коллам {chain}/stats
  • v.2.0.3 - 18 сентября - Добавлен ключ context.api.tested_features со списком тестируемых фич, поддерживаемых нашим API (у тестируемых фич нет гарантий поддержки в будущем, гарантий, что в какой-то момент не потеряется совместимость при обновлении). Добавлена поддержка Omni Layer и Wormhole в режиме тестирования (см. ниже)
  • v.2.0.2 - 9 сентября - Добавлено поле address.contract_created для колла ethereum/dashboards/address/{A}
  • v.2.0.1 - 1 сентября 2018 - Добавлена поддержка Litecoin

Changelog тестируемых фич

Dogecoin support (since Jan 29th 2019)
  • v.rc3 - Feb 5th - It's now possible to retrieve the list of Dogecoin nodes using the dogecoin/nodes call (the output format is compatible with other coins)
  • v.rc2 - Feb 2nd - Groundhog Day! Unlike for other coins, the latest Dogecoin block along with its transactions isn't stored in mempool tables anymore. dogecoin/mempool/blocks is now deprecated, while dogecoin/mempool/transactions and dogecoin/mempool/outputs show only mempool data.
  • v.rc1 - Jan 29th - We're now processing the Dogecoin chain. All API calls are fully compatible with Bitcoin Cash (i.e. replace bitcoin-cash with dogecoin in URLs) with a few exceptions:
    • There's no node list for Dogecoin yet;
    • The blocks table has one additional field called is_aux - it is a boolean field showing whether a block was mined using AuxPoW.

It is expected that Dogecoin will be out of beta mode very soon. Wow.

Поддержка Bitcoin SV (с 12 декабря)
  • v.b1 - 12 декабря - Ура! Теперь мы предоставляем данные по Bitcoin SV (BSV). Все API-вызовы совместимы с таковыми для Bitcoin Cash, например, если вы хотите получить последние nulldata-выходы (OP_RETURN), то просто замените bitcoin-cash на bitcoin-sv: https://api.blockchair.com/bitcoin-sv/outputs?q=type(nulldata)#

Пожалуйста, имейте в виду, что поддержка Bitcoin SV осуществляется в тестовом режиме и не предназначена для использования в рабочей среде, пока Bitcoin SV не продемонстрирует более конструктивную дорожную карту (например, мы не сможем предоставить некоторый функционал, если блоки внезапно увеличатся до 1 экзабайта...)

Поддержка агрегирования данных (с 8 октября 2018)
  • v.b1 - 8 октября - Внедрение возможности получать агрегированную информацию. Теперь вы можете использовать Blockchair не только для фильтрации и сортировки информации из блокчейнов, но и для агрегации данных.

Пожалуйста, не используйте это в рабочей среде, могут быть фундаментальные изменения!

См. примеры:

Чтобы использовать агрегирование, укажите поля по которым вы хотите группировать (ни одного, одно, или несколько), и поля, которые вы хотите посчитать с помощью функций агрегирования (как минимум одно) в секции ?a=. Вы также можете отсортировать результаты по одной из колонок (asc или desc), указанных в секции ?a= используя секцию ?s=, а также применить дополнительные фильтры (см. докуметацию для секции ?q=)

Возможные поля:

  • Bitcoin, Bitcoin Cash, Litecoin:
    • Blocks
      • Группировка по: date (или week, month, year), version, guessed_miner
      • Подсчёт: size, stripped_size (кроме BCH), weight (кроме BCH), transaction_count, witness_count, input_count, output_count, input_total, input_total_usd, output_total, output_total_usd, fee_total, fee_total_usd, fee_per_kb, fee_per_kb_usd, fee_per_kwu (кроме BCH), fee_per_kwu_usd (кроме BCH), cdd_total, generation, generation_usd, reward, reward_usd — возможные функции: avg(field), median(field), min(field), max(field), sum(field), count()
    • Transactions
      • Группировка по: block_id, date (или week, month, year), version, is_coinbase, has_witness (кроме BCH), input_count, output_count
      • Подсчёт: size, weight (кроме BCH), input_count, output_count, input_total, input_total_usd, output_total, output_total_usd, fee, fee_usd, fee_per_kb, fee_per_kb_usd, fee_per_kwu (кроме BCH), fee_per_kwu_usd (кроме BCH), cdd_total — возможные функции: avg(field), median(field), min(field), max(field), sum(field), count()
    • Outputs
      • Группировка по: block_id, date (или week, month, year), type, is_from_coinbase, is_spendable, is_spent, spending_block_id, spending_date (no support for spending_week, spending_month, spending_year yet)
      • Подсчёт: value, value_usd, spending_value_usd, lifespan, cdd — возможные функции: avg(field), median(field), min(field), max(field), sum(field), count()
  • Ethereum:
    • Blocks
      • Группировка по: date (или week, month, year), miner
      • Подсчёт: size, difficulty, gas_used, gas_limit, uncle_count, transaction_count, synthetic_transaction_count, call_count, synthetic_call_count, value_total, value_total_usd, internal_value_total, internal_value_total_usd, generation, generation_usd, uncle_generation, uncle_generation_usd, fee_total, fee_total_usd, reward, reward_usd — возможные функции: avg(field), median(field), min(field), max(field), sum(field), count()
    • Uncles
      • Группировка по: parent_block_id, date (или week, month, year), miner
      • Подсчёт: size, difficulty, gas_used, gas_limit, generation, generation_usd — возможные функции: avg(field), median(field), min(field), max(field), sum(field), count()
    • Transactions
      • Группировка по: block_id, date (или week, month, year), failed, type
      • Подсчёт: call_count, value, value_usd, internal_value, internal_value_usd, fee, fee_usd, gas_used, gas_limit, gas_price — возможные функции: avg(field), median(field), min(field), max(field), sum(field), count()
    • Calls
      • Группировка по: block_id, date (или week, month, year), failed, fail_reason, type, transferred
      • Подсчёт: child_call_count, value, value_usd — возможные функции: avg(field), median(field), min(field), max(field), sum(field), count()
Поддержка Omni Layer и Wormhole (с 18 сентября)
  • v.a1 - 18 сентября - В режиме альфа-версии добавлена поддержка Omni Layer в Bitcoin (bitcoin/omni/properties, bitcoin/omni/dashboards/property/{id} коллы, плюс ключ _omni в bitcoin/dashboards/transaction и ключ _omni в bitcoin/dashboards/address), а также поддержка Wormhole в Bitcoin Cash (bitcoin-cash/wormhole/properties, bitcoin-cash/wormhole/dashboards/property/{id} коллы, плюс ключ _wormhole в bitcoin-cash/dashboards/transaction и ключ _wormhole в bitcoin-cash/dashboards/address). Пожалуйста, не используйте тестируемые фичи в продакшене, будут изменения.

Общие положения

  • Запрос к серверу идёт через протокол https GET-запросами к домену api.blockchair.com

  • Ответ от сервера возвращает JSON-массив всегда состоящий из двух подмассивов:

    • data - содержит непосредственно отдаваемые данные
    • context - содержит мета-данные, например, возвращаемый код, время выполнения запроса и т.д.
  • data может содержать либо ассоциативный массив (например, для bitcoin/stats), либо для infinitable-запросов ненумерованный (например, bitcoin/blocks), либо для dashboard-запросов ассоциативный, для которого ключами являются части запроса (например, для bitcoin/dashboards/transactions/A,B ключами будут A и B), а значениями - массивы информации.

  • context в зависимости от коллов может содержать в себе следующие полезные значения:

    • context.code - код ответа сервера, может вернуть:
      • 200 если запрос успешен
      • 400 если в запросе есть пользовательская ошибка
      • 402 если превышен какой-либо лимит на количество или объём запросов (см. ограничение на количество запросов, пожалуйста, свяжитесь с нами по адресу [email protected] если вам нужно увеличение лимитов)
      • 500 или 503 в случае ошибки сервера (имеет смысл подождать и повторить тот же запрос или открыть тикет на https://github.com/Blockchair/Blockchair.Support/issues/new или написать на [email protected])
    • В случае ошибок 40x и 50x есть поле context.error с описанием ошибки
    • context.state содержит в себе номер последнего блока в случае запросов к блокчейнам (например, для всех запросов, начинающихся с bitcoin там будет последний блок блокчейна Биткоина на момент запроса). Полезно для того, чтобы, например, посчитать количество подтверждений сети, или правильно итерировать результаты с использованием offset
    • context.results - для dashboard-коллов содержит в себе количество найденных результатов
    • context.limit - применённый лимит количества результатов
    • context.offset - применённый сдвиг нумерации результатов
    • context.rows - для infinitable-коллов содержит в себе количество возвращаемых строк
    • context.pre_rows - для некоторых infinitable-коллов содержит в себе количество строк, которые должны были бы вернуться до склеивания одинаковых (примечание: подобная архитектура использутся только для таблиц bitcoin[-cash].outputs)
    • context.total_rows - сколько всего строк возвращает запрос
    • context.api - массив информации о состоянии API:
      • context.api.version - версия API
      • context.api.last_major_update - время последнего обновления, которое каким-либо образом утрачивает обратную совместимость
      • context.api.next_major_update - время следующего запланированного обновления, которое может изменить выдаваемые результаты, или null, если обновлений не запланировано
      • context.api.tested_features - the list (comma-separated) of features with version numbers our API supports, but with no guarantee for backward compatibility if updated (in this case there will be no changes to context.api.next_major_update as well)
      • context.api.documentation - an URL to the latest version of documentation

Примечание: разумно следить за context.api.version и, если context.api.next_major_update не null, уведомить себя и изучить changelog. В случае, если в changelog нет изменений, которые нарушат совместимость вашего приложения, следить за тем, чтобы значение context.api.next_major_update не стало больше текущего. В случае, если изменения есть, настроить логику приложения так, чтобы после указанного времени применялась новая логика. Дополнительное примечание: в случае, если обратная совместимость нарушается только для какого-то одного API-колла, то возможна ситуация, когда context.api.next_major_update будет не null только для этого колла.

  • Ограничение на количество запросов: на текущий момент мы допускаем не более 30 запросов в минуту к нашему API от одного пользователя. В случае превышения этого лимита будет выдаваться ошибка 402. В случае злоупотребления, может быть заблокирован IP-адрес. Если вашему приложению необходимо большее количество запросов, пожалуйста, свяжитесь с нами по адресу [email protected]. Если вам необходимо разово выгрузить большой объём информации, свяжитесь с нами по адресу [email protected] и, в случае, если цель выгрузки академическая или исследовательская - вы получите данные бесплатно в удобном формате.

  • Отказ от ответственности: мы не гарантируем ни достоверность, ни целостность отдаваемой информации. Информация, выдаваемая нашим API не должна использоваться при принятии критически важных решений. Мы не гарантируем аптайм для нашего бесплатного API.

Вызовы для работы с infinitables (таблицы блокчейнов)

Возвращают информацию из таблиц в соответствии с фильтрами (q), сортировкой (s), лимитом (limit), и оффсетом (offset).

Запрос составляется следующим образом: https://api.blockchair.com/{blockchain}/[/mempool]{table}[?q={query}][&s={sorting}][&limit={limit}][&offset={offset}]

Возможные комбинации блокчейнов и таблиц:

  • Bitcoin:
    • bitcoin/blocks - содержит все блоки Bitcoin, включая последний
    • bitcoin/transactions - содержит все транзакции Bitcoin, исключая транзакции, находящиеся в мемпуле, а также в последнем блоке
    • bitcoin/outputs - содержит все выходы Bitcoin, исключая выходы, содержащиеся в транзакциях в мемпуле, а также в транзакциях в последнем блоке
    • bitcoin/mempool/blocks - содержит в себе только последний блок Bitcoin
    • bitcoin/mempool/transactions - содержит в себе транзакции Bitcoin, находящиеся в мемпуле, а также транзакции последнего блока
    • bitcoin/mempool/outputs - содержит выходы Bitcoin, содержащиеся в транзакциях в мемпуле, а также в транзакциях в последнем блоке
  • Litecoin, Bitcoin Cash - аналогично Bitcoin
  • Ethereum:
    • ethereum/blocks - содержит все блоки Ethereum, кроме последних 6
    • ethereum/uncles - содержит все анклы Ethereum, кроме тех, которые принадлежат последним 6 блокам
    • ethereum/transactions - содержит все транзакции Ethereum, кроме входящих в последние 6 блоков
    • ethereum/calls - содержит все коллы транзакций Ethereum, кроме входящих в последние 6 блоков
    • ethereum/mempool/blocks - содержит последние 6 блоков Ethereum, некоторые колонки содержат null
    • ethereum/mempool/transactions - содержит все транзакции Ethereum из последних 6 блоков, а также находящиеся в мемпуле

Примечание: для быстроты работы наша архитектура содержит отдельные таблицы (mempool*) для неподтверждённых транзакций, а также для блоков, которые с определённой вероятностью могут форкнуться от основной цепи. Для Bitcoin, Bitcoin Cash, и Litecoin в mempool* содержится помимо мемпула последний блок, а для Ethereum - последние 6 блоков. Исключение: для Bitcoin, Bitcoin Cash, и Litecoin в таблице blocks также содержится информация о последнем блоке (это поведение может измениться в будущем). Для Ethereum мы не "проигрываем" транзакции целиком для последних 6 блоков, поэтому таблицы mempool/calls нет.

Фильтром можно пользоваться следующим образом: ?q=field(value)[,field(value)...], где field - это колонка, по которой необходим фильтр, а value - значение, специальное значение или диапазон значений. Возможные колонки приведены в табличках ниже. Возможные выражения для значений:

  • value - например, bitcoin/blocks?q=id(0) найдёт информацию о блоке 0
  • left.. - нестрогое неравенство - например, bitcoin/blocks?q=id(1..) найдёт информацию о блоке 1 и выше
  • left... - строгое неравенство - например, bitcoin/blocks?q=id(1...) найдёт информацию о блоке 2 и выше
  • ..right - нестрогое неравенство - например, bitcoin/blocks?q=id(..1) найдёт информацию о блоках 0 и 1
  • ...right - строгое неравенство - например, bitcoin/blocks?q=id(...1) найдёт информацию только о блоке 0
  • left..right - нестрогое неравенство - например, bitcoin/blocks?q=id(1..3) найдёт информацию о блоках 1, 2 и 3
  • left...right - строгое неравенство - например, bitcoin/blocks?q=id(1...3) найдёт информацию только о блоке 2
  • ~like - вхождение в строку (оператор LIKE), например, bitcoin/blocks?q=coinbase_data_bin(~hello) найдёт все блоки, в coinbase_data_bin которых содержится hello
  • ^like - вхождение в начало строки (оператор STARTS WITH), например, bitcoin/blocks?q=coinbase_data_hex(^00) найдёт все блоки, для которых coinbase_data_hex начинается с 00

Для time*-полей значение можно указывать в следующих форматах:

  • YYYY-MM-DD HH:ii:ss
  • YYYY-MM-DD
  • YYYY-MM

Неравенства также поддерживаются для таких значений, но и слева, и справа значения должны быть в одном формате, например: bitcoin/blocks?q=time(2009-01-03..2009-01-31).

Если нужно перечислить несколько фильтров, их нужно перечислить через запятую в секции ?q=, например, bitcoin/blocks?q=id(500000..),coinbase_data_bin(~hello)

В качестве тестируемой функции поддерживаются операторы NOT и OR (поведение может измениться в будущем).

Оператор NOT указывается через запятую перед выражением, которое нужно инвертировать, например, bitcoin/blocks?q=not,id(1..) вернёт блок 0.

Оператор OR указывается между выражениями и имеет приоритет (два выражения вокруг OR как бы оборачиваются в скобки), например, bitcoin/blocks?q=id(1),or,id(2) вернет информацию о блоках 1 и 2.

Максимальное гарантированное поддерживаемое количество фильтров в одном запросе: 5.

Сортировкой можно пользоваться следующим образом: ?s=field(direction), где direction может быть либо asc для сортировки по возрастанию, либо desc для сортировки по убыванию, например bitcoin/blocks?s=id(asc)

Если нужно применить несколько сортировок, их можно перечислить через запятую аналогично фильтрам. Максимальное гарантированное количество сортировок - 2.

Лимит используется так: ?limit=N, где N - натуральное число от 1 до 100. По умолчанию - 10. Для ряда случаев LIMIT игнорируется и возвращаются все результаты - в таком случае context.limit примет значение NULL.

Оффсет используется в качестве пагинатора, например ?offset=10 вернёт следующие 10 результатов. context.offset принимает значение установленного OFFSET. Максимальное значение - 10000. Если нужна последняя страница, то проще и быстрее изменить направление сотировки на противоположное. Важно: при итерировании результатов крайне вероятна ситуация, что пул результатов увеличится, т.к. были найдены новые блоки. Для избежания увеличения пула надо добавлять дополнительное условие, ограничивающее сверху id блока значением, полученным в context.state в первом запросе.

(bitcoin[-cash]|litecoin)/[mempool/]blocks

Возвращает информацию о блоках

Колонка Тип Описание Q? S?
id int Высота (height) блока + +
hash string [0-9a-f]{64} Хеш блока + +
date string YYYY-MM-DD Дата нахождения блока (UTC)
time string YYYY-MM-DD HH:ii:ss Время нахождения блока (UTC) + +
median_time string YYYY-MM-DD HH:ii:ss Медианное время блока (UTC) +
size int Размер блока в байтах (может быть более 1 Мб для Биткоина, до 32 Мб для Кеша) + +
stripped_size(*) int Размер блока в байтах без учёта witness-информации (до 1 Мб для Биткоина) + +
weight(*) int Вес блока в weight units (до 4 MWU) + +
version int Поле версионности + +
version_hex string [0-9a-f]* Поле версионности в hex
version_bits string [01]{30} Поле версионности двоичным исчислением
merkle_root [0-9a-f]{64} Хеш merkle root
nonce int Значение nonce + +
bits int Поле bits + +
difficulty float Сложность + +
chainwork string [0-9a-f]{64} Поле chainwork
coinbase_data_hex string [0-9a-f]* Hex информации, содержащейся в coinbase-входе coinbase-транзакции блока +
transaction_count int Количество транзакций в блоке + +
witness_count(*) int Количетство транзакций в блоке, которые содержат witness-информацию + +
input_count int Количество входов во всех транзакциях блока + +
output_count int Количество выходов во всех транзакциях блока + +
input_total int Сумма входов в сатоши + +
input_total_usd float Сумма входов в USD (здесь и далее для USD - на момент date) + +
output_total int Сумма выходов в сатоши + +
output_total_usd float Сумма выходов в USD + +
fee_total int Суммарная комиссия в сатоши + +
fee_total_usd float Суммарная комиссия в USD + +
fee_per_kb float Комиссия за килобайт (1000 байт) данных в сатоши + +
fee_per_kb_usd float Комиссия за килобайт данных в USD + +
fee_per_kwu(*) float Комиссия за 1000 weight units данных в сатоши + +
fee_per_kwu_usd(*) float Комиссия за 1000 weight units данных в USD + +
cdd_total float Количество уничтоженных монетодней всеми транзакциями блока + +
generation int Награда майнера за блок в сатоши + +
generation_usd float Награда майнера за блок в USD + +
reward int Суммарная награда майнера (награда + суммарная комиссия) в сатоши + +
reward_usd float Суммарная награда майнера (награда + суммарная комиссия) в USD + +
guessed_miner string .* Предположительное наименование майнера, нашедшего блок (эвристика по coinbase_data_bin и по адресам, на которые идёт награда) + +

Дополнительные синтетические колонки (можно по ним искать и/или сортировать, но они не выводятся)

Колонка Тип Описание Q? S?
coinbase_data_bin string .* Текстовое представление coinbase data. Позволяет применять оператор LIKE: ?q=coinbase_data_bin(~hello) +

Примечания:

  • для столбцов id и hash повышенная эффективность при выгрузке одной записи
  • нет возможности поиска по столбцу date напрямую, есть возможность поиска ?q=time(YYYY-MM-DD)
  • поиск по столбцу coinbase_data_hex ведётся оператором ^, также можно искать ~ по coinbase_data_bin (однако, поля coinbase_data_bin всё равно не будет в выдаче)
  • (*) - только для Bitcoin
  • сортировка по умолчанию - id DESC

(bitcoin[-cash]|litecoin)/[mempool/]transactions

Возвращает информацию о транзакциях

Колонка Тип Описание Q? S?
block_id int Высота (id) блока, содержащего транзакцию + +
id int Внутренний id транзакции (не имеет отношения к блокчейну, используется для внутренних целей) + +
hash string [0-9a-f]{64} Хеш транзакции +
date string YYYY-MM-DD Дата блока, в котором содержится транзакция (UTC)
time string YYYY-MM-DD HH:ii:ss Время блока, в котором содержится транзакция (UTC) + +
size int Размер транзации в байтах + +
weight(*) int Вес транзакции в weight units + +
version int Поле версионности + +
lock_time int Lock time - может быть или высотой блока, или unix timestamp + +
is_coinbase boolean Является ли coinbase-транзакцией (генерирование новых монет, у такой транзакции input_count равен 1 и означает синтетический coinbase-вход)? +
has_witness(*) boolean Есть ли в транзакции witness-часть (использование SegWit)? +
input_count int Количество входов + +
output_count int Количество выходов + +
input_total int Сумма входов в сатоши + +
input_total_usd float Сумма входов в USD + +
output_total int Сумма выходов в сатоши + +
output_total_usd float Сумма выходов в USD + +
fee int Комиссия в сатоши + +
fee_usd float Комиссия в USD + +
fee_per_kb float Комиссия за килобайт (1000 байт) данных в сатоши + +
fee_per_kb_usd float Комиссия за килобайт данных в USD + +
fee_per_kwu(*) float Комиссия за 1000 weight units данных в сатоши + +
fee_per_kwu_usd(*) float Комиссия за 1000 weight units данных в USD + +
cdd_total float Количество уничтоженных монетодней + +

Примечания:

  • для столбцов id и hash повышенная эффективность при выгрузке одной записи
  • нет возможности поиска по столбцу date напрямую, есть возможность поиска ?q=time(YYYY-MM-DD)
  • (*) - только для Bitcoin
  • сортировка по умолчанию - id DESC

(bitcoin[-cash]|litecoin)/[mempool/]outputs

Возвращает информацию о выходах (которые становятся входами, когда тратятся, и тогда о них появляется spending*-информация)

Колонка Тип Описание Q? S?
block_id int Высота (id) блока, содержащего транзакцию, содержащую выход + +
transaction_id int Внутренний id транзакции, содержащей выход + +
index int Порядковый индекс выхода в транзакции (с 0) + +
transaction_hash string [0-9a-f]{64} Хеш транзакции, содержащей выход
date string YYYY-MM-DD Дата блока, в котором содержится выход (UTC)
time string YYYY-MM-DD HH:ii:ss Время блока, в котором содержится выход (UTC) + +
value int Монетарное значение выхода в сатоши + +
value_usd float Монетарное значение выхода в USD на момент date + +
recipient string [0-9a-zA-Z\-]* Биткоин-адрес или синтетический адрес получатель выхода + +
type string (enum) Тип выхода - одно из следующих значений: pubkey/pubkeyhash/scripthash/multisig/nulldata/nonstandard/witness_v0_scripthash/witness_v0_keyhash + +
script_hex string [0-9a-f]* Hex скрипта выхода +
is_from_coinbase boolean Является ли выходом coinbase-транзакции? +
is_spendable null or boolean Можно ли теоретически потратить этот выход? Для pubkey и multisig выходов проводится проверка возможности существования соответствующего закрытого ключа, и выводится true/false в зависимости от результата проверки. Для nulldata-выходов всегда false. Для остальных типов тривиально проверить нельзя, в этом случае вовзращается null +
is_spent boolean Потрачен ли выход? (Для полей далее - если потрачен, то есть значения, если нет, то везде null +
spending_block_id null or int Высота (id) блока, в котором содержится транзакция, тратящая выход (там она является входом). null если выход пока не потрачен. + +
spending_transaction_id null or int Внутренний id транзакции, в которой тратится выход + +
spending_index null or int Порядковый индекс входа в тратящей транзакции (с 0) + +
spending_transaction_hash null or string [0-9a-f]{64} Хеш тратящей транзакции
spending_date null or string YYYY-MM-DD Дата блока, в котором тратится выход
spending_time null or string YYYY-MM-DD HH:ii:ss Время блока, в котором тратится выход + +
spending_value_usd null or float Монетарное значение выхода в USD на момент spending_date + +
spending_sequence null or int Техническое значение sequence входа + +
spending_signature_hex null or string [0-9a-f]* Hex скрита входа (подписи)
spending_witness(*) null or string (JSONB) Witness-информация в виде экранированного JSONB
lifespan null or int Количество секунд с момента создания выхода (time) до его траты (spending_time), null если выход не потрачен + +
cdd null or float Количество уничтоженных монетодней при трате выхода + +

Дополнительные синтетические колонки (можно по ним искать и/или сортировать, но они не выводятся)

Колонка Тип Описание Q? S?
script_bin string .* Текстовое представление script_hex. Позволяет применять оператор LIKE: ?q=script_bin(~hello) +

Примечания:

  • для столбцов transaction_id и spending_transaction_id повышенная эффективность при выгрузке записей если указана одна конкретная транзакция, а не диапазон
  • нет возможности поиска по столбцам date и spending_date напрямую, есть возможность поиска ?q=time(YYYY-MM-DD) и ?q=spending_time(YYYY-MM-DD) соответственно
  • поиск по столбцу script_hex ведётся оператором ^, также можно искать ~ по script_bin (однако, поля script_bin всё равно не будет в выдаче)
  • (*) - только для Bitcoin
  • сортировка по умолчанию - transaction_id DESC

ethereum/[mempool/]blocks

Возвращает информацию о блоках

Колонка Тип Описание Q? S?
id int Высота (height) блока + +
hash string 0x[0-9a-f]{64} Хеш блока (с 0x) +
date string YYYY-MM-DD Дата нахождения блока (UTC)
time string YYYY-MM-DD HH:ii:ss Время нахождения блока (UTC) + +
size int Размер блока в байтах + +
miner string 0x[0-9a-f]{40} Адрес майнера, получившего награду (с 0x) +
extra_data_hex string [0-9a-f]* Произвольные данные, включённые майнером в блок +
difficulty int Сложность + +
gas_used int Количество газа, использованного транзакциями блока + +
gas_limit int Лимит газа на блок, установленный майнером + +
logs_bloom string [0-9a-f]* Logs Bloom
mix_hash string [0-9a-f]{64} Хеш Mix Hash
nonce string [0-9a-f]* Значение nonce
receipts_root string [0-9a-f]{64} Хеш Receipts Root
sha3_uncles string [0-9a-f]{64} Хеш SHA3 Uncles
state_root string [0-9a-f]{64} Хеш State Root
total_difficulty numeric string Суммарная сложность
transactions_root string [0-9a-f]{64} Хеш Transactions Root
uncle_count int Количество анклов блока + +
transaction_count int Количество транзакций в блоке + +
synthetic_transaction_count int Количество синтетических транзакций (они не существуют как отдельные транзакции в блокчейне, но меняют state, например - это транзации genesis-блока, награды майнерам, транзакции DAO-форка + +
call_count(*) int Общее количество коллов, которые совершают транзакции в блоке + +
synthetic_call_count int Количество синтетических коллов (аналогично транзакциям) + +
value_total numeric string Монетарная сумма всех транзакций блока в wei, здесь и далее numeric string - передаётся как строка, т.к. wei-значения не влезают в uint64 + +
value_total_usd float Монетарная сумма всех транзакций блока в USD + +
internal_value_total(*) numeric string Монетарная сумма всех внутренных коллов в блоке (см. примечание ниже) в wei + +
internal_value_total_usd(*) float Монетарная сумма всех внутренных коллов в блоке в USD + +
generation numeric string Награда майнера за найденный блок в wei (3 или 5 эфиров + процент от анклов) + +
generation_usd float Награда майнера за найденный блок в USD + +
uncle_generation(*) numeric string Суммарная награда uncle-майнеров в wei + +
uncle_generation_usd(*) float Суммарная награда uncle-майнеров в USD + +
fee_total(*) numeric string Суммарная комиссия в wei + +
fee_total_usd(*) float Суммарная комиссия в USD + +
reward(*) numeric string Суммарная награда майнера в wei (награда за нахождение + комиссии) + +
reward_usd(*) float Суммарная награда майнера в USD + +

Дополнительные синтетические колонки (можно по ним искать и/или сортировать, но они не выводятся)

Колонка Тип Описание Q? S?
extra_data_bin string .* Текстовое представление extra data. Позволяет применять оператор LIKE: ?q=extra_data_bin(~hello) +

Примечания:

  • (*) - всегда равно null для mempool/blocks
  • для столбцов id и hash повышенная эффективность при выгрузке одной записи
  • нет возможности поиска по столбцу date напрямую, есть возможность поиска ?q=time(YYYY-MM-DD)
  • поиск по полям, в которых содержатся значения в wei (value_total, internal_value_total, generation, uncle_generation, fee_total, reward) может быть с погрешностями
  • поиск по столбцу extra_data_hex ведётся оператором ^, также можно искать ~ по extra_data_bin (однако, поля extra_data_bin всё равно не будет в выдаче)
  • разница между value_total и internal_value_total такова: к примеру, транзакция сама по себе передаёт 0 эфиров, но эта транзакция - вызов контракта, который кому-то передаёт, допустим, 10 эфиров. Тогда value будет 0 эфиров, а internal_value - 10 эфиров
  • сортировка по умолчанию - id DESC

ethereum/uncles

Возвращает информацию об анклах

Колонка Тип Описание Q? S?
parent_block_id int Высота (height) родительского блока + +
index int Порядковый номер анкла в блоке + +
hash string 0x[0-9a-f]{64} Хеш анкла (с 0x) +
date string YYYY-MM-DD Дата нахождения (UTC)
time string YYYY-MM-DD HH:ii:ss Время нахождения (UTC) + +
size int Размер анкла в байтах + +
miner string 0x[0-9a-f]{40} Адрес майнера, получившего награду (с 0x) +
extra_data_hex string [0-9a-f]* Произвольные данные, включённые майнером анкла +
difficulty int Сложность + +
gas_used int Количество газа, использованного транзакциями + +
gas_limit int Лимит газа на блок, установленный майнером + +
logs_bloom string [0-9a-f]* Logs Bloom
mix_hash string [0-9a-f]{64} Хеш Mix Hash
nonce string [0-9a-f]* Значение nonce
receipts_root string [0-9a-f]{64} Хеш Receipts Root
sha3_uncles string [0-9a-f]{64} Хеш SHA3 Uncles
state_root string [0-9a-f]{64} Хеш State Root
total_difficulty numeric string Суммарная сложность
transactions_root string [0-9a-f]{64} Хеш Transactions Root
generation numeric string Награда майнера нашедшего анкл в wei + +
generation_usd float Награда майнера в USD + +

Дополнительные синтетические колонки (можно по ним искать и/или сортировать, но они не выводятся)

Колонка Тип Описание Q? S?
extra_data_bin string .* Текстовое представление extra data. Позволяет применять оператор LIKE: ?q=extra_data_bin(~hello) +

Примечания:

  • для столбцов parent_block_id и hash повышенная эффективность при выгрузке одной или нескольких записей
  • нет возможности поиска по столбцу date напрямую, есть возможность поиска ?q=time(YYYY-MM-DD)
  • поиск по полям, в которых содержатся значения в wei (generation) может быть с погрешностями
  • поиск по столбцу extra_data_hex ведётся оператором ^, также можно искать ~ по extra_data_bin (однако, поля extra_data_bin всё равно не будет в выдаче)
  • сортировка по умолчанию - parent_block_id DESC

ethereum/[mempool/]transactions

Возвращает информацию о транзакциях

Колонка Тип Описание Q? S?
block_id int Высота (id) блока, содержащего транзакцию + +
id int Внутренний id транзакции (не имеет отношения к блокчейну, используется для внутренних целей) + +
index(*)(**) int Порядковый номер транзакции в блоке + +
hash(**) string 0x[0-9a-f]{64} Хеш транзакции (с 0x) +
date string YYYY-MM-DD Дата блока, в котором содержится транзакция (UTC)
time string YYYY-MM-DD HH:ii:ss Время блока, в котором содержится транзакция (UTC) + +
size int Размер транзакции в байтах + +
failed(*) bool Не зафейлилась ли транзакция +
type(*) string (enum) Тип транзакции - одно из следующих значений: call/create/call_tree/create_tree/synthetic_coinbase. Описание в примечании. +
sender(**) string 0x[0-9a-f]{40} Адрес отправителя транзакции (с 0x) +
recipient string 0x[0-9a-f]{40} Адрес получателя транзакции (с 0x) +
call_count(*) int Количество коллов, которые совершает транзакция + +
value numeric string Cумма транзакции в wei, здесь и далее numeric string - передаётся как строка, т.к. wei-значения не влезают в uint64 + +
value_usd float Сумма транзакции в USD + +
internal_value(*) numeric string Сумма всех внутренных коллов в блоке в wei + +
internal_value_usd(*) float Сумма всех внутренных коллов в блоке в USD + +
fee(*)(**) numeric string Комиссия в wei + +
fee_usd(*)(**) float Комиссия в USD + +
gas_used(*)(**) int Количество газа, использованного транзакцией + +
gas_limit(**) int Лимит газа на транзакцию, установленный отправителем транзакции + +
gas_price(**) int Цена за газ, установленная отправителем транзакции + +
input_hex(**) string [0-9a-f]* Входные данные транзакции +
nonce(**) string [0-9a-f]* Значение nonce
v(**) string [0-9a-f]* Значение v
r(**) string [0-9a-f]* Значение r
s(**) string [0-9a-f]* Значение s

Дополнительные синтетические колонки (можно по ним искать и/или сортировать, но они не выводятся)

Колонка Тип Описание Q? S?
input_bin string .* Текстовое представление input data. Позволяет применять оператор LIKE: ?q=input_bin(~hello) +

Примечания:

  • (*) - всегда равно null для mempool/transactions
  • (**) - всегда равно null если type = synthetic_coinbase
  • для столбцов id и hash повышенная эффективность при выгрузке одной записи
  • нет возможности поиска по столбцу date напрямую, есть возможность поиска ?q=time(YYYY-MM-DD)
  • поиск по полям, в которых содержатся значения в wei (value, internal_value) может быть с погрешностями
  • поиск по столбцу input_hex ведётся оператором ^, также можно искать ~ по input_bin (однако, поля input_bin всё равно не будет в выдаче)
  • разница между value и internal_value такова: например, транзакция сама по себе передаёт 0 эфиров, но эта транзакция - вызов контракта, который кому-то передаёт, допустим, 10 эфиров. Тогда value будет 0 эфиров, а internal_value - 10 эфиров
  • сортировка по умолчанию - id DESC
  • возможные типы (type) транзакций:
    • call - транзакция передаёт value, при этом коллов больше нет (простая передача эфиров не в пользу контракта или вызов контракта, который ничего не делает)
    • create - создание нового контракта
    • call_tree - транзакция вызывает контракт, который производит какие-либо ещё коллы
    • create_tree - создание нового контракта, который начинает производить какие-либо коллы или создавать контракты сам
    • synthetic_coinbase - синтетическая транзакция начисления награды майнеру (блока или анкла)

ethereum/calls

Возвращает информацию о коллах

Колонка Тип Описание Q? S?
block_id int Высота (id) блока, содержащий колл + +
transaction_id int Внутренний id транзакции, содержащий колл + +
transaction_hash(**) string 0x[0-9a-f]{64} Хеш транзакции (с 0x), содержащий колл
index string Индекс колла внутри транзакции (древовидный, например, "0.8.1" + +
depth int Грубина колла внутри дерева коллов (начиная с 0) + +
date string YYYY-MM-DD Дата блока, в котором содержится колл (UTC)
time string YYYY-MM-DD HH:ii:ss Время блока, в котором содержится колл (UTC) + +
failed bool Не зафейлился ли колл +
fail_reason string .* или null Если зафейлился, то строка с причиной, если нет, то null +
type string (enum) Тип колла - одно из следующих значений: call/delegatecall/staticcall/callcode/selfdesctruct/create/synthetic_coinbase +
sender(**) string 0x[0-9a-f]{40} Адрес вызывающего колл (с 0x) +
recipient string 0x[0-9a-f]{40} Адрес вызываемого коллом (с 0x) +
child_call_count int Количество дочерних коллов + +
value numeric string Cумма колла в wei, здесь и далее numeric string - передаётся как строка, т.к. wei-значения не влезают в uint64 + +
value_usd float Сумма колла в USD + +
transferred bool Переданы ли эфиры этим коллом (false если failed, или если тип транзакции, который не изменяет state, например, staticcall +
input_hex(**) string [0-9a-f]* Входные данные колла
output_hex(**) string [0-9a-f]* Выходные данные колла

Примечания:

  • (**) - всегда равно null если type = synthetic_coinbase
  • для столбца transaction_id повышенная эффективность при выгрузке одной записи
  • нет возможности поиска по столбцу date напрямую, есть возможность поиска ?q=time(YYYY-MM-DD)
  • поиск по полям, в которых содержатся значения в wei (value, internal_value) может быть с погрешностями
  • сортировка по умолчанию - transaction_id DESC
  • сортировка по index - по алфавиту (т.е. "0.2" идет после "0.11"), в некоторых случаях используется переключение на натуральную сортировка (например, когда есть фильтр по transaction_id)

Примечания

  • для неподтверждённых транзакций (и выходов в случае bitcoin[-cash]) характерны следующие признаки:
    • их block_id равен -1
    • date и time указывают на время получения транзакции нашей нодой
  • при использовании offset разумно добавлять в фильтры максимальный номер блока (?q=block_id(..N)), т.к. очень вероятно, что за время итерирования добавятся новые записи в таблицу. Для удобства из первого результа любого запроса можно взять значение context.state, содержащее номер последнего блока на момент выполнения запроса и использовать далее именно его.

Dashboard-вызовы

API поддерживает ряд коллов, которые выдают какую-либо агрегированную информацию, или просто информацию в более удобном виде по определённым сущностям.

(bitcoin[-cash]|litecoin|ethereum)/dashboards/block/{A} и (bitcoin[-cash]|ethereum)/dashboards/blocks/{A[,B,...]}

На входе принимает высоту или хеш блока (блоков). data вовзращает массив, ключами которого являются высоты блоков или хеши блоков, а значениями массив из элементов:

  • block - информация о блоке в infinitable-формате (bitcoin[-cash]|ethereum)/blocks
  • transactions - массив всех хешей транзакций, включённых в блок
  • только для Ethereum - synthetic_transactions - массив внутренних id синтетических транзакций блока (у них нет хеша) (null вместо массива пока блок не получит 6 подтверждений)
  • только для Ethereum - uncles - массив хешей анклов блока (null вместо массива пока блок не получит 6 подтверждений, в случае если нет анклов и больше 6 подтверждений - пустой массив ([]))

context.results содержит количество найденных блоков.

ethereum/dashboards/uncle/{A} и ethereum/dashboards/uncles/{A[,B,...]}

На входе принимает хеш анкла (анклов). data вовзращает массив, ключами которого являются хеши анклов, а значениями массив из элементов:

  • uncle - информация о блоке в infinitable-формате ethereum/uncles

context.results содержит количество найденных анклов.

(bitcoin[-cash]|litecoin|ethereum)/dashboards/transaction/{A} и (bitcoin[-cash]|litecoin|ethereum)/dashboards/transactions/{A[,B,...]}

На входе принимает внутренний blockchair-id или хеш транзакции (транзакций). data вовзращает массив, ключами которого являются идентификаторы или хеши транзакций, а значениями массив из элементов:

  • transaction - информация о транзакции в infinitable-формате bitcoin[-cash]/transactions
  • (только bitcoin[-cash]) inputs - массив всех входов транзакции, отсортированный по spending_index в infinitable-формате bitcoin[-cash]/outputs
  • (только bitcoin[-cash]) outputs - массив всех выходов транзакции, отсортированный по index в infinitable-формате bitcoin[-cash]/outputs
  • (только ethereum) calls - массив всех коллов, совершённых в ходе выполнения транзакции, всегда null для транзакций из мемпула и последних 6 блоков

context.results содержит количество найденных транзакций.

(bitcoin[-cash]|litecoin|ethereum)/dashboards/transaction/{hash}/priority

Для транзакций в мемпуле показывает приоритет (position) (для Bitcoin - по fee_per_kwu, для Bitcoin Cash - по fee_per_kb, для Ethereum - по gas_price) перед остальным транзакциями (всего out_of транзакций в мемпуле). В остальном имеет такую же структуру, как и колл (bitcoin[-cash]|ethereum)/dashboards/transaction/{A}

(bitcoin[-cash]|litecoin)/dashboards/address/{A}

На входе принимает адрес. data вовзращает массив из одного элемента (если адрес найден), ключом которого является сам адрес, а значениями массив из элементов:

  • address
    • address.type - тип адреса (тип выхода - совпадает с bitcoin[-cash].outputs.type)
    • address.script_hex - скрипт адреса
    • address.balance - баланс адреса в сатоши (здесь и далее - учитывая unconfirmed-выходы) - int
    • address.balance_usd - баланс адреса в USD - float
    • address.received - сколько всего получил адрес в сатоши
    • address.received_usd - сколько всего получил адрес в USD
    • address.spent - сколько всего потратил адрес в сатоши
    • address.spent_usd - сколько всего потратил адрес в USD
    • address.output_count - количество выходов в пользу этого адреса
    • address.unspent_output_count - количество непотраченных выходов для этого адреса (т.е. количество входов с этим адресом можно посчитать как output_count-unspent_output_count)
    • address.first_seen_receiving - timestamp (UTC) когда первый раз этот адрес получал коины
    • address.last_seen_receiving - timestamp (UTC) когда последний раз этот адрес получал коины
    • address.first_seen_spending - timestamp (UTC) когда первый раз этот адрес отправлял коины
    • address.last_seen_spending - timestamp (UTC) когда последний раз этот адрес отправлял коины
    • address.transaction_count - количество уникальных транзакций, в которых участвовал адрес
  • transactions - массив последних 100 хешей транзакций, в которых участвовал адрес

context.results содержит количество найденных адресов (0 или 1, пока не реализован колл addresses).

Для итерирования transactions поддерживается ?offset=N.

ethereum/dashboards/address/{A}

На входе принимает адрес. data вовзращает массив из одного элемента (если адрес найден), ключом которого является сам адрес, а значениями массив из элементов:

  • address
    • address.type - тип адреса (account - для обычного адреса, contract - для контракта)
    • address.contract_code_hex - если контракт, то hex кода контракта при создании, для обычного адреса - null
    • address.contract_created - если контракт, если контракт был действительно создан - true, если нет (т.е. create-колл зафейленный) - false, для обычного адреса - null
    • address.contract_destroyed - если контракт, если контакт был уничтожен (SELFDESCTRUCT), то true, если действующий - false, для обычного адреса - null
    • address.balance - точный баланс адреса в wei (здесь и далее для значений в wei - numeric string)
    • address.balance_usd - баланс адреса в USD - float
    • address.received_approximate - сколько всего получил адрес в wei (приблизительно) (*)
    • address.received_usd - сколько всего получил адрес в USD (приблизительно) (*)
    • address.spent_approximate - сколько всего потратил адрес в wei (приблизительно) (*)
    • address.spent_usd - сколько всего потратил адрес в USD (приблизительно) (*)
    • address.fees_approximate - сколько всего адрес потратил на комиссиях в wei (приблизительно) (*)
    • address.fees_usd - сколько всего адрес потратил на комиссиях в USD (приблизительно) (*)
    • address.receiving_call_count - количество коллов в пользу этого адреса, в которых произошла передача value (**)
    • address.spending_call_count - количество коллов, которые сделал этот адрес, в которых произошла передача value (**)
    • address.call_count - суммарное количество всех коллов, в которых участвовал этот адрес (может быть больше receiving_call_count + spending_call_count, т.к. учитывает и зафейленные коллы)
    • address.transaction_count - количество транзакций, в которых участвовал адрес
    • address.first_seen_receiving - timestamp (UTC) когда первый раз этот адрес получал успешный входящий колл
    • address.last_seen_receiving - timestamp (UTC) когда последний раз этот адрес получал успешный входящий колл
    • address.first_seen_spending - timestamp (UTC) когда первый раз этот адрес отправлял успешный колл
    • address.last_seen_spending - timestamp (UTC) когда последний раз этот адрес отправлял успешный колл
  • calls - массив последних 100 коллов с участием адреса, каждый элемент - массив, содержащий следующие колонки из ethereum/calls: block_id, transaction_hash, index, time, sender, recipient, value , value_usd , transferred

context.results содержит количество найденных адресов (0 или 1, пока не реализован колл addresses).

Для итерирования calls поддерживается ?offset=N.

Примечания:

  • (*) - в этих колонках значение в wei может быть округлено. Для миллионов коллов погрешность может составлять более 1 эфира
  • (**) - учитываются коллы, для которых ethereum/calls.transferred = true (см. докуменацию ethereum/calls), т.е. здесь не учитываются коллы, которые не меняют state (staticcall и т.д.), а также коллы, которые зафейлились

(bitcoin[-cash]|litecoin|ethereum)/stats

Возвращает статистику по блокчейну массивом:

  • blocks - общее количество блоков
  • (только ethereum) uncles - общее количество анклов
  • transactions - общее количество транзакций
  • (только ethereum) calls - общее количество внутренних коллов
  • blocks_24h - блоков за последние 24 часа
  • circulation для bitcoin[-cash]|litecoin, circulation_approximate для ethereum - количество монет в обращении (в сатоши или в wei соответственно, для ethereum - приблизительное значение)
  • transactions_24h - транзакций за последние 24 часа
  • difficulty - текущая сложность
  • volume_24h для bitcoin[-cash]|litecoin, volume_24h_approximate для ethereum - монетарный объём транзакций за последние 24 часа (для ethereum - приблизительное значение)
  • mempool_transactions - количество транзакций в мемпуле
  • (только ethereum) mempool_median_gas_price - медианная цена газа в мемпуле
  • (только bitcoin[-cash]|litecoin) mempool_size - размер мемпула в байтах
  • mempool_tps - количество транзакций в секунду, поступающих в мемпул
  • (только ethereum) mempool_total_value_approximate - монетарный объём мемпула
  • (только bitcoin[-cash]|litecoin) mempool_total_fee_usd - суммарная комиссия в USD в мемпуле
  • best_block_height - высота последнего блока
  • best_block_hash - хеш последнего блока
  • best_block_time - время последнего блока
  • (только ethereum) uncles_24h - количество анклов за последние 24 часа
  • (только bitcoin[-cash]|litecoin) nodes - количество полных нод в сети
  • hashrate_24h - хешрейт (хешей в секунду) майнеров в среднем за последние 24 часа
  • market_price_usd - среднерыночная цена 1 монеты в USD (провайдер информации о рынках: CoinGecko)
  • market_price_btc - среднерыночная цена 1 монеты в биткоинах (для Биткоина всегда 1)
  • market_price_usd_change_24h_percentage - изменение рыночной цены в процентах за 24 часа
  • market_cap_usd - капитализация рынка (монет в обращении * цена за монету в USD)
  • market_dominance_percentage - индекс доминации (сколько % от всего рынка криптовалют занимает рыночная капитализация монеты) ... и некоторые другие ключи с очевидными названиями

stats

Возвращает инфорамацию сразу по четырём коллам:

  • bitcoin/stats
  • bitcoin-cash/stats
  • ethereum/stats
  • litecoin/stats

(bitcoin[-cash]|litecoin)/nodes

Возвращает информацию о доступных нодах.

  • nodes - ноды
    • version - User Agent клиента
    • country - страна (определяется по GeoIP)
    • height - последний блок в цепочке ноды
    • flags - флаги сервисов
  • count - количество
  • countries - количество нод по странам
  • versions - количество нод по User Agent

Пример работы с API

Допустим, нам требуется получать все последние транзакции из блокчейна Эфириума на сумму более 1 млн. долларов. Для этого необходимо составить следующий запрос:

  • https://api.blockchair.com/ethereum/transactions?q=internal_value_usd(10000000..)&s=id(desc)

В этом запросе мы обращаемся к блокчейну (ethereum), таблице (transactions), устанасливаем условие суммы (q=internal_value_usd(10000000..)), и сортировку по убыванию (&s=id(desc)).

Допустим, скрипт, который обращался к API с этим запросом по какой-то причине не работал некоторое время. Или в блокчейне появилось очень много транзакций на сумму более 1 млн. долларов, и со стандартным лимитом в 10 результатов, скрипт пропустил какие-то транзакции. Тогда сначала мы делаем тот же запрос:

  • https://api.blockchair.com/ethereum/transactions?q=internal_value_usd(10000000..)&s=id(desc)

Из его результата запоминаем context.state, кладём его в некую переменную _S_, и далее для получения следующих результатов применяем offset:

  • https://api.blockchair.com/ethereum/transactions?q=internal_value_usd(10000000..),block_id(.._S_)&s=id(desc)&offset=10

Увеличиваем значение offset пока не получим выборку с транзакцией, о которой мы уже знали.

Рассылка транзакций

Для рассылки транзакции по сети, нужно выполнить POST-запрос к https://api.blockchair.com/{chain}/push/transaction (где {chain} может быть: bitcoin, bitcoin-cash, ethereum, или litecoin) с data, содержащим транзакцию в сыром шестнадцатеричном виде (в Ethereum начинается с 0x). Пример:

curl -v --data "data=01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff001d0104ffffffff0100f2052a0100000043410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac00000000" https://api.blockchair.com/bitcoin/push/transaction

Если транзакция была успешно разослана по сети, API вернёт JSON-ответ (код 200), содержищий массив data с ключом transaction_hash, содержащим хеш самой транзакции. В случае ошибки (неправильный формат транзакции, трата уже потраченных выходов, и т.д.) API вернёт код 400.

Пример успешного ответа:

{"data":{"transaction_hash": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098…"},"context":{"code":200,…

Получение транзакций в сыром виде

Можно получить транзакцию в сыром виде напрямую от наших нод. Для этого требуется выполнить следующий API-запрос: https://api.blockchair.com/{chain}/raw/transaction/{txhash} (где {chain} может быть: bitcoin, bitcoin-cash, ethereum, или litecoin)

Ответ содержит два ключа:

  • raw_transaction — транзакция в сыром виде в шестнадцатеричной с.и.;
  • decoded_raw_transaction (недоступно для Ethereum) — транзакция в сыром виде в JSON. Пожалуйста, имейте в виду, что структура JSON-массива может измениться с обновлением наших нод, и это не будет отмечено в журнале изменений.

Поддержка