dappの技術的概要
スマート・コントラクトとフロントエンドのユーザーインターフェースを組み合わせた、分散型ネットワーク上に構築されたアプリケーションを分散型アプリケーション (dapp) と呼びます。イーサリアム上のスマート・コントラクトは、オープンAPIのようにアクセス可能で透明性が高いため、他の人が書いたスマート・コントラクトを自分のdappに組み込むことも可能です。
前提条件
dappについて学ぶ前に、ブロックチェーンの基礎を理解し、イーサリアムネットワークとその分散型の仕組みについて読んでおく必要があります。
dappの定義
dappは、分散型のピア・ツー・ピアネットワーク上でバックエンドコードを実行します。これは、バックエンドコードが中央集権型のサーバー上で実行される一般的なアプリとは対照的です。
dappは、バックエンドを呼び出すために、(一般的なアプリと同様に) 任意の言語で書かれたフロントエンドコードとユーザーインターフェースを持つことができます。さらに、そのフロントエンドはIPFS (opens in a new tab)などの分散型ストレージでホストすることも可能です。
- 分散型 - dappは、特定の個人やグループが制御権を持たない、オープンでパブリックな分散型プラットフォームであるイーサリアム上で動作します。
- 決定的 - dappは、実行される環境に関係なく同じ機能を実行します。
- チューリング完全 - dappは、必要なリソースが与えられれば、あらゆるアクションを実行できます。
- 分離性 - dappはイーサリアム仮想マシン (EVM) と呼ばれる仮想環境で実行されるため、スマート・コントラクトにバグがあっても、ブロックチェーンネットワークの正常な機能が妨げられることはありません。
スマート・コントラクトについて
dappを紹介するには、適切な言葉が見つかりませんが、dappのバックエンドであるスマート・コントラクトを紹介する必要があります。詳細な概要については、スマート・コントラクトのセクションをご覧ください。
スマート・コントラクトは、イーサリアムのブロックチェーン上に存在し、プログラムされた通りに正確に実行されるコードです。スマート・コントラクトは一度ネットワークにデプロイされると、変更することはできません。dappが分散型になり得る理由は、個人や企業ではなく、コントラクトに書き込まれたロジックによって制御されるためです。これは同時に、コントラクトを非常に慎重に設計し、徹底的にテストする必要があることも意味します。
dapp開発のメリット
- ダウンタイムゼロ – スマート・コントラクトがブロックチェーンにデプロイされると、ネットワーク全体が常にコントラクトと対話しようとするクライアントにサービスを提供できるようになります。したがって、悪意のある攻撃者が個々のdappを標的としたサービス拒否 (DoS) 攻撃を仕掛けることはできません。
- プライバシー – dappをデプロイしたり、dappと対話したりするために、現実世界の身元情報を提供する必要はありません。
- 検閲耐性 – ネットワーク上の単一のエンティティが、ユーザーによるトランザクションの送信、dappのデプロイ、またはブロックチェーンからのデータの読み取りをブロックすることはできません。
- 完全なデータ整合性 – 暗号化プリミティブのおかげで、ブロックチェーンに保存されたデータはイミュータブルであり、議論の余地がありません。悪意のある攻撃者が、すでに公開されているトランザクションやその他のデータを偽造することはできません。
- トラストレスな計算/検証可能な動作 – スマート・コントラクトは分析可能であり、中央権威を信頼することなく、予測可能な方法で実行されることが保証されています。これは従来のモデルには当てはまりません。たとえば、オンラインバンキングシステムを使用する場合、金融機関が財務データを悪用したり、記録を改ざんしたり、ハッキングされたりしないことを信頼する必要があります。
dapp開発のデメリット
- メンテナンス – ブロックチェーンに公開されたコードやデータは変更が難しいため、dappのメンテナンスはより困難になる可能性があります。古いバージョンでバグやセキュリティリスクが特定された場合でも、一度デプロイされたdapp (またはdappによって保存された基盤となるデータ) を開発者が更新することは困難です。
- パフォーマンスのオーバーヘッド – パフォーマンスのオーバーヘッドが非常に大きく、スケーリングは非常に困難です。イーサリアムが目指すセキュリティ、整合性、透明性、信頼性のレベルを達成するために、すべてのノードがすべてのトランザクションを実行および保存します。さらに、プルーフ・オブ・ステーク (PoS) コンセンサスにも時間がかかります。
- ネットワークの混雑 – 1つのdappが計算リソースを使いすぎると、ネットワーク全体が滞留します。現在、ネットワークは1秒間に約10〜15件のトランザクションしか処理できません。これより速いペースでトランザクションが送信されると、未確認のトランザクションのプールが急速に膨れ上がる可能性があります。
- ユーザーエクスペリエンス – 一般的なエンドユーザーにとって、真に安全な方法でブロックチェーンと対話するために必要なツールスタックを設定することは難しすぎる可能性があるため、ユーザーフレンドリーなエクスペリエンスを設計することはより困難になる可能性があります。
- 中央集権化 – イーサリアムのベースレイヤー上に構築された、ユーザーフレンドリーで開発者フレンドリーなソリューションは、結局のところ中央集権型のサービスのように見えてしまう可能性があります。たとえば、そのようなサービスは、キーやその他の機密情報をサーバー側に保存したり、中央集権型のサーバーを使用してフロントエンドを提供したり、ブロックチェーンに書き込む前に中央集権型のサーバーで重要なビジネスロジックを実行したりする場合があります。中央集権化は、従来のモデルに対するブロックチェーンの利点の多く (すべてではないにしても) を排除してしまいます。
視覚的に学びたい方へ
dapp作成ツール
Scaffold-ETH - スマート・コントラクトに適応するフロントエンドを使用して、Solidityをすばやく試すことができます。
Create Eth App - 1つのコマンドでイーサリアムを利用したアプリを作成します。
One Click Dapp - からdappのフロントエンドを生成するためのFOSSツール。
Etherflow - イーサリアム開発者がノードをテストし、ブラウザからRPC呼び出しを作成およびデバッグするためのFOSSツール。
thirdweb - Web3開発のためのあらゆる言語のSDK、スマート・コントラクト、ツール、およびインフラストラクチャ。
Crossmint - スマート・コントラクトのデプロイ、クレジットカードおよびクロスチェーン決済の有効化、APIを使用したNFTの作成、配布、販売、保存、編集を行うためのエンタープライズグレードのWeb3開発プラットフォーム。
参考文献
- dappを探す
- ウェブ・3.0アプリケーションのアーキテクチャ (opens in a new tab) - Preethi Kasireddy
- 分散型アプリケーションの2021年ガイド (opens in a new tab) - LimeChain
- 分散型アプリとは? (opens in a new tab) - Gemini
- 人気のdapp (opens in a new tab) - Alchemy
役に立ったコミュニティリソースをご存知ですか?このページを編集して追加してください!
関連トピック
チュートリアル: イーサリアムでのアプリとフロントエンドの構築
- ユニスワップ-v2 コントラクトのウォークスルー – 自動マーケットメーカー (AMM) の仕組みを説明する、ユニスワップ v2 コアコントラクトの注釈付きウォークスルー。
- コントラクトのユーザーインターフェースの構築 – スマート・コントラクトに接続する最新のReact + Wagmiフロントエンドを構築する方法。
- 初心者のためのHello Worldスマート・コントラクト – フルスタック – エンドツーエンドのチュートリアル: シンプルなスマート・コントラクトの作成、デプロイ、およびフロントエンドの構築。
- Web3アプリのサーバーコンポーネントとエージェント – ブロックチェーンのイベントをリッスンし、トランザクションで応答するTypeScriptサーバーコンポーネントの記述方法。
- 分散型ユーザーインターフェースのためのIPFS – 検閲耐性のためにdappのフロントエンドをIPFSでホストする方法。