Despliegue de un contrato con la línea de comandos
Después de compilar un contrato inteligente, puede desplegarlo en un entorno de Oracle Blockchain Platform Besu.
Los siguientes pasos muestran cómo desplegar el proyecto de contrato de depósito con token empaquetado. Para otros contratos empaquetados, consulte el archivo README que se incluye con el paquete de contratos.
Configuración de la red Besu de Oracle Blockchain Platform
Ejecute los siguientes comandos para definir los valores que consume el archivo hardhat.config.ts del proyecto.
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>"Para el proyecto de depósito con token, el valor BESU_RPC_URL es el punto final de proxy JSON-RPC configurado completo, como se muestra en el siguiente ejemplo.
https://rpcproxy.example.oracle.com/v1/besu/proxyEl valor WALLET_SERVICE_BASE_URL es el punto final /transaction completo, como se muestra en el siguiente ejemplo.
https://rpcproxy.example.oracle.com/v1/besu/transactionDesplegar el par de proxy inactivo
Ejecute el script de despliegue ERC-5982 con un ID de despliegue estable, como se muestra en el siguiente ejemplo. El script despliega o reanuda las bibliotecas auxiliares de ERC-20, el proxy de cuenta y el proxy de depósito tokenizado. También vincula los contextos de cuenta/token y define el contexto de gobernanza en ambos proxies.
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-besuLos valores DEPLOYMENT_ID, GOVERNANCE_ADDRESS y GOVERNANCE_UUID son necesarios. Reutilice el mismo ID de despliegue solo para reanudar un despliegue interrumpido. Una vez que un despliegue finaliza correctamente, se suprime su caché de reanudación; al volver a ejecutarse con ese ID se inicia un nuevo despliegue.
Los valores CONTRACT_METADATA_* describen el proxy de depósito con token en el registro de despliegue de ERC-7201. CONTRACT_METADATA_TAGS debe ser un objeto JSON cuyos valores son cadenas.
El comando se completa con el token y los proxies de cuenta inactivos. Conserve el archivo DEPLOYMENT_SUMMARY_JSON impreso y registre ambas direcciones proxy; son necesarias para la intención de gobernanza.
Envío de la intención de despliegue
En el siguiente script, defina una fecha límite futura editando el valor DEADLINE_SECONDS si la ventana de propuesta de una hora predeterminada no es adecuada para su entorno. Incluya todos los proxy cuyo contexto de gobernanza haya definido el despliegue. Para el paquete de depósito tokenizado, normalmente esto significa tanto el proxy de token como su proxy de cuenta. Para una propuesta de Oracle Blockchain Platform Besu enviada a través de la ruta de servicio de cartera y proxy RPC, ejecute el siguiente script.
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-besuEl script valida cada destino, resuelve su implementación de EIP-1967 y el hash de código de tiempo de ejecución, envía la propuesta y escribe los componentes revisados y el resultado de la propuesta en el archivo especificado por la variable DEPLOY_INTENT_MANIFEST.
Para un envío directo de gobernanza JSON-RPC, utilice una red Hardhat con un firmante local y cambie solo el transporte y la red de la propuesta, como se muestra en el siguiente ejemplo.
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 red directa debe configurarse con un firmante no privativo autorizado. No utilice JSON-RPC con una configuración de solo servicio de cartera.
Activación de gobernanza
El envío de la intención de despliegue es un proceso independiente del despliegue de los proxies.
- Sin opción: los componentes incluidos se activan durante el procesamiento correcto de
proposeDeployIntent. Verifique la respuesta de la transacción o de Oracle Blockchain Platform y, a continuación, consulte el estado activo. - Gobernado: la intención permanece pendiente hasta que la política configurada recibe las aprobaciones necesarias antes de la fecha límite. El token y la cuenta se activan automáticamente solo después de que se complete esa política.
La CLI no omite los aprobadores de gobernanza. Si la propuesta caduca, se rechaza o utiliza el hash de código/proxy incorrecto, resuelva la causa y envíe una nueva intención en lugar de tratar el despliegue inicial como activo.
Una vez activada la gobernanza, verifique el despliegue. Utilice los activos de API de Postman o wrapper generados, o importe el proyecto en Blockchain App Builder para Besu y utilice el panel Ejecutar. Utilice las direcciones proxy del resumen de despliegue como destinos de llamada; no utilice direcciones de implementación o de biblioteca auxiliar.
Nota:
Después de desplegar un contrato, los archivos de manifiesto se generan en la carpeta.openzeppelin en la raíz del proyecto. Para las redes de producción (no las redes de desarrollo), confirme estos archivos en el control de origen. Para obtener más información, consulte Network Files en la documentación de OpenZeppelin.
Solución de problemas
| Mensaje o condición | Resolución |
|---|---|
GOVERNANCE_ADDRESS and GOVERNANCE_UUID are required |
Proporcione ambos valores al comando de despliegue y verifique que la dirección de gobernanza tenga código de byte en la red seleccionada. |
| El despliegue está incompleto | Vuelva a ejecutar el mismo comando con el mismo valor DEPLOYMENT_ID antes de que finalice el despliegue.
|
DEPLOY_TARGETS_JSON no es válido
|
Transfiera una matriz JSON no vacía de direcciones proxy únicas, por ejemplo, ["0x...token", "0x...account"].
|
| El destino no es un proxy EIP-1967 | Utilice las direcciones de proxy de cuenta y token desplegadas del archivo DEPLOYMENT_SUMMARY_JSON, no una dirección de biblioteca o implementación.
|
| El envío de la intención de Oracle Blockchain Platform falla porque no hay autorización | Confirme que se ha definido el valor BESU_RPX_PROXY_AUTH_TOKEN y que la red configurada de Oracle Blockchain Platform lo lleva como cabecera de autorización.
|
| El despliegue se realiza correctamente, pero el token permanece inactivo | Envíe la intención de despliegue. Para la gobernanza gobernada, espere a las aprobaciones de políticas; para la gobernanza sin opciones, confirme que el procesamiento de propuestas se haya realizado correctamente. |