コンセンサスベイスでインターンをしている木澤(@ln_bitgirl)です。
先日行われたBitcoinHackathonに参加してきたので、レポートさせていただきます!
ハッカソン概要
8/18(土)〜19(日)にMobile Developer向けのBitcoinHackathon (主催: Yenom,HashHub,CryptoAge, スポンサー:Bitcoin.com)が行われました。
昨今、暗号通貨やブロックチェーンに注目が集まる一方で、Bitcoinを利用したアプリの開発はあまり進んでいません。
特に日本ではEthereumが注目を集めていますが、Bitcoinでも柔軟なコントラクトを書くことができます。
これまでBitcoinにはEthereumのSolidityのような高級言語がなく、低レイヤーの知識がないとコントラクトが書けない状況でした。
そんな折、Bitcoinのwalletアプリを作っているYemonさんがios用Bitcoinアプリ開発向けライブラリを開発されました。
今回はそのライブラリを用いて、より簡単にコントラクトを書いてBitcoinアプリを作ってみようというハッカソンでした。
2日間(徹夜含む)でチーム作成、アイデア出しからアプリ作成まで行いました。
会場はブロックチェーンのコミュニティー作りや本郷でコワーキングスペースを運営するHushHubさんでした。
ハッカソンの流れ
<1日目>
– Bitcoin開発のためのハンズオン
– Bitcoin Basic OP_CODE
– Bitcoinのコントラクト例
– Bitcoin.comによるBITBOXハンズオン
– アイデアソン : Why Bitcoin × Mobile ?
– 審査員による講演
– Bitcoin Scriptで作るSmart Contract (安土さん)
– BitAuthとweb認証の歴史 (宮本さん)
– 開発
<2日目>
– 開発続き
– アプリ発表プレゼン
– 審査結果発表
– 懇親会
Bitcoin開発のハンズオン
Bitcoin BASIC OP_CODE
まず初めにBitcoinでのアプリ開発に必要なOP_CODEについて、Yenom CEOの宇佐美さんからレクチャーがありました。
BitcoinでTransactionを発行する際には、Lock Script, Unlock Scriptを書くことになります。(scriptPubkeyやscriptSigとも呼ばれます。)その仕組みや活用方法について勉強しました。
またスクリプトは左から右に処理されるのですが、その概念の元になっているスタックマシンについても練習問題を使って演習しました。
詳しくはYenomさんの開発者向け記事をご覧ください。
基本のスクリプトについてP2SH(Pay To Script Hash)を例に取り上げ、解説してくださっています。
Bitcoinの基本的なコントラクト例
続いて、Yemonのios開発者であるakihujiさんからBitcoinのコントラクト例についてレクチャーを受けました。
Bitcoinのスクリプトでよく使われるmultiSigとLock Time、シークレット値を組み合わせてどんなことができるかを教えていただきました。
第三者が介在することで買い手と売り手の取引を保証するEscrowという仕組みや、Atomic Swapと呼ばれる異なるブロックチェーン間で通貨の取引の際に使われるコントラクトも、前述したmultiSig等のスクリプトを使って表現できると知り、驚きました。
(Lock TimeがBIP:65より追加されたので、現在はシークレットとLock Timeのみで記述できる機能も多いです。)
またBitcoin × Mobileアプリの例として、GPSを利用して地図上に落とされた仮想通貨をクイズに答えてゲットするtakaraや、SNSの投稿がBitcoinのブロックチェーンに永遠に刻まれるMemo.cashを挙げられました。
アイデアソン : Why Bitcoin × Mobile ?
さて、お昼休憩を挟んでからは、早速チームに別れてアプリのアイデアを出し合いました。
今回のお題は「Mobileだからできること × Bitcoinだからできること」。
Mobileだからできることでは、持ち歩く、位置情報、SNS、健康管理など、次々にアイデアが出て来ました。
一方Bitcoinだからできることに関しては、なかなかアイデアが思いつかず難航しました。
確かに「エンドユーザー同士で管理できる」「永久に改ざん不可能なデータが残る」などの特徴は挙がりましたが、それをアプリにどう生かすか?という部分が難しく、時間をかけて議論しました。
審査員による講演
1日目の夕方には、今回審査員である安土茂亨さん(ハウインターナショナル CTO、 chaintope Inc. CTO)と宮本丈さん(CAMPFIRE)による講演がありました。
ちなみに、皆さんご存知かもしれませんが、安土さんはこちらのブログの著者です。
Bitcoin Scriptで作るSmart Contract (安土さん)
安土さんはBitcoinのセカンドレイヤー技術であるLightnig Networkで使用されているHTLC(Hashed Time Lock Contract)や、任意のデータをBitcoinブロックチェーンに記録できるOP_RETURNの活用例(Colored Coinなどが代表例)について、レクチャーくださいました。
なかなかすぐには理解できず、資料を見返して調べてやっとわかるかなというほど内容の濃いプレゼンテーションでした。
詳しく知りたいと思われた方は、安土さん共著の「ブロックチェーン・プログラミング 仮想通貨入門」をご覧になってください。
BitAuthとweb認証の歴史 (宮本さん)
宮本さんは安土さんと内容が被らないようにと、あえてwebの認証の歴史とも関わるBitAuthについてレクチャーくださいました。
BitAuthとはBitcoinの暗号手法を用いたパスワードレスの認証システムです。
昨今様々なマッシュアップのwebサービスができてくるにつれて、クライアントの情報にアクセスできるサーバー間の認証と認可についてプロトコルを整備する必要が出てきました。
今スタンダートになっているのはOpenID(認証)とOAuth2.0(認可)です。しかし、もともと認可の仕組みであったOAuth2.0が認証にも使われ出し、認証のプロトコルであったOpenIDが事後的にOAuth2.0を取り込みました。
その結果IDプロバイダーが単一障害点となった上、仕様も複雑になってしまいました。(“Oauth Sacks.”という言葉に象徴されるようです。)
そこでIDの管理と仮想通貨のwalletを統一し、ユーザーが自分でIDを管理するという発想で、Bitcoinを用いたID管理が提案されてきました。
これまでBitIDなどBitcoinアドレスを用いて認証するという提案はありましたが、BitAuthはアドレスではなく独自のSINプロトコルを利用し、よりAPI連携などに特化した認証の仕組みになっているそうです。(“Why not BitID?”)
開発・プレゼン
開発はほとんどのチームが終電ギリギリまで議論し、半分ほどのチームが泊まり込みで行いました。
私のチームの場合、メンバー4人のスキルセットが、私を含むwebのサーバーサイドエンジニア2人、swiftエンジニア、アプリ開発のシナリオライターという構成でした。
そして、チーム内の議論の結果、前述した買い手売り手間の取引を保証する第三者であるEscrowを無くし、完全二者間で取引がでできるコントラクトサービスを考えました。
基本的にメンバー4人で議論したのですが、たまたまwebエンジニアの2人がビットコインのコントラクトに詳しかったので、主に2人が技術や暗号方式について提案しました。
それだけではどうしても行き詰まってしまう部分を、シナリオライターの方がユーザーのインセンティブ設計の観点で意見を下さり、包括的にサービス設計を議論できたかなと思います。そして、最後にswiftエンジニアの方にコードに落とし込んでもらいました。
その計画で順調に行くはずだったのですが、実際にはコントラクトとサービス内容の議論が収束した頃には1日目の深夜になってしまい、開発にかける時間が減ってしまいました。
今回は評価基準が「Bitcoinならではの使われ方をしているか」、「Bitcoin関連部分の実装技術、使ってみたいという魅力があるか」だったので、なんとか外装を見繕いつつ(笑)、スクリプトの実装に注力しました。
さて、2日目のプレゼンテーションでは各チーム開発したアプリを個性的なプレゼンテーションで審査員に訴えかけました。
ユニークなアイデアから現実的に問題解決につながるものまで様々なアイディアが生まれました。そして、すぐにでもリリースできるのではないかと思うほど完成度の高いアプリも多く、大変白熱しました。
審査は、安土さん、宮本さん、BItcoin.comの方々が行いました。
賞と賞金も用意されており、1位 1BCH、2位 0.5BCH、3位 0.25BCH、特別賞にYenom賞、HashHub賞、Kenさん賞と充実していました。(全部で12チームあったので、約半分のチームが入賞する形です。)
ハッカソンで提案されたアプリと受賞作品
- 優勝 : 遺産相続のできるウォレット
- 2位 : AtomicSwapを使ったウォレット
- 3位 : 投票用ウォレット
- Yenom賞 : 万歩計とGPSを連動したウォレット
- HashHub賞 : チケット転売防止ウォレット
- Kenさん賞 : 1分毎の契約で決済可能なウォレット
まとめ
今回私はハッカソンの参加が初めてかつ、モバイル開発者でもなかったので、正直チームの足手纏いにならないかと不安でした。しかし、チームになったメンバーの得意な部分がそれぞれ違ったので、各々の得意な部分を生かす形で開発できたかなと思います。
また著名な審査員の講演が聞けたり、アイデアに詰まった時に直接意見をもらえたことはとてもいい機会だったと思います。
すでに第2回ビットコインハッカソンの開催も決定しているようなので、次回も参戦したいと思います!
第2回 Tokyo Bitcoin Hackathonの詳細はこちらから