web3.0アプリ開発(#1 概要学習編)

## はじめに
**自己紹介**
業務ではVue + Rails, flask, djangoでwebアプリケーションを開発しています。
個人開発で、Flutter + flask, firebaseでスマホアプリケーションを作成しています。

参考↓

https://qiita.com/ninoko1995/items/d984c96ff2260374a985

**背景**
最近よく耳にするweb3に関して、概要はよく聞くけど実際にどうやってサービス作ってるの？的なことは探さないとなかなか情報がとってこれない。
そこで、実際に手を動かして仕組みを勉強してみよう、ということで、
- まずは概要を学習
- 次に実際にコードを書いて理解

していこうと思う。
この記事ではweb3.0周りの技術を勉強してまとめ、次の記事で実際にプロダクトを開発していこう。


## Web3.0とは？

https://qiita.com/khalednigrou/items/0b2f66fd1d56af654c0e

https://qiita.com/naruqiita/items/0c1c8a1fb3e6f8cef584

一言で言うと、「Web3.0とはブロックチェーンを用いてデータを分散管理することでweb2の中央集権的なデータ管理におけるセキュリティリスクやデータの独占を解消した仕組み」である。

そのWeb3.0の仕組みの上で動くアプリのことを、「Dapps（Decentralized Applications）」と呼ぶ。

## ブロックチェーンとは？

### ブロックチェーン技術概要
https://www.softbank.jp/biz/blog/business/articles/201804/blockchain-basic/

ブロックチェーンは「P2Pネットワーク」「ハッシュ」「電子署名」「コンセンサスアルゴリズム」の4つの技術を応用し、**ネットワーク上の情報に信頼性を持たせる**技術である。

ただし、
- データを消せない、隠せない(メリットでもありデメリットでもある)
- 合意形成に時間がかかる(10分ほどかかる場合も)
- 取引データの巨大化（スケーラビリティ問題)

などのデメリットもあるため、導入できるサービスは限定的になりうる。

スケーラビリティ問題への対応策として一般的なのが、なるべく必要なデータの処理(資産管理)だけブロックチェーンに任せてそれ以外をサーバーやデータベースで行うといった構成をとること。

### ブロックチェーン用語まとめ

#### 仮想通貨と暗号資産
https://coincheck.com/ja/article/220#:~:text=%E3%81%AA%E3%81%AE%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%E3%80%82-,%E3%80%8C%E6%9A%97%E5%8F%B7%E8%B3%87%E7%94%A3%E3%80%8D%E3%81%AF%E9%87%91%E8%9E%8D%E5%BA%81%E3%82%82%E5%91%BC%E7%A7%B0%E5%A4%89%E6%9B%B4%E3%82%92%E7%99%BA%E8%A1%A8,%E3%82%92%E6%8C%99%E3%81%92%E3%82%89%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

もともとはブロックチェーン時の仕組みの上で作成された通貨を、**仮想通貨**と呼んでいた。
ブロックチェーンにスマートコントラクトにより契約や条件などの情報を載せることができるようになったため、データそのものに価値が生まれるようになった。
そのため世界的に、従来の「Virtual Currency(仮想通貨)」や「Cryptocurrency（暗号通貨）」といった呼び名から「**Crypto asset（暗号資産）**」と表現されるようになっている。

#### トークン
https://bitcoin.dmm.com/glossary/token#:~:text=%E6%97%A2%E5%AD%98%E3%81%AE%E6%9A%97%E5%8F%B7%E8%B3%87%E7%94%A3%EF%BC%88%E4%BB%AE%E6%83%B3%E9%80%9A%E8%B2%A8%EF%BC%89%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%A8%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE,%E3%81%A7%E3%81%82%E3%82%8B%E3%80%81%E3%81%A8%E3%81%84%E3%81%86%E7%82%B9%E3%81%A7%E3%81%99%E3%80%82

トークンとは、既存の暗号資産（仮想通貨）プラットフォーム（ビットコインやイーサリアム、ネムなど）のシステムを間借りする形で存在する通貨で、独自のブロックチェーンを持たない通貨。
例えるならば、企業が独自に発行しているポイントに近いもの。

