Guide d’auto-hébergement

Votre argent se trouve dans un contrat Safe on-chain, contrôlé par vos clés. Rien de ce que Vela fait tourner ne peut le déplacer. Ce que Vela fait tourner, c’est la machinerie qui rend le portefeuille pratique : un relais qui soumet vos transactions, un index qui aide un nouvel appareil à retrouver votre portefeuille, un annuaire de données de chaîne, un flux de taux de change, et les apps elles-mêmes.

Cette page liste chacun de ces éléments, ce qui ne fonctionne plus sans lui, et comment faire tourner le vôtre. Elle traite aussi du seul élément que vous ne pouvez pas remplacer — le domaine auquel appartiennent vos passkeys — et de ce qu’il faut faire si getvela.app disparaît.

Vue d’ensemble

ÉlémentCe qu’il faitPar défaut chez VelaRemplaçable ?Sans lui
RelaisReçoit votre opération signée, avance le gas, la soumet, encaisse les frais que vous avez signésvela-relay-cf.getvela.appOui — faites tourner vela-relay et faites pointer le portefeuille vers luiVous ne pouvez pas envoyer
Index des clés publiquesEnregistre on-chain les clés d’un nouveau portefeuille ; répond à « de quel portefeuille cette clé fait-elle partie ? »p256-index-v2.getvela.appOui — faites tourner p256-indexImpossible de créer de nouveaux portefeuilles ; la connexion se rabat sur la lecture de la chaîne
Contrat de registreL’enregistrement public et permanent des clés de chaque portefeuille0x94fD…1EA9 sur GnosisInutile — il n’appartient à personne ; le portefeuille le lit directement
Données de chaîneInformations sur les réseaux, listes de jetons, logos, descripteurs de signature lisibleethereum-data.getvela.appOui — faites tourner ethereum-dataPas de listes de jetons ni de logos ; moins de transactions décodées ; l’ajout de réseaux échoue
Taux de changeValeurs en monnaie fiduciaire dans votre devise d’affichagevela-currency.getvela.appOui — faites tourner vela-currency ou toute source compatible FrankfurterLes apps se rabattent sur les taux Chainlink on-chain quand elles le peuvent (l’app de bureau affiche des USD)
Nœuds RPCLecture des soldes, simulation des transactionsPoints d’accès publics par réseauOui — réseau par réseau, dans Réglages → RéseauxVela bascule d’un point d’accès à l’autre
Les appsLe portefeuille lui-mêmewallet.getvela.app, versions publiéesOui — compilez-les
getvela.appLe domaine auquel appartiennent vos passkeysNon — voir plus bas

Quelques services tiers, qui n’appartiennent pas à Vela, sont également sollicités : les bases publiques de sélecteurs de fonctions (sourcify, openchain, 4byte), utilisées en dernier recours pour décoder une transaction, l’annuaire d’authentificateurs qui donne le nom du modèle de votre clé de sécurité, et les serveurs de tunnel d’Apple et de Google quand vous signez avec un téléphone en scannant un QR code.

Le seul élément irremplaçable : le domaine des passkeys

Une passkey appartient au site web pour lequel elle a été créée. Les clés de Vela sont créées pour getvela.app. Les navigateurs ne les proposent qu’aux pages de getvela.app ou de ses sous-domaines (ou aux origines que getvela.app déclare comme associées), et les passkeys intégrées d’un téléphone ne fonctionnent que dans les apps dont getvela.app se porte garant. Hors du navigateur, la règle est plus souple : Chrome permet à une extension autorisée pour getvela.app de les utiliser, et un programme sur votre ordinateur peut demander directement une signature getvela.app à une clé de sécurité ou à un téléphone — c’est ainsi que fonctionnent les apps que vous compilez vous-même, et c’est pourquoi le logiciel que vous faites tourner compte. Deux conséquences.

Une copie du portefeuille web sur votre propre domaine est un autre portefeuille. Servi depuis wallet.example.com, le même code crée des passkeys pour wallet.example.com — de nouvelles clés, donc une nouvelle adresse. Il ne peut pas signer pour un portefeuille créé sur wallet.getvela.app. Cette copie reste utile : pour un portefeuille que vous y créez, ou pour faire tourner toute la pile vous-même, à partir de zéro.

