Самостоятельное развёртывание

Ваши деньги лежат в контракте Safe в блокчейне и подчиняются вашим ключам. Ничто из того, что запускает Vela, не может их переместить. А запускает Vela механизмы, которые делают кошелёк удобным: релей, который отправляет ваши транзакции, индекс, который помогает новому устройству найти ваш кошелёк, справочник данных сетей, источник курсов валют и сами приложения.

На этой странице перечислены все эти части: что ломается без каждой из них и как запустить свою. Здесь же — единственная часть, которую заменить нельзя, домен, к которому привязаны ваши passkey, и что делать, если getvela.app исчезнет.

Карта

ЧастьЧто делаетПо умолчанию у VelaМожно заменить?Без неё
РелейПринимает вашу подписанную операцию, платит за газ, отправляет её и получает комиссию, которую вы подписалиvela-relay-cf.getvela.appДа — запустите vela-relay и укажите его кошелькуОтправлять нельзя
Индекс публичных ключейРегистрирует ключи нового кошелька в блокчейне; отвечает на вопрос «к какому кошельку относится этот ключ?»p256-index-v2.getvela.appДа — запустите p256-indexНовые кошельки создать нельзя; вход переходит на чтение из блокчейна
Контракт-реестрПостоянная публичная запись ключей каждого кошелька0x94fD…1EA9 в GnosisНе нужно — у него нет владельца, кошелёк читает его напрямую
Данные сетейСведения о сетях, списки токенов, логотипы, дескрипторы понятной подписиethereum-data.getvela.appДа — запустите ethereum-dataНет списков токенов и логотипов; расшифровывается меньше транзакций; добавить сеть не получится
Курсы валютСуммы в вашей валюте отображенияvela-currency.getvela.appДа — запустите vela-currency или любой источник, совместимый с FrankfurterПриложения по возможности переходят на курсы Chainlink из блокчейна (десктоп показывает USD)
RPC-узлыЧтение балансов, симуляция транзакцийПубличные эндпоинты для каждой сетиДа — для каждой сети в «Настройки → Сети»Vela переключается между эндпоинтами
ПриложенияСам кошелёкwallet.getvela.app, релизные сборкиДа — соберите их
getvela.appДомен, к которому привязаны ваши passkeyНет — см. ниже

Кроме того, приложения обращаются к нескольким сторонним сервисам, которые Vela не принадлежат: к публичным базам селекторов функций (sourcify, openchain, 4byte), которые используются в крайнем случае при расшифровке транзакции, к справочнику аутентификаторов, по которому определяется модель вашего ключа безопасности, и к туннельным серверам Apple и Google, когда вы подписываете телефоном по QR-коду.

Единственное, что нельзя заменить: домен passkey

Passkey принадлежит сайту, для которого он создан. Ключи Vela создаются для getvela.app. Браузеры предлагают их только страницам на getvela.app и его поддоменах (или источникам, которые getvela.app объявил связанными), а встроенные passkey телефона работают только в приложениях, за которые ручается getvela.app. За пределами браузера правило мягче: Chrome позволяет пользоваться ими расширению с разрешением для getvela.app, а программа на вашем компьютере может напрямую запросить подпись для getvela.app у ключа безопасности или телефона — так работают приложения, собранные самостоятельно, и поэтому важно, какие программы вы запускаете. Отсюда два следствия.

Копия веб-кошелька на вашем домене — это другой кошелёк. Если тот же код раздаётся с wallet.example.com, он создаёт passkey для wallet.example.com — новые ключи, а значит, и новый адрес. Подписывать за кошелёк, созданный на wallet.getvela.app, такая копия не может. Но она всё равно полезна: для кошелька, который вы создадите в ней, или чтобы с нуля запустить весь стек самому.

Для уже существующего кошелька вот что продолжит работать, если getvela.app недоступен или исчез:

