契約の配置

スマート・コントラクトをコンパイルしたら、それをOracle Blockchain Platform Besu環境にデプロイできます。

デプロイメント・プロセスでは、必要なヘルパー・ライブラリおよびUPSプロキシが作成され、トークンおよびアカウント・コンテキストがリンクされ、ガバナンス・コンテキストが設定されます。トークンとアカウントは非アクティブ状態でデプロイされます。デプロイメント・インテント・プロセスを介してのみアクティブになります。

コンパイルされた契約をデプロイするには、事前デプロイされたガバナンス契約のアドレスとポリシーUUIDをデジタル・アセット・トークン管理者から取得します。デプロイする権限と、該当する場合はデプロイメント・インテントを発行する権限を持つアカウントを取得します。デプロイメント・フォームには、契約、環境、デプロイメントIDおよびレジストリ・メタデータ(スマート・コントラクトID、バージョン、説明および作成者)が必要です。デプロイメントIDは、再開可能なデプロイメント状態を識別します。同じデプロイメントを再試行する場合は、安定した一意の値を使用します。

デプロイ・ライフ・サイクル

  1. プロジェクトをコンパイルします。
  2. Oracle Blockchain Platformデジタル・アセット・スタックをデプロイします。
  3. アカウント/トークンおよびガバナンス・コンテキストを設定します。(プロキシは非アクティブです。)
  4. 両方のプロキシ・コンポーネントのデプロイメント・インテントをレビューおよび送信します。
    • No-Op Governance: 提案が成功し、コンポーネントがアクティブ化されます。
    • 管理: 必要なポリシー承認が完了し、コンポーネントがアクティブ化されます。

ノート:

プロキシはデプロイメント直後に非アクティブになります。契約のデプロイメントが成功しても、トークンがアクティブであるとはかぎりません。アクティブ化は、UPSアップグレードではなく、デプロイメント用に構成されたガバナンス契約によって制御されます。

Oracle Blockchain Platform Besu環境の作成

Oracle Blockchain Platform Besu環境には、完全なJSON-RPCエンドポイントではなく、Oracle Blockchain Platform RPCホストが格納されます。この拡張は、このホストから必要なBesuおよびガバナンス・ルートを導出します。

  1. 「環境」ビューを開き、「環境の追加」を選択します。
  2. わかりやすい環境名を入力します。たとえば、obp-testと入力します。
  3. 「環境タイプ」に「Oracle Blockchain Platform Besu」を選択します。
  4. RPC URLホストを入力します。たとえば、https://rpcproxy.example.com:443と入力します。

    RPC URLホストは、エンドポイント・パス、問合せ文字列、フラグメント、ユーザー名またはパスワードではなく、httpまたはhttpsオリジンのみである必要があります。たとえば、https://rpcproxy.example.com:443/v1/besu/proxyではなくhttps://rpcproxy.example.com:443と入力します。

  5. ネットワークのチェーンIDを入力します。
  6. RPCプロキシに必要な承認トークンを入力します。
  7. オプションで、プライベート認証局の「Gas Price Wei」、「Allow Self Signed」および「CA Certificate Path」を設定します。デプロイメント・モデルで特に非顧客署名が必要でないかぎり、「BESUアカウント」は空のままにします。Oracle Blockchain Platformウォレット・サービス・デプロイメントは、デプロイメントごとに署名の詳細を収集します。
  8. 「作成」を選択します。

格納されたOracle Blockchain Platformホストの場合、拡張機能はBesuプロキシ・エンドポイントを導出し、Oracle Blockchain Platformガバナンス・インテント・エンドポイントを使用します。これにより、デプロイメント、実行およびガバナンス操作間で環境を移植できます。

組み込みの Hardhat Local Node環境は、ローカル開発で使用可能であり、保存する必要はありません。Oracle Blockchain Platform環境ではありません。

Oracle Blockchain Platform Besu環境へのデプロイ

  1. 「契約」ペインで、プロジェクトの「デプロイ/実行」フォームを開き、「デプロイ」タブを選択します。
  2. 契約パッケージとBesu環境を選択します。
  3. デプロイメントIDを入力するか、表示されたデプロイメントIDを保持します。
  4. 必要なレジストリ・メタデータを完了します。デプロイメント時のトークン名、記号、説明、URIおよび管理者IDはオプションです。空の値はデプロイメント・スクリプトのデフォルトを使用します。
  5. Oracle Blockchain Platform環境に表示されるウォレット・サービス署名情報を入力します。
    • Walletサービスの署名URL
    • Wallet Service Accounts: アドレス/ウォレットIDオブジェクトのJSON配列
    • Walletサービス認証トークン
  6. 「次へ」を選択します。
  7. 「デプロイメント・オプション」で、「ガバナンス契約アドレス」および「ポリシーUUID」を入力し、「デプロイ」を選択します。