Pour un portefeuille existant, ces moyens fonctionnent encore si getvela.app est hors ligne ou a disparu :

Moyen d’accèsClés utilisablesOù l’obtenir
L’extension Vela pour navigateur (navigateurs Chromium : Chrome, Edge, Brave)Toute clé que le navigateur peut atteindre : la passkey de cet appareil, une clé de sécurité USB (NFC quand l’ordinateur le permet), un téléphone via QR codeUne archive zip publiée sur GitHub, ou compilez-la
Une app de bureau ou mobile que vous compilez vous-mêmeUn téléphone via QR code, et les clés de sécurité USBCompilez-la
Les apps des stores et les apps de bureau notariéesUn téléphone via QR code et les clés de sécurité, toujours ; les passkeys « cet appareil », seulement tant que le système d’exploitation peut encore vérifier l’app auprès de getvela.appVersions GitHub (stores plus tard)

L’extension peut utiliser les clés getvela.app parce que Chrome permet à une extension autorisée pour un site d’utiliser les passkeys de ce site. Le navigateur vérifie cette autorisation localement ; nous avons constaté que cela fonctionne, mais pas encore avec le domaine réellement hors ligne. Une app que vous compilez vous-même peut utiliser un téléphone ou une clé de sécurité parce que Vela communique directement avec eux ; la passkey propre au téléphone (« cet appareil ») exige que l’app soit signée par Vela, ce qui n’est pas le cas de la vôtre.

La page de signature n’est pas, à elle seule, un moyen d’accès : elle signe les demandes qu’un autre programme lui envoie, et aucune app Vela ne lui en envoie encore.

Faire pointer le portefeuille vers vos services

Chaque app propose quatre champs dans Réglages → Avancé → Points d’accès des services (dans l’app de bureau, Réglages → Points d’accès des services) : données de chaîne, index des passkeys, relais Vela et taux fiat — affichés dans l’app sous les noms Index des données de chaîne, Index des clés d’accès, Vela Relay et Taux fiat. Chaque champ affiche la valeur par défaut de Vela tant que vous ne la changez pas ; Réinitialiser par défaut rétablit les quatre. Pour le relais, l’index et les données de chaîne, le portefeuille appelle /api/health et affiche un badge, vert seulement si le point d’accès annonce le bon service et renvoie status: "ok". Ce que vous saisissez est enregistré dans tous les cas — attendez le vert.

Serviceservice dans /api/health
Relaisvela-relay
Index des clés publiqueswebauthn-p256-publickey-registry
Données de chaîneethereum-data
Taux de changepas vérifié par son nom — doit renvoyer une liste de taux en base USD

Les quatre apps respectent les quatre champs, et un point d’accès modifié prend effet dès l’appel suivant, et non au prochain lancement : chaque chemin — créer un portefeuille, se connecter, chercher le nom d’une adresse — lit le point d’accès au moment où il s’en sert. Sur iOS, l’index des passkeys peut aussi être modifié sur l’écran de connexion quand celui par défaut est injoignable.

(Jusqu’en septembre 2026, il y avait quatre exceptions à cela, la pire étant une page iOS qui affichait des valeurs fictives et n’enregistrait rien. Elles sont corrigées.)

Faire tourner votre propre relais

Le relais est vela-relay (Rust, MIT). Un seul déploiement sert toutes les chaînes : le portefeuille appelle https://your-relay/<chainId>. Ce doit être vela-relay — le portefeuille demande un devis de frais avec une méthode propre à Vela que les bundlers ERC-4337 génériques n’implémentent pas.

Ce qu’il vous faut

  • Soit Docker, plus un serveur Redis et un serveur Iggy que vous faites déjà tourner, soit un compte Cloudflare avec l’offre Workers Paid, ainsi que Node.js et une chaîne d’outils Rust (avec la cible wasm32-unknown-unknown) sur votre machine.
  • Un OPERATOR_SECRET (hexadécimal, 32 octets au moins). Il dérive une adresse de trésorerie et un ensemble d’adresses de relayeurs, identiques sur toutes les chaînes. Gardez-le secret : il contrôle les fonds du relais.
  • Du gas sur chaque chaîne que vous voulez servir : envoyez la monnaie de la chaîne (du pathUSD sur Tempo) à votre adresse de trésorerie. La trésorerie réapprovisionne les relayeurs.

