Technischer Leitfaden zur Erstellung eines Ausgabenvorschalgs für die dYdX Community
Ein technischer Schritt-für-Schritt-leitfaden zur Erstellung eines Vorschlags zur Übertragung von ethDYDX aus Mitteln der Community an eine Zieladresse.
Reverie hat einen umfassenden, technischen Leitfaden für die Einreichung eines Governance-Vorschlags zur Übertragung von $ethDYDX aus Mitteln der Community durch eine Pull-Anfrage in das dYdX Governance-Contracts Repository zusammengestellt.
Um diesen Vorschlag zu erstellen, muss ein Mitglied der dYdX-Community über mindestens 5 Mio. Governance-Token (0,5 % des Gesamtangebots) an Vorschlagsrechten (Vorschlagsschwellenwert für eine kurzzeiitige Wahl) verfügen.
Vorläufige Anforderungen
Die folgenden Schritte müssen vor der Fertigstellung der Pull-Anfrage abgeschlossen werden:
Lebenszyklus des Vorschlags Das DRC muss gemäß der Vorschlagsvorlage gepostet werden und es muss eine erfolgreiche Snapshot-Abstimmung erfolgen.
Zieladresse: Die Zieladresse muss im Voraus generiert werden. Wenn die Zieladresse eine Multi-Sig-Adresse ist, muss das Multi-Sig-Wallet erstellt werden.
GitHub-Konto: Ein GitHub-Konto, um das Repository zu spalten.
Übertragungsmenge (optional): Vorzugsweise wurde die angeforderte Übertragungsmenge schon vor der Pull-Anfrage festgelegt. Wenn allerdings ein fiktiver Betrag verwendet wird, kann es als letzter Schritt vor der Genehmigung erfolgen.
DIP-IPFS-Hash (optional): Wenn der Übertragungsbetrag bekannt ist, sollte das DIP abgeschlossen und zum IPFS verschoben werden, um den Hash zu generieren. Dies kann jedoch als ein letzter Schritt vor der Genehmigung festgelegt werden, wenn der Betrag noch nicht ermittelt wurde.
Den Vorschlag erstellen
Gabeln Sie das d**YdX-Governance-Contracts-Repository **auf Ihr GitHub-Konto.

