HiÐΞClassic

WeaveDB - 分散型NoSQLデータベース on Arweave

Tomoya
2 years ago
TL;DR 長すぎて読めないという方へまとめSCP - Storage-based Consensus ParadigmWarp - SmartWeave ContractsBundlr - Instant Finality and Meta TransactionWeaveDB - Firestore on Smart Contractsクロスチェーンクリプト認証自動署名FirestoreのAPIをシンプルにしたクエリ構文データインデックスデータスキーマとアクセスコントロールのルール定期実行CronREPLとWebコンソールgRPCノードと軽量クライアント開発者とユーザーに対するメリット開発者ユーザーWeaveDBで開発できそうなものリソース開発を始めるデモDappsを使ってみるGitcoin GR15

独自に進化していて謎過ぎるという声を頂いたため、少し前からツイートしている分散型NoSQLデータベース『WeaveDB』について解説します。

英語での解説はこちらのMirror記事をご参照ください。

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 GraphAPI3等が分散型インデックスや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

Docs
https://docs.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


コメント
いいね
投げ銭
最新順
人気順
コメント
いいね
投げ銭
最新順
人気順
トピック
アプリ

Astar Network

DFINITY / ICP

NFT

DAO

DeFi

L2

メタバース

BCG

仮想通貨 / クリプト

ブロックチェーン別

プロジェクト

目次
Tweet
ログイン