Slide 1

Slide 1 text

コードが書けなくても 手を動かして学ぶ方法 3/27 ビットコインとか勉強会 #16

Slide 2

Slide 2 text

自己紹介 ● 牟田口裕司(むたぐちひろし) ● 株式会社IDOM (旧 ガリバーインターナショナル) ● 社内情シス担当 ● 職歴 SIer → <3社> → IDOM(今ここ) ● 最近思うこと 作るって楽しい! 手を動かして何か作りたい ● その他 Maker Faire Tokyoにボランティア参加 自立分散社会フォーラムの個人会員

Slide 3

Slide 3 text

アジェンダ 1. はじめに 2. 情報収集してみる 3. すぐ出来ること 4. Bitcoinフルノードを立ててみる 5. Lightning Networkをさわってみる

Slide 4

Slide 4 text

1.はじめに <2016年秋頃> 現金を扱うコストが苦痛になってきた  ↓ ↓ ↓ ↓ ↓ 財布を持ちたくない  ↓ ↓ ↓ ↓ ↓ Fintechってのが流行ってるらしい  ↓ ↓ ↓ ↓ ↓ ビットコイン?なんか財布持たなくても良くなるらしい  ↓ ↓ ↓ ↓ ↓ 〜〜 勉強開始 〜〜

Slide 5

Slide 5 text

ポケットに穴あいて 現金ばらまいて歩いてた

Slide 6

Slide 6 text

2.情報収集してみる 情報を頭に入 れただけでは 実感わかない

Slide 7

Slide 7 text

3.すぐに出来ること ● Suicaのみで生活してみる ○ やっぱりコンビニ最高! ● ビットコインを送金してみる ○ ブロックに取り込まれるのに時間かかる ○ 手数料高い ○ 送金完了してるのにアプリに反映されない ● LinePayを使ってみる ○ 現金のチャージ簡単 ○ コンビニはローソンしか使えない

Slide 8

Slide 8 text

3.すぐに出来ること 金額指定の方法 読み込ませる式 読み込み式 手入力 指定済 ローソン:POS Wikiの募金

Slide 9

Slide 9 text

3.すぐに出来ること 金額指定の方法 読み込ませる式 読み込み式 手入力 指定済 Wikiの募金 安い ※利用場所が限定される ローソン:POS 高い ※設備導入コストかかる 安い ※金額不足過剰時に面倒

Slide 10

Slide 10 text

4.ビットコインのフルノードを立ててみる ● フルノードを立ててみる ○ トランザクションデータの同期に3W ○ 同期後は非力なラズパイ2でもサクサク動く ○ bitcoind の最新版が触れる ■ bitcoind 0.16 ○ コマンドが実行できる ● ラズパイ壊れない ○ 2017/4〜 連続稼動

Slide 11

Slide 11 text

5.Lightning Networkをさわってみる ビットコインの課題 ● 取引量が限られる(7件程度/秒) ● 送金手数料が高い ● ブロックチェーンサイズが大きくなってきた(160 GB) ● 取引の確定に時間がかかる これらを解決する手段の一つ 固定IPで常時接続が必要 → ラズパイではきつい → VPSでフルノード構築 (メモリ1GB,HDD200GB 864円/月) Blockstream社のc-lightningを使用

Slide 12

Slide 12 text

オフチェーンで取引をする Bitcoin Network Lightning Network

Slide 13

Slide 13 text

Lightning Network Bitcoin Network 手順 ユーザー視点で見ると・・・ ①アドレ ス作成 ②送金 ③Payment Channel開く ④デポ ジット ⑥PaymentC hannel閉じる ⑦返金 ⑧着金 ⑤取引

Slide 14

Slide 14 text

BitcoinNetwork ノードを経由して取引 Aさん Dさん Bさん Cさん Eさん ①アドレスを作成する

Slide 15

Slide 15 text

BitcoinNetwork ノードを経由して取引 Aさん Dさん Bさん Cさん Eさん ②送金する

Slide 16

Slide 16 text

ノードを経由して取引 ③PaymentChannel開く Aさん Dさん Bさん Cさん Eさん

Slide 17

