# Быстрый старт ## Требования - Docker Desktop (или Docker Engine + Compose v2) - 4 GB RAM, 2 CPU Для разработки контрактов дополнительно: - Go 1.21+ - TinyGo 0.30+ (только для TinyGo-контрактов) --- ## 1. Запустить сеть ```bash git clone cd go-blockchain docker compose up --build -d ``` Запускается три ноды: | Контейнер | Роль | Explorer | |-----------|------|---------| | node1 | genesis + validator + relay | http://localhost:8081 | | node2 | validator + relay | http://localhost:8082 | | node3 | relay-only observer | http://localhost:8083 | Дождитесь пока в Explorer появятся блоки (~10 секунд). Swagger: http://localhost:8081/swagger --- ## 2. Задеплоить контракты ```bash docker compose --profile deploy run --rm deploy ``` Скрипт: 1. Ждёт готовности node1 2. Деплоит 4 контракта из genesis-ключа `/keys/node1.json` 3. Вызывает `init` на governance и escrow 4. Привязывает governance к нодам через `/api/governance/link` 5. Выводит contract ID и сохраняет в `/tmp/contracts.env` Пример вывода: ``` ══════════════════════════════════════════════════ DChain — деплой production-контрактов ══════════════════════════════════════════════════ ▶ Деплой username_registry ✓ username_registry contract_id: a1b2c3d4e5f60718 ▶ Деплой governance ✓ governance contract_id: 9f8e7d6c5b4a3210 ▶ Деплой auction ✓ auction contract_id: 1a2b3c4d5e6f7089 ▶ Деплой escrow ✓ escrow contract_id: fedcba9876543210 ✓ username_registry : a1b2c3d4e5f60718 ✓ governance : 9f8e7d6c5b4a3210 ✓ auction : 1a2b3c4d5e6f7089 ✓ escrow : fedcba9876543210 ``` Сохраните ID для последующего использования: ```bash # Запомнить ID export UR_ID=a1b2c3d4e5f60718 export GOV_ID=9f8e7d6c5b4a3210 export AUC_ID=1a2b3c4d5e6f7089 export ESC_ID=fedcba9876543210 ``` --- ## 3. Первые операции ### Проверить баланс genesis-кошелька ```bash docker exec node1 client balance \ --key /keys/node1.json \ --node http://node1:8080 ``` ### Создать новый кошелёк ```bash docker exec node1 wallet keygen --out /tmp/alice.json docker exec node1 client balance \ --key /tmp/alice.json \ --node http://node1:8080 ``` ### Перевести токены ```bash # Получить pubkey Alice ALICE_PUB=$(docker exec node1 sh -c 'cat /tmp/alice.json | grep pub_key' | grep -oP '"pub_key":\s*"\K[^"]+') docker exec node1 client transfer \ --key /keys/node1.json \ --to $ALICE_PUB \ --amount 1000000 \ --node http://node1:8080 ``` ### Зарегистрировать username ```bash docker exec node1 client call-contract \ --key /keys/node1.json \ --contract $UR_ID \ --method register \ --arg alice \ --gas 20000 \ --node http://node1:8080 ``` ### Отправить сообщение (по username) ```bash docker exec node1 client send-msg \ --key /keys/node1.json \ --to @alice \ --registry $UR_ID \ --msg "Привет!" \ --node http://node1:8080 ``` --- ## 4. Explorer После деплоя контракты видны в Explorer: ``` http://localhost:8081/contracts — все контракты http://localhost:8081/contract?id=$UR_ID — username_registry http://localhost:8081/contract?id=$GOV_ID — governance http://localhost:8081/contract?id=$AUC_ID — auction http://localhost:8081/contract?id=$ESC_ID — escrow ``` Вкладки в Explorer на странице контракта: - **Overview** — метаданные, ABI-методы - **State** — query state по ключу - **Logs** — history вызовов с логами - **Raw** — сырой JSON ContractRecord --- ## 5. Полный сброс ```bash docker compose down -v && docker compose up --build -d ``` Флаг `-v` удаляет тома BadgerDB. После пересборки сеть стартует с чистого genesis. --- ## Следующие шаги - [Контракты](contracts/README.md) — использование всех 4 контрактов - [Разработка контрактов](development/README.md) — написать свой контракт - [CLI](cli/README.md) — все команды клиента - [API](api/README.md) — REST-интерфейс