WEB3DEV

Cover image for Aprimore a Resolução de Problemas e o Monitoramento de Contratos Inteligentes com Análises Avançadas.
Panegali
Panegali

Posted on

Aprimore a Resolução de Problemas e o Monitoramento de Contratos Inteligentes com Análises Avançadas.

Obtenha informações detalhadas sobre a execução de contratos inteligentes, solucione falhas de transações, otimize o desempenho e rastreie dados específicos.

A API de Rastreamento (Trace API) é um conjunto de métodos JSON RPC que ajudam os usuários do Infura a entender como os contratos inteligentes e transações são executados na blockchain Ethereum. Ao usar a API de Rastreamento, os desenvolvedores podem acessar informações adicionais sobre transações que não são registradas diretamente na blockchain.

Isso abre oportunidades para melhorar o DevOps, pois permite que os desenvolvedores depurem, analisem e executem tarefas e funções específicas relacionadas à otimização, segurança e análise de contratos inteligentes.

A API de Rastreamento fornece um conjunto abrangente de métodos que permitem aos desenvolvedores examinar e extrair informações detalhadas sobre transações, blocos e interações de contratos na Ethereum.

Qual Problema a API de Rastreamento Resolve?

A API de Rastreamento resolve o problema da visibilidade limitada e da compreensão das execuções de contratos inteligentes na Ethereum. Com a capacidade de rastrear transações, os desenvolvedores podem examinar com precisão as ações executadas pela Máquina Virtual Ethereum (EVM) durante transações específicas ou conjuntos de transações.

As transações Ethereum envolvem transferências de valor e execuções de contratos, sendo que as últimas são interações complexas que podem ser difíceis de desvendar. Embora os recibos de transação forneçam um código de status básico, eles não têm informações detalhadas sobre a execução do contrato, o que torna difícil determinar as ações específicas tomadas, as modificações de dados e os endereços afetados.

O rastreamento da EVM por meio da API de Rastreamento aborda esse problema, permitindo que os desenvolvedores obtenham informações detalhadas sobre as execuções de contratos, o que facilita a depuração, a análise e a compreensão de contratos inteligentes na rede Ethereum.

Como acessar a API de Rastreamento do Infura

Para usar a API de Rastreamento do Infura, siga estas etapas simples:

  1. Cadastre-se em uma conta do Infura e faça um upgrade para um dos planos pagos.
  2. Uma vez que não estiver utilizando um plano não gratuito, crie um projeto de API Web3.
  3. Acesse a nova chave da API recém criada, que será necessária para fazer chamadas de API.
  4. Use o ponto de extremidade fornecido junto com sua chave de API para acessar os métodos da API de Rastreamento.

O Infura atualmente oferece suporte aos seguintes pontos de extremidade da API de Rastreamento na rede principal da Ethereum, bem como nas redes de teste Goerli e Sapolia:

  1. trace_call: executa uma chamada específica e fornece vários rastreamentos possíveis para ela.
  2. trace_callMany: executa várias transações em uma única solicitação.
  3. trace_block: recupera os rastreamentos executados em um bloco específico.
  4. trace_transaction: recupera todos os rastreamentos associados a uma determinada transação usando o hash da transação.
  5. trace_filter: recupera rastreamentos que correspondem a um filtro especificado.

Caso de uso 1: Solucionar Problemas de Falhas de Transação e Atualizar os Usuários

Quando você usa o método trace_transaction, ele retorna uma resposta que pode ser analisada para obter mais informações sobre por que uma transação falhou. Isso pode ser útil para os desenvolvedores de dApps, pois agora você pode transmitir essas informações aos seus usuários, incentivando-os a tomar as ações necessárias.

Por exemplo, vamos usar o método trace_transaction do Infura para obter a árvore de rastreamento para esta transação.

Código de Solicitação:


curl --location 'https://mainnet.infura.io/v3/<INFURA API KEY>' \

--header 'Content-Type: text/plain' \

--data '{

  "id": 1,

  "method": "trace_transaction",

  "jsonrpc": "2.0",

  "params": [

    "0xeb852958eeb1d026b10c6ad3c995520364b83929e1e0908801194f5b680d54ea"

  ]

}'

