说明
- 这是一个国库管理模块
- tip也是从国库里面拿钱
- 这个模块有两条线:一个是花费提案,一个是tip提案。是两个不一样的逻辑
重要方法
- 提花费议案(给谁奖励)
- 代码:
fn propose_spend( origin, #[compact] value: BalanceOf<T>, beneficiary: <T::Lookup as StaticLookup>::Source )
- 逻辑:
- 签名并且作一定金额的抵押
fn calculate_bond(value: BalanceOf<T>) -> BalanceOf<T> { T::ProposalBondMinimum::get().max(T::ProposalBond::get() * value) }
- 议案数加1
- 保存该提案信息
- 签名并且作一定金额的抵押
- 代码:
- 拒绝花费提案
- 代码:
fn reject_proposal(origin, #[compact] proposal_id: ProposalIndex)
- 议会成员4票同意
- 从投票队列中删除
- 惩罚掉提案者的抵押金额
- 代码:
- 赞成花费提案
- 代码:
fn approve_proposal(origin, #[compact] proposal_id: ProposalIndex)
- 逻辑:
- 议会成员两票通过
- 加入赞成队列信息(待奖励)
- 代码:
- 创建一个tip议案
- 代码:
fn report_awesome(origin, reason: Vec<u8>, who: T::AccountId)
- 逻辑:
- reason 有长度限制
- 一个人只能一种理由用于一个提案
- 创建者根据reason长度来计算抵押金额,并且进行抵押
- 存储tips信息
这个方法没有决定给多少小费, 只是一个提案
- 代码:
- 删除掉一个tip议案
- 代码:
fn retract_tip(origin, hash: T::Hash)
- 逻辑:
- 是创建者本人
- 归还抵押
- 删除相关信息
- 代码:
- 创建一个带有小费的tip议案
- 代码:
fn tip_new(origin, reason: Vec<u8>, who: T::AccountId, tip_value: BalanceOf<T>)
- 逻辑:
- 是通过选举出来的议会成员来操作
- 这个议案还没有存在
- 插入相关存储信息
- 代码:
- 决定给这个tip议案添加多少金额
- 代码:
fn tip(origin, hash: T::Hash, tip_value: BalanceOf<T>)
- 逻辑:
- 议会成员权限
- 如果之前此人已经操作,那么以现在的金额代替
- 判断议案是否结束,给结束时间
- 代码:
- 关闭一个tip议案
- 代码:
fn close_tip(origin, hash: T::Hash)
- 逻辑:
- 任何人都可以操作
- 议案存在
- 议案关闭时间到
- 归还创建者抵押金额
- 从国库拿出钱,给获益者(中位数 * 投票人数)
- 代码:
这个方法里, 国库转账是必须执行的,但是当余额不够,就很尴尬。意味着得不到钱