亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
區(qū)塊鏈投票在實(shí)踐中是如何運(yùn)作的?
什么是DAO投票機(jī)制?
安全代幣中的治理是如何運(yùn)作的?
如何設(shè)置DAO治理?
持有DAO治理代幣有哪些風(fēng)險(xiǎn)?
如何為以太坊DApp中的投票創(chuàng)建自定義代幣?
使用區(qū)塊鏈進(jìn)行投票的好處是什么?
如何確保區(qū)塊鏈投票中的選民匿名性?
實(shí)施區(qū)塊鏈投票的挑戰(zhàn)是什么?
如何減輕與DAO治理代幣相關(guān)的風(fēng)險(xiǎn)?
首頁(yè) 科技周邊 IT業(yè)界 建造以太坊Dapps:用定制令牌進(jìn)行投票

建造以太坊Dapps:用定制令牌進(jìn)行投票

Feb 16, 2025 am 10:35 AM

Building Ethereum DApps: Voting with Custom Tokens

核心要點(diǎn)

  • 利用DAO中的自定義代幣進(jìn)行提案投票,包括刪除條目和將地址列入黑名單,從而增強(qiáng)去中心化治理和運(yùn)營(yíng)靈活性。
  • 實(shí)施強(qiáng)大的投票機(jī)制,要求驗(yàn)證代幣所有權(quán)并在投票期間鎖定代幣,以防止操縱并確保承諾。
  • 設(shè)計(jì)具有結(jié)構(gòu)化截止日期和執(zhí)行標(biāo)準(zhǔn)的提案和投票系統(tǒng),以維持DAO運(yùn)營(yíng)的有序性和效率。
  • 通過(guò)將提案創(chuàng)建限制為僅限成員,并啟用由DAO所有者控制的緊急刪除功能來(lái)解決潛在的安全問(wèn)題。
  • 探討在以太坊上部署大型智能合約的技術(shù)挑戰(zhàn)和解決方案,強(qiáng)調(diào)代碼優(yōu)化的重要性,以管理燃?xì)獬杀静⒋_保成功部署。

本教程系列的第五部分介紹了使用以太坊構(gòu)建DApp,我們討論了向故事中添加內(nèi)容,以及如何為參與者添加從DAO購(gòu)買代幣和向故事中添加提交內(nèi)容的功能?,F(xiàn)在是DAO最終形式的時(shí)候了:投票、列入/取消黑名單以及股息分配和提取。我們將增加一些額外的輔助函數(shù)。

如果您對(duì)這些內(nèi)容感到困惑,完整的源代碼可在代碼庫(kù)中找到。

投票和提案

我們將使用提案和投票進(jìn)行投票。我們需要兩個(gè)新的結(jié)構(gòu)體:

<code>struct Proposal {
    string description;
    bool executed;
    int256 currentResult;
    uint8 typeFlag; // 1 = delete
    bytes32 target; // 提案目標(biāo)的ID。例如,標(biāo)志1,目標(biāo)XXXXXX(哈希)表示刪除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;
}</code>

提案將包含一個(gè)選民映射,以防止人們對(duì)一個(gè)提案投票兩次,以及其他一些應(yīng)該不言自明的元數(shù)據(jù)。投票將是贊成票或反對(duì)票,并將記住投票者及其投票方式的理由以及投票權(quán)——他們想要用于投票此提案的代幣數(shù)量。我們還添加了一個(gè)提案數(shù)組,以便我們可以將它們存儲(chǔ)在某個(gè)地方,以及一個(gè)用于計(jì)算提案數(shù)量的計(jì)數(shù)器。

現(xiàn)在讓我們構(gòu)建它們的配套函數(shù),從投票函數(shù)開始:

<code>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) <= token.balanceOf(msg.sender), "Vote power exceeds token balance.");
    Proposal storage p = proposals[_proposalId];

    require(p.executed == false, "Proposal must not have been executed already.");
    require(p.deadline > 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;
}</code>

