Aller au contenu principal

Moteur de consensus PRISM

QoreChain intègre PRISM (Policy-driven Reinforcement-learning for Intelligent State Machines), une couche d'optimisation par apprentissage par renforcement, directement dans la couche de consensus via le module x/rlconsensus. PRISM observe les métriques de la chaîne tous les N blocs, exécute une inférence à travers un réseau de neurones en virgule fixe et propose des ajustements des paramètres de consensus — le tout de manière déterministe, sans aucune arithmétique en virgule flottante dans les chemins critiques pour le consensus.

La boucle d'optimisation PRISM : observer l'état de la chaîne, exécuter l'inférence de la politique, borner et appliquer les changements de paramètres, puis réinjecter le résultat.


Vue d'ensemble de l'architecture

PRISM se compose de quatre éléments :

  1. Collecteur d'observations — Rassemble des vecteurs d'état de chaîne à 25 dimensions à des intervalles configurables.
  2. Réseau de politique (MLP) — Un perceptron multicouche natif en Go qui mappe les observations vers des actions.
  3. Calculateur de récompense — Évalue la qualité des changements de paramètres à l'aide d'une fonction multi-objectif pondérée.
  4. Disjoncteur — Surveille la santé de la chaîne et annule tous les paramètres ajustés par PRISM si une instabilité est détectée.

Tous les éléments opèrent dans le cycle de vie ABCI et produisent des sorties déterministes et vérifiables sur l'ensemble des nœuds validateurs.


Réseau de politique

