# CLI Reference Справочник по командам `client` — инструмента для работы с DChain. ## Установка ```bash go build -o client ./cmd/client/ # или go install ./cmd/client/ ``` ## Глобальные флаги Большинство команд принимают: | Флаг | Описание | |------|---------| | `--key ` | Файл ключа (JSON с Ed25519 + X25519) | | `--node ` | 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: `. --- ### `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//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 ```