Zcash ウォレットの同期
TL;DR
- シールドされた Zcash トランザクションは詳細を隠すため、サーバーは Bitcoin や Ethereum のような透明なコインの場合のように、単純にウォレット残高を検索できません。
- ライトウォレットは、専用サーバー(lightwalletd)から小さな「コンパクトブロック」をダウンロードし、関連データを自分の秘密鍵で復号します。
- これらのブロックの復号と処理には時間がかかるため、ウォレットは資金をより早く使えるよう、高速な同期方法を使用します。
- 注目すべきアプローチには、Warp Sync(YWallet)、Spend-before-sync(Zcash Mobile Wallet SDK V2)、Blaze Sync(Zecwallet)、提案されている DAGSync があります。
- これらの方法は一般に、より高速な同期のために追加のメモリまたは処理能力を必要とします。
基本的な説明
Zcash の同期の仕組み
Zcash は、未承認の第三者からトランザクションの詳細を保護するためにゼロ知識証明を使用します。このプライバシーにより、ライトウォレットはブロックチェーン全体をローカルに保存せず、必要な情報をサーバーに依存するため、同期が難しくなります。Bitcoin や Ethereum では、サーバーがブロックチェーンにインデックスを作成し、アカウントデータをすばやく返せます。しかし Zcash では、サーバーはトランザクションの詳細を確認できません。では、ライトウォレットはブロックチェーン全体を自らダウンロードして復号することなく、どのように残高と履歴を同期できるのでしょうか?
Zcash は複数のアプローチを組み合わせることでこの問題を解決しています。専用サーバーである lightwalletd はフルノードからデータをフィルタリングし、トランザクション識別に必要なものだけを保持します。このデータはコンパクトブロックと呼ばれ、元のブロックよりはるかに小さいものです。ライトウォレットはまず lightwalletd サーバーからこれらのコンパクトブロックをダウンロードし、その後、自身の秘密鍵で復号します。
こうしたコンパクトブロックであっても、特にブロックあたりのトランザクション数が多い場合、復号と処理には相当な時間がかかることがあります。そのため、ウォレットは同期を高速化し、可能な限り早く資金を使えるようにするためのさまざまな方法を使用します。
ビジュアル / たとえ
ブロックチェーンを、鍵のかかった箱でいっぱいの巨大な郵便室だと考えてみてください。透明なコインでは、郵便室の係員がラベルを読んで、どの箱があなたのものかをすぐに教えてくれます。Zcash ではラベルが隠されているため、ウォレットは鍵を使って静かに箱を自ら確認し、開けられるものを探さなければなりません。以下の同期方法は、そうした箱をより高速に確認するための異なる戦略です。
詳細解説
Warp Sync
Warp sync は YWallet の機能で、各コンパクトブロックを復号・処理する中間手順を省略し、最終結果に直接到達します。
これを実現するため、各手順を経ることなく最終結果を計算する数学と暗号技術を使用します。
Warp sync は毎秒数千ブロックを処理でき、通常の同期方法よりはるかに高速です。これにより、YWallet のユーザーは、アカウントに数十万件のトランザクションや受信ノートがあっても、高速で滑らかなパフォーマンスを享受できます。
この手順省略技術に加え、YWallet は複数のブロックを同時に処理でき、利用可能なハードウェア全体に負荷を分散して処理をさらに高速化します。
Warp Sync の詳細を読む
ここでは Warp sync を同期技術として説明しています。Ywallet 自体はすでにメンテナンスされておらず、Ironwood 向けに更新される予定もないため、現在インストールすべきウォレットではありません。
Spend-before-sync
Spend-before-sync は、Zcash Mobile Wallet SDK V2 の新機能で、完全なウォレット同期を待つことなく、ウォレットを開くとすぐに資金を使用できるようにします。この機能は、ウォレットの使用可能残高の検出を高速化し、ユーザー体験を向上させます。
Spend-before-sync は、lightwalletd サーバーからのブロックを非線形な順序で処理するコンパクトブロック同期アルゴリズムを使用します。つまり、次に進む前に1つのブロックが完全に処理されるのを待つ代わりに、ウォレットは少し多くのメモリと処理能力を使用して、ブロックチェーンの異なる区間をスキャンできます。通常は、古いブロックをダウンロード・処理する間に、新しいトランザクションを探すため別の範囲をスキャンします。最近の未使用ノートが見つかると、すぐに利用可能になります。
Blaze Sync
Zecwallet チームによって開発された Blaze sync は、最も高い最新ブロックから開始して逆方向に進み、ブロックチェーンをスキャンするライトウォレット向けの同期アルゴリズムです。
これにより、ウォレットは受信ノートより先に使用済みノートを見つけることができ、以前は未使用だったノートを完全な同期プロセスの完了を待たずに利用可能にします。
さらに、同期の構成要素、すなわちブロックのダウンロード、試行復号、witness の更新を互いに切り離して並行処理する Out-of-Order Sync を使用します。これにはより多くのメモリと CPU リソースが必要ですが、同期速度を5倍に向上させます。
DAGSync
DAGSync は、同期を高速化することで Zcash シールドウォレットのユーザー体験向上を目指す、提案中の同期アルゴリズムです。
これは、Zcash ウォレットにおけるノート、witness、nullifier 間の依存関係を表現するために、有向非巡回グラフ(DAG)を使用します。
DAG はノードとエッジで構成されるデータ構造であり、各エッジには2つのノード間の関係を示す方向があります。DAG には循環がないため、あるノードから開始してエッジをたどり、同じノードに戻ることはできません。
実用上の影響
興味深いことに、これらのメカニズムはすべて、Zcash Security が Scalable Private Messaging に関する投稿で提起した問題と、プライベート決済システムとの関係に対処することを目指しています。アドレス固有のデータを除くすべてのメモデータをサーバーからダウンロードすることで、わずかな追加リソースを代償にプライバシーを高める手法もあります。
また、Zcash Foundation はライトウォレットの性能を改善するため、他の代替案も検討しています。その一例が Oblivious Message Retrieval (OMR) です。これは、財団が「Zcash ウォレットユーザーに影響を与えている最近のパフォーマンス問題に対する潜在的な解決策となるかを判断するため」に研究している構成です。
よくある誤解
lightwalletd サーバーがあなたの残高を知っていると思い込むこと。 サーバーはコンパクトブロックを配信するだけであり、ウォレットが自分の鍵を使ってローカルでそれらを復号・解釈します。
同期を早すぎる段階で停止すること。 一部の方法では完全な同期が完了する前に最近の使用可能な資金を利用できますが、古い履歴やノートはまだ処理中である可能性があります。
Zcash の同期を透明チェーンの同期と直接比較すること。 同期経路が遅いことは、欠陥ではなくプライバシーを維持するためのコストである可能性があります。ウォレットは、パブリックコインのサーバーであればアカウントを公開して読み取ることで行う作業を、自ら実行しているのです。
関連ページ