Council 选举允许代币持有者为候选人投票。得票最多的候选人成为 Council 成员。投票需要锁定代币到 Council 合约中。
选举流程
选举开始
选举被发起(需要平台的 EIP-712 签名)。选举有固定的持续时间。
投票期
代币持有者授权代币给 Council 合约,然后调用 voteElection() 为候选人投票。代币在选举结束前一直锁定。
选举结束
endTime 过后,任何人都可以调用 claimElectionTokens()。第一个调用者触发结算——得票最高的候选人成为 Council 成员。
领回代币
所有投票者调用 claimElectionTokens() 取回锁定的代币。
读取选举状态
选举状态字段
| 字段 | 类型 | 说明 |
|---|
active | bool | 选举是否正在进行 |
endTime | uint256 | 选举结束时间戳(unix 秒) |
lastElectionEnd | uint256 | 上一次选举结束时间 |
finalized | bool | 当前/上次选举结果是否已结算 |
councilSize | uint256 | Council 席位数 |
epoch | uint256 | 选举届期计数器 |
在选举中投票
投票前,必须先 approve Council 合约转移你的代币。
查看候选人
选举结束后领回代币
选举结束后(block.timestamp > endTime):
查看 Council 成员
| 事件 | 说明 |
|---|
ElectionStarted(token, endTime, councilSize) | 选举开始 |
ElectionVoted(token, voter, totalLocked, candidates, amounts) | 投出选票 |
ElectionFinalized(token, councilMembers) | 选举结果结算 |
ElectionTokensClaimed(token, voter, amount) | 投票者领回锁定代币 |