Enter fullscreen mode Exit fullscreen mode

Carga de Resposta:


{

  "jsonrpc": "2.0",

  "id": 1,

  "result": [

    {

    "action": {

        "callType": "call",

        "from": "0xeecc9674d3600e3feb1b01b9ff7c72ac2e1c560f",

        "gas": "0x1a0c8",

        "input": "0xe2bbb158000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037b1d9c38a24b27c",

        "to": "0xfb063b1ae6471e6795d6ad1fc7f47c1cab1f3422",

        "value": "0x0"

    },

    "blockHash": "0x89b3ee89b30133dfd67888bf0baeea58b8a52b1beb983efcc7aa771a3fd489af",

    "blockNumber": 17370663,

    "error": "out of gas",

    "result": null,

    "subtraces": 4,

    "traceAddress": [],

    "transactionHash": "0xeb852958eeb1d026b10c6ad3c995520364b83929e1e0908801194f5b680d54ea",

    "transactionPosition": 110,

    "type": "call"

    }

  ]

  ...

}

Enter fullscreen mode Exit fullscreen mode

Ao analisar a carga de resposta, que inclui um campo de erro que diz "out of gas" (sem gás), tanto o desenvolvedor quanto o usuário do dApp obtêm informações valiosas sobre por que essa transação falhou.

Caso de uso 2: Solucionar Problemas de Desempenho com Análises Avançadas

Obter informações sobre o número de chamadas de contratos adicionais feitas antes que uma transação seja concluída aumenta sua capacidade de solucionar problemas e otimizar o desempenho. Considere uma situação em que um usuário invoca um contrato que, por sua vez, invoca outro contrato. O mero exame do recibo da transação não oferece uma maneira fácil para um desenvolvedor saber quantos contratos inteligentes adicionais são invocados nos bastidores.

Felizmente, a API de Rastreamento entra em ação oferecendo uma visualização em árvore da rastreabilidade da transação. Isso permite uma análise detalhada do desempenho do contrato inteligente, observando o número de ações necessárias para que uma transação seja processada, fornecendo dados valiosos para ajustar o desempenho do seu contrato.

Código de Solicitação:


curl --location 'https://mainnet.infura.io/v3/<INFURA API KEY>' \

--header 'Content-Type: text/plain' \

--data '{

  "id": 1,

  "method": "trace_transaction",

  "jsonrpc": "2.0",

  "params": [

    "0x923405094e26b9a616aa7c2b757b5c04c1d65e523f3375e531abb69fc4c2382c"

  ]

}'

Enter fullscreen mode Exit fullscreen mode

Carga de resposta:


{

  "jsonrpc": "2.0",

  "id": 1,

  "result": [

    {

    "action": {

        "callType": "call",

        "from": "0xe67e43b831a541c5fa40de52ab0afbe311514e64",

        "gas": "0x1b803",

        "input": "0xe1021f44000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000182178faefbc461fd10000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000387e55e5b080b30441e82805224ce50b242efe028df1d63b7953dcc7b654d6d37ea9d16750c58c6c8a528f197120cf5180ac3e21a2baa96393bc40c354991fbe063a754751b6ee8d9f35c34c1f3e44fefe1156661f7356117050bc084636b6f4d",

        "to": "0x264382b200bc1fe51a9b58f704394de172341418",

        "value": "0x0"

    },

    "blockHash": "0x37e08159b7961d2ccf83be3d222a821f6be1c5a593854d4c63d1223ecad73bae",

    "blockNumber": 17370903,

    "result": {

        "gasUsed": "0xbeae",

        "output": "0x000000000000000000000000000000000000000000000905f430b36f66685030"

    },

    "subtraces": 1,

    "traceAddress": [],

    "transactionHash": "0x923405094e26b9a616aa7c2b757b5c04c1d65e523f3375e531abb69fc4c2382c",

    "transactionPosition": 178,

    "type": "call"

    },

    {

    "action": {

        "callType": "call",

        "from": "0x264382b200bc1fe51a9b58f704394de172341418",

        "gas": "0x16a44",

        "input": "0xa9059cbb000000000000000000000000e67e43b831a541c5fa40de52ab0afbe311514e64000000000000000000000000000000000000000000000905f430b36f66685030",

        "to": "0xd6123271f980d966b00ca4fca6c2c021f05e2e73",

        "value": "0x0"

    },

    "blockHash": "0x37e08159b7961d2ccf83be3d222a821f6be1c5a593854d4c63d1223ecad73bae",

    "blockNumber": 17370903,

    "result": {

        "gasUsed": "0x7581",

        "output": "0x0000000000000000000000000000000000000000000000000000000000000001"

    },

    "subtraces": 0,

    "traceAddress": [

        0

    ],

    "transactionHash": "0x923405094e26b9a616aa7c2b757b5c04c1d65e523f3375e531abb69fc4c2382c",

    "transactionPosition": 178,

    "type": "call"

    }

  ]

}

