显示软件包…
1 个稳定版本
2.0.0 | 2021年4月4日 |
---|
#16 in #tetcoin
53 次每月下载
在 8 个软件包中 使用(直接使用 2 个)
1.5MB
25K SLoC
社区模块
概述
社区模块是一个经济游戏,旨在激励用户参与并维持一个会员制社区。
用户类型
在任何时候,社区中的用户可以是以下之一
- 出价者 - 一个表示有意加入社区的用户。
- 候选人 - 一个将被投票加入社区的用户。
- 被暂停的候选人 - 一个未能赢得投票的用户。
- 成员 - 一个社区成员。
- 被暂停的成员 - 一个因累积过多违规或未能通过会员资格挑战而被暂停的社区成员。
在非暂停成员中,总有一个
- 首领 - 一个免于暂停的成员。
- 捍卫者 - 一个其会员资格受到质疑并被再次投票的成员。
在非暂停的社区成员中,随机选择一部分成员作为“怀疑者”。怀疑者的机制将在下面的会员阶段中解释。
机制
奖励
通过社区金库支付的奖励激励成员参与社区。这些支付有一个到期日,用户必须等待才能获取资金。
惩罚
可以通过削减尚未收集的奖励支付来惩罚成员。此外,成员可以累积“违规”,当违规达到最大限制时,他们将暂停。
怀疑者
在投票期间,随机选择一部分成员作为“怀疑者”。这些怀疑者预计将投票决定当前的候选人。如果他们不投票,他们的怀疑者状态将被视为拒绝票,该成员被视为“懒惰”,并将因每张缺失的选票而受到一次违规。
会员资格挑战
在每次挑战周期内,将随机选取一位现有成员来捍卫其在社会的成员资格。然后,其他成员可以投票决定这位捍卫者是否应该留在社会中。简单多数票将决定用户的命运。平局被视为挑战失败,但如果没有人投票,捍卫者总是可以在自己的挑战中免费投票,从而留在社会中。首领成员免受成员资格挑战的负面影响。
社会财政
成员社会由该模块管理的财政独立资助。财政的一部分被放入社会资金池,用于确定接受的投标数量。
增长率
成员社会可以以每次旋转周期接受10名候选人的速度增长,直到达到最大成员阈值。一旦达到这个阈值,候选人的选择将暂停,直到有空间接纳新成员。这可以通过通过随机挑战罢免现有成员或通过治理增加最大成员数量来解决。
用户生命周期
用户可以经历以下阶段
+-------> User <----------+
| + |
| | |
+----------------------------------------------+
| | | | |
| | v | |
| | Bidder <-----------+ |
| | + | |
| | | + |
| | v Suspended |
| | Candidate +----> Candidate |
| | + + |
| | | | |
| + | | |
| Suspended +------>| | |
| Member | | |
| ^ | | |
| | v | |
| +-------+ Member <----------+ |
| |
| |
+------------------Society---------------------+
初始化
社会以一个自动被选为首领的单个成员初始化。
投标阶段
新用户必须有一个投标才能加入社会。
用户可以通过预留存款进行投标。或者,现有成员可以通过“担保”代表用户进行投标。
投标包括用户希望加入社会时收到的奖励信息。担保投标还可以请求将部分奖励作为对担保人的担保费。
每个旋转周期,投标按奖励金额排序,模块选择社会资金池在该周期内可以支持的所有投标。
这些选定的投标成为候选人,进入候选人阶段。未选中的投标将保留在投标者池中,直到被选中或用户选择“取消投标”。
候选人阶段
一旦投标人成为候选人,成员将投票决定是否批准或拒绝该候选人的社会成员资格。这个投票过程也发生在旋转周期内。
候选人的批准和拒绝标准不在链上设置,可能因不同社会而异。
在旋转周期结束时,我们收集候选人的选票,并随机选择一票作为最终结果。
[ a-accept, r-reject, s-skeptic ]
+----------------------------------+
| |
| Member |0|1|2|3|4|5|6|7|8|9| |
| ----------------------------- |
| Vote |a|a|a|r|s|r|a|a|s|a| |
| ----------------------------- |
| Selected | | | |x| | | | | | | |
| |
+----------------------------------+
Result: Rejected
所有投票与随机选择的投票相反的成员将受到惩罚,包括削减其未领取的付款并增加其处罚次数。
这些被削减的资金将作为奖励给予与随机选择的投票相同的人。
如果候选人赢得投票,他们将在未来获得投标奖励。如果投标是由担保人进行的,他们将在其余款项支付给获胜候选人之前获得其部分奖励。
将选择一名获胜候选人作为成员的首领。这是根据获胜候选人积累的批准数量随机选择的,并加权。
如果候选人投票失败,他们将被暂停,是否需要候选人再次经历投标过程,是否应被接受为成员社会的一员,或被拒绝并削减其存款,将由暂停判断来源决定。
成员阶段
一旦候选人成为成员,他们的角色就是参与社会。
正常参与包括对希望加入成员社会的候选人进行投票,并通过正确投票,成员将积累未来的付款。当付款到期时,成员可以领取这些付款。
成员还可以为用户担保加入社团,并从新成员通过加入社团所收集的费用中请求“提成”。这种担保过程适用于用户可能没有足够的余额满足保证金的情况。成员一次只能担保一个用户。
在轮换期间,随机选择一组成员作为“怀疑者”。这些怀疑者需要就当前候选人进行投票。如果他们没有投票,他们的怀疑者状态将被视为拒绝票,成员被视为“懒惰”,并因每张缺失的选票获得一次处罚。
在轮换期间并行存在一个挑战期。在挑战期内,随机选择一名成员捍卫其在社团中的成员资格。其他成员进行传统的多数决定投票,以确定该成员是否应该留在社团中。平局被视为挑战失败。
如果成员积累了过多的处罚或未能通过成员资格挑战,他们将被暂停。在成员被暂停期间,他们无法声称已经成熟的支付。由暂停裁决的发起人决定成员是否应该重新进入社团或被从社团中移除,并砍掉所有未来的支付。
界面
可调用函数
对于普通用户
bid
- 用户可以通过预留保证金的方式提出加入会员社团的申请。unbid
- 用户可以撤回他们的加入申请,保证金将被退还。
对于成员
vouch
- 成员可以代表用户提出加入会员社团的申请。unvouch
- 成员可以撤销对用户的担保。vote
- 成员可以投票批准或拒绝候选人的加入社团申请。defender_vote
- 成员可以投票批准或拒绝捍卫者的持续社团成员资格。payout
- 成员可以索赔其第一笔成熟的支付。unfound
- 允许创始人当他们是唯一成员时解散社团。
对于超级用户
found
- 创始人发起者可以启动这个社团。这在为已经运行的链上的社团启动贵族时很有用。judge_suspended_member
- 暂停裁决发起者可以对被暂停的成员进行裁决。judge_suspended_candidate
- 暂停裁决发起者可以对被暂停的候选人进行裁决。set_max_membership
- 根发起者可以更新社团的最大成员数。最大成员数必须大于1。
许可证:Apache-2.0
依赖关系
~4–12MB
~140K SLoC