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
7.1 KiB
7.1 KiB
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:alice → value_hex → hex.DecodeString → pubkey.
Переменные окружения
Для удобства можно задать в .env или shell:
export NODE_URL=http://localhost:8081
export MY_KEY=./keys/alice.json
export GOV_ID=a1b2c3d4e5f60001
export REG_ID=b2c3d4e5f6000002