見出し画像

[冒頭だけ無料公開] Pythonによるブロックチェーン開発教本 | ブロックチェーンをゼロからプログラミング

日本語版

英語版

Kindle販売中の著書、冒頭部分を公開しています。

はじめに

本書は、初学者に向けたブロックチェーンの開発教本です。昨今、Web3.0やDAO、メタバース、NFT、仮想通貨などの次世代技術が注目されています。ブロックチェーンはこれらを支える重要な技術のひとつです。そのため、ブロックチェーンの知識や開発経験の需要は年々高まっています。多くの人がブロックチェーン技術の学習の必要性を感じていることでしょう。

しかし現状、ブロックチェーンの仕組みや開発ノウハウを、初学者向けに解説しているコンテンツは多くありません。ブロックチェーンを学びたい気持ちがあっても、思うように学習を進められない状況だと感じています。

そこで、初学者向けのブロックチェーン学習コンテンツとして本教材を執筆しました。ブロックチェーンの概念や知識の解説のみならず、実際にPythonを用いてブロックチェーンのプログラミングコードを作成することで、仕組みの理解と開発スキルの双方を習得できる教材です。

本教材のメリット

本教材のメリットを紹介します。「初学者でも理解しやすい」「開発スキルと知識の双方が得られる」「汎用的なIT知識も得られる」「開発したブロックチェーンをWeb上に公開できる」の4点です。一般的なブロックチェーンの解説コンテンツやプログラミング教材などと比較して優れているポイントです。

①初学者でも理解しやすい

メリットの1つ目は、初学者でも理解しやすい点です。ブロックチェーンは難解なテーマです。理解しやすさを目指して、本教材はブロックチェーンの技術要素の解説順序にこだわりました。

ブロックチェーンを理解するためには、大きく分けて3つの概念を学ぶ必要があります。「多数のブロックが連結した特徴的な構造」「複数のブロックチェーンが互いに同期するネットワーク」「データ改ざんを防ぐセキュリティー」です。

ただし、ブロックチェーン単体の特徴的な構造を知らずに、複数のブロックチェーンのネットワーク構成を作ることはできません。どのようなデータのやり取りによって複数のブロックチェーンが同期しているか知らずに、データ改ざんを防ぐセキュリティーを学習できません。学ぶ順序を間違えると、理解するのが非常に困難です。

一般的なブロックチェーン関連書籍では、ブロックチェーンのセキュリティー技術である"Proof of Work"や"ECDSAによる署名と認証"などを中心に解説する傾向にあります。これらは非常に重要な要素ですが、多くの初学者にとって前提知識がなく、理解は困難でしょう。

本教材では、初学者が理解しやすいように、基本知識から順を追って学習を進めます。まずシンプルなブロックチェーン単体の開発を行います。その後、開発したブロックチェーンを複製し、互いに同期しあうネットワーク構成を構築します。最後に、セキュリティーを高める仕組みを追加開発します。

②開発スキルと知識の双方が得られる

2つ目のメリットは、ブロックチェーンの理解が深まるとともに、開発スキルも習得できる点です。ブロックチェーンの理解と開発ノウハウは、補完関係にあります。ブロックチェーンの概念を理解していなければプログラム開発できず、またプログラミングコードの構造を知ってこそ、ブロックチェーンの理解が深まります。本教材は、ブロックチェーンのプログラミング開発を行いながら、同時に概念や仕組みの解説も行う構成にしています。サンプルとして、プログラミングコードも提供しています。

③汎用的なIT知識も得られる

3つ目のメリットは、ブロックチェーン以外にも活用される汎用的なIT知識も得られる点です。本教材では、PythonのWebフレームワークのひとつであるFastAPIを利用して、ブロックチェーンサーバを構築します。また、ブロックチェーンが同期する仕組みに、HTTPリクエストやJSON形式でのデータ通信を活用しています。セキュリティー向上施策として、公開鍵暗号方式やhash化技術を用いています。

