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

177
docs/quickstart.md Normal file
View File

@@ -0,0 +1,177 @@
# Быстрый старт
## Требования
- Docker Desktop (или Docker Engine + Compose v2)
- 4 GB RAM, 2 CPU
Для разработки контрактов дополнительно:
- Go 1.21+
- TinyGo 0.30+ (только для TinyGo-контрактов)
---
## 1. Запустить сеть
```bash
git clone <repo>
cd go-blockchain
docker compose up --build -d
```
Запускается три ноды:
| Контейнер | Роль | Explorer |
|-----------|------|---------|
| node1 | genesis + validator + relay | http://localhost:8081 |
| node2 | validator + relay | http://localhost:8082 |
| node3 | relay-only observer | http://localhost:8083 |
Дождитесь пока в Explorer появятся блоки (~10 секунд).
Swagger: http://localhost:8081/swagger
---
## 2. Задеплоить контракты
```bash
docker compose --profile deploy run --rm deploy
```
Скрипт:
1. Ждёт готовности node1
2. Деплоит 4 контракта из genesis-ключа `/keys/node1.json`
3. Вызывает `init` на governance и escrow
4. Привязывает governance к нодам через `/api/governance/link`
5. Выводит contract ID и сохраняет в `/tmp/contracts.env`
Пример вывода:
```
══════════════════════════════════════════════════
DChain — деплой production-контрактов
══════════════════════════════════════════════════
▶ Деплой username_registry
✓ username_registry contract_id: a1b2c3d4e5f60718
▶ Деплой governance
✓ governance contract_id: 9f8e7d6c5b4a3210
▶ Деплой auction
✓ auction contract_id: 1a2b3c4d5e6f7089
▶ Деплой escrow
✓ escrow contract_id: fedcba9876543210
✓ username_registry : a1b2c3d4e5f60718
✓ governance : 9f8e7d6c5b4a3210
✓ auction : 1a2b3c4d5e6f7089
✓ escrow : fedcba9876543210
```
Сохраните ID для последующего использования:
```bash
# Запомнить ID
export UR_ID=a1b2c3d4e5f60718
export GOV_ID=9f8e7d6c5b4a3210
export AUC_ID=1a2b3c4d5e6f7089
export ESC_ID=fedcba9876543210
```
---
## 3. Первые операции
### Проверить баланс genesis-кошелька
```bash
docker exec node1 client balance \
--key /keys/node1.json \
--node http://node1:8080
```
### Создать новый кошелёк
```bash
docker exec node1 wallet keygen --out /tmp/alice.json
docker exec node1 client balance \
--key /tmp/alice.json \
--node http://node1:8080
```
### Перевести токены
```bash
# Получить pubkey Alice
ALICE_PUB=$(docker exec node1 sh -c 'cat /tmp/alice.json | grep pub_key' | grep -oP '"pub_key":\s*"\K[^"]+')
docker exec node1 client transfer \
--key /keys/node1.json \
--to $ALICE_PUB \
--amount 1000000 \
--node http://node1:8080
```
### Зарегистрировать username
```bash
docker exec node1 client call-contract \
--key /keys/node1.json \
--contract $UR_ID \
--method register \
--arg alice \
--gas 20000 \
--node http://node1:8080
```
### Отправить сообщение (по username)
```bash
docker exec node1 client send-msg \
--key /keys/node1.json \
--to @alice \
--registry $UR_ID \
--msg "Привет!" \
--node http://node1:8080
```
---
## 4. Explorer
После деплоя контракты видны в Explorer:
```
http://localhost:8081/contracts — все контракты
http://localhost:8081/contract?id=$UR_ID — username_registry
http://localhost:8081/contract?id=$GOV_ID — governance
http://localhost:8081/contract?id=$AUC_ID — auction
http://localhost:8081/contract?id=$ESC_ID — escrow
```
Вкладки в Explorer на странице контракта:
- **Overview** — метаданные, ABI-методы
- **State** — query state по ключу
- **Logs** — history вызовов с логами
- **Raw** — сырой JSON ContractRecord
---
## 5. Полный сброс
```bash
docker compose down -v && docker compose up --build -d
```
Флаг `-v` удаляет тома BadgerDB. После пересборки сеть стартует с чистого genesis.
---
## Следующие шаги
- [Контракты](contracts/README.md) — использование всех 4 контрактов
- [Разработка контрактов](development/README.md) — написать свой контракт
- [CLI](cli/README.md) — все команды клиента
- [API](api/README.md) — REST-интерфейс