請(qǐng)注意函數(shù)修飾符:通過(guò)將該修飾符添加到我們的合約中,我們可以將其附加到任何未來(lái)的函數(shù)中,并確保只有代幣持有者才能執(zhí)行該函數(shù)。這是一個(gè)可重用的安全檢查!

投票函數(shù)進(jìn)行一些健全性檢查,例如投票權(quán)為正,投票者擁有足夠的代幣來(lái)實(shí)際投票等。然后,我們從存儲(chǔ)中獲取提案,并確保它既沒(méi)有過(guò)期也沒(méi)有被執(zhí)行。對(duì)已經(jīng)完成的提案進(jìn)行投票是沒(méi)有意義的。我們還需要確保這個(gè)人還沒(méi)有投票。我們可以允許更改投票權(quán),但這會(huì)使DAO面臨一些漏洞,例如人們?cè)谧詈笠豢坛坊赝镀钡?。也許是未來(lái)版本的候選者?

然后,我們將新的投票注冊(cè)到提案中,更改當(dāng)前結(jié)果以便于查找分?jǐn)?shù),最后發(fā)出投票事件。但是什么是token.increaseLockedAmount?

這段邏輯增加了用戶的鎖定代幣數(shù)量。該函數(shù)只能由代幣合約的所有者執(zhí)行(此時(shí)希望是DAO),并將阻止用戶發(fā)送超過(guò)注冊(cè)到其帳戶的鎖定金額的代幣數(shù)量。此鎖定在提案失敗或執(zhí)行后解除。

現(xiàn)在讓我們編寫用于提出刪除條目的函數(shù)。

投票刪除和列入黑名單

在本系列的第一部分中,我們計(jì)劃了三個(gè)條目刪除函數(shù):

  1. 刪除條目:經(jīng)投票確認(rèn)后,刪除目標(biāo)條目。投票時(shí)間:48小時(shí)。
  2. 緊急刪除條目[僅限所有者]:只能由所有者觸發(fā)。經(jīng)投票確認(rèn)后,刪除目標(biāo)條目。投票時(shí)間:24小時(shí)。
  3. 緊急刪除圖片[僅限所有者]:僅適用于圖片條目。只能由所有者觸發(fā)。經(jīng)投票確認(rèn)后,刪除目標(biāo)條目。投票時(shí)間:4小時(shí)。

刪除單個(gè)地址的五個(gè)條目會(huì)導(dǎo)致列入黑名單。

讓我們看看我們現(xiàn)在如何做到這一點(diǎn)。首先,是刪除函數(shù):

<code>struct Proposal {
    string description;
    bool executed;
    int256 currentResult;
    uint8 typeFlag; // 1 = delete
    bytes32 target; // 提案目標(biāo)的ID。例如,標(biāo)志1,目標(biāo)XXXXXX(哈希)表示刪除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;
}</code>

提出后,提案將添加到提案列表中,并通過(guò)條目哈希記下目標(biāo)條目。保存描述并添加一些默認(rèn)值,并根據(jù)提案類型計(jì)算截止日期。添加提案事件被發(fā)出,提案總數(shù)增加。

接下來(lái)讓我們看看如何執(zhí)行提案。要可執(zhí)行,提案必須有足夠的投票,并且必須超過(guò)其截止日期。執(zhí)行函數(shù)將接受要執(zhí)行的提案的ID。沒(méi)有簡(jiǎn)單的方法可以讓EVM一次執(zhí)行所有未決提案??赡軙?huì)有太多未決提案需要執(zhí)行,并且它們可能會(huì)對(duì)DAO中的數(shù)據(jù)進(jìn)行重大更改,這可能會(huì)超過(guò)以太坊區(qū)塊的燃?xì)庀拗?,從而?dǎo)致交易失敗。構(gòu)建一個(gè)可由任何符合明確定義規(guī)則的人調(diào)用的手動(dòng)執(zhí)行函數(shù)要容易得多,這樣社區(qū)就可以關(guān)注需要執(zhí)行的提案。