これらの技術は、ブロックチェーン以外の多様なシステムでも利用されています。ブロックチェーンの学習によって、付随的に得られる大きなメリットです。

④開発したブロックチェーンをWeb上に公開できる

4つ目のメリットは、本教材を通じて開発したブロックチェーンをWeb上に公開できることです。多くのプログラミング学習コンテンツは、自分自身のPC内部でアプリケーションを作って完成としています。Web公開方法まで解説しているケースは多くありません。

Web上へのシステム公開は、技術的な難易度が高いことや、有料もしくは無料でもクレジットカード情報が必要となる場合も多いことが、その理由として挙げられます。

たしかに自分自身のPC上でシステムが動けば、大部分の技術理解は可能でしょう。しかしWeb上に公開できれば、ユーザー視点での使用感が確認できますし、開発したものを世の中に公開できたという達成感も生まれます。これからプログラマーを目指している人にとっては、就業先へのポートフォリオとしても活用できるでしょう。

近年では簡単に無料でWeb公開できるツールが増えています。本教材ではDetaという無料クラウドサービスを活用し、作成したブロックチェーンをWeb上に公開する手順も解説しています。

本教材をおすすめできる人とおすすめできない人

本教材は、初学者に向けたブロックチェーンの仕組みの解説と、Pythonによるプログラム開発がメインのコンテンツです。執筆した背景や紹介したメリットを踏まえ、本教材をおすすめできる人、おすすめできない人の例を記載します。本教材のご購入の参考にしてください。

おすすめできる人

  • 次世代技術であるブロックチェーンの基礎を学びたい人

  • IT技術が好きで、ブロックチェーンについて概念やイメージにとどまらず、より深く理解したい人

  • Pythonの基礎は習得済だが、次のステップとして学習テーマを探している人

  • プログラマーを目指し、自身のポートフォリオを充実させたい人

おススメできない人

  • 開発に全く興味がない人

  • 手っ取り早くブロックチェーンのイメージだけ理解したい人

  • ブロックチェーンの基礎は習得済で、さらに難解な技術を学びたい人 

本教材の注意点

最後に本教材を購入する上での注意点について記載します。本教材では、Pythonによるプログラム開発を行います。そのため、前提となるプログラム知識が必要です。書籍や学習コンテンツでPythonの基礎を学んでいない場合、内容を理解することは難しいでしょう。

また、初学者向けとはいえ、ブロックチェーンそのものは非常に高難度の技術です。教材を進める中で不明点も多々発生すると思います。質問があればお気軽にお問合せください。

問い合わせ先(教材の質問、訂正依頼)

教材に関する質問や訂正依頼がありましたら、下記TwitterのDMにてお気軽にご連絡ください。 https://twitter.com/moyattodataman

本教材を通じて、ブロックチェーンの理解と開発スキル習得にお役に立てれば幸いです。まずは無料部分からご覧ください。

モヤっとデータサイエンティスト
Twitter; https://twitter.com/moyattodataman

目次

はじめに

0-1 ブロックチェーン開発の流れ
0-2 作成するブロックチェーンアプリケーションの完成イメージ
0-3 事前準備 JSON Viewerの設定
0-4 事前準備 FastAPIのインストールとDetaアカウントの作成

セクション1 シンプルなブロックチェーンAPIサーバ単体の開発
1-1 本セクションの全体像
1-2 ブロックチェーンAPIサーバの骨子の作成
1-3 トランザクションプール参照機能の実装
1-4 チェーン参照機能の実装
1-5 トランザクション登録機能の実装
1-6 ブロック生成機能の実装
1-7 本番環境へのデプロイ

セクション2 ブロックチェーンネットワークの構築
2-1 本セクションの全体像
2-2 トランザクションプールの同期
2-3 チェーンの同期
2-4 本番環境へのデプロイ

セクション3 ブロックチェーンを安全に運用するための仕組みの実装
3-1 本セクションの全体像
3-2 秘密鍵と公開鍵の生成機能の開発
3-3 トランザクションの署名と検証機能の実装
3-4 前ブロックのhash化情報保持させるプロセスの実装
3-5 Proof of Workの実装
3-6 チェーン同期時のチェーン検証機能の実装
3-7 本番環境へのデプロイ

