CodeZine(コードジン)

特集ページ一覧

従来型システムとの比較で学ぶ「スマートコントラクト」の仕組み~ブロックチェーン/スマートコントラクトの技術要素と特徴

開発者のためのブロックチェーン活用ガイド 第2回

  • LINEで送る
  • このエントリーをはてなブックマークに追加

 本連載は、ブロックチェーンにこれから取り組まれる方や、ブロックチェーンに詳しい仲間を増やしたいが説明に苦慮されている方などを想定し、ブロックチェーンを使いこなすための勘所を紹介します。連載の第2回は、スマートコントラクトの実行プラットフォームとしてのブロックチェーンの特徴を解説します。実際にはブロックチェーンの機能はプロダクト間(例えば、EthereumやHyperledger Fabricなど)で差異があり、各プロダクトが固有の特徴を持ちますが、ブロックチェーンという技術カテゴリにおいて一般的に当てはまる内容に焦点を当てます。まとめとしてスマートコントラクトを従来型システムと比較したときの差別化ポイントに言及します。

目次

開発者にとってのスマートコントラクト

 開発者の方にとってスマートコントラクトがどんなものか、この後で解説するブロックチェーンの技術要素やそれを使ったデータ構造の仕組みなどから考えるよりも、まずは、すでにご存じと思われるオブジェクト指向言語のクラスやインスタンスなどとの類比で考える方がよいかもしれません。とくに、スマートコントラクトの開発を中心に置くなら後者が役立つかもしれず、ブロックチェーンの解説に入る前のここでそのイメージを示します。

 スマートコントラクトは、何らかのプログラミング言語でプログラムコード書いて実装するもので、これはオブジェクト指向言語でいうクラスに相当します。クラスと同様に、スマートコントラクトはAPIと内部状態(データやプロパティー)の格納領域を持つことができます。APIには、データを参照するためのメソッド(いわゆるgetメソッド)と、内部状態を変更するための更新メソッド(いわゆるsetメソッド)が定義できます(なお、スマートコントラクトには処理上の制約があり、基本的にはAPIの引数から計算した値で内部状態を変更する程度のことしかできないと考えてください。この理由も今後の連載で解説します)。

 スマートコントラクトのコードはコンパイルして実行イメージに変換する必要があります。この実行イメージをブロックチェーンに書き込む(デプロイする)と、スマートコントラクトを呼び出して実行できるようになります。これは、クラスのインスタンス化に相当します。なお、スマートコントラクトもコンストラクタを持つことができ、デプロイ時に呼び出されることで内部状態の格納領域がブロックチェーン上に生成されます。補足として、スマートコントラクトはデプロイのたびに別々に認識される実体が作られることに注意してください。これはクラスのインスタンスが別々に認識される実体であることと同じです。

 スマートコントラクトを実行するには、デプロイで実体化された先に対してAPI呼び出しを行います。参照系のAPI呼び出しは即時に結果を得ることができますが、更新系APIの呼び出しは非同期的に処理されます(この理由を知るにはブロックチェーンの仕組みを知らなければならず、以降で解説します)。

 ただし、スマートコントラクトをシステム機能の粒度的な観点で見た場合、単なるクラスというよりはマイクロサービスに近しい位置づけです。スマートコントラクトは、マイクロサービスのように自身のインターフェースを介して完全に独立したひとつのサービス機能を提供するものです。例えばNFTは、スマートコントラクトによるデジタル的な唯一無二の価値表現とその交換の機能を提供するひとつの独立したサービスです。

 それでは、ブロックチェーンの技術要素を確認しながら、スマートコントラクトの実行プラットフォームであるブロックチェーンの特徴を整理していきます。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:開発者のためのブロックチェーン活用ガイド

著者プロフィール

  • 木下 学(NTTデータ先端技術株式会社)(キノシタ マナブ)

     ソフトウェアソリューション事業本部 デジタルソリューション事業部 データエンジニアリング担当  2014年入社。2017年からブロックチェーンを担当。  現在、NTTデータグループにおける全世界横断のブロックチェーンチームの一員として、ブロックチェーンを用いたシステム開発や技術検証を中心に、教...

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5