ブロックチェーンエンジニアになろう。 (基礎編)

第1ブロック - ブロックチェーンの重要性と基礎技術

なぜブロックチェーンがインターネット以来の革命だと言われているのか

ブロックチェーン技術は、社会そのものの基盤を変革する可能性があるため革命的だと言われています。

誰でも価値が送れる
まず、1つ目の最たるものがお金(価値)です。
お金は、人類が生み出した技術の中でもかなり古いもので、価値を交換するという役目があります。
それは、昔から主に国家が主体になり、発行していました。ですので、国家がある程度、価値をコントロールと担保していたものになります。
日本では、昔から政治が安定していて危険でないような感じはありますが、世界では、政治が安定していない国も多く、お金の価値が政治により大きく変動してしまう可能性や価値がなくなってしまう可能性があります。

ですので、政治に左右されない価値の保存方法が必要とされていました。

インターネット普及以前は居住国以外のお金を使う事や得ることも難しく、その使用も国のルールの元に使えることになっています。
インターネットが発展した今では、国をまたいで物を購入したり遠く離れた個人同士でも価値の交換が出来るようになりました。ただし、それを成立させるためには大きな会社や組織が間に入っています。
例えば、国内送金を行いたいと思うと、そこには銀行手数料と時間が発生します。また、物を買いたいと思った場合は、VISAであったり銀行であったりが中間に入り手数料をとっています。さらに、物を買った場所がデパート形式のものであれば、それを仕切っている組織が中間に入り手数料をとることになります。

逆に、価値を送るために個人が信頼される必要もあります。日本ではあまり例がないかもしれませんが、銀行口座を作ること自体を拒否されて、価値の交換へアクセス出来ない方たちも存在しています。

今までは、この社会的に地位のある組織を信頼し、信頼されて、価値の変換していましたが、ブロックチェーン技術を使うことにより、
仲介人なしに、手数料を限りなく少なく瞬時に誰もが価値の変換ができるようになります。

また、お金の価値が国の信頼に対するもので、Blockchain技術を使ったCryptocurrencyはネットワークを信頼すると言えるかもしれません。


一つの組織/個人を信頼する必要がない
ブロックチェーン技術を使わずに、他人と価値の交換をする場合、多くの場合複数の相手を信頼する必要があります。
例えば、国際送金をする場合は、最初の銀行とそれと経由銀行、また最後に相手側の銀行。すべての手続きがうまく行って成立します。
この業務は、銀行で頻繁に行われていて、もちろん今では当然のように使えますが、今でも銀行手数料と最低2日くらいの時間がかかります。

また、個人同士で取引をする場合は、お互いを信頼する必要があります。

ですが、ブロックチェーンを使うと、第三者や相手を信頼せずに安全に取引をすることが出来ます。
それにより、取引の時間や手数料が大幅に安くなります

非中央化/非集権化がもたらすのは、時間の短縮や手数料の安さだけではありません。
セキュリティや可用性にも大きな利点があります。

まず、セキュリティの面では、全ネットワークのノードが監視しており、一つのノードが不正を出来ないようになっています。
また、データが改ざんされたとしても、各ノードが同じ情報を持っているので、すぐに検知されます。
可用性においては、publicなブロックチェーンのネットワークは通常少なくとも20以上のノードが参加しています。その20以上のノードは、全く同じ情報を持っているので、例え半分が落ちたとしてもネットワークは動き続きます


不変性について
価値の交換の基盤として使われるには情報が書き換えられないということが重要になります。
ここで、注目したいのは、国の法律で規制しても、ネットワークが同意しない限り誰も変更が出来ないということです。
ですので、たとえサーバーがハッキングされてデータが書き換えられたとしても問題にはなりません。

これは、価値の交換だけでなく、存在の証明にも有用です。
例えば、月の所有権を全てブロックチェーンで管理したとすると、いつ誰が所有者であったかの証明が出来ます。
さらに、所有者がどのように移り変わっていったかも正確に知ることが出来ます。


情報化社会のさらに先へ
インターネットのサービスが広がり、いろいろなサービスが生まれました。
ソフトウェアの技術が向上し、多くのものが自動化されてきました。
その中で、大きな流れとして会社がサービスを提供する(B2C)の形態から個人同士をつなぎ合わせる(C2C)の事業が増えてきています。
これからもその流れが大きくなっていって、個人が中心になっていく流れになってきています。

例えば、AirBnBやUber, メリカリなどがそれにあたると思います。ただ、これらのサービスは仲介をする代わりに大きな仲介料をとっています。
もちろん、現在では、見ず知らずの個人同士が直接取引することは、詐欺やさまざまな問題があるため、会社が担保してくれていますが、
もし、この問題がブロックチェーンのサービスで解決されれば、取引時間や双方の手数料は大幅に下がっていくでしょう。
さらに、大きな会社ではなく、小さいプレイヤーでも参入できるようになり、社会全体がシェアを少しづつ持つようになっていきます。


ブロックチェーンの現在の課題

ただ、価値や記録に関わる問題が一気に解決しそうな技術である、ブロックチェーンですがまだ解決していない問題もなくさんあります。
お金のやり取りは、BitcoinとLightning networkが解決しそうですが、様々なユースケースでブロックチェーンを活用しようとしたときに、
いろいろな問題が出てきています。

まず、一番大きい問題は、スケーラビリティです。ブロックチェーンの性質上、全ての記録を保存していないといけないことと新しい情報は
ネットワークで合意をとらなければいけないこと。主に、この2つの点で、従来の中央集権的なサービスと比べて処理できるデータの量を
上げることがかなり難しくなっています。