Docker

git clone https://github.com/mondaylabsltd/vela-relay
cd vela-relay
cp .env.example .env
# dans .env : VELA_RELAY_IGGY_URL, VELA_RELAY_REDIS_URL, OPERATOR_SECRET,
# VELA_RELAY_CHAIN_DIRECTORY_URL si vous faites tourner vos propres données de chaîne,
# et VELA_RELAY_IMAGE pointant vers une image publiée de confiance (voir docs/docker.md)
docker compose pull relay
docker compose up -d --no-build
curl --fail http://127.0.0.1:4567/readyz

Les deux marchent : l’image publiée est la voie la plus rapide, et docker compose up --build compile la même chose à partir des sources que vous pouvez lire. Sans Docker, cargo run --release --bin vela-relay le lance directement.

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
# vos propres données de chaîne : ajoutez "VELA_RELAY_CHAIN_DIRECTORY_URL" sous "vars" dans wrangler.jsonc
npx wrangler deploy

Vérifier

curl https://your-relay/api/health        # {"service":"vela-relay","status":"ok",…}
curl https://your-relay/v1/treasury/100   # votre adresse de trésorerie sur Gnosis, et si elle a besoin de gas

Saisissez ensuite https://your-relay dans le champ Vela Relay.

À savoir

  • Les frais payés par le portefeuille vont à votre trésorerie. Le portefeuille les calcule de la même façon quel que soit le relais utilisé (voir réseaux et frais).
  • Un réseau personnalisé ajouté avant le changement de relais garde l’adresse de relais avec laquelle il a été ajouté.
  • Le relais lit les informations de chaque chaîne et les stablecoins qu’il accepte dans un annuaire de chaînes : ethereum-data.getvela.app, sauf si vous faites pointer VELA_RELAY_CHAIN_DIRECTORY_URL vers le vôtre. Cette variable existe à partir de vela-relay v0.9.6 ; les versions antérieures lisent toujours la copie de Vela.

Faire tourner votre propre index des clés publiques

L’index est p256-index (Rust, MIT). Quand un portefeuille est créé, il vérifie la preuve de chaque clé, puis inscrit le groupe dans le contrat de registre sur Gnosis et en paie le gas. Continuez d’utiliser le registre existant à 0x94fD1A891EB6c5F340622Baf2F3A0cb70A941EA9 : il n’a pas de propriétaire, n’importe quelle adresse approvisionnée peut y écrire, et toutes les apps Vela le lisent directement. Un registre à vous leur serait invisible.

Ce qu’il vous faut

  • Docker avec Redis et Iggy (la version serveur), ou un compte Cloudflare (la version Worker, dont le README précise que l’écriture on-chain n’a pas encore été testée de bout en bout).
  • Une clé privée Gnosis avec des xDAI. Enregistrer un portefeuille coûte environ 1,1 million de gas avec une clé, et environ 3,6 millions avec sept.
  • Ces réglages :
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 est celui que l’on oublie : sans lui, le serveur émet des défis que le contrat rejette, et tous les enregistrements échouent. Il figure dans .env.example, et il doit correspondre au DOMAIN_REGISTRY du contrat déployé — depuis la VERSION 12 du registre, le domaine des défis est fixé au déploiement, il ne bouge donc pas quand le contrat est redéployé.

Lancer et vérifier

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"

Le serveur écoute en HTTP simple (port 11256 par défaut) ; placez un proxy TLS devant lui, car le portefeuille n’accepte que des points d’accès https://. docker build -f p256-index-server/Dockerfile . fonctionne aussi depuis un clone tout neuf ; copiez d’abord .env.example vers p256-index-server/.env si vous passez par Compose.

