Excluded from release bundle:
- CONTEXT.md, CHANGELOG.md (agent/project working notes)
- client-app/ (React Native messenger — tracked separately)
- contracts/hello_go/ (unused standalone example)
Kept contracts/counter/ and contracts/name_registry/ as vm-test fixtures
(referenced by vm/vm_test.go; NOT production contracts).
Docs refactor:
- docs/README.md — new top-level index with cross-references
- docs/quickstart.md — rewrite around single-node as primary path
- docs/node/README.md — full rewrite, all CLI flags, schema table
- docs/api/README.md — add /api/well-known-version, /api/update-check
- docs/contracts/README.md — split native (Go) vs WASM (user-deployable)
- docs/update-system.md — new, full 5-layer update system design
- README.md — link into docs/, drop CHANGELOG/client-app references
Build-time version system (inherited from earlier commits this branch):
- node --version / client --version with ldflags-injected metadata
- /api/well-known-version with {build, protocol_version, features[]}
- Peer-version gossip on dchain/version/v1
- /api/update-check against Gitea release API
- deploy/single/update.sh with semver guard + 15-min systemd jitter
3.2 KiB
3.2 KiB
Quickstart
Три пути в зависимости от того, что вам нужно.
Путь 1: локальная single-node за 5 минут
Самый быстрый способ потрогать блокчейн — одна нода в Docker, без TLS, без
федерации, с HTTP-API на localhost:8080.
git clone https://git.vsecoder.vodka/vsecoder/dchain.git
cd dchain
# 1. Собираем образ
docker build -t dchain-node-slim -f deploy/prod/Dockerfile.slim .
# 2. Генерим ключ ноды (один раз)
mkdir -p keys
docker run --rm --entrypoint /usr/local/bin/client \
-v "$PWD/keys:/out" dchain-node-slim \
keygen --out /out/node.json
# 3. Запускаем как genesis (блок 0 = эта нода — единственный валидатор)
docker run -d --name dchain --restart unless-stopped \
-p 4001:4001 -p 8080:8080 \
-v dchain_data:/data \
-v "$PWD/keys:/keys:ro" \
-e DCHAIN_GENESIS=true \
-e DCHAIN_ANNOUNCE=/ip4/127.0.0.1/tcp/4001 \
dchain-node-slim \
--db=/data/chain --mailbox-db=/data/mailbox --key=/keys/node.json \
--relay-key=/data/relay.json --listen=/ip4/0.0.0.0/tcp/4001 --stats-addr=:8080
# 4. Проверяем
curl -s http://localhost:8080/api/netstats
curl -s http://localhost:8080/api/well-known-version
open http://localhost:8080/ # Explorer UI
open http://localhost:8080/swagger # Swagger UI
Блоки коммитятся каждые ~5 секунд. Что дальше:
- Первая отправка tx — cli/README.md
- API endpoint reference — api/README.md
- Выключить UI / Swagger — см.
DCHAIN_DISABLE_UI/DCHAIN_DISABLE_SWAGGERв deploy/single/README.md
Путь 2: single-node с TLS и доменом
Полный operator runbook — deploy/single/README.md. Там 6 готовых сценариев: публичная с UI, headless API, полностью приватная, genesis, joiner, auto-update от Gitea.
Путь 3: multi-validator federation
3 ноды в PBFT quorum, Caddy LB с ip_hash для WS — deploy/prod/README.md.
Требования
- Docker Desktop / Docker Engine + Compose v2
- 2 GB RAM (одна нода), 4 GB (3-node dev cluster)
- 1 CPU
Для разработки из исходников:
- Go 1.24+ (модуль использует новые фичи)
- TinyGo 0.30+ — только если собираете WASM-контракты вручную
Проверка жизни
# высота тип
curl -s http://localhost:8080/api/netstats | jq '.total_blocks'
# версия бинаря
docker exec dchain /usr/local/bin/node --version
# → dchain-node v0.5.0-dev (commit=abc1234 date=… dirty=false)
# /api/well-known-version — те же данные + features[]
curl -s http://localhost:8080/api/well-known-version | jq .
# лист возможностей
curl -s http://localhost:8080/api/well-known-version | jq '.features'
Если total_blocks растёт каждые ~5 сек — всё ОК.