Slide 17 text

ノードを経由して取引 Aさん Dさん Bさん Cさん Eさん ④デポジットする

Slide 18

Slide 18 text

ノードを経由して取引 直接つながらなくても間を経由して取引される。 マルチホップ送金 Aさん Dさん Bさん Cさん Eさん ⑤取引をする

Slide 19

Slide 19 text

ノードを経由して取引 直接つながらなくても間を経由して取引される。 Aさん Dさん Bさん Cさん Eさん ⑤取引をする

Slide 20

Slide 20 text

ノードを経由して取引 Aさん Dさん Bさん Cさん Eさん ⑥PaymentChannel閉じる

Slide 21

Slide 21 text

ノードを経由して取引 Aさん Dさん Bさん Cさん Eさん BitcoinNetwork ⑦返金する

Slide 22

Slide 22 text

LightningNetworkの状況(testnet) https://explorer.acinq.co/#/

Slide 23

Slide 23 text

txidなどを元に実際どうなってるかを見てみる ②、④、⑦でBitcoinのブロックに書き込みをしてる Lightning Network Bitcoin Network ①アドレ ス作成 ②送金 ③Payment Channel開く ④デポ ジット ⑥PaymentC hannel閉じる ⑦返金 ⑧着金 ⑤取引

Slide 24

Slide 24 text

②送金 Lightning Network Bitcoin Network ①アドレ ス作成 ②送金 ③Payment Channel開く ④デポ ジット ⑥PaymentC hannel閉じる ⑦返金 ⑧着金 ⑤取引

Slide 25

Slide 25 text

BitcoinNetwork ②送金 Aさん Dさん Bさん Cさん Eさん ②送金する

Slide 26

Slide 26 text

②送金 送金 2行目はtxid $ bitcoin-cli sendtoaddress 2MzGDD9quuLEzXL7YY85HrmoWUonks9mg4c 1 6c35e7ca0c427ea61f9ffdf7c615a7d131d6ce352ca5a75b4f0cfc86d4bbf8f4 $ lightning-cli newaddr { "address" : "2MzGDD9quuLEzXL7YY85HrmoWUonks9mg4c" } LNアドレスの作成

Slide 27

Slide 27 text

②送金 testnet用のエクスプローラで確認 https://test-insight.bitpay.com

Slide 28

Slide 28 text

②送金 $ bitcoin-cli getrawtransaction 6c35e7ca0c427ea61f9ffdf7c615a7d131d6ce352ca5a75b4f0cfc86d4bbf8f4 <16進データ> $ bitcoin-cli decoderawtransaction <16進データ> トランザクションの詳細をみるには・・・

Slide 29

Slide 29 text

④デポジット Lightning Network Bitcoin Network ①アドレ ス作成 ②送金 ③Payment Channel開く ④デポ ジット ⑥PaymentC hannel閉じる ⑦返金 ⑧着金 ⑤取引

Slide 30

Slide 30 text

④デポジット Aさん Dさん Bさん Cさん Eさん ④デポジットする

Slide 31

Slide 31 text

④デポジット PaymentChannelを開く 10000000 satoshi(0.1 BTC)をデポジット $ lightning-cli fundchannel 027e92b4fa1988ae5b0d44b87da80ab8875312fdae6631a8896851bc41857e66aa 10000000 { "tx" : "02000000000101f4f8bbd486fc0c4f5ba7a52c35ced631d1a715c6f7fd9f1fa67e420ccae7356c0100000017160014 2cf995871e9132feaae66dc9a4d79e0c13c65995ffffffff02809698000000000022002062e8e632aba272e934dbc171 f5298bd2348641c903ff2bdb70648a74b8196aa4d0495d05000000001600147b7eb600e7fb99a55f610222a0bcaa25 614038bf02483045022100816ff9c42ba1f2cd1a184921661241b0d07b085fbe62b8b3b1b663d608a4f404022061d2 0642c087191a334a56d03f597b8d0670b1281acfff58c500bf14fba0e7f101210367be5bfa831ea087b1ce2f31f710b3 213bff468df79ee9bd2e5fb702797f65be00000000", "txid" : "3c926db39d8225a7dc9e936c57dc2c80d7729f9157543c7228c7a798c5457fbb" }

