Passa al contenuto principale

Meccanismo di Consenso

QoreChain implementa il Triple-Pool Composite Proof-of-Stake (CPoS), un meccanismo di consenso che classifica i validatori in tre pool specializzati e utilizza una selezione ponderata in base alla reputazione per bilanciare sicurezza, decentralizzazione e prestazioni. Il CPoS è implementato nel modulo x/qca e opera al di sopra del QoreChain Consensus Engine.

Il livello di ottimizzazione tramite apprendimento per rinforzo che regola i parametri di consenso in fase di esecuzione porta il marchio PRISM (Policy-driven Reinforcement-learning for Intelligent State Machines). Per i dettagli consulta il PRISM Consensus Engine.

Il diagramma seguente riassume un ciclo di blocco/consenso del Triple-Pool CPoS sul QoreChain Consensus Engine e mostra dove PRISM retroagisce sui parametri regolabili di x/qca.


Architettura Triple-Pool

Il CPoS suddivide l'insieme attivo dei validatori in tre pool sulla base di metriche di reputazione, stake e delega. Ogni pool svolge un ruolo distinto nel processo di consenso.

Classificazione dei pool

PoolCriteriPeso di selezione
RPoS (Reputation Proof-of-Stake)Punteggio di reputazione >= 70° percentile E stake auto-bonded >= mediana40%
DPoS (Delegated Proof-of-Stake)Delega totale >= 10.000 QOR35%
PoS (Standard Proof-of-Stake)Tutti i restanti validatori attivi25%

La classificazione viene valutata con la seguente priorità: RPoS > DPoS > PoS. Un validatore che soddisfa i requisiti sia per RPoS che per DPoS viene assegnato a RPoS.

La riclassificazione avviene ogni 1.000 blocchi. Ad ogni epoca di riclassificazione:

  1. Raccolta dei punteggi di reputazione — I punteggi di reputazione vengono raccolti dal modulo x/reputation per tutti i validatori attivi.
  2. Calcolo della soglia di reputazione — La soglia di reputazione al 70° percentile viene calcolata dalla distribuzione ordinata dei punteggi.
  3. Calcolo dello stake auto-bonded mediano — Lo stake auto-bonded mediano viene calcolato dalla distribuzione ordinata dello stake.
  4. Riassegnazione dei validatori — Ogni validatore attivo viene riassegnato al pool di priorità più alta per cui soddisfa i requisiti.
  5. Assegnazione predefinita — I validatori non classificati (quelli non ancora valutati) vengono assegnati per impostazione predefinita al pool PoS.

Selezione del proponente ponderata per pool

La selezione del proponente del blocco segue un processo deterministico in due fasi.

Fase 1: Selezione del pool

Un valore casuale deterministico seleziona quale pool propone il prossimo blocco:

seed = SHA256(lastBlockHash || height || "pool")
randVal = uint64(seed[:8]) / MaxUint64 // uniform in [0, 1)

Il pool viene scelto confrontando randVal con le soglie di peso cumulativo:

  • randVal < 0.40 → pool RPoS
  • 0.40 <= randVal < 0.75 → pool DPoS
  • randVal >= 0.75 → pool PoS

Fase 2: Selezione all'interno del pool

All'interno del pool selezionato, il proponente viene scelto tramite una CDF ponderata per reputazione × stake. Per ogni validatore nel pool:

  1. Il punteggio di reputazione r viene recuperato da x/reputation.
  2. Il peso composito è w = r * tokens.
  3. Una funzione di distribuzione cumulativa (CDF) viene costruita a partire da tutti i pesi compositi.
  4. Il proponente viene selezionato utilizzando un'estrazione casuale deterministica rispetto alla CDF, inizializzata dall'hash e dall'altezza del blocco.

Comportamento di fallback

Se il pool selezionato è vuoto, il sistema ripiega sul pool PoS. Se anche il pool PoS è vuoto, la selezione ripiega su una selezione ponderata per reputazione sull'intero insieme attivo dei validatori.


Bonding Curve personalizzata

Le ricompense dei validatori vengono calcolate utilizzando una bonding curve multifattoriale che incentiva la partecipazione a lungo termine, l'alta reputazione e l'allineamento con le fasi di crescita del protocollo.

Formula

R(v, t) = beta * S_v * (1 + alpha * ln(1 + L_v)) * Q(r_v) * P(t)

Definizioni dei fattori

FattoreSimboloDescrizionePredefinito
Moltiplicatore base ricompensabetaScala l'entità complessiva della ricompensa1.0
Stake auto-bondedS_vI token auto-bonded del validatore (uqor)--
Sensibilità alla fedeltàalphaControlla quanto la durata della fedeltà amplifica le ricompense0.1
Durata della fedeltàL_vNumero di blocchi consecutivi in cui il validatore è stato attivo--
Qualità della reputazioneQ(r_v)Mappa la reputazione r su un moltiplicatore di ricompensa in [0.75, 1.25]--
Fase del protocolloP(t)Moltiplicatore dipendente dalla fase per avviare o moderare le ricompenseVedi sotto

Funzione di qualità della reputazione

Q(r) = 1 + 0.5 * (r - 0.5)

Il risultato viene limitato all'intervallo [0.75, 1.25]:

Punteggio di reputazioneQ(r)
0.00.75
0.250.875
0.51.0
0.751.125
1.01.25

Moltiplicatori della fase del protocollo

FaseP(t)Descrizione
Genesis1.5Ricompense più elevate per avviare l'insieme dei validatori
Growth1.0Ricompense standard durante l'espansione della rete
Mature0.8Emissione ridotta man mano che la rete si stabilizza

Matematica deterministica

