payment channel入門
TRANSCRIPT
Payment Channel入門
光田 貴Coincheck株式会社Twitter: @34rogithub: @34ro
2017.09.26
About me光田 貴
2012~ ヤフーで広告システムのバックエンドを開発・運用
2016~ Coincheck
主に担当したこと
新しい仮想通貨の売買や入出金
住所確認用のハガキを送る
ビットコインキャッシュに対応する
仮想通貨交換業の登録に向けて仮想通貨の説明資料を作る
仮想通貨系の技術について Coincheckブログに書いたり、
ニュースメディアにも寄稿することもあります
今回のテーマ
「レイヤー2」
ビットコインと日本円の違い
Payment Channelの仕組み
8/24 SegWitが有効化されました
Segwitのメリットは色々ありますが
● ソフトフォークで変更できる →分裂せず変更できた
● トランザクション展性が解消 →セキュリティ向上
● ブロックに詰め込めるトランザクション数が最大で約 4倍に
● 今後の仕様の変更がしやすくなった
● トラストレスに上位レイヤーが構築できる ←超重要
実用的な方法で上位レイヤーが構築できるようになった
銀行の機能を使用して、その上で多様なサービスを提供
決済システムにおけるレイヤー(層)の例
銀行
クレカ
決済代行
↑↓
クレジットカード
↑↓
銀行間送金
ビットコインにおけるレイヤー
◆ レイヤー1シンプルな送金
◆ レイヤー2• スマートコントラクト
• 外部からデータを与えて、事前に約束していた送金を実行(例: 雨が降った→天候デリバティブの補償を支払う )
• アトミックスワップ• 取引所を介さず異なる仮想通貨同士をトラストレスに交換
• Payment Channel←今回のテーマ• 2者間で手数料なしで瞬時に何度でも送金できる
「シンプルな送金」を拡張して特殊な送金が可能になった
送金
Payment Channelなど
そもそもどうしてレイヤー2が作れるのか?
レイヤー2が生まれる「土壌」について
日本円とビットコインの違い
お金の役割
● 価値の尺度
● 決済手段
● 価値の保存手段
日本円ほど汎用性はないもののビットコインでも実現できる
ビットコインは・・・
● 管理者がいない?
● 価値の裏付けがない?
???
ビットコインは「秘密鍵=価値」
送金方法の違い
日本円: 銀行振込(最終的には日本銀行にある口座間で残高が移動 )ビットコイン : 送金データに電子署名し公開
※電子署名 : 秘密鍵(パスワードのようなもの )は明かさず、秘密鍵を知っていることを証明
保有手段の違い
日本円: 銀行に預ける (最終的には日本銀行にある口座で管理 )ビットコイン : 秘密鍵を誰にも漏らさず保管
日本円は日本銀行の仕組みのなかで機能
ビットコインは「秘密鍵を知っていること =価値」というルールの中で機能
「秘密鍵=価値」を受け入れたことで
ビットコインの所有者は「秘密鍵 =価値」な世界を受け入れた人の集まり
鍵の扱いひとつでこのルールをハックできる
● あえて教える
● 一つ明かすと別の鍵も明かされる
このルールを活かした仕組みを制約なく作れる (ルールを受け入れる人がいる限り )
オープンソース活動のようなお金ができた
オープンソース活動の特徴
● 自発的に参加する (「社会契約」がない )● 保証は無いが、無料 (誰でも利用できる )● 成果物が個人に紐づく (ビットコインの技術は難しいけど、いいアイディアは評価される )
似たような土壌から生まれたもの。 Linux, Wikipedia, etc.
Payment Channelの仕組み
Payment Channelできること
● 2者間での送金を瞬時に手数料をかけずに実行
● 相手を信用しなくて良い
制約
● 最初に入金する金額を決めた範囲内で送金
● 新しい相手とやり取りする時は Channelを開き、最後に閉じる必要がある
基本になる考え方
● 予め決めた金額をChannel内にロック
● 取引を毎回ブロードキャストするのではなく、最初と最後だけブロードキャスト
● 相手が裏切る動機がない状態をキープ
Payment Channelで送り合う例
AさんとBさんで5BTCずつ入金
1. 最初(A: 5BTC, B: 5BTC) 2. B→Aに3BTC送る(A: 8BTC, B: 2BTC)3. A→Bに4BTC送る(A: 4BTC, B: 6BTC) 4. 最後(A: 4BTC, B: 6BTC)
最初と最後の取引だけをブロックチェーンに記録すればよい
→2,3は高速で手数料が発生しない
→ビットコインは送金が遅い、手数料が高いという課題を解決
でも途中の状態を勝手にブロックチェーンに記録すれば儲かるのでは・・・
Aさん・・・A: 8BTC, B: 2BTCで終わらせたい
Bさん・・・A: 4BTC, B: 6BTCで終わらせたい
「トラストレス」な世界では相手が裏切る可能性を考えなくてはいけない
相手の裏切りをどう防ぐ?
Segwitのトランザクションでは署名情報を txidに含んでいないので、「次のトランザクション」の署名データが無くても「次の次のトランザクション」が作れる
→「次の次のトランザクション」に先に署名できるところにヒントあり
※txid: トランザクションの情報のハッシュ※ハッシュ: データのダイジェスト。トランザクションの情報が少しでも変わればハッシュも変わる。
Channelを開く(Opening)Opening Transactionに署名する前にCommitment Transactionを予め組み立てるOpening Transactionがブロードキャストされ、ブロックに取り込まれたら準備完了
Channelを開く(Opening)
ここでの目標↓
送金する(update)新しい「状態」に遷移
secret 1, secret 2を明かすことで、過去のトランザクションを実質無効化
送金する(update)前の鍵を明かし、前の状態でブロードキャストする動機を無くす
ここでの目標↓
Channelを閉じる(closing)最後の状態のトランザクションにお互い署名
Channelを閉じる(closing)最後のトランザクションを組み立ててブロードキャスト
ここでの目標↓
Lightning NetworkPayment Channelは2者間の送金なので送金相手の数だけ Channelを開く必要がある
「蜘蛛の巣」のようにネットワークを作って中間者を挟んで送金 (HTLCs)
経路選択やプライバシーの保護の方法が研究されている
有名な仕様・実装
Payment ChannelもLightning Networkの機能の一部として実装されている
Lightnign Networkに関してはいろいろな提案がなされているのでまだ仮の部分も多い
仕様
● lightningnetwork/lightning-rfc
ノード
● ElementsProject/lightning● lightningnetwork/lnd● mit-dci/lit
GUI
● ACINQ/eclair
まとめ
レイヤーとは?
→銀行振り込みとクレジットカード決済の関係
なぜレイヤー2が実現できるのか
→ビットコインは誰でもアイディアを形にできる
Payment Channelとは何か
→トラストレスに2者間で瞬時に手数料なしで送金するしくみ
なぜ実現できるのか
→Payment Channelをトラストレスかつ実用的な手段で作れるようになった
最後に
コインチェックではエンジニアやその他の業種絶賛募集中です!
wantedlyの「話を聞きに行きたい」か光田に直接ご連絡ください
終