Distribuire un contratto con la riga di comando
Dopo aver compilato uno smart contract, è possibile distribuirlo in un ambiente Oracle Blockchain Platform Besu.
I passaggi seguenti illustrano come distribuire il progetto del contratto di deposito con token in package. Per altri contratti in pacchetto, vedere il file README fornito con il pacchetto contratto.
Configurare la rete Besu di Oracle Blockchain Platform
Eseguire i comandi seguenti per impostare i valori utilizzati dal file hardhat.config.ts del progetto.
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>"Per il progetto Deposito con token, il valore BESU_RPC_URL è l'endpoint proxy JSON-RPC configurato completo, come mostrato nell'esempio riportato di seguito.
https://rpcproxy.example.oracle.com/v1/besu/proxyIl valore WALLET_SERVICE_BASE_URL è l'endpoint /transaction completo, come mostrato nell'esempio seguente.
https://rpcproxy.example.oracle.com/v1/besu/transactionDistribuire la coppia proxy inattiva
Eseguire lo script di distribuzione ERC-5982 con un ID distribuzione stabile, come mostrato nell'esempio riportato di seguito. Lo script distribuisce o riprende le librerie di supporto ERC-20, il proxy del conto e il proxy di deposito con token. Collega inoltre i contesti account/token e imposta il contesto di governance su entrambi i proxy.
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-besuI valori DEPLOYMENT_ID, GOVERNANCE_ADDRESS e GOVERNANCE_UUID sono obbligatori. Riutilizzare lo stesso ID di distribuzione solo per riprendere una distribuzione interrotta. Una volta completata correttamente una distribuzione, la relativa cache di ripresa viene eliminata e la riesecuzione con tale ID avvia una nuova distribuzione.
I valori CONTRACT_METADATA_* descrivono il proxy di deposito con token nel registro di distribuzione ERC-7201. CONTRACT_METADATA_TAGS deve essere un oggetto JSON i cui valori sono stringhe.
Il comando viene completato con i proxy token e account inattivi. Conserva il file DEPLOYMENT_SUMMARY_JSON stampato e registra entrambi gli indirizzi proxy; sono necessari per l'intento di governance.
Sottomettere l'intento di distribuzione
Nello script seguente, impostare una scadenza futura modificando il valore DEADLINE_SECONDS se la finestra proposta predefinita di un'ora non è appropriata per l'ambiente in uso. Includi ogni proxy il cui contesto di governance è stato impostato dalla distribuzione. Per il pacchetto Deposito tokenizzato, in genere questo significa sia il proxy token che il proxy account. Per una proposta Besu di Oracle Blockchain Platform sottomessa tramite il proxy RPC e l'instradamento del servizio wallet, eseguire lo script seguente.
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-besuLo script convalida ogni destinazione, risolve l'hash del codice di implementazione e runtime EIP-1967, sottomette la proposta e scrive i componenti esaminati e il risultato della proposta nel file specificato dalla variabile DEPLOY_INTENT_MANIFEST.
Per un invio diretto della governance JSON-RPC, utilizzare una rete Hardhat con un firmatario locale e modificare solo il trasporto e la rete della proposta, come mostrato nell'esempio riportato di seguito.
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>
La rete diretta deve essere configurata con un firmatario non affidatario autorizzato. Non utilizzare JSON-RPC con una configurazione solo wallet-service.
Attivazione della governance
L'invio dell'intento di distribuzione è un processo separato dalla distribuzione dei proxy.
- No-Op: i componenti inclusi vengono attivati durante l'elaborazione
proposeDeployIntent. Verificare la transazione o la risposta a Oracle Blockchain Platform, quindi eseguire una query sullo stato attivo. - Governato: l'intento rimane in sospeso fino a quando il criterio configurato non riceve le approvazioni richieste prima della scadenza. Il token e l'account vengono attivati automaticamente solo dopo il completamento del criterio.
L'interfaccia CLI non ignora gli approvatori della governance. Se la proposta scade, viene rifiutata o utilizza l'hash proxy/codice errato, risolvere la causa e sottomettere un nuovo intento invece di considerare attiva la distribuzione iniziale.
Dopo aver attivato la governance, verificare la distribuzione. Utilizzare gli asset API Postman o wrapper generati oppure importare il progetto in Blockchain App Builder for Besu e utilizzare il pannello Esegui. Utilizzare gli indirizzi proxy dal riepilogo della distribuzione come destinazioni di chiamata; non utilizzare indirizzi della libreria di supporto o di implementazione.
Nota:
Dopo la distribuzione di un contratto, i file manifest vengono generati nella cartella.openzeppelin nella radice del progetto. Per le reti di produzione (non le reti di sviluppo), eseguire il commit di questi file sul controllo dell'origine. Per ulteriori informazioni, vedere File di rete nella documentazione di OpenZeppelin.
Risoluzione dei problemi
| Messaggio o condizione | Risoluzione |
|---|---|
GOVERNANCE_ADDRESS and GOVERNANCE_UUID are required |
Fornire entrambi i valori al comando deploy e verificare che l'indirizzo governance abbia bytecode sulla rete selezionata. |
| Distribuzione incompleta | Eseguire nuovamente lo stesso comando con lo stesso valore DEPLOYMENT_ID prima del completamento della distribuzione.
|
DEPLOY_TARGETS_JSON non è valido
|
Passare un array JSON non vuoto di indirizzi proxy univoci, ad esempio ["0x...token", "0x...account"].
|
| La destinazione non è un proxy EIP-1967 | Utilizzare il token distribuito e gli indirizzi proxy dell'account dal file DEPLOYMENT_SUMMARY_JSON, non un indirizzo di implementazione o di libreria.
|
| Sottomissione intento Oracle Blockchain Platform non riuscita perché l'autorizzazione è assente | Verificare che il valore BESU_RPX_PROXY_AUTH_TOKEN sia impostato e che la rete Oracle Blockchain Platform configurata lo riporti come intestazione di autorizzazione.
|
| Distribuzione riuscita, ma il token rimane inattivo | Sottomettere l'intento di distribuzione. Per una governance governata, attendere le approvazioni dei criteri; per la governance No-Op, confermare che l'elaborazione delle proposte è riuscita. |