定義
ABIエンコーディングは、人間が読める関数シグネチャや構造化データを、Application Binary Interface(ABI)によって定義された低レベルのバイナリ表現に変換する仕組みです。引数、戻り値、複雑なデータ型がバイト列の中でどのようなレイアウトになるかを厳密に規定することで、スマートコントラクトと外部の呼び出し元がそれらを一貫して解釈できるようにします。ABIのルールに従うことで、さまざまなツールやwallet、アプリケーションが、データのフォーマット方法についてあいまいさなく同じコントラクトとやり取りできるようになります。
このエンコーディングは、多くのスマートコントラクトプラットフォームにおけるコントラクト呼び出し、イベントログ、データ保存形式の中心的な役割を担っています。関数が呼び出される際、コントラクトがパラメータを予測可能な順序とサイズで受け取り、戻り値が正しくデコードされることを保証します。ABIエンコーディングがなければ、オンチェーンとオフチェーンのコンポーネントは、スマートコントラクトと構造化データをやり取りするための共通言語を欠くことになります。
背景と用途
ABIエンコーディングは通常、スマートコントラクトが公開している関数、イベント、データ型を列挙したABI仕様とセットで定義されます。トランザクションがコントラクトの関数を呼び出すとき、call dataフィールドはABIエンコーディングを用いて構築され、コントラクトがどの関数かを特定し、その入力をパースできるようにします。同じルールは、イベントログをデコードしたり、コントラクト実行から返ってきたデータを解釈したりする際にも適用されます。
実務上、ABIエンコーディングは高水準プログラミング言語と、スマートコントラクトを実行する低レベルの仮想マシンとの間のbridgeとして機能します。これにより、オンチェーンのロジックとオフチェーンのアプリケーションが、共通で決定論的なデータ形式を共有でき、型の不一致や順序の違いによるエラーを減らせます。この用語はABIそのものと密接に関連しており、ABIはエンコーディングの仕組みが従うべきスキーマを定義しています。