Aller au contenu principal

Exécution d'un validateur

Ce guide explique comment créer un validateur sur le réseau QoreChain, comprendre le système de classification des pools, enregistrer une clé PQC pour une sécurité résistante au quantique, et surveiller votre nœud.

remarque

Ce guide cible le mainnet qorechain-vladi (EVM chain ID 9801), actif depuis le 7 juin 2026 et exécutant la version de chaîne v3.1.95. Le testnet qorechain-diana (EVM chain ID 9800) est recommandé pour répéter votre configuration avant la mise en production. Remplacez --chain-id par la valeur appropriée pour votre réseau cible.


Prérequis

  • Un nœud qorechaind entièrement synchronisé (voir Connexion au testnet)
  • Un compte approvisionné avec au moins 100 000 QOR (100 000 000 000 uqor) pour l'auto-délégation initiale — ce minimum est appliqué on-chain et create-validator est rejeté en dessous de ce seuil
  • Une licence validator_operator active sur votre compte — voir la note ci-dessous ; sans elle, create-validator échoue avec ErrUnauthorized quel que soit le montant de QOR auto-misé
  • Une bonne connaissance du modèle de Staking et délégation

Création d'un validateur

Verrou de licence : validator_operator

create-validator est soumis à deux contrôles indépendants, tous deux appliqués on-chain, et vous avez besoin des deux — une auto-mise importante ne suffit pas à elle seule :

  1. Auto-mise minimale de 100 000 QOR.
  2. Une licence validator_operator active sur le compte qui soumet la transaction.

Le champ expires_at d'une licence est une hauteur de bloc, pas une date ni une durée — 0 signifie sans expiration. Si elle est absente ou expirée, create-validator échoue avec ErrUnauthorized, quel que soit le montant auto-misé ; c'est la cause la plus fréquente d'un échec inexpliqué malgré un compte bien approvisionné. Ce verrou existe précisément parce que le lane d'exécution EVM ne peut ni le voir ni l'appliquer (un seul décorateur ante à cet endroit le contournerait entièrement) — c'est l'une des raisons pour lesquelles le staking et la validation restent exclusivement sur le lane natif.

qorechaind tx staking create-validator \
--amount 100000000000uqor \
--pubkey $(qorechaind comet show-validator) \
--moniker "my-validator" \
--commission-rate 0.10 \
--commission-max-rate 0.20 \
--commission-max-change-rate 0.01 \
--min-self-delegation 1 \
--from mykey \
--gas auto \
--gas-adjustment 1.3 \
-y
ParamètreDescription
--amountMontant de l'auto-délégation — minimum 100 000 QOR (100000000000uqor)
--pubkeyClé publique de consensus du validateur (ed25519)
--monikerNom lisible pour votre validateur
--commission-rateTaux de commission initial (par ex., 0.10 = 10%)
--commission-max-rateTaux de commission maximum (immuable après création)
--commission-max-change-rateTaux maximum de variation quotidienne de la commission
--min-self-delegationNombre minimum de jetons que l'opérateur doit s'auto-déléguer

Une fois la transaction confirmée, vérifiez votre validateur :

qorechaind query staking validator $(qorechaind keys show mykey --bech val -a)

Classification des pools

QoreChain utilise un système de classification à trois pools géré par le module x/qca (Quantum Consensus Allocation). Tous les 1,000 blocs, les validateurs sont reclassés dans l'un des trois pools en fonction de leur réputation et de leur mise :

PoolCritèresAllocation de blocs
RPoS (Reputation Proof-of-Stake)Réputation >= 70e percentile ET mise >= médiane40% des blocs
DPoS (Delegated Proof-of-Stake)Délégation totale >= 10,000 QOR35% des blocs
PoS (Proof-of-Stake)Tous les autres validateurs actifs25% des blocs

Au sein de chaque pool, les proposants de blocs sont sélectionnés au moyen d'une sélection aléatoire pondérée proportionnelle à leur mise effective. Cette classification garantit que les validateurs à forte réputation et à forte délégation bénéficient d'une représentation équitable, tout en permettant aux plus petits validateurs de participer.

Consulter votre classification de pool

qorechaind query qca pool-classification $(qorechaind keys show mykey --bech val -a)

Via JSON-RPC :

curl -X POST http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "qor_getPoolClassification",
"params": ["qorvaloper1..."],
"id": 1
}'

Courbe de bonding

La récompense de staking d'un validateur est déterminée par une courbe de bonding qui intègre plusieurs facteurs :

