WeaveDB - 分散型NoSQLデータベース on Arweave
独自に進化していて謎過ぎるという声を頂いたため、少し前からツイートしている分散型NoSQLデータベース『WeaveDB』について解説します。
英語での解説はこちらのMirror記事をご参照ください。
Introducing #WeaveDB Decentralized NoSQL DB on #Arweave☄️
— WeaveDB (@AsteroidDAO) September 16, 2022
It's #Firestore on smart contracts & a new paradigm for full-stack dapp development, which brings web2-like UX both to developers & users✨@warp_contracts @BundlrNetwork made this all possible🙌https://t.co/rIVTSFjgYC
TL;DR 長すぎて読めないという方へまとめ
- WeaveDBは簡単に言うとスマートコントラクト上で動くFirestoreみたいなもので、Web2のUXを開発者とユーザー両方に提供しフルスタックDapp開発に新しいパラダイムをもたらします。
- Arweave の Storage-based Consensus Paradigm と Warp SmartWeave contracts、そして Bundlr による即時 finality の組み合わせが WeaveDB を可能にしています。
- WeaveDB の特徴: クロスチェーン認証、自動署名、JSON的なシンプルなAPI、データインデックス、JSONベースの関数型プログラミングによるデータ検証とアクセスコントロールロジック構築、ビルトイン定期実行Cron、REPL、Webコンソール、gRPCノード、軽量クライアント
- 開発者のメリット: 一行コマンドで即時コントラクトデプロイ、スマートコントラクトを書かずに複雑なロジック構築、これまで不可能だったフルスタックDappsの開発、Javascript/Typescript、Rust、Goなど様々な言語でコントラクト開発
- ユーザーのメリット: トランザクション即時実行、クリプトウォレットによる逐次署名なし、Gasなし、Web2並のUXと多彩な機能、生体認証、自己データを完全所有
- Gitcoin GR15へのコントリビューションはこちら
SCP - Storage-based Consensus Paradigm
Arweaveブロックチェーンは分散型半永久ストレージでトランザクションが確定すると改竄不可能にデータが保存されます。この不変データが半永久保存される特性を利用するとコンピュテーションが常に決定論的(deterministic)になり完全にストレージから切り離すことができます。初期ステートと関数、そしてステートを変更していくために順番に関数実行するインプット値が全て不変永久的に保存されていたらどこで誰がこの計算をしても必ず同じ最終ステートに辿り着くはずだからです。言い換えると不変で永久的なストレージを活用するとコンピュテーションが決定論的になります。これがSCP(Storage-based Consensus/Computation Pradigm)と呼ばれる概念です。
そして、コンピュテーションがオフチェーンで成立すると実質的に計算コストが無料になり無限のスケーラビリティを可能にします。現状のブロックチェーンのパラダイムだとスケーラビリティにとっての最大のボトルネックはストレージとコンピュテーションです。なぜならこの二つがGasを消費する要素であり高価だからです。Arweaveはこれらのボトルネックを格安の不変永久ストレージと無限のオフチェーン計算で取り除くことができます。
SCPについてはeverPayの創始者である@outprog_eth氏の記事が参考になります。
Warp - SmartWeave Contracts
SmartWeaveは最初にArweaveで提案されたSCPの概念を活用したスマートコントラクトの統一仕様でした。Redstoneがそれをさらに発展させ、より堅牢なインフラを構築しそれをWarpと名付けました。WeaveDBはWarpスマートコントラクトとして書かれた分散型NoSQLデータベースです。Warpでは開発者はJavaScript/TypeScriptやRust、Go等様々な言語でコントラクトを書くことができます。Warpはシークエンサーやゲートウェイインデクサー、トランザクションエクスプローラーを搭載し、またWarp SDKによってコンピュテーションをクライアントサイドでオフチェーンに実行可能にします。同時にDENという分散型に計算を委譲できるノードのネットワークも構築し、コンピュテーションをクライアントサイドからも取り除こうとしています。
WarpスマートコントラクトについてはWarpアカデミーで詳しく学べます。
Bundlr - Instant Finality and Meta Transaction
BundlrはArweaveのトランザクションをシンプルにそして高速にするために構築された分散型ネットワークです。
Bundlrの果たす3つの大きな役割
- トランザクションのGasを他のチェーンのトークンで前払い可能に
- シンプルなAPIでトランザクションを即時処理し最終的なFinalityを保証する
- 即時処理されたデータをarweave.netから即アクセス可能にする
スマートコントラクトのトランザクションを処理するWarpのシークエンサーはBundlrを使って即時Finalityを実現しています。厳密に言うとArweaveブロックチェーンに不変永久データを保存するFinalityではありませんが、シークエンサーでスマートコントラクトを処理するFinalityにはなります。これはセキュリティの程度を置いておけば、Rollupがシークエンサーでトランザクションを処理して後でL1でのFinalityを保証する仕組みと似ているかもしれません。
また、Dappsのユーザーは$ARトークンを保有してトランザクションのGasを払う必要ありません。プロトコルやDappsの開発者が前払いすることができるからです。これは、メタトランザクションがユーザーからネイティブトークンを保有する必要性を取り除くのと似ているかもしれません。
WeaveDB - Firestore on Smart Contracts
分散型Firestoreをスマートコントラクトに載せるなど本当に可能なのか?
- 超格安半永久不変データストレージ
- 無制限オフチェーンコンピュテーション
- 即時Finalityと即時データアクセス
- Gasなしトランザクション
- 様々な言語でコントラクト開発可
Arweaveエコシステムの実現する素晴らしいアドバンテージをフル活用すれば可能です!
クロスチェーンクリプト認証
Arweaveのスマートコントラクトでは任意の言語で無制限のコンピュテーションが可能なのでArweaveはクロスチェーン認証のハブになることができます。WeaveDBはEVMベースのアカウント(secp256k1)とDFINITYのInternet Identity(ed25519)とArweaveの(RSA-PSS)の暗号技術を認証メカニズムに統合しました。
特にInternet Identityは端末を問わずかつブラウザー拡張機能や携帯アプリなしに生体認証ログインを可能にし、Web2のUXを実現するのに最適です。
自動署名
WeaveDBではトランザクションを作る度にクリプトウォレットが立ち上がって署名を要求される事はありません。Dappsにログインする時にユーザーは廃棄可能な一時キーペアを発行しそれをローカル端末のIndexedDBを使って安全な場所に保存します。さらにその一時アドレスを元のアドレスにWeaveDBコントラクト上で紐付けます。これによってそれ以降のトランザクションは廃棄可能な秘密鍵で自動署名されます。
Internet Identityに関しては、最初からそういう仕組みになっているので自動署名用の一時キーペアを発行する必要はありません。
FirestoreのAPIをシンプルにしたクエリ構文
以前FirebaseのSDKが関数をチェーンしてクエリを組み立てるAPIがJSのシンタックス依存で冗長な感じがしてあまり好きではなくFirestore Sweetというクエリをシンプルにするライブラリを作ったことがあります。全てのクエリをJSONのArrayとObjectで表現可能にし短く簡潔に書けるようにしました。そしてWeaveDBにも同じ精神を持ち込みました。ただ、WeaveDBはFirestoreができることはほとんどできるのに加え、暗号技術を使って更に色々な事ができます。
そしてこのJSONでクエリを表現できる構文が後で説明するパワフルなロジック構築するのに重大な役割を果たします。
データインデックス
フルスタックのDappsを開発する際に一番のボトルネックになるのがデータのインデックスです。既存のブロックチェーンでは分散型のインデックスをするのが不可能です。なので、この問題を解決するためにThe GraphやAPI3等が分散型インデックスやAPIのプロトコルを開発しています。
WeaveDBはこのデータインデックスを内臓しました。Firestoreと同じように単一フィールドでのインデックスは自動で、複数フィールドでのインデックスは任意に追加することができます。
データスキーマとアクセスコントロールのルール
分散型データベースは集権的データベースと似たような機能を持っていても全く違うものです。集権的データベースでは普通、書き込み権限を持つ管理者の認証をすればよいだけで管理者が間違ったプログラミングでデータをメチャメチャにしないこと保証すればよいだけです。
一方で分散型データベースはパーミッションレスにアクセス可能で誰もが任意の形のデータを書き込もうとすることができます。これを防ぐにはデータスキーマやアクセスコントロールのルールを詳細に設定する必要があります。
この問題を解決するためにJSON形式で関数型プログラミングができるFPJSONというプチプログラミング言語を開発しました。複雑なロジックをただのJSON Arrayとして表現することができます。JSONデータなので言語依存性が低く、簡潔でパワフルかつ言語別の独自構文に対するオーバーヘッドがありません。全てがJSONなので複雑なアルゴリズムをデータとしてスマートコントラクトのステートに保存することができます。250ほどのRamda関数を搭載していてJSONLogicと組み合わせてデータの検証とアクセスコントロールに超複雑なロジックも実装可能です。
FPSONのウェブサイトには開発者用の速習システムが搭載されています。
定期実行Cron
FPJSONと前述したJSONライクなクエリ構文、そしてArweaveスマートコントラクトの決定論的な特性というパワフルな組み合わせをすると定期実行するタスクをトランザクションを発生させずに実行することが可能になります。
一体全体どうしたらそんなことが成立するのでしょうか。
まず第一にデータベースのクエリと定期実行するロジックはJSONオブジェクトとしてスマートコントラクトのステートに保存可能です。
そして、SCPの概念を利用したコンピュテーションは常に決定論的です。一度定義されて保存されたCronタスクについて、WeaveDBはその計算をどこに差し込むべきか計算して割り出し、常に最新でリクエストされているクエリを実行する前に現在のタイムスタンプまでのcronタスクの定期計算を然るべき場所に差し込みながらコントラクトの最新ステートを自動計算することができます。
これはJSONをLispのような感じで使いマクロを定義して定期的に自動実行する仕組みをトランザクションを発生させずにスマートコントラクトに内蔵しています。
利用例を挙げると、デモで用意したソーシャブックマークDappでは、過去二週間にどの記事が人気だったかをCronで定期計算しています。定期実行にトランザクションは発生せず、一度定義されたCronが一生定期的に記事をランク付けし続けます。
REPLとWebコンソール
WeaveDBにはコマンドラインREPLとWebコンソールがローカル開発のために搭載されています。Webコンソールを使うと開発者はスマートコントラクトを書かずに複雑なロジックをWebのUI上でDBインスタンスの設定をするだけで構築できます。
WeaveDBはスマートコントラクト2.0でDapps開発の新しいパラダイムです。
gRPCノードと軽量クライアント
Web2と同じUXを提供するにはデータベースクエリは高速に処理される必要があります。SmartWeaveはコンピュテーションをクライアントサイドに持ってきますが、これは全てのユーザーがコントラクトの履歴をキャッシュとして持ち、全ての計算を実行する負担をすることになります。
Warpはこの問題を解決するためにDENという計算を代わりにやってくれる分散型ノードのネットワークを作っていますが、WeaveDBではデータベースに特化してさらにパフォーマンスを上げる別の計算レイヤーを開発しています。
開発者はgRPCノードを立ててそこにWeaveDBの軽量クライアントを接続することで、コンピュテーションとキャッシュをクライアントサイドか取り除くことができます。さらにgRPCノードは読み込みクエリを1秒以内に返信し書き込みクエリを3秒以内に実行します。
さらにWeaveDBではgRPCノードを使ってストリーミングでリアルタイムな相互接続を実装予定です。
開発者とユーザーに対するメリット
開発者
- ほぼリアルタイムのFirebaseライクなNoSQLデータベースをスマートコントラクト上で使える。これはArweaveで始めて可能になりました。
- DBコントラクトのデプロイがワンコマンドで即時でできる。また、DBインスタンスのアップグレードは同様にワンコマンドで即時でできる。
- スマートコントラクトを書かずして、JSONによるシンプルなロジック構築でWeb上のUIでDB設定をするだけで大抵のロジックは実現できる。
- Web2レベルの複雑性とスケーラビリティを持ったDappsを開発できる
- Javascript/Typescript、Rust、Go等の言語をスマートコントラクトの開発に使える
ユーザー
- DFINITYのInternet Identityとの統合は生体認証を様々な端末で可能にし秘密鍵管理を不要にする。また、メタマスクやArConnectでもログイン可能で廃棄可能な一時キーペアを使ってトランザクションを自動署名にできる。
- ArweaveとBundlrの仕組みによってDapps側がユーザーのGasをカバーできるのでアクションが無料になる。
- Bundlrによってトランザクションは即時処理されFinalityは保証される。
- Webでも携帯端末でもWeb2アプリのごとくDappsのレスポンス性が上がり機能も豊富になる。
- 自分のデータを完全に保有する。Dappsはパーミッションレスでトラストレスで検閲体制を持つような分散型設定にできる。
WeaveDBで開発できそうなもの
ユーザーと開発者の両者に大きなメリットを提供するWeaveDBは、Web2からWeb3へのマスアダプションを起こすのに需要な役割を果たすと考えています。
これまでフルスタックDappsとしての開発が不可能だったものが開発可能になったかも知れません。
- 分散型ブログ
- 分散型ウィキペディア
- 分散型ツイッター
- 分散型GitHub
- 分散型Reddit
他にも色々と実装可能なDappsが思い浮かびます。
リソース
フルスタックDappsを構築するのに必要な全てのコンポネントは既に開発済みです。ただし、WeaveDBはまだまだ開発初期段階なので沢山の改善が必要な事を留意してください。
GitHub Monorepo
https://github.com/weavedb/weavedb
Website
https://weavedb.dev
FPJSON
https://fpjson.asteroid.ac/
Sourceable Smart Contract
https://sonar.warp.cc/#/app/source/UR6tFLrjEdiujqQBTGEnyNYB7YUv3IkIJvNIiCiLCic
開発を始める
直ぐに開発を始める場合はTodoデモアプリのテュートリアルから始めると分かり易いかもしれません。
https://docs.weavedb.dev/docs/examples/todos
デモDappsを使ってみる
The Wall 2 on Internet Computer
https://xdiw4-hiaaa-aaaai-qnnbq-cai.ic0.app
(全てWeaveDBで開発)
Social Bookmarking with Mirror.xyz scan
https://asteroid.ac
(ブックマーク機能等、一部にWeaveDBを利用)
Gitcoin GR15
最後に、かなり終盤になってからの参加ですがGitcoinのGR15にWeaveDBが承認されました!
よろしければ、是非コントリビューションをお願い致します。Web3のマスアダプションを加速させましょう!
https://gitcoin.co/grants/7716/weavedb-decentralized-nosql-database