狠狠撸

狠狠撸Share a Scribd company logo
Lightning Network
概要説明
@gakutomo
背景
Bitcoinはスケーラビリティに問題がある
?ブロックサイズの上限が 1MB (4000トランザクション)
?1秒あたり7トランザクションしかさばけない
*2013年、Visaは最大瞬間取引数が47,000 トランザクション/秒
背景
さらにトランザクションが詰まると
?手数料を高くしないと決済がなかなか完了しない
?少額送金に不向きなシステムへ???
解決策
そこで提案されたのが「Lightning Network」
オフチェーンで複数取引し、最後にまとめてブロックチェーンに
書き込むことでトランザクション数を削減する。これを実現するための
ネットワーク。
*オフチェーン???ブロックチェーンを使わない処理。対義語はオンチェーン。
概略図
Alice Bob
1BTC
ブロックチェーン
Alice Bob
1BTC
Alice Bob
1BTC
Lightning Network
Alice Bob
1BTC
オフチェーン取引の仕组み
ペイメントチャネル
オフチェーンではペイメントチャネルという
2者間で取引できる仕組みが重要
BA
ペイメントチャネルの開設①
マルチシグアカウントに2人が1BTCずつ入金するトランザクション作成
このトランザクションは後でブロックチェーンに書き込まれる
*マルチシグ(multi-signature) アカウント???複数人の署名が無いとBTCを取り出せないアカウント
マルチシグ
1BTC
1BTC
A
B
ペイメントチャネルの開設②
マルチシグからBTCを取り出せなくならないよう、
返金用トランザクションを作成して交換しておく
?マルチシグからAに1BTC
?マルチシグからBに1BTC
?マルチシグからAに1BTC
?マルチシグからBに1BTC
Aが作ったトランザクション1 Bが作ったトランザクション1
A B
ペイメントチャネルの開設②
マルチシグからBTCを取り出せなくならないよう、
返金用トランザクションを作成して交換しておく
?マルチシグからAに1BTC
?マルチシグからBに1BTC
?マルチシグからAに1BTC
?マルチシグからBに1BTC
Bが作ったトランザクション1 Aが作ったトランザクション1
A B
ペイメントチャネルでの取引
A が B に 0.1BTC送りたい場合
返金用トランザクションを更新する
?マルチシグからAに0.9BTC
?マルチシグからBに1.1BTC
Bが作ったトランザクション2 Aが作ったトランザクション2
?マルチシグからAに0.9BTC
?マルチシグからBに1.1BTC
A B
ペイメントチャネルをクローズ
取引を終了したい時
返金用トランザクションをブロードキャストする
?マルチシグからAに0.9BTC
?マルチシグからBに1.1BTC
Bが作ったトランザクション2
ブロックチェーンへブロードキャスト
A
これだと不正ができてしまう
昔のトランザクションをブロードキャストして取引をなかったことに
?マルチシグからAに1BTC
?マルチシグからBに1BTC
Bが作ったトランザクション1
古いほうをブロックチェーンへブロードキャスト
A
?マルチシグからAに0.9BTC
?マルチシグからBに1.1BTC
Bが作ったトランザクション2
不正を無くすためには鍵を使う
①鍵A1を作成、H(A1)を送る
?Aに1BTC
?Aは鍵B1があれば
残り1BTCも取り出せる
?BはこのTxがブロックに
入ってから24時間後に
1BTC取り出せる
Aが作ったトランザクション1
?Bに1BTC
?Bは鍵A1があれば
残り1BTCも取り出せる
?AはこのTxがブロックに
入ってから24時間後に
1BTC取り出せる
Bが作ったトランザクション1
鍵B1を作成、H(B1)を送る
A B
②もらったハッシュをもとにトランザクションを作成
不正対策後の返金トランザクション
鍵A1
?Bに1BTC
?Bは鍵A1があれば
残り1BTCも取り出せる
?AはこのTxがブロックに
入ってから24時間後に
1BTC取り出せる
Bが作ったトランザクション1
?Aに1BTC
?Aは鍵B1があれば
残り1BTCも取り出せる
?BはこのTxがブロックに
入ってから24時間後に
1BTC取り出せる
Aが作ったトランザクション1
A B鍵B1
0.1BTCの送金を行う場合
鍵A2を作成、H(A2)を送る
?Aに0.9BTC
?Aは鍵B2があれば
残り1.1BTCも取り出せる
?BはこのTxがブロックに
入ってから24時間後に
1.1BTC取り出せる
Aが作ったトランザクション2
?Bに1.1BTC
?Bは鍵A2があれば
残り0.9BTCも取り出せる
?AはこのTxがブロックに
入ってから24時間後に
0.9BTC取り出せる
Bが作ったトランザクション2
鍵B2を作成、H(B2)を送るA B
①
②
0.1BTCの送金を行う場合
?Bに1.1BTC
?Bは鍵A2があれば
残り0.9BTCも取り出せる
?AはこのTxがブロックに
入ってから24時間後に
0.9BTC取り出せる
Bが作ったトランザクション2
?Aに0.9BTC
?Aは鍵B2があれば
残り1.1BTCも取り出せる
?BはこのTxがブロックに
入ってから24時間後に
1.1BTC取り出せる
Aが作ったトランザクション2
A B鍵A1 鍵A2 鍵B1 鍵B2
前のトランザクションで使った鍵を交換するのが重要
Bが作ったトランザクション2 Aが作ったトランザクション2
?鍵A1を渡す ?鍵B1を渡す
A B鍵A1 鍵A2 鍵B1 鍵B2
?Bに1.1BTC
?Bは鍵A2があれば
残り0.9BTCも取り出せる
?AはこのTxがブロックに
入ってから24時間後に
0.9BTC取り出せる
?Aに0.9BTC
?Aは鍵B2があれば
残り1.1BTCも取り出せる
?BはこのTxがブロックに
入ってから24時間後に
1.1BTC取り出せる
前のトランザクションで使った鍵を交換するのが重要
Bが作ったトランザクション2 Aが作ったトランザクション2
A B鍵A1 鍵A2 鍵B1 鍵B2
鍵B1 鍵A1
?Bに1.1BTC
?Bは鍵A2があれば
残り0.9BTCも取り出せる
?AはこのTxがブロックに
入ってから24時間後に
0.9BTC取り出せる
?Aに0.9BTC
?Aは鍵B2があれば
残り1.1BTCも取り出せる
?BはこのTxがブロックに
入ってから24時間後に
1.1BTC取り出せる
不正しようとしても。。。
過去のトランザクションをブロードキャストしても、Bは24時間以内に
気付けば相手の鍵A1を使ってマルチシグ内の残金を全部取り出せる
ブロックチェーンへブロードキャスト
Bが作ったトランザクション
?Bに1BTC
?Bは鍵A1があれば
残り1BTCも取り出せる
?AはこのTxがブロックに
入ってから24時間後に
1BTC取り出せる
Bが作ったトランザクション1
A
Lightning Network
オフチェーンで複数人と取引する場合
複数人とペイメントチャネルを開けば取引できるが、
それぞれのマルチシグにデポジットしないといけないので不便
B
A C
他人を経由して送れば解決
BとCがペイメントチャネルで繋がっていれば、AはCに送金できる
B
A C
これが広がると
このようなペイメントチャネルのネットワークが Lightning Network
B
A C
E
D
複数人を経由してAからEに送ることもできる
持ち逃げが起こるのでは?
A→B→Cでリレーして送金する場合、A→Bに送金した時点でBは持ち逃げできる?
B
A C
A→B→Cで0.1BTCの送金を行う場合
B
A C
残高
1BTC
残高
1BTC
残高
1BTC
残高
1BTC
AB間、BC間でペイメントチャネルを開いている場合
A→B→Cで0.1BTCの送金を行う場合
鍵Cを作成、H(C)を渡す
B
A C
A→B→Cで0.1BTCの送金を行う場合
鍵A2を作成、H(A2)を送る
Aが作ったトランザクション2 Bが作ったトランザクション2
鍵B2を作成、H(B2)を送る
①
②
B
?Aに0.9BTC
?Aは鍵B2があれば
残り1.1BTCも取り出せる
?BはこのTxがブロックに
入ってから24時間後に
1BTC取り出せる
?Bは鍵Cがあれば0.1BTC
取り出せる
?Bに1.0BTC
?Bは鍵Cがあれば0.1BTC
取り出せる
?Bは鍵A2があれば
残り0.9BTCも取り出せる
?AはこのTxがブロックに
入ってから24時間後に
1BTC取り出せる
A
A→B→Cで0.1BTCの送金を行う場合
鍵B2を作成、H(B2)を送る
Bが作ったトランザクション2 Cが作ったトランザクション2
鍵C2を作成、H(C2)を送るB
①
②
C
?Bに0.9BTC
?Bは鍵C2があれば
残り1.1BTCも取り出せる
?CはこのTxがブロックに
入ってから24時間後に
1BTC取り出せる
?Cは鍵Cがあれば0.1BTC
取り出せる
?Cに1.0BTC
?Cは鍵Cがあれば0.1BTC
取り出せる
?Cは鍵B2があれば
残り0.9BTCも取り出せる
?BはこのTxがブロックに
入ってから24時間後に
1BTC取り出せる
A→B→Cで0.1BTCの送金を行う場合
Bが作ったトランザクション2Cが作ったトランザクション2
B C
?Bに0.9BTC
?Bは鍵C2があれば
残り1.1BTCも取り出せる
?CはこのTxがブロックに
入ってから24時間後に
1BTC取り出せる
?Cは鍵Cがあれば0.1BTC
取り出せる
?Cに1.0BTC
?Cは鍵Cがあれば0.1BTC
取り出せる
?Cは鍵B2があれば
残り0.9BTCも取り出せる
?BはこのTxがブロックに
入ってから24時間後に
1BTC取り出せる
鍵B1 鍵B2 鍵C1 鍵C2
C B
鍵C
A→B→Cで0.1BTCの送金を行う場合
Bが作ったトランザクション2Cが作ったトランザクション2
B C
?Bに0.9BTC
?Bは鍵C2があれば
残り1.1BTCも取り出せる
?CはこのTxがブロックに
入ってから24時間後に
1BTC取り出せる
?Cは鍵Cがあれば0.1BTC
取り出せる
?Cに1.0BTC
?Cは鍵Cがあれば0.1BTC
取り出せる
?Cは鍵B2があれば
残り0.9BTCも取り出せる
?BはこのTxがブロックに
入ってから24時間後に
1BTC取り出せる
鍵B1 鍵B2 鍵C1 鍵C2
C B
鍵C を渡す
鍵C
A→B→Cで0.1BTCの送金を行う場合
Bが作ったトランザクション2Cが作ったトランザクション2
B C
?Bに0.9BTC
?Bは鍵C2があれば
残り1.1BTCも取り出せる
?CはこのTxがブロックに
入ってから24時間後に
1BTC取り出せる
?Cは鍵Cがあれば0.1BTC
取り出せる
?Cに1.0BTC
?Cは鍵Cがあれば0.1BTC
取り出せる
?Cは鍵B2があれば
残り0.9BTCも取り出せる
?BはこのTxがブロックに
入ってから24時間後に
1BTC取り出せる
鍵B1 鍵B 鍵C1 鍵C2
C B
鍵C
鍵B1を渡す 鍵C1を渡す
鍵C
A→B→Cで0.1BTCの送金を行う場合
B
A C
①BTC受け取る
② 鍵Cを渡す
③鍵Cを使ってBTC受け取る
課題
?チャネルの開閉時はオンチェーンでのトランザクションが必要
?ペイメントハブが現れるとLNが中央集権的になってしまう恐れ
LNの現状
c-lightning や lnd など様々なノードが開発されており、
テストネット及びメインネットでもbeta版が稼働開始
lightning network exploler - https://explorer.acinq.co/
デモ
テストネットでの支払いを体験できる。
Eclair Wallet をインストールしてスマホからの支払いを試してみましょう
https://starblocks.acinq.co/
実用例
BTCPay???支払いQRコードの発行、コインの受け取り管理など。
Paper call???APIを呼ぶ際にライトニングでの少額課金を挟むモジュール。
Yalls.org???少額の課金ブログ。記事を読むのに1セント相当のビットコイ
ン課金が儲けられており、良いと思った記事にはチップも渡せる。
まとめ
?高速送金ができるようになる
?手数料ほぼ無し
?チャネルの開閉時はオンチェーンでのトランザクションが必要
?LNが中央集権的になってしまう恐れ

More Related Content

Lightning network 概要解説

Editor's Notes

  • #15: OP_CHECKSEQUENCEVERIFY (OP_CSV)はこのアウトプットのトランザクションがブロックに格納されてから指定時間(block height or unix timestamp)まで、アウトプットのコインをロックする相対的なタイムロックの仕組み。 OP_HASH160 <H(Secret B1)> OP_EQUAL OP_IF <alice pub_key> OP_ELSE <1000> OP_CHECKSEQUENCEVERIFY OP_DROP <bob pub_key> OP_ENDIF OP_CHECKSIG