サイトアイコン DG Lab Haus

日本初、ブロックチェーンのコア実装を体験するワークショップを開催

2017年2⽉3⽇、4日、5⽇の3日間にわたり、DG Labは「Blockchain Core Camp」(以下、BC²)を開催した。DG Labは 2016年7月(東京)、11月(San Francisco)と2回に渡りブロックチェーンをテーマに「THE NEW CONTEXT CONFERENCE」(以下、NCC)を開催してきた。NCCは主にビジネスパーソンをターゲットに開催されたカンファレンスだったが、今回のBC²は、3日間にわたり一般のエンジニアを対象に、ビットコインで用いられているブロックチェーン技術のコア実装をハンズオン形式で体験することを目的にワークショップとして開催した。本ワークショップは今後も不定期に複数回開催することを予定しており、初回となる今回はビットコインのコア実装を中心に、その応用や将来的に期待されている技術なども網羅、ブロックチェーン技術の基礎から拡張技術まで幅広く体験することを目的とした。トレーナーとしては、ビットコインコアへのコントリビューション実績を持つメンバーを含むDG Labのエンジニアチームを始め、海外からも、ビットコインのコアデベロッパーであるThaddeus Dryja氏(Blockchain Layer2技術として注目を集めるLightning Networkの発明者)、Jeremy Rubin氏(マサチューセッツ工科大学 Digital Currency Initiativeのファウンダー)、Nicolas Dorier氏(C#版のビットコインであるNBitcoinの開発者であり、注目技術TumbleBitのC#版NTumbleBitの開発者)を迎えた。

本記事では、BC²のダイジェスト映像と、各セッションで議論された内容の概要をセッション順に紹介する。

DG LabのFacebookページ にてDG Labの活動を更新中。ご興味ある方はこちらからフォロー。

<Day1:基礎>

Day1はビットコインの基礎から始まり、徐々にビットコインコア(難しい内容)へ。最後はJeremy Rubin氏によるビットコイン開発現場の話が好評を博した。初日という事やそのボリュームの多さ、難易度の高さから最後には参加者の若干疲れた様子もうかがえた。

ビットコインの可能性(by 渡辺 太郎)

 まずBC²の目的について、ブロックチェーンの技術を学ぶことはもちろんだが、コードに触り、動かし、直接体験すること、またその先にあるコアコミュニティの日本での醸成を促進し、日本からビットコインコアのコード(オープンソースコミュニティ)に貢献するデベロッパーを増やしたいことなどを説明。また、国内では様々なブロックチェーン技術が同列に語られがちなことから、その整理が必要なこと、またDG Labとして目指しているブロックチェーンの形、またBC²を通してそのゴールに向かってデベロッパーを増やして行きたいことなどを説明。

ビットコインの基本と体験(by Anditto Heristyo)

 まずBC²で利用する専用のビットコイン(ブロックチェーン)コアのフォークについて説明。bitcoindの起動。bitcoin-cliを使ってのウォレット(秘密鍵)作成に始まり、ビットコインをマイニングして他人に送信するまでの基本の一連の流れを体験。ビットコインの3つのネットワーク(Main, Test, Regression Test)の説明。ブロックの中身やマイニングの仕組みの詳細、PoW、トランザクション/UTXO、コンセンサス、アドレス(リユース問題)などビットコインの基本的な構造と注意点などについて解説した。

Transactionデータの作成(by 中川 卓俊)

 Transactionのデータ構造、TXIDの仕組み、インプットとアウトプットの関係などを説明。cliを使って実際にトランザクションの中身を確認。次にUTXOの検証に使われるScriptについて、その動きやデータについて解説。また、標準的なトランザクションとして、P2PKH、OP_RETURN、P2SHの仕組みや構造について説明した上で、再度トランザクションの中身を確認してアウトプットを改めて確認した。アドレスの種類について解説し、いよいよTransactionデータの作成へ、UTXOの複雑な仕組みに注意しながら実際にTransactionの送信を体験した。

RPCアプリの作成:注意とベストプラクティス(前半)(by Karl Johan Alm)

 RPCアプリ開発の注意点から、正しい構成法の解説。RPCの簡単な設定をした上でNode.jsを使ってシンプルなRPCアプリを作成していく。ConfirmationsからReorg、ダブルスペンドのケースを挟んで様々な脅威モデルの話へと移る。まず、前提としてブロックチェーンに関わる脅威モデルは一般のソフト開発と異なるが、これを誤解して危険な実装を伴ったブロックチェーン技術が世の中にいくつも存在することなどを説明、Sybil Attack、ダブルスペンド等の問題を解説し、実際にRPCアプリの作成演習へ。Invoiceの作成から支払いの実行と確認、脅威モデルへの対策など。宿題として最終日に確認する流れに。

パフォーマンスを重視するビットコインでの開発手法、その仕組みとプロセス(BIP, PR, 等)(by Jeremy Rubin)

 MIT Digital Currency Initiativeのファウンダーであり、自身もビットコインコアデベロッパーであるJeremy Rubin氏によるビットコインコアコミュニティでの開発の進め方についての解説。ビットコイン開発についての基本的な心構えから、気をつけるべきこと、他のデベロッパーとのコミュニケーションについて、参考となる書籍や情報などを解説。ビットコインコアへのコントリビューション(貢献)方法についても様々なアプローチが存在することを説明。BIPの解説を挟み、実際のエンジニアリングについても例を用いて解説。最後にはビットコインの著名開発者を紹介。開発現場最前線の話が好評だった。

<Day2:拡張>

 Day2はビットコインコアを触る上で避けて通れないC++から始まり、注目のSegwitやTumbleBit、Forkの解説にThaddeus Dryja氏が飛び入り参加し盛り上がる。目玉だった ネットワークを2つに分断してのForkも実施し、参加者にも本気度が伝わり始め徐々に前のめりに。

C++とRPCを触る(by Karl Johan Alm)

 ビットコインコアを触る際に気をつけるべきC++の注意点や実行例を解説、RPCの中身を触ってコマンドを追加するなど、コアを実際に触ってみる演習を行った。

はじめにRPCの機能一覧を解説、実際にコマンドを追加した際のデバッグなどにも触れる。演習問題ではウォームアップで簡単なコマンド追加から、あると役に立つコマンドの追加なども体験。かなり難易度の高いセッションとなり、音を上げた参加者も。

Bitcoin as a Platform(by Anditto Heristyo)

 仮想通貨以外の用途として検討されているビットコインベースの技術についての紹介と解説。Smart ContractからAltcoin、Digital Assetなど、また、現時点ではスケーラビリティとDecentralizationのトレードオフである状況や開発におけるコンセンサス、セキュリティを重視するが故の特徴などを説明。実例としてOpen Asset、Sidechain、TumbleBitまでビットコインの技術を使ったその他の注目技術について概要を解説。

Segwitの特徴と利用(by 中川 卓俊)

 注目技術Segwitについて技術的な観点から解説。そのデータ構造からSegwitがもたらすメリット(TXIDを固定にできるMalleability対策、ブロック内のTransactionデータの増加など)、実際の利用方法について解説。また、BIP143の内容についても触れながら、SegwitのTransaction形式でアドレスに送信する演習問題も交え実践的に解説。この後のセッションで扱うLockTime(TumbleBitやLightning Networkに利用)の説明につなげていく。

LockTimeを利用したP2SH(by 中川 卓俊)

 Day1のTransaction解説では使わなかった(”0”で設定)Transactionに設定するLockTimeについての解説。LockTimeの制御に使われるOPコード(”OP_CHECKLOCKTIMEVERIFY”と”OP_CHECKSEQUENCEVERIFY”)の説明。

最後は実際の演習により、LockTimeを含んだScriptの作成、P2SHアドレスの作成、P2SHへの送信、Block化の確認などを体験した。

TumbleBit for scaling and privacy(by Nicolas Dorier)

 商取引等において、他の同等の物と品質等が同じで代替・交換が可能であることを重要視するFungibility(ファンジビリティ)で注目を集めたTumbleBitの解説。今までのペイメントチャネルの課題を説明。それに対する解決策としてタンブラーに情報を詰め込むようにトランザクションの出入りを見えなくすることでプライバシーを担保する手法をC#版ビットコインの開発者であるNicolas Dorier氏が解説。

付箋や実物のペンによる署名行為などフィジカルなアプローチで丁寧に説明を行った。

コンセンサスとOrphan Block(by Anditto Heristyo)

 コンセンサスの過程で生み出されてしまうOrphan Blockについて、どういったケースで発生するのか、また、発生した場合どのように整理されるのかなどを解説。Stale BlockからFork(Soft Fork、Hard Fork)についても例を用いて説明。後半は参加者全員でTransactionを作り、途中でネットワークを2つに分断しBlock Explolerの動きを確認しながら、実際にチェーンがForkする瞬間を体験し、Day2一番の盛り上がりとなった。

<Day3:将来>

 Day3は、RPCアプリの後半セッション、Thaddeus Dryja氏のPoWゲーム、Jeremy Rubin氏のスマートコントラクトなどが開催され、セッションは大いに盛り上がった。 Lightning Networkは世界初のデモが行われた。3日間を総括した後、Ideathon / Hackathonを実施し、チームごとに発表を行い終了。懇親会にもほぼ全員が参加し、参加者の満足度もこの日が3日間で最も高かった。

最新の課題(by Anditto Heristyo)

 主にScaling ビットコインで議論されている、ビットコインに用いられているブロックチェーンの課題と解決するためのアイデアについて代表的なものをいくつか紹介。Scalabilityに対するSegwitやLightning Networkといった解決策、Fungibilityに対するHD WalletやCoinJoin、TumbleBit、Lightning Networkといった解決策など。また、SPVの課題など。ブロックチェーンはまだまだ実用段階にはなく、様々なScalingのアイデアが議論されている状況であることを再度説明した。

RPCアプリの作成:注意点とベストプラクティス(後半)(by Karl Johan Alm)

 Day1で宿題となっていた、RPCアプリの作成についての答え合わせセッション。Invoiceの発行、支払いによるInvoiceのアップデート、Invoiceステータスの種類などの確認。

PoWゲーム&Diffie-Hellman(by Thaddeus Dryja)

 当初の予定になかったが、急遽Thaddeus Dryja氏が行ってくれたセッション。まずはProof of Workを手作業で行うゲーム、任意のテキスト(名前+数字)をSHA256でハッシュ化、”0”が多く並ぶハッシュを作れた人がPoWの勝者となるゲーム。PoWの仕組みを直感的に伝える効果的なセッションとなった。次に、通信を行いたい2者が公開鍵のみを相手に共有し、自分の秘密鍵と受信した公開鍵から共通鍵を作成できる(共通鍵を第三者に盗聴されても鍵は生成できない)ディフィー・ヘルマン鍵交換の暗号プロトコルを使った不思議なデモンストレーションを体験。

Structuring Multi Transaction Contracts(スマートコントラクト)(by Jeremy Rubin)

 こちらも当初の予定になかったが、Jeremy Rubin氏がBC²の直前にスタンフォード大学で講演を行った内容を再現し、ビットコインのトランザクションが使用される際の制約を定義できるスマートコントラクト的な機能である”Covenants”について解説を行った。Execution(実行)とConstruction(作成)の2種類からなるCovenantsの構造、キーを盗まれてもリカバリーできる機能など、その仕組みと可能性について技術的な実例も交えて解説した。

Lightning Network(by Thaddeus Dryja)

 現時点でのビットコインにはトランザクションにおける遅延があり、リアルタイムにペイメントを行ったりというユーザビリティが実現できていない。Scalingの議論は活発だが、コアの開発は慎重さ求められる為、別レイヤーでの解決を目指したLightning NetworkについてMIT Media Lab Research ScientistでありLightning Networkの発明者であるThaddeus Dryja氏本人による解説とデモンストレーションが行われた。デモンストレーションは世界初の試みということもあり、3日間でもっとも盛り上がったセッションとなった。

総括セッション(by 渡辺 太郎)

 3日間の総括として改めてBC²の内容を簡単に振り返り、あえてボリュームを多くし、難しい内容のセッションについて妥協せず、3日間という長めのワークショップとした意図について説明。改めてブロックチェーンの技術はまだ発展途上であり、実用化に向けてはコアデベロッパーの育成が不可欠であること、今回の参加者に世界中のコアデベロッパーとのコラボレーションを通してその役割を担ってもらいたいことなどを促し3日間の総括とした。

Future of Blockchain : Ideathon / Hackathonをやってみよう

 総括後、チームに分かれてFuture of Blockchainをテーマに「動くものを作ってみる」「スケーリングのアイデアを出してみる」「3日間の感想を発表する」「何か主張してみる」などのアウトプットを求めてグループディスカッションの時間をとった。アイデアのある参加者はSlackに投稿、賛同者を集めてチームを結成。1時間ほどの時間を使いアイデアを整理、形にしていった。発表チームは10組近くになり、それぞれ創造的なアイデアやアウトプットを披露していた。

ちなみにBC²の2週間後、ワークショップに参加した10人以上のエンジニアがビットコインコアに対してPRを始めていた。今は規模は小さくともBC²が日本のビットコインコアデベロッパーの第一歩になったのであれば、少なからず意味を持つイベントであったと思う。

モバイルバージョンを終了