見出し画像

WeaveDBによる完全分散型クロスチェーンDappsの構築

本記事は下記の邦訳記事となります。
『Building Fully Decentralized Cross-Chain Dapps with WeaveDB — WeaveDB』

TL;DR

  • WeaveDBは、Arweave上のスマートコントラクトとして実装された分散型NoSQLデータベースです。

  • クエリのパフォーマンスは、従来のWeb2の代替品と比較しても同等です。

  • WeaveDBは、事実上無制限のスケーラビリティを実現します。

  • Lit Protocolを使用することで、WeaveDBはクロスチェーンデータブリッジを可能にします。

  • Lens Protocolは、WeaveDBのコアにネイティブに統合されます。

  • Lit Protocolによるデータの暗号化。

  • Bundlrによる大容量データのアップロード。

アップデート

WeaveDBは、初めて紹介されてから5か月以上が経過し、いくつかの開発が行われてきました。

これらの開発には、以下が含まれます:

最も重要なことは、私たちの技術の開発において重要な進展がありました。それには、私たちの一括Webコンソールも含まれます。この記事では、それについて詳しく説明したいと思います。

WeaveDBの再紹介

WeaveDBは、Arweave上のスマートコントラクトとして実装された分散型NoSQLデータベースです。Web3のFirestoreと考えることができます。私たちは、最初の一般的な紹介で議論したように、Arweaveのストレージベースのコンセンサスパラダイム(SCP)により、計算とストレージを分離することで、安価な永続的なストレージを使用した無制限の計算が可能となっています。計算はオフチェーンで決定論的に実行され、財務的なコストはかかりません。これにより、クライアント側での遅延評価が可能となります。これらのユニークな特性を活用することで、WeaveDBは、Web2のデータベースコンポーネントに対する強力でパフォーマンスの高い、スケーラブルで組み合わせ可能な分散型の代替手段を提供します。

プロジェクトの開始と資金調達のフェーズでの会話からのフィードバックと洞察に感謝します。私たちは過去数か月間、新しいアイデアと改善を継続的に実装してきました。そして、WeaveDBがdapp開発におけるパラダイムシフトをもたらすと信じています。私たちのビジョンを共有してくれるすべての方々のサポートに感謝しています。

gRPCノードによるパフォーマンスの最適化

ストレージベースのコンセンサスパラダイム

Arweaveのスマートコントラクトが他のブロックチェーンと異なる主要な特徴は、ストレージベースのコンセンサスパラダイム(SCP)です。これは、安価なストレージを使用して無制限のオフチェーン計算を可能にする新しいパラダイムです。他のブロックチェーンでは、計算とストレージの両方に対してガスを支払う必要があり、すべてのノードが完全な状態を保存し、計算を実行してネットワークと同期する必要があります。このアプローチは非常に高価であり、使用できる範囲を大幅に制限します。しかし、ArweaveのSCPでは、計算に必要なデータの量だけを永久に保存するための料金のみを支払い、計算には料金がかかりません。ArweaveのSPoRA(Succinct Proof of Random Access)と呼ばれる超効率的なコンセンサスロジックにより、ストレージコストは非常に安価になります。このユニークなアプローチにより、大規模な計算とデータストレージが必要な分散型アプリケーションを構築するための理想的なプラットフォームとなっています。


SCPはブロックチェーンノードからクライアント側に計算をオフロードする一方で、この新しいパラダイムはパフォーマンスとスケーラビリティの問題を引き起こします。遅延評価は高価な計算のボトルネックに対するエレガントな解決策のように思えるかもしれませんが、クライアントdappにとっては重大な非効率性と負担を引き起こす可能性があります。


例えば、ある契約に対して100万件のトランザクションがある場合、クライアント側はすべてのトランザクションをダウンロードし、計算してキャッシュを構築し、最新の状態を取得する必要があります。このプロセスは、dappを使用する前にすべてのクライアントで繰り返される必要があります。これには数分または数時間かかる場合があり、ユーザーエクスペリエンスに大きな影響を与える可能性があります。

WeaveDB gRPC ノード

パフォーマンスとスケーラビリティの向上のために、クライアント側からの負荷を取り除き、データベースの使用をさらに最適化するための gRPC ノードを開発しました。最適化とハックの層を経て、読み取りクエリのパフォーマンスは10〜20ミリ秒、書き込みクエリのパフォーマンスは30〜50ミリ秒という驚異的な速度を実現しました。これは、dapp 開発者にとって大幅な改善であり、Warp のスマートコントラクトの最終性能よりもさらに高速です。