さらに、ブロックチェーンが今までのサービスのパラダイムシフトであるからこそ、ビジネスとしてどういったことが出来るかがまだ確立されていません。
ブロックチェーンは、思想的に、大きく利益を取る仲介人や大元を排除しようとしていますが、ビジネスとしては、どのように大きく利益を取るか、
ということに注目せざるおえません。
ですので、どのようにビジネスに使っていけるか、どのように社会が変わっていくかというのはこれからの課題になっています。


ブロックチェーンとは、どのような技術なのか

大きな分類としてUTXOベース(主にBitcoin)とAccountベース(主にEthereum)のブロックチェーンがあります。
Liskも、Accountベースの構造を選んでいるので、Accountベースを中心に話を進めていきます。

Accountとは、通常のWebサービスと同じように、ユーザーの情報を全て保持しています。BlockとTransactionは、このAccountの情報を書き換えるための情報がが入っているものとなります。

基本構造
ブロックチェーンの基本構造は、シンプルで、基本的には大きなステートマシン構造になっています。
一つのブロックは、ステートを変化させる単位になっていて、中にはどのようにステートを変更させるかのアクションが含まれています(Transaction).

画像1

State machineなのでフロントエンドの、Reduxの概念といえばわかりやすいかもしれません。AccountがStoreにあたり、Block/TransactionがactionやReducerに当たります。
全ての、変更は、actionを通して行われ、基本的にはそれ以外でのAccountへの変更は出来ません。

上記の、Stateの変更をBlock毎に行いBlockchainが成り立っています。

画像2

また、Transactionというと、銀行の台帳のイメージになりますが、システムとしては、実際はRPCのRequestと同じです。
例えば、送金のTransactionを考えると

{
 type: 送金,
 amount: '100',
 recipientId: '受取人のアドレス',
}

このような情報持つRPCのRequestとなります。
これが、システム内では、

executeTransaction(type, amount, recipientId);

のような形で、(実際には、もう少し複雑でデザインに依存しますが)実行されています。
通常のRPCと異なる点は、このリクエストがすぐに実行されるわけではないということです。

上記でも、書いたように、ブロックチェーンはブロックを最小ユニットとするステートマシンですので、このTransaction(RPC Request)は、ブロックが実行される時に実行されます。

注意しないといけない点は、分散システムであるということです。ですので、このfunctionがどのNodeで実行されても、同じ結果にならないといけません。これを、Deterministic(ディターミニスティック)と言います。


ブロック単位で処理が実行されるのはわかりましたが、次の問題は、誰がブロックを作れるのか。そして、それがどのようにしてネットワークへ流れていくのかということだと思います。

誰が、ブロックを作れるのかは、よく知られているPoW, PoS, DPoSのシステムで決められています。
ただ、Chainのコンセンサス(Forkが起きたときにどのチェーンを選ぶのか)は上記とは別で、PoWの場合多くはLongest Chainルールを使っていますが、
PoW以外のプロジェクトの多くは、BFT(ビザンティンフォールトトレランス)なプロトコルを使っていることが多いです。
実際に、どのように動いているのか、Liskの例をまじえながら、コンセンサスアルゴリズムの記事で詳しく解説をしたいと思います。

そして、その作られたブロックは、P2Pネットワークを通り、各Nodeで処理されていきます。

大まかな流れでは、このようにシステムは動いています。


ブロックチェーンの基礎技術
上記の流れを、セキュアに、合理的にそして、分散的に動かすために、いろいろな技術が使われています。
以下の、分野がブロックチェーンの基礎として使われている技術になります。
この一つ一つが、学ぶべき大きなトピックになっていますので、
Liskだけでなく、EthereumやBitcoin、CosmosやSubstrateの例などもまじえつつ、それぞれを一つづつ有料記事で解説していきたいと思います。

- 暗号
- エンコーディング
- P2P コミュニケーション
- データベース
- コンセンサスアルゴリズム
- Markle trie

ブロックチェーンの応用技術
さらに、上記の技術の上でなりたっている機能や技術もたくさんあります。以下がその一部ですが、
こちらも、少しづつ解説していきたいと思います。

- Fee システムについて
- Smart contract
- Light client
- Interpolability

あとがき

調べてほしいことを募集
もちろん、ブロックチェーンは上記の技術だけではなくプロジェクトによって様々な技術が使われています。
あたらしい技術も日々出てきています。ですので、もし調べて欲しいことや、上記にない知りたいことなど
あれば、TwitterやDMで教えて下さい。


自己紹介
現在、LiskというNode.jsベースのブロックチェーンプロジェクトでリードエンジニアをしています。
今はベルリンに住んでいますが、大学の頃は、アメリカのシアトルとカナダのバンクーバーに住んでいて
ブリティッシュコロンビア大学の医療工学科を卒業しています。
大学の頃に、Web技術を学び始め、のめり込んで、日本のCyberagentという会社で、ゲームを中心に作っていました。
その後に、Liskに入る直前までは、ベルリンで会社を作るチャンスを日本のAPCという会社からからいただき、
レストランの電子メニューを作る事業をベルギーのスタートアップと共同で行っていました。

HTML, CSS、React, ReduxなどのWeb Front技術から、Unityなどを使ったゲーム開発、Node.js, Java, Golangなどを中心とした
モノリシックなサーバー開発やKubernates, Dockerなどを使ったマイクロサービスな基盤の準備、開発など
硬い技術から最新の技術までいろいろ触れる機会がありプロジェクトに恵まれ続けてここまで来ています。


仕事の依頼
仕事の依頼や質問等あればTwitterやDMでお願いします


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