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

7.1 KiB
Raw Blame History

CLI Reference

Справочник по командам client — инструмента для работы с DChain.

Установка

go build -o client ./cmd/client/
# или
go install ./cmd/client/

Глобальные флаги

Большинство команд принимают:

Флаг Описание
--key <path> Файл ключа (JSON с Ed25519 + X25519)
--node <url> URL ноды (например http://localhost:8081)

Ключи и идентичность

keygen

Сгенерировать новый ключ.

client keygen --out alice.json

Создаёт alice.json с Ed25519 (подпись транзакций) и X25519 (E2E relay шифрование).


register

Зарегистрировать идентичность в блокчейне.

client register \
  --key alice.json \
  --nick alice \
  --node http://localhost:8081

Выполняет PoW, затем отправляет REGISTER_KEY транзакцию.


Токены (нативные)

balance

client balance \
  --key alice.json \
  --node http://localhost:8081
Balance: 9.5 T (9500000 µT)

transfer

# По 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

client deploy-contract \
  --key alice.json \
  --wasm mycontract.wasm \
  --abi  mycontract_abi.json \
  --node http://localhost:8081

Выводит contract_id: <hex16>.


call-contract

# Без аргументов
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

# По 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

# Читать сообщения
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

client request-contact \
  --to $RECIPIENT_PUB \
  --fee 1000 \
  --intro "Hi, let's connect!" \
  --key alice.json --node http://localhost:8081

accept-contact / block-contact

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

client stake \
  --amount 1000 \
  --key alice.json --node http://localhost:8081

unstake

client unstake \
  --key alice.json --node http://localhost:8081

Утилиты

info

client info --node http://localhost:8081

Показывает высоту блока, количество валидаторов, total supply.


wait-tx

Ждать подтверждения транзакции (через SSE).

client wait-tx \
  --id tx-abc123 \
  --timeout 30 \
  --node http://localhost:8081

Токены (fungible)

issue-token

client issue-token \
  --name "MyToken" \
  --symbol MTK \
  --decimals 6 \
  --supply 1000000 \
  --key alice.json --node http://localhost:8081

transfer-token

client transfer-token \
  --token $TOKEN_ID \
  --to $RECIPIENT_PUB \
  --amount 100 \
  --key alice.json --node http://localhost:8081

burn-token

client burn-token \
  --token $TOKEN_ID \
  --amount 50 \
  --key alice.json --node http://localhost:8081

token-balance

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

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

client transfer-nft \
  --nft $NFT_ID \
  --to $BOB_PUB \
  --key alice.json --node http://localhost:8081

burn-nft

client burn-nft \
  --nft $NFT_ID \
  --key alice.json --node http://localhost:8081

nft-info

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:

# 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:alicevalue_hexhex.DecodeString → pubkey.


Переменные окружения

Для удобства можно задать в .env или shell:

export NODE_URL=http://localhost:8081
export MY_KEY=./keys/alice.json
export GOV_ID=a1b2c3d4e5f60001
export REG_ID=b2c3d4e5f6000002