Files
dchain/docs/cli/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

412 lines
7.1 KiB
Markdown
Raw Permalink 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.

# 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
```