最初のステップは、パフォーマンス向上のためにクライアント側から計算を取り除くことでした。しかし、計算を取り除いた後でも、読み取りにおいては約1秒、書き込みにおいては約4秒という比較的遅いクエリ速度が残りました。これは、スマートコントラクト上に構築された一部の dapp には十分かもしれませんが、Web2 バックエンドソリューションへの代替手段を提供したいと考えました。この目標を達成するために、私たちはさらなるアイデアを出し合い、クエリ速度を改善するためのさまざまなハックを実装しました。


仮想ステート

Warp SDKの遅い速度は、遅延評価の性質によるもので、最新のステートを返すかスマートコントラクトに書き込む前に少なくとも1つのHTTPコールが必要です。トランザクションの正当性を確保するために、SDKは現在のステートをチェックし、新しいステートを書き込む前にdryWriteを実行します。このステップは重要であり、トランザクションがコミットされたときにスマートコントラクトは何も評価しないため、無効なトランザクションの蓄積を防ぎます。

ステートのチェックの必要性をなくすために、各ノードで仮想ステートを維持する仕組みを作成しました。このリアルタイムなステートには未コミットのトランザクションが含まれており、Warpシーケンサーからのパブ/サブ通知とクラウドのRedisキャッシュを介して更新されます。その結果、WeaveDBの仮想ステートは現在のWarpブロックよりも多くのコミットを進んでいるため、最新のステートのチェックを完全に削除することができます。仮想ステートには誤った結果が返される場合があるかもしれませんが、パブ/サブの更新を介して実際のステートによって1〜3秒以内に不一致が解消され、元に戻されます。

さらに、ノード間の競合をなくすために、リレーアと呼ばれるスーパーバッチクエリのソリューションを実装する予定です。WeaveDBは、WarpのL2ソリューションであるArweaveのL3ソリューションになる可能性があると考えています。実際、さらなる分散化を実現するために、現在、独自のL3ブロックチェーンの構築を検討しています。

Redis ステートキャッシュ

各ノードのローカルキャッシュレイヤーを Redis に置き換え、高速なノード間同期を可能にし、最新の検証済みスナップショットからのノードの迅速な起動と回復を実現するために、スナップショットインベントリを実装しました。さらに、WeaveDB の契約は、連鎖された有効なトランザクション ID のハッシュを使用してヘルスチェックができます。

WeaveDBはWeaveDBノードを管理します

すべてのノード操作を調整するために、私たちはWeb2インフラストラクチャの置き換えとWeb2クラウドデータベースの導入を避けるというビジョンを維持することを目指しました。その代わりに、WeaveDBインスタンスを利用してノードを管理しました。これには、オンチェーンのWeaveDBインスタンスを使用し、ノード間の内部通信を処理するためのオフチェーンバージョンのWeaveDBを開発することが含まれています。このセットアップにより、Arweaveに状態をバックアップすることなくWeaveDBを使用することが可能になり、開発時のテストにおいて重要なUXの改善が提供されます。さらに、オフチェーンのWeaveDBにより、仮想状態メカニズムを実現することができます。WeaveDBノードはWeaveDB自体によって自律的に管理されるため、これは本当に素晴らしいことです!

これらの最適化がすべて実施されたことにより、WeaveDBの書き込みクエリの速度はノードまでの距離を加えて30〜50msになりました。これは、Web2クラウドデータベースソリューションの速度と比較して、場合によってはそれ以上の速度です。これらの改善により、ユーザーは遅いクエリがユーザーエクスペリエンスに影響を与えることを心配することなく、Web2データベースをWeaveDBで置き換えることができます。

チェーン上で生成されるキャッシュ戦略

さらなる最適化のためのアイデアがあります。データとのやり取りを最速で行う方法の1つは、Redis KVキャッシュを介して行うことです。これは1msで20Kのクエリを処理できます。Redisキャッシュのみを使用してユーザーとやり取りすることができれば、クエリの速度は1ms以下になります。WeaveDBにはすでにオンチェーンのインデックス作成機能が組み込まれており、データの更新後のインデックスの差分に基づいた効率的なキャッシュ構築戦略が依存しています。つまり、WeaveDBに最も効率的なキャッシュ戦略を組み込み、オンチェーンで組み込むことができます。