Si aucun index ne répond, les portefeuilles existants fonctionnent toujours : à la connexion, l’app lit le contrat de registre sur Gnosis (puis sur Ethereum) via vos nœuds RPC. Un portefeuille à clé unique peut même être reconstruit à partir de deux signatures, sans aucun registre. Créer un nouveau portefeuille exige en revanche un index, car il faut bien que quelqu’un paie l’enregistrement.

Faire tourner vos propres données de chaîne

Les données de chaîne, c’est ethereum-data (MIT) : du JSON statique et des images pour environ 2 600 réseaux et leurs jetons, plus les descripteurs ERC-7730 que Vela utilise pour expliquer les transactions.

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"

Son README explique aussi comment compiler depuis les sources et déployer sur Cloudflare. Servez-le en HTTPS et saisissez l’adresse dans le champ Index des données de chaîne.

Le relais lit aussi ces fichiers, y compris un champ propre à Vela (la liste stables détermine quels stablecoins peuvent payer les frais). Faites-le pointer vers votre copie avec VELA_RELAY_CHAIN_DIRECTORY_URL=https://your-chain-data ; il met en cache l’entrée de chaque réseau pendant une heure.

Faire tourner vos propres taux de change

vela-currency (MIT) republie les taux quotidiens de la Banque centrale européenne. Il ne demande aucune clé.

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

Saisissez https://your-host/v2/rates?base=USD dans le champ Taux fiat. Tout service compatible Frankfurter fonctionne aussi. Gardez ?base=USD : toutes les conversions partent de cette base.

Compiler les apps vous-même

Toutes les apps sont dans un seul dépôt (MIT). Le README détaille les étapes de compilation de chaque app ; en résumé :

AppCompilationSigne pour votre portefeuille getvela.app existant ?
Extension de navigateurcd app-web/vela-wallet && pnpm install && pnpm build:extension, puis chargez extension/dist comme extension non empaquetée dans chrome://extensionsOui, avec n’importe quelle clé
Portefeuille webcd app-web/vela-wallet && pnpm install && pnpm build ; se déploie comme Cloudflare WorkerNon — sur votre domaine, c’est un autre portefeuille (voir plus haut)
Bureaucd app-desktop/vela-wallet && cargo run (scripts de packaging dans son README)Oui, avec un téléphone via QR code ou une clé de sécurité USB
AndroidGénérez les bindings du cœur, puis ./gradlew :app:installDebugOui, avec un téléphone via QR code ou une clé de sécurité USB
iOS./rust/scripts/build-ios-xcframework.sh, puis compilez dans Xcode avec votre propre équipeOui, avec un téléphone via QR code ou une YubiKey USB-C / Lightning (firmware 5.8 ou plus récent)

La passkey « cet appareil » d’une app compilée vous-même ne fonctionnera pas pour les portefeuilles getvela.app : Apple et Google ne laissent que les apps signées par Vela utiliser les passkeys getvela.app.

Ajouter un réseau que Vela n’intègre pas

Vela fonctionne sur toute chaîne EVM qui dispose du précompilé P-256 et des contrats standards qu’il vérifie. La page Configurer une chaîne vous dit ce qui manque à une chaîne et déploie ce que tout le monde peut déployer ; réseaux et frais explique les conditions requises. La vérification inclut les deux contrats dont un portefeuille à plusieurs clés a besoin, et les signale comme tels — une chaîne qui en est dépourvue fait quand même tourner un portefeuille à clé unique.

Ce qui pointe encore vers Vela après tout cela

Si vous remplacez tout ce qui précède, il reste :

  • L’annuaire d’authentificateurs qui donne le nom des modèles de clés de sécurité — purement cosmétique ; à défaut, les apps affichent un nom générique.
  • Les fichiers d’association de getvela.app, dont les apps des stores ont besoin pour les passkeys « cet appareil ». Un téléphone ou une clé de sécurité n’en a pas besoin.

Et ces éléments-là n’appartiennent pas à Vela : les bases publiques de sélecteurs, les serveurs de tunnel d’Apple et de Google pour la connexion par téléphone, et les fournisseurs RPC que vous choisissez.

Ensuite : la page de signature que vous pouvez faire tourner vous-même.