Colony DAO平台以及源码分析

Colony DAO平台源码分析

主要分析的是Colony中colonyNetwork的部分核心功能代码

Colony官网:https://colony.io/
github源码:https://github.com/JoinColony/colonyNetwork
白皮书:https://uploads-ssl.webflow.com/61840fafb9a4c433c1470856/639b50406de5d97564644805_whitepaper.pdf

简介

Colony 是一个去中心化自治组织(DAO)平台,旨在帮助团队和社区更高效地协作和管理项目。Colony 的核心功能包括中心化的治理、任务管理和资金分配。通过 Colony,DAO 可以根据成员的贡献进行奖励,并通过代币投票机制进行决策。

Colony 拥有组织在链上运营所需的一切。支付、团队、授权、治理、筹款、收益分享、仲裁、与以太坊上任何其他智能合约交互的能力等等。

特点:基于声誉的治理惰性共识

domain定义:domain是ColonyDAO[1]的组织结构,用于将组织按照功能、项目或主题进行划分。domian之间存在层级关系,一个ColonyDAO可以有多个domian。

skill定义:skill代表ColonyDAO中成员的能力或专业领域。每个成员可以具备一定数量的技能。

关联性:skill通常与domain相关。成员的skill可以与他们所在domain属性相关联。例如,如果一个domian是“软件开发”,那么相关的skill可能包括“前端开发”和“后端开发”

整体流程分析

在这里插入图片描述
流程是在colony平台创建dao,定义领域,成员提出提案,其它成员通过投票来审查提案,通过后执行提案,最后发放激励,
其中提出提案、审查提案、执行提案、发放激励是ColonyDAO的治理核心,也是整个Colony项目的核心内容。

治理核心流程图

这是一张核心流程图,首先成员可以提出motion提案,motion发布成功后,其它成员可以对motion进行质押,有两个方向Y或者N,Y是同意提案,N是不同意的意思。

  • 质押Y和N都达到一定的阈值就会触发投票环节,进行评审。
  • 如果Y达到阈值,N没有达到,则执行motion 如果Y没达到,N达到了,则不执行motion。
  • 如果Y和N都没达到阈值,则表明此提案的关注度不够,不执行奖罚操作,将参与者质押代币全部返还。
    对于投票环节,投票也包含同意Y和不同意方N。
  • 如果投票的Y方大于N方,表示Y方胜利,则执行motion,反之同理。
    成员质押motion是有风险的,最后系统会根据YN方的结果,对质押者进行奖罚。

在这里插入图片描述

motion

“motion”(动议)通常指的是社区成员提出的一个建议或决策方案,它需要由社区的其他成员进行讨论和投票。
第一个环节成员提出motion

在这里插入图片描述

motion的结构体

数组stakes是用于存储质押双方人数,数组votes则是存储投票双方的人数,action是motion中可执行的动作功能

在这里插入图片描述
motion 有8种状态
在这里插入图片描述
motion主要是三个部分

1、创建motion createMotion()

1.1 提出提案流程中先创建motion,核查motion状态,获取动作功能摘要,看有哪些功能,增加motion计数。

在这里插入图片描述
在这里插入图片描述

1.2 实例化 motion,设置其属性(部分属性由外部参数传入),最终完成 motion 的创建。

在这里插入图片描述
在这里插入图片描述

2、质押motion stakeMotion()

在这里插入图片描述

2.1 在创建 motion 后,需要立即对其进行质押并激活。提出 motion 的人会自动进行一次质押,其他成员也可以质押以表达他们对 motion 的态度。首先,检查当前状态是否为“质押中”,这是前面提到的8种状态之一。接着,调用“获取所需质押(getRequiredStake)”方法,获取 motion 所需的声誉值。最后,计算用户可以质押的金额,这个金额取传入金额和用户可投票余数中的较小值。

在这里插入图片描述
在这里插入图片描述

2.2 用户可以多次质押,因此首先需要计算用户的总质押金额,并检查余额是否足够。系统还为质押金额设定了一个最小额度,需确保质押金额不低于此限。然后,更新质押信息,包括motion的总质押数和用户的质押数。