Способ входаКакие ключи может использоватьГде взять
Браузерное расширение Vela (браузеры на Chromium: Chrome, Edge, Brave)Любой ключ, до которого может дотянуться браузер: passkey этого устройства, USB-ключ безопасности (NFC — если компьютер его поддерживает), телефон по QR-кодуZip-архив релиза с GitHub или сборка своими силами
Настольное или мобильное приложение, собранное самостоятельноТелефон по QR-коду и USB-ключи безопасностиСоберите его
Приложения из магазинов и нотаризованные настольные приложенияТелефон по QR-коду и ключи безопасности — всегда; passkey варианта «Это устройство» — только пока операционная система ещё может проверить приложение по getvela.appРелизы на GitHub (магазины — позже)

Расширение может использовать ключи getvela.app, потому что Chrome разрешает расширению с доступом к сайту пользоваться passkey этого сайта. Браузер проверяет это разрешение локально; мы проверили, что это работает, но пока не при реально отключённом домене. Приложение, собранное самостоятельно, может использовать телефон или ключ безопасности, потому что Vela общается с ними напрямую; а собственному passkey телефона («Это устройство») нужно, чтобы приложение было подписано Vela, а ваше — нет.

Страница подписи сама по себе способом входа не является: она подписывает запросы, которые ей присылает другая программа, а ни одно приложение Vela их пока не присылает.

Как указать кошельку ваши сервисы

В каждом приложении в разделе Настройки → Дополнительно → Сервисные эндпоинты (на десктопе — Настройки → Сервисные эндпоинты) есть четыре поля: индекс данных сетей, индекс passkey, Vela Relay и курсы валют. Пока вы не измените поле, в нём указано значение Vela по умолчанию; кнопка Сбросить к стандартным возвращает все четыре. Для релея, индекса и данных сетей кошелёк вызывает /api/health и показывает значок — зелёный только тогда, когда эндпоинт называет правильный сервис и сообщает status: "ok". Введённое значение сохраняется в любом случае, так что дождитесь зелёного значка.

Сервисservice в /api/health
Релейvela-relay
Индекс публичных ключейwebauthn-p256-publickey-registry
Данные сетейethereum-data
Курсы валютпо имени не проверяется — должен возвращать список курсов относительно USD

Все четыре приложения учитывают все четыре поля, и изменённый эндпоинт начинает действовать со следующего вызова, а не со следующего запуска: каждый путь — создание кошелька, вход, поиск имени для адреса — читает эндпоинт в тот самый момент, когда им пользуется. В iOS индекс passkey можно поменять ещё и на экране входа, если индекс по умолчанию недоступен.

(До сентября 2026 года из этого было четыре исключения; худшим из них была страница в iOS, которая показывала значения-заглушки и ничего не сохраняла. Всё это исправлено.)

Свой релей

Релей — это vela-relay (Rust, MIT). Одно развёртывание обслуживает все сети: кошелёк обращается к https://your-relay/<chainId>. Это должен быть именно vela-relay: кошелёк запрашивает расчёт комиссии специфичным для Vela методом, который обычные бандлеры ERC-4337 не реализуют.

Что понадобится

  • Либо Docker плюс уже работающие у вас Redis и сервер Iggy, либо аккаунт Cloudflare на тарифе Workers Paid и Node.js с тулчейном Rust (с целью wasm32-unknown-unknown) на вашей машине.
  • OPERATOR_SECRET (hex, не меньше 32 байт). Из него выводятся один адрес казны и пул адресов-отправителей (relayer), одинаковые во всех сетях. Храните его в секрете: он управляет средствами релея.
  • Газ во всех сетях, которые вы хотите обслуживать: отправьте на адрес казны монету сети (pathUSD в Tempo). Казна пополняет адреса-отправители.

Docker

git clone https://github.com/mondaylabsltd/vela-relay
cd vela-relay
cp .env.example .env
# в .env: VELA_RELAY_IGGY_URL, VELA_RELAY_REDIS_URL, OPERATOR_SECRET,
# VELA_RELAY_CHAIN_DIRECTORY_URL, если у вас свои данные сетей,
# и VELA_RELAY_IMAGE — релизный образ, которому вы доверяете (см. docs/docker.md)
docker compose pull relay
docker compose up -d --no-build
curl --fail http://127.0.0.1:4567/readyz

