使用命令行部署合約

編譯智能合約後,您可以將其部署到 Oracle Blockchain Platform Besu 環境。

下列步驟逐步說明如何部署已封裝的記號存款合約專案。如需其他已封裝的合約,請參閱隨附於合約套件的 README 檔案。

設定 Oracle Blockchain Platform Besu Network

執行下列命令以設定專案的 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 值是完整的 / 交易端點,如下列範例所示。

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-besu

需有 DEPLOYMENT_ID、GOVERNANCE_ADDRESS 及 GOVERNANCE_UUID 值。只重複使用相同的部署 ID 來恢復中斷的部署。順利完成部署之後,就會刪除其繼續快取;使用該 ID 重新執行會啟動全新的部署。

CONTRACT_METADATA_* 值描述 ERC-7201 部署登錄中的「權杖化存款」代理主機。CONTRACT_METADATA_TAGS 必須是其值為字串的 JSON 物件。

指令完成,且權杖與帳戶代理主機為非作用中狀態。保留列印的 DEPLOYMENT_SUMMARY_JSON 並記錄兩個代理主機位址;它們是治理意圖的必要項目。

提交部署意向

在下列指令檔中,如果預設的一小時提案視窗不適用於您的環境,請編輯 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 與僅限公事包服務的組態搭配使用。

治理啟用

提交部署意向是與部署代理的個別程序。

  • 否:包括的元件會在成功處理 proposeDeployIntent 時啟動。驗證交易或 Oracle Blockchain Platform 回應,然後查詢作用中狀態。
  • 已控管:在設定的原則在其期限之前收到必要的核准之前,意圖仍為擱置中。權杖和帳戶只會在該原則完成後自動啟用。

CLI 不會略過治理核准者。如果提案到期、被拒絕或使用錯誤的代理 / 代碼雜湊,請解決原因並提交新意圖,而不是將初始部署視為有效。

治理啟用之後,請確認部署。使用產生的 Postman 或 wrapper API 資產,或將專案匯入 Besu 的區塊鏈 App 產生器,然後使用執行面板。使用部署摘要中的代理主機位址作為呼叫目標;請勿使用協助程式程式庫或實行位址。

備註:

部署合約後,資訊清單檔案會產生於專案根目錄下的 .openzeppelin 資料夾中。對於生產環境網路 (非開發網路),請將這些檔案確認至來源控制。如需詳細資訊,請參閱 OpenZeppelin 文件中的 Network Files 。

疑難排解

訊息或條件 解決方式
GOVERNANCE_ADDRESS and GOVERNANCE_UUID are required 提供這兩個值給部署命令,並確認所選網路的治理位址有位元組碼。
部署未完成 在部署完成之前,使用相同的 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 網路作為「授權」標頭。
部署成功,但記號維持非作用中 提交部署意向。對於治理,請等待政策核准;對於「無作業」治理,請確認提案處理成功。