DChain single-node blockchain + React Native messenger client. Core: - PBFT consensus with multi-sig validator admission + equivocation slashing - BadgerDB + schema migration scaffold (CurrentSchemaVersion=0) - libp2p gossipsub (tx/v1, blocks/v1, relay/v1, version/v1) - Native Go contracts (username_registry) alongside WASM (wazero) - WebSocket gateway with topic-based fanout + Ed25519-nonce auth - Relay mailbox with NaCl envelope encryption (X25519 + Ed25519) - Prometheus /metrics, per-IP rate limit, body-size cap Deployment: - Single-node compose (deploy/single/) with Caddy TLS + optional Prometheus - 3-node dev compose (docker-compose.yml) with mocked internet topology - 3-validator prod compose (deploy/prod/) for federation - Auto-update from Gitea via /api/update-check + systemd timer - Build-time version injection (ldflags → node --version) - UI / Swagger toggle flags (DCHAIN_DISABLE_UI, DCHAIN_DISABLE_SWAGGER) Client (client-app/): - Expo / React Native / NativeWind - E2E NaCl encryption, typing indicator, contact requests - Auto-discovery of canonical contracts, chain_id aware, WS reconnect on node switch Documentation: - README.md, CHANGELOG.md, CONTEXT.md - deploy/single/README.md with 6 operator scenarios - deploy/UPDATE_STRATEGY.md with 4-layer forward-compat design - docs/contracts/*.md per contract
95 lines
4.7 KiB
Makefile
95 lines
4.7 KiB
Makefile
.PHONY: build test up down reset deploy logs logs-node1 logs-node2 logs-node3 \
|
||
status peer-ids rebuild docker-clean test-local
|
||
|
||
# ── Сборка ───────────────────────────────────────────────────────────────────
|
||
|
||
build:
|
||
go build -o bin/node$(EXE) ./cmd/node
|
||
go build -o bin/client$(EXE) ./cmd/client
|
||
go build -o bin/wallet$(EXE) ./cmd/wallet
|
||
go build -o bin/peerid$(EXE) ./cmd/peerid
|
||
|
||
test:
|
||
go test ./...
|
||
|
||
# ── Docker: запуск / остановка ───────────────────────────────────────────────
|
||
|
||
## Собрать образ и запустить все три ноды
|
||
up:
|
||
docker compose up --build -d
|
||
@printf "\n Explorer → http://localhost:8081\n"
|
||
@printf " node2 → http://localhost:8082\n"
|
||
@printf " node3 → http://localhost:8083\n\n"
|
||
@printf " Задеплоить контракты: make deploy\n\n"
|
||
|
||
## Остановить ноды (данные сохраняются)
|
||
down:
|
||
docker compose down
|
||
|
||
## Полный сброс: остановить + удалить тома с данными
|
||
reset:
|
||
docker compose down -v
|
||
@printf "\n Данные удалены. Запустите 'make up' для чистого старта.\n\n"
|
||
|
||
## Задеплоить 4 production-контракта
|
||
deploy:
|
||
docker compose --profile deploy run --rm deploy
|
||
|
||
# ── Логи ─────────────────────────────────────────────────────────────────────
|
||
|
||
logs:
|
||
docker compose logs -f
|
||
|
||
logs-node1:
|
||
docker compose logs -f node1
|
||
|
||
logs-node2:
|
||
docker compose logs -f node2
|
||
|
||
logs-node3:
|
||
docker compose logs -f node3
|
||
|
||
# ── Статус ───────────────────────────────────────────────────────────────────
|
||
|
||
status:
|
||
@printf "\n── Контейнеры ──────────────────────────────────────────\n"
|
||
docker compose ps
|
||
@printf "\n── Сети ────────────────────────────────────────────────\n"
|
||
docker network ls | grep dchain || true
|
||
@printf "\n── Backbone IP-адреса ──────────────────────────────────\n"
|
||
@docker inspect -f '{{.Name}} {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \
|
||
node1 node2 node3 2>/dev/null | grep 172.30 || true
|
||
@printf "\n"
|
||
|
||
# ── Peer IDs ─────────────────────────────────────────────────────────────────
|
||
|
||
## Показать peer ID и backbone multiaddr для всех нод
|
||
peer-ids: build
|
||
@printf "\n── node1 ────────────────────────────────────────────────\n"
|
||
bin/peerid$(EXE) --key testdata/node1.json --ip 172.30.0.11 --port 4001
|
||
@printf "\n── node2 ────────────────────────────────────────────────\n"
|
||
bin/peerid$(EXE) --key testdata/node2.json --ip 172.30.0.12 --port 4001
|
||
@printf "\n── node3 ────────────────────────────────────────────────\n"
|
||
bin/peerid$(EXE) --key testdata/node3.json --ip 172.30.0.13 --port 4001
|
||
@printf "\n"
|
||
|
||
# ── Docker: служебные ────────────────────────────────────────────────────────
|
||
|
||
rebuild:
|
||
docker compose build --no-cache
|
||
docker compose up -d
|
||
|
||
docker-clean:
|
||
docker compose down -v --rmi local
|
||
|
||
# ── Локальный тест (одна нода) ────────────────────────────────────────────────
|
||
|
||
test-local: build
|
||
@rm -rf /tmp/testchain
|
||
MSYS_NO_PATHCONV=1 bin/node$(EXE) \
|
||
--genesis --db /tmp/testchain --key testdata/node1.json \
|
||
--listen /ip4/0.0.0.0/tcp/4001 &
|
||
@sleep 8 && kill $$(pgrep -f "bin/node") 2>/dev/null || true
|
||
@echo "--- chain info ---"
|
||
bin/client$(EXE) info --db /tmp/testchain
|