dYdXコミュニティトレジャリー支出提案の構築に関するテクニカルガイド

ethDYDXをコミュニティトレジャリーから宛先アドレスに送り込む方法に関する技術的な、ステップバイステップガイド。

Reverieは、dYdX_ガバナンスコントラクト_リポジトリに、$ethDYDXをプルリクエスト(PR)を通じてコミュニティトレジャリーから送り込むガバナンス提案を提出するための、包括的な技術的ガイドをまとめました。

この提案を作成するには、dYdXコミュニティメンバーは、提案力の少なくとも5Mガバナンストークン(総供給の0.5%)短いタイムロック投票提案のしきい値)を持っている必要があります。

予備要件

プルリクエスト(PR)の完了に先立ち、以下のステップを完了する必要があります:

  1. **提案ライフサイクル:**DRCは提案テンプレートに従って掲載し、スナップショット投票が成功する必要があります。

  2. **宛先アドレス:**宛先アドレスは、事前に生成する必要があります。宛先アドレスがマルチシグの場合、マルチシグウォレットを作成する必要があります。

  3. **GitHub口座:**リポジトリをフォークするためのGitHubアカウントです。

  4. **送金額(オプション):**希望される場合、リクエストされた送金額は、PRに先駆けて確立されています。ただし、概金額を使用する場合、承認前に最終ステップとして設定できます。

  5. **DIP IPFSハッシュ(オプション):**金額がわかっている場合、DIPは最終的に決定され、IPFSにプッシュし、ハッシュを生成する必要があります。ただし、金額が確定していない場合は、承認前の最終段階として設定することが可能です。

提案の構築

  1. dYdXガバナンスコントラクトリポジトリGitHub口座に****フォークしてください。

2. リポジトリをクローンし、[username]を自分自身に変更してください。

git clone https://github.com/[username]/governance-contracts.git

3. 構成変数

src/config/index.tsに、テストのために使用されるconfigSchema定数に2つの新しい変数を追加します。以下のコードブロックで、**「PROPOSAL_NAME」「PROPOSAL」**フィールドを、送信する提案の名前に変更します。

src/deploy-config/base-config.tsに、config定数に宛先アドレスと金額を新しい変数として追加します:

:金額は、ERC20標準あたり10 ^ 18に乗じる必要があります。金額がまだわからない場合、一時金額を使用できます(例: 10 → 10000000000000000000)

src/lib/constants.tsに、他のリポジトリで承認されたDIPを参照するIPFSハッシュ変数を追加します:

:DIPがまだ公開されていない場合は、テスト用に仮の値(例:‘0x0000000000000000000000000000000000000000000000000000000000000000’)\を使用することができます。

4.提案コード

_src/migrations_で、proposal → proposal-name.tsにちなんで名前を付けた新しいファイルを作成し、以下のコードを入力します:

a. 上部に必要なインポートを追加します:

b. インポート以下の提案名を使用して新しい関数を作成し、以下のコードを2つのユニークな変数で追加します:

  • destinationAddress → これは、資金を受け取るアドレスです

  • deployConfig.PROPOSAL_FUNDING_AMOUNT → これは、私たちが以前に作成した変数です。これは、送金する金額を決定します

5. デプロイメントタスク

提案が作成されると、提案を送信するために必要なトランザクションとコールデータを生成するデプロイメントを書くことができます。

_tasks/deployment_で、提案コード → proposal-name.tsに使用する同じ名前の新しいファイルを作成し、以下のコードで入力します:

a. 以下の変数で必要なインポートを追加します:

DIP_NUMBER_IPFS_HASH → これは、lib/constantsに追加する変数です

createProposalNameProposal → これは、/src/migrations/proposal-nameで作成した関数です

b. hardhatタスクを作成し、タスクの開始\行に提案情報を入力しますdeploy:proposal-name:のproposal-nameに置き換え、「Proposal Description」の簡単な説明に置き換えます。

最後の行は、提案コードからインポートした関数を呼び出すため、その調整が必要です。

6. テストの構築

コードをデプロイメントする準備ができたので、提案を中心にいくつかのテストを構築します。テストは、ローカルとメインネットフォークを使用して、オンチェーンで実行される提案をシミュレートします。

a. 提案テストの追加

test/migrationsに、proposal name → proposal-name.tsで新しいファイルをもう一度追加し、以下のコードを含めます:

  • 提案関数を含め、必要なインポートを追加します:

createProposalNameProposal → これは、/src/migrations/proposal-nameで作成した関数です。\

MOCK_PROPOSAL_IPFS_HASH → テストのためにモックハッシュを使用します。

  • テスト関数を以下のステップで追加します:

    • fundProposalNameViaProposal → この関数を作成し、提案名に一致する名前を変更します。

    • destinationAddress → 宛先名にマッチするようにラベル付けします。

    • deployConfig.PROPOSAL_FUNDING_AMOUNT → これは、base-configファイルからの変数に置き換えられます。

    • FUND_PROPOSAL_NAME_PROPOSAL_ID → これは、_config/index.ts_で作成した変数です。

    • createProposalNameProposal → 上記の関数を使用するためにインポートしました。

    • fundProposalNameViaNoProposal → この関数を作成し、提案名に一致する名前を変更します。

\以下のコードを通じて、これらの変数すべてを提案名と既存の変数に置き換えます。

b. テストスクリプトにテスト関数を追加する

test/migrations/deploy-contracts-for-test.tsに、上記の関数を追加します:

  • 作成した関数をインポートする

  • 一般的なテスト関数 → executeProposalNameProposalForTestを作成し、両方の関数にテストを追加し、提案に一致する名前を置き換えます

  • また、これまで作成した設定変数TEST_PROPOSAL_NAME_TRUST_WITH_PROPOSALと、deployConfigからPROPOSAL_NAME_ADDRESSを呼び出します。

c. テストヘルパーにコントラクトを追加する

test/helpers/get-deployed-contracts-for-test.tsに、上記の関数を追加し、メインネットフォークテストでテストが実行されるようにします。

  • executeProposalNameProposalForTest関数をマイグレーションファイルからインポートします。

  • getDeployedContractsForTest()関数に関数を追加します:

d. 最終テストファイル

最後に、モック提案の後、IPFSハッシュとマルチシグの残高のテストを追加し、すべてが予想通りに終了するようにします。

test/miscに、「proposal name labelled → proposal-name-proposal.spec.ts(提案名ラベル付き → 提案名-提案.spec.ts)」と書かれた新しいファイルを追加し、これらの2つのテストを記入します。

  1. IPFSハッシュは、DIP_NUMBER_IPFS_HASHを通じてlibからインポートします。

  2. ProposalNameIdを使用して、次のproposalId番号をハードコードします。

  3. 提案ハッシュは、定数ハッシュでチェックします。

  4. PROPOSAL_NAME_ADDRESSをチェックし、PROPOSAL_FUNDING_AMOUNTの残高が予想されているかどうか確認します。

注:このアドレスにdYdXがすでに存在する場合、テストに合格する残高にハードコードする必要があります。

7. PRの送信

これらのコード変更がすべて行われ、ローカルに保存されたら、フォークされたリポジトリにコミットし、dYdXリポジトリにPRを開くことができます。

a. コマンドラインを通じて変更をコミットする

b.dYdXリポジトリにPRを送信する

c. リポジトリマネージャーからのレビューと承認を待つ

Last updated

Was this helpful?