どうも。
今回は、日本発祥の暗号通貨、モナコインでLightning Network(以下LN)を使い、知り合いとマイクロペイメントチャネルを開いて、手数料ゼロで送金してみたいと思います。
LNってなに
LNとは、ブロックチェーン技術の一つです。
元々、マイクロペイメントチャネルというものを使い、2者間で送金手数料を無料にする仕組みがあります。
それをさらに複数人で稼働させ、メッシュネットワークのような送金チャネルを作り出し、多数の人間で、手数料を無料で送金し合える仕組みをLNと呼びます。手数料問題・遅延問題が話題になっているビットコインをスケールアウトする仕組みです。
詳しくはググって、どうぞ。
monacoind または monacoin-qt のインストール
LNを実行するために、まずはフルノードが必要となります。
自分は以下のようにしてappimageを落としました。
$ wget https://github.com/monacoinproject/monacoin/releases/download/monacoin-0.14.2/monacoin-0.14.2-x86_64-linux-gnu.tar.gz
$ tar xvf monacoin-0.14.2-x86_64-linux-gnu.tar.gz
$ cd monacoin-0.14.2/bin
$ ls
monacoin-cli monacoin-qt monacoin-tx monacoind
他のOSやアーキテクチャのダウンロードリンクは公式ページにあります。
ここでフルノードを起動させます。monacoin-qt(GUI)を使用します。
monacoind/monacoin-qtの設定
まず、設定ファイルを作ります。
$ mkdir ~/.monacoin
server=1
rpcuser=myuser
rpcpassword=12345678
txindex=1
zmqpubrawblock=tcp://127.0.0.1:30000
zmqpubrawtx=tcp://127.0.0.1:30000
ユーザー名とパスワードは適宜好きなものに変更してください。
monacoind/monacoin-qtの起動
$ nohup ./monacoinqt &
起動したら、monacoin-qtの場合はデータディレクトリを聞かれるので、~/.monacoin/monacoin.conf
(初期値)を設定してください。
これで、localhost:9402でJSON-RPCなAPIを使えるようになります。
eclairのダウンロード
LNを扱うためのツールですが、有志がeclairのMonacoin版を作ってくれているので、それを使います。
$ wget https://github.com/monapu/eclair/releases/download/v0.2-alpha4-mona2/eclair-node-javafx_2.11-0.2-SNAPSHOT-mona2-8ee486c-capsule-fat.jar
最新版は https://github.com/monapu/eclair/releases から取得できます。javafxと接尾語があるものがGUI版、無いものがCUIとのことです。今回はGUIを使います。
eclairの設定ファイル
$ mkdir ~/.eclair
eclair {
bitcoind {
rpcuser = "myuser"
rpcpassword = "12345678"
rpcport = 9402
zmq = "tcp://127.0.0.1:30000"
}
server {
port = 9735
}
api {
binding-ip = "127.0.0.1"
port = 8087
}
node-alias = "mynode1"
node-color = "FF0040"
}
ユーザー名とパスワードはさきほど設定したものに変えてください。
また、node-aliasは、ネットワーク上での自分の名前として扱われるので、好きにハンドルネームなどをきめてください。
ポート開放/転送
パソコンのファイアウォールの設定から、9735/tcpを開放し、またルーターの設定で9735番をグローバルから自身のマシンにポート転送するようにしてください。
eclairを起動
$ java -jar ./eclair…(省略)capsule-fat.jar &
触ってみる
まず、monacoin-qtにいくらか(0.1Mona程度)送金しましょう。
次に、eclairの左上の、「Chennels」→「Open Channel ...」より、ペイメントチャネルをひらきたい相手の「Node URI」を入力します。
例えば私の場合は「037786877800ae5e640cc427b7a3d5dc232994d3a9ecd3480755b10c5ead937089@1.2.3.4:9735
」になります。
また、http://lnmona.ml/ を運営している方のNode URLは「03aafadba1c7608a52b8defcb880e52c76d06eb36b6cb740ef94649b2a5277701e@lnmona.ml:9735
」になります。
このNode URIで相手に接続できます。
次に、Capacityに、ペイメントチャネルにデポジットしたいMonaを、Push Amountに最初に送金したいMonaを入力しましょう。自分の場合は両方1milliMona(0.001Mona)にしました。
Node URI の作り方。
eclairの左下にPubkey(英数字の羅列)があるのでそれをコピーします。
そのうしろに@
、さらに自分のグローバルIPアドレス、そして:
の後にポート番号を指定します。
たとえば、さっき載せた私のpubkeyは037786877800ae5e640cc427b7a3d5dc232994d3a9ecd3480755b10c5ead937089
です。
チャネルの中で送金してみる
実験中。
最後に
ライトニングネットワークを使えば、Opening transactionとclosing transactionの手数料だけで、あとは無制限に、自分とチャネルを開いていない人でも無料の送金ができます。
※ただ、中間に居る人は自身を介するときに手数料を設定できます。
たとえば、取引所間に一つライトニングネットワークができれば、一瞬で手数料なしで取引所間を移動できますし、投げ銭をするときも、その人とネットワークのどこかで繋がっていれば手数料は無料になります。
ぜひ使ってみてください!
ちなみに、以下は冒頭に貼った画像です。2018/01/21 午後18時ごろのモナコインのライトニングネットワークの様子を表示しています。
参考
https://qiita.com/Nxtima1/items/d68f75202fc4f633c9ec
https://github.com/monapu/eclair/blob/master/README.mona.md
https://askmona.org/4955
追記
12/25時点での最新のネットワーク(上から少し変化しました)