DCAllocator是一个基于多签委员会的质押与罚没管理智能合约系统,用于管理用户对特定issue的ETH质押,并通过委员会多签机制实现对违规行为的罚没处理。
DCAllocator合约主要实现以下功能:
-
质押管理:
- 用户可以对特定issue进行ETH质押
- 每个issue只能被质押一次,初始质押后可通过stakeMore函数增加质押金额
- 质押后需等待挑战期(默认180天)才能取回质押
- 增加质押金额会重置质押时间
-
委员会管理:
- 合约由多签委员会成员共同管理
- 委员会成员可以对质押提出罚没提议
- 当罚没提议达到阈值时,质押将被罚没并转移到保险库
- 合约拥有者可以添加或移除委员会成员
- 委员会成员数量有上限(maxCommitteeSize)
-
罚没机制:
- 委员会成员可以对质押发起罚没提议
- 当提议数量达到阈值时,质押将被罚没
- 被罚没的资金将转移到指定的保险库地址
-
活跃问题管理:
- 合约维护一个活跃问题列表
- 当质押被取回或罚没时,相应的问题将从活跃列表中移除
- 只有合约拥有者可以修改关键参数(挑战期、保险库地址)
- 只有合约拥有者可以管理委员会成员
- 委员会成员数量不能低于阈值,确保多签机制正常运行
- 每个委员会成员对同一issue只能提交一次罚没提议
使用Foundry部署DCAllocator合约:
$ forge script script/DCAllocator.s.sol:DCAllocatorScript --rpc-url <your_rpc_url> --private-key <your_private_key>
部署时需要指定以下参数:
- 初始委员会成员地址列表
- 罚没阈值(多少委员会成员同意后执行罚没)
- 最大委员会成员数量
-
质押相关:
stake(uint issue)
- 对特定issue进行质押stakeMore(uint issue)
- 增加对已有issue的质押金额unstake(uint issue)
- 在挑战期结束后取回质押
-
委员会管理:
addCommitteeMember(address _member)
- 添加委员会成员removeCommitteeMember(address _member)
- 移除委员会成员isCommitteeMember(address _address)
- 检查地址是否是委员会成员
-
罚没相关:
slash(uint issue)
- 委员会成员提议罚没特定issue的质押hasReachedThreshold(uint issue)
- 检查罚没提议是否达到阈值getSlashProposals(uint issue)
- 获取某个issue的所有罚没提议
-
配置相关:
setVault(address _vault)
- 设置保险库地址setChallengePeriod(uint256 _challengePeriod)
- 设置挑战期时长
本项目使用Foundry开发框架:
- Forge: 用于测试和编译合约
- Cast: 用于与合约交互和发送交易
- Anvil: 本地以太坊节点模拟
- Chisel: Solidity REPL工具
$ forge build
$ forge test
$ forge fmt
更多关于Foundry的信息,请参考:https://book.getfoundry.sh/