Aller au contenu principal

Exécution d'un nœud

Ce guide couvre l'exécution d'un déploiement QoreChain nœud uniquement — un nœud complet ou RPC qui synchronise la chaîne et expose des points de terminaison pour l'intégration, sans fonctions de validateur. Il s'adresse aux exchanges (CEX), aux backends de portefeuilles, aux indexeurs et aux intégrateurs qui ont besoin d'un accès fiable en lecture/écriture au réseau, mais qui ne signent pas de blocs.

remarque

Pour la production de blocs, le staking, le slashing et la classification des pools, voir Exécution d'un validateur. Un déploiement nœud uniquement ne détient jamais de clé de consensus de validateur et n'apparaît jamais dans l'ensemble actif.

attention

Les binaires, le genesis et les snapshots sont publiés sur download.qore.host avec des sommes de contrôle SHA-256. Vérifiez toujours les sommes de contrôle avant d'installer ou d'extraire, et ne vérifiez les dépôts que par rapport à votre propre nœud synchronisé.

Source de vérité : le manifeste en direct

Le binaire actuel, le genesis, les pairs, les seeds et un point de confiance de state-sync sont publiés sous forme de manifeste JSON, actualisé en direct — ne codez pas en dur une version de binaire, une somme de contrôle ou un nom de fichier de snapshot dans vos scripts d'installation, car ils deviennent obsolètes dès qu'une nouvelle version est publiée :

  • Mainnet : https://download.qore.host/mainnet/latest.json
  • Testnet : https://download.qore.host/testnet/latest.json

Les champs du manifeste incluent binary (url + sha256), genesis (url + sha256 + sizeBytes), peers, seeds, p2pPort, stateSync (un point de confiance actualisé toutes les heures) et minCompatible. Les étapes d'installation et de connexion ci-dessous récupèrent ce manifeste et utilisent ses valeurs actuelles.

v3.1.94 ou ultérieure requise pour un nœud rejoignant le réseau à neuf

