ステップ3 スマートコントラクトの参照メソッドを呼び出して実行する
シナリオのステップ3の参照メソッドの呼び出しと実行は、更新メソッドとは異なり単純です。前述の通り、各ノードはスマートコントラクトのコードと、内部状態として検証済みの正しいデータを持っているので、それらを使うだけです。参照メソッドでは内部状態を単に返すか、状態更新が起きないような値の加工といった処理が可能です(図6)。
以上で冒頭に記載したスマートコントラクトの実行シナリオは終了です。
まとめ
スマートコントラクトのメソッドを呼び出して実行するには、ブロックチェーンネットワークにアクセスするためのノードが必要です。自分のノードを新たにブロックチェーンネットワークに参加させるには、ブートストラップノードに接続してブロックチェーンのP2Pネットワークの構成員にしてもらう必要があります。その後、新しいノードは最新のブロックチェーンのデータとの同期を行います。同期の際、P2Pで接続している他のノードからデータを取り寄せ、正しさの検証を行った上で保存します。
スマートコントラクトの更新メソッド呼び出しでは、トランザクションを組み立て、それをノードからブロックチェーンネットワークに送信します。トランザクションはブロックチェーンネットワークを構成するすべてのノードに伝搬していきます。このとき、各ノードでは、ブロックへの格納待ちのトランザクションとしてひとまずキューイングします。トランザクションがブロックに格納されるまでには一定の時間がかかるため、更新メソッドは原則的に非同期処理です。
スマートコントラクトの更新メソッドの実行は、当該メソッドの呼び出しトランザクションが新しいブロックに格納されることに相当します。更新メソッドの実行タイミングは、ブロック作成ノードで新たなブロックが作られるとき、および、ブロック作成ノードではない他のノードが新たなブロックを受信し、その正しさを検証するときです。ブロックチェーン的な考え方では、正しさというのは自分で検証することで、決して他人任せにするようなことではありません。つまり、スマートコントラクトはブロックチェーンネットワーク上のすべてのノードで全く同じように実行され、処理に伴う状態更新も同じ結果に到達します。
スマートコントラクトの参照メソッドの呼び出しと実行は、ノード自身が持っている検証済みのスマートコントラクトコードと内部状態を使って即座に結果を返します。
スマートコントラクトが以上のように実行できるのは、ブロックチェーンネットワーク上のすべてのノードがデータを共有しているためです。共有対象にはブロックとトランザクションはもちろん、スマートコントラクトのコードと内部状態も含まれます。これにより、どのノードでもブロックに格納されたトランザクションからスマートコントラクトの実行を再生することができ、実行にともなう内部状態更新の正しさを独自検証することができます。このような仕組みにより、ブロックチェーンの耐改ざん性などの特徴がスマートコントラクトの実行プラットフォームとしても実現されています。
次回は、スマートコントラクトの処理上の制約と、ブロックチェーンを用いたシステム構成の中でノードを運用する意味について解説する予定です。
