DAO 合约地址: 0xda0da00000000000000000000000000000000000
任何人可以向 DAO 合约质押与提取质押。即使一个地址成为了委员,也可以提取走全部质押,相应接口如下。
interface StakeVault {
// 向合约转账,并以 staker 的名义质押
function stakeTo(address staker) payable external;
// 向合约转账并质押
function stake() payable external;
// 提取质押
function withdraw(uint256 amount) external;
// 提取质押至指定地址
function withdrawTo(address payable beneficiary, uint256 amount) external;
// 查看地址余额
function stakeBalance(address staker) view external returns (uint256)
}
interface DaoManager {
// 推断的发行总量,包括已经挖出的和 DAO 已经发出去的
function totalIssued() view external returns(uint256);
// 见下文
function preemptOwner(address owner) external;
// 见下文
function electOwner(address oldOwner, address newOwner) external;
// 见下文
function impeachOwner() external;
// 下次可以调用 electOwner 的区块高度
function nextElection() external returns (uint);
// 下次可以调用某些接口的区块高度,细节见下文
function nextCall(string memory params) external returns (uint);
// 查看委员会列表
function getOwners() external view returns (address[] memory);
}
<aside> 💡 DaoManager 和 StakeVault 在同一个地址,一个地址是可以有多个接口的。
</aside>
网络中有 21 个委员会节点,用于对网络中 DAO 治理的相关议题投票。委员会在以下几种情况下可能会发生改变:
在职委员不足 21 人时,任何满足条件的地址可以抢占委员会席位,先到先得。
**调用方式:**竞选者调用 preemptOwner
函数
限流要求:preemptOwner
调用成功后,需要等待 300 个区块(约 1 小时),其他人才可以再次调用。调用 nextCall("preemptOwner")
查看下次可调用区块高度。
一个委员不满足最低质押代币要求时,任何人可以将该委员弹劾出委员会
**调用方式:**任何人调用 impeachOwner
函数。函数执行中会踢掉一个不符合要求的委员,当有多个不符合要求的委员时,踢掉谁是实现相关的。踢掉一个人后,则进入抢占模式。
**限流要求:**若某次弹劾将委员会从 N 人减至 N - 1 人,则 14400 个区块内(约 2 天),委员会的人数不会少于 N - 1 人。如果当前委员会有 18 人,调用 nextCall("preemptOwner18")
查看下次可调用区块高度。
从首次选满 21 人开始,每 648000 个区块(约 90 天),进行一次轮换,DAO 委员会替换掉一个质押不足 5% 的人,同时换上一个质押不少于 5% 的人。轮换由 DAO 进行多签后,调用相应接口实现。