なぜDapp開発は難しいのか?

分散型アプリケーション(Dapps)は分散型ウェブの普及を進め、エンドユーザーと分散型ネットワークのギャップを埋めてくれる存在です。

非常に重要であるにも関わらず(というよりもそれが理由となって)、Dappsの開発は容易いことではありません。開発のためのテクノロジーが複雑なのに加えて、ブロックチェーンのもつ不変性や不可逆性によってプロセスがより難解になっているのです。

この記事では、Dapp開発の一般的な方法とよくあるトラブルについて紹介します。

Dapp開発を簡単に言うと?

Dappの本質は、関数の実行・運用を行う分散型システムです。多くのDappsはブロックチェーンを使っており、またいくつかは分散型台帳技術も活用しています。暗号学と組み合わせることで、分散型システムは不変で不可逆かつ改ざん不可能な運用が可能になるのです。

そのため、パワフルでありながら開発段階で大きな課題も含んでいるのがDappsの特徴です。

Dappを開発するときは、定められたステップやテンプレートをそのまま当てにすることはできません。実際は以下のような複雑な状況が発生します。

Dapp開発には、分散型システムの様々なレイヤーやコミュニケーション要素を理解した上で、いくつものイテレーションやアダプションが必要になります。

Dappの開発サイクル

イーサリアム上で作られるDappの開発プロセスには、かなり共通する部分が多いです。

  • まず、スマートコントラクトを書くことができる環境を整えます。ノード(GethやParityなど)とMetaMaskをインストールし、コードエディタを立ち上げましょう。Solidityでスマートコントラクトを書いていきます。
  • スマートコントラクトを書いたら、イーサリアム・ブロックチェーン上でそれをテスト、コンパイル、デプロイします。
  • この工程を行ううちにコードが機能しない場合があります。ローカルテストでは上手くいってもGethノードで失敗することがあるのです。その場合、エラーを修正し(Solidityは他言語と異なりエラーメッセージを表示してくれません)、テスト・コンパイル・デプロイの手順を繰り返しましょう。
  • しかし、Gethノードでスマートコントラクトが上手く機能しても、Parityノードで再びつまづくことがあります。これについても同じプロセスで修正します。
  • また、Geth・Parity双方のノードに問題がなくても、MetaMaskとのコネクションが作動しない場合もあるので注意しましょう。
  • 再び修正を重ねると、もうスマートコントラクト上のエラーは全て解決され、問題なく機能するようになります。
  • もし運が(もしくは技術が)あなたの味方でなければ、Ganacheに問題が発生する場合もあります。チェックサムに誤りがあるか、もしくはローカル環境で生成されたアドレスがMetaMask上のものと異なっているのかもしれません。このように、エラーはいくつも続いていくのです。。。

Dapp開発者に求められること

幾度に及ぶ試行錯誤はDapp開発において避けては通れません。この作業は多くの時間がかかりますが、それは開発者にとって欠かせない経験となります。イーサリアムでのガス代をできる限り抑えるため、Dapp開発者は潜在的な問題を予見できなければならないのです。

Dappが機能したら、開発者はそのオペレーションが正確に行われているかを分析する必要があります。例えば、スマートコントラクトに資産移送の機能が組み込まれている場合、その結果を検証しなければなりません。また価格設定についても、オペレーションにかかるガス代とその他の取引を考慮しながら決めていきましょう。

次のステップは監査です。第三者によるスマートコントラクトの監査は、誤動作をなくすために重要です。監査機関はイーサリアム・ブロックチェーンの問題を解決し、最適化してくれます。しかし、監査サービスが求める基準を下回った場合、プロジェクトが当てにすることができるのはコミュニティによるフィードバックです。最高のDappを作りたい開発者とそれを使いたいユーザーにとって、このようなレビューはとても有益なのです。

また、DappsのUIとブロックチェーンをロジックで繋ぐフロントエンドも重要です。開発者がロジックを組み立てる時h2に、多くのライブラリによってフロントエンドの作業がしずらくなるので注意しましょう。

最後になりましたが、Dappも普通のアプリと同様にAPIやホスティング、ドメインなどが必要になるということをお忘れなく。

Dappを開発する上での課題とは?

このようなDapp開発は最適な方法とは程遠く、いくつもの課題があります。

  1. Solidityではエラーメッセージが表示されないため、開発者にとっては少し扱いづらいかもしれません。開発者はエラーを事前に予見しなければならないのです。
  2. 暗号化された各ブロックのデータは書き換えることができません。
  3. ブロックチェーンにスマートコントラクトをデプロイする前に何度もテストを行うのは大事なことですが、コストもかかってしまいます。
  4. それぞれのプロトコルで関数が異なるので、最適なフレームワークを選ぶのが難しいです。
  5. テストにはガス代が伴います。また、新たな関数がスマートコントラクトに追加されてもガス代は増えていきます。
  6. コミュニケーションレイヤーにおけるライブラリには多くのバージョンがあり、エラーが発生しやすいです。
  7. Dappのフロントエンドはとても複雑です。

このように多くの労力と熟練した開発者をもってしても、Dappのクオリティが保証される訳ではありません。どんなに小さなエラーでも重大なダメージに繋がってしまいます。

そしてこれらの非効率なプロセスが、ブロックチェーンやDappが普及しづらいと言われる最大の要因となっているのです。

もっと効率的にDappを開発するには?

もし上記のような複雑なコードを簡易化することができれば、開発に要する時間やコストは軽減され、より効率化するでしょう。

課題をひとつずつクリアしていくのではなく、Dappの開発プロセス自体を改善しなければなりません。開発者は、時間を節約し効率的に問題解決することができるツールを使うべきでしょう。

そんな時にもってこいなのが、0xcert Frameworkです。

このツールは、アプリ開発者がアダプションの問題を解決するためのものです。

  • これを使えば熟練のブロックチェーンの専門家は必要ありません。
  • セキュリティや監査の専門家を雇う必要もありません。
  • Dapp開発者はウェブサイトを作る知識さえ持っていれば良いのです。

この方法はいたってシンプルで、ブラウザとしてもサーバーとしても機能するJavaScriptのAPIのようなものです。

  • フレームワークはイーサリアムのノードとの直接的なコミュニケーションを可能にし、全ての指示がMetaMask同様にイーサリアムのノード上で実行されるか検証されます。
  • 開発中の全てのエラーは、開発者が介入することなくフレームワーク内で修正されます。Solidityのエラー処理もこれに含まれます。
  • 開発における全てのコントラクトは、あらかじめ監査され一行のコードに集約されます。

オプションのフレームワークは2つの規格を対象としています:ファンジブルトークン(通貨)のためのERC-20と、NFTs(アセット)のためのERC-721です。つまり、このフレームワークを使って金融セクターとアセットを用いた事業、双方のDappsを作ることができるのです。

さらにフレームワークの中で特筆すべきは、どのJSON Schemaでもデータの検証を可能にするマークルツリー・アルゴリズムを搭載しているということです。

そしてこのツール最大の利点は、オープンソースで無料だということ。フレームワークについて興味が湧いてきましたか?是非こちらをご覧ください。

Source: 仮想通貨ニュースサイト
なぜDapp開発は難しいのか?