DAO社区代币治理投票挖矿dapp系统开发详细教程

简介: DAO社区代币治理投票挖矿dapp系统开发详细教程

如何添加参与者从DAO购买代币的功能以及在Story中添加提交内容。编写DAO的最终形式:投票,黑名单,股息分配和退出。我们将提供一些额外的辅助函数以便进行监测。开发详细教程如下:

投票和提案
发布Votes并投票。这需要两个新的结构:
struct Proposal {

string description;
bool executed;
int256 currentResult;
uint8 typeFlag; // 1 = delete
bytes32 target; // ID of the proposal target. I.e. flag 1, target XXXXXX (hash) means proposal to delete submissions[hash]
uint256 creationDate;
uint256 deadline;
mapping (address => bool) voters;
Vote[] votes;
address submitter;

}

Proposal[] public proposals;
uint256 proposalCount = 0;
event ProposalAdded(uint256 id, uint8 typeFlag, bytes32 hash, string description, address submitter);
event ProposalExecuted(uint256 id);
event Voted(address voter, bool vote, uint256 power, string justification);

struct Vote {

bool inSupport;
address voter;
string justification;
uint256 power;

}
提案将对选民进行映射,以防止人们对提案进行两次投票,以及其他一些应该不言自明的元数据。投票将是一个是或否投票,并将记住选民以及他们以某种方式投票的理由,以及投票权——他们希望投入该投票的代币数量。我们还添加了一系列Proposals,以便我们可以将它们存储在某个地方,并提供一个计数器来计算有多少提案。
现在构建他们的附属函数,从投票函数开始:
modifier tokenHoldersOnly() {

require(token.balanceOf(msg.sender) >= 10**token.decimals());
_;

}

function vote(uint256 _proposalId, bool _vote, string _description, uint256 _votePower) tokenHoldersOnly public returns (int256) {

require(_votePower > 0, "At least some power must be given to the vote.");
require(uint256(_votePower)  now, "Proposal must not have expired.");
require(p.voters[msg.sender] == false, "User must not have already voted.");

uint256 voteid = p.votes.length++;
Vote storage pvote = p.votes[voteid];
pvote.inSupport = _vote;
pvote.justification = _description;
pvote.voter = msg.sender;
pvote.power = _votePower;

p.voters[msg.sender] = true;

p.currentResult = (_vote) ? p.currentResult + int256(_votePower) : p.currentResult - int256(_votePower);
token.increaseLockedAmount(msg.sender, _votePower);

emit Voted(msg.sender, _vote, _votePower, _description);
return p.currentResult;

}
注意函数修饰符:通过将该修饰符添加到我们的合约中,我们可以将它附加到任何将来的函数,并确保只有令牌持有者才能执行该函数。这是一个可重复使用的安全检查!
投票功能做了一些健壮性检查,例如投票权是积极的,选民有足够的代币实际投票等。然后我们从存储中获取提案并确保它既没有过期也没有已经执行。对已经完成的提案进行投票是没有意义的。我们还需要确保这个人还没有投票。我们可以允许改变投票权,但这会让DAO面临一些漏洞,例如人们在最后一刻撤回投票等等。也许是未来版本的候选人?
然后我们在提案中注册一个新的投票,更改当前结果以便于查找分数,最后发出Voted事件。但是什么是token.increaseLockedAmount?
这一点逻辑增加了用户的锁定代币数量。该功能只能由代币合约的所有者执行(此时希望是DAO)并且将阻止用户发送超过其帐户注册的锁定金额的令牌数量。提案落实或执行后,此锁定被解除。

相关文章
|
5月前
|
安全 JavaScript 前端开发
质押理财dapp系统开发功能详细/步骤需求/方案项目/源码指南
The development of a pledge wealth management DApp system involves knowledge in various aspects such as blockchain technology, smart contracts, front-end development, and security. The following are the detailed steps for developing a pledge wealth management DApp system
|
安全 区块链
defi丨dapp智能合约代币系统开发(开发案例)/需求详细/逻辑方案/项目源码
The development of the Defi single and dual currency pledge liquidity mining system requires the following steps: requirement analysis, system design, contract writing, front-end and back-end development, testing and deployment. Firstly, conduct a comprehensive requirement analysis of the system's f
|
5月前
|
存储 安全 区块链
DAPP质押代币项目系统开发/技术分析/源码搭建
Web3.0技术栈中,去信任的交互协议和平台、分布式存储、隐私计算是生态必须率先发展完备的核心技术
|
11月前
|
区块链
DAPP流动性质押项目系统开发指南方案
智能合约是一种以代码形式存在的合约,旨在在去中心化网络上执行和实施。
|
存储 区块链 UED
DAPP流动性质押系统开发方案与详情|DAPP合约案例
区块链的另一个固有挑战是其确定性。确定性本质意味着一旦一个块被添加到区块链中,它就无法更改,并且任何智能合约执行的结果都是可预测的和一致的。
|
存储 前端开发 安全
defi丨dapp丨ippswap代币发行合约项目系统开发规则方案及开发案例源码
  智能合约是一种基于区块链技术的自动执行代码。它是一种可以在区块链上自动执行、不可篡改的协议。智能合约能够有效地执行预定义好的规则和条款,并且在满足预设条件的情况下自动执行。这种合约大大降低了交易成本,提高了交易的可靠性。
|
存储 设计模式 区块链
defi/dapp智能合约发行代币lp项目系统开发详细程序/源码功能/规则详细/方案设计
智能合约是一种自动化的计算机程序,在区块链技术中具有重要作用。它可以在不需要第三方的干预下执行合约,从而提高了合约执行的透明性、可靠性和安全性。智能合约是一种非常有前景的技术,它有着广泛的应用领域。随着其应用范围的不断拓展,智能合约将会成为未来区块链技术发展的关键因素之一
|
安全 算法 区块链
dapp/defi/ippswap发行代币合约系统开发案例详情/规则逻辑/方案项目/源码部署
  随着区块链技术的发展,越来越多的企业开始关注区块链技术的应用。而DAPP作为区块链应用的重要形式,正在逐渐成为区块链应用的主流。DAPP的全称是Decentralized Application,即去中心化应用程序。它是一种基于区块链技术的分布式应用程序,具有去中心化、安全、透明等特点
|
存储 区块链 编译器
DAPP链上代币发行合约去中心化项目系统开发实现技术案例及源码详情
 区块头和区块体数据也会被当作输入数据做一次Hash运算,其运算结果会被存储在下一个区块的区块头中,这样任何区块内容的修改都会反映到区块的Hash值上,而区块的Hash值又是下一个区块的输入数据,它又会被当作新区块的数据参与一次新区块的Hash运算,随着时间的推移和交易量的增加,所有的区块会通过保存前一个区块的Hash运算结果的方式组成一条链。
|
安全 区块链
DAPP去中心化交易所系统开发(开发项目)丨DAPP去中心化交易所系统开发(详细案例)/源码功能
  智能合约是区块链DApp的重要组成部分,是实现区块链DApp商业逻辑的基础。因此,设计智能合约应该根据业务需求进行规划,明确合约的功能和业务流程。