スマートコントラクト内のKVストレージによる無制限のスケーラビリティ

Arweaveスマートコントラクトのスケーラビリティは、すべてをコントラクトの状態として保存することによって制限されています。これはArweaveに特有のものではなく、コントラクトの状態が非常に高価な多くの他のブロックチェーンで共通の問題です。データベース全体を1つの大きなコントラクトの状態として保存することは移植性がなく、小規模な操作に対して大量の帯域幅を浪費します。これに対処するため、Warpチームは解決策を開発し、WeaveDBはすべてをコントラクトの状態として保存する代わりに、内部でローカルなKVストレージを使用するように移行しています。

実験的なWarpの実装により、スマートコントラクトロジック内でKVストレージを使用することが可能になり、スケーラビリティの面で重要な進展です。まず、小規模な計算を実行する際にデータベース全体をロードする必要がなくなります。また、KVストレージの機能は単にgetputのインターフェースであり、インターフェースを実装するために使用される実際の技術は、状態の決定論を損なうことなく何でも使用できます。たとえば、levelDBLMDBなどのシンプルなローカルストレージソリューションを使用することもできますし、スーパーコンピュータを使用して完全に分散化されたハイパースケーラブルなソリューションを構築することもできます。これにより、事実上無制限のスケーラビリティが実現できます。

WeaveDBは、内部のデータストレージロジックをKVストレージと連携するための重要な進展を遂げており、Warpチームが準備ができたら新しいスケーラブルなバージョンのWeaveDBのリリースを心待ちにしています。現在、外部コントラクトの読み書きに制限があり、WeaveDBの一部の機能が制限され、組み合わせ可能性が無効になっています。しかし、これらの問題はWarp側で解決されると確信しており、WeaveDBが最新のWarpのアップデートと完全に互換性があるように積極的に取り組んでいます。

Litプロトコルを使用したクロスチェーンデータリレータ

WeaveDBの印象的なパフォーマンスとスケーラビリティにもかかわらず、さらなる強化を追求しています。Arweaveは永続的なデータの保存に優れていますが、トークンやNFTなどの他のタイプの状態を処理する能力は劣っています。そのため、Arweaveスマートコントラクトが他のブロックチェーンやWeb2 APIエンドポイントからの状態と安全にやり取りし、組み合わせることができれば非常に有益です。

この課題に対処するため、Litプロトコルを使用したリレーターソリューションを開発しました。これにより、Arweaveスマートコントラクト環境の外部からの任意のデータをWeaveDBにブリッジすることができます。このプロセスには4つのステップがあり、なぜそれが機能するのかを説明するのに役立ちます。

出力テキスト

シンプルなリレーア

外部データをブリッジするために、最初に取ったステップは、リレーアメカニズムを開発することでした。WeaveDBの認証とアクセス制御は、暗号化にのみ依存し、中央集権的なコンポーネントは関与しません。ただし、外部データを安全に取り込むためには、ユーザーの署名だけに頼るだけでは十分ではありません。なぜなら、システムはユーザーを信頼することができないからです。リレーアは、ユーザーがリレーアを信頼している場合に、ユーザーの書き込みクエリに追加のデータを追加することができます。WeaveDBは、データの更新を処理するために、ユーザーとリレーアの両方の署名を検証します。ただし、このアプローチは中央集権的であり、データの正確な処理にはリレーアへの信頼が必要です。

マルチシグリレーヤー

信頼性のあるリレーヤーの問題を解決するために、WeaveDBはマルチシグリレーヤーメカニズムを開発しました。このメカニズムは、複数のバリデーターからの署名を集約して分散化と信頼性を実現します。しかし、リレーヤーの分散化はどのネットワークにおいても大きな課題です。

Ethereum NFTを使用したリレーヤーダップの例

EIP712の署名を使用したリレーヤーの動作例として、デモダップではまずリレーヤーがEthereum NFTの所有権を検証し、その後所有者のアドレスを書き込みクエリに追加することで、WeaveDB契約に書き込むことができるのはNFTの所有者のみです。

このチュートリアルに従ってデモダップを試すことができます。

PKPとLitアクション

