レッスン6ではスマートコントラクトとの対話方法、そして Web3.js というライブラリを使ってお主のDAppのベーシックなフロントエンドを作る方法を見ていくとのこと。アプリのフロントエンドはSolidityではなく JavaScript で書かれていることに注意するべき。
ゾンビファクトリーレッスン6
アプリケーションバイナリインタフェース(ABI)
ABIとは、Application Binary Interfaceの略である。基本的にこれはコントラクトのメソッドをJSON形式で表していて、関数コールをコントラクトが理解できるようフォーマットする方法を、Web3.jsに伝えるもの。
ABIには、以下のような定義が含まれる。
・CPU – 命令セット、エンディアンなど。
・データ – データ型、大きさ、配置(アラインメント)など。
・呼出規約 – 関数の引数がどのように渡され、リターン値がどのように渡されるかを定義したもの。
・システムコール – システムコール番号と具体的なシステムコールの仕組み。
・実行ファイルやライブラリの詳細なフォーマット(UNIXならば、COFFやELFなど)。
Intel Binary Compatibility Standard (iBCS) のような完全なABIでは、オペレーティングシステム (OS) が何であれ必要な共有ライブラリが存在するなどの前提条件が満たされていれば、そのABIをサポートしたシステム間でプログラム(実行ファイル)を全く修正せずに動作させることができる。
他のABIとして例えばC++の名前修飾や例外の伝播や呼出規約があるが、あくまでも同じプラットフォーム上のコンパイラ間のABIであり、プラットフォーム間の互換性までは要求されない。
EABI
EABI (Embedded Application Binary Interface) とは、組み込みシステムのソフトウェアについてのファイルフォーマット、データ型、レジスタ使用法、スタックフレームの構成、関数の引数渡し方法などについての規約を意味する。
あるEABIをサポートするコンパイラで生成したオブジェクトコードは、同じEABIをサポートする別のコンパイラで生成したコードと互換性がありコンパイラが異なっていても同じEABIに対応していればライブラリやオブジェクトコード間でリンク可能である。アセンブリ言語でコードを書く場合でもEABIに準拠するように書けば、他のコードとのリンクが保証される。
EABIと汎用OS向けABIとの主な違いは、アプリケーションのコードでも特権命令の使用が許されている点、ダイナミックリンクが要求されない点(完全に不可能とされている場合もある)、メモリを節約するためスタックフレームをなるべくコンパクトに構成している点が挙げられる。
EABIが広く使われているCPUアーキテクチャとしては、PowerPC、ARM、MIPSがある。
ABI共通化の試みとその成果
Unix系OSでは、同じハードウェアプラットフォーム上で非互換な複数のOSが動作する。
例えばRISCチップにおいては以下のような例がある。
・POWER系 : AIX 5L / Solaris10g / Linux等
・MIPS系 : UX/4800 / Irix 等
・Itanium系 : HP-UX / Linux 等
最も互換Unix系OSが多いのは、IA-32系であろう。それらOS間でABIを定義して相互にアプリケーションが動作できるようにしようという試みがいくつかあった。しかし、そのような計画が成功したことはない。Linuxにおいては、Linux Standard Base(LSB)が同様の試みを行っている(LSBはABI以外にも多くの規定を試みている)。
一方、採用ベンダ数が多く、複数のUnix系OSが乱立していたMIPS系においては、何度もABIの共通化を目指した試みがなされている。
例えば、1990年代中盤〜後半にかけてUNIXワークステーション / サーバにおいて、MIPS系CPUを採用したNEC(UX/4800)、Sony(NEWS)、住友電工(EWS4800などのNECからのOEM品とSUMIStation)、日本タンデムコンピュータ(MIPS系だったNonStopServer)によるOCMP (Open Computing Environment for MIPS Platform) が定義され、シェアの維持など一定の成果を挙げた。OCMPはMIPS-ABIの日本語対応の側面とAPバスの標準化による周辺デバイスの共通化の側面がある。
まとめ
「TX」とは「Transmit exchange」を省略した言葉です。 「Transmitter」は日本語で送信機を意味しており、TXという略語はデータの送信結果や送信機を表しています。