Инструменты разработчика (CDT)¶
CDT (Contract Development Tools) — toolchain на базе C/C++ для компиляции смарт-контрактов в WebAssembly (WASM) и их сопровождения в сети COOPOS.
Помимо трансляции в WASM, CDT вводит контрактные атрибуты, постпроходы и соглашения, согласованные с моделью исполнения цепочки. Компилятор строится на форке LLVM/Clang; целевой WASM-backend накладывает ограничения на часть оптимизаций и диалекта C++.
COOPOS наследует архитектуру EOSIO / Antelope: аккаунты, permissions, модель действий, табличное хранение состояния и биллинг RAM/CPU/NET концептуально совпадают с экосистемой EOSIO. Отличия следует уточнять по конфигурации узла, системным контрактам и политике сети.
Исходный код и сборка CDT
Актуальные инструкции по сборке из исходников и установке бинарных пакетов — в README репозитория CDT вашей ветки.
Архитектура смарт-контракта¶
Развёртывание. Контракт размещается на аккаунте цепочки в виде пары артефактов: WASM-модуль (исполняемый код) и ABI (описание действий и типов для сериализации на границе «клиент — узел»). Узел не интерпретирует ABI при исполнении WASM; корректность бинарной полезной нагрузки действий обеспечивается логикой контракта и согласованностью с клиентами.
Транзакции. Единица атомарности — транзакция: упорядоченный набор действий (получатель — аккаунт, имя действия, закодированные аргументы). Либо исполняется вся транзакция, либо состояние цепочки к моменту её начала восстанавливается.
Взаимодействие. Внешний вызов поступает через подписанную транзакцию (CLI, SDK, HTTP API узла). Inline-действия и обработчики уведомлений (on_notify) реализуют композицию контрактов в рамках исполнения транзакции узлом; отдельного сетевого round-trip при этом не возникает.
Состояние. Персистентные данные размещаются в таблицах состояния (типичная оплата — RAM). Идентификация набора строк задаётся связкой код контракта — scope — имя таблицы; внутри таблицы — строки с первичным ключом и, при необходимости, вторичными индексами.
Авторизация. Обработчик действия обязан явно согласовать требования к аккаунту и permission подписанта с доменной моделью; системные примитивы (require_auth, has_auth и т.д.) — инфраструктурный минимум, а не замена предметным проверкам.
Ниже — предметные разделы по сборке, таблицам, действиям, ABI и эволюции схемы. Исчерпывающий справочник по API CDT, intrinsic-функциям WASM и низкоуровневым привязкам вынесен в документацию CDT (Doxygen).
Содержание раздела¶
| Раздел | Содержание |
|---|---|
| Установка | Требования к окружению и проверка toolchain |
| Справочник команд компилятора | cdt-cpp, cdt-cc, cdt-ld, cdt-init, cdt-abidiff, cdt-objdump |
| Сборка контрактов | CLI и интеграция с CMake |
| Таблицы состояния | multi_index, singleton, операции над строками |
| Действия и авторизация | Проверки прав, action_wrapper, возврат значения действия |
| ABI контракта | Структура JSON ABI, атрибуты CDT, Ricardian |
| Обновление схемы данных | binary_extension, variant, миграции без потери совместимости |
| Рекомендации | Именование, ресурсы, коды ошибок |
| Отладка и неполадки | Консоль контрактов, типовые сбои |
Расширенные темы (нативная сборка для тестов, WASM crypto extensions, отложенные транзакции в исторической модели EOSIO) освещаются в примерах репозитория CDT и в документации API.
Лицензия¶
Upstream CDT распространяется на условиях MIT (файл LICENSE в репозитории инструментов).