DApp設計のポイントは高価なブロックチェーンを使うことによるUXの考慮と、保守性の考慮、機密性の確保、さらに運用価格の考慮が必要になってきます。
ブロックチェーンを使うことによって、信頼性を担保したいデータを保存しつつ、ブロックチェーンを使うことによって生じるデメリットをアーキテクチャで回避していくことになります。
今回は、ブロックチェーンを使用する場合に多用されるイベント駆動アーキテクチャの基礎を学習しつつ、DAppでどのように適用されるかというのを自分が理解できている範囲で解説します。
イベント駆動型アーキテクチャは、ある処理が実行されたことを表すイベントを元に各サービスが処理を開始するアーキテクチャです。ブロックチェーンは処理に時間がかかるため、イベント駆動アーキテクチャを使用することが多々あります。
イベント駆動型アーキテクチャを使用しない場合と使用した場合を実装レベルで見ていきましょう。
まず、イベント駆動でない場合は以下のようなアーキテクチャになり、コードから直接サービスを呼び出すことになります。
contract NFTMarket {
send(uint256 tokenId) {
// NFTを購入者に転送
token.safeTransferFrom(list.seller, msg.sender, tokenId);
// ETHを売人に送金
payable(list.seller).transfer(msg.value);
mailService.send(tokenId, list.seller, msg.sender, msg.value)
analysisService.store(tokenId, list.seller, msg.sender, msg.value)
}
}
もし、「金融庁が税務調査のためにうちにもその情報ほしい」という要望がある場合は、このようになります。
contract NFTMarket {
send(uint256 tokenId) {
// NFTを購入者に転送
token.safeTransferFrom(list.seller, msg.sender, tokenId);
// ETHを売人に送金
payable(list.seller).transfer(msg.value);
mailService.send(tokenId, list.seller, msg.sender, msg.value)
analysisService.store(tokenId, list.seller, msg.sender, msg.value)
financialService.store(tokenId, list.seller, msg.sender, msg.value)
}
}
イベント駆動型アーキテクチャを使用すると以下のようになります。