Руководства · Часть 7 из 7
Поднимите собственный шлюз
Проверка записи Label 309 ни от кого ничего не требует — ни аккаунта, ни сервера, ни ключа. Публикация — вторая половина: она помещает транзакцию в Cardano, а это стоит комиссии. Шлюз — та часть, что её оплачивает. Он держит пополненный кошелёк Cardano, который закрепляет запись (и кошелёк Arweave для запечатанных файлов), собирает и отправляет транзакцию, отслеживает её до подтверждения и отдаёт записи обратно для автономной проверки.
Чаще всего вы направляете SDK или CLI на чужой шлюз. Но весь бэкенд открыт —
label-309-gateway, один
бинарник на Rust плюс Postgres, — так что вы можете поднять и свой. Разверните его
для себя, для собственных приложений, или сделайте из него платный сервис для
других: он изначально многопользовательский, и под одним экземпляром живёт
множество аккаунтов и API-ключей. Это руководство проведёт вас от пустого места
до первой рассчитанной цены с помощью эталонного Docker Compose.
Прежде чем начать
Вам понадобятся Docker и Docker Compose, а также хост с несколькими гигабайтами свободного места на диске. Всё, что описано ниже, рассчитано на сеть Cardano preprod — это безопасный вариант, чтобы поднять развёртывание. Переход на mainnet — осознанный шаг, который вы делаете позже, когда развёртывание пополнено и проверено.
Получите код и напишите конфигурацию
Склонируйте репозиторий и работайте из каталога deploy/, где лежит эталонный
docker-compose.yml. Скопируйте пример конфигурации и отредактируйте его под своё
развёртывание — сеть, диапазон комиссий, хранилище и ценообразование:
git clone https://github.com/cardanowall/label-309-gateway
cd label-309-gateway/deploy
cp ../gateway.example.toml gateway.tomlПример снабжён комментариями и уже нацелен на preprod, так что для первого запуска он годится как есть.
Создайте связку ключей
Каждый ключ подписи, которым пользуется шлюз, хранится в одном файле связки
ключей, зашифрованном age. Создайте его, затем добавьте ключ Cardano (preprod),
ключ Arweave и ключ для обёртывания вебхуков. Эти шаги keyring запускают
бинарник gateway напрямую: связку ключей полагается создавать на доверенной
машине, а в контейнер копировать только её зашифрованный файл, поэтому ради этого
одного шага возьмите релизную сборку из репозитория.
mkdir -p secrets
printf '%s' 'a-strong-passphrase' > secrets/gateway-keyring-passphrase
export GATEWAY_KEYRING_PASSPHRASE="$(cat secrets/gateway-keyring-passphrase)"
gateway keyring init --path secrets/gateway-keyring.age
gateway keyring add-cardano --path secrets/gateway-keyring.age --network preprod
gateway keyring add-arweave --path secrets/gateway-keyring.age
gateway keyring add-webhook-wrap --path secrets/gateway-keyring.age
chmod 600 secrets/*Каждый шаг add- печатает адрес, который только что создал. Пополните оба
напечатанных адреса: адрес Cardano оплачивает комиссии за закрепление, а адрес
Arweave оплачивает хранение запечатанных файлов. Затем задайте пароль базы данных,
который читает compose:
echo 'POSTGRES_PASSWORD=a-strong-db-password' > .envПоднимите шлюз
Сначала подготовьте оператора. Эта команда применяет миграции и ровно один раз печатает корневой секрет — сохраните его в надёжном месте, это главный ключ доступа к плоскости управления:
docker compose run --rm gateway operator bootstrap --label acmeЗатем запустите Postgres и шлюз:
docker compose up -dЗарегистрируйте кошелёк, аккаунт и ключ
Compose намеренно не публикует ни одного порта на хосте: плоскости данных и управления делят один сокет, поэтому, открыв его наружу, вы открыли бы и плоскость управления. Работайте с плоскостью управления изнутри контейнера. Откройте оболочку:
docker compose exec gateway shНацельте его на локальную плоскость управления, указав корневой секрет, который
напечатал bootstrap, затем зарегистрируйте пополненный кошелёк Cardano (адрес,
который напечатал keyring add-cardano), создайте аккаунт, пополните его и
выпустите API-ключ плоскости данных с правами на публикацию:
export GATEWAY_CONTROL_URL=http://127.0.0.1:8080/control/v1
export GATEWAY_CONTROL_TOKEN='ctl_…the root secret from bootstrap…'
gateway admin wallet register primary addr_test1… preprod
gateway admin account create
gateway admin account fund <account_id> 10000000 "starter credit" # $10
gateway admin key create <account_id> poe:create,poe:read,account:readkey create печатает API-ключ, который управляет плоскостью данных. Этот ключ
вместе с базовым URL — всё, что нужно приложению.
Зафиксируйте первую цену
Чтобы во время настройки достучаться до плоскости данных с хоста, раскомментируйте
проброс порта на loopback (127.0.0.1:8080:8080) в docker-compose.yml и снова
выполните docker compose up -d — только loopback, ни в коем случае не
0.0.0.0. Затем зафиксируйте цену тем API-ключом, который только что выпустили:
curl -sS -X POST http://127.0.0.1:8080/api/v1/poe/quote \
-H "Authorization: Bearer <your-api-key>" \
-H "Content-Type: application/json" \
-d '{"record_bytes":256,"recipient_count":0,"file_bytes_total":0}'В ответе придёт quote_id, действительный 15 минут, и разбивка стоимости. Вызов
публикации расходует этот quote_id атомарно, вместе со списанием с баланса, — та
же схема из двух шагов зафиксировать цену, затем отправить, что и в
руководствах по SDK. Ваш шлюз работает.
Что дальше
Запущенный бинарник сам отдаёт интерактивный справочник по API — плоскость данных
по адресу /api/v1/docs, плоскость управления по /control/v1/docs, и оба
отображаются полностью офлайн. Два документа в репозитории копают глубже:
руководство оператора
охватывает пополнение, учётные данные, денежную семантику и повседневную
эксплуатацию, а руководство интегратора
— как построить продукт поверх шлюза.
Плоскость данных вашего шлюза — это ровно то, что руководства по SDK и CLI
называют базовым URL. Замените https://your-gateway.example на адрес, которым
теперь управляете вы, раздайте API-ключи и
опубликуйте своё первое подтверждение существования
через бэкенд, который целиком ваш.
Сначала preprod, mainnet — когда будете готовы
Всё здесь рассчитано на Cardano preprod — безопасный способ поднять развёртывание. Переход на
mainnet — осознанное переключение: задайте network = "mainnet" в конфигурации, добавьте в связку
ключей ключ Cardano для mainnet и зарегистрируйте кошелёк как mainnet. Все три должны совпасть,
прежде чем шлюз закрепит настоящую транзакцию.