Polygonでトランザクション履歴を取得する方法
著者: Isaac Lau
Polygonのような Ethereum Layer 2スケーリングソリューションにより、開発者は低い取引コストと大幅に速い確認時間を活用できるようになりました。しかし、これは開発者にとって新たな課題をもたらします。それは、大量のブロックチェーンデータをどう処理・保存するかという問題です。従来、開発者はデータベースを構築するために自前のノードを立ち上げ、管理し、インデックスを作成する必要がありました。これにより開発者は高コストで低速なソリューションに縛られ、Layer 1であれLayer 2であれ、結果的にアプリの機能セットが制限されていました。
アプリに履歴クエリを組み込むことは従来、複雑で時間のかかる作業でしたが、Polygon向けAlchemy Transfers APIを使えば、開発者は最初期まで遡ったPolygonのトランザクション詳細を1回のリクエストで取得できます。
このチュートリアルでは、わずか数行のコードで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に転送されたことが分かります。

(コードに直接進みたい場合は、スターターコード[https://github.com/pileofscraps/historical_transactions_polygon_scripts]をフォークして進めてください)
Transfers APIを使ってこのUSDT転送を追跡するには、検索を絞り込むためのいくつかの重要な情報が必要です。このリクエスト情報を以下のようにJSONオブジェクトにまとめます。
- From Block と To Block
検索しようとしている開始・終了のブロック番号を制限することで、APIがJSONレスポンスを返すまでの時間を短縮できます。
今回のトランザクションはブロック23876472で発生しているため、このブロック番号周辺に少しバッファを持たせて検索範囲を調整します。
JSONオブジェクトでは、ブロック番号の入力として16進数文字列または通常の数値のどちらも使用できます。今回は16進数を使用するため、fromBlock として0x16C5376(23876470)、toBlockとして0x16C537Aを入力します。
2. To & from アドレス
To & Fromアドレスは、それぞれトランザクションの送信先と送信元を表します。
今回の例では、_To_アドレスは0x9d2b758e3ffd2569c6956676fae7f8b71a53ffb5、_From_アドレスは0x5350e1068f0e138ff306990b16fa4910d970c692です。
3. コントラクトアドレス
コントラクトアドレスは、検索対象である特定のERC20、ERC721、またはERC1155コントラクトを示すアドレスです。今回の例では、Polygon USDTのERC20コントラクトは0xc2132d05d31c914a87c6611c10748aeb04b58e8fです。
これらの情報をまとめることで、Alchemy Composerツールを使って対象トランザクションを含む結果を返すことができます。
こちらのAlchemy Composer Exampleをご覧ください!

PythonでPolygon向けAlchemy Transfers APIを試す
それでは、Alchemy Transfers APIを実際に試すため、同じ転送をクエリしてみましょう。ただし今回はコードを使います!一緒に進めたい場合は、スターターコードをフォークしてください。
1. importステートメント:
Alchemy Transfers APIを試すにあたり、まずは後で使用するモジュールをimportするためのimportステートメントから始めます。
これらのモジュールがまだpython環境にインストールされていない場合は、python環境内で以下のpipコマンドを実行してください。
2. API アクセス用にAlchemyキーを挿入:
まだアカウントをお持ちでない場合は、まずAlchemyでアカウントを作成する必要があります。始めるには無料版で十分です!
文字列「ALCHEMY KEY」を自分の秘密APIキーに置き換えてください。

3. ERC20コントラクトを扱うためのWeb3.pyの設定
USDT(ERC20コントラクト)を扱っているため、通常のWeb3呼び出しに加えて、コントラクトと正しくやり取りするための追加のコードが必要です。USDTコントラクトを正しく読み取るために、このコードスニペットにERC20 ABIを含めている点に注意してください。
(Contract Application Binary Interface(ABI)はEthereumエコシステムでコントラクトとやり取りするための標準的な方法であり、USDTコントラクトのようなERC20コントラクトとやり取りするためにERC20 ABIを使用します)
(読みやすさのため、上記のコードスニペットにはERC20 ABI全体は含まれていません。完全なABIについては、こちらのGithub Gistをご覧ください)
4. 変数の設定
上記の通り、正しいアドレスとブロック番号を指すように変数を設定します。さらに、w3.eth.contractメソッドを使用して、USDTコントラクト経由でデータを読み取れるようにします。
5. Alchemy Transfers API経由でのクエリ
ここでは、Alchemy Transfers APIにリクエストをPOSTします。リクエストには、呼び出す特定のalchemy_getAssetTransfersメソッドと、これまでのパラメータ(From Block & To Block、To & From Addresses、Contract Address)が含まれています。
また、JSON結果を処理して解析し、クエリの結果として返されるトランザクション内で転送された正確なUSDT値を取得している点にも注目してください。
6. 読みやすさのために単位を変換!
JSONレスポンスからUSDT値を受け取り解析した後、その16進数文字列を10進数形式に変換し、単位変換を行います!
最終的なコマンドライン出力:

おめでとうございます!これでPolygon向けAlchemy Transfers APIへのクエリに成功しました。次のプロジェクトとして、他の種類のトークン転送のクエリを試してみてください!
Alchemy Transfers APIを使えば、Polygonアプリに履歴クエリを組み込んでウォレットの過去の活動やトークン転送を反映させることができ、よりユーザーフレンドリーなUIの開発や、より詳細なオンチェーン分析の作成が可能になります。Layer 2の低手数料を活用し、ユーザーに現在から過去に至るまでの膨大なオンチェーン取引活動を知らせましょう!
Alchemy Newsletter
リリース情報をいち早く受け取る
ニュースレターに登録する
Alchemyの最新のプロダクト情報とリソースをお届けします
メールアドレスを入力すると、当社のマーケティング情報およびプロダクト最新情報の受信に同意したことになります。Alchemyが受け取った情報をプライバシー通知に従って取り扱うことに同意するものとします。購読はいつでも解除できます。
関連記事

Glamsterdam: Ethereum開発者のための完全ガイド
GlamsterdamはSepoliaで稼働中です。開発者にとって何を意味するか、Alchemyがネットワークアップグレードにどう備えたかをまとめた完全ガイドです。

トレーディングチームが低レイテンシーRPCにAlchemyを選ぶ理由
トレーディングチームがAlchemyを選ぶのは、市場が動くときの低レイテンシーな読み取りと書き込み、そして出来高のピーク時でも資金が決済される際の信頼できる記録のためだ。

東京で構築するなら、どのRPCプロバイダーを選ぶべきか
東京を提供するRPCプロバイダー5社を、5つのチェーンでベンチマークした。比較結果と、レイテンシに敏感なチームにとって差が出るポイントを示す。