Déployer un contrat avec la ligne de commande

Après avoir compilé un contrat intelligent, vous pouvez le déployer dans un environnement Oracle Blockchain Platform Besu.

Les étapes suivantes expliquent comment déployer le projet de contrat de dépôt segmenté packagé. Pour les autres contrats packagés, consultez le fichier README qui est fourni avec le package de contrats.

Configurer le réseau Besu d'Oracle Blockchain Platform

Exécutez les commandes suivantes pour définir les valeurs utilisées par le fichier hardhat.config.ts du projet.

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

Pour le projet Dépôt segmenté en jetons, la valeur BESU_RPC_URL est l'adresse de proxy JSON-RPC configurée complète, comme indiqué dans l'exemple suivant.

https://rpcproxy.example.oracle.com/v1/besu/proxy

La valeur WALLET_SERVICE_BASE_URL est l'adresse complète /transaction, comme indiqué dans l'exemple suivant.

https://rpcproxy.example.oracle.com/v1/besu/transaction

Déployer la paire de proxy inactive

Exécutez le script de déploiement ERC-5982 avec un ID de déploiement stable, comme indiqué dans l'exemple suivant. Le script déploie ou reprend les bibliothèques d'aide ERC-20, le proxy de compte et le proxy de dépôt segmenté. Il relie également les contextes de compte/jeton et définit le contexte de gouvernance sur les deux mandataires.

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

Les valeurs DEPLOYMENT_ID, GOVERNANCE_ADDRESS et GOVERNANCE_UUID sont requises. Réutilisez le même ID de déploiement uniquement pour reprendre un déploiement interrompu. Une fois le déploiement terminé, son cache de reprise est supprimé. Une nouvelle exécution avec cet ID démarre un nouveau déploiement.

Les valeurs CONTRACT_METADATA_* décrivent le proxy de dépôt segmenté dans le registre de déploiement ERC-7201. CONTRACT_METADATA_TAGS doit être un objet JSON dont les valeurs sont des chaînes.

La commande se termine avec le jeton et les proxies de compte inactifs. Conservez le fichier DEPLOYMENT_SUMMARY_JSON imprimé et enregistrez les deux adresses de proxy ; elles sont requises pour l'intention de gouvernance.

Soumettre l'intention de déploiement

Dans le script suivant, définissez une date limite future en modifiant la valeur DEADLINE_SECONDS si la fenêtre de proposition par défaut d'une heure n'est pas appropriée pour votre environnement. Incluez tous les proxy dont le contexte de gouvernance a été défini par le déploiement. Pour le package de dépôt segmenté, cela signifie généralement à la fois le proxy de jeton et son proxy de compte. Pour une proposition Oracle Blockchain Platform Besu soumise via le routage de service de portefeuille et de proxy RPC, exécutez le script suivant.

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

Le script valide chaque cible, résout son hachage de code d'implémentation et d'exécution EIP-1967, soumet la proposition et écrit les composants vérifiés et le résultat de la proposition dans le fichier spécifié par la variable DEPLOY_INTENT_MANIFEST.

Pour une soumission de gouvernance directe JSON-RPC, utilisez un réseau Hardhat avec un signataire local et modifiez uniquement le transport et le réseau de la proposition, comme indiqué dans l'exemple suivant.

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>

Le réseau direct doit être configuré avec un signataire non dépositaire autorisé. N'utilisez pas JSON-RPC avec une configuration portefeuille-service uniquement.

Activation de la gouvernance

La soumission de l'intention de déploiement est un processus distinct du déploiement des proxies.

  • No-Op : les composants inclus s'activent lors du traitement proposeDeployIntent réussi. Vérifiez la transaction ou la réponse Oracle Blockchain Platform, puis interrogez l'état actif.
  • Gouverné : l'intention reste en attente jusqu'à ce que la stratégie configurée reçoive les approbations requises avant la date limite. Le jeton et le compte ne s'activent automatiquement qu'une fois la stratégie terminée.

L'interface de ligne de commande ne contourne pas les approbateurs de gouvernance. Si la proposition expire, est rejetée ou utilise un hachage de proxy/code incorrect, résolvez la cause et soumettez une nouvelle intention plutôt que de traiter le déploiement initial comme actif.

Une fois la gouvernance activée, vérifiez le déploiement. Utilisez les ressources d'API de wrapper ou Postman générées, ou importez le projet dans Blockchain App Builder for Besu et utilisez le panneau Exécuter. Utilisez les adresses proxy du récapitulatif de déploiement en tant que cibles d'appel ; n'utilisez pas d'adresses de bibliothèque d'aide ou d'implémentation.

Remarque :

Une fois que vous avez déployé un contrat, les fichiers manifestes sont générés dans le dossier .openzeppelin sous la racine du projet. Pour les réseaux de production (et non les réseaux de développement), validez ces fichiers dans le contrôle des sources. Pour plus d'informations, reportez-vous à la section Network Files dans la documentation OpenZeppelin.

Dépannage

Message ou condition Résolution
GOVERNANCE_ADDRESS and GOVERNANCE_UUID are required Fournissez les deux valeurs à la commande deploy et vérifiez que l'adresse de gouvernance comporte un code exécutable sur le réseau sélectionné.
Le déploiement est incomplet Réexécutez la même commande avec la même valeur DEPLOYMENT_ID avant la fin du déploiement.
DEPLOY_TARGETS_JSON est non valide Transmettez un tableau JSON non vide d'adresses proxy uniques, par exemple ["0x...token", "0x...account"].
La cible n'est pas un proxy EIP-1967 Utilisez les adresses de proxy de compte et de jeton déployées à partir du fichier DEPLOYMENT_SUMMARY_JSON, et non une adresse d'implémentation ou de bibliothèque.
Echec de la soumission de l'intention Oracle Blockchain Platform car l'autorisation est absente Vérifiez que la valeur BESU_RPX_PROXY_AUTH_TOKEN est définie et que le réseau Oracle Blockchain Platform configuré le porte en tant qu'en-tête d'autorisation.
Le déploiement réussit mais le jeton reste inactif Soumettez l'intention de déploiement. Pour la gouvernance régie, attendez les approbations de politique ; pour la gouvernance no-op, confirmez que le traitement de la proposition a réussi.