...
代码块 | ||
---|---|---|
| ||
// DaoProposal.move module DaoProposal { struct ProposalCapability { proposal_id: u64, } struct Proposal<Action> { ... // 现有的一些结构 proposal_id: u64, voting_system: u8, // 投票类型有单选投票、二次投票、排名投票、加权投票等投票类型 voting_start_time: u64, voting_end_time: u64, voting_block_num: u64, // 投票快照高度 voting_block_root: vector<u8>, // 投票快照高度的root hash action: Option::Option<Action>, // 执行策略的结构参数 } struct Vote { /// vote for the proposal under the `proposer`. proposer: address, /// proposal id. id: u64, choie: u8, // 同意,反对,拒绝 weight: u128, // 投票权重 } public fun create_proposal<Action>(..., space_broker: address, space_id: u64, root_hash: &vector<u8>): ProposalCapability; public fun cast_vote( signer: &signer, proposer_broker: address, id: u64, amount: u128, choice: u8, cap: &ProposalCapability ); public fun extract_strategy<Action>(id: u64) : Action; }; |
action
代码块 |
---|
module XProposalAction{
struct XAction{
}
public fun new_action(args...): XAction{
//construct action
}
//理想的情况是 action 的方法是标准化的,但如果牵扯到带有范型的 action,可能不好统一。
public fun execute_action(proposer_address: address,
proposal_id: u64){
}
} |
三、流程
参考:
...