Guia de auto-hospedagem

O seu dinheiro está num contrato Safe on-chain, controlado pelas suas chaves. Nada do que a Vela roda consegue movê-lo. O que a Vela roda é a engrenagem que torna a carteira prática: um relay que envia as suas transações, um índice que ajuda um aparelho novo a encontrar a sua carteira, um diretório de dados de chain, uma fonte de cotações e os próprios apps.

Esta página lista cada uma dessas peças, o que deixa de funcionar sem ela e como rodar a sua. Ela também trata da única peça que você não pode substituir — o domínio ao qual as suas passkeys pertencem — e do que fazer se o getvela.app deixar de existir.

O mapa

PeçaO que fazPadrão da VelaDá para substituir?Sem ela
RelayRecebe a sua operação assinada, paga o gas, envia a operação e recolhe a taxa que você assinouvela-relay-cf.getvela.appSim — rode o vela-relay e aponte a carteira para eleVocê não consegue enviar
Índice de chaves públicasRegistra on-chain as chaves de uma carteira nova; responde “de qual carteira esta chave faz parte?”p256-index-v2.getvela.appSim — rode o p256-indexNão dá para criar carteiras novas; o login passa a ler direto da rede
Contrato de registroO registro público e permanente das chaves de cada carteira0x94fD…1EA9 na GnosisNão é preciso — ninguém é dono dele; a carteira o lê diretamente
Dados de chainDetalhes das redes, listas de tokens, logos, descritores de assinatura legívelethereum-data.getvela.appSim — rode o ethereum-dataSem listas de tokens nem logos; menos transações decodificadas; adicionar redes falha
CotaçõesValores em moeda fiduciária na sua moeda de exibiçãovela-currency.getvela.appSim — rode o vela-currency ou qualquer fonte compatível com FrankfurterOs apps recorrem às cotações on-chain da Chainlink quando podem (o desktop mostra USD)
Nós RPCLer saldos, simular transaçõesEndpoints públicos por redeSim — por rede, em Configurações → RedesA Vela alterna entre endpoints
Os appsA própria carteirawallet.getvela.app, versões publicadasSim — compile-os
getvela.appO domínio ao qual as suas passkeys pertencemNão — veja abaixo

Alguns serviços de terceiros também são contatados e não pertencem à Vela: os bancos de dados públicos de seletores de função (sourcify, openchain, 4byte), usados como último recurso para decodificar uma transação; o diretório de autenticadores que dá nome ao modelo da sua chave de segurança; e os servidores de túnel da Apple e do Google quando você assina com um celular escaneando um QR code.

A única coisa que você não pode substituir: o domínio da passkey

Uma passkey pertence ao site para o qual foi criada. As chaves da Vela são criadas para getvela.app. Os navegadores só as oferecem a páginas do getvela.app ou dos seus subdomínios (ou a origens que o getvela.app declara como relacionadas), e as passkeys integradas de um celular só funcionam em apps que o getvela.app autoriza. Fora do navegador, a regra é mais flexível: o Chrome deixa uma extensão com permissão para o getvela.app usá-las, e um programa no seu computador pode pedir diretamente a uma chave de segurança ou a um celular uma assinatura para o getvela.app — é assim que os apps compilados por você funcionam, e é por isso que o software que você roda importa. Disso decorrem duas coisas.

Uma cópia da carteira web no seu próprio domínio é outra carteira. Servido a partir de wallet.example.com, o mesmo código cria passkeys para wallet.example.com — chaves novas e, portanto, um endereço novo. Ela não consegue assinar por uma carteira criada em wallet.getvela.app. Essa cópia continua útil: para uma carteira que você criar nela, ou para rodar toda a estrutura por conta própria, do zero.

Para uma carteira existente, estes caminhos continuam funcionando se o getvela.app estiver fora do ar ou deixar de existir:

CaminhoChaves que pode usarOnde conseguir
A extensão da Vela para navegador (navegadores Chromium: Chrome, Edge, Brave)Qualquer chave que o navegador alcance: a passkey deste aparelho, uma chave de segurança USB (NFC onde o computador suportar), um celular por QRUm zip de release no GitHub, ou compile-a
Um app de desktop ou de celular compilado por vocêUm celular por QR e chaves de segurança USBCompile-o
Os apps das lojas e os apps de desktop notarizadosUm celular por QR e chaves de segurança, sempre; passkeys de “este aparelho” só enquanto o sistema operacional ainda conseguir verificar o app junto ao getvela.appReleases do GitHub (lojas mais adiante)

A extensão consegue usar chaves do getvela.app porque o Chrome deixa uma extensão com permissão para um site usar as passkeys desse site. O navegador confere essa permissão localmente; medimos que funciona, mas ainda não com o domínio realmente fora do ar. Um app compilado por você consegue usar um celular ou uma chave de segurança porque a Vela conversa diretamente com eles; a passkey do próprio celular (“este aparelho”) exige que o app seja assinado pela Vela, e o seu não é.

