Guida al self-hosting

I tuoi soldi sono in un contratto Safe on-chain, controllato dalle tue chiavi. Niente di ciò che Vela gestisce può spostarli. Quello che Vela gestisce è il meccanismo che rende comodo il wallet: un relay che invia le tue transazioni, un indice che aiuta un nuovo dispositivo a trovare il tuo wallet, un archivio di dati delle chain, un servizio di tassi di cambio e le app stesse.

Questa pagina elenca ognuna di queste parti, cosa smette di funzionare senza di essa e come gestirne una tua. Parla anche dell’unica parte che non puoi sostituire — il dominio a cui appartengono le tue passkey — e di cosa fare se getvela.app sparisce.

La mappa

ParteCosa faPredefinito di VelaPuoi sostituirla?Senza di essa
RelayRiceve la tua operazione firmata, paga il gas, la invia e incassa la commissione che hai firmatovela-relay-cf.getvela.appSì — gestisci vela-relay e indirizza lì il walletNon puoi inviare
Indice delle chiavi pubblicheRegistra on-chain le chiavi di un nuovo wallet; risponde a «di quale wallet fa parte questa chiave?»p256-index-v2.getvela.appSì — gestisci p256-indexNon si possono creare nuovi wallet; l’accesso ripiega sulla lettura della chain
Contratto di registroIl record pubblico e permanente delle chiavi di ogni wallet0x94fD…1EA9 su GnosisNon serve — nessuno ne è proprietario; il wallet lo legge direttamente
Dati delle chainDettagli delle reti, elenchi di token, loghi, descrittori per la firma leggibileethereum-data.getvela.appSì — gestisci ethereum-dataNiente elenchi di token né loghi; meno transazioni decodificate; l’aggiunta di reti non funziona
Tassi di cambioValori in valuta fiat nella tua valuta di visualizzazionevela-currency.getvela.appSì — gestisci vela-currency o qualsiasi fonte compatibile con FrankfurterLe app ripiegano, dove possono, sui tassi on-chain di Chainlink (il desktop mostra USD)
Nodi RPCLettura dei saldi, simulazione delle transazioniEndpoint pubblici per ogni reteSì — rete per rete, in Impostazioni → RetiVela passa da un endpoint all’altro
Le appIl wallet stessowallet.getvela.app, build di releaseSì — compilale
getvela.appIl dominio a cui appartengono le tue passkeyNo — vedi sotto

Vengono contattati anche alcuni servizi di terze parti che non sono di Vela: i database pubblici di selettori di funzione (sourcify, openchain, 4byte), usati come ultima risorsa per decodificare una transazione, l’elenco di autenticatori che dà il nome al modello della tua chiave di sicurezza, e i server tunnel di Apple e Google quando firmi con un telefono scansionando un codice QR.

L’unica cosa che non puoi sostituire: il dominio della passkey

Una passkey appartiene al sito web per cui è stata creata. Le chiavi di Vela sono create per getvela.app. I browser le offrono solo alle pagine di getvela.app o dei suoi sottodomini (o alle origini che getvela.app dichiara correlate), e le passkey integrate di un telefono funzionano solo nelle app garantite da getvela.app. Fuori dal browser la regola è meno rigida: Chrome permette di usarle a un’estensione che ha il permesso per getvela.app, e un programma sul tuo computer può chiedere una firma getvela.app direttamente a una chiave di sicurezza o a un telefono — ed è così che funzionano le app compilate da te, e il motivo per cui conta quale software usi. Ne seguono due cose.

Una copia del wallet web sul tuo dominio è un wallet diverso. Servito da wallet.example.com, lo stesso codice crea passkey per wallet.example.com — chiavi nuove, e quindi un indirizzo nuovo. Non può firmare per un wallet creato su wallet.getvela.app. Quella copia resta utile: per un wallet che crei lì, o per gestire in proprio tutto lo stack partendo da zero.

Per un wallet esistente, queste strade funzionano anche se getvela.app è offline o non esiste più:

StradaChiavi che può usareDove trovarla
L’estensione Vela per il browser (browser Chromium: Chrome, Edge, Brave)Qualsiasi chiave raggiungibile dal browser: la passkey di questo dispositivo, una chiave di sicurezza USB (NFC dove il computer lo supporta), un telefono tramite QRUno zip di release da GitHub, oppure compilala
Un’app desktop o per telefono compilata da teUn telefono tramite QR e le chiavi di sicurezza USBCompilala
Le app degli store e le app desktop notarizzateSempre un telefono tramite QR e le chiavi di sicurezza; le passkey di «questo dispositivo» solo finché il sistema operativo riesce ancora a verificare l’app rispetto a getvela.appRelease su GitHub (più avanti gli store)

L’estensione può usare le chiavi di getvela.app perché Chrome permette a un’estensione con il permesso per un sito di usare le passkey di quel sito. Il browser controlla quel permesso in locale; lo abbiamo verificato in funzione, ma non ancora con il dominio realmente offline. Un’app compilata da te può usare un telefono o una chiave di sicurezza perché Vela comunica con loro direttamente; la passkey del telefono stesso («questo dispositivo») richiede che l’app sia firmata da Vela, e la tua non lo è.

