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:
177
docs/quickstart.md
Normal file
177
docs/quickstart.md
Normal 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-интерфейс
|
||||
Reference in New Issue
Block a user