ブロックチェーン・アプリケーション・ビルダーは、生成されたHardhatデプロイメント・スクリプトをOracle Blockchain Platform Besuネットワークを介して実行し、そのデプロイメントに対してのみウォレット・サービス値を使用します。必要なコンポーネントをデプロイまたは再利用し、そのコンテキストを設定し、トークンおよびアカウント・プロキシ・アドレスを返します。どちらのプロキシも非アクティブです。

デプロイメント・インテントの発行

非アクティブなデプロイメントが完了すると、「ガバナンス」セクションに、デプロイされた「トークン・ターゲット」および「アカウント・ターゲット」の値が移入されます。両方のターゲットをインテントに保持します。それぞれがEIP-1967プロキシであり、ガバナンスは解決された実装アドレスとランタイム・コード・ハッシュに対してプロキシをアクティブ化します。

  1. トークンおよびアカウント・ターゲットを確認します。既存のプロキシペアを意図的に提案している場合にのみ、それらをオーバーライドします。
  2. 将来の提案期限を入力します。
  3. Oracle Blockchain Platform Besuの場合は、選択したポリシーによって認可された「送信元アドレス」を入力します。選択した環境には、RPC URLホストおよび認可トークンが必要です。
  4. 他のEVM環境では、「呼出し側アカウント」を選択するか、呼出し側の秘密キーを入力します。アプリケーションは、そのキーから送信者アドレスを導出します。
  5. 「レビュー」を選択します。拡張機能により、各プロキシの実装および実装コード・ハッシュが解決され、提案されたインテントが表示されます。
  6. UUID、期限、プロキシ・ターゲット、実装アドレスおよびコード・ハッシュを確認します。
  7. 「送信」を選択します。

Oracle Blockchain Platform環境の場合、拡張機能はOracle Blockchain Platformウォレット・サービス・ガバナンス・エンドポイントを介してレビューされたインテントを送信します。他のEVM環境では、署名されたproposeDeployIntentトランザクションをJSON-RPCを介してガバナンス契約に直接送信します。

レビュー後にガバナンス・アドレス、UUID、プロキシ・ターゲットまたは期限を変更すると、プレビューは無効になります。提案を再確認してから送信してください。

ガバナンスのアクティブ化

両方のガバナンス・タイプに同じインテント・ワークフローが使用されます。違いは、ガバナンス契約が提案を受け入れた後に起こることです。

  • No-Op: proposeDeployIntentコールが成功すると、含まれているコンポーネントが即時にアクティブ化されます。トランザクションまたはOracle Blockchain Platformのレスポンスを確認し、トークンのアクティブ状態を確認します。
  • ガバナンス: 送信されたインテントは、構成されたポリシーの対象のままです。トークンとアカウントは、期限までに必要な承認が受領された後にのみアクティブになります。

拡張はインテントを発行し、ガバナンス承認者になりすましたりバイパスしたりしません。ガバナンス対象ポリシーの場合は、組織の承認プロセスを使用し、ガバナンス契約がアクティブ化されるまで待機します。ポリシーがインテントを拒否または失効する場合は、原因を修正してから、新しい有効なインテントを発行します。デプロイメントのみでは、プロキシはアクティブ化されません。

ノート:

契約をデプロイすると、プロジェクト・ルートの下の.openzeppelinフォルダにマニフェスト・ファイルが生成されます。(開発ネットワークではなく)本番ネットワークの場合、これらのファイルをソース制御にコミットします。詳細は、OpenZeppelinドキュメントのネットワーク・ファイルを参照してください。

デプロイメント・エラーのトラブルシューティング

条件 解決策
Oracle Blockchain Platform環境を保存できません エンドポイント・パスなしでHTTPまたはHTTPSオリジンを入力します。「Oracle Blockchain Platform」フィールドはホストのみを想定しています。
ガバナンス・レビューによると、Oracle Blockchain Platform環境にはRPC URLホストと認可トークンが必要です 保存したOracle Blockchain Platform環境を両方の値で更新してから、再度開くか選択します。
実行時バイト・コードがないガバナンス・レビュー・レポート 選択したネットワークおよびプロキシ/実装アドレスを確認します。デプロイされていないターゲットに対してインテントを送信しないでください。
デプロイメントは成功しますが、トークンは非アクティブです デプロイメント・インテントを発行します。ガバナンスについては、すべてのポリシーの承認を待ちます。ガバナンスが無い場合は、提案トランザクションが成功したことを確認します。
フィールドの変更後は提案を送信できません 「確認」を再度選択します。アプリケーションは、失効したプレビューを意図的に無効化します。