synor/crates/synor-governance/src/lib.rs
2026-01-08 05:22:24 +05:30

102 lines
4.6 KiB
Rust

//! Governance, vesting, and multisig support for Synor blockchain.
//!
//! This crate provides:
//! - **Vesting**: Token lockup with cliff and linear release
//! - **Multisig**: Multi-signature wallets requiring N-of-M approvals
//! - **DAO**: On-chain governance with proposals and voting
//! - **Treasury**: Managed fund pools with spending rules
//!
//! # Architecture
//!
//! ```text
//! ┌─────────────────────────────────────────────────────────────┐
//! │ GOVERNANCE SYSTEM │
//! ├─────────────────────────────────────────────────────────────┤
//! │ │
//! │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
//! │ │ Vesting │ │ Multisig │ │ DAO │ │
//! │ │ Contracts │ │ Wallets │ │ Governance │ │
//! │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
//! │ │ │ │ │
//! │ └─────────────────┼─────────────────┘ │
//! │ │ │
//! │ ┌──────▼───────┐ │
//! │ │ Treasury │ │
//! │ │ Management │ │
//! │ └──────────────┘ │
//! │ │
//! └─────────────────────────────────────────────────────────────┘
//! ```
#![allow(dead_code)]
pub mod dao;
pub mod multisig;
pub mod treasury;
pub mod vesting;
pub use dao::{
DaoStats, Proposal, ProposalId, ProposalState, ProposalSummary, ProposalType, Vote, VoteChoice,
VotingConfig, VotingPower, DAO,
};
pub use multisig::{
MultisigConfig, MultisigTransaction, MultisigTxId, MultisigTxState, MultisigWallet,
};
pub use treasury::{SpendingLimit, Treasury, TreasuryConfig, TreasuryPool, TreasuryPoolId};
pub use vesting::{VestingContract, VestingSchedule, VestingState};
/// Governance configuration parameters.
#[derive(Clone, Debug)]
pub struct GovernanceConfig {
/// Minimum tokens required to create a proposal.
pub proposal_threshold: u64,
/// Minimum participation rate for quorum (basis points, 1000 = 10%).
pub quorum_bps: u32,
/// Voting period in blocks.
pub voting_period_blocks: u64,
/// Execution delay after proposal passes (blocks).
pub execution_delay_blocks: u64,
/// Default vesting cliff in months.
pub default_cliff_months: u32,
/// Default vesting duration in months.
pub default_vesting_months: u32,
}
impl Default for GovernanceConfig {
fn default() -> Self {
GovernanceConfig {
proposal_threshold: 100_000 * 100_000_000, // 100,000 SYNOR
quorum_bps: 1000, // 10% quorum
voting_period_blocks: 864_000, // ~1 day at 10 bps
execution_delay_blocks: 172_800, // ~4.8 hours
default_cliff_months: 12,
default_vesting_months: 48,
}
}
}
impl GovernanceConfig {
/// Creates a configuration for faster governance (testnet/devnet).
pub fn fast() -> Self {
GovernanceConfig {
proposal_threshold: 1000 * 100_000_000, // 1,000 SYNOR
quorum_bps: 500, // 5% quorum
voting_period_blocks: 1000, // ~100 seconds
execution_delay_blocks: 100, // ~10 seconds
default_cliff_months: 1,
default_vesting_months: 6,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_config() {
let config = GovernanceConfig::default();
assert!(config.proposal_threshold > 0);
assert!(config.quorum_bps <= 10000);
}
}