Le réseau de politique est un perceptron multicouche (MLP) à propagation avant implémenté entièrement en Go avec une arithmétique en virgule fixe int64 (mise à l'échelle par 10^8).

Architecture du réseau

PropriétéValeur
Dimensions d'entrée25
Couches cachées2
Tailles des couches cachées256, 256
Dimensions de sortie5
Activation (cachée)ReLU
Activation (sortie)tanh
Nombre total de paramètres73,733
Précisionvirgule fixe int64 (mise à l'échelle par 10^8)

Décomposition du nombre de paramètres

Layer 1: 25 * 256 + 256 = 6,656 (input -> hidden_1)
Layer 2: 256 * 256 + 256 = 65,792 (hidden_1 -> hidden_2)
Layer 3: 256 * 5 + 5 = 1,285 (hidden_2 -> output)
Total: 73,733

Arithmétique en virgule fixe

Tous les calculs du MLP utilisent des valeurs int64 mises à l'échelle par FixedPointScale = 10^8. Cela élimine le non-déterminisme dû aux différences d'arrondi en virgule flottante IEEE 754 entre plateformes matérielles.

  • Multiplication : fixMul(a, b) = (a / SCALE) * b + (a % SCALE) * b / SCALE (scindée pour éviter le dépassement)
  • ReLU : relu(x) = max(0, x)
  • tanh : Approximant de Padé tanh(x) ~ x * (3*S - x^2) / (3*S + x^2) pour |x| <= 2.5*SCALE, borné à +/- SCALE sinon

Les poids de la politique sont stockés on-chain sous forme de vecteur aplati []int64 et peuvent être mis à jour via une proposition de gouvernance.


Vecteur d'observation

PRISM collecte un vecteur d'observation à 25 dimensions à chaque intervalle d'observation (par défaut : tous les 10 blocs).

IndexDimensionDescription
0block_utilizationGas de bloc utilisé / limite de gas de bloc
1tx_countNombre de transactions dans le bloc
2avg_tx_sizeTaille moyenne des transactions en octets
3block_timeTemps écoulé depuis le bloc précédent (ms)
4block_time_deltaTemps de bloc moins le temps de bloc cible (ms)
5gas_price_50thPrix médian du gas
6gas_price_95thPrix du gas au 95e centile
7mempool_sizeNombre de transactions en attente
8mempool_bytesTotal d'octets des transactions en attente
9validator_countNombre de validateurs actifs
10validator_giniCoefficient de Gini de la distribution du pouvoir des validateurs
11missed_block_ratioFraction de validateurs ayant manqué la signature
12avg_commit_latencyLatence moyenne du round de commit (ms)
13max_commit_latencyLatence maximale du round de commit (ms)
14precommit_ratioFraction de précommits reçus
15failed_tx_ratioFraction de transactions échouées
16avg_gas_per_txGas moyen consommé par transaction
17reward_per_validatorRécompense moyenne par validateur (uqor)
18slash_countNombre d'événements de slashing dans la fenêtre d'observation
19jail_countNombre d'événements d'emprisonnement dans la fenêtre d'observation
20inflation_rateTaux d'émission actuel
21bonded_ratioTokens bondés / offre totale
22reputation_meanScore de réputation moyen sur les validateurs actifs
23reputation_stddevÉcart-type des scores de réputation
24mev_estimateMEV extrait estimé (heuristique)

Toutes les valeurs sont stockées sous forme de représentations textuelles LegacyDec et converties en virgule fixe int64 avant l'inférence.


Espace d'action

La sortie du MLP est un vecteur d'action à 5 dimensions, où chaque dimension représente un changement proposé pour un paramètre de consensus. L'activation tanh contraint les sorties brutes à [-1, 1], qui sont ensuite mises à l'échelle par des bornes spécifiques au mode.

IndexDimension d'actionDescription
0block_time_deltaChangement proposé du temps de bloc cible (ms)
1gas_price_deltaChangement proposé du prix de gas de base
2validator_set_size_deltaChangement proposé de la taille cible de l'ensemble des validateurs (journalisé uniquement, non appliqué)
3pool_weight_rpos_deltaChangement proposé du poids de priorité du pool RPoS
4pool_weight_dpos_deltaChangement proposé du poids de priorité du pool DPoS

Les actions sont bornées aux limites de changement maximal définies par le mode PRISM actuel avant application.


Fonction de récompense

Le signal de récompense évalue dans quelle mesure les changements récents de paramètres ont amélioré la performance de la chaîne. Il est calculé comme une somme pondérée de cinq objectifs :

R = 0.30 * delta_throughput
+ 0.25 * delta_finality
+ 0.20 * delta_decentralization
- 0.15 * mev_estimate
- 0.10 * failed_tx_ratio
ComposantePoidsDirectionMétrique source
Débit+0.30MaximiserChangement de l'utilisation des blocs
Finalité+0.25MaximiserChangement du ratio de précommits
Décentralisation+0.20MaximiserChangement négatif du coefficient de Gini des validateurs
MEV-0.15MinimiserEstimation actuelle du MEV
Transactions échouées-0.10MinimiserRatio actuel de transactions échouées

Les poids de récompense sont configurables par gouvernance et doivent totaliser exactement 1.0.


Modes PRISM

PRISM opère dans l'un des quatre modes, contrôlables via la gouvernance :

ModeIDChangement maxComportement
Shadow00 %Observe et journalise les recommandations uniquement. Aucun paramètre n'est modifié. C'est le mode par défaut.
Conservative1+/- 10 %Applique les changements de paramètres dans des limites étroites. Adapté au déploiement initial en production.
Autonomous2+/- 25 %Applique les changements de paramètres dans des limites plus larges. Pour les réseaux matures avec des politiques validées.
Paused30 %PRISM est complètement inactif. Aucune observation n'est collectée et aucune inférence ne s'exécute.

Les transitions de mode requièrent une proposition de gouvernance. Le chemin de déploiement recommandé est : Shadow → Conservative → Autonomous.


Disjoncteur

Le disjoncteur est un mécanisme de sécurité qui surveille la santé de la chaîne et annule automatiquement tous les paramètres ajustés par PRISM si une instabilité est détectée.

Logique de détection

Le disjoncteur évalue les 50 derniers blocs (configurable via circuit_breaker_window) :

  1. Calculer les deltas de temps de bloc — Pour chaque paire consécutive d'horodatages de bloc, calculer le delta de temps de bloc.
  2. Classer les blocs sains — Un bloc est considéré comme sain si son delta est positif et dans la limite de 2x le temps de bloc cible.
  3. Calculer la fraction saine — Calculer la fraction saine = blocs sains / deltas totaux.

Condition de déclenchement

Si la fraction saine tombe en dessous du seuil (par défaut : 50 %), le disjoncteur se déclenche.

Réponse

Lorsqu'il est déclenché, le disjoncteur :

  1. Annule tous les paramètres appliqués par PRISM (temps de bloc, prix du gas, poids des pools) à leurs valeurs par défaut.
  2. Met PRISM en pause (définit CircuitBreakerActive = true).
  3. Efface la politique en mémoire pour forcer un rechargement à neuf.
  4. Émet un événement circuit_breaker_triggered.

Le disjoncteur se réinitialise automatiquement lorsque la fraction saine repasse au-dessus du seuil lors des évaluations suivantes.


Fonctions consultatives pour les rollups

PRISM fournit des fonctions consultatives pour l'optimisation des paramètres de rollup :

  • SuggestRollupProfile — Analyse les conditions actuelles de la chaîne et suggère des paramètres de configuration de rollup optimaux (temps de bloc, limite de gas, fréquence de règlement).
  • OptimizeRollupGas — Recommande des ajustements de tarification du gas pour les transactions de règlement de rollup en fonction des schémas de congestion de la chaîne principale.

Ces fonctions sont purement informatives et ne modifient pas l'état de la chaîne.


Bibliothèque de mathématiques déterministes

Tous les calculs de PRISM utilisent le package mathutil, qui fournit des alternatives déterministes aux mathématiques en virgule flottante standard :

FonctionDescriptionMéthode
IntegerSqrt(x)Racine carréeMéthode de Newton sur LegacyDec, convergence sur 100 itérations
TaylorLn1PlusX(x)Logarithme naturel ln(1+x)Réduction d'argument + série de Taylor à 15 termes
ExpApprox(x)Exponentielle e^xSérie de Taylor à 12 termes
SigmoidApprox(x)Sigmoïde 1/(1+e^-x)ExpApprox avec symétrie pour les entrées négatives
ReputationMultiplier(r)Mappe [0,1] vers [0.5,2.0]Sigmoïde avec mise à l'échelle et décalage

Toutes les fonctions opèrent sur des valeurs cosmossdk.io/math.LegacyDec, garantissant des résultats identiques sur toutes les plateformes matérielles et versions du compilateur Go.


Paramètres

ParamètreTypeDéfautDescription
enabledbooltrueActive PRISM
observation_intervaluint6410Blocs entre les collectes d'observations
agent_modePrismMode0 (Shadow)Mode opérationnel actuel
max_change_conservativeLegacyDec0.10Changement de paramètre maximal en mode Conservative
max_change_autonomousLegacyDec0.25Changement de paramètre maximal en mode Autonomous
circuit_breaker_windowuint6450Nombre de blocs récents surveillés par le disjoncteur
circuit_breaker_thresholdLegacyDec0.50Fraction minimale de blocs sains avant déclenchement
default_block_time_msint645000Temps de bloc cible par défaut (ms)
default_base_gas_priceLegacyDec100Prix de gas de base par défaut
default_validator_set_sizeuint64100Taille cible par défaut de l'ensemble des validateurs
reward_weight_throughputLegacyDec0.30Poids de récompense pour l'amélioration du débit
reward_weight_finalityLegacyDec0.25Poids de récompense pour l'amélioration de la finalité
reward_weight_decentralizationLegacyDec0.20Poids de récompense pour l'amélioration de la décentralisation
reward_weight_mevLegacyDec0.15Poids de pénalité pour l'extraction de MEV
reward_weight_failed_txsLegacyDec0.10Poids de pénalité pour les transactions échouées

Pour aller plus loin

  • Mécanisme de consensus — la couche de consensus que PRISM optimise.
  • Moteur IA — les services et endpoints IA on-chain plus larges.
  • Tokenomics — comment les signaux RL alimentent les ajustements de récompense et de paramètres.