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​