<code>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) <= token.balanceOf(msg.sender), "Vote power exceeds token balance.");
    Proposal storage p = proposals[_proposalId];

    require(p.executed == false, "Proposal must not have been executed already.");
    require(p.deadline > 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;
}</code>

我們通過(guò)其ID獲取提案,檢查它是否滿足未執(zhí)行且截止日期已過(guò)要求,然后如果提案的類型是刪除提案并且投票結(jié)果為正,我們使用已編寫的刪除函數(shù),最后發(fā)出我們添加的新事件(將其添加到合約頂部)。assert調(diào)用在那里與require語(yǔ)句的作用相同:assert通常用于“斷言”結(jié)果為真。Require用于先決條件。在功能上它們是相同的,區(qū)別在于assert語(yǔ)句無(wú)法接受消息參數(shù)來(lái)處理它們失敗的情況。該函數(shù)通過(guò)為該提案中的所有投票解鎖代幣結(jié)束。

我們可以使用相同的方法添加其他類型的提案,但首先,讓我們更新deleteSubmission函數(shù)以禁止在其帳戶上有五個(gè)或更多刪除的用戶:這意味著他們一直在提交社區(qū)反對(duì)的內(nèi)容。讓我們更新deleteSubmission函數(shù):

<code>struct Proposal {
    string description;
    bool executed;
    int256 currentResult;
    uint8 typeFlag; // 1 = delete
    bytes32 target; // 提案目標(biāo)的ID。例如,標(biāo)志1,目標(biāo)XXXXXX(哈希)表示刪除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;
}</code>

這樣更好。自動(dòng)列入黑名單,刪除五次。不給列入黑名單的地址贖回的機(jī)會(huì)是不公平的。我們還需要定義黑名單函數(shù)本身。讓我們同時(shí)做這兩件事,并將取消黑名單的費(fèi)用設(shè)置為,例如,0.05以太幣。

<code>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) <= token.balanceOf(msg.sender), "Vote power exceeds token balance.");
    Proposal storage p = proposals[_proposalId];

    require(p.executed == false, "Proposal must not have been executed already.");
    require(p.deadline > 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;
}</code>

請(qǐng)注意,列入黑名單的帳戶的代幣將被鎖定,直到他們發(fā)送取消黑名單的費(fèi)用。

其他類型的投票

根據(jù)我們上面編寫的函數(shù)的靈感,嘗試編寫其他提案。有關(guān)劇透,請(qǐng)查看項(xiàng)目的GitHub代碼庫(kù)并從那里復(fù)制最終代碼。為簡(jiǎn)潔起見(jiàn),讓我們繼續(xù)討論我們?nèi)栽贒AO中剩余的其他函數(shù)。

章節(jié)結(jié)束

一旦達(dá)到故事的時(shí)間或章節(jié)限制,就該結(jié)束故事了。日期之后,任何人都可以調(diào)用結(jié)束函數(shù),這將允許提取股息。首先,我們需要一個(gè)新的StoryDAO屬性和一個(gè)事件:

<code>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;
}</code>

然后,讓我們構(gòu)建函數(shù):

<code>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 < len; i++) {
        token.decreaseLockedAmount(p.votes[i].voter, p.votes[i].power);
    }

    p.executed = true;
    emit ProposalExecuted(_id);
}</code>

簡(jiǎn)單:它在將收集的費(fèi)用發(fā)送給所有者并發(fā)出事件后停用故事。但在實(shí)際上,這并沒(méi)有真正改變DAO的整體情況:其他函數(shù)不會(huì)對(duì)它結(jié)束做出反應(yīng)。因此,讓我們構(gòu)建另一個(gè)修飾符:

<code>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;
}</code>

然后,我們將此修飾符添加到除withdrawToOwner之外的所有函數(shù)中,如下所示:

<code>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 < proposals.length; i++) {
        if (proposals[i].executed == false && proposals[i].voters[_voter] == true) {
            return false;
        }
    }
    return true;
}</code>

