bitcoin x slack...

47
Bitcoin x Slackマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜 株式会社ビズリーチ 古山亮 @ryof 20170327

Upload: dcubeio

Post on 05-Apr-2017

58 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

Bitcoin x Slackでマイクロペイメントを実現!

〜生活の必要上割り勘botを作るまで〜

株式会社ビズリーチ 古山亮@ryof

20170327

Page 2: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

D3とは

Page 3: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

D3 (ディーキューブ) とは

創業以来、高い技術力と戦略的なUI/UXを武器に、 世の中に価値あるサービスを生み出しているビズリーチ。 サービスの数が増えるにつれ、技術の幅が広がったため、 そのスキルやノウハウを社内のみならず、 世の中のエンジニアやデザイナーとも共有すべく、

私たちは「D3※」というプロジェクトチームを立ち上げました。

D3では、たくさんのイベントや勉強会を開催し、

世のエンジニア・デザイナーと共に、さらなる高みを目指します。

※D3=DESIGNER & DEVELOPER DIVISION

Page 4: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

Agenda

● 会社紹介

● 自己紹介

● Bot作成の経緯

● お金の話

● Bitcoinの話

● bitcore-wallet-clientの話

● デモ

● 今後の課題

● 質疑

Page 5: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

株式会社ビズリーチのご紹介

Page 6: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

会社紹介

Page 7: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
Page 8: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

自己紹介

Page 9: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
Page 10: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

もう少し詳しく

● 古山 亮(ふるやま りょう)

● ジュネーヴにて生まれる

● 東京にて育つ(2歳〜)

● 早稲田大学大学院にて機械学習を専攻(工学修士)

● 株式会社リクルートHDに新卒入社、プロダクトオーナーなど

● シリコンバレーにある現地子会社ベンチャーに駐在 →退職

● 全国物見遊山(2016年11月)(無職)

● 2016年12月より株式会社ビズリーチのHRMOS事業部でインフラエンジニア

Page 11: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

私事ですが、年初からルームシェアを始めました

Page 12: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

ルームシェアはメリットがたくさん!

● 一人暮らしよりは広いところに住める○ 3人暮らし3LDK、居間が広いので大型 4Kテレビなど置ける、キッチンも広い!

● 食材を余らせない

● 光熱費も安い

● 家事も分担できる

● 帰ったら誰かいる○ 寂しさみたいなものは感じない(人によるかも)

● 鍵を忘れても帰れる

○ 昨日実家に鍵忘れました …このイベントの後また実家に帰ります … ● 連絡はSlackで

Page 13: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

デメリットもある!

● 割り勘が頻繁に発生

○ 洗剤や掃除用具に固定費など、わりと日常的に発生

● 日頃現金をあまり使わないメンバー

○ クレジットカードやSuicaで事足りてしまう

● なかなか手元にちょうどいい額を持っていることが少ない…

● そもそも現金ってなんなの?21世紀なのに不便すぎない?

Page 14: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

そもそも現金って…何?

Page 15: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

現金とはなんなのか

● (日本においては)政府発行の通貨及び日本銀行券 ← 法定通貨

● それそのものには普遍的な価値(例: Gold)のない一種の証書

● 1931年、日本では兌換紙幣から不換紙幣へ(金本位制→管理通貨制)

○ 金との交換が保証されない信用通貨となった

○ 通貨の価値を保証するものは国の信用のみ

● 1971年、ニクソンショックで米ドルドルも金本位ではなくなる

● 世界経済は膨張を続ける

Page 16: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
Page 17: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

数値のやりとりだけ

● 口座への給与振込

● 物品の売買

● カード決済

● …全部数値をやりとりしてるだけ!

Page 18: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

つまり我々は日々数値のやりとりをしているに過ぎない

Page 19: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

ならば21世紀的にBitcoinで

Page 20: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

でもBitcoinって…何?

Page 21: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

Bitcoinとは

● Satoshi Nakamotoなる謎の人物により投稿された論文が元のアイデア

● P2Pな分散台帳システム(非中央集権的)

● 信用できない複数の参加者間で台帳の整合性を保証

○ 内部的にはブロックチェーンというアイデアを利用している

● 2009年よりネットワークが稼働している

● 2010年に2枚のピザと10,000BTCが交換される(史上初のBTC取引)

● 取引所Mt.Goxの破綻等、乱高下を繰り返しながらも高騰

● 2017年頭に時価総額2兆円を突破

● 3月2日、1BTCが純金1ozの価格を突破

Page 22: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

ブロックチェーンとは?

● 計算によって分散台帳の整合性を保つ仕組み

● 各ブロックは取引の集合で、前ブロックのハッシュ値を持つ○ ブロックが鎖のように連なっていく=ブロックチェーン

● 任意の32bitの値を正解が見つかるまでハッシュ計算(SHA-256)し続ける

● 正解のハッシュ値を見つけた人には報酬として

12.5BTCが与えられる(2017年3月現在)

● 最初に見つかった正解ハッシュ値を次のブロックハッシュとして

ネットワーク全体にブロードキャスト、以後はこの値が使われる

Page 23: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

正解のハッシュは誰が決めるの?

● 誰かが「次のブロックの正解はこれだよ」と決めるのでは中央集権的

● 一定の条件を満たすハッシュ値ならなんでも正解となる

● ビットコインでは、ハッシュ値の頭に0が並ぶ数で正解を決めている

○ 例)ハッシュ値の頭に0が8つ並んでいればそれが正解

● 正解を見つける難易度は、約10分に1回ブロックが生成されるよう、

ネットワークの演算資源量によって調整されている

○ 例) 頭に0が2つ並ぶハッシュ値と頭に0が8つ並ぶハッシュ値では後者のほうが見つけにくい

