litでmacで送金テスト

litは、(他のbitcoin関係のソフトウェアと同様に)毎日変更が加わっている状態であり、githubにあるreadmeを読んで実行してもうまくいかないケースがある。俺の読解力の問題かもしれないが。
2018年7月現在で、動かす方法を日本語でまとめておく。

Under development, not for use with real moneyであるので、テストネットでの送金をやるに留める。

Env

  • OS : Mac OS Sierra 10.12.6
  • go : version 1.10 (1.7.5では動かなかった。readmeには何も書いてない)

Setup

gitは使えるものとして、実行した手順を記載していく。
まずは、ソースコードをcloneする。

git clone https://github.com/mit-dci/lit  
cd lit  

次は、dependency install。go getではなく、makeに頼る。makeは、macでC言語系のプログラムを生成するのに利用できるコマンドで、litと、lit-af(つまりテストに必要なプログラム全て)はこれでinstallが完了する。

make # or `make all`  

Walkthrough

さっそく、litを動かしていく。
実行するシナリオは、一つのローカルPCを使って、YusukeからDaichiにマイクロペイメントを実行するというシンプルなもの。

setup

フォルダーを二つ作ってそこにlitをコピー。

bruwbird$ cd /  
bruwbird$ mkdir Yusuke  
bruwbird$ mkdir Daichi  
bruwbird$ cp gofolder/src/github.com/mit-dci/lit ./Yusuke  
bruwbird$ cp gofolder/src/github.com/mit-dci/lit ./Daichi  

二つのlit nodeをテストネットで稼働する。
実行ハードルを下げるため、172.16.120.201で稼働しているTadgeのbitcoindテストネットフルノードを利用する。

Daichi側のlit nodeでrpcportを指定しているのは、litを操作するためのコマンドラインであるlit-afで待ち受けるportを明示する必要があるからである。

bruwbird$ ~/Yusuke/lit --tn3=true --dir ~/Yusuke/lit -v  
bruwbird$ ~/Daichi/lit --tn3=true --rpcport 9751 --dir ~/Daichi/lit -v  

lit-afを立ち上げる。ここまでで、都合4つのterminalを立ち上げていることになる。

bruwbird$ ~/Yusuke/lit/lit-af  
bruwbird$ ~/Daichi/lit/lit-af -p 9751  

Yusuke側のlitに、testnetのbitcoinをチャージする。まずは、現状の残高を確認する。

lit-af# ls  
entered command: ls  
    Addresses:
0 tb1q39stxtf6udwnjpatadylkgakf8q9und06we8ew (mt3LiAN4EjaHQGeHWLoTHgDUtafALwL6Zv)  
    Utxo: 0 Conf:0 Channel: 0
Sync Height 1060000

tbから始まるアドレスがSegwitアドレス P2WPKH、mから始まるアドレスがBitcoinテストネットアドレス P2PKHだ。この両者は同じ秘密鍵と公開鍵から生成されているが、アドレスとしては別々の表現になる。

まずはP2PKHアドレスに対して、bitcoinを送金する。例えばfausetから。

これを、Segwitアドレス P2WPKHに移動する。移動には、lit-afのsendを使う。

lit-af# send tb1q39stxtf6udwnjpatadylkgakf8q9und06we8ew 189953760  

これで準備が完了した。
Yusukeに残高があるので、Daichiに対してmicro paymentを実行する。

Connect

チャンネルをオープンする。まずは、そのために二者を接続する。これはどっちから接続しても良いが、まずYusuke側でポートを開き、そこにDaichiが接続するシナリオとする。
Yusuke側でportを開く。

lit-af# lis  
entered command: lis  
listening on ln1pmclh89haeswrw0unf8awuyqeu4t2uell58nea@:2448  

続いて、daichi側から接続する。
接続確認のため、"Hi Yusuke"というメッセージも合わせて送信している。

lit-af# con ln1pmclh89haeswrw0unf8awuyqeu4t2uell58nea@127.0.0.1  
entered command: con ln1pmclh89haeswrw0unf8awuyqeu4t2uell58nea@127.0.0.1  
connected to peer 1  
lit-af# say 1 Hi Yusuke!  
entered command: say 1 Hi Yusuke!  

Sweep

Yusukeがチャンネルを開く前に、segwit addressに残高があることを確認するために、残高をsweepする。

lit-af# sweep tb1qrh7xpsmlgrd7lf4vv6yyn87j4n7pdjkra9jrr9 50000000  
entered command: sweep tb1qrh7xpsmlgrd7lf4vv6yyn87j4n7pdjkra9jrr9 50000000  
Swept  
0 d297da04c43919e683ffc03539ee38e185425e8fa14d1ccae6577fbb35be575a  

Open Channel

YusukeがPayment Channelを開く。この場合、Daichiとの間に50000000 satoshiをデポジットする。

lit-af# fund 1 1 50000000 0  

micro-payments

準備が整ったので、マイクロペイメントを行う。 こんな少額を人が送る需要はあるのだろうか。ないとしたら、どこに需要がある?

lit-af# push 1 2000  

Close the channel

lit-af# close 1  

segwitアドレスを確認すれば、チャンネルクローズ後、集約されたこのマイクロペイメントがブロックチェーン外の取引ではなく、実際にブロックチェーンに載っていることがわかる。

SPV lightning nodeとして

litは、MIT DCIが作成している、bitcoin lightning networkのソフトウェアである。まだまだ不完全な部分が多くあり、実験レベルのものだ。

Lightning networkのソフトウェアはいくつか出てきているが、将来的にユーザが使うのはこれかなと思う。

ちなみに、MIT DCIは、MIT Media Labのコミュニティではあるものの、MITとの密接な繋がりはなく、権威ある団体とはまだ言えないらしい(よく知らない)。

作成者であるTadge Dryjaは、Lightweight Lightning Network Softwareであるとブログで紹介している。SPV(Simplified Payment Verification)ノードで動く点に特徴がある。
既存のLN実装として有名なソフトウェアにはBlockstreamのLightningdや、Dryjaも所属するLightning LabのLndがある。
これらのフルノードを前提としたソフトウェアはセキュリティ面でSPVよりも優れているが、必ずしもすべてのユースケースにおいてフルノードが必要なわけではない。また、フルノードを維持するには相応のネットワーク/ストレージコストも掛かるため、特定の開発用途には向かない場合もある。
要するに、lightningをスマホに載せるのにはlitが最適なんじゃないか。