如果DAO中還有剩余的代幣,讓我們收回它們并接管這些代幣的所有權(quán),以便以后能夠?qū)⑺鼈冇糜诹硪粋€(gè)故事:

<code>bool public active = true;
event StoryEnded();</code>

unlockMyTokens函數(shù)用于解鎖特定用戶可能鎖定的所有鎖定代幣。不應(yīng)該發(fā)生這種情況,并且應(yīng)該通過(guò)大量的測(cè)試來(lái)刪除此函數(shù)。

股息分配和提取

現(xiàn)在故事已經(jīng)結(jié)束,需要將為提交收取的費(fèi)用分配給所有代幣持有者。我們可以重新使用我們的白名單來(lái)標(biāo)記所有已經(jīng)提取費(fèi)用的人:

<code>function endStory() storyActive external {
    withdrawToOwner();
    active = false;
    emit StoryEnded();
}</code>

如果這些股息在一定時(shí)間限制內(nèi)未提取,所有者可以獲取剩余部分:

<code>modifier storyActive() {
    require(active == true);
    _;
}</code>

作為家庭作業(yè),考慮一下重新使用這個(gè)已部署的智能合約、清除其數(shù)據(jù)、保留池中的代幣并從這里重新啟動(dòng)另一章而不重新部署是多么容易或困難。嘗試自己這樣做,并關(guān)注代碼庫(kù)以獲取本系列涵蓋此內(nèi)容的未來(lái)更新!還要考慮額外的激勵(lì)機(jī)制:也許帳戶中的代幣數(shù)量會(huì)影響他們從故事結(jié)束獲得的股息?你的想象力是無(wú)限的!

部署問(wèn)題

鑒于我們的合約現(xiàn)在相當(dāng)大,部署和/或測(cè)試它可能會(huì)超過(guò)以太坊區(qū)塊的燃?xì)庀拗啤_@就是限制大型應(yīng)用程序部署到以太坊網(wǎng)絡(luò)的原因。為了無(wú)論如何部署它,請(qǐng)嘗試在編譯期間使用代碼優(yōu)化器,方法是更改truffle.js文件以包含優(yōu)化的solc設(shè)置,如下所示:

<code>struct Proposal {
    string description;
    bool executed;
    int256 currentResult;
    uint8 typeFlag; // 1 = delete
    bytes32 target; // 提案目標(biāo)的ID。例如,標(biāo)志1,目標(biāo)XXXXXX(哈希)表示刪除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;
}</code>

這將對(duì)代碼運(yùn)行優(yōu)化器200次,以查找可以在部署前進(jìn)行縮小、刪除或抽象的區(qū)域,這應(yīng)該會(huì)大大降低部署成本。

結(jié)論

這就結(jié)束了我們?cè)敱M的DAO開發(fā)——但這門課程還沒(méi)有結(jié)束!我們?nèi)匀槐仨殲檫@個(gè)故事構(gòu)建和部署UI。幸運(yùn)的是,由于后端完全托管在區(qū)塊鏈上,構(gòu)建前端要簡(jiǎn)單得多。讓我們?cè)诒鞠盗械牡箶?shù)第二部分中看看這一點(diǎn)。

關(guān)于使用自定義代幣構(gòu)建以太坊DApp和投票的常見(jiàn)問(wèn)題

區(qū)塊鏈投票在實(shí)踐中是如何運(yùn)作的?

區(qū)塊鏈投票是一個(gè)利用區(qū)塊鏈技術(shù)的透明性和安全性的去中心化投票系統(tǒng)。理論上,它應(yīng)該完美運(yùn)行,但在實(shí)踐中,它經(jīng)常遇到挑戰(zhàn)。投票過(guò)程涉及在以太坊區(qū)塊鏈上創(chuàng)建智能合約,每個(gè)投票都是可以驗(yàn)證的交易。然而,選民匿名性、投票操縱以及使用區(qū)塊鏈平臺(tái)的技術(shù)復(fù)雜性等問(wèn)題可能會(huì)阻礙其實(shí)際實(shí)施。

什么是DAO投票機(jī)制?