Page 24: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

Bitcoinの概要はそんな感じ

Page 25: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

…ということを同居者に話したところ

● とりあえずで作るからセキュリティとか甘々になると思うけど

○ 別に小額決済だしいいんじゃない?

● Fiat(法定通貨)とのレート変動リスクもあるよ

○ 別に小額決済だしいいんじゃない?

○ 面白そうだしいいんじゃない?

という反応(よかった〜

Page 26: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

じゃあやるか

Page 27: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

考えたこと

Slack的要件

● 割り勘の品目・価格と

請求相手を指定できる

● 債務者側は承認・否認できる

○ なんでも自動決済は流石に …

● なんか新しめのbot framework

Bitcoin的要件

● 採掘はしない

● トランザクション検証もしない

○ BC容量が数十GBとなっている…

● とりあえずtestnet

○ テスト用のネットワーク、

本番ネットワークは livenet

Page 28: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

技術はこんな感じで決定

● Slack bot: Botkit○ Hubotでもよかったけどどうせ馴染みがない( jsほとんど書いたことない)ので

新しめのやつを使いたかった

○ 特にちゃんと比較したわけではないので Hubotとのメリデメは謎

● Bitcoin client: bitcore-wallet-client○ Bitpay社が開発している一連のモジュールのひとつ

○ Bitcore-wallet-serviceサーバと通信する

■ bwsサーバは自分で立てるか、 bitpay社の( https://bws.bitpay.com/bws/api )を使う

○ 同社のウォレットアプリCopayで使われている

■ 世界で唯一? testnetにも対応!

■ オープンソース

■ 検証・使い方を調べるのが楽!

Page 29: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

例えば:

これがCopay

これが今回のbot

Page 30: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

使い方の流れ

● (初回)Copayでウォレットを作成

● (初回)DMでSlack上にウォレットをアクティベートする(botに持たせる)

● 債権者(以下甲)が債務者(以下乙)を指定して債権を主張(JPYベース)

● 乙全員が承認したら、各乙のウォレットから甲のウォレットへBTCが移動

○ BTC額は全員承認した時点の JPYレート

○ 移動する額は乙がn人いたとして各乙に対し 1/(n+1) (割り勘だから)

Page 31: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

…まで考えたはよいものの

Page 32: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

bitcore-wallet-clientの使い方がよく分からない

● Documents的なサイトなし

● GithubにWikiなし

● README.mdに一応リファレンスはある

● サンプルなし

● 使ってみた系の情報なし(英語でも殆どなし)

● Stackoverflowで「bitcore-wallet-client」と検索したら3件だけヒット

Page 33: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

全部インストール絡み…

Page 34: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

仕方がないので実装にあたってはCopayのコードを参考に

Page 35: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

ということで、bitcore-wallet-clientについて少し解説

Page 36: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

ウォレットのアクティベート

● BIP-39で規定されているmnemonic wordsを利用

○ BIP-xxxはBitcoin Improvement Proposalsと呼ばれる文書群

○ RFCみたいなもの(たぶん)

○ Mnemonic wordsはウォレットの秘密鍵を覚えやすく表現するための 12 (or24) の単語群

○ バックアップに使われる

○ 単語群はCopay上で生成できる

○ 要するに「ふっかつのじゅもん」

● Botに「activate [12 WORDS]」と教えるとそのユーザ用にウォレットを復元

● これにより他のユーザにウォレットの秘密鍵を教えず生成が可能

○ もちろんbotの管理者は如何用にも知りようがあります …

Page 37: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

ウォレットアクティベートのサンプル

1. bitcore-wallet-serviceのURLを渡してclientを初期化

2. Space-joinedなpassphraseを渡す

3. openWallet!

Page 38: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

任意の額の送金

● 下記の手順で送金を実現する

● 受け手のアドレスを生成○ 今回は階層的決定性 (HD)ウォレットなので 1ウォレット=1アドレスではない

○ HDウォレットはシード( 12単語)からウォレットが生成でき、

紐づくアドレスを無限に生成できる

● 受け手のアドレス宛に任意の額でTxProposalを作成○ ※ tx = transaction

● TxProposalを発行

● TxProposalに署名

● TxProposalをブロードキャスト

Page 39: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

送金のサンプル

● 1 BTC = 100,000,000 satoshi● ignoreMaxGap = true にするとなんの取引もないaddressをたくさん作れる

○ → デバッグ作業には便利

Page 40: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

Botkitについて

Page 41: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

…は日本語でも結構情報出てくるので割愛して

Page 42: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

デモ

Page 43: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

デモその前に

● 割り勘botはその名をricca.pay(りっか・ぺい)と言います

● 雪の降り頻る1月の奥飛騨温泉で古山が思いついたので、りっかです○ ろっか【六花】

○ 〔六弁の花の意から〕

○ 雪の異名。りっか。     - 大辞林より引用

● デモ中に大事な大事なmnemonic wordsが見えまくりますが、

Testnetでのデモなのでメモっても古山の資産は奪えません○ ※ 奪えるけど、、奪っても価値ないです

○ Livenetでmnemonic wordsを取り扱う時は誰にも分からないように厳重に保管を!

● ソースコードはべた書きしているところなど直したらGithubに公開予定

Page 44: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

今後の課題

● Interactive button使いたい

○ 今はreactionベース。こういうのしたい →

● マルチシグウォレットを使ってみたい

○ N個の秘密鍵のうちM個があれば署名みたいなことができる

○ BIP 11: M-of-N Standard Transactions で規定

● コールバック地獄みたいなことになったのでなんとかする

○ js力不足

○ 勉強します…

Page 45: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

最後に…

Page 47: Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜

ご清聴ありがとうございました!