zapをPCとスマホで

zapをtestnetで立ち上げた。 UIかっこいい。

zap

zapは、メジャーなlightning wallet。lightning labsのappのほうが純正だし色々あとあと楽そうだけど、こっちのほうがユーザビリティはいい。

Create a new wallet

最近のlightning walletを色々試してみたけれど、ほとんどのwalletでこの機能がある。lightningの仕組みについて理解が深ければ、違和感を感じるはず。
blue walletのようにcustodialでないのならば、バックエンドはどういうしくみなのか。例えばneutrinoなのか?

zapの場合は、mainnet1-btcd.zaphq.ioに接続している。これは記事に記載があり、zapのhostするneutrino nodeである。

ちなみに、たちあげから同期が驚異的に速い。3分ぐらいか。どっかにblock height指定してるのかな?

この手の仕様はよく見るけれど、悩ましいとも思う。どういう単位でフルノードの運用はされるべきなのだろうか。lappsを提供する各社が運用している傾向はあるものの、どこか管理するスキームがあってもいい気もする。もう一つ、LNDの開発がはやいこともあって、結果的にneutrino nodeにつなぐspv nodeがすごい数で増えているんじゃないか。neutrinoには批判もあるが、それが顕在化したときの影響は大きそうだ。

今回は、自分で立ち上げているlnd nodeにたいして、直接コントロール権を得るパターンで行ってみる。自分で立ち上げているbtc nodeに対して、neutrino接続するoptionは提供されていない。その場合は、自分でzapをbuildする必要がありそうだ。

前提として、LNDの立ち上げは終わっているものとする。 必要な物は、tls.certとadmin.macaroons。つまり、スマホに入れたりして盗まれると管理しているlnd nodeごと持っていかれたことになる。

PC

GKEにノードをデプロイしている前提で進める。
下記に必要なフォームを入力すれば良い。

hostは、下記コマンドで取れる。
portは自分で設定しているものになるが、特に変更していなければ10009だろう。

$ kubectl get service                                                                                                                                  2019/11/03 9:58:33 [master]
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                                         AGE  
lnd-btcd-s   LoadBalancer   x.x.x.x         x.x.x.x         9735:31802/TCP,10009:32298/TCP,8989:30195/TCP   13d  

tls.certとmacaroonも、例えば下記コマンドで取得する。

kubectl cp lnd-btcd-0:/root ~/Desktop/root -c lnd  

あとはそれぞれを指定して接続すれば、あっという間に終わるだろう。

android

もっとも簡単な方法は、PCのzapでQRコードを作ってそれを読み込む方法だ。 profile->connectと進むと、QRがでてくるのでこれを読み込めばいい。だけど、少し味気ないし、何がおこっているのかわかりにくいので、自分でQRを作ってみよう。(最初機能の存在に気づかなくて自分でやってしまっただけ)

まず、このQRっていうのは、要はhostとtls.certとadmin.macaroonsをコード化したものだ。そして、そのための文字列はlndconnectというコーデで作られる。だからこいつを動かして文字列を作って、それをqrencodeとかでQRにしてやればいい。

go get -d github.com/LN-Zap/lndconnect  
cd $GOPATH/src/github.com/LN-Zap/lndconnect  
make  
lndconnect -j --host=x.x.x.x -p 10009 --adminmacaroonpath=~/Desktop/root/.lnd/testnet/admin.macaroon --tlscertpath=~/Desktop/root/.lnd/testnet/tls.cert && qrencode -s 1 -m 2 -t ANSIUTF8  

できた。

両方使ってみてきづいたけど、GKEのノードに接続したほうがユーザビリティはいい。neutrinoでは、立ち上げしたときに一瞬blockのsyncが入る。