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
4.8 KiB
4.8 KiB
Быстрый старт
Требования
- Docker Desktop (или Docker Engine + Compose v2)
- 4 GB RAM, 2 CPU
Для разработки контрактов дополнительно:
- Go 1.21+
- TinyGo 0.30+ (только для TinyGo-контрактов)
1. Запустить сеть
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. Задеплоить контракты
docker compose --profile deploy run --rm deploy
Скрипт:
- Ждёт готовности node1
- Деплоит 4 контракта из genesis-ключа
/keys/node1.json - Вызывает
initна governance и escrow - Привязывает governance к нодам через
/api/governance/link - Выводит 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 для последующего использования:
# Запомнить ID
export UR_ID=a1b2c3d4e5f60718
export GOV_ID=9f8e7d6c5b4a3210
export AUC_ID=1a2b3c4d5e6f7089
export ESC_ID=fedcba9876543210
3. Первые операции
Проверить баланс genesis-кошелька
docker exec node1 client balance \
--key /keys/node1.json \
--node http://node1:8080
Создать новый кошелёк
docker exec node1 wallet keygen --out /tmp/alice.json
docker exec node1 client balance \
--key /tmp/alice.json \
--node http://node1:8080
Перевести токены
# Получить 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
docker exec node1 client call-contract \
--key /keys/node1.json \
--contract $UR_ID \
--method register \
--arg alice \
--gas 20000 \
--node http://node1:8080
Отправить сообщение (по username)
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. Полный сброс
docker compose down -v && docker compose up --build -d
Флаг -v удаляет тома BadgerDB. После пересборки сеть стартует с чистого genesis.
Следующие шаги
- Контракты — использование всех 4 контрактов
- Разработка контрактов — написать свой контракт
- CLI — все команды клиента
- API — REST-интерфейс