スマートコントラクトの実行の仕組み
スマートコントラクトの実行の仕組みを解説していくにあたり、あるブロックチェーンネットワークがすでに存在するとして、そこにデプロイされているスマートコントラクトを実行するというシナリオを想定します。想定シナリオは3つのステップで進みます。
想定シナリオ
- ステップ1 スマートコントラクトにアクセスするための自分のノードを作る
- ステップ2 スマートコントラクトの更新メソッドを呼び出して実行する
- ステップ3 スマートコントラクトの参照メソッドを呼び出して実行する
ステップ1 スマートコントラクトにアクセスするための自分のノードを作る
スマートコントラクトは、各ノードが持っているブロックチェーンの共有データの中に存在します。スマートコントラクトのコードをデプロイしたり、メソッドにアクセスしたりするには、ノードが必要です。この際、すでにブロックチェーンネットワークに参加している第三者が運用するノードを借りることも考えられます。しかしここでは、自分で新たなノードをブロックチェーンネットワークに参加させて、そのノードを使用するとします(図1)。
ブロックチェーンネットワークに新たなノードを参加させたい場合、最初に行うのは、すでにブロックチェーンネットワークに参加していて、新ノードを受け入れてくれるノードに接続することです。そのような接続先ノードのことをブートストラップノードなどと呼びます。ブロックチェーンネットワーク上の最初のノード以外は、ブートストラップノードを介してブロックチェーンネットワークに参加していきます。ブートストラップノード側では、接続してきた新ノードに対して、例えば、ノードのプログラムのプロトコルバージョンに互換性があるなどをチェックし、問題がなければ新ノードとの接続を開始します(図2)。
許可型(permissioned)ブロックチェーン
ブロックチェーンネットワークには誰が運用するノードでも自由に参加できるのが基本ですが、自由を制限して許可されたノードだけが参加できる機能を持つブロックチェーン製品もあります。このような機能を持つブロックチェーン製品は許可型(permissioned)ブロックチェーンなどと呼ばれ、主に企業向けブロックチェーンとして、セキュリティー面の強化といったニーズに応えるものです。主な製品には、Enterprise Ethereum系のQuorumやHyperledger Besu、Hyperledger Fabric、Cordaなどがあります。機能としての基本的な考え方は、ブートストラップノードに相当するノードが、接続してきたノードを何らかの形で認証して、ブロックチェーンネットワークへの参加許可を行うというものです。
ブロックチェーンはP2Pネットワークで構成されるシステムです。ブートストラップノードは、接続してきた新ノードに対しP2Pネットワークとしてつながっている既知のノードを教えます。新ノードは、これらの教えられたノードと接続を開始することでP2Pネットワークの一員になります。人間関係に例えると、ある組織や仲間に参加するには、その仲間内の誰かを経由するのが一般的ではないかと思いますが、P2Pネットワークも同じです。また、通常、P2Pネットワーク上には多数のノードがあるため、それらすべてと直接接続されているわけではありません。ノード間が直接接続されているのは、ある一定数のノードのセットです。ノードのセットは、ノードごとに多少なりとも異なるはずなので、結果として全ノード間が間接的に接続されることになります。新ノードとの接続を開始する一方で、応答がないノードとは接続を切ります。このようなかたちでブロックチェーンネットワーク内のノード間の関係が動的に保たれます。
ブロックチェーンはP2Pネットワーク上のノードが同じデータを共有するシステムなので、新ノードは最新のブロックチェーンのデータとの同期を開始します。前述の通り、新ノードはP2Pネットワーク上で直接接続しているノードのセットを持っているので、それらのノードからデータを取り寄せます。この際、取り寄せたデータが正しいか、ノード自身で検証を行います。ブロックチェーン的な考え方では、正しさというのは自分で検証することで、決して他人任せにするようなことではありません。これは、ブロックチェーンの耐改ざん性の特徴を表す重要な考え方であり、スマートコントラクトの更新メソッドの実行時においても同じことが行われます。詳細はステップ2で解説します。
ブロックチェーンネットワークの分類
ブロックチェーンネットワークは、それがどのような参加ノードで構成されるかによって便宜的に分類されることがよくあります。分類はパブリック、コンソーシアム、プライベートの3種類です。これらを表1に示します。
ネットワークの分類 | ネットワークの特徴 | ノードの参加方法 | ブロックを作るノード | 備考 |
---|---|---|---|---|
パブリックネットワーク | 管理者なし。公開範囲は制限なしで広く一般が対象 | ネットワークへの参加離脱は自由 | コンセンサスの条件を満たす任意のノード | BTC(Bitcoin)やETH(Ethereum)などの暗号資産取引が行われているネットワークなどが該当。コンセンサスアルゴリズムは、主にPoWやPoSが用いられる。 |
コンソーシアムネットワーク | 複数の企業などから構成される共同体(コンソーシアム)が管理。公開範囲はコンソーシアム内に制限 | ネットワークへの参加離脱はコンソーシアムの取り決め次第 | コンソーシアム内で選抜されたメンバーが管理するノード | コンセンサスアルゴリズムは、主にPoAの系統(Clique、Raft、IBFT、QBFTなど)が用いられる。 |
プライベートネットワーク | 単独の企業などが管理。公開範囲は企業内に制限 | ネットワークへの参加離脱は企業内の取り決め次第 | 企業内で管理するノード | コンセンサスアルゴリズムは、主に、PoAの系統が用いられる。 |
ここまで、冒頭のシナリオのステップ1としてブロックチェーンネットワークにアクセスするための自分のノードをセットアップしました。これでスマートコントラクトのメソッドを呼び出す準備ができたので、次にステップ2のスマートコントラクトの更新メソッド呼び出しに進みます。