关于DAO社区治理dapp系统开发部署教程

简介: 关于DAO社区治理dapp系统开发部署教程,代币投票,管理

编写提议删除条目的函数:
投票删除和黑名单
三个条目删除功能:
1.删除条目:通过投票确认后,目标条目将被删除。投票时间:48小时。
2.紧急删除条目[仅限所有者]:只能由所有者触发。通过投票确认后,目标条目将被删除。投票时间:24小时。
3.紧急删除图像[仅限所有者]:仅适用于图像条目。开发对接唯hkkf5566只能由所有者触发。通过投票确认后,目标条目将被删除。投票时间:4小时。
单个地址条目的五个删除导致黑名单。
首先,删除功能:
modifier memberOnly() {

require(whitelist[msg.sender]);
require(!blacklist[msg.sender]);
_;

}

function proposeDeletion(bytes32 _hash, string _description) memberOnly public {

require(submissionExists(_hash), "Submission must exist to be deletable");

uint256 proposalId = proposals.length++;
Proposal storage p = proposals[proposalId];
p.description = _description;
p.executed = false;
p.creationDate = now;
p.submitter = msg.sender;
p.typeFlag = 1;
p.target = _hash;

p.deadline = now + 2 days;

emit ProposalAdded(proposalId, 1, _hash, _description, msg.sender);
proposalCount = proposalId + 1;

}

function proposeDeletionUrgent(bytes32 _hash, string _description) onlyOwner public {

require(submissionExists(_hash), "Submission must exist to be deletable");

uint256 proposalId = proposals.length++;
Proposal storage p = proposals[proposalId];
p.description = _description;
p.executed = false;
p.creationDate = now;
p.submitter = msg.sender;
p.typeFlag = 1;
p.target = _hash;

p.deadline = now + 12 hours;

emit ProposalAdded(proposalId, 1, _hash, _description, msg.sender);
proposalCount = proposalId + 1;

}

