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が最適なんじゃないか。