さいごに

0-1 ブロックチェーン開発の流れ

本教材では、Pythonでブロックチェーンの開発を行います。このパートでは、開発の流れについて解説します。本教材は3つのセクションに分かれており、セクションごとの主なトピックを解説します。開発の流れを理解するために必要なブロックチェーンの基礎知識についても記載していますので、参考にしてください。

本パートの内容をしっかりと理解していただくことは求めていません。まずは概要やイメージを掴むだけで問題ありません。以降のプログラミングのパートを進めながら徐々に理解を深めてください。ブロックチェーンは非常に難解なテーマです。一度読んで簡単に理解できるものではありません。少しずつ学習を進めていきましょう。

本パートのゴール

  • 本教材でのブロックチェーン開発の流れを大まかに理解する

  • ブロックチェーンの基礎的な仕組みとキーワードのイメージを掴む

ブロックチェーンとは

ブロックチェーンの概要について、既にご存じの人も多いと思いますが、おさらいのために簡単に解説します。ブロックチェーンとは、一言でいうと、複数の取引情報のデータです。ある程度の取引情報をブロックという単位でまとめ、そのブロックを連結させたチェーンのようなデータ構造を持つため、ブロックチェーンと呼ばれます。

ブロックチェーンは多くの場合、複数の人物や組織のそれぞれが同一のブロックチェーンを保持する形で活用されています。またブロックチェーンはその構造上、データの改ざんに強いという特徴を持ちます。ブロックチェーンを共有していること、及びデータの改ざんに強い特徴によって、中央管理者不在のデータ管理が可能となります。この管理技術を分散型台帳技術と呼びます。

分散型台帳技術は、DAOやNFT、スマートコントラクト、仮想通貨などの情報記録に活用されています。これらの次世代技術が複合的に活用されるメタバース空間にも、ブロックチェーン技術は当然欠かせません。新時代の包括的な概念であるWeb3.0という言葉が誕生し、それとともにブロックチェーン技術は需要が高まっています。

なぜブロックチェーンは改ざんに強いのでしょうか。どのようにしてデータを共有しているのでしょうか。概念図やよくある技術的特徴の解説だけでは腑に落ちない部分も多いでしょう。本教材は、プログラム開発を通じてブロックチェーン技術をより深く理解することを目指します。

セクション1:シンプルなブロックチェーンAPIサーバ単体の開発

ブロックチェーンの基本的な構造を理解するために、セクション1では、シンプルなブロックチェーンAPIサーバ単体を作成します。APIサーバとは外部からアクセスできる便利なサーバを意味します。具体的には、ブロックチェーンのデータを保持し、HTTPリクエストを通じてデータ取得や追加が可能なAPIサーバを作成します。

ブロックチェーンAPIサーバを構築するためには、まずブロックチェーンのデータを構成する4つの要素(トランザクション、ブロック、チェーン、トランザクションプール)について理解する必要があります。

一番小さな構成要素はトランザクションと呼ばれるデータです。トランザクションが複数集まったものをブロック、ブロックが複数連結したものをチェーンと呼びます。トランザクションプールは、一時的にプールされているトランザクションを指します。

トランザクション

ブロックチェーンの一番小さな構成単位であるトランザクションは、1つの取引を記録したデータです。一般的には、取引日時、当事者情報(誰と誰の取引であるか)、取引内容を示す数値や文字情報などが記録されています。またトランザクションの改ざんを防ぐために、Signatureと呼ばれる署名情報も含みます。Signatureはセクション3で詳しい解説と実装を行います。

トランザクションの要素とデータ例

ブロック

トランザクションが複数連結したものをブロックと呼びます。一定の数のトランザクション情報をブロックに保管し、ブロックが連結したチェーンを伸ばしていくことで、多量の取引情報をブロックチェーンに記録します。

