Whitepaper
Кратко
Vela — некастодиальный кошелёк на смарт-контракте для Ethereum и других EVM-сетей. Каждый кошелёк — немодифицированный аккаунт Safe v1.4.1, который работает через ERC-4337 и управляется ключами passkey (до семи) — ключами WebAuthn P-256, которые хранятся на ваших устройствах, в вашем менеджере паролей или на аппаратных ключах безопасности. Сид-фразы нет.
Vela как компания никогда не хранит ваши ключи и не имеет роли в вашем Safe, поэтому сама она не может перевести, заморозить или изъять ваши средства. Но программу, которая просит ваши ключи подписать, пишет и распространяет именно Vela, — поэтому важна модель угроз ниже. Приложения, релей, который отправляет транзакции, и вспомогательные сервисы открыты, и каждый из них можно запустить у себя. Коротко, вы доверяете: контрактам, аутентификаторам, которые хранят ваши ключи, коду приложения, через которое вы подписываете, домену, к которому привязаны ваши passkey, и сервисам, которые вы указали приложению.
Зачем нужна Vela
- Кошельки с сид-фразой ставят перед каждым пользователем секрет из 12–24 слов: единую точку отказа и постоянную цель для фишинга.
- Кастодиальные кошельки избавляют от сид-фразы, забирая средства на хранение.
- Кошельки на passkey, зависящие от серверов и закрытого кода одной компании, избавляют от сид-фразы, но оставляют вас ни с чем, если компания исчезнет.
- Слепая подпись — одобрение непрозрачных данных, которые вы не можете прочитать, — по-прежнему распространена и остаётся одним из способов опустошить кошелёк.
Vela стремится дать удобство passkey без всех этих зависимостей: стандартный аккаунт, открытый код, заменяемые сервисы и транзакции, которые можно прочитать до подписи.
Принципы
- Самостоятельное хранение без исключений. Ключи создают и хранят ваши аутентификаторы. Сервисы Vela их никогда не видят; что они видят, перечислено в разделе «Приватность».
- Стандартные контракты без изменений. Ни один контракт на пути к вашим средствам не написан Vela.
- Проверяйте, а не доверяйте. Код приложений и сервисов открыт; сервисы можно развернуть у себя.
- Расшифровка до подписи. То, что расшифровать не удалось, сопровождается явным предупреждением о слепой подписи.
- Делать меньше. Кошелёк отправляет, получает и подписывает для dApp, которые выбрали вы.
Архитектура
Приложения Vela — веб, расширение для браузера, десктоп (macOS/Windows/Linux), iOS, Android
одно общее ядро на Rust (правила, криптография, ABI, понятная подпись) + нативная оболочка у каждого
• собирает UserOperation и показывает, что она делает
• запрашивает у вашего ключа утверждение WebAuthn
│ подписанная UserOperation (комиссия внутри)
▼
Релей (vela-relay, можно развернуть у себя)
• рассчитывает комиссию, заранее платит за газ, отправляет handleOps
• не может изменить операцию
▼
EVM-сеть
EntryPoint v0.7 → ваш Safe v1.4.1 → модуль Safe 4337
модуль passkey от Safe проверяет P-256 через прекомпайл EIP-7951 / RIP-7212 Вспомогательные сервисы, все с открытым кодом: индекс публичных ключей, который регистрирует новые кошельки в реестре в блокчейне и отвечает на запросы поиска, справочник данных сетей и источник курсов валют. См. руководство по самостоятельному развёртыванию.
Аккаунт
Ваш кошелёк — прокси Safe v1.4.1 (синглтон SafeL2), в котором модуль 4337 v0.3.0 от Safe включён как модуль и как fallback handler; работает он через EntryPoint v0.7. Его владельцы — подписанты из модуля passkey v0.2.1 от Safe: первый ключ проверяет общий подписант, а каждый дополнительный — собственный контракт-подписант, созданный фабрикой Safe. Порог — 1.
Адрес детерминированный и контрфактический: он вычисляется через CREATE2 из
данных инициализации Safe, в которые входит каждый исходный ключ, ещё до того, как
что-либо развёрнуто. Он одинаков во всех сетях. Получать на него можно сразу; первая
транзакция в каждой сети разворачивает кошелёк, и стоимость развёртывания входит в
комиссию этой транзакции.
Ключи
У кошелька от одного до семи ключей, и они фиксируются при создании. Любой из них может подписывать в одиночку (1-of-n). Ключом может быть:
- passkey на устройстве, которым вы пользуетесь, — если вы разрешите, его синхронизирует Связка ключей iCloud, Менеджер паролей Google или другой менеджер паролей;
- другой телефон, подключённый по QR-коду (гибридный транспорт WebAuthn);
- аппаратный ключ безопасности с USB или NFC, который нигде не синхронизируется.
Каждая подпись требует собственной проверки пользователя аутентификатором — биометрии или PIN-кода устройства либо PIN-кода и касания ключа безопасности. Сессионного ключа нет. Добавлять, удалять или заменять ключи позже нельзя: во всех сетях, где кошелёк ещё не развёрнут, адрес по-прежнему соответствует исходному набору, поэтому смена владельцев в одной сети сделала бы аккаунт разным в разных сетях.
Passkey принадлежат relying party (проверяющей стороне) — ключи Vela создаются для getvela.app. Браузеры предлагают их только страницам на getvela.app и его
поддоменах; именно это делает их устойчивыми к фишингу — и это же зависимость, к
которой документ ещё вернётся ниже.
Как проходит подпись
- Сборка UserOperation для вашего Safe — включая перевод, которым оплачивается релей, — и её симуляция.
- Расшифровка в читаемое намерение и показ его вам.
- Подпись: проверив вас, аутентификатор создаёт утверждение WebAuthn над хешем операции.
- Кодирование утверждения в подпись Safe в том формате, который ожидает модуль passkey.
- Отправка подписанной операции релею, который вызывает EntryPoint.
- Проверка в блокчейне: модуль passkey проверяет подпись P-256 прекомпайлом EIP-7951 / RIP-7212, прежде чем Safe что-либо выполнит. Запасного верификатора нет; сеть без прекомпайла добавить нельзя.
Комиссии
- Релей получает оплату внутри операции: операция объявляет нулевые комиссии EntryPoint и содержит перевод с вашего Safe на адрес релея. Сумма и получатель входят в то, что вы подписываете, поэтому вы платите ровно то, что показал экран подтверждения.
- Комиссия — это стоимость трёхкратного объёма газа, который кошелёк резервирует для операции (симулированные оценки, увеличенные в полтора раза, с минимумами), по более высокой из двух цен: цены газа по данным самого кошелька и цены релея для выбранной скорости, с минимумом около $0,01. В Tempo множитель — два. Из-за запаса в резерве и в цене комиссия выше реальной стоимости операции в сети, а для первой транзакции в сети — тем более; разницу оставляет себе релей. Точная сумма видна на экране подтверждения до подписи.
- Комиссия идёт тому релею, который указан в кошельке: по умолчанию это релей Vela, но подойдёт любое развёртывание vela-relay, в том числе ваше собственное.
- Комиссия платится монетой сети или долларовым стейблкоином, который принимает релей (pathUSD в Tempo, где нет нативной монеты). Paymaster нет: никто не оплачивает газ за вас, и никто не может фильтровать транзакции правилами спонсирования.
- Если у релея опустела казна для газа в какой-то сети, кошелёк скажет об этом до подписи. Депозитов с пользователей нет.
Подробности: сети и комиссии.
Понятная подпись
Вызовы и сообщения EIP-712 расшифровываются с помощью дескрипторов ERC-7730 — встроенных в приложение для распространённых контрактов, загруженных с сервиса данных сетей или подобранных по стандартным формам токенов, — а в крайнем случае по публичной базе селекторов с пометкой «по мере возможности». Всё, что осталось, получает явное предупреждение о слепой подписи. Загруженный дескриптор никогда не помечается как проверенный: этого слова заслуживает только встроенный в приложение или загруженный, но в точности с ним совпадающий. Разрешение в блокчейне на «неограниченную» сумму (2^200 и больше) показывается красным, с предложением лимита; если вы его не ограничите, оно будет отправлено ровно в том виде, в каком его составило dApp. Большое конечное разрешение показывается с предупреждением; подписанные permit ограничить нельзя, поэтому их подписывают в запрошенном виде или отклоняют. Подробности: понятная подпись.
Сети
В Vela 24 встроенные сети — Ethereum, BNB Chain, Polygon, Arbitrum, Optimism, Base, Avalanche, Gnosis, Unichain, Tempo, Monad, World Chain, Arc, X Layer, Stable, Soneium, MegaETH, Robinhood Chain, Mantle, Kaia, Celo, Ink, Plume и XRPL EVM, — и она принимает любую EVM-сеть, в которой есть двенадцать проверяемых контрактов и прекомпайл EIP-7951 / RIP-7212. Два из двенадцати — фабрика подписантов passkey от Safe и код подписанта, который она разворачивает; они нужны только кошельку, у которого больше одного ключа, и проверка сообщает о них отдельно.
Модель безопасности
Чего Vela сделать не может
- Сама перевести, потратить или заморозить ваши средства — авторизовать ваш Safe могут только ваши ключи, а у Vela в нём нет роли. (Что Vela может — так это выпускать программы, которые просят вас подписать; см. угрозы ниже.)
- Изменить транзакцию после того, как вы её подписали, — любое изменение делает подпись недействительной.
- Прочитать ваши закрытые ключи — они остаются в ваших аутентификаторах.
- Добавить ключ в ваш кошелёк или удалить его.
Чего не покрывает «не может заморозить»: сам токен. USDC, USDT и большинство токенов, обеспеченных фиатом, позволяют эмитенту занести в чёрный список любой адрес, включая ваш. Это право эмитента, и оно существует, каким бы кошельком вы ни пользовались. Самостоятельное хранение даёт вам то, что Vela не становится второй стороной с таким правом.
Чему вы доверяете
- Контрактам: Safe, его модулям 4337 и passkey, EntryPoint v0.7 и прекомпайлу EIP-7951 / RIP-7212 в сети.
- Домену: любая страница с getvela.app или одного из его поддоменов может запросить у ваших ключей подпись.
- Аутентификаторам, которые хранят ваши ключи, а для синхронизируемых passkey — стоящему за ними аккаунту Apple, Google или менеджера паролей.
- Коду приложения, через которое вы подписываете. Оно собирает транзакцию и показывает, что она делает. Скомпрометированное приложение может показать одно, а попросить подписать другое; запрос аутентификатора разницы не покажет.
- RPC-эндпоинтам, с которых вы читаете данные: лживый узел может показать неверные балансы или неверный результат симуляции. Можно указать свои.
- Сервисам данных сетей и курсов валют: они поставляют списки токенов, дескрипторы, список токенов для оплаты комиссии и курсы, по которым сумма в фиате пересчитывается в сумму в токенах.
- Релею: он не может изменить то, что вы подписали, но может задержать операцию или отказаться её отправлять, выбрать момент, когда она попадёт в блокчейн (а значит, опередить ваш обмен в пределах проскальзывания), и задать цену газа, от которой считается ваша комиссия, — не выше трёхкратных собственных данных кошелька.
Рассмотренные угрозы
- Потеря или кража устройства — вору всё равно нужно пройти проверку аутентификатора; другой ключ возвращает доступ. Но удалить ключ нельзя: если один из них мог оказаться в чужих руках, переведите средства в новый кошелёк, потому что со старого адреса этим ключом можно тратить в любой сети.
- Фишинг — passkey нельзя ввести на поддельном сайте, а браузеры предлагают его только страницам на getvela.app и его поддоменах.
- Вредоносный dApp — от него защищают понятная подпись, защита разрешений и прямой
отказ: запрос на вызов из вашего Safe к нему самому —
enableModule,addOwnerWithThreshold,swapOwner,setFallbackHandler,setGuardи остальные из этого семейства — блокируется, в том числе внутри пакета илиMultiSend, как и любое звено сdelegatecallи подпись типизированных данныхSafeTx. Любой из них, подписанный один раз, передал бы аккаунт так же полностью, как нагрузка Bybit, поэтому кошелёк вообще не предлагает их подписать. - Скомпрометированный бэкенд-сервис (релей, индекс, данные сетей, курсы валют) — права подписи нет, но реальное влияние есть: отказ в обслуживании, вводящие в заблуждение дескрипторы или списки токенов, неверные курсы, от которых зависит, сколько на самом деле уйдёт при сумме в фиате, и (для релея) момент отправки и цена газа, о которых сказано выше. Описание, загруженное из сервиса данных сетей, никогда не называется проверенным: этого слова заслуживает только описание, встроенное в приложение, или загруженное, но в точности с ним совпадающее, — а остальные показываются со строкой о том, что их ничто не заверило. Каждый сервис можно заменить.
- Скомпрометированная доставка приложения — подменённое веб-развёртывание, обновление расширения или сборка приложения могут подсунуть вам на подпись вредоносную транзакцию. Это класс атак Bybit. Сегодня защита ограничена: расшифровка и защита разрешений в самом приложении, нотаризованные сборки для macOS и самостоятельная сборка расширения или приложений из исходников (к пакетам релизов прилагаются контрольные суммы SHA-256 и аттестации сборки GitHub, называющие коммит и запуск рабочего процесса; установщик для Windows по-прежнему не подписан). Trusted Signer, независимую страницу подписи, не разделяющую код с приложением, можно выбрать как способ подписи в настольном приложении и приложениях для iPhone и Android; проверка целостности в настольном приложении несовпадающую страницу только записывает в журнал, а мобильные приложения пока ничего не проверяют.
- Всё, что раздаётся с домена, — любая страница на getvela.app или его поддоменах, включая загружаемый ею скрипт, может запросить подпись у passkey Vela, а запрос покажет только «getvela.app». Поэтому сайт запрещает своим страницам использовать passkey и не загружает скрипт аналитики на странице, которая работает с ключом. Если домен сменит владельца, новый владелец также будет решать, каким приложениям можно использовать эти passkey. Расширение и приложения, собранные самостоятельно, несут собственный код, хотя по умолчанию всё равно загружают дескрипторы и пользуются сервисами на getvela.app.
Восстановление
При создании кошелька его публичные ключи и адрес публикуются в публичном контракте-реестре в Gnosis (запись можно скопировать в Ethereum). На новом устройстве вы входите с помощью любого ключа; приложение находит кошелёк через индекс или, если это не удалось, прямо в реестре и проверяет, что ключи дают записанный адрес. Кошелёк с единственным ключом можно восстановить и по двум подписям, вообще без реестра.
Подробности: восстановление и вход.
Если Vela исчезнет
Ваши средства остаются в вашем Safe в блокчейне. Контракты от Vela не зависят, а
каждый сервис Vela открыт, и его может запустить кто-то другой. Единственное, что
нельзя перенести, — relying party ключей passkey, getvela.app:
копия веб-кошелька на другом домене создаёт другой кошелёк. Для существующих
кошельков без getvela.app продолжают работать браузерное расширение Vela (оно может
использовать passkey getvela.app с разрешения браузера) и приложения, собранные
самостоятельно (с телефоном или ключом безопасности). В руководстве по самостоятельному развёртыванию подробно описан каждый путь и его ограничения. Для независимого доступа к кошельку в
конкретной сети нужно ещё, чтобы эта сеть поддерживала EIP-7951 / RIP-7212.
Приватность
Ни аккаунта, ни почты, ни KYC. Публичным становится то, что записывается в реестр при создании кошелька: публичный ключ и идентификатор учётных данных каждого ключа, модель аутентификатора, название кошелька и названия ключей, адрес и подписанные регистрационные данные. Индекс Vela видит эту запись до того, как отправит её, а также адреса, для которых вы ищете имена; релей Vela видит ваш адрес, операции, которые вы отправляете, и RPC-эндпоинт, который использует ваше приложение (включая ключ API в его URL, если он там есть), и хранит операции ограниченное время для повторных попыток и диагностики. Каждый сервис видит ваш IP-адрес. Сайт использует аналитику без cookie. Полный и официальный список — в политике конфиденциальности.
Открытый код
Всё распространяется по лицензии MIT: кошелёк (все приложения и ядро), релей, индекс публичных ключей, сервис курсов валют и справочник данных сетей. Код: github.com/mondaylabsltd.
Токена нет
У Vela нет токена и нет планов его выпускать. Покупать, фармить или спекулировать нечем. Комиссии платятся монетой каждой сети или стейблкоином.
Статус аудита и ограничения
Контракты Safe, его модули 4337 и passkey и EntryPoint v0.7 прошли независимый аудит и широко используются. Собственный код Vela — приложения, бэкенд-сервисы и контракт-реестр — независимого стороннего аудита не проходил, и он не запланирован; профессиональный аудит — это цель на то время, когда у проекта появятся средства, а не обязательство с датой. До тех пор проверка неформальная: код открыт, его читают знающие люди из сообщества, и он проверяется с помощью ИИ-инструментов. Это помогает, но не заменяет профессионального аудита. Относитесь к Vela как к программе в стадии альфы. Подробности: аудиты и известные проблемы.
Ссылки
- ERC-4337 — абстракция аккаунта через EntryPoint
- EIP-1271 — проверка подписей контрактами
- ERC-7730 — дескрипторы понятной подписи
- EIP-5792 — пакетные вызовы в кошельке (
wallet_sendCalls) - EIP-7951 / RIP-7212 — прекомпайл для проверки подписей P-256
- WebAuthn / FIDO2 — passkey
- Смарт-аккаунт Safe v1.4.1