Ejecutar QORel junto a un validador
Los validadores suelen retransmitir los canales de su propia cadena. QORel puede ejecutarse en el host del validador, como contenedor sidecar o en Kubernetes. Esta página ofrece las tres disposiciones y las reglas que mantienen al relayer aislado de las claves del propio validador. Está dirigida a operadores de validadores y de nodos. Para ejecutar el nodo en sí consulta Ejecutar un validador y Ejecutar un nodo.
Hoy el relé es solo para testnet: QORel se ha ejecutado contra qorechain-diana, y no hay ningún canal IBC de mainnet abierto.
Innovaciones
- Un servicio reforzado en el paquete. Los
.deby.rpminstalan unqorel.serviceque se ejecuta como su propio usuarioqorel, con un umask0077, sin nuevos privilegios, un/tmpprivado, un sistema de archivos de solo lectura fuera de/var/lib/qorely sin volcados de memoria (core dumps). - Claves solo en memoria, si quieres. La disposición de Kubernetes reconstruye las claves al arrancar el pod a partir de un secreto en un volumen respaldado por memoria, de modo que los archivos de clave nunca tocan el disco.
- Archivos de clave solo para el propietario. Los archivos de clave, incluida la semilla poscuántica, tienen modo 0600.
- Comprobaciones sobre las que puedes configurar alertas.
qorel keys pqc-statusinformaready_to_relay, y la comprobación previa al envío detiene una transacción que sería rechazada antes de gastar comisión.
Cómo se usa
Reglas básicas
- Usa una cuenta de relayer dedicada. Nunca la clave de operador del validador ni la clave de consenso. Fondéala con lo que el relayer necesita para las comisiones.
- Un proceso de relayer por clave de relayer. Dos procesos que firman con la misma clave se pisan los números de secuencia de la cuenta.
- Retransmite solo tus canales. Define un
packet_filter. - Apunta QORel al nodo local. Usa
http://127.0.0.1:26657,http://127.0.0.1:9090yws://127.0.0.1:26657/websocket, y mantén esos puertos cerrados a internet. Esto también le da al relayer el endpoint gRPC que no está disponible públicamente. - En QoreChain, registra la clave poscuántica del relayer una vez con
qorel keys register-pqc, y compruebaqorel keys pqc-statusantes de arrancar.
1. systemd en el host del validador
-
Instala el paquete
.debo.rpm(Instalación). Crea un usuario de sistemaqorel, distinto del usuario del validador, y unqorel.servicereforzado. -
Edita
/etc/qorel/config.tomlcon los endpoints del nodo local. -
Añade la clave del relayer como usuario
qorely registra la clave poscuántica:sudo -u qorel qorel --config /etc/qorel/config.toml keys add --chain qorechain-diana --key-name relayer --mnemonic-file <file>sudo -u qorel qorel --config /etc/qorel/config.toml keys register-pqc --chain qorechain-dianasudo -u qorel qorel --config /etc/qorel/config.toml keys pqc-status --chain qorechain-diana -
Ejecuta
systemctl enable --now qorel. -
Dale a QORel menor prioridad que al nodo, para que nunca compita con la producción de bloques:
# /etc/systemd/system/qorel.service.d/priority.conf[Service]Nice=10CPUWeight=20MemoryMax=1GDespués
systemctl daemon-reload && systemctl restart qorel.
2. Sidecar con Docker Compose
services:
qorel:
image: ghcr.io/qorechain/qorel:0.1.0
command: ["--config", "/home/nonroot/.hermes/config.toml", "start"]
network_mode: host # reach the node on 127.0.0.1
restart: unless-stopped
volumes:
- ./qorel:/home/nonroot/.hermes # config.toml + keys/ (owner uid 65532, mode 0700)
deploy:
resources:
limits: { cpus: "1.0", memory: 1g }
Añade las claves una vez con la misma imagen, por ejemplo:
docker run --rm -v $PWD/qorel:/home/nonroot/.hermes ghcr.io/qorechain/qorel:0.1.0 \
keys add --chain qorechain-diana --key-name relayer --mnemonic-file /home/nonroot/.hermes/relayer.mnemonic
docker run --rm --network host -v $PWD/qorel:/home/nonroot/.hermes ghcr.io/qorechain/qorel:0.1.0 \
keys register-pqc --chain qorechain-diana
Elimina después el archivo de la mnemónica.
3. Kubernetes
Guarda la mnemónica en tu almacén de secretos y reconstruye las claves al arrancar:
- Un contenedor init ejecuta
qorel keys adden unemptyDirconmedium: Memory(registra la clave poscuántica una vez, a mano, de antemano). - El contenedor principal ejecuta
qorel startsobre el mismo volumen.
De ese modo las claves existen solo en memoria.
apiVersion: apps/v1
kind: Deployment
metadata: { name: qorel }
spec:
replicas: 1 # never more than one per key
strategy: { type: Recreate }
selector: { matchLabels: { app: qorel } }
template:
metadata: { labels: { app: qorel } }
spec:
securityContext: { runAsNonRoot: true, runAsUser: 65532, fsGroup: 65532 }
volumes:
- name: home
emptyDir: { medium: Memory }
- name: config
configMap: { name: qorel-config }
- name: mnemonic
secret: { secretName: qorel-relayer-mnemonic } # key: mnemonic
initContainers:
- name: keys
image: ghcr.io/qorechain/qorel:0.1.0
args: ["--config", "/config/config.toml", "keys", "add", "--chain", "qorechain-diana",
"--key-name", "relayer", "--mnemonic-file", "/secret/mnemonic", "--overwrite"]
volumeMounts:
- { name: home, mountPath: /home/nonroot/.hermes }
- { name: config, mountPath: /config }
- { name: mnemonic, mountPath: /secret, readOnly: true }
# repeat the init container for each chain in the config
containers:
- name: qorel
image: ghcr.io/qorechain/qorel:0.1.0
args: ["--config", "/config/config.toml", "start"]
ports: [{ containerPort: 3001, name: telemetry }]
resources: { limits: { cpu: "1", memory: 1Gi } }
volumeMounts:
- { name: home, mountPath: /home/nonroot/.hermes }
- { name: config, mountPath: /config }
El key_store_folder de la configuración debe apuntar a /home/nonroot/.hermes/keys (o dejarse sin definir).
Monitorización
Activa la telemetría y configura alertas sobre los paquetes pendientes, los saldos del relayer, el estado de la clave poscuántica y la frescura de los clientes. La lista está en Monitorización.
Cómo acceder
- Red. Testnet
qorechain-diana. El relayer se conecta a los puertos locales de tu propio nodo y a los endpoints de la otra cadena. - Cuentas. Una cuenta de relayer dedicada en cada cadena, con fondos para comisiones; nunca la clave de operador del validador.
- Host. Linux con systemd para la disposición 1; Docker con red de host para la disposición 2; un clúster con un
emptyDirrespaldado por memoria para la disposición 3. - Coste. Solo comisiones. Los ejemplos anteriores limitan el relayer a 1 CPU y 1 GiB de memoria.
Dónde se publica
Los paquetes, la imagen de contenedor y el código fuente figuran en Instalación. La configuración de ejemplo es packaging/config.example.toml en qorechain/QORel.
Límites y problemas conocidos
- No es una obligación del validador. El relé es opcional y independiente de validar; un relayer detenido no afecta al consenso.
- Un proceso por clave. Las actualizaciones progresivas que arrancan un segundo pod con la misma clave rompen la secuencia de la cuenta; el ejemplo usa
Recreate. - Registro manual.
keys register-pqces un paso manual único; el contenedor init de Kubernetes solo reconstruye las claves. - Solo testnet. Todavía no hay ningún canal de mainnet que retransmitir.