Neutrino
Wallet は UTXOs の変化をモニタリングする必要がある
Wallet が unlock できる UTXOs が、wallet の残高を意味する
Wallet が unlock できる UTXOs が増えることは、wallet の残高が増えることを意味する
Wallet が unlock できる UTXOs が減ることは、wallet の残高が減ることを意味する
Full node はすべてのデータを持っているため、当然すべての UTXOs を知ることができ、モニタリングが可能
しかし、すべてのデータを一度はダウンロードして検証しないといけないのがデメリットで、モバイル wallet ではあまり現実的ではない
Wallet に関係がある UTXOs だけをモニタリングすればよい
wallet が知りたいこと
wallet に関係がある最新の UTXOs を知りたい
新しいブロックが作られたときに、wallet に関係がある UTXOs に増減があったかを知りたい
これらを知るための方法の1つが neutrino である
あるブロックに、wallet に関係がある UTXOs を変化させるような Tx が含まれているかを確認することができる
もし含まれていれば、実際のブロックデータをダウンロードして、確認する
wallet に関係があるデータだけをダウンロードすることで、full node と比べて扱うデータ量を減らすことができる
neutrino の目的
すべての Blockchain をダウンロードすることなく、関心がある UTXOs の存在や変化を確認したい
Full node が、ブロックをより小さいデータで表現する"フィルター"をつくる
Client はフィルターを受け取り、自分のアドレスに関係のある tx が存在するかを確認する
存在すれば、そのブロックデータをダウンロードする
署名などは含まれないらしい
Neutrino client の動作
まず Bitcoin block header をすべてダウンロードし、chain の状態と PoW を確認する
これはなぜ必要?
filter header をダウンロードし、正当性を確認する
複数の peer から header を取得し比較するのがよいだろう
filter をダウンロードする
必要な block をダウンロードする
このブロックが正しい保証は?
consensus のチェックは行わないので、例えば miner 以外全員 neutrino になったら不正な Block を作成できる可能性がある
consensus の確認は誰かに委譲する必要がある
自分のノードにつないだり、node を trust する
でもこの場合そもそも neutrino なんていらない
neutrino が有効なのは、third paryt node を trus するが、privacy は諦めたくない場合
Nicolas, what if you trust the operator node to run the correct version of Bitcoin, but don’t trust them enough to give up your keys or privacy.
Granted. This is an Explorer wallet in my terminology. Neutrino is adapted for this, and I have nothing to complain about it.
custodial や exploler wallet のほうがまだまし、という主張は、それを使うかどうかを選べる、という意味なのだろうか?
neutrino では選べないだろ、といいたいのか。
選べないことはないだろうが、出しかに繋いでいる先のノードのポリシーは多くの場合明確ではないだろう
node の api に関する仕様
Client の実装で気を付けるべきことにも言及されている
Blockchain と同じように Filter にも header を定義する
header = HASH(HASH(filter) | prev header)
header の chain をまずダウンロードし、問題がないかを確認、あるいは複数のノードから取得して差分がないか確認
filter の仕様
今後も別の filter が提案される可能性があるのかな?
readings