La pagina di firma non è di per sé una strada d’accesso: firma le richieste che le invia un altro programma, e nessuna app Vela gliele invia ancora.

Indirizza il wallet verso i tuoi servizi

Ogni app ha quattro campi in Impostazioni → Avanzate → Endpoint dei servizi (sul desktop, Impostazioni → Endpoint dei servizi): indice dati delle reti, indice passkey, Vela Relay e tassi fiat. Ogni campo mostra il valore predefinito di Vela finché non lo cambi; Ripristina i valori predefiniti li riporta tutti e quattro all’origine. Per relay, indice e dati delle chain, il wallet chiama /api/health e mostra un indicatore, verde solo quando l’endpoint dichiara il servizio giusto e risponde status: "ok". Salva quello che scrivi in ogni caso — aspetta il verde.

Servizioservice in /api/health
Relayvela-relay
Indice delle chiavi pubblichewebauthn-p256-publickey-registry
Dati delle chainethereum-data
Tassi di cambionon verificato per nome — deve restituire un elenco di tassi con base USD

Tutte e quattro le app rispettano tutti e quattro i campi, e un endpoint cambiato ha effetto dalla chiamata successiva, non dal prossimo avvio: ogni percorso — creare un wallet, accedere, cercare il nome di un indirizzo — legge l’endpoint nel momento in cui lo usa. Su iOS l’indice passkey si può cambiare anche nella schermata di accesso, quando quello predefinito non è raggiungibile.

(Fino a settembre 2026 c’erano quattro eccezioni a tutto questo, la peggiore delle quali una pagina iOS che mostrava valori segnaposto e non salvava nulla. Sono state corrette.)

Gestisci il tuo relay

Il relay è vela-relay (Rust, MIT). Un solo deploy serve tutte le chain: il wallet chiama https://your-relay/<chainId>. Deve essere vela-relay: il wallet chiede la quotazione della commissione con un metodo specifico di Vela che i bundler ERC-4337 generici non implementano.

Cosa ti serve

  • Docker più un server Redis e un server Iggy che già gestisci, oppure un account Cloudflare con il piano Workers Paid e, sulla tua macchina, Node.js e una toolchain Rust (con il target wasm32-unknown-unknown).
  • Un OPERATOR_SECRET (esadecimale, almeno 32 byte). Da esso derivano un indirizzo di tesoreria e un pool di indirizzi relayer, uguali su ogni chain. Tienilo segreto: controlla i fondi del relay.
  • Gas su ogni chain che vuoi servire: invia la moneta della chain (pathUSD su Tempo) al tuo indirizzo di tesoreria. La tesoreria ricarica i relayer.

Docker

git clone https://github.com/mondaylabsltd/vela-relay
cd vela-relay
cp .env.example .env
# nel file .env: VELA_RELAY_IGGY_URL, VELA_RELAY_REDIS_URL, OPERATOR_SECRET,
# VELA_RELAY_CHAIN_DIRECTORY_URL se gestisci i tuoi dati delle chain,
# e VELA_RELAY_IMAGE impostato su un'immagine di release di cui ti fidi (vedi docs/docker.md)
docker compose pull relay
docker compose up -d --no-build
curl --fail http://127.0.0.1:4567/readyz

Vanno bene entrambe le strade: l’immagine pubblicata è la più rapida, e docker compose up --build compila la stessa cosa dal codice sorgente che puoi leggere. Senza Docker, cargo run --release --bin vela-relay lo esegue direttamente.

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
# se gestisci i tuoi dati delle chain: aggiungi "VELA_RELAY_CHAIN_DIRECTORY_URL" sotto "vars" in wrangler.jsonc
npx wrangler deploy

Verifica

curl https://your-relay/api/health        # {"service":"vela-relay","status":"ok",…}
curl https://your-relay/v1/treasury/100   # il tuo indirizzo di tesoreria su Gnosis, e se ha bisogno di gas

Poi inserisci https://your-relay nel campo Vela Relay.

Da sapere

  • La commissione pagata dal wallet va alla tua tesoreria. Il wallet la calcola nello stesso modo qualunque relay tu usi (vedi reti e commissioni).
  • Una rete personalizzata aggiunta prima di cambiare relay mantiene l’indirizzo del relay con cui è stata aggiunta.
  • Il relay legge i dettagli di ogni chain e le stablecoin che accetta da un archivio delle chain: ethereum-data.getvela.app, a meno che tu non imposti VELA_RELAY_CHAIN_DIRECTORY_URL su un archivio tuo. L’impostazione esiste da vela-relay v0.9.6; le build precedenti leggono sempre la copia di Vela.

Gestisci il tuo indice delle chiavi pubbliche

L’indice è p256-index (Rust, MIT). Quando viene creato un wallet, controlla la prova di ogni chiave, poi scrive il gruppo nel contratto di registro su Gnosis e paga il gas. Continua a usare il registro esistente a 0x94fD1A891EB6c5F340622Baf2F3A0cb70A941EA9: non ha un proprietario, qualsiasi indirizzo con fondi può scriverci e ogni app Vela lo legge direttamente. Un registro tutto tuo sarebbe invisibile alle app.

