Executar um Contrato

Você pode usar o Blockchain App Builder para consultar um token implantado ou proxy de conta/identidade ou para chamar uma função de contrato que altera o estado.

Depois de compilar um projeto, você pode usar a guia Executar no form Implantar/Executar para consultar ou chamar funções. A extensão lê o ABI do contrato selecionado, apresenta as funções disponíveis, codifica os parâmetros e envia a solicitação por meio do transporte apropriado para o ambiente selecionado. Para projetos compostos, implante e ative os proxies de token e conta antes de tentar operações de token que alteram o estado.

A ferramenta Executar descobre funções de artefatos compilados. Para projetos compostos, o manifesto gerado também identifica o ABI de conta/identidade compatível para o token selecionado. Para acessar a ferramenta Executar:
  1. Abra a exibição Contratos.
  2. Selecione o projeto Hardhat e abra Implantar/Executar.
  3. Selecione a guia Executar.
  4. Se o formulário incluir um seletor de projeto, escolha o projeto que possui o contrato e seus artefatos compilados.

Preencha os campos a seguir para selecionar um destino e uma função antes de executar uma chamada.

  • Token: O contrato de token compilado cujo ABI você deseja usar.
  • Destino de Chamada: Selecione Token para chamar o proxy de token ou Conta/Identidade para chamar o proxy de conta pareado. Selecione Token como destino de chamada para comportamento de token, como saldos, cunhagem, transferências, configuração e operações de classe de ativo. Selecione Conta/Identidade para as funções de identidade, permissão ou política do contrato de conta complementar.
  • ABI de Destino: O ABI usado para listar e codificar funções. Um manifesto gerado bloqueia o ABI da conta emparelhada; caso contrário, selecione um manualmente.
  • toAddress: O endereço do proxy implantado para o destino selecionado. Não informe um endereço de biblioteca auxiliar ou de implementação.
  • Ambiente: O ambiente no qual esse proxy é implantado.
  • Função: A função ABI a ser consultada ou chamada. A lista inclui a origem da função para ajudar a distinguir os recursos herdados.

Caminho de execução

A extensão escolhe ou restringe o modo disponível com base no ambiente selecionado.

Modo de Ambiente e API Comportamento da Consulta Comportamento da Chamada Informações obrigatórias do assinante
Nó Local Hardhat ou Outro EVM com JSON-RPC Chama o nó usando a chave privada local selecionada como from. Assina e transmite diretamente por meio de JSON-RPC. Uma conta de chamador configurada ou chave privada de 32 bytes inserida manualmente.
Oracle Blockchain Platform Besu com APIs JSON-RPC Chama o ponto final JSON-RPC do Oracle Blockchain Platform usando o endereço de conta do Serviço de Wallet selecionado como from. Cria uma transação, solicita uma assinatura de serviço de wallet e a transmite por meio do Oracle Blockchain Platform JSON-RPC. URL de sinal do serviço de wallet, contas JSON, token de autorização e conta de wallet selecionada.
Oracle Blockchain Platform Besu com APIs rpc-proxy REST Publica na API de consulta do Oracle Blockchain Platform. Publica na API de transações do Oracle Blockchain Platform. Endereço do remetente; opcionalmente configurações de gás e espera de recebimento. Nenhuma chave privada local ou signatário do Serviço da Wallet foi informado neste modo.

O modo rpc-proxy REST só está disponível para um ambiente Besu do Oracle Blockchain Platform. O Host do URL RPC do ambiente, o token de autenticação e as definições de TLS são usados para as chamadas REST. Outros ambientes EVM e Hardhat locais usam JSON-RPC com assinatura local.

Consultar uma Função

Use Consulta para uma chamada de leitura ou para simular uma função em relação ao estado da cadeia atual.

  1. Selecione o destino, o ambiente, a função e os parâmetros.
  2. Configure as informações do chamador ou da wallet exigidas pelo caminho de execução selecionado.
  3. Selecione Consulta.
  4. Revise o campo Saída. A saída JSON-RPC inclui o resultado de chamada bruta e o resultado ABI decodificado quando a decodificação é bem-sucedida. A saída REST inclui a resposta da API.

As consultas usam uma solicitação de chamada; elas não transmitem uma transação ou permanecem no estado. Uma consulta ainda poderá ser revertida se as condições da função selecionada, as permissões do chamador ou os parâmetros fornecidos não forem válidos para o estado do contrato atual.

Chamar uma Função

Use Chamar para uma transação que altera o estado.
  1. Selecione o destino, o ambiente, a função e os parâmetros.
  2. Configure o método de assinatura necessário.
    • Para Outro EVM ou Nó Local de Hardhat, selecione uma conta de chamador configurada ou informe a chave privada autorizada.
    • Para o Serviço de Wallet do Oracle Blockchain Platform, forneça o URL de Assinatura, contas JSON, token de autorização e selecione a conta da wallet.
    • Para REST rpc-proxy, informe o Endereço do Remetente e, quando necessário, as configurações de limite de gás e espera de recebimento.
  3. Selecione Chamar.
  4. Aguarde o resultado em Saída. As chamadas bem-sucedidas do JSON-RPC e do Serviço Wallet incluem hash de transação, número de bloco, gás usado, remetente, destino e status de recebimento.
