---
title: "Transfers API:履歴トランザクションを1回のリクエストで500倍高速に取得"
description: "Alchemy Transfers APIを使って、履歴トランザクションを1回のリクエストで500倍高速に取得する方法を解説します。"
---

### 「0x0」から「latest」まで一瞬で— ETH、ERC20、ERC721の履歴取引を1回のAPIコールで取得する、最速かつ最も効率的な方法

「Vitalik ButerinはElon Muskに対して、これまでどれだけのETH、SUSHI、USDT…(想像はつくと思います)を送っただろうか?」という問いに答えられるメソッドがあったら、と考えたことはないでしょうか。[Alchemy’s Transfers API](https://www.alchemy.com/docs/reference/transfers-api-quickstart)を使えば、それが実現します(ただし両者のウォレットアドレスを知っている必要はあります)。1回のAPIコールで、_任意の_アドレス、任意のトークンについて履歴取引を取得できます。ユーザーごとにチェーン全体をスキャンする必要はありません。

最新のDEXであれ、話題のゲームdAppであれ、開発者であれば履歴取引へのアクセスがいかに大変か身をもって知っているはずです。

ネイティブのEthereumクライアントメソッドを使う場合、各ブロックをクエリしてETH転送を取得し、次に数千件のログを解析して[ERC20](https://www.alchemy.com/overviews/erc20-solidity)とERC721の転送をフィルタリングし、さらにこれらの情報を何らかのデータストアに保持する、という流れになるでしょう。言葉で言うのも一苦労ですが、このインフラをスケーラブルかつ一貫性のある形で構築するには、多くのエンジニアリングリソースを要し、非常に遅い作業になります。コントラクトアドレスからinternal transactionsを取得するためにtransaction traceを解析する話は、ここではあえて触れません — DefiSaverのNikola Vukovićが言うように、「internal transfersを取得するのはほぼ不可能」なのです。

このようにシンプルかつ汎用的なユースケースに対して、こんなに手間のかかるプロセスが必要だと知り、私たちは裏側でこの作業をすべて行うTransfers APIを構築することにしました。あとは単一のエンドポイントを呼び出すだけで、ETH、ERC20、ERC721の転送が次々と返ってきます。さらなるメリットとして、このAPIはページネーションに対応しているため、ネットワークレイテンシを抑えつつ、タイムアウトを起こしたり結果を自分で結合したりすることなく、結果を順次取得できます。

<ImageBlock
  src="https://media.alchemy.com/1704734966-diagram-of-alchemy-transfer-api-infrastructure.png"
  alt="Alchemy Transfers API インフラストラクチャの図"
  width={2880}
  height={2048}
  caption="Transfers API インフラストラクチャ"
/>

Transfers API Infrastructure

過去のユーザー取引をすべて取得した後は、[Address Activity Notifications](https://www.alchemy.com/docs/reference/notify-api-quickstart)を設定するだけで、ETH、ERC20、ERC721の取引をリアルタイムで受け取り続けられます。Alchemy’s Transfers APIとAddress Activity Notificationsを組み合わせれば、ユーザー取引のバックエンドを構築したい開発者にとって強力なツールセットとなります。

<VideoCta
  title="Alchemy ダッシュボードの動作を見る"
  description="30分のガイド付きウォークスルー：ダッシュボードの全ツールをライブでデモ"
  ctaHref="/resources/dashboard-demo"
  thumbnail={{
    src: "https://media.alchemy.com/alchemy-dashboard-demo-thumbnail.png",
    alt: "Alchemy Dashboard Demo",
  }}
/>


ここからが本題です — ライブデモです。Transfers APIの実際の動きを見るには、Public Composerでこの[example query](https://www.alchemy.com/composer?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22alchemy_getAssetTransfers%22%2C%22paramValues%22%3A%5B%7B%22excludeZeroValue%22%3Atrue%2C%22fromBlock%22%3A%220x0%22%2C%22toBlock%22%3A%22latest%22%2C%22fromAddress%22%3A%220x7a250d5630B4cF539739dF2C5dAcb4c659F2488D%22%2C%22toAddress%22%3A%220x2D407dDb06311396fE14D4b49da5F0471447d45C%22%7D%5D%7D)をチェックしてみてください。Uniswap V2: Router 2からYearn: Deployerへの転送を確認できます。とてもシンプルなので、まずはここから始めるとよいでしょう。

私たちの計測結果では、alchemy_getAssetTransfersの呼び出しは、[geth](https://www.alchemy.com/overviews/what-is-a-geth-node-and-how-to-run-one)のeth_getBlockByNumberとeth_getLogsを並行して使い、WETHに送られたすべてのETH、ERC20、ERC721転送を1万ブロック分クエリする場合と比べて、最大500倍(ユースケースによっては文字通り100万倍)高速です。信じられませんか?懐疑的な人、嫌いじゃないです。だからこそ、この[script](https://github.com/alchemyplatform/alchemy-asset-transfers-benchmark)で自分でパフォーマンスを検証できるようにしてあります。最適化の効果を本当に実感したければ、もっと多くのブロックをクエリしてみてください。1万ブロックで500倍の高速化なら、1000万ブロックではどれだけの高速化になるか、想像してみてください🚀!

‍
Transfers APIに興味を持たれた方は、[signing up with Alchemy for free](https://dashboard.alchemy.com/signup?referral=affiliate:18a41366-5a36-4300-8b7b-31bfc8cda175)して、[documentation](https://www.alchemy.com/docs/reference/transfers-api-quickstart)をチェックすることで、今すぐ始められます。
‍
