본문으로 건너뛰기
0%

Polygon에서 과거 트랜잭션을 조회하는 방법

작성자: Isaac Lau

마지막 업데이트: 2022년 2월 4일3분 읽기

Polygon과 같은 Ethereum Layer 2 스케일링 솔루션은 개발자들이 낮은 트랜잭션 비용과 훨씬 빠른 확인 시간을 활용할 수 있게 해주었습니다. 하지만 이는 개발자들에게 새로운 과제를 안겨줍니다. 바로 대량의 블록체인 데이터를 어떻게 처리하고 저장할 것인가입니다. 전통적으로 개발자들은 데이터베이스를 구축하기 위해 자체 노드를 띄우고, 관리하고, 인덱싱해야 했습니다. 이는 개발자들을 비싸고 느린 솔루션에 묶어두었으며, 결과적으로 Layer 1이든 Layer 2든 상관없이 앱의 기능 범위를 제한했습니다.

앱에 히스토리 쿼리를 구축하는 것은 전통적으로 복잡하고 시간이 많이 소요되는 작업이었지만, Polygon용 Alchemy Transfers API를 사용하면 개발자들은 단 한 번의 요청으로 최초 시점까지 거슬러 올라가는 Polygon 트랜잭션 세부 정보를 가져올 수 있습니다.

이 튜토리얼에서는 몇 줄의 코드만으로 Polygon dApp에 히스토리 트랜잭션을 통합하는 예시를 살펴보겠습니다.

코드 미리보기 👀

Polygon용 Alchemy Transfers API를 살펴보기 전에, 온체인에서 발생하는 3가지 전송 유형을 먼저 정리해봅시다 (참고 - Polygon Transfers API는 토큰 전송만 지원합니다)

전송 유형:

1. 외부 MATIC 전송

이는 from 주소가 외부 (사용자가 생성한) 주소인 최상위 Polygon 트랜잭션입니다. 외부 주소는 개인 키를 가지고 있으며 사용자가 접근합니다.

외부 전송은 현재 Polygon용 Alchemy Transfers API에서 지원되지 않습니다

2. 토큰 전송

ERC20 (대체 가능 토큰), ERC721 (NFT), ERC1155 (대체 가능 및 대체 불가능 하이브리드 토큰) 전송에 대한 이벤트 로그입니다.

3. 내부 eth 전송

이는 _fromAddress_가 내부 (스마트 컨트랙트) 주소인 전송입니다. (예: 스마트 컨트랙트가 다른 스마트 컨트랙트를 호출하거나, 스마트 컨트랙트가 다른 외부 주소를 호출하는 경우)

내부 전송은 현재 Polygon용 Alchemy Transfers API에서 지원되지 않습니다

API 파라미터와 JSON 응답에 대한 자세한 내용은 Alchemy Transfers API를 참고하세요.

Polygon용 Alchemy Transfers API 이해하기

이 예시에서는 이 트랜잭션의 전송을 조회하려고 합니다. Polyscan을 통해 약 12,000 USDT가 0x5350e1068f0e138ff306990b16fa4910d970c692에서 0x9d2b758e3ffd2569c6956676fae7f8b71a53ffb5로 전송되었음을 확인할 수 있습니다.

polygon scan 트랜잭션 상세 정보 스크린샷
https://polygonscan.com/tx/0x1e85ace98f4fc4ad7b1b64465df81d0a275d494421e553e23a238b156f42b17f

