WeaveDB - Arweave上の分散型NoSQL DB
WeaveDBは、スマートコントラクト上の分散型Firestoreであり、web2のようなスムーズなUX、複雑さ、スケーラビリティをweb3のdappsにもたらします。開発者は、スマートコントラクトを書かずに、フルスタックのdappsのための複雑なロジックを構築することができます。
あなたは考えているかもしれません...それは本当に可能なのでしょうか?
まあ、私たちはこれがweb3の大規模な採用の最終目標であると確信しています。そして、Arweaveエコシステムのすべての美しいツールとインフラストラクチャとともに、それは既にここにあります!
TL;DR
WeaveDBは、FirestoreのようなNoSQL DBをスマートコントラクト上で使用し、ユーザーと開発者の両方にWeb2のようなUXをもたらす、Dapp開発の新しいパラダイムです。
Arweaveのストレージベースのコンセンサスパラダイムにより、Warp SmartWeaveコントラクトとBundlrインスタントファイナリティネットワークを使用して、これが可能になります。
WeaveDBの特徴:クロスチェーン認証、自動署名、JSONのようなシンプルなAPI、データインデックス、データの検証とアクセス制御のためのJSONベースの関数型プログラミング、組み込みのスケジュールされたcronジョブ、REPL、Webコンソール、gRPCノード、ライトクライアント
開発者向けの特徴:ワンラインでのインスタントコントラクトデプロイメント、スマートコントラクトを書かずに複雑なロジックの構築、以前は不可能だったフルスタックのスケーラブルなDappの構築、開発にはJavaScript/TypeScript、Rust、またはGoを使用
ユーザー向けの特徴:インスタントファイナリティ、暗号ウォレットでの署名不要、ガス不要、Web2のようなUXと多機能、生体認証、自分自身のデータを真に所有
SCP - ストレージベースのコンセンサスパラダイム
Arweaveブロックチェーンは、トランザクションが確定されると不変な分散型永続ストレージです。この不変な永続性により、計算はストレージから完全に分離され、決定論的になります。初期状態、関数、および関数を順次実行するための一連の入力値がすべてArweave上で永続的かつ不変に保存されている場合、計算を実行する場所に関係なく、最終状態を計算する人は常に同じ結論に達するはずです。言い換えれば、不変な永続ストレージがあれば、計算は常に決定論的になります。これがストレージベースのコンセンサス/計算パラダイム(SCP)と呼ばれるものです。
さらに、計算をオフチェーンに移すと、ほとんどコストがかからず、無制限のスケーラビリティが可能になります。現在のブロックチェーンパラダイムでは、スケーラビリティのための最も重要なボトルネックは、ストレージと計算です。なぜなら、これらがガスを消費し、高価なものだからです。Arweaveは、超安価な不変な永続ストレージと、ストレージから分離された無制限のオフチェーン計算により、これらのスケーラビリティのボトルネックを解消することができます。
SCPについては、everPayの創設者である@outprog_eth氏による記事を読むことができます。
Warp - SmartWeaveコントラクト
SmartWeaveは、SCPのアイデアを実現するための最初の統一仕様でした。その後、RedstoneはArweaveスマートコントラクトの堅牢なインフラを構築するためにさらに進化させ、それをWarpと呼びました。WeaveDBは、Warpスマートコントラクトとして書かれた分散型NoSQLデータベースです。Warpは、JavaScript/TypeScript、Rust、Goなど、任意の言語を使用してスマートコントラクトを記述できるようにすることを目指しています。彼らはシーケンサ、ゲートウェイインデクサ、トランザクションエクスプローラ、Warp SDKを持っており、スマートコントラクトの計算をクライアント側でオフチェーンにもたらすと同時に、DENと呼ばれるノードの分散型ネットワークを構築して、クライアント側から計算を除外しています。
Warp Smart Contractsについては、Warp Academyで詳しく学ぶことができます。
Bundlr - インスタント・ファイナリティ・メタ・トランザクション
Bundlrは、トランザクションをよりシンプルかつ高速にするためのArweave上の分散型ネットワークです。
Bundlrがもたらす3つの主な改善点
Bundlrは、異なるチェーンのトークンで事前にトランザクション手数料を支払うことができます。
Bundlrは、シンプルなAPIでトランザクションを即座に処理し、後でファイナリティを保証します。
Bundlrは、データを即座にアクセス可能にします。arweave.netを介してアクセスできます。
スマートコントラクトのトランザクションを処理するWarpシーケンサは、Bundlerを使用して即時のファイナリティを実現しています。技術的には、ブロックチェーン上のデータストレージに対してファイナリティとは言えませんが、シーケンサではスマートコントラクトの処理に対して即時のファイナリティがあります。これは、L2ロールアップがシーケンサとL1での後でのファイナリティと同様のアナロジーを持っていると言えます(セキュリティの仮定を除く)。
Dappのユーザーは、トランザクションを行うために$ARトークンを支払う必要はありませんが、プロトコルまたはDappの開発者が事前に支払うことができます。これは、メタトランザクションがエンドユーザーからネイティブトークンの必要性を取り除くのと同様です。
WeaveDB - スマートコントラクト上のFirestore
Arweaveエコシステムがもたらすすべての利点を考えると、Web2のようなUXを実現するための分散型Firestoreは可能でしょうか?
超安価な不変な永続ストレージ
無制限のオフチェーン計算
出力テキスト
インスタントな確定性とデータのアクセス性
ユーザーに対するガス料金は不要(DAppsが前払い)
スマートコントラクトを書くためのどんなプログラミング言語でも可能
もちろん、可能です!すでに開発者が必要とするすべてを構築しています。
クロスチェーン暗号認証
Arweaveのスマートコントラクトは、どのプログラミング言語でも無制限の計算が可能なため、Arweaveはクロスチェーン認証のハブとなることができます。私たちは、EVMベースのアカウント(secp256k1)、DFINITY Internet Identity(ed25519)、およびArweave(RSA-PSS)の暗号技術を認証メカニズムに統合しました。
Internet Identityは、ブラウザの拡張機能やモバイルアプリを必要とせず、どのデバイスでも生体認証を提供するため、Web2のようなユーザーエクスペリエンスに最適です。
自動署名
WeaveDBを使用すると、取引には暗号ウォレットを使用した署名が必要ありません。Dappにサインインする際、ユーザーは安全な場所に使い捨てのキーペアを作成し、ローカルのindexedDBに保存し、WeaveDBで使い捨てアドレスを元のアドレスにリンクさせます。その後の取引は、使い捨ての秘密鍵によって自動的に署名されます。
Internet Identityでは、使い捨てキーペアを自動的に署名する必要はありません。すでにそのように機能しています。
シンタックスシュガーを備えたFirestoreライクなAPI
かつて、私は個人的にFirebase SDKが関数を連鎖させてクエリを構築している方法に好感を持っていませんでした。それは冗長で冗長でJavaScriptに依存しているように感じられましたので、私はFirestore Sweetというシンタックスシュガーを作成しました。これにより、すべてのクエリを単なるJSON配列やオブジェクトとして表現することができ、より短くシンプルになります。私たちは同じスピリットをWeaveDBにも取り入れていますが、WeaveDBはFirestoreができることのほとんどを暗号化を使ってさらに多くのことができます。
そして、このJSONのようなクエリ構文は、後のセクションで説明される強力なロジック構築において重要な役割を果たしています。
データインデックス
フルスタックのdappを構築する際の最大のボトルネックは、データインデックスです。通常のブロックチェーンでは実現が困難です。そのため、The GraphやAPI3など、多くのプロトコルがインデックスの解決策を模索しています。
しかし、私たちはデータインデックスを組み込みました。WeaveDBは、Firestoreと同様に単一フィールドでデータを自動的にインデックス化し、Firestoreと同様に複数フィールドのインデックスを追加することができます。
データスキーマとアクセス制御ルール
分散型データベースは、機能は似ているものの、集中型の対応とは非常に異なります。集中型のDBでは、通常、編集者の役割を持つ数人の認可されたユーザーに対して、通常は1つのゲートウェイ認証のみが存在します。プログラムの不具合によるデータの破損を防ぐため、データとアクセスに関する詳細なルールを定義する必要はありません。
一方、分散型のDBは許可なくアクセスでき、誰でも不正なデータを書き込むことができます。そのため、データスキーマとアクセス制御ルールに対して総合的な制御を設定する必要があります。
この問題を簡単な解決策で解決するために、私たちはFPJSONというJSONベースの関数型プログラミング言語を開発しました。これは単なるJSON配列ですが、関数型プログラミングで複雑なロジックを記述することができます。言語に依存せず、シンプルでありながら強力で、オーバーヘッドもありません。これにより、すべてがJSONデータオブジェクトであるため、複雑なアルゴリズムをスマートコントラクトの状態として保存することができます。250のRamda関数が搭載されており、JSONLogicとも組み合わせて、データの検証とアクセス制御に対する超複雑なロジックを構築することができます。
FPJSONのウェブサイトには、開発者向けのクイックラーニングシステムが付属しています。
スケジュールされたCronジョブ
FPJSONとJSONのようなシンプルなクエリAPIの強力な組み合わせと、Arweaveスマートコントラクトの決定論的な性質により、定期的にトランザクションを送信して実行する必要なく、スケジュールされたCronジョブを実行することが可能です。
えっ!?それってどういうこと?
まず、DBクエリと実行するためのロジックは、JSONオブジェクトとして表現し、スマートコントラクトの状態として保存することができます。
さらに、SCPによる計算は常に決定論的であるため、一度Cronジョブが定義されて保存されると、WeaveDBはCron計算を挿入する場所を特定し、最新のクエリの実行前に現在のタイムスタンプまで自動的に実行することができます。
これは基本的にはLisp(ただしJSON)のようなものであり、トランザクションなしでスマートコントラクト上で定期的に自動実行されるマクロを定義することができます。
たとえば、私たちのソーシャルブックマークデモDappでは、過去2週間でトレンドになっている記事を自動的に計算するためにCronジョブを使用しています。ただし、トランザクションは必要ありません。Cronジョブは一度定義され、記事のランキングを永遠に定期的に行います。
REPL & Webコンソール
WeaveDBには、コマンドラインのREPLとWebコンソールが付属しています。Webコンソールでは、スマートコントラクトを書かずに、複雑なロジックをdappのために構築することができます。Web UI上でDBインスタンスを設定するだけです。
WeaveDBは、スマートコントラクト2.0であり、dapp開発の新しいパラダイムです。
gRPCノードとライトクライアント
Web2のようなUXを提供するためには、DBクエリを非常に高速に処理する必要があります。SmartWeaveは計算をクライアント側に持ってきますが、これは各クライアントが契約の完全なキャッシュを構築する必要があり、計算がクライアント側に負担となります。
Warpはこの問題を解決するために委任評価ネットワーク(DEN)を開発していますが、私たちはdappユーザーのパフォーマンス向上を実現するために、さらに別の計算レイヤーを構築しています。
gRPCノードを設定し、WeaveDBライトクライアントで接続することで、クライアント側から計算とキャッシュを削除することができます。これにより、読み取りクエリの実行時間を1秒未満、書き込みクエリの実行時間を3秒未満に短縮することができます。
また、gRPCノードを使用してリアルタイムストリーミング通信を実装する予定です。
ユーザーと開発者の利点
開発者向け
FirestoreのようなほぼリアルタイムのNoSQLデータベースを、スマートコントラクト上で利用することができます。これはArweave以外のどのブロックチェーンでも実現できませんでした。
契約の展開は、1つのシンプルなコマンドで即座に行われます。また、DBインスタンスは同じ方法で進化(アップグレード)することができます。
ほとんどのロジックについては、スマートコントラクトを書く必要はありません。単にJSONベースのシンプルなロジック構築で、DBをウェブUI上で設定するだけです。
Web2のようなデータの複雑さとスケーラビリティを持つdappsの構築が可能です。
Warpスマートコントラクトのさらなる開発には、Javascript/Typescript、Rust、またはGoを使用することができます。
ユーザー向け
Dfinity Internet Identityとの統合により、どんなデバイスでも生体認証が可能になり、秘密鍵の管理が不要になります。MetaMaskとArConnectでもサインインでき、セッション中に自動署名トランザクション用の使い捨て鍵ペアが作成されます。
ArweaveとBundlrを使用することで、dappsはトランザクションのガスをカバーし、アクションは無料です。
Bundlrのおかげで、トランザクションは即座に処理され、後で確定されます。
dappsは、web2アプリと同様に、ウェブとモバイルデバイスの両方で非常に応答性があり、多機能です。
データはあなただけが所有し、制御します。また、dappsは設定によっては許可なく、信頼性がなく、検閲に対しても耐性があります。
WeaveDBで作成できるもの
WeaveDBは、開発者とエンドユーザーの両方に大きな利益をもたらすため、Web2からWeb3への採用において重要な役割を果たすと考えています。
WeaveDBを使用することで、以前はフルスタックのDAppとしては不可能だったものが可能になりつつあります。
分散型ブログ
分散型ウィキペディア
分散型Twitter
分散型フォーラム
分散型GitHub
分散型Reddit
なんでもあります!
リソース
DAppを構築し、ローンチするために必要なすべてがすでにここにあります。ただし、WeaveDBはまだ初期段階であり、改善がたくさん必要です。
GitHub Monorepo
https://github.com/weavedb/weavedb
ウェブサイト
https://weavedb.dev
ドキュメント
https://docs.weavedb.dev
FPJSON
https://fpjson.asteroid.ac/
ソース可能なスマートコントラクト
https://sonar.warp.cc/#/app/source/UR6tFLrjEdiujqQBTGEnyNYB7YUv3IkIJvNIiCiLCic
ビルドを開始する
todo dappチュートリアルに従って、dappのビルドを開始することができます。必要なものはすべてそこにあります!
https://docs.weavedb.dev/docs/examples/todos
またはデモDappsを試す
インターネットコンピュータ上のThe Wall 2
https://xdiw4-hiaaa-aaaai-qnnbq-cai.ic0.app
(このDapp全体はWeaveDBです。)
Mirror.xyzスキャンによるソーシャルブックマーク
https://asteroid.ac
(ブックマーク機能にはWeaveDBが一部使用されています。)
Gitcoin GR15
パーティーには少し遅れてしまったかもしれませんが、WeaveDBはGitcoin GR15で承認されました!
どんな貢献でも大歓迎です!Web3の大規模な普及を実現しましょう!
https://gitcoin.co/grants/7716/weavedb-decentralized-nosql-database