Pular para o conteúdo
0%

Como obter transações históricas na Polygon?

Autor: Isaac Lau

Última atualização: 4 de fevereiro de 20224 min de leitura

Soluções de escalabilidade de Layer 2 do Ethereum, como a Polygon, permitiram que desenvolvedores aproveitassem custos de transação baixos e tempos de confirmação muito mais rápidos. Porém, isso introduz um novo desafio para os devs: como processar e armazenar grandes volumes de dados de blockchain. Tradicionalmente, os desenvolvedores precisavam subir, gerenciar e indexar seus próprios nodes para construir bancos de dados. Isso deixava os desenvolvedores limitados por uma solução cara e lenta que, em última análise, restringe o conjunto de funcionalidades de seus apps, independentemente de estarem implantados em soluções de Layer 1 ou Layer 2.

Embora construir consultas históricas em apps tenha sido tradicionalmente complicado e demorado, a Alchemy Transfers API na Polygon permite que desenvolvedores obtenham detalhes de transações da Polygon, desde o início, em uma única requisição.

Neste tutorial, veremos um exemplo de como, com apenas algumas linhas de código, seu dApp na Polygon pode integrar transações históricas.

Prévia do código 👀

Antes de explorar a Alchemy Transfers API na Polygon, vamos esclarecer os 3 tipos de transferências que vemos on-chain (nota - a Polygon Transfers API só suporta transferências de tokens)

Tipos de transferências:

1. Transferências externas de MATIC

São transações de nível superior da Polygon que ocorrem com um endereço de origem sendo um endereço externo (criado pelo usuário). Endereços externos possuem chaves privadas e são acessados por usuários.

_ Transferências externas não são atualmente suportadas pela Alchemy Transfers API na Polygon_

2. Transferências de tokens

Logs de eventos para transferências ERC20 (tokens fungíveis), ERC721 (NFTs) e ERC1155 (tokens híbridos fungíveis e não fungíveis).

3. Transferências internas de eth

São transferências que ocorrem quando o fromAddress é um endereço interno (smart contract). (ex: um smart contract chamando outro smart contract ou um smart contract chamando outro endereço externo).

_ Transferências internas não são atualmente suportadas pela Alchemy Transfers API na Polygon_

Para mais informações sobre parâmetros da API e respostas JSON, leia a Alchemy Transfers API.

Entendendo a Alchemy Transfers API na Polygon

Neste exemplo, estamos tentando consultar e encontrar a transferência de esta transação. Podemos ver no Polyscan que ~12.000 USDT foram transferidos de 0x5350e1068f0e138ff306990b16fa4910d970c692 para 0x9d2b758e3ffd2569c6956676fae7f8b71a53ffb5.

captura de tela dos detalhes da transação no polygon scan
https://polygonscan.com/tx/0x1e85ace98f4fc4ad7b1b64465df81d0a275d494421e553e23a238b156f42b17f