Enter fullscreen mode Exit fullscreen mode

Ao examinarmos os detalhes da resposta, vemos duas partes na seção de resultados. Cada parte representa uma etapa realizada para concluir a transação inicial. Se observarmos mais de perto a parte 'subtraces' da primeira etapa, vemos o número '1'. Isso implica a existência de uma ação adicional ou rastreamento filho associado a essa transação específica.

Caso de Uso 3: Monitorar Endereços Específicos e Contratos Inteligentes para Melhorar seu DevOps

Usando o método trace_filter, você pode capturar eventos específicos ou interações de contratos inteligentes na rede Ethereum. Ao especificar filtros como fromAddress, toAddress, fromBlock e toBlock, você pode obter um rastreamento filtrado de transações e eventos que correspondem ao seu filtro.

Código de Solicitação:


curl --location 'https://mainnet.infura.io/v3/<INFURA API KEY>' \

--header 'Content-Type: text/plain' \

--data '{

  "id": 1,

  "method": "trace_filter",

  "jsonrpc": "2.0",

  "params": [

    {

    "toBlock": "0xccb943",

    "fromBlock": "0xccb943",

    "fromAddress": [

        "0xEdC763b3e418cD14767b3Be02b667619a6374076"

    ],

    "toAddress": [

        "0x7ff4169a6b5122b664c51c95727d87750ec07c80"

    ]

    }

  ]

}'

Enter fullscreen mode Exit fullscreen mode

Código de Resposta:


{

  "jsonrpc": "2.0",

  "id": 1,

  "result": [

    {

    "action": {

        "callType": "call",

        "from": "0xedc763b3e418cd14767b3be02b667619a6374076",

        "gas": "0x8462",

        "input": "0x095ea7b30000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",

        "to": "0x7ff4169a6b5122b664c51c95727d87750ec07c84",

        "value": "0x0"

    },

    "blockHash": "0x351e7c06ec010c8f7e7358eb580238dd23e1e129be96822aa93ebb6da08558e6",

    "blockNumber": 13416771,

    "result": {

        "gasUsed": "0x6009",

        "output": "0x0000000000000000000000000000000000000000000000000000000000000001"

    },

    "subtraces": 0,

    "traceAddress": [],

    "transactionHash": "0x054bbb9fbb855bf23f755e548c7409f45fc5eff8a824b2ad06380bc038d7b049",

    "transactionPosition": 54,

    "type": "call"

    }

  ]

}

Enter fullscreen mode Exit fullscreen mode

Otimize o DevOps e Continue Construindo

A API de Rastreamento capacita os desenvolvedores da Ethereum com recursos avançados de análise, permitindo que eles solucionem falhas de transação, otimizem o desempenho de contratos inteligentes e rastreiem dados específicos.

Ao aproveitar a API de Rastreamento, os desenvolvedores podem aprimorar seus processos de desenvolvimento, garantir uma melhor segurança e oferecer uma experiência superior ao usuário em seus dapps.

O acesso à API de Rastreamento está disponível apenas para clientes pagos. Para começar a utilizar esse recurso, basta criar uma conta no Infura e prosseguir com o upgrade da sua conta. Isso permitirá que você comece a usar a API de Rastreamento.


Artigo escrito por Kingsley Okonkwo. Traduzido por Marcelo Panegali

Oldest comments (0)