API блокчейна: чтение, симуляция и подписанные транзакции

Кратко

API предоставляет доступ к узлу или сервису с собственными ограничениями и зависимостями. В Ethereum запрос или симуляция состояния отличаются от публикации транзакции. Примеры относятся к Ethereum, а не ко всем блокчейнам.

Пустой разведывательный архив с досье и картами
В этой статье

API предоставляет доступ к узлу или сервису с собственными ограничениями и зависимостями. В Ethereum запрос или симуляция состояния отличаются от публикации транзакции. Примеры относятся к Ethereum, а не ко всем блокчейнам.

Чтение и отправка имеют разные последствия

В Ethereum eth_call выполняет вызов без создания транзакции в цепочке; RPC-провайдер всё же может брать плату за сервис. eth_sendRawTransaction отправляет уже подписанную транзакцию. Полученный идентификатор не доказывает включение или успех. Проверьте квитанцию, статус, блок и подходящую для сети финальность.

Управлять зависимостями и ошибками

Перед подписью проверьте сеть, адрес, интерфейс контракта и параметры. Симуляция не гарантирует позднейший результат при изменении состояния. Выполненная с ошибкой транзакция всё равно может расходовать gas. Смарт-контракт — программа; название не гарантирует отсутствие ошибок или юридическую действительность соглашения.

Необходимые проверки

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

Источники

Редакционная проверка: 31 октября 2026 года.

Разделение отправленных, включенных и интерпретированных транзакций.

Идентификатор транзакции не определяет предполагаемый эффект. Проверьте сеть, квитанцию, включение, статус и соответствующее бизнес-событие. Определите политику подтверждения и восстановления для используемой цепочки; интерфейс не должен сообщать об успехе, пока результаты остаются неопределенными.

  • Проверка запрошенной сети и идентификатора.
  • Разделение ожидающих, неудачных выполнений и подтвержденных эффектов.
  • Проверка повторных уведомлений без повторного воспроизведения бизнес-действий.

Означает ли возвращенный хеш завершение операции?

Нет. Это идентифицирует поданную транзакцию. Для отслеживания и интерпретации результатов необходимы проверки, соответствующие цепочке и контракту; не следует слепо повторно отправлять неоднозначную операцию.

Первичный источник: Ethereum — JSON-RPC and transaction receipts. Связанный метод: прочитать практическое руководство.

Квоты и ограничения API

Ограничения влияют на ёмкость, повторы и распределение между клиентами.

  • Запишите, относится ли квота к аккаунту, ключу или ресурсу, и сколько параллельных операций допускает клиент. Безграничная очередь может перегрузить сервис при невысокой средней частоте.
  • При 429 учитывайте Retry-After, если он есть, и подождите перед следующим запросом. Совмещайте растущую задержку и рассредоточение клиентов с пределом попыток и общим сроком.
  • После потери ответа на запись проверьте состояние до повтора. В имитации сочетайте квоты, поздние ответы и отмену: очередь должна завершиться без повторных эффектов.

Воспроизводимый приёмочный случай

Вымышленный пример: данные не описывают клиента или наблюдаемый результат.

Посмотреть данные случая
{
    "http_status": 429,
    "retry_after_seconds": 30,
    "workers": 20,
    "retry_budget": 3,
    "retry_budget_scope": "per_worker_retries_excluding_initial_request",
    "scheduling_example": {
        "response_received_at_seconds": 0,
        "illustrative_retry_seconds": [
            30,
            31,
            32,
            33,
            34
        ],
        "workers_per_second": 4,
        "alternative_deadline_seconds": 25,
        "total_attempts_if_all_retries_used": 80
    }
}

Ожидаемое решение

Выдержите 30 секунд, распределите повторы 20 обработчиков и ограничьте их количество.

Двадцать клиентов: распределить и посчитать повторы

Вымышленный пример: 20 обработчиков в момент +0 s получают 429 с Retry-After: 30. Расписание показывает один вариант распределения, не гарантируя мощности сервера. У каждого есть 3 повтора помимо исходного запроса.

ПравилоРасчёт или расписаниеРезультат
Одновременный повтор20 × 1 = 20 @ +30 sОжидание 30 секунд соблюдает задержку, но все 20 запросов возвращаются вместе. Всплеск нагрузки может повториться.
Распределённый повтор4 × 5 = 20 @ +30…+34 sЧетыре запроса в секунду в течение пяти секунд распределяют 20 повторов, не уменьшая их число. Пример расписания не заменяет политику нарастающих задержек со случайным разбросом.
Срок 25 секунд25 s < 30 s → 0Если оставшееся время меньше требуемых 30 секунд, остановитесь или отложите запрос согласно контракту. Не сокращайте ожидание ради срока.
Максимальный бюджет20 × (1 + 3) = 80Все попытки дают 20 исходных запросов и 60 повторов: всего 80. Ограничение не гарантирует успеха или безопасного повторения.

Процедура проверки

  1. Запишите область квоты и бюджет повторов.
  2. Исчерпайте квоту только в разрешённом тесте.
  3. Сохраните 429, Retry-After и ограниченную последовательность. Различайте техническое ограничение и результат операции: исчерпанную квоту нельзя превращать в сообщение о нулевом наличии.
  4. Симулируйте без внешней нагрузки четыре слоя по три общих вызова и посчитайте попытки.
  5. Просрочьте вымышленную задачу в очереди и проверьте отсутствие новой операции.
  6. Восстановите разрешённую работу постепенно после симулированного сбоя и сохраните вызовы, сроки и уникальные результаты.

AWS — Timeouts, retries, and backoff with jitter

Доказывает ли 429, что предыдущая запись не выполнилась?

Нет. Операция без ответа требует отдельной сверки; ответ на другую попытку не подтверждает её состояние.

Первичный источник: IETF — RFC 6585, HTTP 429. Связанный метод: прочитать практическое руководство.

API: не допускать умножения попыток между слоями

Приложение, SDK, прокси и сервис могут повторять один вызов. Четыре вымышленных слоя с тремя общими попытками каждый дают до 81 вызова неисправной зависимости. Добавьте общий бюджет и полезный срок к контролю квот.

  • Опишите автоматические попытки приложения, SDK, прокси и зависимостей. Выберите ответственный слой и отключите или согласуйте дополнительные повторы. Считайте начальную попытку в бюджете. Сохраняйте ID операции и проверяйте неопределённые эффекты до неидемпотентного повтора.
  • Задайте общий срок ожидания, соединения и обработки с реальными ограничениями клиента. Отклоните просроченные задачи до очереди. Локальная отмена не доказывает остановку сервера: сверяйте состояние. Восстанавливайте трафик постепенно без запуска всех очередей сразу.

Три попытки на слой означают три всего?

Нет. Четыре вымышленных слоя по три общие попытки дают до 3⁴ = 81 последнего вызова.

Истечение срока отменяет удалённый эффект?

Не обязательно. Оно предотвращает новую устаревшую работу; начатая операция требует проверки состояния и возможной компенсации.

Первичный источник: AWS — Timeouts, retries, and backoff with jitter. Связанный метод: прочитать практическое руководство.