(코드로 바로 넘어가고 싶다면, 시작 스크립트 [https://github.com/pileofscraps/historical_transactions_polygon_scripts]를 fork하고 따라해보세요)

Transfers API를 사용해 이 USDT 전송을 추적하려면, 검색 범위를 좁혀주는 몇 가지 핵심 정보가 필요합니다. 이 요청 정보를 다음과 같이 JSON 객체로 구성합니다:

‍

  1. From Block & To Block

검색하려는 시작 및 종료 블록 번호를 제한함으로써 API가 JSON 응답을 반환하는 데 걸리는 시간을 줄일 수 있습니다.

우리 트랜잭션은 블록 23876472에서 발생하므로, 이 블록 번호를 중심으로 작은 버퍼를 두어 검색 범위를 조정합니다.

JSON 객체는 블록 번호 입력에 16진수 문자열 또는 숫자를 사용할 수 있습니다. 여기서는 16진수를 사용하므로, 23876470을 나타내는fromBlock 에 0x16C5376을, toBlock에 0x16C537A를 입력합니다

2. To & from 주소

To & From 주소는 각각 트랜잭션이 전송된 대상과 트랜잭션이 시작된 출처를 나타냅니다.

이 예시에서 To 주소는 0x9d2b758e3ffd2569c6956676fae7f8b71a53ffb5이고 From 주소는 0x5350e1068f0e138ff306990b16fa4910d970c692입니다.

3. 컨트랙트 주소

컨트랙트 주소는 우리가 찾고자 하는 특정 ERC20, ERC721, 또는 ERC1155 컨트랙트를 나타내는 주소입니다. 이 예시에서 Polygon USDT의 ERC20 컨트랙트는 0xc2132d05d31c914a87c6611c10748aeb04b58e8f입니다.

이 정보들을 종합하면, 이제 Alchemy의 Composer 도구를 사용해 우리가 찾는 트랜잭션이 포함된 결과를 반환할 수 있습니다.

Alchemy Composer Example을 방문해보세요!

‍

alchemy composer 뷰 스크린샷
Alchemy Composer 뷰

Python으로 Polygon용 Alchemy Transfers API 사용해보기

이제 Alchemy Transfers API를 사용해 같은 전송을 조회해보겠습니다. 단, 이번에는 코드를 사용합니다! 따라해보고 싶다면 시작 스크립트를 fork하세요.

1. Import 문:

Alchemy Transfers API를 사용해보기 위해, 먼저 나중에 사용할 모듈들을 import하는 문으로 시작합니다.

이 모듈들이 python 환경에 설치되어 있지 않다면, python 환경에서 다음 pip 명령어를 실행하세요.

2. API 접근을 위한 Alchemy 키 입력:

아직 계정이 없다면, 먼저 Alchemy에 계정을 생성해야 합니다. 시작하는 데는 무료 버전으로도 충분합니다!

문자열 "ALCHEMY KEY"를 자신의 개인 API 키로 교체하세요.

alchemy 대시보드 API 키 스크린샷
Alchemy 키

3. ERC20 컨트랙트를 처리하도록 Web3.py 설정하기

우리는 ERC20 컨트랙트인 USDT를 다루고 있으므로, 컨트랙트와 올바르게 상호작용하기 위해 평소 Web3에서 호출하는 것 외에 추가 코드가 필요합니다. 이 코드 스니펫에는 USDT 컨트랙트를 제대로 읽기 위해 ERC20 ABI를 포함시켰다는 점에 유의하세요.

(Contract Application Binary Interface (ABI)는 Ethereum 생태계에서 컨트랙트와 상호작용하는 표준 방식이며, 우리는 USDT 컨트랙트와 같은 ERC20 컨트랙트와 상호작용하기 위해 ERC20 ABI를 사용합니다)

‍(가독성을 위해 위 코드 스니펫에는 ERC20 ABI 전체가 포함되어 있지 않습니다. 전체 ABI를 확인하려면 이 Github Gist)를 방문하세요

4. 변수 설정.

위에서 설명한 대로, 올바른 주소와 블록 번호를 가리키도록 변수를 설정합니다. 또한 USDT 컨트랙트를 통해 데이터를 읽을 수 있도록 w3.eth.contract 메서드를 사용합니다. ‍

5. Alchemy Transfers API를 통한 쿼리

여기서는 Alchemy Transfers API에 요청을 POST합니다. 우리 요청에는 앞서 설정한 모든 파라미터 [From Block & To Block, To & From Addresses, Contract Address]와 함께 우리가 호출하는 특정 alchemy_getAssetTransfers 메서드가 포함되어 있습니다.

또한 JSON 결과를 처리하고 파싱하여, 쿼리가 반환하는 트랜잭션 내에서 정확히 전송된 USDT 값을 얻어낸다는 점에 유의하세요.

6. 가독성을 위한 단위 변환!

JSON 응답으로부터 USDT 값을 수신하고 파싱한 후, 16진수 문자열을 10진수 형식으로 변환하고 단위 변환을 수행합니다!

최종 커맨드 라인 출력:

커맨드 라인 출력 스크린샷
커맨드 라인 출력
축하합니다! 이제 Polygon용 Alchemy Transfers API에서 성공적으로 쿼리를 수행했습니다. 다음 프로젝트로, 다른 유형의 토큰 전송을 쿼리해보세요!

Alchemy Transfers API를 사용하면, Polygon 앱에 히스토리 쿼리를 구축하여 지갑 활동과 토큰 전송 히스토리를 채워 넣을 수 있으며, 이를 통해 더 사용자 친화적인 UI를 개발하고 더 상세한 온체인 분석을 만들 수 있습니다. Layer 2의 저렴한 수수료를 활용하고, 현재와 과거 모두에 걸친 사용자의 다양한 온체인 트랜잭션 활동에 대해 사용자에게 정보를 제공하세요!

‍

Alchemy 뉴스레터

출시 소식을 가장 먼저 받아보세요

뉴스레터 구독하기

Alchemy의 최신 제품 업데이트와 리소스 받기

A
O
D
+
구독자 80,000명 이상

이메일 주소를 입력하면 마케팅 커뮤니케이션 및 제품 업데이트 수신에 동의하게 됩니다. Alchemy는 저희 개인정보 처리방침에 따라 수집한 정보를 처리합니다. 언제든지 구독을 취소할 수 있습니다.