DAO(去中心化自治組織)投票機(jī)制是允許DAO中的代幣持有者根據(jù)其代幣所有權(quán)對(duì)提案進(jìn)行投票的系統(tǒng)。最常見(jiàn)的機(jī)制包括簡(jiǎn)單多數(shù)投票,如果提案獲得超過(guò)50%的投票,則該提案被接受;以及二次投票,其中對(duì)提案投多票的成本呈指數(shù)級(jí)增長(zhǎng)。

安全代幣中的治理是如何運(yùn)作的?

安全代幣中的治理通常通過(guò)投票系統(tǒng)來(lái)處理,在該系統(tǒng)中,代幣持有者可以對(duì)項(xiàng)目的各個(gè)方面進(jìn)行投票。這可能包括關(guān)于項(xiàng)目開發(fā)、代幣經(jīng)濟(jì)學(xué)甚至治理系統(tǒng)本身變化的決策。代幣持有者的投票權(quán)通常與其持有的代幣數(shù)量成正比。

如何設(shè)置DAO治理?

設(shè)置DAO治理涉及在以太坊區(qū)塊鏈上創(chuàng)建一個(gè)智能合約,該合約概述了組織的規(guī)則,包括投票權(quán)和提案機(jī)制。然后將此合約部署到區(qū)塊鏈上,并將代表投票權(quán)的代幣分發(fā)給成員。然后,成員可以提出并投票表決對(duì)組織的更改。

持有DAO治理代幣有哪些風(fēng)險(xiǎn)?

由于加密貨幣的波動(dòng)性和圍繞DAO的法規(guī)不確定性,持有DAO治理代幣可能存在風(fēng)險(xiǎn)。例如,商品期貨交易委員會(huì)(CFTC)警告說(shuō),使用DAO代幣進(jìn)行投票可能被視為一種市場(chǎng)操縱形式。此外,如果DAO管理不善或成為黑客攻擊的受害者,代幣持有者可能會(huì)損失投資。

如何為以太坊DApp中的投票創(chuàng)建自定義代幣?

為以太坊DApp中的投票創(chuàng)建自定義代幣涉及在以太坊區(qū)塊鏈上編寫和部署智能合約。此合約定義了代幣的屬性,例如其名稱、符號(hào)和總供應(yīng)量。一旦合約部署完畢,代幣就可以分發(fā)給用戶,然后用戶可以使用它們來(lái)對(duì)DApp中的提案進(jìn)行投票。

使用區(qū)塊鏈進(jìn)行投票的好處是什么?

區(qū)塊鏈投票提供了多種好處,包括透明度、安全性和不變性。投票被記錄為區(qū)塊鏈上的交易,使其透明且可驗(yàn)證。區(qū)塊鏈的去中心化性質(zhì)也使得任何單一方都難以操縱投票過(guò)程。

如何確保區(qū)塊鏈投票中的選民匿名性?

由于區(qū)塊鏈交易的透明性質(zhì),確保區(qū)塊鏈投票中的選民匿名性可能具有挑戰(zhàn)性。但是,可以使用諸如零知識(shí)證明之類的技術(shù)來(lái)驗(yàn)證投票的有效性,而無(wú)需透露投票者的身份。

實(shí)施區(qū)塊鏈投票的挑戰(zhàn)是什么?

由于技術(shù)復(fù)雜性、法規(guī)不確定性和潛在的安全風(fēng)險(xiǎn),實(shí)施區(qū)塊鏈投票可能具有挑戰(zhàn)性。用戶需要熟悉區(qū)塊鏈技術(shù)才能參與投票過(guò)程,監(jiān)管機(jī)構(gòu)可能對(duì)區(qū)塊鏈投票系統(tǒng)的合法性和安全性表示擔(dān)憂。

如何減輕與DAO治理代幣相關(guān)的風(fēng)險(xiǎn)?

