コントラクト【contract】
概要

ある機能や部品が外部に対してどのような振る舞いを行うかを定義した取り決めをコントラクトという。利用する側と提供する側の間で共有される約束事であり、入力できる値や呼び出し方法、処理後に保証される結果などを明確にする。複数のモジュールやクラスが連携して動作する際、内部構造を知らなくても利用できるようにするために用いられる。
オブジェクト指向開発では、呼び出し前に満たすべき事前条件、処理後に保証される事後条件、常に維持される不変条件を定義する考え方を「契約による設計」(DbC:Design by Contract)と呼ぶ。インターフェースや抽象クラスはこの取り決めを表現する仕組みである。分散システムやWebサービスの分野では、APIの仕様書がコントラクトとして機能し、データ形式や認証方式などを定める。
スマートコントラクト
仮想通貨・暗号資産の分野では「スマートコントラクト」(smart contract)と呼ばれる仕組みが知られている。これは、ブロックチェーン上に記録され、特定の条件が満たされると自動的に処理を実行するプログラムである。イーサリアムなどのブロックチェーンではコントラクトはアカウントの一種として扱われるが、秘密鍵を持たないため一般の利用者が保有するアカウントとは異なる。プログラムコードと実行に必要なデータを保持し、取引(トランザクション)を受け取ると内部の処理を実行する。
この考え方は、ブロックチェーンの仕組みが考案される以前の1990年代に暗号学者ニコラス・サボ(Nicholas Szabo)氏が提唱した。氏は、契約条件をプログラムとして記述し、条件が満たされた際に自動的に履行される仕組みを構想した。ブロックチェーン上に展開されたコードは後から書き換えることが基本的にできず、コントラクトの実行には処理内容に応じたコストがかかる。イーサリアムではこのコストを「ガス」(gas:ガソリンのこと)と呼び、利用者がガス代として暗号資産を支払う。