Годится и то и другое: опубликованный образ быстрее всего, а docker compose up --build собирает то же самое из исходников, которые можно прочитать. Без Docker релей можно запустить напрямую: cargo run --release --bin vela-relay.

Cloudflare Workers

cd vela-relay/vela-relay-cf
npx wrangler queues create vela-relay-ops
npx wrangler queues create vela-relay-dlq
npx wrangler secret put OPERATOR_SECRET
# свои данные сетей: добавьте "VELA_RELAY_CHAIN_DIRECTORY_URL" в "vars" в wrangler.jsonc
npx wrangler deploy

Проверка

curl https://your-relay/api/health        # {"service":"vela-relay","status":"ok",…}
curl https://your-relay/v1/treasury/100   # адрес вашей казны в Gnosis и нужен ли ей газ

Затем впишите https://your-relay в поле Vela Relay.

Что нужно знать

  • Комиссия, которую платит кошелёк, поступает в вашу казну. Кошелёк рассчитывает её одинаково, какой бы релей вы ни использовали (см. сети и комиссии).
  • Пользовательская сеть, которую вы добавили до смены релея, сохраняет адрес релея, с которым её добавили.
  • Релей берёт сведения о каждой сети и о стейблкоинах, которые он принимает, из справочника сетей: это ethereum-data.getvela.app, если не указать свой в VELA_RELAY_CHAIN_DIRECTORY_URL. Эта настройка есть начиная с vela-relay v0.9.6; более старые сборки всегда читают копию Vela.

Свой индекс публичных ключей

Индекс — это p256-index (Rust, MIT). Когда создаётся кошелёк, индекс проверяет доказательство для каждого ключа, затем записывает группу в контракт-реестр в Gnosis и оплачивает газ. Продолжайте пользоваться существующим реестром по адресу 0x94fD1A891EB6c5F340622Baf2F3A0cb70A941EA9: у него нет владельца, писать в него может любой адрес с балансом, и все приложения Vela читают его напрямую. Собственный реестр был бы для них невидим.

Что понадобится

  • Docker с Redis и Iggy (серверная версия) или аккаунт Cloudflare (версия для Worker; в её README сказано, что запись в блокчейн пока не протестирована целиком).
  • Закрытый ключ в Gnosis с xDAI. Регистрация кошелька с одним ключом стоит около 1,1 млн газа, с семью — около 3,6 млн.
  • Вот эти настройки:
P256_INDEX_IGGY_URL=iggy+tcp://user:password@iggy.example:5100
P256_INDEX_REDIS_URL=redis://redis.example:6379/0
P256_INDEX_CONTRACT_ADDRESS=0x94fD1A891EB6c5F340622Baf2F3A0cb70A941EA9
P256_INDEX_DOMAIN_REGISTRY=0x5266DfF591B9F9EecfEdb8E7EfEf6c687854edaf
PRIVATE_KEY=0x…

P256_INDEX_DOMAIN_REGISTRY — то, что чаще всего пропускают: без него сервер выдаёт челленджи, которые контракт отклоняет, и ни одна регистрация не проходит. Он есть в .env.example, и он должен совпадать с собственным DOMAIN_REGISTRY развёрнутого контракта: начиная с VERSION 12 реестра домен челленджа фиксируется при развёртывании, поэтому он не меняется, когда контракт разворачивают заново.

Запуск и проверка

git clone https://github.com/mondaylabsltd/p256-index
cd p256-index
cargo run --release -p p256-index-server
curl https://your-index/api/health   # "service":"webauthn-p256-publickey-registry","status":"ok"

Сервер слушает обычный HTTP (по умолчанию порт 11256); поставьте перед ним TLS-прокси, потому что кошелёк принимает только эндпоинты https://. docker build -f p256-index-server/Dockerfile . тоже собирается из чистого клона; если пользуетесь Compose, сначала скопируйте .env.example в p256-index-server/.env.

