Guía de autoalojamiento

Tu dinero está en un contrato Safe on-chain, controlado por tus llaves. Nada de lo que opera Vela puede moverlo. Lo que Vela sí opera es la maquinaria que hace cómoda la wallet: un relay que envía tus transacciones, un índice que ayuda a un dispositivo nuevo a encontrar tu wallet, un directorio de datos de cadena, una fuente de tipos de cambio y las propias apps.

Esta página enumera cada una de esas piezas, qué deja de funcionar sin ella y cómo operar la tuya. También trata la única pieza que no puedes reemplazar (el dominio al que pertenecen tus passkeys) y qué hacer si getvela.app desaparece.

El mapa

PiezaQué haceValor predeterminado de Vela¿Puedes reemplazarla?Sin ella
RelayRecibe tu operación firmada, paga el gas, la envía y cobra la comisión que firmastevela-relay-cf.getvela.appSí: opera vela-relay y apunta la wallet a élNo puedes enviar
Índice de llaves públicasRegistra on-chain las llaves de una wallet nueva; responde «¿de qué wallet forma parte esta llave?»p256-index-v2.getvela.appSí: opera p256-indexNo se pueden crear wallets nuevas; el inicio de sesión recurre a leer la cadena
Contrato de registroEl registro público y permanente de las llaves de cada wallet0x94fD…1EA9 en GnosisNo hace falta: no tiene dueño y la wallet lo lee directamente
Datos de cadenaDetalles de las redes, listas de tokens, logos, descriptores de firma legibleethereum-data.getvela.appSí: opera ethereum-dataSin listas de tokens ni logos; se decodifican menos transacciones; agregar redes falla
Tipos de cambioValores en tu moneda de visualizaciónvela-currency.getvela.appSí: opera vela-currency o cualquier fuente compatible con FrankfurterLas apps recurren a los precios on-chain de Chainlink donde pueden (la de escritorio muestra USD)
Nodos RPCLeer saldos, simular transaccionesEndpoints públicos por redSí: por red, en Ajustes → RedesVela cambia de un endpoint a otro
Las appsLa wallet en síwallet.getvela.app, versiones publicadasSí: compílalas
getvela.appEl dominio al que pertenecen tus passkeysNo: consulta más abajo

También se contactan algunos servicios de terceros que no son de Vela: las bases de datos públicas de selectores de funciones (sourcify, openchain, 4byte), que se usan como último recurso al decodificar una transacción; el directorio de autenticadores que pone nombre al modelo de tu llave de seguridad; y los servidores de túnel de Apple y Google cuando firmas con un celular escaneando un código QR.

Lo único que no puedes reemplazar: el dominio de la passkey

Una passkey pertenece al sitio web para el que se creó. Las llaves de Vela se crean para getvela.app. Los navegadores solo las ofrecen a páginas de getvela.app o de sus subdominios (o a orígenes que getvela.app declara como relacionados), y las passkeys integradas de un celular solo funcionan en apps que getvela.app avala. Fuera del navegador la regla es más flexible: Chrome deja que una extensión con permiso para getvela.app las use, y un programa en tu computadora puede pedirle directamente a una llave de seguridad o a un celular una firma para getvela.app; así funcionan las apps compiladas por ti, y por eso importa qué software ejecutas. De ahí salen dos cosas.

Una copia de la wallet web en tu propio dominio es otra wallet. Servido desde wallet.example.com, el mismo código crea passkeys para wallet.example.com: llaves nuevas y, por lo tanto, una dirección nueva. No puede firmar para una wallet creada en wallet.getvela.app. Esa copia sigue siendo útil: para una wallet que crees ahí, o para operar tú mismo todo el stack desde cero.

Para una wallet existente, esto sigue funcionando si getvela.app está caído o desaparece:

Forma de entrarLlaves que puede usarDónde conseguirla
La extensión de Vela para el navegador (navegadores Chromium: Chrome, Edge, Brave)Cualquier llave a la que llegue el navegador: la passkey de este dispositivo, una llave de seguridad USB (NFC donde la computadora lo admita), un celular por QRUn zip de una versión publicada en GitHub, o compílala
Una app de escritorio o de celular que compiles túUn celular por QR y llaves de seguridad USBCompílala
Las apps de las tiendas y las apps de escritorio notarizadasSiempre un celular por QR y llaves de seguridad; las passkeys de «este dispositivo» solo mientras el sistema operativo todavía pueda verificar la app contra getvela.appVersiones publicadas en GitHub (las tiendas, más adelante)

La extensión puede usar llaves de getvela.app porque Chrome deja que una extensión con permiso para un sitio use las passkeys de ese sitio. El navegador comprueba ese permiso de forma local; lo medimos funcionando, aunque todavía no con el dominio realmente caído. Una app compilada por ti puede usar un celular o una llave de seguridad porque Vela habla con ellos directamente; la passkey del propio celular («este dispositivo») necesita que la app esté firmada por Vela, y la tuya no lo está.

