substrate2.0中的treasury模块

说明

  • 这是一个国库管理模块
  • 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)
    • 逻辑:
      • 任何人都可以操作
      • 议案存在
      • 议案关闭时间到
      • 归还创建者抵押金额
      • 从国库拿出钱,给获益者(中位数 * 投票人数)

这个方法里, 国库转账是必须执行的,但是当余额不够,就很尴尬。意味着得不到钱


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。