payment channel入門

26
Payment Channel入門 光田 Coincheck株式会社 Twitter: @34ro github: @34ro 2017.09.26

Upload: -

Post on 21-Jan-2018

2.699 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Payment channel入門

Payment Channel入門

光田 貴Coincheck株式会社Twitter: @34rogithub: @34ro

2017.09.26

Page 2: Payment channel入門

About me光田 貴

2012~ ヤフーで広告システムのバックエンドを開発・運用

2016~ Coincheck

主に担当したこと

新しい仮想通貨の売買や入出金

住所確認用のハガキを送る

ビットコインキャッシュに対応する

仮想通貨交換業の登録に向けて仮想通貨の説明資料を作る

仮想通貨系の技術について Coincheckブログに書いたり、

ニュースメディアにも寄稿することもあります

Page 3: Payment channel入門

今回のテーマ

「レイヤー2」

ビットコインと日本円の違い

Payment Channelの仕組み

Page 4: Payment channel入門

8/24 SegWitが有効化されました

Segwitのメリットは色々ありますが

● ソフトフォークで変更できる →分裂せず変更できた

● トランザクション展性が解消 →セキュリティ向上

● ブロックに詰め込めるトランザクション数が最大で約 4倍に

● 今後の仕様の変更がしやすくなった

● トラストレスに上位レイヤーが構築できる ←超重要

実用的な方法で上位レイヤーが構築できるようになった

Page 5: Payment channel入門

銀行の機能を使用して、その上で多様なサービスを提供

決済システムにおけるレイヤー(層)の例

銀行

クレカ

決済代行

↑↓

クレジットカード

↑↓

銀行間送金

Page 6: Payment channel入門

ビットコインにおけるレイヤー

◆ レイヤー1シンプルな送金

◆ レイヤー2• スマートコントラクト

• 外部からデータを与えて、事前に約束していた送金を実行(例: 雨が降った→天候デリバティブの補償を支払う )

• アトミックスワップ• 取引所を介さず異なる仮想通貨同士をトラストレスに交換

• Payment Channel←今回のテーマ• 2者間で手数料なしで瞬時に何度でも送金できる

「シンプルな送金」を拡張して特殊な送金が可能になった

送金

Payment Channelなど

Page 7: Payment channel入門

そもそもどうしてレイヤー2が作れるのか?

レイヤー2が生まれる「土壌」について

Page 8: Payment channel入門

日本円とビットコインの違い

お金の役割

● 価値の尺度

● 決済手段

● 価値の保存手段

日本円ほど汎用性はないもののビットコインでも実現できる

ビットコインは・・・

● 管理者がいない?

● 価値の裏付けがない?

???

Page 9: Payment channel入門

ビットコインは「秘密鍵=価値」

送金方法の違い

日本円: 銀行振込(最終的には日本銀行にある口座間で残高が移動 )ビットコイン : 送金データに電子署名し公開

※電子署名 : 秘密鍵(パスワードのようなもの )は明かさず、秘密鍵を知っていることを証明

保有手段の違い

日本円: 銀行に預ける (最終的には日本銀行にある口座で管理 )ビットコイン : 秘密鍵を誰にも漏らさず保管

日本円は日本銀行の仕組みのなかで機能

ビットコインは「秘密鍵を知っていること =価値」というルールの中で機能

Page 10: Payment channel入門

「秘密鍵=価値」を受け入れたことで

ビットコインの所有者は「秘密鍵 =価値」な世界を受け入れた人の集まり

鍵の扱いひとつでこのルールをハックできる

● あえて教える

● 一つ明かすと別の鍵も明かされる

このルールを活かした仕組みを制約なく作れる (ルールを受け入れる人がいる限り )

Page 11: Payment channel入門

オープンソース活動のようなお金ができた

オープンソース活動の特徴

● 自発的に参加する (「社会契約」がない )● 保証は無いが、無料 (誰でも利用できる )● 成果物が個人に紐づく (ビットコインの技術は難しいけど、いいアイディアは評価される )

似たような土壌から生まれたもの。 Linux, Wikipedia, etc.

Page 12: Payment channel入門

Payment Channelの仕組み

Page 13: Payment channel入門

Payment Channelできること

● 2者間での送金を瞬時に手数料をかけずに実行

● 相手を信用しなくて良い

制約

● 最初に入金する金額を決めた範囲内で送金

● 新しい相手とやり取りする時は Channelを開き、最後に閉じる必要がある

基本になる考え方

● 予め決めた金額をChannel内にロック

● 取引を毎回ブロードキャストするのではなく、最初と最後だけブロードキャスト

● 相手が裏切る動機がない状態をキープ

Page 14: Payment 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で終わらせたい

「トラストレス」な世界では相手が裏切る可能性を考えなくてはいけない

Page 15: Payment channel入門

相手の裏切りをどう防ぐ?

Segwitのトランザクションでは署名情報を txidに含んでいないので、「次のトランザクション」の署名データが無くても「次の次のトランザクション」が作れる

→「次の次のトランザクション」に先に署名できるところにヒントあり

※txid: トランザクションの情報のハッシュ※ハッシュ: データのダイジェスト。トランザクションの情報が少しでも変わればハッシュも変わる。

Page 16: Payment channel入門

Channelを開く(Opening)Opening Transactionに署名する前にCommitment Transactionを予め組み立てるOpening Transactionがブロードキャストされ、ブロックに取り込まれたら準備完了

Page 17: Payment channel入門

Channelを開く(Opening)

ここでの目標↓

Page 18: Payment channel入門

送金する(update)新しい「状態」に遷移

secret 1, secret 2を明かすことで、過去のトランザクションを実質無効化

Page 19: Payment channel入門

送金する(update)前の鍵を明かし、前の状態でブロードキャストする動機を無くす

ここでの目標↓

Page 20: Payment channel入門

Channelを閉じる(closing)最後の状態のトランザクションにお互い署名

Page 21: Payment channel入門

Channelを閉じる(closing)最後のトランザクションを組み立ててブロードキャスト

ここでの目標↓

Page 22: Payment channel入門

Lightning NetworkPayment Channelは2者間の送金なので送金相手の数だけ Channelを開く必要がある

「蜘蛛の巣」のようにネットワークを作って中間者を挟んで送金 (HTLCs)

経路選択やプライバシーの保護の方法が研究されている

Page 23: Payment channel入門

有名な仕様・実装

Payment ChannelもLightning Networkの機能の一部として実装されている

Lightnign Networkに関してはいろいろな提案がなされているのでまだ仮の部分も多い

仕様

● lightningnetwork/lightning-rfc

ノード

● ElementsProject/lightning● lightningnetwork/lnd● mit-dci/lit

GUI

● ACINQ/eclair

Page 24: Payment channel入門

まとめ

レイヤーとは?

→銀行振り込みとクレジットカード決済の関係

なぜレイヤー2が実現できるのか

→ビットコインは誰でもアイディアを形にできる

Payment Channelとは何か

→トラストレスに2者間で瞬時に手数料なしで送金するしくみ

なぜ実現できるのか

→Payment Channelをトラストレスかつ実用的な手段で作れるようになった

Page 25: Payment channel入門

最後に

コインチェックではエンジニアやその他の業種絶賛募集中です!

wantedlyの「話を聞きに行きたい」か光田に直接ご連絡ください

Page 26: Payment channel入門