dYdXコミュニティトレジャリー支出提案の構築に関するテクニカルガイド
ethDYDXをコミュニティトレジャリーから宛先アドレスに送り込む方法に関する技術的な、ステップバイステップガイド。
Reverieは、dYdX_ガバナンスコントラクト_リポジトリに、$ethDYDXをプルリクエスト(PR)を通じてコミュニティトレジャリーから送り込むガバナンス提案を提出するための、包括的な技術的ガイドをまとめました。
予備要件
プルリクエスト(PR)の完了に先立ち、以下のステップを完了する必要があります:
**宛先アドレス:**宛先アドレスは、事前に生成する必要があります。宛先アドレスがマルチシグの場合、マルチシグウォレットを作成する必要があります。
**GitHub口座:**リポジトリをフォークするためのGitHubアカウントです。
**送金額(オプション):**希望される場合、リクエストされた送金額は、PRに先駆けて確立されています。ただし、概金額を使用する場合、承認前に最終ステップとして設定できます。
**DIP IPFSハッシュ(オプション):**金額がわかっている場合、DIPは最終的に決定され、IPFSにプッシュし、ハッシュを生成する必要があります。ただし、金額が確定していない場合は、承認前の最終段階として設定することが可能です。
提案の構築
2. リポジトリをクローンし、[username]を自分自身に変更してください。
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つのテストを記入します。
IPFSハッシュは、DIP_NUMBER_IPFS_HASHを通じてlibからインポートします。
ProposalNameIdを使用して、次のproposalId番号をハードコードします。
提案ハッシュは、定数ハッシュでチェックします。
PROPOSAL_NAME_ADDRESSをチェックし、PROPOSAL_FUNDING_AMOUNTの残高が予想されているかどうか確認します。
注:このアドレスにdYdXがすでに存在する場合、テストに合格する残高にハードコードする必要があります。
7. PRの送信
これらのコード変更がすべて行われ、ローカルに保存されたら、フォークされたリポジトリにコミットし、dYdXリポジトリにPRを開くことができます。
a. コマンドラインを通じて変更をコミットする
b.dYdXリポジトリにPRを送信する
c. リポジトリマネージャーからのレビューと承認を待つ
Last updated