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:
411
docs/cli/README.md
Normal file
411
docs/cli/README.md
Normal file
@@ -0,0 +1,411 @@
|
||||
# CLI Reference
|
||||
|
||||
Справочник по командам `client` — инструмента для работы с DChain.
|
||||
|
||||
## Установка
|
||||
|
||||
```bash
|
||||
go build -o client ./cmd/client/
|
||||
# или
|
||||
go install ./cmd/client/
|
||||
```
|
||||
|
||||
## Глобальные флаги
|
||||
|
||||
Большинство команд принимают:
|
||||
|
||||
| Флаг | Описание |
|
||||
|------|---------|
|
||||
| `--key <path>` | Файл ключа (JSON с Ed25519 + X25519) |
|
||||
| `--node <url>` | URL ноды (например `http://localhost:8081`) |
|
||||
|
||||
---
|
||||
|
||||
## Ключи и идентичность
|
||||
|
||||
### `keygen`
|
||||
|
||||
Сгенерировать новый ключ.
|
||||
|
||||
```bash
|
||||
client keygen --out alice.json
|
||||
```
|
||||
|
||||
Создаёт `alice.json` с Ed25519 (подпись транзакций) и X25519 (E2E relay шифрование).
|
||||
|
||||
---
|
||||
|
||||
### `register`
|
||||
|
||||
Зарегистрировать идентичность в блокчейне.
|
||||
|
||||
```bash
|
||||
client register \
|
||||
--key alice.json \
|
||||
--nick alice \
|
||||
--node http://localhost:8081
|
||||
```
|
||||
|
||||
Выполняет PoW, затем отправляет `REGISTER_KEY` транзакцию.
|
||||
|
||||
---
|
||||
|
||||
## Токены (нативные)
|
||||
|
||||
### `balance`
|
||||
|
||||
```bash
|
||||
client balance \
|
||||
--key alice.json \
|
||||
--node http://localhost:8081
|
||||
```
|
||||
|
||||
```
|
||||
Balance: 9.5 T (9500000 µT)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `transfer`
|
||||
|
||||
```bash
|
||||
# По pubkey
|
||||
client transfer \
|
||||
--to 03abcd... \
|
||||
--amount 1.5 \
|
||||
--key alice.json \
|
||||
--node http://localhost:8081
|
||||
|
||||
# По DC-адресу
|
||||
client transfer \
|
||||
--to DCabc123... \
|
||||
--amount 0.5 \
|
||||
--key alice.json \
|
||||
--node http://localhost:8081
|
||||
|
||||
# По @username (через registry)
|
||||
client transfer \
|
||||
--to @bob \
|
||||
--amount 1.0 \
|
||||
--registry $REG_ID \
|
||||
--key alice.json \
|
||||
--node http://localhost:8081
|
||||
```
|
||||
|
||||
`--amount` в T (токенах). 1 T = 1 000 000 µT.
|
||||
|
||||
---
|
||||
|
||||
## Смарт-контракты
|
||||
|
||||
### `deploy-contract`
|
||||
|
||||
```bash
|
||||
client deploy-contract \
|
||||
--key alice.json \
|
||||
--wasm mycontract.wasm \
|
||||
--abi mycontract_abi.json \
|
||||
--node http://localhost:8081
|
||||
```
|
||||
|
||||
Выводит `contract_id: <hex16>`.
|
||||
|
||||
---
|
||||
|
||||
### `call-contract`
|
||||
|
||||
```bash
|
||||
# Без аргументов
|
||||
client call-contract \
|
||||
--contract $CONTRACT_ID \
|
||||
--method increment \
|
||||
--gas 5000 \
|
||||
--key alice.json --node http://localhost:8081
|
||||
|
||||
# Строковые аргументы
|
||||
client call-contract \
|
||||
--contract $REG_ID \
|
||||
--method register \
|
||||
--arg alice \
|
||||
--gas 30000 \
|
||||
--key alice.json --node http://localhost:8081
|
||||
|
||||
# Смешанные аргументы (строка + uint64)
|
||||
client call-contract \
|
||||
--contract $ESC_ID \
|
||||
--method create \
|
||||
--arg "deal-001" \
|
||||
--arg "$SELLER_PUB" \
|
||||
--arg64 5000000 \
|
||||
--gas 30000 \
|
||||
--key alice.json --node http://localhost:8081
|
||||
|
||||
# JSON-массив аргументов
|
||||
client call-contract \
|
||||
--contract $AUC_ID \
|
||||
--method create \
|
||||
--args '["Rare item", 1000000, 100]' \
|
||||
--gas 20000 \
|
||||
--key alice.json --node http://localhost:8081
|
||||
```
|
||||
|
||||
| Флаг | Описание |
|
||||
|------|---------|
|
||||
| `--contract` | ID контракта |
|
||||
| `--method` | Имя метода |
|
||||
| `--arg` | Строковый аргумент (повторяемый) |
|
||||
| `--arg64` | uint64 аргумент (повторяемый) |
|
||||
| `--args` | JSON-массив всех аргументов |
|
||||
| `--gas` | Gas лимит |
|
||||
|
||||
---
|
||||
|
||||
## Relay / Сообщения
|
||||
|
||||
### `send-msg`
|
||||
|
||||
```bash
|
||||
# По pubkey
|
||||
client send-msg \
|
||||
--to $RECIPIENT_PUB \
|
||||
--msg "Hello!" \
|
||||
--key alice.json --node http://localhost:8081
|
||||
|
||||
# По @username
|
||||
client send-msg \
|
||||
--to @bob \
|
||||
--msg "Hey Bob!" \
|
||||
--registry $REG_ID \
|
||||
--key alice.json --node http://localhost:8081
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `inbox`
|
||||
|
||||
```bash
|
||||
# Читать сообщения
|
||||
client inbox \
|
||||
--key alice.json \
|
||||
--node http://localhost:8081
|
||||
|
||||
# Последние N
|
||||
client inbox \
|
||||
--key alice.json \
|
||||
--limit 20 \
|
||||
--node http://localhost:8081
|
||||
|
||||
# Читать и удалять
|
||||
client inbox \
|
||||
--key alice.json \
|
||||
--delete \
|
||||
--node http://localhost:8081
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `request-contact`
|
||||
|
||||
```bash
|
||||
client request-contact \
|
||||
--to $RECIPIENT_PUB \
|
||||
--fee 1000 \
|
||||
--intro "Hi, let's connect!" \
|
||||
--key alice.json --node http://localhost:8081
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `accept-contact` / `block-contact`
|
||||
|
||||
```bash
|
||||
client accept-contact \
|
||||
--from $SENDER_PUB \
|
||||
--key alice.json --node http://localhost:8081
|
||||
|
||||
client block-contact \
|
||||
--from $SENDER_PUB \
|
||||
--key alice.json --node http://localhost:8081
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Валидаторы
|
||||
|
||||
### `stake`
|
||||
|
||||
```bash
|
||||
client stake \
|
||||
--amount 1000 \
|
||||
--key alice.json --node http://localhost:8081
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `unstake`
|
||||
|
||||
```bash
|
||||
client unstake \
|
||||
--key alice.json --node http://localhost:8081
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Утилиты
|
||||
|
||||
### `info`
|
||||
|
||||
```bash
|
||||
client info --node http://localhost:8081
|
||||
```
|
||||
|
||||
Показывает высоту блока, количество валидаторов, total supply.
|
||||
|
||||
---
|
||||
|
||||
### `wait-tx`
|
||||
|
||||
Ждать подтверждения транзакции (через SSE).
|
||||
|
||||
```bash
|
||||
client wait-tx \
|
||||
--id tx-abc123 \
|
||||
--timeout 30 \
|
||||
--node http://localhost:8081
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Токены (fungible)
|
||||
|
||||
### `issue-token`
|
||||
|
||||
```bash
|
||||
client issue-token \
|
||||
--name "MyToken" \
|
||||
--symbol MTK \
|
||||
--decimals 6 \
|
||||
--supply 1000000 \
|
||||
--key alice.json --node http://localhost:8081
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `transfer-token`
|
||||
|
||||
```bash
|
||||
client transfer-token \
|
||||
--token $TOKEN_ID \
|
||||
--to $RECIPIENT_PUB \
|
||||
--amount 100 \
|
||||
--key alice.json --node http://localhost:8081
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `burn-token`
|
||||
|
||||
```bash
|
||||
client burn-token \
|
||||
--token $TOKEN_ID \
|
||||
--amount 50 \
|
||||
--key alice.json --node http://localhost:8081
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `token-balance`
|
||||
|
||||
```bash
|
||||
client token-balance \
|
||||
--token $TOKEN_ID \
|
||||
--key alice.json --node http://localhost:8081
|
||||
|
||||
# Другой адрес
|
||||
client token-balance \
|
||||
--token $TOKEN_ID \
|
||||
--address $BOB_PUB \
|
||||
--node http://localhost:8081
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## NFT
|
||||
|
||||
### `mint-nft`
|
||||
|
||||
```bash
|
||||
client mint-nft \
|
||||
--name "CryptoArt #1" \
|
||||
--desc "First edition" \
|
||||
--uri "https://example.com/nft/1" \
|
||||
--attrs '{"rarity":"rare","color":"blue"}' \
|
||||
--key alice.json --node http://localhost:8081
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `transfer-nft`
|
||||
|
||||
```bash
|
||||
client transfer-nft \
|
||||
--nft $NFT_ID \
|
||||
--to $BOB_PUB \
|
||||
--key alice.json --node http://localhost:8081
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `burn-nft`
|
||||
|
||||
```bash
|
||||
client burn-nft \
|
||||
--nft $NFT_ID \
|
||||
--key alice.json --node http://localhost:8081
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `nft-info`
|
||||
|
||||
```bash
|
||||
client nft-info \
|
||||
--nft $NFT_ID \
|
||||
--node http://localhost:8081
|
||||
|
||||
# Проверить владельца
|
||||
client nft-info \
|
||||
--nft $NFT_ID \
|
||||
--owner $ALICE_PUB \
|
||||
--node http://localhost:8081
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## @Username resolution
|
||||
|
||||
Команды `transfer` и `send-msg` поддерживают `@username` синтаксис при наличии `--registry`:
|
||||
|
||||
```bash
|
||||
# Resolve @alice → pubkey через username_registry контракт
|
||||
client transfer \
|
||||
--to @alice \
|
||||
--amount 1.0 \
|
||||
--registry $REGISTRY_ID \
|
||||
--key key.json --node http://localhost:8081
|
||||
```
|
||||
|
||||
Под капотом: `GET /api/contracts/<registry_id>/state/name:alice` → `value_hex` → `hex.DecodeString` → pubkey.
|
||||
|
||||
---
|
||||
|
||||
## Переменные окружения
|
||||
|
||||
Для удобства можно задать в `.env` или shell:
|
||||
|
||||
```bash
|
||||
export NODE_URL=http://localhost:8081
|
||||
export MY_KEY=./keys/alice.json
|
||||
export GOV_ID=a1b2c3d4e5f60001
|
||||
export REG_ID=b2c3d4e5f6000002
|
||||
```
|
||||
Reference in New Issue
Block a user