function proposeDeletionUrgentImage(bytes32 _hash, string _description) onlyOwner public {

require(submissions[_hash].image == true, "Submission must be existing image");

uint256 proposalId = proposals.length++;
Proposal storage p = proposals[proposalId];
p.description = _description;
p.executed = false;
p.creationDate = now;
p.submitter = msg.sender;
p.typeFlag = 1;
p.target = _hash;

p.deadline = now + 4 hours;

emit ProposalAdded(proposalId, 1, _hash, _description, msg.sender);
proposalCount = proposalId + 1;

}
一旦提出,建议书就会被添加到提案列表中,并记录条目哈希所针对的条目。保存说明并添加一些默认值,并根据提案类型计算截止日期。该提案添加了事件,并且提案总数增加了。
接下来看看如何执行提案。为了可执行,提案必须有足够的票数,并且必须超过其截止日期。执行功能将接受要执行的提议的ID。没有简单的方法可以让EVM立即执行所有待处理的提案。可能有太多人要等待执行,并且他们会对DAO中的数据进行大的更改,这可能会超过以太坊块的气体限制,从而导致交易失败。构建一个可以由具有明确规则的任何人调用的手动执行功能要容易得多,因此社区可以关注需要执行的提议。
function executeProposal(uint256 _id) public {

Proposal storage p = proposals[_id];
require(now >= p.deadline && !p.executed);

if (p.typeFlag == 1 && p.currentResult > 0) {
    assert(deleteSubmission(p.target));
}

uint256 len = p.votes.length;
for (uint i = 0; i 

通过其ID获取提案,检查它是否符合未执行的要求和截止日期过期,然后如果提案的类型是删除提案且投票结果是肯定的,我们使用已经写入的删除功能,最后发出了我们添加的新事件(将其添加到合约的顶部)。assert调用与require语句具有相同的用途:断言通常在“断言”结果为真时使用。要求用于先决条件。在功能上它们是相同的,assert语句的差异在它们失败时无法接受消息参数。该功能通过为该一个提案中的所有投票解锁代币而结束。
使用相同的方法添加其他类型的提案,但首先,更新deleteSubmission函数以禁止在其帐户上有五个或更多删除的用户:这意味着他们一直在提交社区投票反对的内容。更新deleteSubmission函数:
function deleteSubmission(bytes32 hash) internal returns (bool) {

require(submissionExists(hash), "Submission must exist to be deletable.");
Submission storage sub = submissions[hash];

sub.exists = false;
deletions[submissions[hash].submitter] += 1;
if (deletions[submissions[hash].submitter] >= 5) {
    blacklistAddress(submissions[hash].submitter);
}

emit SubmissionDeleted(
    sub.index,
    sub.content,
    sub.image,
    sub.submitter
);

nonDeletedSubmissions -= 1;
return true;

}
自动将五个删除列入黑名单。但是,如果不给黑名单地址提供赎回的机会,那是不公平的。需要定义黑名单功能本身。做这两件事并将不合理的费用设置为例如0.05以太。
function blacklistAddress(address _offender) internal {

require(blacklist[_offender] == false, "Can't blacklist a blacklisted user :/");
blacklist[_offender] == true;
token.increaseLockedAmount(_offender, token.getUnlockedAmount(_offender));
emit Blacklisted(_offender, true);

}

function unblacklistMe() payable public {

unblacklistAddress(msg.sender);

}

function unblacklistAddress(address _offender) payable public {

require(msg.value >= 0.05 ether, "Unblacklisting fee");
require(blacklist[_offender] == true, "Can't unblacklist a non-blacklisted user :/");
require(notVoting(_offender), "Offender must not be involved in a vote.");
withdrawableByOwner = withdrawableByOwner.add(msg.value);
blacklist[_offender] = false;
token.decreaseLockedAmount(_offender, token.balanceOf(_offender));
emit Blacklisted(_offender, false);

}

function notVoting(address _voter) internal view returns (bool) {

for (uint256 i = 0; i 

请注意,列入黑名单的帐户的令牌会被锁定,直到他们发送不合格的费用为止。

相关文章
|
测试技术 数据安全/隐私保护 索引
DAO社区治理系统模式开发规则详情 | DAO社区治理系统开发源码示例(Python语言版)
DAO(Data Access Object)社区治理模式是一种去中心化的社区治理模式,它将权力下放到社区中,让社区成员自主决策、自我管理,从而实现社区的自主治理。在DAO社区治理模式中,权力下放到社区中,社区成员可以自由地发表自己的意见和建议,并且能够直接参与到社区的决策过程中。
|
存储 区块链 数据安全/隐私保护
DAO社区治理代币挖矿系统开发丨DAPP技术分析
DAO的生态系统是智能合约【180-系统3831-开发9724薇】和功能完善的社区的独特组合。与传统组织不同,DAO不受董事会或经理管理,而是由其成员管理,这些成员通过基于代币的投票机制集体管理DAO内的决策,这些投票机制根据智能合约中的预定义规则执行。
|
区块链
去中心化社区治理代币模式DAO系统开发部署详细教程
去中心化社区治理代币模式DAO系统开发部署详细教程
|
7月前
|
人工智能 架构师 算法
人工智能+:职业价值的重构与技能升级
当“人工智能+”成为产业升级标配,职业价值正被重新定义。这并非简单岗位替代,而是人机协作新模式的诞生。AI接管重复性任务后,从业者可专注创造性活动,职业“含人量”不降反升。未来高价值岗位集中在技术赋能、场景创新与价值监督三层面,需跨界人才、流程架构师及伦理师等新角色。把握机遇需重构学习逻辑,强化人机协作实训与伦理素养,发展放大人类独特性的能力,构建不可替代的“人类+”优势。
|
9月前
|
人工智能 搜索推荐 API
零门槛、即刻拥有 DeepSeek-R1 满血版
今天来教大家如何用阿里云百炼平台和开源工具 Open WebUI,零门槛(甚至零成本)、即刻拥有 DeepSeek-R1 满血版!全程无需复杂代码,跟着我做就能拥有企业级 AI 服务!我只花了不到半小时就完成了整个服务的部署。
|
XML 存储 C#
自己动手做一个批量doc转换为docx文件的小工具
自己动手做一个批量doc转换为docx文件的小工具
353 0
|
SQL 存储 大数据
大数据中数据提取
【10月更文挑战第19天】
530 2
|
前端开发 应用服务中间件 API
|
机器学习/深度学习 自然语言处理 数据可视化
开箱即用!智能文档处理“百宝箱“
10 月 24 日至 26 日,CSDN 第五届“1024 程序员节”在长沙召开。合合信息的常扬老师分享了智能文档处理“百宝箱”,包括 TextIn ParseX、acge-embedding 和 markdown_tester 三种工具。这些工具解决了文档解析中的版式复杂、解析错误、语义信息丢失等问题,适用于文字工作者和机器学习研究人员。TextIn ParseX 是一个可视化工具,支持多种格式输出,acge-embedding 模型用于文本向量化,而 markdown_tester 则用于文档解析效果的定量评估。
267 0
|
机器学习/深度学习 人工智能 算法
基于 PyTorch 的图像特征提取
基于 PyTorch 的图像特征提取