(Se quiser pular direto para o código, faça um fork do script inicial [https://github.com/pileofscraps/historical_transactions_polygon_scripts] e acompanhe)

Para usar a Transfers API para rastrear a transferência de USDT, precisamos de algumas informações-chave que ajudam a restringir nossa busca. Formatamos essa informação de requisição em um objeto JSON da seguinte forma:

‍

  1. From Block e To Block

Podemos reduzir o tempo necessário para a API retornar nossa resposta JSON ao restringir os números de bloco inicial e final que estamos tentando buscar.

Nossa transação ocorre no bloco 23876472, então ajustamos nossa busca para uma pequena margem em torno desse número de bloco.

O objeto JSON nos permite usar uma string hexadecimal ou números de bloco como entrada. Neste caso, usamos hexadecimais, então inserimos 0x16C5376 para umfromBlock de 23876470 e 0x16C537A para umtoBlock

2. Endereços de destino e origem

Os endereços de destino (To) e origem (From) representam para onde a transação foi enviada e de onde ela se originou, respectivamente.

Em nosso exemplo, o endereço To é 0x9d2b758e3ffd2569c6956676fae7f8b71a53ffb5 e o endereço From é 0x5350e1068f0e138ff306990b16fa4910d970c692.

3. Endereço do contrato

O endereço do contrato é o endereço que denota o contrato ERC20, ERC721 ou ERC1155 específico que buscamos encontrar. Em nosso exemplo, o contrato ERC20 do USDT na Polygon é 0xc2132d05d31c914a87c6611c10748aeb04b58e8f.

Reunindo essas informações, podemos agora usar a ferramenta Composer da Alchemy para retornar resultados que incluam nossa transação-alvo.

Visite este Alchemy Composer Example!

‍

captura de tela da visualização do Alchemy Composer
Visualização do Alchemy Composer

Testando a Alchemy Transfers API na Polygon via Python

Agora, para testar a Alchemy Transfers API, consultamos a mesma transferência; desta vez, porém, usamos código! Se quiser acompanhar, faça um fork do script inicial.

1. Declarações de import:

Para testar a Alchemy Transfers API, começamos com algumas declarações de import para importar módulos que usaremos mais adiante.

Se você não tiver nenhum desses módulos instalados em seu ambiente Python, execute os seguintes comandos pip em seu ambiente Python.

2. Insira a chave Alchemy para acesso à API:

Se ainda não tiver uma, primeiro você precisará criar uma conta na Alchemy. A versão gratuita funciona bem para começar!

Substitua a string "ALCHEMY KEY" pela sua própria chave de API privada.

captura de tela da chave de API no dashboard da Alchemy
Chave da Alchemy

3. Configure o Web3.py para lidar com contratos ERC20

Como estamos trabalhando com USDT, um contrato ERC20, precisamos de um trecho de código adicional além do que normalmente chamaríamos no Web3 para interagir corretamente com nosso contrato. Note que incluímos a ABI do ERC20 neste trecho de código para ler corretamente o contrato USDT.

(A Contract Application Binary Interface (ABI) é a forma padrão de interagir com contratos no ecossistema Ethereum e usamos a ABI do ERC20 para interagir com contratos ERC20 como o contrato USDT)

‍(Para fins de legibilidade, a ABI completa do ERC20 não está incluída no trecho de código acima. Para encontrar a ABI completa, visite este Github Gist)

4. Defina as variáveis.

Como descrito acima, configuramos nossas variáveis para apontar para os endereços e números de bloco corretos. Além disso, usamos o método w3.eth.contract para que possamos ler dados via o contrato USDT. ‍

5. Consulte via a Alchemy Transfers API

Aqui, fazemos um POST de uma requisição para a Alchemy Transfers API. Embutido em nossa requisição está o método alchemy_getAssetTransfers específico que chamamos e todos os parâmetros anteriores [From Block e To Block, To e From Addresses, e Contract Address]

Note que também processamos o resultado JSON e o interpretamos para obter o valor exato de USDT que foi transferido na transação que nossa consulta retorna.

6. Converta unidades para legibilidade!

Após receber e interpretar o valor de USDT da resposta JSON, convertemos a string hexadecimal para formato decimal e fazemos uma conversão de unidade!

Saída final na linha de comando:

captura de tela da saída da linha de comando
Saída da Linha de Comando
Parabéns! Você agora consultou com sucesso a Alchemy Transfers API na Polygon. Como próximo projeto, tente consultar outros tipos de transferências de tokens!

Com a Alchemy Transfers API, você pode construir consultas históricas em apps na Polygon para popular atividade histórica de carteiras e transferências de tokens, permitindo que você desenvolva uma UI mais amigável e crie análises on-chain mais detalhadas. Aproveite as taxas baixas da Layer 2 e mantenha seus usuários informados sobre a infinidade de suas atividades de transação on-chain, tanto no presente quanto no passado!

‍

Newsletter da Alchemy

Seja o primeiro a saber sobre lançamentos

Assine nossa newsletter

Receba as últimas atualizações de produtos e recursos da Alchemy

A
O
D
+
Mais de 80.000 inscritos

Ao inserir seu endereço de e-mail, você concorda em receber nossas comunicações de marketing e atualizações de produtos. Você reconhece que a Alchemy processa as informações que recebemos de acordo com nosso Aviso de Privacidade. Você pode cancelar a inscrição a qualquer momento.