The Architecture of a Web 3.0 application
Web 3.0アプリケーションは、"DApps"と呼ぶらしいですが、
ポイントは分散技術ですので、
インフラ、コンピュートリソース、データ、トランザクションデータ、履歴、認証などアーキテクチャー的に必要なコンポーネントやライブラリ及びミドルウェアは、
centralized、つまり中央集権性ではなく、decentralized/分散技術で構築しないといけないとのことです。
1 Frontend層は今までのWebアプリケーションに近いが、AWSやAzureやオンプレのサーバではなく、IPFSやSWARM的な分散ストレージの上にホストすべきです。ただ必須ではないようです。
2 ビジネスロジック層は、完全にブロックチェーンに任せます。ですので、Ethereum Virtual Machine (EVM)の上にデプロイされたsmart contractsプログラム(開発言語SolidityやVyper)になります。
ビジネスロジック層のコンピュートリソースは、Ethereumブロックチェーン上に専用nodeを構築する必要あります。ただ結構煩雑のため、サードパーティサービスプロバイダもたくさんあるので、Infura, Alchemy, Quicknodeなどを使うといいです。
3 Frontend層は、ビジネスロジック層と通信するために、プロバイダ経由になります。通信プロトコルは、JSON-RPCになります。
読み込みだけなら通信の署名が要らないが、書き込み時に署名が必要なため、SignerサービスのMetamask の利用になります。
基本的にDAppにユーザに秘密鍵を入力してもらい、署名したトランザクションをブロックチェーンに送られます。
Metamask stores a user's private keys in the browser, and whenever the frontend needs the user to sign a transaction, it calls on Metamask.
4 Ethereumが異常に高価のため、状態更新する度に何でもかんでもブロックチェーンに保存にはいきません。ですので、ブロックチェーンの外のIPFSやSwarmなどの分散ストレージを使う活用するは推奨されます。
実践上はInfuraやPinataを経由にIPFSやSwarmを使用します。
5 データ読み込み手段として、FEのWeb3.jsライブラリは有効です。なお、イベント更新の監視も可能になります。
しかし、機能的に制約が多いため、"The Graph"技術が推奨されます。
"The Graph"は、ブロックチェーンの外に、Indexを構築されていて、GraphQLをIFにして、自由度が高く、latency性能も良いです。
6 Ethereumが高価かつスケールしないため、side chain技術は導入されました。
PolygonやOptimistic Rollups and zkRollups上にトランザクション処理をブロックチェーンの外に行い、トランザクションデータだけをブロックチェーンにブロックチェーンに保存すればいいです。
これで高速処理と安価の効果が得られます。
7 開発環境フレームワークがないとスタートできないので、Hardhatという優れものがあります。
"Hardhat Network"を使えば、コードビルド、デプロイ、テスト、デバッグなどは簡単にできます。
Comments