スマートコントラクトの処理の制約
連載第3回で解説した通り、スマートコントラクトのメソッドはブロックチェーンネットワーク上のどのノードからでも呼び出して実行することができます。これを実現するために、スマートコントラクトには決定的(deterministic)と呼ばれる処理上の制約が課されます。決定的とは、入力がある値に決まったら、処理の経路も決まって、常に同じ出力結果に至るような処理のことを表します。スマートコントラクトのメソッドは、入力として呼び出しの引数とそのときのスマートコントラクトの状態(これはブロックチェーンでデータ共有されている)とが決まると、どのノードで実行されたとしても、出力として全く同一の結果を返すということです。
決定的という制約上、スマートコントラクトにはできないことが生まれます。例として、ランダム値に依存する処理や、ノードの外側にあるWebサーバーとやり取りすることなどがあります。Webサーバー上の情報は時々刻々変化しているかもしれませんし、通信エラーになる可能性もありますので、処理の経路と処理結果をひとつに決定することはできません。ノードの外側とはブロックチェーンの外にある世界の全てです(一般にオフチェーンといいます)。スマートコントラクトはブロックチェーンという隔離された世界(一般にオンチェーンといいます)に閉じ込められており、スマートコントラクトに対して開かれている窓はメソッドの引数のみです。
また、スマートコントラクトの実行環境という面では、何らかのサンドボックス内で実行されるのが通常です。これは、一般論的にWebブラウザなどのそれと同じ考え方で、ブロックチェーンの内外のさまざまな影響から個々のスマートコントラクトを隔離するためです。スマートコントラクトのサンドボックス環境は、プロダクトにより仮想マシンやコンテナといった形で提供されます。
なんといってもスマートコントラクトは、ブロックチェーンの非中央集権という特徴を踏まえた機能なのです。従来のクライアント・サーバーシステムでは、特定のサーバーで処理の実行やデータの保持を行う構造のゆえに、そのサーバーを運営する事業者への中央集権化を回避できませんが、ブロックチェーンはそれを回避することを目標として、スマートコントラクトに制約を持たせることで非中央集権を実現し、従来型システムとの差別化を実現しています。
分散(distributed)と非中央主権(decentralized)
ブロックチェーンの文脈では、分散(distributed)と非中央集権(decentralized)は、ニュアンスの違いを明確に認識しておくとよい単語であると考えられます。日本語への翻訳において、両者が「分散」という同一訳にされてしまうことがあるようですが、本来は避けるべきことです。distributedとdecentralizedはそれぞれ使われる文脈が違います。distributedはあるものごと(例えば、システムの構造)を対象として「散らばっている」こと、decentralized は権力を対象として「集中ではなく分散されている」ことに対して使われます。
したがって、対称軸をシステム構造と権力とで別々に考えることができ、構造上centralized なシステムの権力はcentralized(中央集権)となるものの、構造上distributedなシステムの権力は必ずしもそうではなく、centralized(中央集権)とdecentralized (非中央集権)のどちらの場合もあります(図1)。例えば、従来の分散システム(Hadoopなど)は基本的にcentralizedな運用が前提ですが、新たな分散システムであるブロックチェーンはcentralizedでもdecentralizedでも運用できます(例えば、単一組織のプライベートネットワークのような形態はcentralized、Ethereumのパブリックネットワークのような形態はdecentralized)。なお、図示において、誤解を与えない方法でcentralizedとdistributedの表現はなんとかできても、decentralizedの表現は難しいようです。あなたも図示の方法を考えてみてはいかがでしょうか。