web3 developer に少し近づくまでの記録
※ この界隈の入り口としては、どれでもいいんだけど blockchain は手段だったりするので、タイトルは"web3"という単語を採用してみる。
blockchain, ethereum, solidity, web3, dapps などその辺りをググると、やっぱり ethereum.org が一番体系的
多分 web 開発者であれば、一回"Developer"メニュー内の概要レベルの話見てから、"Learn"メニュー見た方が全体感分かりやすそう。
(今振り返って思う)読むおすすめ順を書いてみる。
-
Ethereum development documentation | ethereum.org
- Intro to Ethereum
- Intro to Ether
- Intro to dapps
- Web2 vs Web3
- (Ethereum, Ether の話を我慢して dapps, web3 まで来ると、従来のwebからどう違うのか、なぜ blockchain が中心にいて、また ethereum なのか、というのが大分わかってくると思う)
-
Learn メニュー
- 以下2つは飛ばしてもいい、developer の方よんだら大丈夫だと思う
- What is Ethereum?
- What is ether (ETH)?
- 以下はこの ethereum を持って創れるものの話なので、(ボリューミーだけど)軽くは見て言葉は把握したい
- Smart contracts
- (↑表示順と違うけど、こちらが先がいいと思う)
- Decentralized finance (DeFi)
- Decentralized autonomous organizations (DAOs)
- Smart contracts
- 以下2つは飛ばしてもいい、developer の方よんだら大丈夫だと思う
ここまでで(全部読めていれば)、最初に書いたような概念はざっくり理解できると思う。
とはいえ英語ベースなので、きつい部分もあると思うので、上記の ethereum.org の記事を読んでいるところに挟んだり、助走として最初に入れられるような日本語の記事を後続でメモしたい。
※補足
ethereum.org の developer ページに、技術的なトピックを含んだページもあるが意図的に飛ばしている
(日本語の記事をメモしたい、と記述したけど、すいません、嘘です。英語の記事も混ぜます...m(_ _)m)
web3
少しまとめてみる
- これまでのweb(web2.0)
- 誰でもアクセス/参加できる仕組みが基本として、様々なサービス/アプリケーションが多くの人に提供されている
- またユーザーの使いやすさに焦点を置いた継続的な改善も行われ、Google のように無料で利用できるサービスも多く提供されている
- ただし、そのデータは中央集権的に管理されていてユーザーはその実態や利用先は全く把握できない
- また、サービス利用時もサービス管理者が仲介者として存在しているので、利用したいサービスの効用を得るためにシステムにおける処理以上の時間がかかることもある
- 他にも、単一障害点の存在などが課題としてよく挙げられている
- 個人情報の提供などの必要性により、サービス利用できるユーザーが絞られることもある
- 誰でもアクセス/参加できる仕組みが基本として、様々なサービス/アプリケーションが多くの人に提供されている
- で、web3.0?
- 非中央集権的なアプリケーション/サービスを提供できる
- ブロックチェーンの技術を利用したアプリケーションを構築することで、中央管理者が存在しない状態にできる
- 透明性 ... 処理結果(≒トランザクション)は誰でも閲覧可能
- (ブロックチェーン自体の話だが)また、この"処理結果"である”取引"は過去の取引結果との紐付きを持っていて、データ同士のつながりがあり、これが延々繋がっている。さらにデータ自体の暗号化もある。
- これにより、攻撃者は他の全ユーザーを上回る計算は必要になり、改ざんが事実上不可能になっている
- dapps のコード自体 github で公開されていることも多い(特にスマートコントラクトは公開されていることが多い)
- (ブロックチェーン自体の話だが)また、この"処理結果"である”取引"は過去の取引結果との紐付きを持っていて、データ同士のつながりがあり、これが延々繋がっている。さらにデータ自体の暗号化もある。
- 耐障害性 ... ブロックチェーンのネットワークにデプロイされることで、単一障害点が存在しない
- 誰でもウォレットのアカウントさえあれば、利用できる(ウォレットのアカウント自体は誰でも作れる)
- 透明性 ... 処理結果(≒トランザクション)は誰でも閲覧可能
- ブロックチェーンの技術を利用したアプリケーションを構築することで、中央管理者が存在しない状態にできる
- 非中央集権的なアプリケーション/サービスを提供できる
ざっくり把握するための参考
ここまでで ethereum そのものと、web3 と今の web の違い、web3 の目的がざっくり分かれば、web3 developer として関わっていく、作っていく具体的なモノ/コトが少し理解しやすくなる
代表的なものは↓
- Decentralized finance (DeFi)
- Decentralized autonomous organizations (DAOs)
- Non-fungible tokens (NFT)
※翻訳しながらでも読めば ethereum.org のページ直接でもいいと思います
DeFi
- 分散型金融
- 誰でも口座開設できる
- 仲介する人がいないので、所要時間は(基本的に)処理時間のみ
- トランザクションが誰でも見える
- ざっくり把握するための参考
DAOs
- 自律分散型組織
- 中央集権的なリーダーが存在しない、メンバーシップ型のコミュニティ
- 安全に、資金を調達したり、投資の意思決定をしたり、報酬を与えたり etc できる
- (しかし、合わせて The DAO の事件も見ていただけるとより良いです)
- ざっくり把握するための参考
- DAO(分散型自律組織)の仕組みや将来性とは|Nansen寄稿
-
DAO:分散自立型組織の革命とその全貌に迫る|小林豪|note
- すごくボリューミーですが、勉強になりました
- 自律分散型組織DAOとは
NFT
- 非代替性トークン
- 代替不可能なブロックチェーン上で発行されたトークン
- いくつか規格が定められており、NFTの規格内で発行されたトークンは1つ1つ個別の価値を表現できる
- 規格の例: ERC-721, ERC-1115
- 簡単にいうと、何かの所有権・固有の価値を表現できるもの
- いくつか規格が定められており、NFTの規格内で発行されたトークンは1つ1つ個別の価値を表現できる
- ざっくり特徴を並べる
- 固有性(唯一性) ... 唯一無二のデジタルデータ
- 取引可能性 ... ブロックチェーン上で加味されて、所有者が明確であるため、自由に取引の対象として使える
- 相互運用可能性 ... 共通規格で発行されているため
- プログラマリビティ ... 取引に関わる数量制限や手数料などの機能をつけられる
- 代替不可能なブロックチェーン上で発行されたトークン
- ざっくり把握するための参考
- 補足
- 今、もしくは少し前に、この界隈で最もホットだったトピックかもしれない
- NFT 自体の情報以上に、NFTと投資/販売/収益みたいな情報が多く、そのあたりを避けて記述しています
- そういうある意味ノイズになる情報も多いので、自分で調べる際にも見分ける必要がありそうです
ようやく developer に向かう話
ここまでの話のいくつかをベースに web3, ethereum とその周辺を含めた概観がわかってくると、開発周りの話が理解しやすくなると思います。
順番としては↓
- Solidity 自体
- ブロックチェーンのトランザクションを作成する実体であり、スマートコントラクトを構築できるプログラミングから入ると良さそう
- dapps のインターフェース(≒フロントエンド)
- Solidity を使ったスマートコントラクトの構築自体を把握してから、それを操作するフロントの作り方を学ぶと理解しやすいと思います
- web developer であれば、スマートコントラクトをwebサービスのサーバサイドと見立てて、ここをフロントエンドとして理解しやすいと思います
- ただ ethereum 特有の知識は必要なので、Solidity から入るといいと思います
- 可能であれば、手前で Solidity 勉強時に作ったスマートコントラクトと接続できるといいと思いますが、スマートコントラクトの再作成も踏まえて web でよくあるカウンターアプリ、TODOアプリとかでやるといいと思います
- zenn にも良記事があります
- Solidity を使ったスマートコントラクトの構築自体を把握してから、それを操作するフロントの作り方を学ぶと理解しやすいと思います
Solidity
公式ドキュメントをしっかりと見て学べたらそれでいいのですが、チュートリアル/ハンズオンを写経しながら、必要な部分でドキュメントを参照していくスタイルでもいいと思います
僕は下記を写経しました
- Solidity 基礎編 - YouTube
-
#1 Solidity Tutorial & Ethereum Blockchain Programming Course | CryptoZombies
- 対話型学習ツールで概念の説明もありボリューミーですが、一つ前の写経を踏まえてだとサクサク進むことができます
- 頭の整理、復習にとてもいいと思います
- 対話型学習ツールで概念の説明もありボリューミーですが、一つ前の写経を踏まえてだとサクサク進むことができます
これらを利用して写経などで学びながら必要なところはきちんとドキュメントを読みましょう
- ethereum で登場する概念
-
Ethereum development documentation | ethereum.org
- account, transaction, block, EVM, Gas, Ethereum Network etc...
-
Ethereum development documentation | ethereum.org
- Solidity
-
Solidity — Solidity 0.8.10 documentation
- 文法などプログラミング言語としての仕様
-
Solidity — Solidity 0.8.10 documentation
先述の通り Solidity が少しわかったらスマートコントラクトを操作するためのインターフェース構築です。
dapps の interface
(webもネイティブアプリもありますが、今回はwebベースで記述します)
スマートコントラクトの接続には、この辺のライブラリがよく使われてる印象(最近は etherjs?)
ベースのフレームワーク自体はどれでもいいんですが、Reactベースが多い気がします
ref: チュートリアル ... Tutorial: Intro to React – React
写経のテーマとしては、
-
Ethereum Development Tutorials | ethereum.org
-
ETHERS.JS
,WEB3.JS
,REACT
などで絞り込み
-
で十分量があると思いますが、自分の方でも作ってみました(宣伝ですm(_ _)m)
また実際の wallet と接続する部分のみにフォーカスすればこの辺りを利用します
-
Ethereum Provider API | MetaMask Docs
-
Metamask
- Chrome拡張として導入でき、代表的なウォレットの一つです(これに対応してないメジャーなdappsはほぼない)
-
Metamask
最近自分が開発で利用したのはweb3-react
で、ウォレットの接続に利用しました。
ウォレット利用のためのAPIを hooks を提供してくれるので実装に組み込みやすかったです。
最後に参考情報として有名な dapps の interface を置いておきます。
wallet 側操作の検知などはよく参考にしました。