ブロックは、トランザクション情報だけでなく、1つ前のブロックの情報をhash化した値も保持しています。これはブロックチェーンの情報の改ざんを防ぐための仕組みのひとつです。ブロックの生成アルゴリズムがProof of Workと呼ばれるアルゴリズムを採用している場合、ブロックはnonceと呼ばれる数値情報も保持します。hash化とnonceについては、セクション3で詳しい解説と実装を行います。

ブロックの要素とデータ例

チェーン

ブロックが複数連結したものを、チェーンと呼びます。ブロックは複数のトランザクション情報を保持しており、そのブロックが連結することで、多量のトランザクション情報を持つチェーンが形成されます。

トランザクションプール

取引が発生すると、トランザクションはまず、トランザクションプールにストックされます。トランザクションはすぐにブロックに取り込まれるわけではありません。ブロック生成の開始までの一定期間、トランザクションプールにストックされ、1つ以上のトランザクションが一度にブロックに保管されます。ビットコインにおいては、新しいブロック生成をマイニングと呼びます。

トランザクションプール構造例

セクション2:ブロックチェーンネットワークの構築

ブロックチェーンは、複数を互いに同期させたネットワークを構成し、運用することが可能です。複数の組織や人物それぞれが単体のブロックチェーンを保持し、他のブロックチェーンと同期させることによって、共同でブロックチェーンの情報を管理し、互いに改ざんを監視できます。この仕組みを分散型台帳システムと呼びます。

例えばビットコインは、ブロックチェーンの仕組みを分散型台帳として利用している代表例です。世界中の誰でもブロックチェーンサーバを構築し、ビットコインの情報を保持できます。この情報は、他の組織や個人が持っているビットコインの情報と同期されています。

セクション2では、セクション1で作成したブロックチェーンAPIサーバを複製し、複数のブロックチェーンが同期する仕組みを実装していきます。同期の仕組みやタイミングは、ブロックチェーンAPIサーバのプログラミングコードでカスタマイズできます。本教材では、以下のような同期の仕組みを実装します。

  •  いずれかのブロックチェーンAPIサーバのトランザクションプールに対してトランザクションが登録されると、そのトランザクションはすべてのブロックチェーンAPIサーバのトランザクションプールに同期される。

  • いずれかのブロックチェーンAPIサーバで新規にブロックが生成されると、そのサーバのチェーンが他のサーバに同期される。

セクション3:ブロックチェーンを安全に運用するための仕組みの実装

セクション1と2で、ブロックチェーンAPIサーバがトランザクション情報を取り込み、保存し、ネットワーク間で同期する仕組みを実現します。しかし、実際にブロックチェーンを運用する場合は、データの改ざんを防ぐためにセキュリティーレベルを向上させる必要があります。

セクション3では、ブロックチェーンを安全に維持する技術である、トランザクションの署名と検証、前ブロックのhash化、Proof of Work、トランザクションやブロックチェーン同期の際の検証などの仕組みを実装します。

本パートで、これらの仕組みがブロックチェーンのデータの改ざんを防ぐイメージを簡潔に解説し、セクション3でプログラムコードに落とし込みます。本パートでは、改ざん防止の仕組みを大まかに理解するにとどめ、後程のセクション3でのプログラムコード作成を通じて、詳細を理解してください。

トランザクションの署名と検証

例えばクレジットカードで100万円の高級時計を購入する際、カード保持者は時計店に対して100万円支払うという取引情報を作成し、その情報に対してサインします。

同様にブロックチェーンにおいても、トランザクション情報の作成者は、作成者だけが保持している秘密鍵を用いてトランザクション情報を暗号化します。暗号化によって得られる情報をsignatureとしてトランザクション情報に保持させます。このプロセスを本教材ではトランザクションの署名と呼びます。

ブロックチェーンAPIサーバは、トランザクションを受け取る前に、トランザクション作成者の公開鍵を用いて、受け取ったトランザクション情報とその中に含まれるsignatureの整合性を確認します。このプロセスを本教材ではトランザクションの検証と呼びます。

