Files
mono/components/contracts/docker/Dockerfile
T
coopops 5865f6fc14 feat(contracts/apps): smart-contract каталога приложений + docker pipeline
Контракт `apps` (координационная плоскость для apps-catalog):
- 4 таблицы: packages, releases, subs, coops; ABI 21 KB, WASM 70 KB
- 11 actions: regpackage, transferpkg, setrelease, reactivate, withdraw,
  cleanup, regsub, expsub, regcoop, setcoop, migrate
- subs.chain_id и coops.chain_id — каноническая идентификация подсети
- coops.signing_key — отдельный subnet-signing-key (не active),
  ротация через setcoop без потери ранее выпущенных JWT
- releases с TTL retention 90 дней + inline cleanup до 50 записей
- atomic supersede в setrelease — выполняет FR8 «approve → ACTIVE»
  на стороне blockchain'а

CI контейнер `dicoop/contracts`:
- упаковывает все 21 контракт (15 user + 6 system eosio.*) в alpine 10.8 MB
- список контрактов берётся из CMakeLists (single source of truth)
- триггер push на dev/testnet/main + workflow_dispatch
- маппинг ветка→tag: dev/testnet/main + sha-pinned tag для воспроизводимости
- manifest.json с sha256 каждого артефакта внутри образа
- entrypoint: copy [name] | manifest | sha256 | list | ls
- multi-stage потребление в ke-bootstrap = 0 MB на VPS

Закрывает блокер Story 6.x (KE bootstrap) для apps-catalog.
2026-04-30 07:55:06 +00:00

45 lines
2.1 KiB
Docker

# Образ-артефакт для всей пачки контрактов кооперативной экономики.
#
# Назначение: переносить wasm/abi всех контрактов между этапами CI/CD
# и потребителями (ke-bootstrap, локальные dev-окружения, аудит).
# Сам по себе образ ничего не запускает на блокчейне — его пара —
# отдельный образ ke-bootstrap, который при старте ноды деплоит
# контракты на неё через `cleos set contract`.
#
# Содержимое:
# /contracts/<name>/<name>.wasm
# /contracts/<name>/<name>.abi
# /contracts/manifest.json — список контрактов + sha256 + build_mode
#
# Способы потребления:
#
# 1) Multi-stage в bootstrap-образе (production):
# FROM dicoop/contracts:testnet AS contracts
# ...
# COPY --from=contracts /contracts /work/contracts
#
# 2) Volume-mount (debug / ad-hoc):
# docker run --rm -v $PWD/out:/out dicoop/contracts:testnet
# → ./out/<name>/{wasm,abi} + manifest.json
#
# 3) Точечно один контракт:
# docker run --rm -v $PWD/out:/out dicoop/contracts:testnet copy apps
# → ./out/apps/{wasm,abi}
#
# Сборка артефактов идёт в CI до docker build через CDT-образ
# `dicoop/blockchain_v5.1.1:dev` (см. components/contracts/build-all.sh).
# Этот Dockerfile только упаковывает результат в slim alpine.
FROM alpine:3.20
RUN mkdir -p /contracts
COPY contracts/ /contracts/
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
LABEL org.opencontainers.image.title="coopenomics-contracts"
LABEL org.opencontainers.image.description="WASM+ABI артефакты всех контрактов кооперативной экономики"
LABEL org.opencontainers.image.source="https://github.com/coopenomics/mono"
ENTRYPOINT ["/entrypoint.sh"]
CMD ["copy"]