Eseguire QORel accanto a un validatore
I validatori spesso fanno da relay per i canali della propria chain. QORel può girare sull'host del validatore, come container sidecar o in Kubernetes. Questa pagina presenta le tre configurazioni e le regole che mantengono il relayer isolato dalle chiavi del validatore. È pensata per gli operatori di validatori e di nodi. Per eseguire il nodo stesso vedi Eseguire un validatore ed Eseguire un nodo.
Oggi il relay è solo testnet: QORel è stato eseguito su qorechain-diana, e non è aperto alcun canale IBC su mainnet.
Innovazioni
- Un servizio rinforzato nel pacchetto. I
.debe.rpminstallano unqorel.serviceche gira come utenteqoreldedicato, con umask0077, nessun nuovo privilegio, un/tmpprivato, un file system in sola lettura al di fuori di/var/lib/qorele nessun core dump. - Chiavi solo in memoria, se lo desideri. La configurazione Kubernetes ricostruisce le chiavi all'avvio del pod da un secret in un volume in memoria, così i file delle chiavi non toccano mai il disco.
- File delle chiavi leggibili solo dal proprietario. I file delle chiavi, incluso il seed post-quantistico, hanno modalità 0600.
- Controlli su cui puoi impostare alert.
qorel keys pqc-statusriportaready_to_relay, e il controllo pre-invio ferma una transazione che verrebbe rifiutata prima che venga spesa una commissione.
Come si usa
Regole di base
- Usa un account relayer dedicato. Mai la chiave operatore del validatore e mai la chiave di consenso. Finanzialo con quanto serve al relayer per le commissioni.
- Un processo relayer per chiave del relayer. Due processi che firmano con la stessa chiave si contendono i sequence dell'account.
- Fai da relay solo per i tuoi canali. Imposta un
packet_filter. - Punta QORel al nodo locale. Usa
http://127.0.0.1:26657,http://127.0.0.1:9090ews://127.0.0.1:26657/websocket, e tieni quelle porte chiuse a internet. Questo fornisce inoltre al relayer l'endpoint gRPC che non è disponibile pubblicamente. - Su QoreChain, registra una sola volta la chiave post-quantistica del relayer con
qorel keys register-pqc, e controllaqorel keys pqc-statusprima di avviare.
1. systemd sull'host del validatore
-
Installa il pacchetto
.debo.rpm(Installazione). Crea un utente di sistemaqorel, separato dall'utente del validatore, e unqorel.servicerinforzato. -
Modifica
/etc/qorel/config.tomlcon gli endpoint del nodo locale. -
Aggiungi la chiave del relayer come utente
qorele registra la chiave post-quantistica: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 -
Esegui
systemctl enable --now qorel. -
Dai a QORel una priorità inferiore a quella del nodo, in modo che non competa mai con la produzione dei blocchi:
# /etc/systemd/system/qorel.service.d/priority.conf[Service]Nice=10CPUWeight=20MemoryMax=1GPoi
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 }
Aggiungi le chiavi una sola volta con la stessa immagine, per esempio:
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 poi il file della mnemonica.
3. Kubernetes
Conserva la mnemonica nel tuo secret store e ricostruisci le chiavi all'avvio:
- Un init container esegue
qorel keys addin unemptyDirconmedium: Memory(registra la chiave post-quantistica una sola volta, a mano, in anticipo). - Il container principale esegue
qorel startsullo stesso volume.
In questo modo le chiavi esistono solo in 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 }
Il key_store_folder della configurazione deve puntare a /home/nonroot/.hermes/keys (oppure essere lasciato non impostato).
Monitoraggio
Abilita la telemetria e imposta alert su pacchetti in sospeso, saldi del relayer, stato della chiave post-quantistica e aggiornamento dei client. L'elenco è in Monitoraggio.
Come accedere
- Rete. Testnet
qorechain-diana. Il relayer si connette alle porte locali del tuo nodo e agli endpoint dell'altra chain. - Account. Un account relayer dedicato su ciascuna chain, finanziato per le commissioni; mai la chiave operatore del validatore.
- Host. Linux con systemd per la configurazione 1; Docker con rete host per la configurazione 2; un cluster con un
emptyDirin memoria per la configurazione 3. - Costo. Solo commissioni. Gli esempi qui sopra limitano il relayer a 1 CPU e 1 GiB di memoria.
Dove è pubblicato
I pacchetti, l'immagine container e il codice sorgente sono elencati in Installazione. La configurazione di esempio è packaging/config.example.toml in qorechain/QORel.
Limiti e problemi noti
- Non è un compito del validatore. Il relay è opzionale e separato dalla validazione; un relayer fermo non influisce sul consenso.
- Un processo per chiave. Gli aggiornamenti progressivi che avviano un secondo pod con la stessa chiave rompono il sequence dell'account; l'esempio usa
Recreate. - Registrazione manuale.
keys register-pqcè un passaggio manuale una tantum; l'init container di Kubernetes ricostruisce soltanto le chiavi. - Solo testnet. Non esiste ancora un canale mainnet su cui fare relay.