教程区块链区块链技术ch1717.10 选做扩展:多签账户、投票委托与高级功能

本页目录

基础投票 DApp 完成后,以下扩展将带你从"教学项目"进入"工程实践"。


选做 1:多签管理员

rust
// 修改 close_poll 为 2/3 多签
#[account]
pub struct VoteAccount {
    // ...原有字段
    pub admins: Vec<Pubkey>,      // 3 个管理员
    pub admin_threshold: u8,      // 2
    pub close_signatures: Vec<Pubkey>, // 已签名关闭的管理员
}

pub fn close_poll_multisig(ctx: Context<ClosePollMultisig>) -> Result<()> {
    let vote = &mut ctx.accounts.vote_account;
    let signer = ctx.accounts.creator.key();
    
    require!(vote.admins.contains(&signer), VoteError::NotAdmin);
    
    if !vote.close_signatures.contains(&signer) {
        vote.close_signatures.push(signer);
    }
    
    if vote.close_signatures.len() >= vote.admin_threshold as usize {
        vote.is_active = false;
    }
    
    Ok(())
}

选做 2:投票委托

rust
// 用户A可将投票权委托给B
#[account]
pub struct VoteAccount {
    pub delegations: Vec<(Pubkey, Pubkey)>, // (委托人, 被委托人)
}

// B 投票时,检查 B 是否有委托授权

选做 3:隐私投票

方案技术难度
盲签名Chaum 盲签名⭐⭐
零知识承诺Pedersen 承诺 + 范围证明⭐⭐⭐⭐
同态加密Paillier 加密累加⭐⭐⭐⭐

选做 4:Gas 优化

优化方法节省
账户复用批量创建投票,共享存储~30%
压缩投票位图代替数组~50%
程序拆分投票逻辑与计数分离~20%

, 前往 → ch17-summary(本章总结) |*

评论

0

评论加载中…

发表评论

0/2000