Como obter transações históricas na Polygon?
Autor: Isaac Lau
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.

(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:
- 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!

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.

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:

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
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.
Artigos relacionados

Glamsterdam: o guia completo para desenvolvedores de Ethereum
Glamsterdam já está na Sepolia. O guia completo sobre o que isso significa para desenvolvedores e como a Alchemy se preparou para a atualização da rede.

Por que equipes de trading escolhem a Alchemy para RPC de baixa latência
Equipes de trading escolhem a Alchemy por leituras e escritas de baixa latência quando o mercado se move, e por um registro confiável quando o dinheiro liquida, mesmo no pico de volume.

Em qual provedor de RPC você deve construir em Tóquio?
Comparamos cinco dos provedores de RPC que atendem Tóquio em cinco chains. Veja como eles se comparam e onde as diferenças importam para equipes sensíveis à latência.