Implantar um Contrato com a Linha de Comando
Depois de compilar um contrato inteligente, você pode implantá-lo em um ambiente Besu do Oracle Blockchain Platform.
As etapas a seguir mostram como implantar o projeto de contrato de Depósito Tokenizado empacotado. Para outros contratos empacotados, consulte o arquivo README que é empacotado com o pacote de contratos.
Configurar a Rede Besu do Oracle Blockchain Platform
Execute os comandos a seguir para definir os valores que são consumidos pelo arquivo hardhat.config.ts do projeto.
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 o projeto Depósito Tokenizado, o valor BESU_RPC_URL é o ponto final do proxy JSON-RPC configurado completo, conforme mostrado no exemplo a seguir.
https://rpcproxy.example.oracle.com/v1/besu/proxyO valor WALLET_SERVICE_BASE_URL é o ponto final /transaction completo, conforme mostrado no exemplo a seguir.
https://rpcproxy.example.oracle.com/v1/besu/transactionImplantar o Par de Proxy Inativo
Execute o script de implantação ERC-5982 com um ID de implantação estável, conforme mostrado no exemplo a seguir. O script implanta ou retoma as bibliotecas auxiliares do ERC-20, o proxy da conta e o proxy Depósito tokenizado. Ele também vincula os contextos de conta/token e define o contexto de governança em ambos os 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-besuOs valores DEPLOYMENT_ID, GOVERNANCE_ADDRESS e GOVERNANCE_UUID são obrigatórios. Reutilize o mesmo ID de implantação apenas para retomar uma implantação interrompida. Depois que uma implantação for concluída com sucesso, seu cache de retomada será excluído; a reexecução com esse ID iniciará uma nova implantação.
Os valores CONTRACT_METADATA_* descrevem o proxy Depósito Tokenizado no registro de implantação ERC-7201. CONTRACT_METADATA_TAGS deve ser um objeto JSON cujos valores são strings.
O comando é concluído com os proxies de token e conta inativos. Preserve o DEPLOYMENT_SUMMARY_JSON impresso e registre os dois endereços de proxy; eles são necessários para a intenção de governança.
Enviar a Intenção de Implantação
No script a seguir, defina um prazo futuro editando o valor DEADLINE_SECONDS se a janela de proposta padrão de uma hora não for apropriada para o seu ambiente. Inclua todos os proxy cujo contexto de governança foi definido pela implantação. Para o pacote Depósito tokenizado, geralmente isso significa o proxy do token e seu proxy de conta. Para uma proposta do Oracle Blockchain Platform Besu enviada por meio da rota do serviço de proxy e wallet de RPC, execute o script a seguir.
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-besuO script valida cada destino, resolve sua implementação EIP-1967 e hash de código de tempo de execução, envia a proposta e grava os componentes revisados e o resultado da proposta no arquivo especificado pela variável DEPLOY_INTENT_MANIFEST.
Para uma submissão direta de governança JSON-RPC, use uma rede Hardhat com um signatário local e altere apenas o transporte e a rede da proposta, conforme mostrado no exemplo a seguir.
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>
A rede direta deve ser configurada com um assinante não custodial autorizado. Não use JSON-RPC com uma configuração somente de serviço da wallet.
Ativação de Governança
O envio da intenção de implantação é um processo separado da implantação dos proxies.
- No-Op: Os componentes incluídos são ativados durante o processamento bem-sucedido do
proposeDeployIntent. Verifique a transação ou a resposta do Oracle Blockchain Platform e consulte o estado ativo. - Governada: A intenção permanece pendente até que a política configurada receba as aprovações necessárias antes de seu prazo. O token e a conta são ativados automaticamente somente após a conclusão dessa política.
A CLI não ignora os aprovadores de governança. Se a proposta expirar, for rejeitada ou usar o hash de proxy/código errado, resolva a causa e envie uma nova intenção em vez de tratar a implantação inicial como ativa.
Depois que a governança for ativada, verifique a implantação. Use os ativos de API Postman ou wrapper gerados ou importe o projeto para o Blockchain App Builder for Besu e use o painel Executar. Use os endereços de proxy do resumo de implantação como destinos de chamada; não use endereços de biblioteca auxiliar ou de implementação.
Observação:
Depois que você implanta um contrato, os arquivos de manifesto são gerados na pasta.openzeppelin na raiz do projeto. Para redes de produção (não redes de desenvolvimento), confirme esses arquivos no controle de origem. Para obter mais informações, consulte Network Files na documentação do OpenZeppelin.
Solucionando Problemas
| Mensagem ou Condição | Resolução |
|---|---|
GOVERNANCE_ADDRESS and GOVERNANCE_UUID are required |
Forneça os dois valores para o comando de implantação e verifique se o endereço de governança tem um código de bytes na rede selecionada. |
| A implantação está incompleta | Execute novamente o mesmo comando com o mesmo valor DEPLOYMENT_ID antes da conclusão da implantação.
|
DEPLOY_TARGETS_JSON é inválido
|
Informe um array JSON não vazio de endereços de proxy exclusivos, por exemplo ["0x...token", "0x...account"].
|
| O destino não é um proxy EIP-1967 | Use o token implantado e os endereços de proxy da conta do arquivo DEPLOYMENT_SUMMARY_JSON, não um endereço de implementação ou biblioteca.
|
| Falha no envio da intenção do Oracle Blockchain Platform porque a autorização está ausente | Confirme se o valor BESU_RPX_PROXY_AUTH_TOKEN está definido e se a rede configurada do Oracle Blockchain Platform o carrega como um cabeçalho de Autorização.
|
| Implantação bem-sucedida, mas o token permanece inativo | Envie a intenção de implantação. Para governança governada, aguarde aprovações de políticas; para governança No-Op, confirme se o processamento da proposta foi bem-sucedido. |