Slide 32

Slide 32 text

④デポジット 2MzGDD9quuLEzXL7YY85HrmoWUonks9mg4c → ②で送金したアドレス Unparsed address [0] → LN側のアドレス

Slide 33

Slide 33 text

④デポジット トランザクションの中を確認しようとすると・・・ $ bitcoin-cli gettransaction 3c926db39d8225a7dc9e936c57dc2c80d7729f9157543c7228c7a798c5457fbb error code: -5 error message: Invalid or non-wallet transaction id

Slide 34

Slide 34 text

⑦返金 Lightning Network Bitcoin Network ①アドレ ス作成 ②送金 ③Payment Channel開く ④デポ ジット ⑥PaymentC hannel閉じる ⑦返金 ⑧着金 ⑤取引

Slide 35

Slide 35 text

⑦返金 Aさん Dさん Bさん Cさん Eさん BitcoinNetwork ⑦返金する

Slide 36

Slide 36 text

⑦返金 全額返金する $ lightning-cli withdraw n42HubwU2Nv4wEQ4cexhDCyVZmqJi9apJb all { "tx" : "02000000000102bb7f45c598a7c728723c5457919f72d7802cdc576c939edca725829db36d923c0100000000ffffff ffeba7c7f71aa7e2f15729ef10714ff5b0b90b26858a82c68e4d28f0f5054f9b790000000000ffffffff01e5def50500000 0001976a914f6df33c1a83b8d7cbd9645d74fdf8e45c53aba3f88ac024830450221008a7f9d4293c71f1bee9193eae 92934b9aadae61013ada43b155277c75c024c6e022005b0f9a1ae15febae19c0becbdf5d872da0ac6ea4b4f970389b 32d0b34727e4a012103dbbcca6b2e28c7be1700b05f99c6e131e4dd7356da53cd8db44a68bdef42423b024730440 2201365b96433561497de48ab8ffe8b51ee487202ffcee0546d461aed377a0418220220379a03db4df6388cf6f78d2 217db693225b7eff3db73b6d78b5756dbf398daa3012103b9d06829d8096beabb00f912785782d7c7147f6b1f0c1ec ef27f4f5065c6977f00000000", "txid" : "7d4cf2c46747db42804dc16854680343c49c5c049f572b283994da4712f8a4e7" }

Slide 37

Slide 37 text

⑦返金 ②送金 1 BTC ⑦返金 0.99999461 BTC 手数料 0.00000539 BTC

Slide 38

Slide 38 text

②送金 ④デポ ジット ⑦返金

Slide 39

Slide 39 text

Bitcoin Network 取引のまとめ そもそも別レイヤーに送金できない Lightning Network ①アドレ ス作成 ②送金 ③Payment Channel開く ④デポ ジット ⑥PaymentC hannel閉じる ⑦返金 ⑧着金 ⑤取引 送金BTC ロック ←実際は送ってない

Slide 40

Slide 40 text

Lightning Network Bitcoin Network エラー、不具合、気づくこと ①アドレ ス作成 ②送金 ③Payment Channel開く ④デポ ジット ⑥PaymentC hannel閉じる ⑦返金 ⑧着金 ⑤取引

Slide 41

Slide 41 text

④デポジット デポジットは16777215 satoshi以下でないといけない 16777215 satoshi = 0.16777215 BTC ≒ 150994円(1BTC = 900000円) $ lightning-cli fundchannel 022f0edb0d6a8e19320e949a6f24fd4442c390ba1f38f8349b92ee0ee6cbdece08 100000000 { "code" : -1, "message" : "Funding satoshi must be <= 16777215" }

Slide 42

Slide 42 text

