スマートコントラクトのABIとは?
執筆者 Alchemy
スマートコントラクトのApplication Binary Interface(ABI)は、コントラクトが外部アプリケーションや他のスマートコントラクトと通信・連携する機能を提供する。外部ソースからデータを受け取ることは、アプリケーションとユーザーの目的を達成する上で重要になる場合がある。
従来のWeb開発では、データに関するやり取りはAPI(Application Program Interface)を通じてアプリケーションとサーバーの間で行われる。サーバーは情報の中央集権的なソースとして機能し、リクエストに応じてアプリケーションにデータを送る。
ブロックチェーン上には、このようなデータの中央集権化は存在しない。ノードは実質的にサーバーとして機能し、スマートコントラクトはオンチェーンで「ホスト」される関数である。ブロックチェーン外のアプリケーション(および他のスマートコントラクト)は、オンチェーン上のスマートコントラクトと通信する手段を必要とする。ここでABIが登場する。
なぜABIが必要か
ABIとは何かを詳しく見ていく前に、なぜそれが存在するのかを理解しておくとよい。
スマートコントラクトはEVM(Ethereum Virtual Machine)の中核となるアプリケーションである。スマートコントラクトの目的は、コントラクト内で定義された特定の条件が満たされたときにトランザクションを実行することにある。これらの条件は、オンチェーン・オフチェーンいずれのイベントでもありうる。スマートコントラクトはSolidityのような高級言語で記述されるが、EVM上にはバイナリ形式である実行可能バイトコードとして保存される。

このバイトコードは人間には読めないため、理解するには解釈が必要になる。ABIによって、スマートコントラクトを書く人は誰でも、Javascriptのような高級言語で書かれたWebアプリケーションと、EVMが理解するバイトコードとの間で通信できるようになる。
ABIとは何か
Web2における対応物であるAPIと同様、ABIは関数セレクターとして機能し、実行のためにスマートコントラクトに対して呼び出せる具体的なメソッドを定義する。これらの具体的なメソッドと、それに紐づくデータ型は、生成されるJSON RPCファイルにリストされる。

APIとは異なり、JSON形式のリクエストをそのままスマートコントラクトに送って応答を期待することはできない。コントラクトはバイトコードでしか通信しないためだ。これをEVMが理解できるものに変換するために、この情報はABIエンコーディングを通じてエンコードされる。これらのエンコーディングには関数シグネチャや変数宣言が含まれており、EVMはスマートコントラクト内のどの関数を実行すべきかを正確に把握できる。

応答もバイトコードで返されるため、Webアプリケーションで処理する前に解釈が必要になる。応答にバイトコードを使う利点は、コントラクトの関数を呼び出した後に返される構造をあらかじめ予測できることである。
ABIの使い方
生成
Hardhat/TruffleのようなツールやRemixのようなIDEを使っている場合、コントラクトのABIは自動的に生成される。Solidity Compiler NPMパッケージを使えば、手動でABIを作成することもできる。パッケージをインストールした後、ターミナルで「solcjs contractname.sol --abi」コマンドを実行できる。成功すると、.abiファイルが生成される。
生成されたABIを手に入れたところで、このファイルに含まれる要素のいくつかを見てみよう。

実行
ABIはEVMバイトコードとWebサイトのJavascriptとの間の通訳として機能するため、スマートコントラクトの関数を実行したいときには常に必要になる。ABIに加えて、ブロックチェーン上のコントラクトのアドレスも必要になる。以下は、これがどのように行われるかを示す小さなJavascriptのコードスニペットである。

すでにデプロイされているコントラクトのABIを調べたい場合は、コントラクトのアドレスでEtherscanを検索することで見つけられる。例えばこちら:

エンコーディング
すべての通信がバイトコードで行われるため、開発者自身にこれらのメッセージをエンコードさせるのは現実的ではない。幸い、Remixのような一般的なコンパイラはエンコーディングも代わりに処理してくれる。これらのエンコーディングは一定のパターンに従っているため、ABI Specificationを確認することで、何が行われているかをより理解しやすくなる。
最初の4バイトは関数シグネチャであり、スマートコントラクト内のどの種類の関数が実行されているかを示す。よく使われる関数識別子としてa9059cbbがあり、これはERC20のtransferであることを示す。ここに関数シグネチャのデータベースディレクトリがあるので、さらに調べることができる。

5バイト目以降が引数のエンコード部分である。応答もこれと似た構造に従うが、関数シグネチャは含まれない。
結論
ABIは、スマートコントラクトを扱う上で見落とされがちな側面であることが多いが、この技術の使いやすさにおいて重要な役割を果たしている。スマートコントラクトのチュートリアルを実際に手を動かして進めることは、この目立たない働き者の力を理解し、知識を実践に活かすための良い方法である。
関連する概要
Ethereum2026年7月28日
Robinhood Chainでミームコインをローンチする
FoundryとAlchemy RPCを使ってRobinhood Chainメインネットに固定供給のERC20を書いてデプロイする、またはAlchemy CLIでローンチ全体をコーディングエージェントに任せる。
Ethereum2025年11月18日
Ethereum Fusakaアップグレードとは?12個のEIPを解説する開発者向けガイド
Fusakaアップグレードの実践的な解説。12個の主要EIPと、それらがEthereumスタック全体のデータ可用性、暗号技術、ガスコスト、バリデーター運用に与える変化について説明する。
Ethereum2025年5月19日
EIP-7702:Pectra後のEthereum開発者向けクイック統合ガイド
EthereumはEIP-7702という重要なアップグレードを目前に控えている。すべての開発者向けに、統合時の考慮点をまとめたクイックガイド。

ブロックチェーンで魔法を生み出す
Alchemyは、最も強力なweb3開発者向けプロダクトとツールを、豊富なリソース、コミュニティ、そして卓越したサポートと組み合わせて提供します。