A página de assinatura não é um caminho por si só: ela assina solicitações que outro programa envia, e nenhum app da Vela envia essas solicitações ainda.

Aponte a carteira para os seus serviços

Cada app tem quatro campos em Configurações → Avançado → Endpoints de serviço (no desktop, Configurações → Endpoints de serviço): índice de dados da chain, índice de passkey, Vela Relay e cotações fiat. Cada campo mostra o padrão da Vela até você mudá-lo; Restaurar padrões restaura os quatro. Para o relay, o índice e os dados de chain, a carteira chama /api/health e mostra um selo, verde só quando o endpoint informa o serviço certo e retorna status: "ok". Ela salva o que você digitar de qualquer forma — espere ficar verde.

Serviçoservice em /api/health
Relayvela-relay
Índice de chaves públicaswebauthn-p256-publickey-registry
Dados de chainethereum-data
Cotaçõesnão é conferido pelo nome — precisa retornar uma lista de cotações com base em USD

Os quatro apps respeitam os quatro campos, e um endpoint alterado passa a valer já na chamada seguinte, e não na próxima abertura: cada caminho — criar uma carteira, fazer login, buscar um nome para um endereço — lê o endpoint no momento em que o usa. No iOS, o índice de passkey também pode ser alterado na tela de login quando o padrão está inacessível.

(Até setembro de 2026, havia quatro exceções a isso, a pior delas uma página de iOS que mostrava valores de exemplo e não salvava nada. Elas foram corrigidas.)

Rode o seu próprio relay

O relay é o vela-relay (Rust, MIT). Uma única implantação atende todas as redes: a carteira chama https://your-relay/<chainId>. Precisa ser o vela-relay — a carteira pede a cotação da taxa com um método específico da Vela que bundlers ERC-4337 genéricos não implementam.

Do que você precisa

  • Ou Docker, mais um Redis e um servidor Iggy que você já rode, ou uma conta Cloudflare no plano Workers Paid, com Node.js e uma toolchain Rust (com o target wasm32-unknown-unknown) na sua máquina.
  • Um OPERATOR_SECRET (hexadecimal, com pelo menos 32 bytes). Ele deriva um endereço de tesouraria e um conjunto de endereços de relayer, iguais em todas as redes. Mantenha-o em segredo: ele controla os fundos do relay.
  • Gas em cada rede que você quer atender: envie a moeda da rede (pathUSD na Tempo) para o seu endereço de tesouraria. A tesouraria abastece os relayers.

Docker

git clone https://github.com/mondaylabsltd/vela-relay
cd vela-relay
cp .env.example .env
# no .env: VELA_RELAY_IGGY_URL, VELA_RELAY_REDIS_URL, OPERATOR_SECRET,
# VELA_RELAY_CHAIN_DIRECTORY_URL se você roda os seus próprios dados de chain,
# e VELA_RELAY_IMAGE apontando para uma imagem de release em que você confia (veja docs/docker.md)
docker compose pull relay
docker compose up -d --no-build
curl --fail http://127.0.0.1:4567/readyz

Os dois caminhos funcionam: a imagem publicada é o mais rápido, e docker compose up --build compila a mesma coisa a partir do código-fonte que você pode ler. Sem Docker, cargo run --release --bin vela-relay roda o relay diretamente.

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
# dados de chain próprios: adicione "VELA_RELAY_CHAIN_DIRECTORY_URL" em "vars" no wrangler.jsonc
npx wrangler deploy

Confira

curl https://your-relay/api/health        # {"service":"vela-relay","status":"ok",…}
curl https://your-relay/v1/treasury/100   # seu endereço de tesouraria na Gnosis, e se ele precisa de gas

Depois, coloque https://your-relay no campo Vela Relay.

Saiba que

  • A taxa que a carteira paga vai para a sua tesouraria. A carteira a calcula do mesmo jeito, qualquer que seja o relay que você usa (veja redes e taxas).
  • Uma rede personalizada que você adicionou antes de trocar o relay mantém o endereço de relay com que foi adicionada.
  • O relay lê os detalhes de cada rede e as stablecoins que aceita num diretório de redes: ethereum-data.getvela.app, a menos que você defina VELA_RELAY_CHAIN_DIRECTORY_URL com o seu. Essa variável existe a partir do vela-relay v0.9.6; versões mais antigas sempre leem a cópia da Vela.

Rode o seu próprio índice de chaves públicas

O índice é o p256-index (Rust, MIT). Quando uma carteira é criada, ele confere a prova de cada chave, depois grava o grupo no contrato de registro na Gnosis e paga o gas. Continue usando o registro existente em 0x94fD1A891EB6c5F340622Baf2F3A0cb70A941EA9: ele não tem dono, qualquer endereço com saldo pode gravar nele e todos os apps da Vela o leem diretamente. Um registro só seu seria invisível para eles.