Cosa ti serve

  • Docker con Redis e Iggy (il server), oppure un account Cloudflare (la versione Worker, il cui README avverte che la scrittura on-chain non è ancora stata testata da capo a fondo).
  • Una chiave privata Gnosis con dello xDAI. Registrare un wallet costa circa 1,1 milioni di gas con una chiave e circa 3,6 milioni con sette.
  • Queste impostazioni:
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 è quello che sfugge di più: senza, il server emette challenge che il contratto rifiuta, e ogni registrazione fallisce. Si trova in .env.example e deve corrispondere al DOMAIN_REGISTRY del contratto distribuito: dalla VERSION 12 del registro il dominio delle challenge è fissato al momento del deploy, quindi non si sposta quando il contratto viene ridistribuito.

Avvio e verifica

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"

Il server ascolta in HTTP semplice (porta 11256 per impostazione predefinita); mettigli davanti un proxy TLS, perché il wallet accetta solo endpoint https://. Anche docker build -f p256-index-server/Dockerfile . funziona da un clone pulito; se usi Compose, copia prima .env.example in p256-index-server/.env.

Se non risponde nessun indice, i wallet esistenti funzionano comunque: in fase di accesso l’app legge il contratto di registro su Gnosis (poi su Ethereum) tramite i tuoi nodi RPC. Un wallet con una sola chiave si può perfino ricostruire da due firme, senza alcun registro. Per creare un nuovo wallet invece serve un indice, perché qualcuno deve pagare la registrazione.

Gestisci i tuoi dati delle chain

I dati delle chain sono ethereum-data (MIT): JSON statici e immagini per circa 2.600 reti e i loro token, più i descrittori ERC-7730 che Vela usa per spiegare le transazioni.

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"

Il suo README spiega anche come compilarlo dal codice sorgente e come fare il deploy su Cloudflare. Servilo in HTTPS e inserisci l’indirizzo nel campo Indice dati delle reti.

Anche il relay legge questi file, compreso un campo specifico di Vela (l’elenco stables decide quali stablecoin possono pagare le commissioni). Indirizzalo verso la tua copia con VELA_RELAY_CHAIN_DIRECTORY_URL=https://your-chain-data; mette in cache la voce di ogni rete per un’ora.

Gestisci i tuoi tassi di cambio

vela-currency (MIT) ripubblica i tassi giornalieri della Banca centrale europea. Non richiede chiavi.

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

Inserisci https://your-host/v2/rates?base=USD nel campo Tassi fiat. Va bene anche qualsiasi servizio compatibile con Frankfurter. Mantieni ?base=USD: ogni conversione lo dà per scontato.

Compila le app da te

Tutte le app sono in un unico repository (MIT). Il README elenca i passaggi di compilazione di ogni app; in breve:

AppCompilazioneFirma per il tuo wallet getvela.app esistente?
Estensione del browsercd app-web/vela-wallet && pnpm install && pnpm build:extension, poi carica extension/dist come estensione non pacchettizzata in chrome://extensionsSì, con qualsiasi chiave
Wallet webcd app-web/vela-wallet && pnpm install && pnpm build; si pubblica come Cloudflare WorkerNo — sul tuo dominio è un wallet diverso (vedi sopra)
Desktopcd app-desktop/vela-wallet && cargo run (script di packaging nel suo README)Sì, con un telefono tramite QR o una chiave di sicurezza USB
AndroidGenera i binding del core, poi ./gradlew :app:installDebugSì, con un telefono tramite QR o una chiave di sicurezza USB
iOS./rust/scripts/build-ios-xcframework.sh, poi compila in Xcode con il tuo teamSì, con un telefono tramite QR o una YubiKey USB-C / Lightning (firmware 5.8 o successivo)

Con un’app compilata da te, la passkey di «questo dispositivo» non funziona per i wallet getvela.app: Apple e Google permettono di usare le passkey di getvela.app solo alle app firmate da Vela.

Aggiungi una rete che Vela non include

Vela gira su qualsiasi chain EVM che abbia il precompilato P-256 e i contratti standard che controlla. La configurazione della chain ti dice cosa manca a una chain e fa il deploy di ciò che chiunque può deployare; reti e commissioni spiega i requisiti. Il controllo comprende i due contratti che servono a un wallet con più di una chiave, e li segnala come tali — una chain che ne è priva fa comunque funzionare un wallet con una sola chiave.

Cosa punta ancora a Vela dopo tutto questo

Se sostituisci tutto quanto sopra, restano:

  • L’elenco di autenticatori che dà il nome ai modelli di chiave di sicurezza — solo estetico; le app ripiegano su un nome generico.
  • I file di associazione di getvela.app, che servono alle app degli store per le passkey di «questo dispositivo». A un telefono o a una chiave di sicurezza non servono.

E questi non sono di Vela: i database pubblici di selettori, i tunnel di Apple e Google per l’accesso tramite telefono, e i provider RPC che scegli.

Poi: la pagina di firma che puoi gestire tu.