ブロックチェーンの前提知識には、ブロックチェーンの起源、ウォレットアドレス、ビットコイン、イーサリアムなどの基本概念が含まれています。その後、DAPP プロジェクトの開発と従来のプロジェクト開発の違いを理解し、最後に基本的な開発ツール(例:remix、rpc など)を紹介し、正式な学習のための基礎を築きます。
App と Dapp のアーキテクチャの違い
インターネットは 20 年以上発展しており、さまざまなアーキテクチャは非常に成熟しています。モバイル端末の台頭により App が加わりましたが、そのアーキテクチャには大きな変化はありません。
しかし、Dapp のアーキテクチャと比較すると、すべてが天と地の差があります。これは技術の変革というよりも、思考方法の変革と言えます。
補足として、注意深く観察すると、主流の Dapp は一般的に自分たちを App とは呼ばず、protocol(プロトコル)と呼びます。例えば、aave や compound は自分たちを貸出プロトコルと呼んでいます。理由は、App は閉じられたものであり、プロトコルは統合拡張可能だからです。
App アーキテクチャ
B/S または C/S のアーキテクチャは大体このようになります。フロントエンドからバックエンド、データセンターからクラウドネイティブへ、技術は進化し、効率は向上し、すべてがますますスムーズになっています。基盤のシステムは大きく分けて、Unix、Linux、Dos、MacOs、Windows、Android、iOS などがあります。
分散型アプリケーションのアーキテクチャは App とは完全に異なります。なぜなら、専用のバックエンドが存在せず、そのブロックチェーンネットワークが基盤システムだからです。例えば、イーサリアムネットワーク、BSC ネットワークなどです。
最もシンプルな Dapp アプリケーションは以下のように直接説明できます。これを V1 バージョンアーキテクチャと呼びます。
V1:この時、ブラウザにはウォレットモジュールが追加されました。ウォレットはブロックチェーンを開くためのアイデンティティキー🔑です。ブロックチェーン上の世界はすべて暗号学に基づいて構築されています(非対称暗号、理解しなくても大丈夫です)。図の青い部分がブロックチェーンネットワークであり、私たちのプログラムはその中で動作します。それはバックエンドサービスであり、データベースでもあります。私たちのフロントエンドは直接ブロックチェーンネットワークと対話します。これには以下が含まれます:
データの読み取り(ブロックチェーンの帳簿データを読み取る)、無料
データの書き込み(ブロックチェーンネットワークにデータを提出し、永久に保存します。この時、マイナーがパッケージ化して実行する必要があります)、有料(この点を覚えておけば大丈夫です。後の言語学習で順次説明します)
V2:ブロックチェーンネットワークエコシステムの発展に伴い、人々は最適化の余地を徐々に発見しました。つまり、読み取り操作を事前にサーバーに保存し、フロントエンドが直接そこからデータを取得できるようにすることです。これにより、システムの安全性を確保し、効率を向上させることができます。したがって、subgraph(チェーン上のイベントをキャッチし、オフチェーンで保存し、ロジック処理をサポートする)というインフラが急速に発展しました。図のオレンジ色の部分です。これを V2 バージョンアーキテクチャと呼びます。
V3:もちろん、ビジネスがあまりにも複雑で、チェーン上の契約と相互作用する部分は、独立してカプセル化し、フロントエンドは表示に集中し、契約はロジックに集中させることができます。したがって、SDK が導入され、この部分はチェーン上の契約とのすべてのロジックを処理し、適切なビジネス処理を行い、常にフロントエンドに提供する準備をします。この時、私たちはこれをV3 バージョンアーキテクチャと呼びます。
V4:その後、ブロックチェーンストレージプロジェクトも次々と誕生しました。その中で最も知られているのは ipfs です。これは大きなファイルの保存を目的としたプロジェクトで、最近非常に人気のある nft プロジェクトでは、すべての画像が ipfs にアップロードされ、イーサリアムネットワークの費用を節約します。したがって、この時の設計変更は以下のようになります。これをV4 バージョンアーキテクチャと呼びます。
ブロックチェーンインフラプロジェクトの発展はシステム設計にいくつかの柔軟性をもたらします。V1 から V4 の間には、最良の設計はなく、最も合理的な設計だけがあります。アーキテクチャ設計は合理的な分業をもたらし、効率を提供します。
しかし、ビジネスシーンに合った設計だけが意味を持ちます。私たち開発者は、クールさのために技術を積み重ねて過剰設計を引き起こさないようにしなければなりません。これはしばしば開発者の虚栄心を満たすだけであり、結果として非効率と高コストをもたらします。開発プロセスでは誘惑に抵抗し、最適解を選ぶように努めましょう。
web3 の技術スタックはそれほど複雑ではありません。従来のインターネットバックエンド技術は web3 開発に必須ではなく、オプションとして存在します。あなたが習得する必要があるのは:
-
ブロックチェーンの基本知識:アドレス、トークン、非対称暗号、ハッシュ、コンセンサス;
-
Solidity:スマートコントラクトを書くこと。これは Dapp 全体の最も核心的な部分です;
-
nodejs:この部分は必ず手元に置いておく必要があります。フレームワーク、単体テスト、スクリプトなどはすべて js を使用して操作されます(js は最も主流で、python、java などもあります);
-
web3 sdk:主流の web3 ライブラリは web3.js または ethers.js であり、すべてのチェーン上の相互作用はこの 2 つのライブラリを通じて行われます;
-
Subgraph:これはサードパーティのインフラサービスで、オフチェーンでイベントをキャッチ(スキャン、計算、Postgres に保存)し、データを統合し、フロントエンドから呼び出され、迅速にデータを返すことができ、開発者に大きな便利さを提供します。
-
フロントエンド:react(大規模プロジェクトで使用され、知名度の高いプロトコルがネイティブにサポートされるライブラリがより充実しています)、vue
-
バックエンド(オプション):ボット、定期的に契約を呼び出す、スキャン(ウォレット)をリッスン、その他の要求
最小技術スタック:solidity、nodejs、web3、subgraph、フロントエンド。(あなたが開発者であることを前提とし、linux などについては言及しません)
これらの部分は Dapp を書くための最小技術スタックです。これらのスキルを習得すれば、Dapp の読み書きの基本が身につきますが、これだけではまだ不十分です。技術を習得することは始まりに過ぎず、具体的なビジネスに焦点を当てることが私たちがより注目すべき重要なポイントです。ビジネスがあなたを特定の分野の専門家にし、技術は常に土台を築く役割に過ぎません。この部分については後で詳しく説明しますので、焦らないでください。
チーム構成
Dapp 開発には非常に小さなチームが必要です。一般的に 4〜5 人で十分です。具体的な分業は以下の通りです:
契約(1〜2)
Subgraph(1)
Sdk(1)(オプション)
フロントエンド(1〜2)(多い)
QA(コードが書ける)
フロントエンドには少し多くの人が必要です。なぜなら、契約を書くのに半日かかることが多く、フロントエンドを書くのに 1 週間かかるからです。これが愛なのかもしれません。
QA の存在を重視し、ページ上でのエンドツーエンドテストだけでなく、契約のインターフェースを直接個別にテストすることが、安全性を最大限に保証するために重要です。
開発プロセス
要件分析 -> 開発 -> 連携調整 -> テストネットテスト -> メインネットテスト -> 契約監査 -> ローンチ -> 契約アップグレード
設計原則
高効率よりも確実性(改ざん不可)を重視
データとロジックを分離し、アップグレードを容易にする
コードはオープンソースで、データは完全に公開(透明)
チェーン上に敏感な情報を保存することを拒否(privateとして修飾されたフィールドを含む)
ロジックは明確で、権限管理を適切に行う
単体テスト
攻撃に備える準備を常にする(安全性)
契約が攻撃されることを前提とし、救済措置を講じる(緊急停止、準備金)
車輪の再発明を避け、検証済みのコードを使用する(暗号アルゴリズムに類似)
インタラクションに対する支払い(データを書き込む際)
不必要なデータはチェーンに載せない(on-chain vs off-chain)
基本的なツールチェーンをマスターすることは万里の長征の第一歩です。web3 の世界は瞬時に変化し、ビジネスが次々と生まれていますが、技術を習得することは常に最も重要な要素です。頑張って、動き出しましょう!
solidity の職務要件#
参考までに。初級:文法、中級・上級:文法 + プロトコル、専門家:文法 + プロトコル + 上下流技術スタック
初級#
ブロックチェーンエコシステム開発エンジニア
職務内容:
ブロックチェーンエコシステム開発ツールの設計、開発、移植などの業務;
ブロックチェーンエコシステムアプリケーションの設計、開発、移植などの業務;
DAPPの事例を構築し、プロダクション環境のコード参考とする;
ブロックチェーンネットワークの開発体験を最適化する;
ブロックチェーンエコシステム技術の最新の進展を追跡する;
職務要件:
学士号以上、コンピュータ関連の専攻;
分散型アプリケーションまたはスマートコントラクトの開発経験;
ビットコイン、イーサリアムなどの主流ブロックチェーンの基本的な運用原理に精通している;
学習能力が高く、優れた論理的思考能力、優れた分析・問題解決能力を持つ;
良好なチームワーク精神を持ち、挑戦を受け入れ、卓越性を追求する;
中級・上級:#
優れたスマートコントラクトエンジニアになるためには:
1、Solidity言語に精通し、hardhatを使用してスマートコントラクトの自動テスト、最適化、デプロイ、相互作用、SDKのカプセル化を完了できること。
2、Openzipplinのすべてのライブラリファイルに精通し、アップグレード可能な契約のデプロイとアップグレードを完了できること。
3、市場の主流のスマートコントラクトプロジェクトの実装に精通していること:dex、lend、skating、oracle、bridge(各種少なくとも2つ)。
4、インラインアセンブリに精通し、スマートコントラクトの実行過程におけるGAS消費を理解し、スマートコントラクトの最大限のGAS最適化を行えること。
5、主流のEIP標準に精通し、EIP提案の進捗を追跡し、新しい提案の分析を作成できること。
6、Solidityの各バージョン間の違いに精通し、Solidityのバージョン更新を追跡できること。
7、Solidityをバイトコードにコンパイルする手順に精通し、バイトコードからスマートコントラクトの実行手順を逆算できること。
8、EVM上でのスマートコントラクトの実行原理に精通し、ブロックチェーンをEVM互換にできること。
9、他の主流のスマートコントラクト言語とメカニズム(例えばrustやmove)に精通していること。
専門家レベル#
あなたの責任は何ですか?
1.EVMに基づくスマートコントラクトを実装すること
2.EVMに基づくスマートコントラクトをレビューし、安全性の問題を監査すること
3.フロントエンド開発者をサポートし、スマートコントラクトを呼び出すWebアプリケーションを構築・維持すること
4.既存のスマートコントラクトをデプロイし、維持すること
5.スマートコントラクトをデプロイし操作するためのウォレットを管理すること
6.私たちの製品や内部プロセスの改善を積極的に提案すること
何か要件はありますか?
1.あなたはスマートコントラクトとSolidityの専門家です
2.EVMに深い理解があり、スマートコントラクトをオペコードレベルで理解しています
3.少なくとも1つのイーサリアムノード実装のソースコードに精通しています
4.JavaScriptの基礎知識、現代のツールとエコシステムに深い理解があります
5.web3.jsとethers.jsライブラリの使用に精通しています
6.フロントエンド開発の知識があり、Reactについて少し理解しています
何か美味しいものはありますか?
1.ブロックチェーン技術と分散型の未来に情熱を持っています
2.オープンソースコミュニティに貢献しています
3.スタートアップ環境で働くことを考え、快適に感じています
専門家#
あなたは:
●分散型金融分野で卓越した製品を構築した経験が2年以上ある
●分散型金融、分散型プロトコル、DAO、暗号通貨、ブロックチェーン、EVMについて深く理解している
●web3フレームワークやイーサリアムノードとサービス(Geth、hardのインターフェース、Alchemy、Infura、Tenderlyなど)に関する経験がある
●イーサリアムに複雑なシステムをデプロイした経験がある
●迅速に学習し、独立して作業できる
●効率的にリモートで作業し、コミュニケーションできる
歓迎されるのは:
●コンピュータサイエンス、数学、または工学の学位を持っている
●スマートコントラクトの制約を使用して複雑な数学を実装した経験がある
あなたは:
●開発ライフサイクル全体に参加し、設計、コーディング、デバッグに集中する
●再利用可能なコードとライブラリを構築し、将来の使用のために保存する
●アプリケーションのパフォーマンスとスケーラビリティを最適化する
●セキュリティとデータアクセスを実装する
●異なるクライアントに対してクリーンなAPIを提供する
サードパーティノード:https://dashboard.alchemy.com/apps(Dapp 専用)
サードパーティノード:https://infura.io/(Dapp 専用)
公式ノード:https://rpc.info/(graphnode のデータ同期に使用可能)
他の rpc ノード取得:https://cointool.app/rpcServer/eth
bsc テストネット rpc:https://chainlist.org/chain/97
イーサリアムアーキテクチャ#
solidity の基礎#
Ascii(検索しやすい)
怠けて待つ