web3 がなぜ注目されているのかお話しします

## はじめに

この記事はサイバーエージェント24卒内定者 [Advent Calendar](https://qiita.com/advent-calendar/2023/ca24engineer) の16日目の記事です。
こんにちは、はじめまして。岐阜大学工学部4年の石上敬祐と申します。web3 がなぜ注目されているのか、エンジニアの観点から解説します。☺️☺️☺️☺️☺️

## 結論

web3 には下の3つの特徴を持った仕組みがあります。

- **中央集権的な機関への依存なしに**
- **改ざんされている可能性がとても低いデータを**
- **誰でも閲覧できる**

これがこんなにも web3 が注目されている理由です。

この web3 の仕組みにより、「誰が、いつ、何を」を正確に記録する必要がある「契約」関連の分野での応用が期待されています。

web3 の応用分野として下の3つの分野の名前をよく聞くのは、この web3 の「中央集権的な機関への依存なしに、改ざんされている可能性がとても低いデータを、誰でも閲覧できる仕組み」のためです。

- 決済
- デジタルデータの所有権管理（NFT）
- 契約書

### この web3 の特徴の何が嬉しいのか

銀行をはじめとする中央集権的な機関への依存がなくなることにより、契約をユーザーが直接することができ、取引にかかる費用をより低コストに抑えることができます。

誰もがデータを閲覧できることにより、データの真正性（それが本物であるということ）を誰もが検証できるようになります。

例えば、サーバ上のファイル　`X` をダウンロードしたところ、ファイルの中身は `aaa` でした。しかし、翌日ファイル `X` を再びダウンロードしたところ、ファイルの中身が `bbb` に変更されていました。

**誰もがデータを閲覧できることにより、このようなデータ変更が悪意を持った攻撃者によって行われたのか、そうでないかの検証を誰もが各々のコンピュータから行うことができます。**

↓ Ethereum の共同創設者であるヴィタリックさんです。

![Vitalik_Buterin_TechCrunch_London_2015.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883874/8320b21e-89ec-75f7-555e-fcc3c48ccebb.jpeg)

画像引用: https://en.wikipedia.org/wiki/File:Vitalik_Buterin_TechCrunch_London_2015.jpg

## かんたんようごかいせつ 😀

結論を読んでみて、
**「中央集権的な機関の存在なしに、改ざんされている可能性がとても低いデータを、誰でも閲覧できる仕組み」とは？？**
となっていると思います。

これから解説に入っていくのですが、その前に日本一わかりやすい web3 用語の解説を書いておきます。

### ブロックチェーン

改ざんされてデータが記録される可能性をとても低くしている分散データベース。

より詳しい言い方をすると、「ブロックチェーンにデータが書き込まれる際に、そのデータが改ざんされていないかを検証する仕組み、つまりデータの真正性を証明できる仕組みが整っている分散データベース」になります。

### ビットコイン

時価総額が最も高い仮想通貨です。

### イーサリアム

次世代のスマートコントラクトと分散型アプリケーションプラットフォームです。

ビットコインとは違い、**イーサリアムは単なる仮想通貨ではない**のです。

## 解説

**「中央集権的な機関の存在なしに、改ざんされている可能性がとても低いデータを、誰でも閲覧できる仕組み」とは？？**
という疑問を解決していきます。

### そもそも中央集権的な機関とは？？

web3 の文脈では、たくさんのデータを持ち、インターネットの中で大きな力を持っている　google や amazon、meta などの企業のことを「中央集権的な機関」ということが多いです。

「google でログイン」や「facebook でログイン」などのソーシャルログインはこの中央集権的なデータ構造の際たる例だと私は思っています。ユーザデータが google や facebook などの特定の中央機関に集中してしまっているために、アプリケーションの開発者、使用者の両者に対して google や facebook は大きな影響力を持っているのです。

### 中央集権的な機関をなくした仕組み

下の2つが中央集権的な機関をなくすことに大きく貢献した仕組みです。

- **ブロックチェーン**

上でも少し解説したように、ブロックチェーンは分散データベースであり、ネットワークの参加者全体にデータが公開されます。データが公開されていることにより、ネットワークの参加者が全体がそのデータが本当に正しいのかの検証をすることができるようになりました。

- **スマートコントラクト**

Ethereum ネットワークに参加しているノード全体を巨大な1つのコンピュータとする Ethereum Virtual Machine（略して EVM）という概念があるのですが、この EVM 上で様々なメソッドを実行する仕組みがスマートコントラクトです。

エンジニア的により分かりやすく説明すると、EVM は AWS Lambda のような「メソッドの実行環境」で、スマートコントラクトは AWS Lambda 上に作られる「任意のトリガーを元に任意の処理を実行する仕組み」のことです。

そしてこのスマートコントラクトを使ったアプリケーションたちを Dapps（Decentralized Applications）といいます。

ネットワークの参加者全体でデータの検証を行える仕組みがあるブロックチェーンと、任意のコードを実行できるスマートコントラクトにより、特定の中央集権的な機関への依存を減らしてデータを管理することが可能になったのです。

:::note info

2009年にサトシ・ナカモトさんが開発したビットコインは、「後ろ盾や本質的な価値を持たず、中央集権的な発行機関や管理者が不要なデジタル資産」として多くの注目を集めました。
このときヴィタリックさんは「ビットコインにおいて間違いなくより重要になる部分は、中央集権的な機関を不要とする仕組みそのものにある」ということに気づき、Ethereum の開発を始めたのです。
より詳しく知りたい人は下のページを読んでみてください 😀

:::

https://ethereum.org/ja/whitepaper/

### データの改ざん可能性をとても低くする仕組み

ブロックチェーンはすでに記録されている、そしてこれから記録するデータの真正性を誰もが検証することができます。
各々が検証したデータを基に、新たなブロックがチェーンに追加されます。ここで重要な役割を果たすのがコンセンサスアルゴリズムです。このアルゴリズムにより、ネットワーク参加者間でデータの一貫性と正確性が確保され、データの改ざん可能性をとても低くすることができているのです。

<details><summary>コンセンサスアルゴリズムが必要な理由</summary>

ブロックチェーンは、一箇所の管理者や中央機関が存在しないため、記録されるデータをネットワークの参加者（ノード）が検証すしなければなりません。この時、データに一貫性を持たせるために、各々のノードが独立して検証したデータを基に、ネットワーク全体で合意を形成する必要があるのです。
この合意形成をより効率よく、信頼性の高いものにするためにコンセンサスアルゴリズムが必要なのです。
</details>
 
#### コンセンサスアルゴリズム

コンセンサスアルゴリズムは有名なもので以下の3つがあります。

- **Proof of Stake（PoS）**
イーサリアムで使われています。
PoS の説明を簡単にします。イーサリアムネットワーク（正確にはコントラクト）に 32eth をデポジットするとバリデータに選ばれる可能性があります。バリデータに選出された際に新しいブロックを生成することで報酬を得ることができます。このとき、（悪意のあるなしに関係なく）不正なブロックを生成するとペナルティとしてデポジットした eth の一部が失われるという仕組みになっています。

- **Proof of Work（PoW）**
ビットコインで使われています。イーサリアムでも2022年の9月までは使われていました。
PoW の説明は省きます。最近はあまり使用されなくなっているコンセンサスアルゴリズムだからです。

- **Proof of History（PoH）**
Solana というブロックチェーンで使われています。とても早いです。
PoH に興味がある人は下の Solana のホワイトペーパーを読んでみてください！

https://github.com/solana-labs/whitepaper/blob/master/solana-whitepaper-ja.pdf

### データを誰でも閲覧できるようにする仕組み

従来のシステムではデータを AWS や GCP 等のクラウド上のプライベートなデータレジストリにデータを保存します。
しかし、イーサリアムやビットコインなどはブロックチェーンがパブリック（誰からもアクセス可能な状態）になっているため、ブロックチェーンに記録されたデータは誰でも閲覧することができます。

例えば、下のサイトから `0x00000000219ab540356cBB839Cbe05303d7705Fa` というアドレスへの送金履歴を確認することができます。

https://etherscan.io/address/0x00000000219ab540356cbb839cbe05303d7705fa

<details><summary>プライベートブロックチェーンについて</summary>

ブロックチェーンにはプライベートなものも存在します。プライベートチェーンは下の2つの需要が生じた際の新たな選択肢として期待されています。

- いつ、誰が、どのようにデータを変更したのかを正確に知りたい
- チェーンに記録するデータを公開したくない
</details>

## 少し難しいはなし 🤨

このセクションでは少し難易度が高いですが、技術的に興味深い議論をしていきます。
難しいなと感じた方は飛ばしてしまって大丈夫です！

### ブロックチェーンと Git の違い

Git では親 commit ハッシュを 現 commit オブジェクトの一部に含めます。これにより、前の commit が改ざんされていないかを検証することができます。

画像引用（MIXI 新卒研修資料）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883874/d0d5bfa1-ed58-81a7-c87b-f277b77f0b03.png)