Если не отвечает ни один индекс, существующие кошельки всё равно работают: при входе приложение читает контракт-реестр в Gnosis (затем в Ethereum) через ваши RPC-узлы. Кошелёк с единственным ключом можно даже восстановить по двум подписям, вообще без реестра. А вот для создания нового кошелька индекс нужен: кто-то должен заплатить за регистрацию.

Свои данные сетей

Данные сетей — это ethereum-data (MIT): статические JSON-файлы и изображения примерно для 2600 сетей и их токенов, плюс дескрипторы ERC-7730, с помощью которых Vela объясняет транзакции.

docker run -d --name ethereum-data -p 3000:3000 --restart unless-stopped 
  ghcr.io/atshelchin/ethereum-data:latest
curl http://localhost:3000/api/health   # "service":"ethereum-data","status":"ok"

В README также описаны сборка из исходников и развёртывание на Cloudflare. Раздавайте данные по HTTPS и впишите адрес в поле Индекс данных сетей.

Релей тоже читает эти файлы, включая одно специфичное для Vela поле (список stables определяет, какими стейблкоинами можно платить комиссию). Направьте его на вашу копию через VELA_RELAY_CHAIN_DIRECTORY_URL=https://your-chain-data; запись каждой сети он кеширует на час.

Свои курсы валют

vela-currency (MIT) переопубликует ежедневные курсы Европейского центрального банка. Ключи API ему не нужны.

docker run -d -p 8080:8080 -v rates-data:/data ghcr.io/mondaylabsltd/vela-currency:latest
curl "http://localhost:8080/v2/rates?base=USD"

Впишите https://your-host/v2/rates?base=USD в поле Курсы валют. Подойдёт и любой сервис, совместимый с Frankfurter. Оставьте ?base=USD: на этом основаны все пересчёты.

Как собрать приложения самому

Все приложения лежат в одном репозитории (MIT). В README описаны шаги сборки каждого приложения; коротко:

ПриложениеСборкаПодписывает за ваш существующий кошелёк getvela.app?
Расширение для браузераcd app-web/vela-wallet && pnpm install && pnpm build:extension, затем загрузите extension/dist как распакованное расширение на chrome://extensionsДа, любым ключом
Веб-кошелёкcd app-web/vela-wallet && pnpm install && pnpm build; разворачивается как Cloudflare WorkerНет — на вашем домене это другой кошелёк (см. выше)
Десктопcd app-desktop/vela-wallet && cargo run (скрипты упаковки — в его README)Да, с телефоном по QR-коду или USB-ключом безопасности
AndroidСгенерируйте привязки ядра, затем ./gradlew :app:installDebugДа, с телефоном по QR-коду или USB-ключом безопасности
iOS./rust/scripts/build-ios-xcframework.sh, затем соберите в Xcode со своей командой разработчикаДа, с телефоном по QR-коду или YubiKey с USB-C / Lightning (прошивка 5.8 или новее)

Passkey варианта «Это устройство» в приложении, собранном самостоятельно, для кошельков getvela.app работать не будет: Apple и Google разрешают использовать passkey getvela.app только приложениям, подписанным Vela.

Как добавить сеть, которой нет в Vela

Vela работает в любой EVM-сети, где есть прекомпайл P-256 и стандартные контракты, которые она проверяет. Страница настройки сети покажет, чего сети не хватает, и развернёт то, что может развернуть кто угодно; требования описаны на странице Сети и комиссии. Проверка включает и те два контракта, которые нужны кошельку с несколькими ключами, и помечает их именно так: сеть без них всё равно работает с кошельком на один ключ.

Что всё равно указывает на Vela

Даже если заменить всё перечисленное, останется вот что:

  • Справочник аутентификаторов, по которому определяются модели ключей безопасности, — чисто косметический: без него приложения показывают общее название.
  • Файлы ассоциации getvela.app, которые нужны приложениям из магазинов для passkey варианта «Это устройство». Телефону или ключу безопасности они не нужны.

А это уже не сервисы Vela: публичные базы селекторов, туннели Apple и Google для входа с телефона и те RPC-провайдеры, которые вы выберете.

Дальше: страница подписи, которую можно запустить у себя.