top of page

Codieren Sie Ihr erstes DAO

Autorenbild: blockliv3blockliv3

Codieren Sie Ihr erstes DAO



DAOs sind eine effektive und sichere Möglichkeit, mit Gleichgesinnten auf der ganzen Welt zusammenzuarbeiten. DAOs sind wie digitale Organisationen mit einem Bankkonto. Dies könnte der nächste große Trend in der Kryptotechnik sein, und sie könnten die Zukunft von Unternehmen sein


Warum brauchen wir DAOs?

Eine Organisation mit jemandem zu gründen, bei der es um Finanzierung und Geld geht, erfordert viel Vertrauen in die Menschen, mit denen Sie zusammenarbeiten. Aber es ist schwer, jemandem zu vertrauen, mit dem man bisher nur im Internet interagiert hat. Mit DAOs müssen Sie niemandem in der Gruppe vertrauen, sondern nur dem DAO-Code, der zu 100 % transparent und von jedem überprüfbar ist.


Dies eröffnet so viele neue Möglichkeiten für die globale Zusammenarbeit und Koordination.


Token-basierte Mitgliedschaft

Normalerweise völlig genehmigungsfrei, abhängig vom verwendeten Token. Meistens können diese Governance-Token an einer dezentralen Börse zulassungsfrei gehandelt werden. Andere müssen durch die Bereitstellung von Liquidität oder einem anderen „Arbeitsnachweis“ verdient werden. In jedem Fall gewährt das einfache Halten des Tokens Zugang zur Abstimmung.


Wird normalerweise verwendet, um breite dezentrale Protokolle und / oder Token selbst zu steuern.


MakerDAO – Der Token MKR von MakerDAO ist an dezentralen Börsen weit verbreitet. Jeder kann also kaufen, Stimmrecht über die Zukunft des Maker-Protokolls zu haben.


Konfiguration

Wir werden dafür das Hardhat-Framework verwenden; Erstellen Sie zunächst einen Ordner und führen Sie ihn aus


npm init - ja

npm install --save-dev hardhat

Führen Sie im selben Verzeichnis, in dem Sie Hardhat installiert haben, Folgendes aus:


npx Schutzhelm

Und wählen Sie create an empty hardhat.config.js


Installieren Sie schließlich ethers.js und Waffel


npm install --save-dev @nomiclabs/hardhat-ethers ethers @nomiclabs/hardhat-waffle ethereum-waffle chai

Fügen Sie die hervorgehobene Zeile oben in hardhat.config.js hinzu:


require("@nomiclabs/hardhat-waffle");

Erstellen Sie zunächst ein neues Verzeichnis namens Contracts und erstellen Sie innerhalb des Verzeichnisses eine Datei namens GovernanceToken.sol


Wir verwenden openzeppelin für unser Token, also installieren Sie es mit


npm install --save-dev @openzeppelin/contracts

Intelligente Verträge

Als Nächstes erstellen wir unser Governance-Token mit einem maximalen Angebot von 1000 und überschreiben einige der erforderlichen Funktionen.


Lassen Sie uns nun ein Protokoll erstellen, das wir mit diesem Token steuern möchten. Das ist dieser wirklich einfache Box-Vertrag, der dem von uns erstellten DAO gehören wird.


Lassen Sie uns eine Funktion namens store erstellen, die vom DAO aufgerufen werden kann, um die Zustandsvariable zu ändern.


// Verträge/Box.sol

// SPDX-Lizenzkennung: MIT

Pragma Solidität ^0.8.0;


importiere „@openzeppelin/contracts/access/Ownable.sol“;


Vertragsbox ist besitzbar {

uint256 privater Wert;


// Wird ausgegeben, wenn sich der gespeicherte Wert ändert

Ereignis ValueChanged (uint256 newValue);


// Speichert einen neuen Wert im Vertrag

Funktionsspeicher (uint256 newValue) public onlyOwner {

Wert = neuerWert;

emittiere ValueChanged(newValue);

}


// Liest den letzten gespeicherten Wert

function retrieve() öffentliche Ansicht gibt zurück (uint256) {

Rückgabewert;

}

}Als Nächstes erstellen wir unsere Governance-Verträge. Erstellen Sie also in einem Ordner mit dem Namen Governance eine Datei mit dem Namen GovernanceContract.sol. Dieser Vertrag enthält die gesamte Logik für unser DAO.


// SPDX-Lizenzkennung: MIT

Pragma Solidität ^0.8.0;


importieren Sie "@openzeppelin/contracts/governance/Governor.sol";

import "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol";

import "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol";

import "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol";

import "@openzeppelin/contracts/governance/extensions/GovernorTimelockControl.sol";

import "../GovernanceToken.sol";


Vertrag GovernorContract ist

Gouverneur,

GouverneurZählenEinfach,

GouverneurStimmen,

GouverneurStimmenQuorumFraktion,

GovernorTimelockControl