Il calcolo di ln(1 + L_v) utilizza un'approssimazione in serie di Taylor con riduzione dell'argomento (TaylorLn1PlusX), operando interamente su decimali a precisione fissa LegacyDec. Non viene utilizzata aritmetica in virgola mobile nei calcoli delle ricompense critici per il consenso.


Progressive Slashing

QoreChain sostituisce le aliquote di slashing fisse con un modello di penalità progressivo che intensifica le conseguenze per i recidivi, consentendo al contempo alle infrazioni di decadere nel tempo.

Formula

penalty = base_rate * escalation_factor^effective_count * severity_factor

Decadimento temporale

Le infrazioni passate contribuiscono con un peso decrescente al conteggio effettivo:

effective_count = SUM( 0.5^(blocks_since_i / decay_halflife) )

Per ogni infrazione passata i, il contributo si dimezza ogni decay_halflife blocchi (predefinito: 100.000). Ciò significa che una singola vecchia infrazione avvenuta 200.000 blocchi fa contribuisce solo con 0,25 al conteggio effettivo.

Fattori di gravità

Tipo di infrazioneFattore di gravità
Downtime1.0
Double Sign2.0
Light Client Attack3.0

Penalità massima

La penalità è limitata al 33% per evento di slash, indipendentemente da quante infrazioni passate un validatore ha accumulato.

Esempio di calcolo

Un validatore con 2 infrazioni precedenti (una avvenuta 50.000 blocchi fa, una 150.000 blocchi fa) commette un double-sign:

  1. Contributi di decadimento:
    • Infrazione 1: 0.5^(50000 / 100000) = 0.5^0.5 = 0.707
    • Infrazione 2: 0.5^(150000 / 100000) = 0.5^1.5 = 0.354
    • effective_count = 0.707 + 0.354 = 1.061
  2. Escalation: 1.5^1.061 = 1.516
  3. Penalità: 0.01 * 1.516 * 2.0 = 0.0303 (3,03%)

Confronta questo con un trasgressore alla prima infrazione: 0.01 * 1.5^0 * 2.0 = 0.02 (2,0%).


Governance QDRW

La governance di QoreChain utilizza la Quadratic Delegation with Reputation Weighting (QDRW) per prevenire la cattura plutocratica premiando al contempo i partecipanti di lungo termine della rete.

Formula del potere di voto

VP(v) = sqrt(staked + 2 * xQORE) * ReputationMultiplier(r)

Dove:

  • staked = i token QOR bonded del votante
  • xQORE = il saldo xQORE del votante (derivato dallo staking a lungo termine)
  • 2 = il moltiplicatore di peso xQORE (configurabile dalla governance)
  • r = il punteggio di reputazione del votante da x/reputation

Moltiplicatore di reputazione

Il moltiplicatore di reputazione mappa r in [0, 1] su un moltiplicatore in [0.5, 2.0] tramite una curva sigmoidale:

ReputationMultiplier(r) = 0.5 + 1.5 * sigmoid(6 * (r - 0.5))
Punteggio di reputazioneMoltiplicatore
0.00.50
0.10.52
0.20.58
0.30.71
0.40.93
0.51.25
0.61.57
0.71.79
0.81.92
0.91.98
1.02.00

Scalatura quadratica

La funzione radice quadrata garantisce che il potere di voto scali in modo sub-lineare con lo stake. Un votante con 4 volte lo stake di un altro votante riceve solo 2 volte il potere di voto, non 4 volte. Ciò impedisce ai grandi detentori di token di dominare le decisioni di governance.

Matematica deterministica

IntegerSqrt utilizza il metodo di Newton con precisione LegacyDec. SigmoidApprox utilizza una ExpApprox in serie di Taylor con 12 termini. Tutta la matematica della governance è completamente deterministica su tutti i nodi validatori.


Parametri QCA

La tabella seguente elenca tutti i parametri configurabili dalla governance nel modulo x/qca:

Parametri principali

ParametroTipoPredefinitoDescrizione
use_reputation_weightingbooltrueAbilita la selezione del proponente ponderata per reputazione
min_reputation_scorefloat640.1Punteggio di reputazione minimo per la partecipazione attiva

Configurazione dei pool

ParametroTipoPredefinitoDescrizione
classification_intervaluint641000Blocchi tra le riclassificazioni dei pool
weight_rposLegacyDec0.40Peso di selezione del pool RPoS
weight_dposLegacyDec0.35Peso di selezione del pool DPoS
min_delegation_dposuint6410,000,000,000Delega minima per DPoS (10.000 QOR in uqor)
rep_percentile_rposuint6470Soglia di percentile di reputazione per RPoS

Configurazione della bonding curve

ParametroTipoPredefinitoDescrizione
alphaLegacyDec0.1Coefficiente di sensibilità alla fedeltà
betaLegacyDec1.0Moltiplicatore base della ricompensa
phase_multiplierLegacyDec1.5Moltiplicatore di ricompensa della fase del protocollo (fase Genesis)

Configurazione dello slashing

ParametroTipoPredefinitoDescrizione
base_rateLegacyDec0.01Aliquota base di slash (1%)
escalation_factorLegacyDec1.5Base di escalation progressiva
max_penaltyLegacyDec0.33Penalità massima per evento (33%)
decay_halflifeuint64100,000Blocchi per l'emivita del peso delle infrazioni

Configurazione della governance QDRW

ParametroTipoPredefinitoDescrizione
enabledboolfalseAbilita il conteggio della governance QDRW
xqore_multiplierLegacyDec2.0Peso xQORE rispetto ai token staked
rep_min_multiplierLegacyDec0.5Moltiplicatore di reputazione minimo
rep_max_multiplierLegacyDec2.0Moltiplicatore di reputazione massimo

Correlati