在这里插入图片描述
在这里插入图片描述

2.3 如果支持方和反对方的质押数同时达到所需的阈值,则设置事件状态时间戳,进入投票环节。如果一方质押数量明显占优,则直接跳过投票环节。最后,将质押者的代币锁定,并调用函数执行质押操作。

在这里插入图片描述
在这里插入图片描述

3、提交投票 submitVote()

在这里插入图片描述

3.1 进入投票环节后,社区成员可以根据各自的声誉值进行投票。投票开始时,首先核查motion状态是否为“提交”,然后检查投票者的声誉值。

在这里插入图片描述
`
在这里插入图片描述

3.2 如果是首次投票,则增加投票数并存储投票密钥(因投票采用秘密投票方式)。提交投票后,如果已提交投票的总声誉值达到最大投票比例,投票提交即告结束,并记录结束的时间戳。

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c7eaf335269e44ee846a68e0e7e658cb.png#pic_center =200x)
在这里插入图片描述

4、公布投票 revealVote()

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/38eae35d000d4c0a8f59b7cad1a52204.png#pic_center =650x)

4.1 投票结束后,系统将公布投票结果。首先,核查投票状态是否为“公布”并确认投票有效性。随后,计算并记录每位用户的声誉值变化。

在这里插入图片描述
在这里插入图片描述

4.2 首先,获取用户之前提交的投票密钥,并通过哈希计算验证其正确性。验证后,清除投票密钥记录。接着,系统会记录投票者的奖励,所有参与投票的用户,无论输赢,都将获得一定的奖励,以鼓励参与投票。最后,发放相应的投票奖励。

`
在这里插入图片描述
在这里插入图片描述

5、执行motion finalizeMotion()

`
在这里插入图片描述

5.1 投票结束后,如果提案通过,系统将进入执行提案流程。首先,检查motion状态是否为“可结束”。接着,使用“警告”功能验证提案条件,确保质押要求已满足或至少有一个投票。满足条件后,将提案标记为“最终确定”状态。

`

在这里插入图片描述
`
在这里插入图片描述

5.2 在确认motion状态为“可结束”后,接下来将根据条件判断是否可以执行提案。如果质押或投票的“Y”方获胜,则提案可以执行。

对于投票,如果存在异议,可以进行二次投票。因此,需要记录此次投票的情况,并确保下次投票的总权重必须高于本次投票才能生效。
最后,执行提案的具体操作。
在这里插入图片描述
在这里插入图片描述
`

6、清算奖励 claimReward()

6.1 在motion执行完成后,将发放激励。首先,核查motion的状态。然后,通过getStakerReward函数获取质押者的奖罚情况,并根据结果进行相应的奖励发放。

在这里插入图片描述
在这里插入图片描述
`

6.2 将调整后的质押金额发送给质押者。如果有惩罚,同时触发相应的声誉惩罚事件。

在这里插入图片描述
在这里插入图片描述
`

7、计算质押奖励 getStakeReward()

7.1 这是具体的奖罚公式,公式前提假设是质押者为输的一方,质押者回报是指质押者的惩罚金额,最后质押者质押金额会减去质押者回报后再返回给质押者

在这里插入图片描述
`

7.2 计算motion总投票质押,再计算质押者的质押数占总比,最后获得质押者的质押金额

在这里插入图片描述
在这里插入图片描述
`

7.3 分析质押情况: 如果投票环节已经进行,则首先确定赢家和输家(Y方或N方)。投票者的奖励将从输方的总质押中扣除。

在这里插入图片描述
`

7.4 计算质押者奖惩后金额: 计算支持方的质押者在总投票中的占比,然后使用该占比和WAD常数来计算奖励份额。如果质押者是输方,则根据前述公式计算惩罚后可赎回的质押金额。

在这里插入图片描述
`

7.5 返回奖罚金额: 如果未进入投票阶段且有一方直接胜利,则奖励将取失败方质押金额的10%。如果两方质押均未达到阈值,且无赢家,则返还所有人的质押,无奖励或惩罚。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值