**独自のブロックチェーンで発行されたものが仮想通貨と呼ばれ、既存のブロックチェーン上で発行されたものをトークンと呼ぶ。**
トークンは、スマートコントラクトプラットフォーム上でデータに価値を持たせることができるようになり、作成することができるようになった。

既存の暗号資産　→カレンシータイプの暗号資産
トークン　→アセットタイプの暗号資産

#### トークンの種類
https://coincheck.com/ja/article/263#i4

- カレンシータイプ：予め通貨の総量や供給量が決められていて、人間の意思によって増減させることができないこと
- アセットタイプ：発行者が存在し、中央集権的で発行枚数などを自由に決めることができる
- ユーティリティタイプ：利用券のようなもの。プロジェクトのサービスを利用するための対価として発行されるトークン
- セキュリティタイプ：有価証券をブロックチェーン技術を用いてデジタル化したようなもの


#### 暗号通貨を利用した資金調達
https://trade-log.io/blog/1451/

- ICO(Initial Coin Offering)
  - スマートコントラクト技術を用いた資金調達方法
  - トークンを発行し、それを仮想通貨で販売する方式
  - トークンが株式のような役割
  - ただし、株式のように法的な整備が整っておらず、詐欺が横行した
- SCO(Security Coin Offering)
  - ある国の法律において証券(Security)と定められるトークン(=セキュリティトークン)を利用した資金調達
  - 株式などの有価証券同様の発行体としての義務が発行者に課される
- IEO(Initial Exchange Offering)
  - 仮想通貨取引所がトークンの販売業務、多くの場合で上場までをサポートする、資金調達を望むプロジェクトに対する一括パッケージのようなもの

#### NFT
https://www.caica.jp/media/crypto/nft-about/

<img width=600 src='https://www.caica.jp/media/wp-content/uploads/2022/05/ERC721%E3%81%A8%E3%81%AF.png'>

「Non-Fungible Token: 代替不可トークン
画像や音声などのデジタルデータに「唯一性」を付加したトークンのこと。
選挙の際の電子投票システムや不動産の所有証明などアートの域を超えたさまざまなサービスで実用化を目指して開発が進められている。



## Dapps(ダップス)とは？

```
A decentralized application (dapp) is an application built on a decentralized network 
that combines a smart contract and a frontend user interface.
A dapp has its backend code running on a decentralized peer-to-peer network. 
A dapp can have frontend code and user interfaces written in any language
 to make calls to its backend.
Furthermore, its frontend can get hosted on decentralized storage such as IPFS.
```
(出典: [ethereum.org](https://ethereum.org/en/developers/docs/dapps/))

- バックエンド
  - 分散型Peer to Peer(P2P)ネットワークで実行される
  - 対して、Web2ではバックエンドコードが集中型サーバーで実行されていた
- フロントエンド(ユーザーインターフェイス)
  - 任意の言語で記述でき、バックエンドを呼び出す
- 分散ストレージ(IPFSなど)
  - フロントエンドを分散ストレージにホストできる
- スマート・コントラクト
  - ブロックチェーン上のトランザクション実行に使用される

https://bitcoin.dmm.com/column/0142

ブロックチェーンのスマートコントラクトの応用により動作するアプリケーション。
世界的にはイーサリアム基盤のDappsが主流となっており、現在も様々な分野で開発やリリースが行われているらしい。

https://www.btcc.com/ja-JP/academy/crypto-basics/6-dapps-platforms

Dappsの基盤となるブロックチェーン

- Ethereum
  - 独自言語(Solidity)で実装
- EOS
  - より高速なトランザクション速度で、イーサリアムキラーと言われる
  - C/C#で実装
- BCH
- NEM -> Symbol（XYM）

現状は大体のDAppsがSolidityで実装されている。


## まとめ
Web3.0の基幹技術であるブロックチェーンと、暗号資産の概念に関して学んだ。
次の記事から、実際にDAppsの作成方法に関して学習していきたい。