關於DAO社群治理系統開發詳細教程

丸子qy發表於2023-05-09

DAO,是基於區塊鏈核心思想理念(由達成同一個共識的群體自發產生的共創、共建、共治、共享的協同行為)衍生出來的一種組織形態。是區塊鏈解決了人與人之間的信任問題之後的附屬產物。DAO具有充分開放、自主互動、去中心化控制、複雜多樣以及湧現等特點。


一旦達到故事的時間或章節限制,就應該結束故事了。任何人都可以在允許提取股息的日期之後呼叫結束函式。首先,我們需要一個新的StoryDAO屬性和一個事件:bool public active = true; event StoryEnded();

然後,構建函式:

function endStory() storyActive external {     withdrawToOwner();     active = false;     emit StoryEnded(); }

簡單:它將收集的費用傳送給所有者併發出事件後停用故事。但實際上,這並沒有真正改變整個DAO中的任何內容:其他功能對它的結束沒有反應。那麼構建另一個修飾符:

modifier storyActive() {
    require(active == true);
    _;}
複製

然後,將此修飾符新增到除 withdrawToOwner之外的所有函式中,如下所示:

function whitelistAddress(address _add) storyActive public payable {
複製

如果DAO中遺留了任何代幣,將它們取回並接管這些代幣的所有權,以便以後能夠在另一個故事中使用它們:

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函式用於解鎖所有鎖定的代幣,以防某些鎖定代幣為特定使用者鎖定。它不應該發生,並且應該透過大量測試來移除此功能。

股息分配和提款

現在故事已經結束,收集的費用需要分配給所有代幣持有者。可以重新使用我們的白名單來標記所有取消費用的人:

function withdrawDividend() memberOnly external {
    require(active == false);
    uint256 owed = address(this).balance.div(whitelistedNumber);
    msg.sender.transfer(owed);
    whitelist[msg.sender] = false;
    whitelistedNumber--;}
複製

如果這些股息未在一定時限內撤回,可以抓住其餘股息:

function withdrawEverythingPostDeadline() external onlyOwner {
    require(active == false);
    require(now > deadline + 14 days);
    owner.transfer(address(this).balance);}
複製

部署問題

鑑於合約現在非常大,部署和/或測試它可能會超過以太坊區塊的gas限制。這是限制大型應用程式部署在以太坊網路上的原因。無論如何要部署它,在編譯期間嘗試使用程式碼最佳化器,方法是更改 truffle.js檔案以包含用於最佳化的solc設定,如下所示:

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

這將在程式碼中執行最佳化器200次以查詢在部署之前可以縮小,移除或抽象的區域,這將顯著降低部署成本。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70029396/viewspace-2951025/,如需轉載,請註明出處,否則將追究法律責任。

相關文章