chore: initial commit for v0.0.1

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
This commit is contained in:
vsecoder
2026-04-17 14:16:44 +03:00
commit 7e7393e4f8
196 changed files with 55947 additions and 0 deletions

94
Makefile Normal file
View File

@@ -0,0 +1,94 @@
.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