Posted at

Litを使いLightningNetworkをテストする【仮想通貨】

More than 1 year has passed since last update.


始めに

仮想通貨に関して勉強しなければならないと思うので勉強開始しています

まず目標としてはMonacoinに LightningNetworkをくっつけようと思います

仮想通貨に関してなんとなく知識がある人向けといった内容です

大雑把にLightningNetworkを説明すると

仮想通貨のチェーン上で取引を行うと


  • 取引の確定が一瞬である

  • 手数料がほとんどかからないので少額取引きをたくさん行える

  • 仮想通貨のチェーン外(オフチェーン)なので、DBが大きくならない

などなど、各種メリットがある


LightningNetworkライブラリ

LightningNetwork(以下LN)の実装は色々ある

有名なものに LND、Lit、Lightningd、eclair、plasma、akiko pay 等があるらしい

この中でどれが人気なのかわからないが、今回は Litでテストしてみる

Litの特徴としては SPV(simplified payment verification)ノードという事

仮想通貨クライアントではフルノードをダウンロードする必要があるものと、不要なものとあるが

この不要なものがSPVノードである

LNにおいてSPVノードというものが何であるかは、今後調べるとして Litの特徴である

またGo言語で書かれていて 比較的評価の高いライブラリである


インストール

私は Windows10で WSL上のbashで作業を行いましたが、だいたいの環境で実行できると思います


Go

Goをインストール。色んなページあるのでそれを見て下さい(投げやり

特殊な事はありません


Lit

GitHubページはここ

https://github.com/mit-dci/lit

ソースをダウンロードし go buildしていきます

若干Readmeの記載で上手くいかなかったのでその部分を補う

ソースは go getで取ってこれる。もちろん git cloneして持ってきても良い

ソースのlitディレクトリに入り go buildを行い litをコンパイル

このlitがLNの本体になる

go build した時に、ライブラリが不足している場合は、それらを全部 go get hogehoge すればよい

次に クライアントをビルドする。今回はコマンドラインインタフェースを使う

cmd/lit-af に入り go buildを行い CUIをビルドする

$ go get github.com/mit-dci/lit

$ cd $GOPATH/src/github.com/mit-dci/lit
$ cd cmd/lit-af
$ go build

これで litとlit-afが作成できた


Litを起動

AliceとBobが LightningNetworkを使ってマイクロペイメントを行います

ターミナルを4つ使用します

Aliceのlitサーバと lit-afクライアント

Bobのlitサーバと lit-afクライアント


Aliceの起動

今回はBitcoinのtestnetを使います

Aliceはデフォルト設定で起動させます

ユーザデータは ~/.lit 以下になります

$ cd lit

$ ./lit --tn3
PassPhaseを設定&入力

$ cd cmd/lit-af

$ ./lit-af


Bobの起動

Bobはポート番号とユーザディレクトリを指定します

~/.lit2 に保存します

$ cd lit

$ ./lit -rpcport 9751 -dir $HOME/.lit2 --tn3
PassPhaseを設定&入力

$ cd cmd/lit-af

$ ./lit-af -p 9751 --dir $HOME/.lit2


lit-afの使い方

lit-afのコマンドラインが出ているが、そこで

lit-af# help

とすると、コマンドヘルプが出る

この中で今回使うものは

ls: 状態表示

lis: 接続を受け付ける

con: 接続する

say: ピアにメッセージを送る

sweep: トランザクションを整理(まだよくわかってない)

fund: ピアに対して LNチャンネルを作成する&コインをLNにあずける

push: ピアに対してコインを送る(LN)

send: 他のアドレスに対してコインを送る(オンチェイン)


状態表示

lsコマンドで状態表示される

Peers :接続しているピア一覧

Channels: 接続しているLNチャンネル

cap bal h state data pkh 等色々情報あるが、詳細はよくわからない

おそらく capがチャンネル内の合計コイン数(satoshi)、balが自分のsatoshi 

Txos: トランザクション一覧

Listening Ports: 自分が待ち受けしているポート

Addresses: コインのアドレス。 最初のがLNでつかうSegwitアドレス。かっこ内が通常アドレス

Type: コインタイプと思われる

Sync Height: わからない

FeeRate: 気にしない

Utxo: よくわからない。持っているコインの総計? 通常アドレス

WitConf: よくわからない。Segwitアドレスのコイン?

Channel: チャンネル内のコイン


ピア接続

まずAliceがコネクションを待ち受ける


alice

lit-af# lis

entered command: lis
listening on ln1av2h4yr5hyvvumy2u5cxkk8cygxn2ya9m5ljjd@:2448


今回のLNアドレスは ln1av2h4yr5hyvvumy2u5cxkk8cygxn2ya9m5ljjd@:2448 である

Bobはそのアドレスに接続する


bob

lit-af# con ln1av2h4yr5hyvvumy2u5cxkk8cygxn2ya9m5ljjd@:2448

entered command: con ln1av2h4yr5hyvvumy2u5cxkk8cygxn2ya9m5ljjd@:2448
connected to peer ln1av2h4yr5hyvvumy2u5cxkk8cygxn2ya9m5ljjd@:2448


これで Peer1番にお互い接続された。

メッセージ送ってみよう


alice

lit-af# say 1 Hello Bob


Bob側に Hello Bobが表示されたとおもう(なぜか 1単語だと送れない)


LNを開く

今のままだとコインを持っていない。LNを開くには 100万satoshi必要なので

Bitcoin faucet testnet3 等で検索し、Aliceにコインを振り込もう

振り込みアドレスは カッコ内の方を使う。

また 使い終わったら faucetサイトにsendコマンドで戻してあげると喜ばれる

必要額を送ったら、1時間ほど待てば入っているはず(testnetはブロック生成が遅い・・)

入金終了後にAliceのアドレスから Segwitアドレスにsendし、LNで使えるようにする

Segwitアドレスは Addressのかっこの前のアドレスである

LNのチャンネルを開くには最低 1Msatoshi必要なのでそれ以上入れる事


alice

lit-af# send  aliceのSegwitアドレス 1000000


これも ブロック生成されるまで1時間ほどかかる・・

LN用のコインが手に入ったのでLNを開くことができる!

チャンネルを開くには fundコマンドを使う

Readmeでは引数が間違えているので注意。


alice

lit-af# fund 1 1 1000000 0

entered command: fund 1 1 1000000 0


これで 1000000satoshiを入れたチャンネルが出来た


コインを送ってみる

LNで送るには pushコマンドだ


alice

lit-af# push 1 500

entered command: push 1 500
Pushed 500 at state 0


このように少額の送金を無料で即座に無料で行う事ができる

1satoshiから送る事が出来るよ!