減輕與DAO治理代幣相關(guān)的風(fēng)險(xiǎn)包括仔細(xì)管理DAO、徹底的安全措施以及隨時(shí)了解監(jiān)管發(fā)展。同樣重要的是要使您的投資組合多樣化,并且不要投資超過(guò)您所能承受的損失。

以上是建造以太坊Dapps:用定制令牌進(jìn)行投票的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
您的設(shè)備喂養(yǎng)AI助手并收集個(gè)人數(shù)據(jù),即使他們睡著了。這是如何知道您分享的內(nèi)容。 您的設(shè)備喂養(yǎng)AI助手并收集個(gè)人數(shù)據(jù),即使他們睡著了。這是如何知道您分享的內(nèi)容。 Jul 05, 2025 am 01:12 AM

不管喜歡與否,人工智能已成為日常生活的一部分。許多設(shè)備(包括電動(dòng)剃須刀和牙刷)已成為AI驅(qū)動(dòng)的“使用機(jī)器學(xué)習(xí)算法來(lái)跟蹤一個(gè)人的使用方式,Devi的方式

由于新的Microsoft AI型號(hào) 由于新的Microsoft AI型號(hào) Jul 05, 2025 am 12:44 AM

一種新的人工智能(AI)模型已經(jīng)證明了比幾個(gè)使用最廣泛使用的全球預(yù)測(cè)系統(tǒng)更快,更精確地預(yù)測(cè)重大天氣事件的能力。該名為Aurora的模型已接受過(guò)培訓(xùn)。

高級(jí)AI型號(hào)的CO&#8322;回答相同問(wèn)題時(shí)的排放量比更常見(jiàn)的LLM 高級(jí)AI型號(hào)的CO&#8322;回答相同問(wèn)題時(shí)的排放量比更常見(jiàn)的LLM Jul 06, 2025 am 12:37 AM

根據(jù)最近的一項(xiàng)研究,我們?cè)噲D使AI模型的功能越精確,其碳排放量就越大 - 某些提示產(chǎn)生的二氧化碳比其他提示高達(dá)50倍。

威脅AI聊天機(jī)器人,它將撒謊,作弊和'讓您死”以阻止您,并警告 威脅AI聊天機(jī)器人,它將撒謊,作弊和'讓您死”以阻止您,并警告 Jul 04, 2025 am 12:40 AM

根據(jù)一項(xiàng)新的研究,人工智能(AI)模型在模型的目標(biāo)和用戶決定之間發(fā)生沖突時(shí)可能會(huì)威脅和勒索人類。

ai不斷地'幻覺(jué)”,但是有一個(gè)解決方案 ai不斷地'幻覺(jué)”,但是有一個(gè)解決方案 Jul 07, 2025 am 01:26 AM

大型技術(shù)實(shí)驗(yàn)人工智能(AI)的主要關(guān)注點(diǎn)并不是它可能主導(dǎo)人類。真正的問(wèn)題在于大語(yǔ)言模型(LLMS)的持續(xù)不準(zhǔn)確性,例如Open AI的Chatgpt,Google的Gemini和

研究表明,當(dāng)問(wèn)題變得太困難時(shí) 研究表明,當(dāng)問(wèn)題變得太困難時(shí) Jul 07, 2025 am 01:02 AM

人工智能(AI)推理模型并不像看起來(lái)那樣能力。實(shí)際上,根據(jù)Apple的研究人員的說(shuō)法,當(dāng)任務(wù)變得過(guò)于復(fù)雜時(shí),它們的表現(xiàn)會(huì)完全崩潰。

在網(wǎng)絡(luò)攻擊M&S和合作社的網(wǎng)絡(luò)攻擊背后捕獲了狩獵者的逮捕 在網(wǎng)絡(luò)攻擊M&S和合作社的網(wǎng)絡(luò)攻擊背后捕獲了狩獵者的逮捕 Jul 11, 2025 pm 01:36 PM

英國(guó)國(guó)家犯罪局(NCA)逮捕了四名涉嫌參與針對(duì)Marks和Spencer(M&S),合作社和Harrods的網(wǎng)絡(luò)攻擊的人

See all articles