R = beta * S * (1 + alpha * log(1 + L)) * Q(r) * P(t)
VariableDescription
RMontant de la récompense
betaTaux de récompense de base
SMise effective
alphaConstante d'échelle de fidélité
LDurée de fidélité (temps de staking continu)
Q(r)Facteur de qualité de réputation, plage [0.75 - 1.25]
P(t)Multiplicateur de phase du protocole (s'ajuste au fil du cycle de vie du réseau)

Points clés à retenir :

  • Bonus de durée de fidélité : Les validateurs qui misent en continu reçoivent des récompenses croissantes grâce au terme logarithmique de fidélité. Cela encourage l'engagement à long terme.
  • Facteur de qualité de réputation : Varie de 0.75 (mauvaise réputation) à 1.25 (excellente réputation). La réputation est calculée à partir du temps de disponibilité, des propositions réussies, de la participation communautaire et de la qualité de validation des transactions.
  • Multiplicateur de phase du protocole : S'ajuste à mesure que le réseau mûrit à travers différentes phases (amorçage, croissance, maturité).

Slashing

Les pénalités de base pour infraction, consultables en direct et à jour au moment de la rédaction :

qorechaind query slashing params
ParamètreValeur
Fenêtre de blocs signés10,000 blocs (environ 6 heures pour s'accumuler)
Minimum signé par fenêtre95% (jail en dessous de ce seuil)
Durée de jail pour indisponibilité600 secondes (10 minutes)
Fraction de slashing pour indisponibilité1% de la mise
Fraction de slashing pour double signature5% de la mise

Le jail est un délai fixe de 10 minutes avec une pénalité fixe — il est distinct du modèle progressif ci-dessous, qui superpose des conséquences supplémentaires et croissantes aux infractions répétées sur un horizon plus long.

Slashing progressif

QoreChain utilise un modèle de slashing progressif qui aggrave les pénalités pour les récidivistes tout en permettant aux validateurs de se rétablir avec le temps :

penalty = base_rate * escalation^effective_count * severity
ParamètreValeur
Pénalité maximale par événement33% de la mise
Demi-vie de décroissance100,000 blocs
Sévérité de l'indisponibilité1.0
Sévérité du double-signing2.0
Sévérité de l'attaque sur client léger3.0
  1. Chaque infraction incrémente le compteur effectif. Chaque infraction (indisponibilité, double signature, etc.) augmente le compteur effectif du validateur, ce qui affecte les pénalités futures.

  2. La pénalité augmente de façon exponentielle. La pénalité augmente en fonction du compteur effectif selon la formule ci-dessus, de sorte que les récidivistes s'exposent à des pénalités bien plus élevées.

  3. Le compteur effectif décroît avec le temps. Le compteur effectif décroît avec une demi-vie de 100,000 blocs (~7 jours à 6 s par bloc), ce qui permet aux validateurs de se rétablir après une période de bon comportement.

  4. Événements isolés et infractions répétées. Un seul événement accidentel d'indisponibilité entraîne une pénalité mineure, tandis que des infractions répétées déclenchent des conséquences exponentiellement croissantes.


Enregistrement de la clé PQC

Enregistrez votre clé publique post-quantique (PQC) — ML-DSA-87 — avant de demander une licence de validateur ou d'exécuter create-validator. Ceci n'est ni optionnel ni automatique : la chaîne exige une signature PQC hybride sur chaque transaction de type cosmos, MsgCreateValidator ne fait pas partie des types de message exemptés, et — contrairement à un compte ordinaire, qui enregistre automatiquement sa clé lors de sa première transaction — un validateur doit exécuter lui-même cette commande, sur son propre nœud, au préalable.

qorechaind tx pqc register-key <pubkey-hex> hybrid \
--from mykey \
--gas 600000 \
-y
ParamètreDescription
<pubkey-hex>Clé publique ML-DSA-87 de 2592 octets encodée en hexadécimal
hybridMode d'enregistrement (hybrid = classique + PQC)
Définir --gas explicitement

La clé publique ML-DSA-87 fait 2 592 octets, et son écriture sur la chaîne dépasse la limite de gas par défaut de 200 000. Sans --gas 600000 (ou plus), la transaction échoue avec une erreur opaque out of gas in location: WritePerByte.

Vérifier l'enregistrement :

qorechaind query pqc key <account-address>

Surveillance

Métriques Prometheus

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

http://localhost:26660/metrics

Principales métriques à surveiller :

MétriqueDescription
qorechain_missed_blocks_totalNombre total de blocs manqués par votre validateur
qorechain_validator_uptimePourcentage de disponibilité sur les N derniers blocs
qorechain_reputation_scoreScore de réputation actuel
qorechain_pool_classificationAttribution de pool actuelle (0=PoS, 1=DPoS, 2=RPoS)
qorechain_consecutive_signedBlocs consécutifs signés
consensus_heightHauteur de bloc actuelle
consensus_roundsTours de consensus pour la hauteur actuelle

Consulter le score de réputation

qorechaind query reputation score $(qorechaind keys show mykey --bech val -a)

Via JSON-RPC :

curl -X POST http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "qor_getReputationScore",
"params": ["qorvaloper1..."],
"id": 1
}'

Vérifications de santé

# Node status
qorechaind status | jq '.sync_info'

# Validator signing info (uptime, missed blocks)
qorechaind query slashing signing-info $(qorechaind comet show-validator)

# Check if your validator is in the active set
qorechaind query staking validators --status bonded | grep "my-validator"

Bonnes pratiques opérationnelles

  1. Utilisez une architecture de nœuds sentinelles. Exécutez votre validateur derrière des nœuds sentinelles pour le protéger des attaques DDoS. N'exposez que les nœuds sentinelles au réseau public.

  2. Mettez en place des alertes. Configurez des alertes pour les blocs manqués, la faible disponibilité et les redémarrages inattendus. Quelques blocs manqués sont normaux ; des manques soutenus déclencheront un slashing.

  3. Maintenez une disponibilité élevée. Le système de réputation récompense une disponibilité constante. Une indisponibilité prolongée dégrade votre facteur de qualité de réputation, réduisant les récompenses.

  4. Maintenez le logiciel à jour. Suivez les versions de QoreChain et appliquez les mises à jour rapidement. Coordonnez-vous avec la communauté des validateurs pour les mises à niveau de la chaîne.

  5. Sécurisez vos clés. Utilisez un module de sécurité matériel (HSM) ou un signataire distant pour la clé de consensus du validateur. Ne stockez jamais les clés sur la même machine que le nœud.

  6. Enregistrez une clé PQC. Préparez votre validateur pour l'avenir contre les menaces quantiques en enregistrant une clé ML-DSA-87.

  7. Surveillez votre pool. Suivez votre classification de pool toutes les 1,000 blocs. Améliorer votre réputation peut vous faire passer de PoS à RPoS, augmentant considérablement les opportunités de proposition de blocs.


Référence des commandes du validateur

# Edit validator metadata
qorechaind tx staking edit-validator \
--moniker "new-name" \
--website "https://myvalidator.com" \
--details "Description of my validator" \
--from mykey -y

# Unjail after downtime slashing
qorechaind tx slashing unjail --from mykey -y

# Delegate additional stake
qorechaind tx staking delegate $(qorechaind keys show mykey --bech val -a) \
500000000uqor --from mykey -y

# Withdraw rewards
qorechaind tx distribution withdraw-rewards $(qorechaind keys show mykey --bech val -a) \
--commission --from mykey -y

Validation des réseaux connectés

Depuis la version de chaîne v3.1.80, un validateur QoreChain peut également contribuer à la validation des réseaux connectés via le bridge. Ceci est soumis à licence et optionnel :

  1. Détenir la licence. Le validateur doit détenir une licence active validator_<chain> (ou qcb_bridge) pour le réseau cible. L'orchestrateur refuse de démarrer un client externe sans elle (fail-closed).
  2. L'activation approvisionne automatiquement le client. Lorsque la licence est activée, QoreChain approvisionne le client du réseau correspondant sur votre nœud — en téléchargeant le client épinglé, en générant sa configuration et en l'exécutant sous l'orchestration de QoreChain. Rien n'est téléchargé avant l'activation.
  3. Fournir les clés et la mise du réseau. Les clés de validateur/mise et de signature du réseau externe sont fournies par l'opérateur pour chaque réseau ; QoreChain fournit le framework de pilotes et le verrou de licence appliqué, mais pas votre mise sur la chaîne externe.

Des pilotes existent pour les 37 réseaux du bridge, classés selon la manière dont un validateur peut participer :

ClasseParticipationExemples
Validateur sans permissionMiser et exécuterSolana, Ethereum, Avalanche, Sui, Aptos, Cardano, Tezos, Algorand, Starknet
Plafonné / élu / admissionMiser, sous réserve d'un plafond ou d'une électionBSC, Polygon, Polkadot, TRON, Sei, Injective, NEAR, Hedera
Nœud complet L2Exécuter un nœud complet (sans staking)Optimism, Base, zkSync Era, Linea, Scroll, Arbitrum
Sans staking / liste de confianceObserver / participer sans stakingBitcoin, Filecoin, XRPL, Stellar
remarque

Les épinglages de version des clients sont fournis au mieux ; vérifiez la version du client en amont pour votre réseau cible avant une activation en production.

Prochaines étapes