首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >去中心化社区DAO代币治理系统开发逻辑与教程

去中心化社区DAO代币治理系统开发逻辑与教程

原创
作者头像
开发v_hkkf5566
发布2022-11-14 16:22:08
发布2022-11-14 16:22:08
3530
举报
文章被收录于专栏:技术开发分享技术开发分享

DAO,是基于区块链核心思想理念(由达成同一个共识的群体自发产生的共创、共建、共治、共享的协同行为)衍生出来的一种组织形态。是区块链解决了人与人之间的信任问题之后的附属产物。DAO具有充分开放、自主交互、去中心化控制、复杂多样以及涌现等特点。

故事结束

一旦达到故事的时间或章节限制,就应该结束故事了。任何人都可以在允许提取股息的日期之后调用结束函数。首先,我们需要一个新的StoryDAO属性和一个事件:

代码语言:javascript
复制
bool public active = true;
event StoryEnded(); 

然后,构建函数:

代码语言:javascript
复制
function endStory() storyActive external {
    withdrawToOwner();
    active = false;
    emit StoryEnded();
}

简单:它将收集的费用发送给所有者并发出事件后停用故事。但实际上,这并没有真正改变整个DAO中的任何内容:其他功能对它的结束没有反应。那么构建另一个修饰符:

代码语言:javascript
复制
modifier storyActive() {
    require(active == true);
    _;
}

然后,将此修饰符添加到除withdrawToOwner之外的所有函数中,如下所示:

代码语言:javascript
复制
function whitelistAddress(address _add) storyActive public payable { 

如果DAO中遗留了任何代币,将它们取回并接管这些代币的所有权,以便以后能够在另一个故事中使用它们:

代码语言:javascript
复制
function withdrawLeftoverTokens() external onlyOwner {
    require(active == false);
    token.transfer(msg.sender, token.balanceOf(address(this)));
    token.transferOwnership(msg.sender);
}

function unlockMyTokens() external {
    require(active == false);
    require(token.getLockedAmount(msg.sender) > 0);

    token.decreaseLockedAmount(msg.sender, token.getLockedAmount(msg.sender));
}

unlockMyTokens函数用于解锁所有锁定的代币,以防某些锁定代币为特定用户锁定。它不应该发生,并且应该通过大量测试来移除此功能。

股息分配和提款

现在故事已经结束,收集的费用需要分配给所有代币持有者。可以重新使用我们的白名单来标记所有取消费用的人:

代码语言:javascript
复制
function withdrawDividend() memberOnly external {
    require(active == false);
    uint256 owed = address(this).balance.div(whitelistedNumber);
    msg.sender.transfer(owed);
    whitelist[msg.sender] = false;
    whitelistedNumber--;
}

如果这些股息未在一定时限内撤回,可以抓住其余股息:

代码语言:javascript
复制
function withdrawEverythingPostDeadline() external onlyOwner {
    require(active == false);
    require(now > deadline + 14 days);
    owner.transfer(address(this).balance);
}

部署问题

鉴于合约现在非常大,部署和/或测试它可能会超过以太坊区块的gas限制。这是限制大型应用程序部署在以太坊网络上的原因。无论如何要部署它,在编译期间尝试使用代码优化器,方法是更改truffle.js文件以包含用于优化的solc设置,如下所示:

代码语言:javascript
复制
// ...

module.exports = {
  solc: {
    optimizer: {
      enabled: true,
      runs: 200
    }
  },
  networks: {
    development: {
// ...

这将在代码中运行优化器200次以查找在部署之前可以缩小,移除或抽象的区域,这将显着降低部署成本。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 股息分配和提款
  • 部署问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档