整合性がとれない場合、誰かがトランザクション情報を改ざんしたと判断し、ブロックチェーンAPIサーバはトランザクションの受け取りを拒否します。

前ブロックのhash化

全てのブロックはそれぞれ、1つ前のブロックのhash値を保持しています。これは、ブロックが生成される際に、直前のブロックのデータをhash化し、そのhash値を新たなブロックに保持させる仕組みによるものです。

ブロックチェーンAPIサーバは、他のブロックチェーンAPIサーバからチェーン情報を同期する際に、直前のブロックのhash値を保持しているか、全ブロックに対して確認を行います。ひとつでもブロックが改ざんされている場合、hash値の不整合が検知され、不正なチェーンの同期を防止できます。

Proof of Work

前ブロックのhash化の仕組みによるセキュリティー対策があったとしても、改ざんを検知できないケースがあります。それは、特定のブロックの情報を改ざんし、そのブロック以降の全ブロックを作り直してhash値をすべて書き換えた場合です。この改ざんを防止するために、ブロックの生成を意図的に困難にする Proof of Workという仕組みが活用されています。

Proof of Workは、ある制約をクリアしないと得られないnonceと呼ばれる数値情報をブロックに保持させる仕組みです。制約をクリアするには多数の計算処理を行う必要があり、この仕組みによってブロックの生成には多くの時間やコストがかかるようになります。一般的に、「ブロックが持つtransactionとhashとnonceの情報をまとめてhash化し、その値の頭X桁がすべてゼロである」という制約が採用されています。

具体的に解説します。hash化によって得られる値は、数学的根拠から予測が困難です。新しいブロックを生成する際は、nonceを0から順に1ずつ変化させてhash化を繰り返します。hash化された値の頭X桁がすべてゼロとなった時のnonceが、ブロックに保持されるべきnonceです。この制約を満たすnonceを算出するために、膨大なhash化の計算を行う必要があり、ブロック生成に時間がかかります。

hashを改ざんした場合でもnonceを再計算しない限り、「ブロックが持つtransactionとhashとnonceの情報をまとめてhash化し、その値の頭X桁がすべてゼロである」という制約が満たされず、改ざんの検知が可能となります。全ブロックのhashとnonceの両方を書き換えることは、計算負荷の観点から非現実的であり、ブロックチェーンのセキュリティーが担保されます。

ブロックチェーンAPIサーバは、他のブロックチェーンAPIサーバからチェーンを同期する際に、全ブロックのnonceが制約を満たしていることを確認します。nonceの算出は非常に大きな計算コストが発生する一方で、nonceが制約を満たしていることは、ブロック毎に1度hash化計算するだけで検証可能です。この非対称性がブロックチェーンのセキュリティーを支えています。

チェーンの長さの検証

直前のブロックのhash値やProof of Workの仕組みだけでは、ブロックチェーンの改ざんを防ぐセキュリティーレベルとして不十分です。ゼロから新規にブロック数の少ないブロックチェーンを作成し、hash情報もnonce情報も正しい偽物の短いチェーンに同期されてしまうケースを防止できません。

この改ざんを防ぐために、ブロックチェーンAPIサーバは、他のブロックチェーンAPIサーバからチェーンを同期する際に、チェーンのブロック数を確認します。受け取ったチェーンのブロック数が、自身の保持するチェーンのブロック数より長い場合のみ同期を実施し、そうでない場合は同期を拒否するという仕組みです。

チェーンは高いセキュリティーレベルを担保しながら徐々に伸びていきます。最も長いチェーンが、最も信頼性の高いチェーンであるという考えに基づいた検証を行います。

まとめ

本パートでは、ブロックチェーンの大まかな開発の流れと、その理解の前提となるブロックチェーンの主なキーワードやセキュリティー知識について解説しました。セクション1からは、実際にブロックチェーンの開発を開始します。プログラムコード作成を通じて、ブロックチェーンの理解を深めていきましょう。

この先はKindle版にてお楽しみください。

■日本語版

■英語版

この記事が気に入ったらサポートをしてみませんか?