Do que você precisa

  • Docker com Redis e Iggy (o servidor), ou uma conta Cloudflare (a versão Worker, cujo próprio README avisa que a gravação on-chain ainda não foi testada de ponta a ponta).
  • Uma chave privada da Gnosis com xDAI. Registrar uma carteira custa cerca de 1,1 milhão de gas com uma chave e cerca de 3,6 milhões com sete.
  • Estas configurações:
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…

O P256_INDEX_DOMAIN_REGISTRY é o que todo mundo esquece: sem ele, o servidor distribui desafios que o contrato rejeita, e todo registro falha. Ele está no .env.example, e precisa bater com o DOMAIN_REGISTRY do próprio contrato implantado — a partir da VERSION 12 do registro, o domínio do desafio é fixado na implantação, então ele não muda quando o contrato é implantado de novo.

Rode e confira

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"

O servidor escuta em HTTP simples (porta 11256 por padrão); coloque um proxy TLS na frente dele, já que a carteira só aceita endpoints https://. O docker build -f p256-index-server/Dockerfile . também funciona a partir de um clone limpo; se você usar o Compose, copie antes o .env.example para p256-index-server/.env.

Se nenhum índice responder, as carteiras existentes continuam funcionando: no login, o app lê o contrato de registro na Gnosis (e depois no Ethereum) pelos seus nós RPC. Uma carteira com uma única chave pode até ser reconstruída a partir de duas assinaturas, sem envolver o registro. Criar uma carteira nova precisa, sim, de um índice, porque alguém tem que pagar pelo registro.

Rode os seus próprios dados de chain

Os dados de chain são o ethereum-data (MIT): JSON estático e imagens de cerca de 2.600 redes e dos seus tokens, além dos descritores ERC-7730 que a Vela usa para explicar transações.

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"

O README dele também explica como compilar a partir do código-fonte e implantar na Cloudflare. Sirva-o por HTTPS e coloque o endereço no campo Índice de dados da chain.

O relay também lê esses arquivos, inclusive um campo específico da Vela (a lista stables decide quais stablecoins podem pagar taxas). Aponte-o para a sua cópia com VELA_RELAY_CHAIN_DIRECTORY_URL=https://your-chain-data; ele guarda em cache a entrada de cada rede por uma hora.

Rode as suas próprias cotações

O vela-currency (MIT) republica as cotações diárias do Banco Central Europeu. Ele não precisa de nenhuma chave.

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

Coloque https://your-host/v2/rates?base=USD no campo Cotações fiat. Qualquer serviço compatível com Frankfurter também funciona. Mantenha o ?base=USD: todas as conversões partem dele.

Compile os apps você mesmo

Todos os apps estão em um único repositório (MIT). O README lista os passos de compilação de cada app; a versão curta:

AppCompilaçãoAssina pela sua carteira existente do getvela.app?
Extensão de navegadorcd app-web/vela-wallet && pnpm install && pnpm build:extension, depois carregue extension/dist sem compactação em chrome://extensionsSim, com qualquer chave
Carteira webcd app-web/vela-wallet && pnpm install && pnpm build; é implantada como um Cloudflare WorkerNão — no seu domínio, ela é outra carteira (veja acima)
Desktopcd app-desktop/vela-wallet && cargo run (scripts de empacotamento no README dele)Sim, com um celular por QR ou uma chave de segurança USB
AndroidGere os bindings do núcleo e depois rode ./gradlew :app:installDebugSim, com um celular por QR ou uma chave de segurança USB
iOS./rust/scripts/build-ios-xcframework.sh e depois compile no Xcode com o seu próprio timeSim, com um celular por QR ou uma YubiKey USB-C / Lightning (firmware 5.8 ou mais recente)

A passkey de “este aparelho” num app compilado por você não funciona para carteiras do getvela.app: a Apple e o Google só deixam apps assinados pela Vela usar passkeys do getvela.app.

Adicione uma rede que a Vela não traz

A Vela roda em qualquer rede EVM que tenha o pré-compilado P-256 e os contratos padrão que ela verifica. A configuração de rede diz o que falta numa rede e implanta o que qualquer pessoa pode implantar; redes e taxas explica os requisitos. A verificação inclui os dois contratos de que uma carteira com mais de uma chave precisa, e os marca como tais — uma rede sem eles ainda roda uma carteira de chave única.

O que ainda aponta para a Vela depois de tudo isso

Se você substituir tudo o que está acima, sobra isto:

  • O diretório de autenticadores que dá nome aos modelos de chave de segurança — só estético; os apps recorrem a um nome genérico.
  • Os arquivos de associação do getvela.app, de que os apps das lojas precisam para as passkeys de “este aparelho”. Um celular ou uma chave de segurança não precisa deles.

E estes não são da Vela: os bancos de dados públicos de seletores, os túneis da Apple e do Google para login pelo celular e os provedores de RPC que você escolher.

A seguir: a página de assinatura que você mesmo pode rodar.