Web3.0によく出てくる用語をまとめる

:::note info
この記事は「[LITALICO Advent Calendar 2022](https://qiita.com/advent-calendar/2022/litalico)」のカレンダー3の8日目の記事です。
:::

# はじめに
近頃よく聞くけど実態はよくわからない `Web3.0` について、まずは飛び交う不可解な用語の理解からWeb3.0に馴染みを持つきっかけを掴むための記事です。

## 用語
- Web3.0
- IPFS
    - IPFS Desktop（　[Github](https://github.com/ipfs/ipfs-desktop)からダウンロード）
    - IPFS CLI
    - IPFS Companion
- Web3.0 ブラウザ
    - Brave ブラウザ
- NFT
    - NFTドメイン
    - Minting
- Crypt Wallet
    - Hardware wallets
    - Software wallets
    - non-custodial wallets
    - custodial wallets
- DAO
    - Aragon

# Web3.0とは
2018年ごろから始まった新しいWebサービスの実装技術で、主にブロックチェーンやIPFSなどの分散型プロトコルによって実現が可能となった。
データは単一的な保存先ではなくP2Pネットワーク上に保持されるため単一障害点を持たない。
Web 3.0上のデジタルアイデンティティは現実の世界の本人証明を必要とせず買い物などができる。


## Web3.0の特徴
- 単一障害点を持たない
- 匿名性が高い
- デジタルコンテンツに対する所有が可能になった

## Web3.0を支える技術
- ブロックチェーン
- IPFS
- NFTやNFTドメイン
- Crypt Wallet


# IPFSとは
IPFSとは、InterPlanetary File System の略で、直訳すると惑星間ファイルシステムとなる。
IPFSはオープンソースで管理されたハイパーメディアのプロトコルで、全てのマシンを同じネットワークに接続し、参加者のマシンに分散的にP2Pでファイルを保持する設計のファイルシステムで、セキュリティ、耐障害性が高い。

## 特徴
- P2Pのファイルシステム
- ファイルは自分のPCから配信しても他のネットワークピアにコピーされて分散される
- なので自分がネットワークから落ちてもファイルはネットワーク上に存在しつづける
- 静的コンテンツがおけるので `React` の様なSPAをホスティングする事が可能（無料で）
- ファイルはパスと名前ではなくハッシュ（CID）で管理される（取得元を問わない）
- 同じバイナリをアップすると同じハッシュになる
- 逆にいうと、同じファイル名のファイルを更新する（バイナリが変わる）とハッシュが変わる

## CID
Content Identifierと呼ばれるIPFSプロトコルにおけるハッシュ値

## IPNS
InterPlanetary Name Systemの略
httpやhttpsの代わりに、 `ipns://{nft domain}/{CID}` の形で分散ネットワークにあるファイルにアクセスするための仕組み。
ただし、一般的なブラウザはこれをサポートしていないため利用できない。
利用するためには、拡張機能を入れるか、専用の Web3.0 ブラウザーを使う必要がある。

IPFSでは、コンテンツを書き換えるたびにCIDが変わってしまうので、その都度ファイルを見失ってしまいそうになる。
そこで、IPNSを使えば、CIDとPeerIdを紐づけて管理してくれるので名前解決できるようになる。

## IPFS Desktop
自分のPCをIPFSのネットワークに参加させるためのデスクトップGUIアプリ。

![Monosnap IPFS Desktop | IPFS Docs 2022-11-30 22-28-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1576/38d67a49-abbe-bac0-e5d2-18cfa4c412f8.png)

画面からネットワークの接続情報や自分がホスティング中のファイル郡の管理ができる。

## IPFS CLI
自分のPCをIPFSのネットワークに参加させるためのコマンドラインツール

```
% npm i ipfs-cli
```
ですぐインストールして使える

## IPFS Companion
自分のブラウザをIPFSネットワークに参加させるためのブラウザ拡張機能

### リンク
- [IPFS公式サイト](https://ipfs.io/)
- [IPFSプロトコルのGithubリポジトリ](https://github.com/ipfs/ipfs)
- [IPFSミラーリングサイト by IPFS](https://gateway.ipfs.io/ipfs/QmUwysxnfccA1mArjkzTxPRhMnJuLvA6CqgzAPJt9cwMsc/)

### ティップス
IPFSではファイルの概念が大きく変わっており、どちらかというとコンテンツその物を保存するという考え方に基づいている。例えば、「ホゲ」というテキストを保存したい場合、従来のファイルシステムであれば、ホゲというテキストコンテンツを持ったファイルをどこかの保管場所に保持するという考え方だが、IPFSでは、「ホゲ」という文字列そのものへのハッシュが作成され、文字列そのものへのハッシュにアクセスする形になる。
従って、同一コンテンツの別名ファイルを作って保存しても結果は同じハッシュになり同じ保存場所になるイメージ


# Web3.0 ブラウザとは
IPNSなどの新世代プロトコルに対応したブラウザ。現在ではGoogle Chromeにて拡張機能を入れる事でWeb3.0化する事ができる他、初めからWeb3.0ブラウザとしてつくられている `Brave Browser` などが代表例として存在する。

## Brave Browser
- [Brave Browser](https://brave.com/)

Chromiumベースのブラウザ。
Web3.0にデフォルト対応しており、IPFNでNFTドメインのWebサイトに直接アクセス描画する事ができる。
また、デフォルトでウォレット機能や不正広告のブロック機能などを搭載している。
一般的に Chromeよりも高速である事がうたわれている。


# NFTとは
NFTとは、Non-Fungible Token の頭文字をとったもので、仮想通貨などをつかって代替え不可能なトークンのことで、デジタル資産の所有を明確にすることができます。

## NFTドメインとは
NFTドメインとはデジタル世界において個人を主張する為のアイデンティティの事で、以下のようにインターネットにおけるドメインと同じような任意の文字列で構成される。
NFTドメインはNFTを人間が理解しやすい形で表現するための文字列のことで、インターネットのドメインがIPアドレスを指し示すようにNFTドメインはブロックチェーンのトークンを指し示す。

Web3.0ではこれを使ってWebサイトをホスティングする事も可能で、`IPFS` ネットワークにSPAファイルを配置して `NFTドメイン` で公開して `Braveブラウザ` でいつでもどこからでも無料で匿名にウェブサービスを配信する事ができる。

その他詳しくは[こちら](https://qiita.com/euonymus/items/b41fefbe4fcb5f8d479c)
[Unstoppable Domains](https://unstoppabledomains.com/)

## Mintingとは
日本語ではたぶん、「ミントする」というっぽい。
「ミントする」とは、購入したNFTドメインを Polygonブロックチェーンの公開台帳に対して、`ドメインのオーナーがあなたである！` と書き込む事である。
ご存じの通りブロックチェーン上に一度書き込んだ情報は２度と削除できないためこれによりNFTドメインの所有者があなたである事を照明できる。

より具体的には `クリプト・ウォレットのアドレス` を書き込む事になる。そしてそのウォレットの所有者が即ちドメインのオーナーであると言える。
つまりウォレットがあなた自信であるという考え方に基づいているので、Web3.0の世界ではほいほいウォレットを移り変わる事はできない。

# Crypt Walletとは
クリプト・ウォレット = 暗号資産ウォレット = ブロックチェーン・ウォレット
暗号資産ウォレットとは、暗号資産の保管に使うウォレットアドレスと、暗号資産の送受信に利用するキーペアを保管するソフトウェアの事で、暗号資産の送受信、暗号化、複合化、暗号資産の保管をする機能を持つ。銀行口座のような役割を果たす。

暗号資産ウォレットアドレスには秘密鍵があればアクセスする事ができる。また、アカウントへのアクセスを失った場合に１２語のシークレット・リカバリフレーズで復旧する事ができる。

## ウォレットの種類

ウォレットには種類も形態も所在も多種多様にあり始めてこの業界に来る人にとっては具体的なイメージが湧きづらい。
ウォレットの種類についてまとめてみる

![Monosnap Web3.0について 調べる - Google スライド 2022-11-30 23-05-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1576/496a013d-cd27-9fc9-5f1d-5c4df4f0f2a9.png)

#### Hardware wallets
物理的なデバイスにウォレットのソフトがインストールされたウォレット。USBでPCと繋いでいる時だけインターネットの世界と繋がるので安全

#### Software wallets
何らかのソフトウェアの形で存在するウォレット。
種類が多種多様にありすぎるので以下にさらに分類する。

#### custodial wallets
Software wallets の中で、Web上のプロバイダによってホスティングされているウォレット。
ウォレットの中ではこれが一番手軽だが、一番あぶない
ポイントとしては、
- 常にインターネットにつながっている
- 間借りしているだけで実態を所有していない
- プロバイダがクローズしたら資産は消える
- ネットで簡単に作成でき、管理も不要で楽ちん

#### non-custodial wallets
Software wallets の中で、自分自身が所有するウォレット。例として自分のPCにインストールされたりする。

さらに細分化する

#### Browser-based wallets
non-custodial wallets の中で、ブラウザ自身がウォレットになる。
これの良さは、基本的に自分所有となり、自身がインターネットと繋がなければ接続は切れる。
また、なんだかんだ言ってWeb3.0だろうとなんだろうとインターネット上でのやりとりでブラウザから行う事がほとんどなので、ブラウジング中にシームレスにウォレットを使う事ができる。

先にのべた `Brave Browser` がこのタイプのウォレットを持っている。
その他にも、拡張機能タイプとして、 `Metamask` などが有名

#### Desktop wallets
non-custodial wallets の中で、デスクトップアプリとしてインストールするもの。

#### Mobile wallets
non-custodial wallets の中で、モバイルアプリとしてインストールするもの。


# DAO とは
Decentralized Autonomous Organizationsの略
同じ目的を持った集団が参加して、参加したメンバーが目的を遂行するための共同基盤としてDAOを利用する。
メンバーは自己資金をDAOに投入し、集まった資金を何に使うべきかをフェアな投票システムによって決める。
投票システムは改ざんが不可能で、「偉い人」も存在しない。全員がトークンのシェアによって平等に投票権を持つ。
最初に投入した資金は、ブロックチェーンのトークンの形で決議に基づいた場合のみ出金が可能となる。
運営のルールもコード化されており、コードの書き換えにも投票システムを経る必要がある。

スマートコントラクトの集合を組織と見立てた仮想的なエンティティ（会社みたいなもの）。
67%以上のメンバー、またはシェアホルダーがファンドを使ったり、コードを書き換える（ルールを変える）権利を持つ。

### コードのイメージ

**2/3のメンバーが参加した時に自分自身を修正するコード**

[0,i,k,v]: ストレージインデックス `k` のvalueを `v` に変更する提案 `i` の登録
[0,i] 提案 `i` に対する賛成の登録
[2, i] 提案 `i` を充分な投票が行われた後、確定する

## Aragonとは
DAOをWeb上でGUIに沿って簡単に作る事ができるWebサービス
- [Aragon](https://aragon.org/)


# まとめ
Web3.0という言葉はまだ確定的な定義がありません。
大まかにこの辺の話がごちゃごちゃと登場してきて、興味の文脈によって全然違う話が出てきたりするので、初見の人は混乱すると思います。
例えば、`NFT`という言葉をとってみても、これで自分の絵とか音楽売るぜーとかしか頭にない場合はNFTドメインの意味もわからなかったりします。
DAOも全然文脈が違う概念だし、IPFSで分散するのはブロックチェーンとは直接的には関係ありません。この辺の技術が統合的に同じ「分散・匿名・所有」という世界観を実現するために統合されていく世界が話し合われている最中なのかと思っています。


:::note info
明日は「[LITALICO Advent Calendar 2022](https://qiita.com/advent-calendar/2022/litalico)」の9日目の記事、@yamaguchi6 さんと @nonsaito さんです。
:::