Lightning LabsのNeutrino

Neutrinoっていう言葉はややこしい。日本にあるブロックチェーン特化のコワーキングスペースもこの名前で。なんで好まれるんだろうか。
日本の小柴さんがノーベル賞とってるし。

wikiによると、

ニュートリノ(英: neutrin)は、素粒子のうちの中性レプトンの名称。中性微子(ちゅうせいびし)とも書く。電子ニュートリノ・ミューニュートリノ・タウニュートリノの3種類もしくはそれぞれの反粒子をあわせた6種類あると考えられている。ヴォルフガング・パウリが中性子のβ崩壊でエネルギー保存則と角運動量保存則が成り立つように、その存在仮説を提唱した。「ニュートリノ」の名はβ崩壊の研究を進めたエンリコ・フェルミが名づけた。フレデリック・ライネスらの実験により、その存在が証明された。

さっぱりわからない。

Lightning LabsのNeutrino

これはSPV nodeの亜種だと思うけど、特徴がある。

以前のコンセプト(BitcoinのBIP 37ブルームフィルタなど)では利用できなかったセキュリティとプライバシーを提供します

とある。ここで言う“light clients”はSPVのことを指す気がするけれど、だとすると確かにセキュリティとプライバシーには課題がある。

まずはさわりから理解しようと思って、Lightning Labsのブログを眺めている。

SPV walletと比較した優位性

The challenge for decentralized mobile Bitcoin apps is to take bitcoin’s global transaction history (currently approx. 200 GB) and quickly extract only the transactions relevant to an individual user. In addition, a successful mobile app must provide security, privacy, and a high-quality user experience.

そう、これがSPVの課題。

Neutrino includes new safeguards for resolving conflicting transaction information

トランザクションのダウンロードに新しい保護機能を追加した、と述べている。ここが根本的な優位性だろう。

The Neutrino protocol requires less computation on the part of Bitcoin full nodes because filters sent to Neutrino clients must be computed only once for all Neutrino users. Under the older SPV/BIP 37 protocol, full nodes compute different results for each client user, which can be a significant computational burden if a full node is serving many mobile clients

フルノードへの計算量を下げ、スケーラビリティに貢献すると。既存のBIP37プロトコルにおいては、フルノードは各クライアントに計算を割かなければならなかったが、接続するクライアントが増えると計算量が膨大になる。しかも無料で!

How it works

とりあえず、得られる結果としては、

this approach, information that directly identifies a user’s addresses is never sent over the network, and the matching between the blockchain and the user’s wallet is done by the user’s software rather than by an untrusted, remote node as is the case with BIP 37.

BIP37で定義されたものと比較して、ユーザを特定できるアドレスがネットワークに送信されることはなく、ブロックとのマッチングはユーザ端末で実行されるので、フルノードへのtrustレベルも下がっていく。

まず、コンパクト化されたブロックをダウンロードする。

で、そのブロックを見ると、トリックによって自身に関係するトランザクションがあるかを判断できるらしい。で、もし入っていたら、ブロックの塊をもらってトランザクションを抽出する。このとき、witness部は省略するようだ。

正直理解がまだまだすぎるが、なんとなく雰囲気はわかった。これから詳細は、BIP157 Client Side Block Filtering、BIP158 Compact Block Filters for Light Clientsで定義されているものを確認しよう。

そのあとにノードを立ててみる。