Самостоятельное развёртывание
Ваши деньги лежат в контракте 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-провайдеры, которые вы выберете.