Uma chamada pode ser aceita pelo transporte, mas ainda reverter na cadeia. Trate um status de recebimento diferente de 1 ou uma resposta de erro como uma operação com falha e inspecione a saída em busca de um erro personalizado decodificado ou detalhes de erro de RPC.

Parâmetros de entrada

Selecione o botão … ao lado de Parâmetros para abrir o editor de parâmetros. Ela exibe o nome do parâmetro ABI, a propriedade aninhada, o tipo e um campo de entrada. Selecione a ação de aplicação do editor para gerar o array de parâmetros JSON que será usado pela função Executar.

Os parâmetros são enviados como um array JSON na mesma ordem das entradas de ABI da função selecionada.

Entrada ABI JSON do Parâmetro Colável
Nenhuma entrada []
balanceOf(address) ["0x1111111111111111111111111111111111111111"]
transfer(address,uint256) ["0x1111111111111111111111111111111111111111", "1000"]
Uma única tupla [{"fieldA":"value","fieldB":"1000"}]
Uma entrada tuple[] independente [[{"userAddress":"0x1111111111111111111111111111111111111111","approvalSequence":1}]]

Para campos ABI inteiros, informe uma string decimal como "1000" para evitar a perda de precisão numérica do JavaScript. Use JSON true ou false para valores boolianos. Os endereços devem ser endereços 0x válidos.

Para tuplas e entradas de matriz de tuplas, use objetos JSON nomeados cujos nomes de propriedade correspondam aos nomes de componentes ABI. Não use a sintaxe de tupla posicional Solidity no editor de parâmetros.

Por exemplo, quando o editor estiver exibindo uma propriedade approverDetails tuple[] com componentes userAddress e approvalSequence, cole o seguinte valor no editor JSON dessa propriedade:

[
  {
    "userAddress": "0x1111111111111111111111111111111111111111",
    "approvalSequence": 1
  }
]

O editor de parâmetros coloca esse valor dentro do array externo de argumentos de função. Para uma tupla completa, insira todos os componentes mostrados pelo ABI selecionado. Os campos exatos variam de acordo com a versão do contrato; portanto, use as propriedades exibidas no editor de parâmetros em vez de copiar uma forma de tupla de um projeto de token diferente.

Formato de Entrada do Serviço da Wallet

Para o modo JSON-RPC do Oracle Blockchain Platform, informe contas de serviço de wallet como um array JSON. Cada entrada deve ter um endereço e pode incluir um ID de wallet, conforme mostrado no exemplo a seguir.

[
  {
    "address": "0x1111111111111111111111111111111111111111",
    "walletId": "0x1111111111111111111111111111111111111111"
  }
]

Selecione uma das contas analisadas em Conta de carteira. As consultas usam seu endereço como from; as chamadas pedem que o serviço da wallet assine essa conta. O token de autorização do serviço de wallet não é armazenado no rascunho salvo do formulário.

Salvar e Reutilizar Entradas

Selecione Salvar Entrada para manter as seleções de Execução não secreta e o parâmetro JSON atuais para o projeto. Selecione Limpar Entrada Salva para remover o estado do formulário salvo. Verifique novamente os endereços de proxy, a função selecionada e os parâmetros antes de uma chamada; as entradas salvas não provam que um destino ainda está implantado no ambiente selecionado no momento.

Solucionando Problemas

Condição Resolução
Após um upgrade, um método recém-adicionado não é listado na lista de ABI na página Executar. Atualize o arquivo de manifesto do Blockchain App Builder (generated.manifest.json) para alterar contractClassName e contractRelativePath para apontar para o contrato recém-atualizado.
Nenhuma função ABI encontrada Compile o projeto e confirme se o artefato de token/conta selecionado existe. Para um destino de conta sem um manifesto, selecione o ABI de conta correto manualmente.
O endereço de destino não tem código de contrato Verifique o ambiente selecionado e informe o endereço de proxy implantado, não uma biblioteca auxiliar ou endereço de implementação.
Parâmetros inválidos JSON Use o editor … para gerar novamente a matriz de argumentos. Certifique-se de que os arrays e os objetos usem JSON válido com nomes de propriedades com aspas duplas.
A seleção da conta de serviço da wallet é obrigatória Informe um array JSON de contas válido e selecione uma Conta de Wallet.
As APIs rpc-proxy REST exigem um ambiente Oracle Blockchain Platform Alterne para um ambiente Besu do Oracle Blockchain Platform com um URL RPC somente para host ou use JSON-RPC para Outro EVM/Hardhat.
Chamador não autorizado ou um erro personalizado decodificado Verifique a conta de chamador/carteira selecionada, proxy de destino, estado de governança ativo, pré-requisitos de função/política e parâmetros de ABI.
Consulta ou Chamar permanece indisponível Preencha os campos obrigatórios de destino, ambiente, função e signatário para o modo de API selecionado.