La página de firma no es una forma de entrar por sí sola: firma solicitudes que le envía otro programa, y ninguna app de Vela se las envía todavía.

Apunta la wallet a tus servicios

Cada app tiene cuatro campos en Ajustes → Avanzado → Endpoints de servicio (en escritorio, Ajustes → Endpoints de servicio): Índice de datos de cadena, Índice de passkey, Vela Relay y Tipos de cambio fiat. Cada campo muestra el valor predeterminado de Vela hasta que lo cambias; Restablecer a los valores predeterminados restaura los cuatro. Para el relay, el índice y los datos de cadena, la wallet llama a /api/health y muestra un indicador, que solo se pone en verde cuando el endpoint dice ser el servicio correcto y reporta status: "ok". Guarda lo que escribas de cualquier forma, así que espera a que se ponga en verde.

Servicioservice en /api/health
Relayvela-relay
Índice de llaves públicaswebauthn-p256-publickey-registry
Datos de cadenaethereum-data
Tipos de cambiono se revisa por nombre; tiene que devolver una lista de tipos de cambio con base en USD

Las cuatro apps respetan los cuatro campos, y un endpoint que cambias se aplica desde la siguiente llamada, no desde el siguiente arranque: cada camino (crear una wallet, iniciar sesión, buscar el nombre de una dirección) lee el endpoint en el momento en que lo usa. En iOS, además, el índice de passkey se puede cambiar en la pantalla de inicio de sesión cuando el predeterminado no responde.

(Hasta septiembre de 2026 había cuatro excepciones a esto; la peor era una página de iOS que mostraba valores de ejemplo y no guardaba nada. Ya están corregidas.)

Opera tu propio relay

El relay es vela-relay (Rust, MIT). Un solo despliegue sirve para todas las cadenas: la wallet llama a https://your-relay/<chainId>. Tiene que ser vela-relay: la wallet pide la cotización de la comisión con un método propio de Vela que los bundlers ERC-4337 genéricos no implementan.

Qué necesitas

  • O bien Docker más un Redis y un servidor Iggy que ya operes, o bien una cuenta de Cloudflare con Workers Paid, y Node.js y una toolchain de Rust (con el target wasm32-unknown-unknown) en tu máquina.
  • Un OPERATOR_SECRET (hex, de al menos 32 bytes). De él se derivan una dirección de tesorería y un conjunto de direcciones de relayer, las mismas en todas las cadenas. Mantenlo en secreto: controla los fondos del relay.
  • Gas en cada cadena que quieras atender: envía la moneda de la cadena (pathUSD en Tempo) a tu dirección de tesorería. La tesorería recarga a los relayers.

Docker

git clone https://github.com/mondaylabsltd/vela-relay
cd vela-relay
cp .env.example .env
# en .env: VELA_RELAY_IGGY_URL, VELA_RELAY_REDIS_URL, OPERATOR_SECRET,
# VELA_RELAY_CHAIN_DIRECTORY_URL si operas tus propios datos de cadena,
# y VELA_RELAY_IMAGE con una imagen publicada en la que confíes (ver docs/docker.md)
docker compose pull relay
docker compose up -d --no-build
curl --fail http://127.0.0.1:4567/readyz

Cualquiera de las dos sirve: la imagen publicada es la más rápida, y docker compose up --build compila lo mismo desde el código fuente que puedes leer. Sin Docker, cargo run --release --bin vela-relay lo ejecuta directamente.

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
# datos de cadena propios: agrega "VELA_RELAY_CHAIN_DIRECTORY_URL" en "vars" de wrangler.jsonc
npx wrangler deploy

Compruébalo

curl https://your-relay/api/health        # {"service":"vela-relay","status":"ok",…}
curl https://your-relay/v1/treasury/100   # tu dirección de tesorería en Gnosis, y si necesita gas

Luego pon https://your-relay en el campo Vela Relay.

Toma en cuenta

  • La comisión que paga la wallet va a tu tesorería. La wallet la calcula igual sin importar qué relay uses (consulta redes y comisiones).
  • Una red personalizada que hayas agregado antes de cambiar el relay conserva la dirección del relay con la que se agregó.
  • El relay lee los detalles de cada cadena y las stablecoins que acepta de un directorio de cadenas: ethereum-data.getvela.app, a menos que configures VELA_RELAY_CHAIN_DIRECTORY_URL con el tuyo. Esta variable existe desde vela-relay v0.9.6; las versiones anteriores siempre leen la copia de Vela.

Opera tu propio índice de llaves públicas

El índice es p256-index (Rust, MIT). Cuando se crea una wallet, verifica la prueba de cada llave, luego escribe el grupo en el contrato de registro en Gnosis y paga el gas. Sigue usando el registro existente en 0x94fD1A891EB6c5F340622Baf2F3A0cb70A941EA9: no tiene dueño, cualquier dirección con fondos puede escribir en él y todas las apps de Vela lo leen directamente. Un registro propio sería invisible para ellas.