信頼性のあるリレーアドレスの課題に対処するために、Litプロトコルを使用したより安全なソリューションを採用しました。Litプロトコルを使用することで、実行ロジックを検証し、複数のバリデータを持つ分散リレーアドレスの必要性を排除することができます。

Litプロトコルは、閾値暗号を使用して、プライベートキーを複数のパーティに分割し、過半数(2/3)の合意によって署名を生成することを要求します。このメカニズムは、Litアクションと呼ばれるIPFSに格納された不変のスクリプトと、[プログラマブルキーペア(PKP)](https://developer.litprotocol.com/coreConcepts/LitActionsAndPKPs/PKPs)と呼ばれるものと組み合わされます。Litネットワークのバリデータは、Litアクションを[アクセス条件](https://developer.litprotocol.com/coreConcepts/accessControl/intro)と組み合わせて実行し、異なるチェーンからのロジックの任意の組み合わせやWeb2 APIを使用した任意のロジックの検証を可能にします。Litプロトコルにより、WeaveDBリレーアドレスは個々のリレーアドレスではなく、ネットワークレベルで分散化されるようになりました。

PKPはERC721契約によって管理されており、特定のPKPに関連するNFTの所有者が、プライベートキーの使用先をipfsハッシュへのアクセスを許可することで制御します。NFTとIPFSスクリプトの両方が不変であり、オンチェーンで検証可能であるため、検証可能なブリッジの実現に一歩近づいています。ただし、まだPKPを制御するNFTの所有者に対して信頼する必要があります。

NFTの作成/付与/破棄

Lit Protocolは信頼性の問題に対する解決策を提供しています。スマートコントラクトの関数mintGrantAndBurnNextを使用すると、NFTを作成し、PKPにIPFSスクリプトへのアクセス権を付与し、NFTを破棄して所有権を放棄することができます。これにより、PKPの所有者が存在せず、PKPはブロックチェーンに記録された特定のIPFSの場所に格納された特定の不変のスクリプトのためにのみ署名を生成できるようになります。その結果、PKPを使用して署名を検証でき、実行された特定のスクリプトによってPKPが生成する署名を信頼できるようになります。

これにより、WeaveDBが外部データをArweaveに検証可能な方法で取り込む4つのステップのプロセスが完了します。

Lit Protocolによるデータの暗号化

Lit ProtocolはWeaveDBにさらなる重要な機能であるデータの暗号化を提供しています。WeaveDBリレーサーとLit Access Conditionsを組み合わせることで、WeaveDBは暗号化されたデータを保存し、他のブロックチェーンの状態を含む柔軟な条件を使用して読み取りアクセスを管理することができます。


NFT保有者がプライベートメッセージを送信できるようにする、チュートリアルとサンプルのdappを提供しています。

Lens Protocolのネイティブ統合

WeaveDBリレーサーは、さまざまなクロスチェーンの組み合わせオプションを提供しています。その潜在能力を効果的に示すために、Lens ProtocolをWeaveDBのコアコントラクトに統合し、Lens Profilesを第一級の市民として扱っています。ユーザーはLens Profile NFTで認証し、WeaveDBはトークンIDを認可されたアカウントとして扱い、WeaveDBに書き込むことができます。Lit Actionはリレーサーとして、PKPによる署名によってユーザーがLens Profileの所有者であることを確認します。

この統合には重要な意味があります。多くのdappは、現在は完全に分散化されていないと主張しています。これは、アプリのロジックについては技術的に中央集権化されたコンポーネントの使用が必要だからです。これは、オンチェーンのインデックス作成が非常に困難で実用的ではないためです。何らかの理由で中央集権化されたコンポーネントを失うと、dappは動作を停止します。なぜなら、アプリのロジックレイヤーが失われるからです。

WeaveDBはこの問題に対処しています。WeaveDBには、組み込みのオンチェーンのインデックス作成が付属しているため、WeaveDBを使用してdappを構築すると、dappはアプリのロジックをいかなる方法でも失うことなく永遠に存在します。それは永久に誰でもアクセスできるように永久に保存されます。さらに、WeaveDBには組み込みのクロンジョブ機能もあります。ロジックが契約で定義されると、そのタスクはロジックによって別の指示があるまで、追加のトランザクションを作成することなく自動的に永遠に実行され続けます。これは、タスクを実行し続けるために定期的なトランザクションを行う必要がある他の分散化/中央集権化ネットワークとは異なります。

高速なLens Demo Dappはこちらでお試しください。

Bundlrを使用した大容量データのアップロード

dappを構築する際、大容量のメディアファイルを直接データベースに保存することは望ましくありません。しかし、それらをストレージに保存し、データベースにメタデータを保存してリンクすることはできます。たとえば、Arweaveに画像を保存する場合、トランザクションIDをWeaveDBに保存し、それらをdappで一緒に使用することができます。ただし、クライアント側のコードだけでは実際にはできません。なぜなら、クライアントが正しいトランザクションIDを保存することを信頼することはできないからです。この目的にはWeaveDBリレーサーを使用できます。リレーサーに画像をアップロードさせ、トランザクションIDを取得し、書き込みクエリと一緒に保存することができます。このロジックが不変のLit ActionスクリプトとPKPによって検証可能であれば、Arweave上のメディアファイルをdappのロジックに安全にバインドすることができます。



大容量データのアップロードにはBundlrの統合があり、チュートリアルとデモdappはこちらで提供されています。

AIの統合

WeaveDBは既にWeb2のようなパフォーマンス、無制限のスケーラビリティ、およびクロスチェーンの機能を備えていますが、それ以上何が必要でしょうか? まあ、もう一つあります:AIの統合です。 ビッグデータ分析などではなく、dappビルダーとしてのAIのことを言っています。 chatGPTGitHub Copilotを試したことがありますか? AIにコードを与えると、AIは実際に人間の開発者よりも優れたロジックを瞬時に書くことができます。 現在のOpenAIのものは、これからのものの原始的なバージョンに過ぎません。 AIはSolidityが比較的シンプルな言語であるため、完全なSolidityスマートコントラクトさえ書くことができますし、AIなら通常の人間の開発者よりもコントラクトをより安全にすることができると確信しています。

私は人間の開発者が5年後にdappを構築する主要な力になるとは思いません。 WeaveDBではAIを実験しており、AIはわずか1分程度で契約の包括的なユニットテストを書くことができますが、それにはそれ以外に数日または数週間かかるかもしれません。

WeaveDBの最大の強みは、FPJSONという関数型プログラミングユーティリティを使用して、どんなレベルの高度で複雑なロジックでも構築できる能力です。 FPJSONは、RamdaJSに触発された関数型プログラミングに基づいており、おそらくHaskellに触発されたものです。 安全なアクセス制御ルールやデータ検証ロジックを構築することは非常に複雑です。おそらくそれがなぜ確定的な分散型DBソリューションが存在しないのかもしれません。 しかし、WeaveDBはJSONで関数型プログラミングを導入することでこれを解決し、スマートコントラクトの状態として保存し、他のロジックと組み合わせることができます。 FPJSONは、トランザクションをコミットせずに契約の状態を定期的に更新する自律型クロンジョブの背後にある魔法です。

このアプローチは非常にAIに対応しています。 現時点では、WeaveDBで高度なロジックを構築することは少し難しいかもしれませんが、WebコンソールにchatGPTを統合する予定ですので、1分以内に高度なWeaveDBインスタンスをセットアップすることができます。 NoCode開発のUXよりもはるかに快適になるでしょう。 時間の経過とともに、WeaveDBの上に高度な知能を構築し、dappの開発を加速することを目指しています。

WeaveDBはAIをスマートコントラクトと統合します。

(内緒話ですが、この記事は私の下書きを元にchatGPTが書いたものです...)

Lit / Lens Integration Demo and Workshop at ETHDubai

Lit / Lensの統合を紹介するシンプルなデモdappをご用意しました。 Litのおかげで、LensプロファイルNFTを使用してdappにサインインし、タイムラインにメッセージを投稿することができます。

デモdappはhttps://relayer-lens-lit.vercel.app/でご覧いただけます。 クエリの速度を体験してみてください。

私たちは3月15日と16日にETHDubaiで講演とワークショップを行います。 ワークショップでは、このdappをわずか30分で構築する方法をデモンストレーションします。

16日のワークショップに参加することで、近日公開予定のマネージドノードサービスのホワイトリストに登録されます。 このサービスを利用すると、WeaveDBの契約をデプロイし、高速なクエリ速度でエンドポイントを使用することができます。

WeaveDBについて学ぶこの機会をお見逃しなく。

皆さんにお会いできることを楽しみにしています!

この記事が気に入ったらサポートをしてみませんか?