{

uint256 öffentlich s_votingDelay;

uint256 öffentlich s_votingPeriod;


Konstrukteur(

GovernanceToken _token,

TimelockController _timelock,

uint256 _quorumPercentage,

uint256 _votingPeriod,

uint256 _votingDelay

)

Gouverneur ("Gouverneursvertrag")

GovernorVotes(_token)

GovernorVotesQuorumFraction(_quorumPercentage)

GovernorTimelockControl(_timelock)

{

s_votingDelay = _votingDelay;

s_votingPeriod = _votingPeriod;

}


Funktion VotingDelay() Überschreiben der öffentlichen Ansicht gibt zurück (uint256) {

Rückgabe s_votingDelay; // 1 = 1 Block

}


Funktion VotingPeriod () Überschreiben der öffentlichen Ansicht gibt zurück (uint256) {

Rückgabe s_votingPeriod; // 45818 = 1 Woche

}


// Die folgenden Funktionen sind Überschreibungen, die von Solidity benötigt werden.


Funktionsquorum (uint256 blockNumber)

Öffentlichkeit

Aussicht

override(IGovernor, GovernorVotesQuorumFraction)

gibt zurück (uint256)

{

super.quorum(blockNumber) zurückgeben;

}


Funktion getVotes (Adresse Konto, uint256 Blocknummer)

Öffentlichkeit

Aussicht

override(IGovernor, GovernorVotes)

gibt zurück (uint256)

{

super.getVotes (Konto, Blocknummer) zurückgeben;

}


Funktionsstatus (uint256 ProposalId)

Öffentlichkeit

Aussicht

überschreiben (Governor, GovernorTimelockControl)

Rückgaben (ProposalState)

{

super.state(proposalId) zurückgeben;

}


Funktion vorschlagen (

address[] Speicherziele,

uint256[] Speicherwerte,

bytes[] Speicheraufrufdaten,

Zeichenfolge Speicherbeschreibung

) public override(Governor, IGovernor) gibt (uint256) zurück {

return super.propose (Ziele, Werte, Aufrufdaten, Beschreibung);

}


Funktion _execute(

uint256 Angebots-ID,

address[] Speicherziele,

uint256[] Speicherwerte,

bytes[] Speicheraufrufdaten,

Bytes32 BeschreibungHash

) interne Überschreibung (Governor, GovernorTimelockControl) {

super._execute(proposalId, Ziele, Werte, Calldatas, descriptionHash);

}


Funktion _cancel(

address[] Speicherziele,

uint256[] Speicherwerte,

bytes[] Speicheraufrufdaten,

Bytes32 BeschreibungHash

) Interne Überschreibung (Governor, GovernorTimelockControl) gibt (uint256) zurück {

return super._cancel(targets, values, calldatas, descriptionHash);

}


Funktion _executor()

intern

Aussicht

überschreiben (Governor, GovernorTimelockControl)

Rückgabe (Adresse)

{

super zurückgeben._executor();

}


Funktion unterstützt Interface (bytes4 interfaceId)

Öffentlichkeit

Aussicht

überschreiben (Governor, GovernorTimelockControl)

gibt zurück (bool)

{

super.supportsInterface(interfaceId) zurückgeben;

}

}

Sie können den openzepplin-Assistenten verwenden, um Ihren Governancevertrag anzupassen


Zuletzt müssen wir eine GovernanceTimelock.sol erstellen. Dies ist der Vertrag, der unser Protokoll einschließlich der Gelder in unserem DAO besitzen wird.


Es werden 3 Eingabeparameter benötigt: eine Mindestverzögerung ist, wie lange Sie warten werden, bevor Sie ausführen, Vorschlagende sind eine Liste von Mitgliedern, die an der Abstimmung teilnehmen können, und Ausführende ist eine Liste von Adressen, die Vorschläge ausführen werden.


// SPDX-Lizenzkennung: MIT

Pragma Solidität ^0.8.0;


import "@openzeppelin/contracts/governance/TimelockController.sol";


Vertrag GovernanceTimeLock ist TimelockController {

// minDelay gibt an, wie lange Sie vor der Ausführung warten müssen

// Proposers ist die Liste der Adressen, die Vorschläge machen können

// Executors ist die Liste der Adressen, die ausgeführt werden können

Konstrukteur(

uint256 minVerzögerung,

address[] Speichervorschläger,

address[] Speicherausführer

) TimelockController(minDelay, Proposer, Executors) {}

}

Zurück zu GovernanceContract.sol nimmt der Konstruktor zwei Parameter: die Governance, die wir erstellt haben, um die Stimmrechte zu bestätigen, und die GovernanceTimelock-Instanz, um unser DAO zu verwalten.


Nun zum Kompilierungslauf:


npx Hardhat kompilieren


Fazit

Das war es also für dieses Codierungs-Tutorial eines DAO.

Wenn Sie mehr über DAOs erfahren möchten, sehen Sie sich dieses Video an, in dem Julien erklärt, wie DAOs funktionieren.

0 Ansichten0 Kommentare

Aktuelle Beiträge

Alle ansehen

Wir stellen Walken vor

verfolgt Ihr Smartphone oder Wearable Ihre täglichen Schritte und erstellt eine faszinierende Statistik? Jenseits der Zahlen hat eine...

Neu bei Ultra

Neu bei Ultra Die fünfte Ausgabe von Ultra Notes enthält mehrere Updates und Neuigkeiten in Bezug auf Ultra, wie z. B. die neueste...

Opmerkingen


bottom of page