API Arc mainnet
Вы на сайте тестовой сети
Проиндексировано с блока 0
Сеть 5042 проиндексирована с нулевого блока без пропусков, а узел за ней хранит полную историю. Любой блок, любая транзакция, любая квитанция, любой баланс — на всю глубину цепочки.
Не верьте на слово: это утверждает один запрос, и цифры ниже прочитаны из его ответа.
Читается из /v1/chain и обновляется не чаще раза в час.
Базовый URL
Базовый URL один, и вот он.
https://api-testnet.arc-scan.ioВызывается прямо из браузера: в ответе есть access-control-allow-origin: *, разрешены GET, HEAD и OPTIONS. Открыты ETag, заголовки лимитов и X-Request-Id — клиент может их прочитать, а не угадывать. Только эти три метода: POST из браузера сюда не пройдёт, поэтому эндпоинт MCP так недостижим. На curl, бэкенд, бота или индексатор это не влияет.
С чего начать
Каждая команда на этой странице была выполнена на работающем сервисе, и каждый показанный ответ — это то, что вернулось.
Что хранится и насколько оно свежее
Константы сети, возможности узла и точный диапазон проиндексированных блоков. Один вызов — и всё остальное на этой странице не приходится принимать на веру.
curl -s -H 'User-Agent: my-app/1.0' https://api-testnet.arc-scan.io/v1/chain
Вернулось
{ "chain_id": 5042, "name": "Arc", "is_testnet": false, "mainnet_soon": false, "native": { "symbol": "USDC", "decimals": 18 }, "erc20_native": { "address": "0x3600000000000000000000000000000000000000", "decimals": 6 }, "block_time_ms": 506, "finality": "instant", "capabilities": { "ots": false, "ots_search": false, "trace": true, "debug": false, "archive": true, "tx_index": true, "holder_index": true, "verified_source": false, "verified_source_note": "<-- elided -->", "internal_transactions": true }, "index": { "available": true, "streams": [ { "stream": "balances", "genesis_block": 0, "last_contiguous_block": 13849844, "from_block": 0, "to_block": 13849844, "ranges": 1, "blocks_indexed": 13849845, "contiguous_from_genesis": true }, { "stream": "chain", "genesis_block": 0, "last_contiguous_block": 13849856, "from_block": 0, "to_block": 13849856, "ranges": 1, "blocks_indexed": 13849857, "contiguous_from_genesis": true }, { "stream": "traces", "genesis_block": 0, "last_contiguous_block": -1, "from_block": null, "to_block": null, "ranges": 0, "blocks_indexed": 0, "contiguous_from_genesis": false } ], "head_block": 13849856, "chain_blocks_indexed": 13849857, "chain_genesis_block": 0, "chain_first_indexed_block": 0, "covers_chain_from_block": 0, "complete_above_start_block": true, "unindexed_blocks_below_start": 0, "complete": true, "message": null }, "capabilities_note": null, "capabilities_note_phrases": [] }
Передавайте User-Agent
Тот же вызов, который делает ваш существующий код для Etherscan
Ключ передаётся в строке запроса как <mono>apikey</mono> — именно туда его уже кладут клиенты Etherscan.
curl -s -H 'User-Agent: my-app/1.0' "https://api-testnet.arc-scan.io/api?module=account\ &action=txlist&address=0x03a13352ef67977d1601ec1276e9bc27c0ee7b75\ &startblock=13800000&endblock=13830000&page=1&offset=1&sort=desc\ &apikey=YourApiKeyToken"
Вернулось
{ "status": "1", "message": "OK", "result": [ { "blockNumber": "13830000", "timeStamp": "1785842041", "hash": "0x3ae69af3843877c10d1aedde0fb299f0de358a76c4b704f338fc738b5d952ef5", "nonce": "88966", "blockHash": "", "transactionIndex": "0", "from": "0x92Df01DB3C69a49f4c4E694849E44C75D62B6752", "to": "0x03a13352eF67977d1601ec1276e9BC27C0Ee7b75", "value": "0", "gas": "598264", "gasPrice": "40000000000", "isError": "0", "txreceipt_status": "1", "input": "", "contractAddress": "", "cumulativeGasUsed": "348673", "gasUsed": "348673", "confirmations": "2933", "methodId": "0x38aaba3d", "functionName": "open" } ] }
Перенос существующего кода для Etherscan
CSV с транзакциями одного адреса
Любая выгрузка — про один адрес, поэтому <mono>address</mono> обязателен, а диапазон блоков или дат её сужает. Четыре набора данных — <mono>transactions</mono>, <mono>internal</mono>, <mono>logs</mono>, <mono>token-transfers</mono>, — а <mono>/v1/export/limits</mono> называет ограничения до того, как вы в них упрётесь.
curl -s -H 'User-Agent: my-app/1.0' "https://api-testnet.arc-scan.io/v1/export/transactions/csv\ ?address=0x03a13352ef67977d1601ec1276e9bc27c0ee7b75\ &from_block=13800000&to_block=13800010"
Вернулось
block_number,block_time_utc,block_timestamp,tx_hash,tx_index,from,to,created_contract,direction,value_raw,value_18dec,fee_raw,fee_18dec,gas_limit,gas_used,effective_gas_price_raw,nonce,tx_type,method_id,input_size,status 13800001,2026-08-04T07:00:48Z,1785826848,0xb244d2791aa392fcc49e2c6bca9df0b6c402da2c1cd322f6356724fb77cc3131,0,0x8031885f93e31676132128557e987a011ff99d27,0x03a13352ef67977d1601ec1276e9bc27c0ee7b75,,in,0,0,13951720000000000,0.01395172,570664,348793,40000000000,141603,2,0x38aaba3d,516,success
Новые блоки приходят сами, опрашивать не нужно
/v1/stream/head — это настоящий text/event-stream: одно событие на каждый зафиксированный блок, около двух в секунду на полусекундной цепочке, и каждое несёт собственные часы сервера, чтобы потребитель мог скорректировать расхождение. Держите соединение открытым — блоки будут приходить. Опрашивать нечего и интервал подбирать не нужно.
Следить за головой цепочки
Эта команда не завершается. Ниже — два подряд идущих события из живого соединения, с разницей в три секунды.
curl -N -H 'User-Agent: my-app/1.0' https://api-testnet.arc-scan.io/v1/stream/head
Вернулось
event: head data: {"height": 13830746, "hash": "0xc580470583007f827ebfb3098b66d0682528c4ebaca4eb1213ab992c5952e65e", "timestamp": 1785842418, "tx_count": 1, "server_now": 1785842422, "available": true} event: head data: {"height": 13830751, "hash": "0x63d064be03dc0f5d530e10350b8dddd3de2cc8e6dbbffbe59306bb9fdc96c162", "timestamp": 1785842421, "tx_count": 1, "server_now": 1785842422, "available": true}
Что отдаётся
Проверено вручную, по одному маршруту, на работающем сервисе mainnet, а не сгенерировано из схемы. Сервис публикует больше маршрутов, чем перечислено; перечислено то, что поддерживается.
| Эндпоинт | На что отвечает |
|---|---|
/v1/chain | Идентификатор сети, нативный токен, возможности узла и точный диапазон блоков, который держит каждый поток индексатора. |
/v1/network/status/v1/network/validators | Голова цепочки и её возраст в секундах, измеренное время блока и активный набор валидаторов. |
/v1/blocks/v1/blocks/{ref}/v1/blocks/{ref}/txs | Блоки от новых к старым, один блок и транзакции внутри него. Каждый блок называет валидатора, который его предложил. |
/v1/txs/v1/txs/{hash}/v1/txs/{hash}/trace/v1/txs/{hash}/raw | Транзакции от новых к старым, одна транзакция со статусом и причиной отката, восстановленные для неё фреймы внутренних вызовов, а также неизменённые объекты узла за ней. |
/v1/address/{addr}/v1/address/{addr}/txs/v1/address/{addr}/logs/v1/address/{addr}/activity | Адрес с балансом и активностью, отправленные и полученные им транзакции, порождённые им события и единая лента всего, что его коснулось. |
/v1/address/{addr}/tokens/v1/address/{addr}/facts/v1/address/{addr}/contract | Балансы токенов адреса, откуда он был профинансирован и когда был активен впервые и в последний раз, а для контракта — его развёрнутый байт-код. |
/v1/tokens/{addr}/v1/tokens/{addr}/holders/v1/tokens/{addr}/transfers | Ончейн-факты одного токена, его держатели по величине баланса и его переводы. |
/v1/approvals/{addr} | Все разрешения ERC-20, ERC-721 и ERC-1155, выданные адресом и не отозванные. |
/v1/search/v1/search/suggest | Разрешение высоты, хеша, адреса или токена, с подсказками по мере ввода. |
/v1/stats/summary/v1/stats/gas/v1/stats/tx-history | Сводка по сети, статистика газа и ежедневная история транзакций по полным суткам UTC. |
/v1/charts/v1/charts/{metric}/v1/charts/{metric}/csv | Каталог из двадцати четырёх ежедневных метрик, каждая читается как JSON или как CSV. |
/v1/explore/* | Общесетевые списки: счета, контракты, токены, переводы токенов, метки адресов, справочник именованных сущностей и топ-статистика за выбранное окно. |
/v1/filter/limits/v1/filter/transactions/v1/filter/token-transfers | Запрос транзакций и переводов токенов по адресу, методу, сумме, активу, статусу и диапазону. Маршрут ограничений называет границы до того, как вы в них упрётесь. |
/v1/export/limits/v1/export/resolve/v1/export/{dataset}/csv | CSV для транзакций, внутренних транзакций, логов и переводов токенов, а также маршрут, который переводит диапазон дат в диапазон блоков.Выгрузка всегда про один адрес: address обязателен, а диапазон её сужает, а не заменяет. |
/v1/actions/categories | Категории, по которым классифицируется то, что транзакция на самом деле сделала. |
/v1/stream/head | События server-sent, по одному на зафиксированный блок, каждое несёт часы сервера, чтобы потребитель мог скорректировать расхождение. |
Поверхность в форме Etherscan
Один путь, диспетчеризация по module и action в строке запроса. Каждый ответ — HTTP 200, так что строгая клиентская библиотека не падает на коде статуса. Принимаются и GET, и POST в форме form-encoded, а module=proxy пропускает тринадцать методов JSON-RPC прямо к узлу.
| module | action | На что отвечает |
|---|---|---|
account | balance | Нативный баланс, целое строкой с 18 знаками |
account | balancemulti | До 20 адресов за вызов |
account | txlist | Транзакции, отправленные адресом или полученные им, из индекса |
account | tokentx | Отдаётся из просканированного окна; требует startblock и endblockПоля с именем, символом и числом знаков токена в этой сети приходят пустыми. Читайте разрядность из маршрута токена, а не из записи перевода. |
account | tokenbalance | Настоящий запрос ERC-20; возвращает собственный масштаб контракта |
account | addresstokenbalance | Все балансы токенов одного адреса |
block | getblockreward | blockReward — это сумма комиссий транзакций; эмиссии нет, награды за дядей нет |
block | getblocknobytime | Двоичный поиск по высотам; неизменяемо, кешируется навсегда |
block | getblockcountdown | Использует измеренное время блока, а не константу |
transaction | getstatus | Статус исполнения |
transaction | gettxreceiptstatus | Статус квитанции |
logs | getLogs | Диапазон ограничен; на запрос сверх лимита в ответе назван максимальный размах |
contract | getabi | ABI контракта, верифицированного на ArcscanНи один контракт в этой сети пока не верифицирован, поэтому getabi отвечает NOTOK, а getsourcecode — пустой записью. Развёрнутый байт-код отдаётся в любом случае. |
contract | getsourcecode | Верифицированный исходник, настройки компилятора и ABIНи один контракт в этой сети пока не верифицирован, поэтому getabi отвечает NOTOK, а getsourcecode — пустой записью. Развёрнутый байт-код отдаётся в любом случае. |
token | tokenholderlist | Держатели и балансы по одному токену |
stats | tokensupply | Общее предложение, прочитанное у самого контракта |
stats | ethsupply | Нативное предложение, целое строкой с 18 знаками |
stats | ethprice | Токен газа здесь по построению равен доллару, поэтому возвращается 1.00 |
stats | dailytxnfee | Суммарные комиссии за каждые полные сутки UTC |
stats | dailynewaddress | Адреса, впервые увиденные за каждые полные сутки UTC |
proxy | eth_* | Методы блока, транзакции, вызова, кода, хранилища, газа и сырой отправки |
Лимит запросов, ошибки и постраничность
Лимит запросов
Публичному вызывающему доступен всплеск в 300 запросов, пополняющийся со скоростью 60 в секунду. Каждый ответ сообщает, где вы находитесь, а отказ — это HTTP 429 с заголовком retry-after.
Ведро привязано к адресу вызывающего в том виде, в каком его видит наш периметр, поэтому все за одним NAT или за одним облачным исходящим адресом делят одно ведро.
x-ratelimit-limit: 300 x-ratelimit-remaining: 299
Ошибки
На /api отказ — это HTTP 200, где status равен 0, а в result лежит фраза о причине; это никогда не 404, так что строгая клиентская библиотека на нём не падает.
На /v1 запрос, отклонённый как некорректный, возвращается через периметр как 404, а не как 400. Проверьте параметры, прежде чем решить, что маршрута нет.
Постраничность
Списочные маршруты используют курсор: в ответе есть page.next, и если передать его обратно как cursor, придёт следующая страница. Размер страницы ограничен сотней.
На что этот API не отвечает
Опубликовано, чтобы вы это обходили заранее, а не обнаруживали в процессе.
Внутренние транзакции
Спросите про одну транзакцию — и получите её внутренние вызовы: маршрут трассировки одной транзакции отвечает 200 с настоящими фреймами, а account/txlistinternal отдаёт те же фреймы, если передать txhash. Спросите про адрес или про всю сеть — и получите отказ, потому что в этой установке собственный индекс трассировок Arcscan не содержит ни одного блока: /v1/explore/internal-txs отвечает 501 CAPABILITY_UNAVAILABLE с указанием недостающей возможности, account/txlistinternal по address отказывает и называет причину, а CSV-выгрузка internal возвращает только заголовок без строк. Это отказ, который видно, а не укороченный список, которого не видно. Изменения состояния — отдельный пробел: маршрут состояния одной транзакции по-прежнему отвечает 501, потому что разницу состояний можно получить, лишь повторно выполнив транзакцию поверх состояния до её блока, а эндпоинт, из которого читается эта сеть, таких вызовов не отдаёт.
Насколько далеко достаёт один запрос логов
logs/getLogs отвечает в сети 5042 на диапазоне не более 10 000 блоков; более широкий запрос получает отказ с указанием этого предела, а не тихий ответ по части диапазона. account/tokentx тоже отвечает и требует startblock и endblock с диапазоном не более 200 000 блоков. Ни один из этих пределов не относится к нашему собственному индексу — именно он отвечает на более широкие вопросы: по адресу — маршрутом логов адреса, по токену — маршрутом переводов токена, по всей сети — через /v1/explore/token-transfers.
Верифицированные исходники
Наш поставщик верификации не покрывает сеть 5042, поэтому сегодня здесь не верифицирован ни один контракт и не может быть верифицирован, пока это не изменится. Развёрнутый байт-код, байт-код создания и создатель контракта отдаются в любом случае.
Внесетевые данные
Ни цен от оракула, ни капитализации, ни логотипов, ни сайтов, ни кураторских меток бирж. Метки адресов, которые мы публикуем, — те, что доказуемы по данным цепочки: валидаторы, системные контракты, контракты, развёртывание которых мы видели. Угаданных не будет.
Действия, которые отвечают отказом
Каждое несёт собственную причину в result, а не одну общую ошибку.
contract.getcontractcreation- Узел за сетью 5042 не предоставляет пространство имён otterscan. Создатель контракта и транзакция создания есть на маршруте контракта по адресу.
account.getminedblocks- В Arc нет майнинга и нет награды за блок: блоки предлагает сменяемый набор BFT-валидаторов, и единственная ценность в блоке — комиссии его транзакций. К тому же колонка предлагающего не имеет индекса, так что ответить на это было бы нельзя без полного сканирования таблицы. Вместо этого валидатора называет маршрут блоков.
account.tokennfttx- Переводы ERC-721 проиндексированы, но не по адресу: у таблицы переводов нет индекса по отправителю и получателю, поэтому фильтрация по адресу была бы полным сканированием. Они читаются по токену и по всей сети.
account.token1155tx- То же самое для ERC-1155.
account.addresstokennftbalance- Наш поток балансов хранит только взаимозаменяемые балансы — одну сумму на пару «токен и держатель», без измерения по идентификатору токена, — поэтому инвентарь NFT из него прочитать нельзя. На форму того же вопроса для ERC-20 ответ есть.
token.tokeninfo- Большинство полей этого действия находятся вне сети: цена, капитализация, сайт, ссылки на соцсети. Arcscan не хранит внесетевых данных о токенах и не обращается к ценовому оракулу. Ончейн-половина — имя, символ, десятичные знаки, общее предложение, число держателей — обслуживается маршрутом токена.
contract.verifysourcecode- Верификация не принимает поля формы Etherscan со «сплющенным» исходником. Отправляйте стандартный JSON для Solidity через страницу верификации — именно там этот маршрут доступен.
Как попросить ключ
Если вы строите что-то на этих данных, напишите нам: кто вы, что вы делаете и какой примерно объём ожидаете. Это формирует требования к системе ключей, и так вы узнаете об отдельном адресе API до объявления.
А пока базовый URL выше отдаёт данные без аутентификации, а параметр apikey принимается и игнорируется, так что существующий клиент Etherscan продолжает работать без изменений.
Полный справочник по маршрутам, сгенерированный из собственной схемы сервиса, находится на странице документации API.