⑤取引 手数料は送金額の0.5%以下でないとエラーになる。 150000 msatoshi送金で1004 msatoshiの手数料(送金額の0.669333%) $ lightning-cli pay lntb1500n1pd2uz6mpp5ct88sksjgz2e58s2hhnq0l5pw36fqy2j5esvu9cv7g8gu3de6zvqdpd2fjkzepqg9e8g6trd3jn5gz 8wfjk2m3q2dkk7mm5dp5k2cqzyssymvh8zs664lp68yu3jfmz70c0v89hkuntld2ypys5y3q7l7ag8yygwyxkfhvka5t4d3 ac8mw797m76rcwraas3x579y47577ay346sqyzfkk9 { "code" : 206, "message" : "Fee 1004 is 0.669333% of payment 150000; max fee requested is 0.500000%", "data" : { "fee" : 1004, "feepercent" : 0.669333, "msatoshi" : 150000, "maxfeepercent" : 0.500000, "getroute_tries" : 6, "sendpay_tries" : 0 } }

Slide 43

Slide 43 text

単位 1BTC = 100,000,000 satoshi = 100,000,000,000 msatoshi 1satoshi未満の返金時はどうするの? $ lightning-cli listpeers { "peers" : [ { "id" : "027e92b4fa1988ae5b0d44b87da80ab8875312fdae6631a8896851bc41857e66aa", "connected" : true, "netaddr" : [ "133.18.23.0:9735" ], "alias" : "TEST1.MUTAGUCHI", "color" : "008000", "channels" : [ { "state" : "CHANNELD_NORMAL", "owner" : "lightning_channeld", "short_channel_id" : "1288485:44:0", "funding_txid" : "3c926db39d8225a7dc9e936c57dc2c80d7729f9157543c7228c7a798c5457fbb", "msatoshi_to_us" : 10000000000, "msatoshi_total" : 10000000000, "dust_limit_satoshis" : 546, "max_htlc_value_in_flight_msat" : 18446744073709551615, "channel_reserve_satoshis" : 0, "htlc_minimum_msat" : 0, "to_self_delay" : 6, "max_accepted_htlcs" : 483, "status" : [ "CHANNELD_NORMAL:Funding transaction locked." ] } ] } ] }

Slide 44

Slide 44 text

その他(c-lightningが不安定?) ● ③PaymentChannel開けない、④デポジットできない、⑤取引できない ● lightningdが落ちる。 ● bitcoindとLightningdのブロック高が合わない。 $ bitcoin-cli getinfo "version": 150100,   〜中略〜 "balance": 1.94999236, "blocks": 1288659,   〜中略〜 } $ lightning-cli getinfo { "id" : "034ea2619d137ceaeb7c0a9a4c36037c6a99eed4cef9eca984bf5ac2efbbb6fcf4", "port" : 9735, "address" : [ { "type" : "ipv4", "address" : "133.18.23.210", "port" : 9735 } ], "version" : "v0.5.2-2016-11-21-2269-g249464c", "blockheight" : 1288659, "network" : "testnet" }

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

まとめ ターミナルはお友達になるしかない コマンドも少しずつ覚えるしかない GitHub見るようになった エクスプローラ見るようになった testnetのマイニングは約20分毎 そして単なる知識だったものを自信が持っ て説明できるようになる!

Slide 47

Slide 47 text

Appendix ● ビットコイナー反省会 ○ Lightning Network Q&A放送 with 大石哲之さん https://youtu.be/fm9-Dw9BvMI ○ SegWit,Lightning, MAST ビットコインの最重要技術を改めて考える with ハウインターナショナル安 土さん https://youtu.be/jtRn6cFVc68 ● ブロックチェーン・プログラミング 仮想通貨入門 11章 スケーラビリティへの対応 ● GitHub ElementsProject/lightning https://github.com/ElementsProject/lightning ● GitHub lightningnetwork/lnd https://github.com/lightningnetwork/lnd/blob/master/docs/INSTALL.md

Slide 48

Slide 48 text

Appendix 自分で試したい場合はQiitaに手順まとめました ● お手軽にVPSでBitcoinフルノードを立ち上げる方法 https://qiita.com/9muta/items/d3b5cf003d18ab58d112 ● LightningNetworkノードを立ち上げる方法 https://qiita.com/9muta/items/285431be70caf667ecd1 ● LightningNetworkを使ってみる https://qiita.com/9muta/items/c9549a4694ff5fe8bf25