Qué necesitas

  • Docker con Redis e Iggy (el servidor), o una cuenta de Cloudflare (la versión Worker, cuyo propio README señala que su escritura on-chain todavía no se ha probado de punta a punta).
  • Una llave privada de Gnosis con xDAI. Registrar una wallet cuesta alrededor de 1.1 millones de unidades de gas con una llave y alrededor de 3.6 millones con siete.
  • Estos ajustes:
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 es el que más se olvida: sin él, el servidor entrega desafíos que el contrato rechaza, y todos los registros fallan. Está en .env.example, y tiene que coincidir con el DOMAIN_REGISTRY del propio contrato desplegado: desde la VERSION 12 del registro, el dominio de los desafíos queda fijado al desplegarlo, así que no cambia cuando se vuelve a desplegar el contrato.

Ejecútalo y compruébalo

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"

El servidor escucha en HTTP simple (en el puerto 11256 por defecto); ponle enfrente un proxy con TLS, porque la wallet solo acepta endpoints https://. También funciona docker build -f p256-index-server/Dockerfile . desde un clon limpio; si usas Compose, copia primero .env.example a p256-index-server/.env.

Si no responde ningún índice, las wallets existentes siguen funcionando: al iniciar sesión, la app lee el contrato de registro en Gnosis (y luego en Ethereum) a través de tus nodos RPC. Una wallet con una sola llave incluso se puede reconstruir a partir de dos firmas, sin ningún registro de por medio. Crear una wallet nueva sí necesita un índice, porque algo tiene que pagar el registro.

Opera tus propios datos de cadena

Los datos de cadena son ethereum-data (MIT): JSON estático e imágenes de unas 2,600 redes y sus tokens, además de los descriptores ERC-7730 que usa Vela para explicar las transacciones.

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"

Su README también explica cómo compilarlo desde el código fuente y desplegarlo en Cloudflare. Sírvelo por HTTPS y pon la dirección en el campo Índice de datos de cadena.

El relay también lee estos archivos, incluido un campo propio de Vela (la lista stables decide qué stablecoins pueden pagar comisiones). Apúntalo a tu copia con VELA_RELAY_CHAIN_DIRECTORY_URL=https://your-chain-data; guarda en caché la entrada de cada red durante una hora.

Opera tus propios tipos de cambio

vela-currency (MIT) vuelve a publicar los tipos de cambio diarios del Banco Central Europeo. No necesita llaves.

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

Pon https://your-host/v2/rates?base=USD en el campo Tipos de cambio fiat. Cualquier servicio compatible con Frankfurter también funciona. Conserva ?base=USD: todas las conversiones lo dan por hecho.

Compila las apps tú mismo

Todas las apps están en un solo repositorio (MIT). El README enumera los pasos de compilación de cada app; la versión corta:

AppCompilación¿Firma para tu wallet existente de getvela.app?
Extensión de navegadorcd app-web/vela-wallet && pnpm install && pnpm build:extension, y luego carga extension/dist descomprimida en chrome://extensionsSí, con cualquier llave
Wallet webcd app-web/vela-wallet && pnpm install && pnpm build; se despliega como Cloudflare WorkerNo: en tu dominio es otra wallet (ver arriba)
Escritoriocd app-desktop/vela-wallet && cargo run (los scripts de empaquetado están en su README)Sí, con un celular por QR o una llave de seguridad USB
AndroidGenera los bindings del núcleo y luego ./gradlew :app:installDebugSí, con un celular por QR o una llave de seguridad USB
iOS./rust/scripts/build-ios-xcframework.sh, y luego compila en Xcode con tu propio equipoSí, con un celular por QR o una YubiKey USB-C / Lightning (firmware 5.8 o posterior)

La passkey de «este dispositivo» de una app compilada por ti no funciona para wallets de getvela.app: Apple y Google solo dejan que las apps firmadas por Vela usen passkeys de getvela.app.

Agrega una red que Vela no trae

Vela funciona en cualquier cadena EVM que tenga el precompilado P-256 y los contratos estándar que revisa. La página de configuración de cadenas te dice qué le falta a una cadena y despliega lo que cualquiera puede desplegar; redes y comisiones explica los requisitos. La revisión incluye los dos contratos que necesita una wallet con más de una llave, y los marca como tales: una cadena que no los tenga sigue sirviendo para una wallet de una sola llave.

Lo que sigue apuntando a Vela después de todo esto

Si reemplazas todo lo anterior, queda esto:

  • El directorio de autenticadores que pone nombre a los modelos de llaves de seguridad: es cosmético; las apps recurren a un nombre genérico.
  • Los archivos de asociación de getvela.app, que las apps de las tiendas necesitan para las passkeys de «este dispositivo». Un celular o una llave de seguridad no los necesitan.

Y esto no es de Vela: las bases de datos públicas de selectores, los túneles de Apple y Google para iniciar sesión con el celular, y los proveedores de RPC que tú elijas.

Sigue: la página de firma que puedes alojar tú mismo.