Un nœud qui se synchronise depuis le genesis ou qui rejoue depuis une archive/un snapshot doit être en v3.1.94 ou ultérieure, pour deux raisons cumulées : la v3.1.92 a corrigé un bug de mesure du gaz qui bloquait sinon le rejeu au premier bloc contenant une transaction, et le mainnet a depuis franchi la mise à niveau de gouvernance v3.1.94 (un plafond strict sur l'émission, appliqué à la hauteur 2 122 074) — un nœud sans le gestionnaire de cette mise à niveau s'arrête à nouveau en essayant de rejouer au-delà de cette même hauteur. La v3.1.95 est la version actuellement recommandée (une mise à jour de sécurité continue, sans rupture de consensus) ; minCompatible vaut 3.1.94. Le manifeste est promu de façon délibérée (d'abord sur testnet, puis sur mainnet après une période de rodage) et a déjà pris du retard par rapport à ce plancher — vérifiez son champ "version" avant de faire confiance à binary.url, et repliez-vous sur les releases GitHub de qorechain-core ou sur une construction depuis les sources s'il est en retard.


Nœud vs Validateur

AspectNœud uniquement (ce guide)Validateur
Clé de consensusAucuneClé de consensus ed25519 (doit être sécurisée)
Production de blocsNonOui — propose et signe les blocs
Staking / slashingNon applicableAuto-délégation, risque de slashing
Objectif principalServir RPC/REST/gRPC/EVM/SVM aux intégrationsSécuriser le réseau, gagner des récompenses
Exposition publiquePoints de terminaison RPC/EVM généralement exposésValidateur caché derrière des nœuds sentinelles

Réseaux cibles

RéseauChain IDEVM chain IDNotes
Mainnetqorechain-vladi9801 (hex 0x2649)Principal — en direct depuis le 7 juin 2026
Testnetqorechain-diana9800Répétez d'abord vos intégrations ici

Remplacez le --chain-id approprié pour votre réseau cible tout au long de ce guide. Les exemples utilisent le mainnet par défaut.


Matériel recommandé

ProfilCPURAMDisque (SSD NVMe)Réseau
Nœud RPC élagué (pruned)4 cœurs16 Go500 Go+100 Mbps+
Nœud complet/archive8 cœurs32 Go2 To+ (croît avec le temps)1 Gbps
Intégration exchange8 cœurs32 Go2 To+ avec marge1 Gbps

Un SSD NVMe est fortement recommandé — l'état de la chaîne et les stores EVM/SVM sont intensifs en E/S. Les nœuds archive (sans élagage, indexation complète des transactions) croissent en continu ; prévoyez une marge de disque et une surveillance.


Déploiement

Docker Compose

Un déploiement nœud uniquement avec Docker Compose. Il n'existe pas encore d'image qorechaind publiée publiquement à récupérer — construisez-en une vous-même à partir du Dockerfile du dépôt et étiquetez-la avec la version de chaîne en direct (v3.1.95 sur mainnet), puis montez un volume persistant pour les données de la chaîne :

git clone https://github.com/qorechain/qorechain-core.git
cd qorechain-core
docker build -t qorechain-node:v3.1.95 .
# docker-compose.yml
services:
qorechain-node:
image: qorechain-node:v3.1.95
container_name: qorechain-node
restart: unless-stopped
command: ["start", "--home", "/root/.qorechaind"]
volumes:
- qorechain-data:/root/.qorechaind
ports:
- "26657:26657" # RPC
- "26656:26656" # P2P
- "1317:1317" # REST
- "9090:9090" # gRPC
- "8545:8545" # EVM JSON-RPC
- "8546:8546" # EVM WebSocket
- "8899:8899" # SVM RPC
- "26660:26660" # Prometheus

volumes:
qorechain-data:

Initialisez le répertoire de données une fois (le genesis et la configuration des pairs sont couverts ci-dessous), puis démarrez :

docker compose up -d
docker compose logs -f qorechain-node

systemd

Pour une installation bare-metal, exécutez qorechaind sous systemd :

# /etc/systemd/system/qorechaind.service
[Unit]
Description=QoreChain node
After=network-online.target
Wants=network-online.target

[Service]
User=qorechain
ExecStart=/usr/local/bin/qorechaind start --home /var/lib/qorechaind
Restart=on-failure
RestartSec=5
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now qorechaind
sudo journalctl -u qorechaind -f

Rejoindre le réseau

1. Initialiser

qorechaind init my-node --chain-id qorechain-vladi

2. Récupérer le manifeste

curl -s https://download.qore.host/mainnet/latest.json -o latest.json
# testnet: https://download.qore.host/testnet/latest.json

Utilisez ce fichier comme source pour les valeurs du binaire, du genesis et des pairs dans les étapes ci-dessous — vérifiez jq -r .minCompatible latest.json, mais rappelez-vous que le plancher v3.1.94 ci-dessus s'applique même si ce champ est en retard.

3. Télécharger et vérifier le genesis

GENESIS_URL=$(jq -r .genesis.url latest.json)
GENESIS_SHA256=$(jq -r .genesis.sha256 latest.json)

curl -fsSL "$GENESIS_URL" -o ~/.qorechaind/config/genesis.json
echo "${GENESIS_SHA256} $HOME/.qorechaind/config/genesis.json" | sha256sum -c -

# Vérification croisée avec le genesis servi en direct par la chaîne :
curl -s https://rpc.qore.host/genesis | jq '.result.genesis' > /tmp/genesis-live.json

4. Configurer les pairs et le plancher de frais

Lisez les pairs et seeds actuels depuis le manifeste plutôt que de coder en dur les identifiants de nœuds et les hôtes — ceux-ci tournent régulièrement :

PEERS=$(jq -r '.peers | join(",")' latest.json)
SEEDS=$(jq -r '.seeds | join(",")' latest.json)

Ouvrez ~/.qorechaind/config/config.toml et réglez persistent_peers (et seeds) sur ces valeurs :

persistent_peers = "<value of $PEERS>"
seeds = "<value of $SEEDS>"

Puis réglez le prix minimum du gaz dans ~/.qorechaind/config/app.toml (plancher de frais réseau : 0.1uqor) :

minimum-gas-prices = "0.1uqor"

5. Démarrer la synchronisation

qorechaind start --minimum-gas-prices=0.1uqor

Démarrage rapide (Fast Bootstrap)

La synchronisation depuis le genesis peut prendre beaucoup de temps. Pour les intégrations, utilisez le state sync ou un snapshot pour un démarrage à froid rapide.

State sync

Le state sync récupère un snapshot récent de l'état de l'application depuis des serveurs RPC de confiance au lieu de rejouer chaque bloc. Configurez la section [statesync] dans config.toml :

[statesync]
enable = true
rpc_servers = "https://rpc.qore.host:443,https://rpc.qore.host:443"
trust_height = <TRUSTED_BLOCK_HEIGHT>
trust_hash = "<TRUSTED_BLOCK_HASH>"
trust_period = "168h0m0s"

Prenez trust_height / trust_hash depuis le champ stateSync du manifeste — il est actualisé toutes les heures, c'est donc la source à privilégier :

TRUST_HEIGHT=$(jq -r .stateSync.trustHeight latest.json)
TRUST_HASH=$(jq -r .stateSync.trustHash latest.json)

En solution de repli/alternative, vous pouvez dériver vous-même une hauteur et un hash de confiance depuis le RPC public :

curl -s https://rpc.qore.host/block | jq -r '.result.block.header.height, .result.block_id.hash'

Restauration à partir d'un snapshot

Alternativement, téléchargez le snapshot de données de chaîne publié, vérifiez sa somme de contrôle, puis extrayez-le par-dessus votre répertoire de données. Le manifeste ne porte pas actuellement de pointeur de snapshot, donc consultez le listing en direct sur download.qore.host pour le nom de fichier et la somme de contrôle actuels plutôt que d'en coder un en dur :

# Remplacez par le nom de fichier et la somme de contrôle actuels du listing download.qore.host
curl -fsSL https://download.qore.host/<current-snapshot-filename>.tar.gz -o snapshot.tar.gz
sha256sum snapshot.tar.gz # comparez à la somme de contrôle publiée avec le fichier

tar xzf snapshot.tar.gz -C ~/.qorechaind/
qorechaind start --minimum-gas-prices=0.1uqor
remarque

Les snapshots sont publiés sous des noms de fichiers horodatés par hauteur qui changent régulièrement — consultez download.qore.host pour le snapshot le plus récent et sa somme de contrôle SHA-256, et vérifiez toujours avant d'extraire. N'oubliez pas que le minimum v3.1.94 ci-dessus s'applique aussi au rejeu depuis un snapshot.


Élagage et indexation

Ajustez l'élagage (pruning) et l'indexation des transactions selon votre intégration. Les exchanges qui ont besoin d'un historique complet des transactions doivent fonctionner avec un élagage minimal et un indexeur de transactions activé.

Élagage (app.toml)

# Conserve uniquement l'état récent — empreinte disque la plus faible
pruning = "default"

# Conserve tout — requis pour les requêtes archive / d'historique complet
# pruning = "nothing"
pruningComportementCas d'usage
defaultConserve l'état récent, élague le resteNœud RPC, consultations de solde/état
nothingConserve tout l'état historiqueNœud archive, historique complet
customValeurs de conservation/intervalle définies par l'opérateurRétention ajustée

Indexation des transactions (config.toml)

[tx_index]
indexer = "kv"

Réglez indexer = "kv" (ou un indexeur plus riche) afin que les transactions soient interrogeables par hash et par événement — essentiel pour les exchanges qui réconcilient dépôts et retraits. Réglez indexer = "null" uniquement si vous n'avez pas besoin de requêtes historiques sur les transactions.


Exposition des points de terminaison pour l'intégration

Activez et liez les serveurs API dont les intégrateurs ont besoin dans app.toml :

[api]
enable = true
address = "tcp://0.0.0.0:1317"

[grpc]
enable = true
address = "0.0.0.0:9090"

[json-rpc]
enable = true
address = "0.0.0.0:8545"
ws-address = "0.0.0.0:8546"
api = "eth,net,web3,qor"

Et l'écouteur RPC dans config.toml :

[rpc]
laddr = "tcp://0.0.0.0:26657"
Point de terminaisonPortUtilisation pour
RPC26657Diffusion de transactions, consultation de blocs/statut
REST1317Requêtes HTTP sur l'état de la chaîne
gRPC9090Accès programmatique à haut débit
EVM JSON-RPC8545Intégrations compatibles Ethereum (chain ID 9801)
EVM WS8546Abonnements aux événements EVM
SVM RPC8899Intégrations compatibles Solana
attention

N'exposez jamais RPC, EVM JSON-RPC ou gRPC directement sur l'internet public sans reverse proxy, limitation de débit, authentification et pare-feu. Ne liez 0.0.0.0 que derrière une couche d'entrée contrôlée.


Surveillance de la santé et de la synchronisation

Statut de synchronisation

curl -s localhost:26657/status | jq '.result.sync_info.catching_up'
  • true — encore en synchronisation.
  • false — entièrement synchronisé et servant l'état actuel.
# Hauteur la plus récente et réseau
curl -s localhost:26657/status | jq '.result.sync_info.latest_block_height, .result.node_info.network'

Le champ network doit indiquer qorechain-vladi (mainnet) ou qorechain-diana (testnet).

Prometheus et Grafana

QoreChain expose des métriques Prometheus sur le port 26660 :

http://localhost:26660/metrics

Récupérez-les avec n'importe quel collecteur compatible Prometheus. Si vous exécutez la stack de surveillance Docker Compose, Grafana est disponible sur http://localhost:3001 — définissez vos propres identifiants à la première connexion. Suivez le retard de hauteur de bloc, le nombre de pairs et l'utilisation des ressources ; alertez lorsque catching_up reste à true ou que le nombre de pairs tombe à zéro.

Vérification du point de terminaison EVM

curl -s -X POST http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'
# Attendu : "0x2649" (9801) sur mainnet

Bonnes pratiques opérationnelles

  1. Épinglez la version de la chaîne. Exécutez le tag en direct (v3.1.95 sur mainnet) et suivez les versions officielles pour les mises à niveau coordonnées.

  2. Faites tourner des nœuds redondants. Faites fonctionner au moins deux nœuds derrière un répartiteur de charge afin qu'un simple redémarrage ou une resynchronisation n'interrompe pas le trafic d'intégration.

  3. Vérifiez le genesis et les snapshots. Validez toujours le SHA-256 du genesis et toute somme de contrôle de snapshot par rapport à la version officielle avant de démarrer.

  4. Protégez les points de terminaison publics. Placez RPC/EVM/gRPC derrière un reverse proxy, une limitation de débit et un pare-feu. N'exposez jamais un RPC en écriture non authentifié sur l'internet.

  5. Adaptez l'élagage au besoin. Utilisez pruning = "nothing" avec tx_index = "kv" pour les exchanges qui réconcilient l'historique complet des dépôts/retraits ; utilisez default pour des consultations légères.

  6. Surveillez la synchronisation en continu. Alertez sur le retard de hauteur de bloc, l'absence de pairs et un nœud bloqué en catching_up.

Pour un accès en lecture ultra-léger sans exécuter un nœud complet, voir la documentation Light Node.


Dépannage

Un nœud arrêté avant la mise à niveau ne reprend pas après un remplacement de binaire

Si votre nœud était déjà arrêté ou bloqué avant que vous ne mettiez à niveau son binaire, il ne suffit pas de déposer le nouveau binaire et de redémarrer — le nœud a des résultats ABCI obsolètes mis en cache depuis l'exécution précédente et ne réexécutera pas le bloc à l'origine de l'arrêt. Effectuez un rollback explicite avant de redémarrer :

qorechaind rollback --home <HOME>
systemctl restart <unit>

La commande est qorechaind rollback (une sous-commande de premier niveau) — il n'existe pas de sous-commande comet rollback ni d'option --hard pour celle-ci.

La restauration d'un snapshot boucle en crash à cause d'un priv_validator_state.json manquant

Une archive/un snapshot publié n'inclut pas data/priv_validator_state.json, et le nœud refuse de démarrer sans lui. S'il est absent après une restauration de snapshot, créez-le — mais uniquement s'il n'existe pas déjà. N'écrasez jamais un fichier réel : sur un validateur, ce fichier est le garde-fou anti-double-signature, et l'écraser risque de provoquer une double signature.

echo '{"height":"0","round":0,"step":0}' > <HOME>/data/priv_validator_state.json

Étapes suivantes