https://mixi-developers.mixi.co.jp/23-technical-training-20a6f610140c

ブロックチェーンでは親ブロックのハッシュを現ブロックのオブジェクトに含めるため、データ構造自体は Git と変わりません。

**しかし、ブロックチェーンでは新しいブロックが追加されるたびに（Git で例えると commit が生成されるたびに）、ネットワーク全体で決められたコンセンサスアルゴリズムを通してデータの真正性の検証が行われます。**

:::note info

まとめると、
コンセンサスアルゴリズムを通してネットワーク全体でデータの真正性の検証が行われるのがブロックチェーン、そうではないのが Git です。
データ構造自体は両者でとても似ています。

:::

## 最後に

最近、web3 という言葉が独り歩きしているのですが、結局のところ、web3 の根幹で使われているブロックチェーンは分散データベースの1種にすぎないということだけ知ってもらえたら嬉しいです。

## 参考資料

時間があったら読んでみてください。
おもしろいです。

https://ethereum.org/ja/developers/docs/web2-vs-web3/

https://ethereum.org/ja/developers/docs/evm/

https://ethereum.org/ja/developers/docs/gas/

https://ethereum.org/ja/developers/docs/blocks/

https://engineering.mercari.com/blog/entry/2016-02-08-173000/

https://recruit.gmo.jp/engineer/jisedai/blog/bitcoin-script/