コマンドラインを使用した契約のデプロイ
スマート・コントラクトをコンパイルしたら、それをOracle Blockchain Platform Besu環境にデプロイできます。
次のステップでは、パッケージ化されたトークン化前受金契約プロジェクトのデプロイ方法を説明します。その他のパッケージ契約については、契約パッケージにバンドルされているREADMEファイルを参照してください。
Oracle Blockchain Platform Besuネットワークの構成
次のコマンドを実行して、プロジェクトのhardhat.config.tsファイルによって消費される値を設定します。
npx hardhat vars set BESU_CHAIN_ID <chain-id>
npx hardhat vars set BESU_RPC_URL <rpc-proxy-url>
npx hardhat vars set BESU_RPX_PROXY_AUTH_TOKEN "Bearer <rpc-auth-token>"
npx hardhat vars set WALLET_SERVICE_BASE_URL <wallet-service-sign-url>
npx hardhat vars set WALLET_SERVICE_ENABLED true
npx hardhat vars set WALLET_SERVICE_ACCOUNTS '[{"address":"0x<address>","walletId":"0x<address>"}]'
npx hardhat vars set WALLET_SERVICE_AUTH_TOKEN "Bearer <wallet-service-auth-token>"Tokenized Depositプロジェクトの場合、次の例に示すように、BESU_RPC_URL値は完全な構成済JSON-RPCプロキシ・エンドポイントです。
https://rpcproxy.example.oracle.com/v1/besu/proxy次の例に示すように、WALLET_SERVICE_BASE_URL値は完全な/transactionエンドポイントです。
https://rpcproxy.example.oracle.com/v1/besu/transaction非アクティブなプロキシ・ペアのデプロイ
次の例に示すように、安定したデプロイメントIDでERC-5982デプロイメント・スクリプトを実行します。このスクリプトは、ERC-20ヘルパー・ライブラリ、アカウント・プロキシおよびトークン化された預入プロキシをデプロイまたは再開します。また、アカウント/トークン・コンテキストをリンクし、両方のプロキシにガバナンス・コンテキストを設定します。
DEPLOYMENT_ID=<deployment-id> \
GOVERNANCE_ADDRESS=<governance-contract-address> \
GOVERNANCE_UUID=<governance-uuid> \
TOKEN_NAME="DepositToken" \
TOKEN_SYMBOL="DP" \
TOKEN_DESCRIPTION="DepositToken proxy contract" \
ADMIN_USER_ID="platformadmin1" \
ADMIN_ORG_ID="org1" \
CONTRACT_METADATA_SMART_CONTRACT_ID="DP123" \
CONTRACT_METADATA_VERSION="1.0.0" \
CONTRACT_METADATA_DESCRIPTION="DepositToken proxy contract" \
CONTRACT_METADATA_AUTHOR="Oracle" \
CONTRACT_METADATA_TAGS='{"assetType":"tokenized deposit","role":"proxy"}' \
npx hardhat run scripts/deploy/deposittoken/deploy-deposittoken-erc-5982.ts --network obp-besuDEPLOYMENT_ID、GOVERNANCE_ADDRESSおよびGOVERNANCE_UUIDの値は必須です。同じデプロイメントIDを再利用して、中断されたデプロイメントを再開します。デプロイメントが正常に完了すると、その再開キャッシュは削除されます。そのIDを使用して再実行すると、新しいデプロイメントが開始されます。
CONTRACT_METADATA_*値は、ERC-7201デプロイメント・レジストリのトークン化された預入プロキシを示します。CONTRACT_METADATA_TAGSは、値が文字列であるJSONオブジェクトである必要があります。
トークンおよびアカウント・プロキシが非アクティブの状態でコマンドが完了します。印刷されたDEPLOYMENT_SUMMARY_JSONを保持し、両方のプロキシ・アドレスを記録します。これらはガバナンス・インテントに必要です。
デプロイメント・インテントの発行
次のスクリプトでは、デフォルトの1時間の提案ウィンドウが環境に適切でない場合は、DEADLINE_SECONDS値を編集して将来の期限を設定します。ガバナンス・コンテキストがデプロイメントによって設定されたすべてのプロキシを含めます。トークン化された預入パッケージの場合、通常、これはトークン・プロキシとアカウント・プロキシの両方を意味します。RPCプロキシおよびウォレット・サービス・ルートを介して発行されたOracle Blockchain Platform Besu提案の場合は、次のスクリプトを実行します。
GOVERNANCE_INTENT_MODE=obp-besu \
GOVERNANCE_ADDRESS=<governance-contract-address> \
GOVERNANCE_UUID=<governance-uuid> \
DEPLOY_TARGETS_JSON='["<token-proxy>","<account-proxy>"]' \
DEADLINE_SECONDS=3600 \
DEPLOY_INTENT_MANIFEST=.obp-da/governance/deploy-intent.json \
npx hardhat run scripts/deploy/deposittoken/governance/propose-deploy-intent.ts --network obp-besuスクリプトは、各ターゲットを検証し、そのEIP-1967実装およびランタイム・コード・ハッシュを解決し、提案を送信し、レビューされたコンポーネントおよび提案結果をDEPLOY_INTENT_MANIFEST変数によって指定されるファイルに書き込みます。
JSON-RPCガバナンスを直接送信するには、次の例に示すように、ローカル署名者を含むHardhatネットワークを使用し、提案トランスポートとネットワークのみを変更します。
GOVERNANCE_INTENT_MODE=json-rpc \
GOVERNANCE_ADDRESS=<governance-contract-address> \
GOVERNANCE_UUID=<governance-uuid> \
DEPLOY_TARGETS_JSON='["<token-proxy>","<account-proxy>"]' \
DEADLINE_SECONDS=3600 \
DEPLOY_INTENT_MANIFEST=.obp-da/governance/deploy-intent.json \
npx hardhat run scripts/deploy/deposittoken/governance/propose-deploy-intent.ts --network <direct-json-rpc-network>
直接ネットワークは、認可された非顧客署名者で構成する必要があります。JSON-RPCをウォレット・サービスのみの構成で使用しないでください。
ガバナンスのアクティブ化
デプロイメント・インテントの発行は、プロキシのデプロイとは別のプロセスです。
- No-Op:
proposeDeployIntent処理が成功すると、含まれているコンポーネントがアクティブ化されます。トランザクションまたはOracle Blockchain Platformのレスポンスを確認してから、アクティブ状態を問い合せます。 - ガバナンス済: インテントは、構成されたポリシーが期限前に必要な承認を受け取るまで保留中のままです。トークンとアカウントは、そのポリシーが完了した後にのみ自動的にアクティブ化されます。
CLIでは、ガバナンス承認者はバイパスされません。提案が期限切れになったり拒否されたり、誤ったプロキシ/コード・ハッシュを使用したりする場合は、初期デプロイメントをアクティブとして処理するのではなく、原因を解決して新しいインテントを発行します。
ガバナンスがアクティブ化された後、デプロイメントを確認します。生成されたPostmanまたはラッパーAPIアセットを使用するか、Besu用のBlockchain App Builderにプロジェクトをインポートして、「実行」パネルを使用します。デプロイメント・サマリーのプロキシ・アドレスをコール・ターゲットとして使用し、ヘルパー・ライブラリまたは実装アドレスは使用しないでください。
ノート:
契約をデプロイすると、プロジェクト・ルートの下の.openzeppelinフォルダにマニフェスト・ファイルが生成されます。(開発ネットワークではなく)本番ネットワークの場合、これらのファイルをソース制御にコミットします。詳細は、OpenZeppelinドキュメントのネットワーク・ファイルを参照してください。
トラブルシューティング
| メッセージまたは条件 | 解決策 |
|---|---|
GOVERNANCE_ADDRESS and GOVERNANCE_UUID are required |
deployコマンドに両方の値を指定し、選択したネットワークにガバナンス・アドレスにバイトコードがあることを確認します。 |
| デプロイメントが不完全です | デプロイメントが完了する前に、同じDEPLOYMENT_ID値を指定して同じコマンドを再実行します。
|
DEPLOY_TARGETS_JSONが無効です
|
一意のプロキシ・アドレスの空でないJSON配列(["0x...token", "0x...account"]など)を渡します。
|
| ターゲットはEIP-1967プロキシではありません | 実装またはライブラリ・アドレスではなく、DEPLOYMENT_SUMMARY_JSONファイルからデプロイされたトークンおよびアカウント・プロキシ・アドレスを使用します。
|
| 認可がないため、Oracle Blockchain Platformインテント送信が失敗します | BESU_RPX_PROXY_AUTH_TOKEN値が設定され、構成されたOracle Blockchain Platformネットワークがそれを認可ヘッダーとして保持していることを確認します。
|
| デプロイメントは成功しますが、トークンは非アクティブのままです | デプロイメント・インテントを発行します。ガバナンスについては、ポリシーの承認を待ちます。No-Opガバナンスについては、提案処理が成功したことを確認します。 |