Files
dchain/docs/contracts/README.md
vsecoder 7e7393e4f8 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
2026-04-17 14:16:44 +03:00

60 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Production Smart Contracts
DChain поставляется с четырьмя production-контрактами, задеплоенными из genesis-кошелька.
## Обзор
| Контракт | Назначение | Ключевые фичи |
|---------|-----------|--------------|
| [username_registry](username_registry.md) | Username ↔ адрес | Тарифная сетка, treasury fees, reverse lookup |
| [governance](governance.md) | On-chain параметры | Propose/approve workflow, admin role |
| [auction](auction.md) | English auction | Token escrow, автоматический refund, settle |
| [escrow](escrow.md) | Двусторонний escrow | Dispute/resolve, admin arbitration |
## Деплой
```bash
docker compose --profile deploy run --rm deploy
```
Все 4 контракта деплоятся автоматически. ID сохраняются в `/tmp/contracts.env`.
## Вызов контракта
```bash
docker exec node1 client call-contract \
--key /keys/node1.json \
--contract <CONTRACT_ID> \
--method <METHOD> \
--arg <STRING_ARG> # строковый аргумент (можно несколько)
--arg64 <UINT64_ARG> # числовой аргумент uint64
--gas <GAS_LIMIT> # рекомендуется 20000 для записи, 5000 для чтения
--node http://node1:8080
```
## Contract Treasury
У каждого контракта есть **ownerless treasury address**`hex(sha256(contractID + ":treasury"))`.
Это эскроу-адрес без private key. Только сам контракт может снять с него деньги через host function `transfer`.
Используется в `auction` и `escrow` для хранения заблокированных токенов.
## Просмотр состояния
```bash
# Через REST API
curl http://localhost:8081/api/contracts/<ID>/state/<key>
# Через Explorer
open http://localhost:8081/contract?id=<ID>
```
## Логи контракта
```bash
# REST
curl "http://localhost:8081/api/contracts/<ID>/logs?limit=20"
# Explorer → вкладка Logs
```