Files
coopenomics/coopos/chain.swagger.yaml
T
Alex Ant 49188d404e update
2026-03-20 23:37:38 +05:00

963 lines
37 KiB
YAML

openapi: 3.0.0
info:
title: API цепи COOPOS
description: Спецификация Chain API узла COOPOS (nodeos). Подробности — в документации на https://coopenomics.world.
version: 1.0.0
license:
name: MIT
url: https://opensource.org/licenses/MIT
contact:
url: https://coopenomics.world
servers:
- url: "{protocol}://{host}:{port}/v1/chain"
variables:
protocol:
enum:
- http
- https
default: http
host:
default: localhost
port:
default: "8080"
components:
schemas: {}
paths:
/get_account:
post:
summary: Сведения об учётной записи
description: Возвращает объект с подробностями об указанной учётной записи в блокчейне.
operationId: get_account
requestBody:
description: JSON-объект с единственным полем «account_name»
content:
application/json:
schema:
type: object
required:
- account_name
properties:
account_name:
$ref: "schemas/Name.yaml"
responses:
"200":
description: Успешно
content:
application/json:
schema:
$ref: "schemas/Account.yaml"
/get_block:
post:
summary: Получить блок
description: Возвращает объект с подробностями об указанном блоке блокчейна.
operationId: get_block
requestBody:
content:
application/json:
schema:
type: object
required:
- block_num_or_id
properties:
block_num_or_id:
type: string
description: Укажите номер блока или идентификатор блока
responses:
"200":
description: Успешно
content:
application/json:
schema:
$ref: "schemas/Block.yaml"
/get_block_info:
post:
summary: Краткие сведения о блоке
description: Аналогично `get_block`, но возвращает фиксированный урезанный набор данных блока меньшего размера.
operationId: get_block_info
requestBody:
content:
application/json:
schema:
type: object
required:
- block_num
properties:
block_num:
type: integer
description: Укажите номер блока
responses:
"200":
description: Успешно
content:
application/json:
schema:
$ref: "schemas/BlockInfo.yaml"
/get_info:
post:
summary: Общие сведения о цепи
description: Возвращает объект с общими сведениями о блокчейне.
operationId: get_info
security: []
responses:
"200":
description: Успешно
content:
application/json:
schema:
$ref: "schemas/Info.yaml"
/push_transaction:
post:
summary: Применить транзакцию (push)
description: Ожидает транзакцию в формате JSON и пытается применить её к блокчейну.
operationId: push_transaction
requestBody:
content:
application/json:
schema:
type: object
properties:
signatures:
type: array
description: Массив подписей, необходимых для авторизации транзакции
items:
$ref: "schemas/Signature.yaml"
compression:
type: boolean
description: Использование сжатия; обычно false
packed_context_free_data:
type: string
description: JSON в шестнадцатеричном виде
packed_trx:
type: string
description: Объект транзакции (JSON) в шестнадцатеричном виде
responses:
"200":
description: Успешно
content:
application/json:
schema:
description: Тело ответа пустое
/send_transaction:
post:
summary: Применить транзакцию (send)
description: Ожидает транзакцию в формате JSON и пытается применить её к блокчейну.
operationId: send_transaction
requestBody:
content:
application/json:
schema:
type: object
properties:
signatures:
type: array
description: Массив подписей, необходимых для авторизации транзакции
items:
$ref: "schemas/Signature.yaml"
compression:
type: boolean
description: Использование сжатия; обычно false
packed_context_free_data:
type: string
description: JSON в шестнадцатеричном виде
packed_trx:
type: string
description: Объект транзакции (JSON) в шестнадцатеричном виде
responses:
"200":
description: Успешно
content:
application/json:
schema:
description: Тело ответа пустое
/push_transactions:
post:
summary: Применить несколько транзакций
description: Ожидает одну или несколько транзакций в формате JSON и пытается применить их к блокчейну.
operationId: push_transactions
requestBody:
content:
application/json:
schema:
type: array
items:
$ref: "schemas/Transaction.yaml"
responses:
"200":
description: Успешно
content:
application/json:
schema:
description: Тело ответа пустое
/get_block_header_state:
post:
summary: Состояние заголовка блока
description: Возвращает состояние заголовка блока.
operationId: get_block_header_state
requestBody:
content:
application/json:
schema:
type: object
required:
- block_num_or_id
properties:
block_num_or_id:
type: string
description: Укажите номер блока или идентификатор блока
responses:
"200":
description: Успешно
content:
application/json:
schema:
$ref: "schemas/BlockHeaderState.yaml"
/get_abi:
post:
summary: ABI контракта
description: Возвращает ABI контракта по имени учётной записи.
operationId: get_abi
requestBody:
content:
application/json:
schema:
type: object
required:
- account_name
properties:
account_name:
$ref: "schemas/Name.yaml"
responses:
"200":
description: Успешно
content:
application/json:
schema:
$ref: "schemas/Abi.yaml"
/get_currency_balance:
post:
summary: Баланс токена
description: Возвращает текущий баланс токена.
operationId: get_currency_balance
requestBody:
content:
application/json:
schema:
type: object
required:
- code
- account
- symbol
properties:
code:
$ref: "schemas/Name.yaml"
account:
$ref: "schemas/Name.yaml"
symbol:
$ref: "schemas/Symbol.yaml"
responses:
"200":
description: Успешно
content:
application/json:
schema:
type: array
items:
$ref: "schemas/Symbol.yaml"
/get_currency_stats:
post:
summary: Статистика токена
description: Возвращает статистику по выпуску валюты (токена).
operationId: get_currency_stats
requestBody:
content:
application/json:
schema:
type: object
properties:
code:
$ref: "schemas/Name.yaml"
symbol:
$ref: "schemas/Symbol.yaml"
responses:
"200":
description: Успешно
content:
application/json:
schema:
description: "Объект с одним ключом — запрошенный символ; внутри поля: supply (Symbol), max_supply (Symbol), issuer (Name)"
/get_required_keys:
post:
summary: Ключи для подписи транзакции
description: Возвращает ключи, необходимые для подписи транзакции.
operationId: get_required_keys
requestBody:
content:
application/json:
schema:
type: object
required:
- transaction
- available_keys
properties:
transaction:
$ref: "schemas/Transaction.yaml"
available_keys:
type: array
description: Доступные публичные ключи
items:
$ref: "schemas/PublicKey.yaml"
responses:
"200":
description: Успешно
content:
application/json:
schema:
{}
/get_producers:
post:
summary: Список продюсеров
description: Возвращает список продюсеров блокчейна.
operationId: get_producers
requestBody:
content:
application/json:
schema:
title: "GetProducersRequest"
type: object
required:
- limit
- lower_bound
properties:
limit:
type: string
description: Сколько продюсеров вернуть
lower_bound:
type: string
description: Вместе с limit задаёт постраничную выборку; например limit=10 и lower_bound=10 — вторая страница
json:
type: boolean
description: Вернуть результат в формате JSON
responses:
"200":
description: Успешно
content:
application/json:
schema:
title: "GetProducersResponse"
type: object
properties:
rows:
type: array
nullable: true
items:
$ref: "schemas/Producer.yaml"
total_producer_vote_weight:
type: string
description: Сумма весов голосов за всех продюсеров.
more:
type: string
description: Если не все продюсеры поместились в ответ, здесь нижняя граница для следующего запроса.
/get_raw_code_and_abi:
post:
summary: Сырой WASM и ABI
description: Возвращает сырой WASM и ABI контракта по имени учётной записи.
operationId: get_raw_code_and_abi
requestBody:
content:
application/json:
schema:
type: object
required:
- account_name
properties:
account_name:
$ref: "schemas/Name.yaml"
responses:
"200":
description: Успешно
content:
application/json:
schema:
type: object
properties:
account_name:
$ref: "schemas/Name.yaml"
wasm:
type: string
description: WASM в кодировке base64
abi:
type: string
description: ABI в кодировке base64
/get_scheduled_transactions:
post:
summary: Запланированные транзакции
description: Возвращает отложенные (запланированные) транзакции.
operationId: get_scheduled_transactions
requestBody:
content:
application/json:
schema:
type: object
properties:
lower_bound:
$ref: "schemas/DateTimeSeconds.yaml"
limit:
description: Максимальное число транзакций в ответе
type: integer
json:
description: true — упакованная транзакция преобразуется в JSON
type: boolean
responses:
"200":
description: Успешно
content:
application/json:
schema:
type: object
properties:
transactions:
type: array
items:
$ref: "schemas/Transaction.yaml"
/get_table_by_scope:
post:
summary: Области таблиц (scopes)
description: Возвращает области (scopes) таблиц контракта.
operationId: get_table_by_scope
requestBody:
content:
application/json:
schema:
type: object
required:
- code
properties:
code:
type: string
description: "Имя (`name`) контракта, для которого нужны данные таблиц"
table:
type: string
description: Фильтр по имени таблицы
lower_bound:
type: string
description: Первый элемент не меньше указанного значения в упорядоченном наборе
upper_bound:
type: string
description: Первый элемент строго больше указанного значения в упорядоченном наборе
limit:
type: integer
description: Ограничение числа записей в ответе.
format: int32
default: 10
reverse:
type: boolean
description: Обратить порядок строк
default: false
show_payer:
type: boolean
description: Показывать плательщика RAM
default: false
responses:
"200":
description: Успешно
content:
application/json:
schema:
type: object
properties:
rows:
type: array
items:
$ref: "schemas/TableScope.yaml"
more:
$ref: "schemas/Name.yaml"
/get_table_rows:
post:
summary: Строки таблицы состояния
description: Возвращает строки указанной таблицы состояния контракта.
operationId: get_table_rows
requestBody:
content:
application/json:
schema:
type: object
required:
- code
- table
- scope
properties:
code:
type: string
description: Имя смарт-контракта, которому принадлежит таблица
table:
type: string
description: Имя таблицы
scope:
type: string
description: Учётная запись-владелец данных (scope)
index_position:
type: string
description: Позиция индекса; допустимые значения `primary`, `secondary`, `tertiary`, `fourth`, `fifth`, `sixth`, `seventh`, `eighth`, `ninth`, `tenth`
key_type:
type: string
description: Тип ключа для index_position (например `uint64_t` или `name`)
encode_type:
type: string
lower_bound:
type: string
description: Первый элемент не меньше указанного значения
upper_bound:
type: string
description: Первый элемент строго больше указанного значения
limit:
type: integer
description: Ограничение числа строк в ответе.
format: int32
default: 10
reverse:
type: boolean
description: Обратить порядок строк
default: false
show_payer:
type: boolean
description: Показывать плательщика RAM
default: false
responses:
"200":
description: Успешно
content:
application/json:
schema:
type: object
properties:
rows:
type: array
items: {}
/get_code:
post:
summary: Код контракта (WASM)
description: Возвращает объект с WASM-кодом смарт-контракта.
operationId: get_code
requestBody:
content:
application/json:
schema:
type: object
required:
- account_name
- code_as_wasm
properties:
account_name:
$ref: "schemas/Name.yaml"
code_as_wasm:
type: integer
default: 1
description: Должно быть 1 (истина)
responses:
"200":
description: Успешно
content:
application/json:
schema:
type: object
title: GetCodeResponse.yaml
properties:
name:
$ref: "schemas/Name.yaml"
code_hash:
$ref: "schemas/Sha256.yaml"
wast:
type: string
wasm:
type: string
abi:
$ref: "schemas/Abi.yaml"
/get_raw_abi:
post:
summary: Сырой ABI контракта
description: Возвращает объект с сырым ABI смарт-контракта.
operationId: get_raw_abi
requestBody:
content:
application/json:
schema:
type: object
required:
- account_name
properties:
account_name:
$ref: "schemas/Name.yaml"
responses:
"200":
description: Успешно
content:
application/json:
schema:
type: object
properties:
account_name:
$ref: "schemas/Name.yaml"
code_hash:
$ref: "schemas/Sha256.yaml"
abi_hash:
allOf:
- $ref: "schemas/Sha256.yaml"
abi:
type: string
/get_activated_protocol_features:
post:
summary: Активированные возможности протокола
description: Возвращает активированные на узле продюсера протокольные возможности.
operationId: get_activated_protocol_features
requestBody:
content:
application/json:
schema:
type: object
properties:
lower_bound:
type: integer
description: Нижняя граница
upper_bound:
type: integer
description: Верхняя граница
limit:
type: integer
description: Лимит записей; по умолчанию 10
search_by_block_num:
type: boolean
description: Искать по номеру блока
reverse:
type: boolean
description: Обратный порядок обхода
responses:
"200":
description: Успешно
content:
application/json:
schema:
type: object
description: Активированные протокольные возможности
required:
- activated_protocol_features
properties:
activated_protocol_features:
type: array
description: Массив идентификаторов активированных протокольных возможностей
items:
type: string
more:
type: integer
description: "Если активированных возможностей больше, чем limit, здесь порядковый номер следующей не вошедшей в ответ; иначе 0."
/get_accounts_by_authorizers:
post:
summary: Учётные записи по авторизующим
description: По набору имён учётных записей и публичных ключей находит разрешения (authorities), которые полностью или частично могут быть удовлетворены этими данными.
operationId: get_accounts_by_authorizers
requestBody:
content:
application/json:
schema:
type: object
properties:
accounts:
type: array
description: Список учётных записей и/или пар actor/permission
items:
anyOf:
- $ref: "schemas/Name.yaml"
- $ref: "schemas/PermissionLevel.yaml"
keys:
type: array
description: Список авторизующих ключей
items:
$ref: "schemas/PublicKey.yaml"
responses:
"200":
description: Успешно
content:
application/json:
schema:
type: object
description: Учётные записи, авторизация которых целиком или частично покрывается переданными аккаунтами и ключами
required:
- accounts
properties:
accounts:
type: array
description: Массив троек account, permission и данные авторизатора
items:
type: object
description: Одна тройка account — permission — авторизующие данные
required:
- account_name
- permission_name
- authorizer
- weight
- threshold
properties:
account_name:
$ref: "schemas/Name.yaml"
permission_name:
$ref: "schemas/Name.yaml"
authorizer:
oneOf:
- $ref: "schemas/PublicKey.yaml"
- $ref: "schemas/Authority.yaml"
weight:
type: "integer"
description: Вклад этого авторизатора в удовлетворение разрешения
threshold:
type: "integer"
description: Порог — сумма весов, которую нужно достичь или превысить
/get_transaction_status:
post:
summary: Статус транзакции (финальность)
description: Возвращает состояние цепи и при наличии — информацию о транзакции по её идентификатору. Требуется включённая функция статуса финальности транзакций в плагине chain (параметр nodeos `--transaction-finality-status-max-storage-size-gb`).
operationId: get_transaction_status
requestBody:
content:
application/json:
schema:
type: object
required:
- id
properties:
id:
type: string
description: Идентификатор транзакции для запроса статуса.
responses:
"200":
description: Успешно
content:
application/json:
schema:
$ref: "schemas/TransactionStatus.yaml"
/send_transaction2:
post:
summary: Применить транзакцию (send v2)
description: |
Пытается применить транзакцию в формате JSON к блокчейну. Поддерживает полную трассировку неудачной транзакции и повторные попытки через nodeos, если они включены на узле. При включённом повторе API-узел досылает транзакцию в P2P-сеть до истечения срока, включения в блок или необратимости.
Внимание: по умолчанию вместо исключений возвращается полная трассировка ошибки. Не путайте наличие трассировки с успешным выполнением — проверяйте поля «receipt» и «except».
operationId: send_transaction2
requestBody:
content:
application/json:
schema:
type: object
properties:
return_failure_trace:
type: boolean
description: Если true — исключения транзакции вкладываются в возвращаемую трассировку.
retry_trx:
type: boolean
description: Если true — повторять отправку до блока заданной высоты (см. retry_trx_num_blocks), необратимости или истечения срока.
retry_trx_num_blocks:
type: integer
description: При retry_trx — повторять до блока с этой высотой; если не задано — до lib.
transaction:
type: object
properties:
signatures:
type: array
description: Массив подписей для авторизации транзакции.
items:
$ref: "schemas/Signature.yaml"
compression:
type: boolean
description: Сжатие; обычно false
packed_context_free_data:
type: string
description: JSON в hex
packed_trx:
type: string
description: Транзакция (JSON) в hex
responses:
"200":
description: Успешно
content:
application/json:
schema:
description: Тело ответа пустое
/compute_transaction:
post:
summary: Симуляция транзакции без записи
description: |
Выполняет указанную транзакцию, формирует трассировку (включая расход ресурсов), затем откатывает все изменения состояния; субъективный биллинг для аккаунта не увеличивается. Подписи, если есть, обрабатываются, ошибки подписи игнорируются. Неуспешные транзакции всё равно содержат трассировку сбоя.
Внимание: на публичных узлах с включённым compute_transaction нужно ограничивать частоту запросов (защита от DoS).
operationId: compute_transaction
requestBody:
content:
application/json:
schema:
type: object
properties:
signatures:
type: array
description: Массив подписей для авторизации транзакции
items:
$ref: "schemas/Signature.yaml"
compression:
type: boolean
description: Сжатие; обычно false
packed_context_free_data:
type: string
description: JSON в hex
packed_trx:
type: string
description: Объект транзакции, JSON в hex
responses:
"200":
description: Успешно
content:
application/json:
schema:
description: Тело ответа пустое
/get_code_hash:
post:
summary: Хеш кода контракта
description: Возвращает хеш кода смарт-контракта в блокчейне. Его можно сравнить с ожидаемым значением, чтобы убедиться, что код не менялся.
operationId: get_code_hash
requestBody:
content:
application/json:
schema:
type: object
properties:
account_name:
description: Имя учётной записи владельца кода контракта.
type: string
responses:
"200":
description: Успешно
content:
application/json:
schema:
type: object
properties:
account_name:
description: Учётная запись, на которой развёрнут контракт.
type: string
code_hash:
type: string
description: Хеш WASM-кода контракта указанной учётной записи.
/get_transaction_id:
post:
summary: Идентификатор транзакции
description: Возвращает идентификатор транзакции (хеш транзакции) для переданной транзакции.
operationId: get_transaction_id
requestBody:
description: Тело запроса — объект транзакции в формате JSON.
content:
application/json:
schema:
$ref: "schemas/Transaction.yaml"
responses:
"200":
description: Успешно
content:
application/json:
schema:
type: string
description: Идентификатор транзакции.
/get_producer_schedule:
post:
summary: Расписание продюсеров
description: Возвращает текущее расписание продюсеров — активный список и порядок ротации.
operationId: get_producer_schedule
responses:
"200":
description: Успешно
content:
application/json:
schema:
type: object
properties:
active:
description: JSON-объект со списком активных продюсеров и версией расписания.
$ref: "schemas/ProducerSchedule.yaml"
pending:
description: JSON-объект с ожидающим расписанием продюсеров и версией.
$ref: "schemas/ProducerSchedule.yaml"
proposed:
description: JSON-объект с предлагаемым расписанием продюсеров и версией.
$ref: "schemas/ProducerSchedule.yaml"
/send_read_only_transaction:
post:
summary: Транзакция только для чтения
description: Отправляет транзакцию только для чтения в формате JSON; она не предназначена для включения в блокчейн. Если транзакция меняет состояние цепи, узел отклонит её.
operationId: send_read_only_transaction
requestBody:
content:
application/json:
schema:
type: object
properties:
transaction:
type: object
properties:
compression:
type: boolean
description: Сжатие; обычно false
packed_context_free_data:
type: string
description: JSON в hex
packed_trx:
type: string
description: Транзакция (JSON) в hex
responses:
"200":
description: Успешно
content:
application/json:
schema:
description: Тело ответа пустое
/push_block:
post:
summary: Передать блок в цепь
description: Передаёт блок в блокчейн (для специальных сценариев узла).
operationId: push_block
requestBody:
content:
application/json:
schema:
$ref: "schemas/Block.yaml"
responses:
"200":
description: Успешно
content:
application/json:
schema:
description: Тело ответа пустое