2. Klonen Sie das Repository, und ändern Sie den [username] auf Ihren eigenen.
git clone https://github.com/[username]/governance-contracts.git3. Konfigurationsvariablen
Fügen Sie in src/config/index.ts zwei neue Variablen zur configSchema-Konstante hinzu, die für Testzwecke verwendet werden. Ändern Sie in den folgenden Code-Blocks die Felder „VORSCHLAG_NAME“ und „VORSCHLAG“ in den Namen des eingereichten Vorschlags.
Fügen Sie in src/deploy-config/base-config.ts die Zieladresse und die Übertragungsmenge als neue Variablen in der Konfigurationskonstante hinzu:
Hinweis: Der Finanzierungsbetrag muss gemäß ERC20 **mit 10^18 multipliziert **werden. Wenn der Betrag noch nicht bekannt ist, kann auch ein temporärer Betrag verwendet werden (z. B. 10 → 10 000 000 000 000 000 000).
Fügen Sie in src/lib/constants.ts die IPFS-Hash-Variable hinzu, die auf das im anderen Repository genehmigte DIP verweist:
Hinweis: Wenn das DIP noch nicht veröffentlicht wurde, kannn zum Test ein temporärer Wert verwendet werden (z. B. „0x0 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000“)\
4. Vorschlags-Code
Erstellen Sie in src/migrations eine neue Datei, benannt nach dem Vorschlag → Vorschlag-name.ts und tragen Sie den folgenden Code ein:
a. Fügen Sie die benötigten Importe oben hinzu:
b. Erstellen Sie eine neue Funktion unter Verwendung des Vorschlagnamens unter den Importen und fügen Sie folgenden Code mit zwei einziartigen Variablen hinzu:
Zieladresse → diese Adresse wird die Finanzierung erhalten
deployConfig.PROPOSAL_FUNDING_AMOUNT → dies ist die Variable, die wir zuvor erstellt haben, mit der die zu übertragende Menge festgelegt wird
5. Bereitstellungsaufgabe
Mit dem erstellten Vorschlag können wir die Bereitstellung schreiben, mit der die erforderlichen Transaktions- und Anrufdaten erstellt werden, um den Vorschlag einzureichen.
Erstellen Sie in tasks/deployment, eine neue Datei mit demselben Namen, der auch für den Vorchlags-Code verwendet wurde, → Vorschlag-name.ts und tragen Sie den folgenden Code ein:
a. Fügen Sie die benötigten Importe mit den folgenden Variablen hinzu:
DIP_NUMBER_IPFS_HASH → Dies ist die Variable, die wir in lib/constants hinzufügen.
createProposalNameProposal → Dies ist die Funktion, die wir in /src/migrations/proposal-name erstellt haben.
b. Erstellen Sie die Hardhat-Aufgabe und tragen Sie die Vorschlagsdaten in die Eröffnungszeile der Aufgabe ein. Ersetzen Sie den Vorschlag-name in „deploy:proposal-name: und ersetzen Sie ihn mit einer Beschreibung in „Proposal Description“.
Die letzte Zeile ruft die Funktion auf, die Sie aus dem Vorschlags-Code importiert haben, muss also angepasst werden.
6. Tests durchführen
Nachdem der Code nun für die Bereitstellung bereit ist, wird es Zeit, einige Tests rund um den Vorschlag zu erstellen. Das Testen erfolgt lokal unter Verwendung eines Mainnet-Forks, um zu simulieren, dass ein Vorschlag in der Chain ausgeführt wird.
a. Vorschlagstests hinzufügen
Fügen Sie in Test/Migrationen erneut eine neue Datei mit dem Vorschlagnamen → proposal-name.ts hinzu und tragen Sie den folgenden Code ein:
Fügen Sie die benötigten Importe, einschließlich der Vorschlagsfunktionen hinzu:
createProposalNameProposal → Dies ist die Funktion, die wir in /src/migrations/proposal-name erstellt haben. \
MOCK_PROPOSAL_IPFS_HASH → wir verwenden für Testzwecke ein Attrappen-Hash
Ergänzen Sie die Testfunktionen mit den folgenden Schritten:
fundProposalNameViaProposal → Erstellen Sie diese Funktion und benennen Sie sie um, sodass sie mit dem Vorschlagnamen übereinstimmt.
destinationAddress → Beschriften Sie dies neu, sodass es zum Zielnamen passt
deployConfig.PROPOSAL_FUNDING_AMOUNT → Dies wird durch die Variable aus der Basiskonfigurationsdatei ersetzt.
FUND_PROPOSAL_NAME_PROPOSAL_ID → Diese Variable haben wir in config/index.ts erstellte
createProposalNameProposal → Importieren Sie diese Funktion oben zur Verwendung.
fundProposalNameViaNoProposal → Erstellen Sie diese Funktion und benennen Sie sie um, sodass sie zum Vorschlagnamen passt.
Führen Sie den folgenden Code aus, um alle diese Variablen durch den Vorschlagnamen und bestehende, bereits oben erstellte Variablen zu ersetzen:
b. Fügen Sie Testfunktionen zum Test-Skript hinzu
In test/migrations/deploy-contracts-for-test.ts fügen wir die oben erstellten Funktionen hinzu, sodass Sie in unseren Tests enthalten sind:
Importieren Sie die erstellten Funktionen.
Fügen Sie Tests für beide Funktionen hinzu, indem Sie eine allgemeine Testfunktion erstellen → executeProposalNameProposalForTest, ersetzen Sie den Namen, sodass er zum Vorschlag passt
Wir rufen auch die zuvor erstellte Konfigurationsvariable TEST_PROPOSAL_NAME_TRUST_WITH_PROPOSAL und die PROPOSAL_NAME_ADDRESS von deployConfig auf.
c. Fügen Sie einen Vertrag zu Testhelfern hinzu
Fügen Sie in test/helpers/get-deployed-contracts-for-test.ts die oben erstellte Funktion hinzu, damit die Tests im Mainnet-Fork ausgeführt werden
Importieren Sie die Funktion executeProposalNameProposalForTest aus derMigrationsdatei:
Fügen Sie die Funktion zu getDeployedContractsForTest() hinzu, außerhalb der letzten else-Schleife:
d. Endgültige Testdatei
Schlussendlich fügen wir einen Test sowohl zum IPFS-Hash als auch zur Bilanz des Multi-Sig nach dem Attrappenvorschlag hinzu, um sicherzustellen, dass das Ergebnis wie erwartet aussieht.
Fügen Sie in test/misc eine neue Datei mit dem Vorschlagsnamen → proposal-name-proposal.spec.ts beschriftet, hinzu und tragen Sie diese zwei Tests ein:
Wir importieren diesen IPFS-Hash aus der Bibliothek durch DIP_NUMBER_IPFS_HASH
wir codieren die nächste Vorschlags-Id unter Verwendung von ProposalNameId
wir überprüfen das Vorschlags-Hash mit dem konstanten Hash
wir überprüfen die Adresse PROPOSAL_NAME_ADDRESS, um zu sehen, ob es eine ausgeglichene Bilanz des Betrags PROPOSAL_FUNDING_AMOUNT gibt
Hinweis: wenn diese Adresse bereits DYDX hat, müssen Sie fest einprogrammieren, damit die Bilanz den Test besteht
7. Die Pull-Anfrage einreichen
Nachdem alle diese Codeveränderungen gemacht wurden, können wir an das geforkte Repiository übergeben und eine Pulll-Anfrage an das dYdX für die Überprüfung öffnen:
a. Bestätigen Sie die Änderungen durch die Befehlszeile
b. Reichen Sie eine Pull-Anfrage an das dYdX-Repository ein

c. Warten Sie auf die Überprüfung und Genehmigung durch den Repository-Manager
Last updated