Passa al contenuto principale

Sistema di Votazione

Il sistema di votazione per la governance di Savitri consente un processo decisionale on-chain ponderato per token.

Tipi di Voto

TipoSignificato
YesSupporta la proposta
NoSi oppone alla proposta
AbstainConta per il quorum ma non per l'approvazione

Ciclo di Vita della Proposta

Creazione (+ deposito)

Periodo di Revisione (24 ore)
│ Stato Pending, votazione non consentita

Periodo di Votazione (7 giorni predefiniti)
│ Stato ActiveVoting

Conteggio
├── Quorum raggiunto + Approvazione raggiunta → Approvata
├── Quorum raggiunto + Approvazione non raggiunta → Respinta
└── Quorum non raggiunto → Respinta (partecipazione insufficiente)


Esecuzione (se Approvata)

Quorum e Approvazione

SogliaValoreDescrizione
Quorum10%Dei token di voto totali deve partecipare
Approvazione65%Dei voti Sì (esclusi gli Astenuti)

Calcolo

total_votes = yes_votes + no_votes + abstain_votes
quorum_met = total_votes >= (total_vote_supply * 0.10)
approval = yes_votes / (yes_votes + no_votes) >= 0.65

I voti di astensione contano per il quorum ma non per il calcolo dell'approvazione.

Blocco dei Token di Voto

Quando un utente esprime un voto, i suoi token di voto vengono bloccati per la durata del periodo di votazione. Ciò impedisce:

  • Il doppio voto (votare con gli stessi token su più proposte)
  • Il trasferimento di token per votare nuovamente da un indirizzo diverso

I token vengono sbloccati al termine del periodo di votazione.

Meccanismo di Deposito

La creazione di una proposta richiede un deposito (anti-spam):

  • Il deposito viene restituito se la proposta raggiunge il quorum (indipendentemente dall'esito)
  • Il deposito viene sottratto se la proposta non raggiunge il quorum

Azioni della Proposta

AzioneDescrizione
SetParameterModifica i parametri di rete
TransferTreasuryTrasferisci fondi del tesoro
UpgradeContractAggiorna uno smart contract
SetFlPolicyAggiorna i parametri di addestramento FL
ApproveFlModelApprova il modello FL per la produzione
AbortFlRoundInterruzione di emergenza del round di addestramento FL
SlashValidatorPenalizza un validatore inadempiente
CustomAzione di governance personalizzata

Risultati della Votazione

pub struct VotingResult {
pub yes_votes: u64,
pub no_votes: u64,
pub abstain_votes: u64,
pub total_eligible: u64,
pub quorum_reached: bool,
pub approved: bool,
pub participation_rate: f64,
}

Distribuzione dei Token di Voto

I token di voto vengono guadagnati tramite la partecipazione ai nodi:

Livello PoUIntervallo PunteggioToken di Voto / Epoca
Bronze300-49910
Silver500-69925
Gold700-89950
Platinum900-1000100

Tramite SDK

Espressione di un Voto

use savitri_sdk::{ContractClient, Wallet};

let contract = ContractClient::from_url_and_wallet(url, wallet)?;
let gov = contract.governance();

// Vota SÌ sulla proposta #42
let tx = gov.vote(&governance_address, 42, true).await?;

// Vota NO
let tx = gov.vote(&governance_address, 42, false).await?;

Verifica dello Stato della Proposta

let status = gov.get_proposal_status(&governance_address, 42).await?;
println!("Votes: {} for / {} against", status.votes_for, status.votes_against);
println!("Status: {} (executed: {})", status.status, status.executed);

Esecuzione di una Proposta Approvata

Qualsiasi partecipante può attivare l'esecuzione di una proposta approvata:

let tx = gov.execute(&governance_address, 42).await?;

Storage

Famiglia di ColonneChiaveValore
CF_GOVERNANCEproposal_id (u64 LE)Proposta (bincode)
CF_VOTE_TOKENSaddress (32 byte)Saldo token di voto

Tempistiche

FaseDurataStato
Revisione24 orePending
Votazione7 giorni (configurabile)ActiveVoting
EsecuzioneImmediata dopo il conteggioApprovedExecuted