この講座について
授業概要
教育用ブロックチェーン MinChain を動作させ、コース参加者内でマイニングや攻撃、
フォークといった実験を行う。さらに、スマート コントラクトについて紹介し、それらに関連
する問題を考える。
到達目標
ブロックチェーンの動作原理について正確な理解をもち、ブロックチェーン関連ソフトウェ
アのソースコードを理解できるようになることを目指す。また、ブロックチェーン ネット
ワークをゼロから構築できるようになることを目指す。
1
竹井 悠人
● 東京大学 情報理工学系研究科 コンピュータ科学専攻 修士
● Microsoft MVP for C# 2004 - 2008
● IPA 未踏クリエータ 2013
● スタートアップ
○ 写真共有アプリの開発
○ 物流関係のアルゴリズム開発
○ セキュリティ コンサルティング
● bitFlyer, Inc. にてソフトウェア エンジニア
○ 研究開発チームでブロックチェーン製品「 miyabi」
○ セキュリティ関係業務
2
第1回
ブロックチェーンと計算機科学
1. イントロダクション
2. Bitcoin を動作させる
3
1-1イントロダクション
4
参考書
本講座で読み書きするソース コードの大部分
は C# 7.1 になります
普段 C# を書き慣れていない方はおすすめ
します
独習C# 新版
山田 祥寛 (著)
ISBN: 9784798153827
画像は https://www.amazon.co.jp/dp/4798153826 より引用
5
参考書
Bitcoin に関する基本書。本講座でも頻繁に
参照することがあるので、手元にあると非常
に理解の役に立ちます
初版 日本語版 PDF:
https://bitcoinbook.info/wp-content/translations/ja/book.pdf
第2版 英語版:
https://github.com/bitcoinbook/bitcoinbook/blob/develop/book.asciidoc
Mastering Bitcoin ビットコインとブロックチェーン
アンドレアス・M・アントノプロス (著)
ISBN: 9784757103672
画像は https://www.amazon.co.jp/dp/4757103670 より引用
6
開発環境
オペレーティング システム (次のいずれか)
● Windows 7, 8, 8.1, 10 もしくは Server 2008 R2 以降
○ 言語、エディションは問いません
● Mac OS X El Capitan (10.11), macOS 10.12 (Sierra), 10.13 (High Sierra)
○ Visual Studio for Mac 最新版を用意してください
● 上記以外の環境については、講義では対象外とします
○ Linux (Debian 系, RHEL 系とも) は JetBrains Rider が IDE として使えるようです
https://www.jetbrains.com/rider/
最新のアップデートやセキュリティパッチ等を適用しましょう
(注) 本講座で行うコンピュータの操作・変更等を原因として、いかなる問題・不利益が生じた場合でも、講師・大学は責任を持ちません。
7
開発環境
ソフトウェア (いずれも必要)
● Visual Studio https://www.visualstudio.com/downloads/
○ エディションは問いません。 Community が無料版
○ Windows の場合、Visual Studio 2017 (15.*) もしくは 2015 (14.*) をおすすめします
加えて .NET Core SDK が別途インストール必要
https://www.microsoft.com/net/download/visual-studio-sdks
(ソースコード的に .NET Framework に再ターゲットできますが非推奨 )
● Git https://git-scm.com/
最新のアップデートやセキュリティパッチ等を適用しましょう
(注) 本講座で行うコンピュータの操作・変更等を原因として、いかなる問題・不利益が生じた場合でも、講師・大学は責任を持ちません。
8
(参考) ソフトウェアの相関関係
Windows Mac OS X / macOS Linux
.NET Core
Runtime / SDK
.NET Framework
Runtime / SDK
Visual Studio 2017 その他 IDEVisual Studio for Mac
講義でおすすめする環境
講義でサポートできる (はずの) 環境
OS:
Runtime:
IDE:
9
動作環境
● .NET Core Runtime 2.x 以降
https://www.microsoft.com/net/download
● (参考) Linux 系では Mono 5.x の利用も可能かもしれない
http://www.mono-project.com/download/stable/
最新のアップデートやセキュリティパッチ等を適用しましょう
(注) 本講座で行うコンピュータの操作・変更等を原因として、いかなる問題・不利益が生じた場合でも、講師・大学は責任を持ちません。
10
その他の設定
● 管理者権限
デバッグ、特権ポートでの Listen、HTTP サーバのセットアップ等など、コンピュー
タの管理者権限 (昇格した状態) での操作が必要になることがある
● ファイアウォールの解放
サーバとして動作させるためには、ファイアウォールを開けておかないと、外部のリ
モート サーバが接続することができない
● 仮想化環境の構築 (可能な場合)
11
仮想化環境について
計算機上で、異なる別の計算機を仮想的にエミュレートすることができる。仮想的に動
作する計算機を仮想機械 (Virtual Machine, VM) と呼ぶ
演習においては、複数ノード同士のネットワーク
を構成するために利用する
● Windows 環境: Hyper-V + Docker
● Mac 環境: Docker
(参考) https://docs.docker.com/docker-for-windows/
ホスト OS
ゲスト
OS
ゲスト
OS
ゲスト
OS
12
ブロックチェーン エクスプローラ
ネットワーク上に流れているブロックチェーン データをリアル タイムに取得するために、
ブロックチェーン エクスプローラと呼ばれるサイトが存在する
Bitcoin
● https://chainflyer.bitflyer.jp/
● https://blockchain.info/
● https://blockexplorer.com/
Bitcoin Cash
● https://blockchair.com/bitcoin-cash/blocks
Ethereum
● https://www.etherchain.org/
13
1-2Bitcoin を動作させる
14
Bitcoin Core
Satoshi Nakamoto 氏による
Bitcoin クライアント
MIT ライセンスのもとで
オープン ソース開発
https://github.com/bitcoin/bitcoin
日本語版バイナリは
https://bitcoin.org/ja/download
からダウンロード可
15
Bitcoin Core
Bitcoin が開始してからすべての
ブロックチェーンを同期する必要
がある
16
Bitcoin RPC
Bitcoin ノードは、
Remote Procedure Call
(RPC) というインタ
フェースを通じて、操作
ができる
RPC を用いることで
処理の中心部にある機能
のエンドポイントを絞る
ことができる
17
Bitcoin RPC
● getnewaddress [address name]
● getbalance [address name]
● getblockchaininfo
● getbestblockhash
● sendtoaddress
など、さまざまな処理を行うことができる
(参考) https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list
18
Bitcoin Testnet
本物の Bitcoin を使うことなく、Bitcoin に関係するプログラムを書きたいとき、テスト用
ネットワーク Testnet を用いる
本番用ネットワーク Mainnet との違い
● ネットワーク動作バージョンの違い
● Testnet 用アドレスは 2 から始まる
● 低いブロック生成難易度
● 検査機能の緩和
(参考) https://en.bitcoin.it/wiki/Testnet
19
Testnet の資金 (1/3)
Faucet (https://testnet.manu.backend.hamburg/faucet) から無料で入手可
20
Testnet の資金 (2/3)
入手後すぐには反映されない
{
"amount": 2.00000000,
"confirmations": 0,
"trusted": false,
"txid": "7304c9e2050522d5032d8c5678a691c902e53c28c383d05c0057694baf845a07",
"walletconflicts": [
],
"time": 1520673179,
"timereceived": 1520673179,
...
}
21
反映されれば、ブロック番号が取得できるようになる
{
"amount": 2.00000000,
"confirmations": 11,
"blockhash": "00000000bba2085960c1783dbfafc2740431b31760da0c202c53ec8dead664a6",
"blockindex": 55,
"blocktime": 1520675447,
"txid": "7304c9e2050522d5032d8c5678a691c902e53c28c383d05c0057694baf845a07",
"walletconflicts": [
],
"time": 1520673179,
"timereceived": 1520673179,
...
}
Testnet の資金 (3/3)
22
トランザクションの送受信 (1/2)
Faucet から送出されたトランザクションは、即座に Bitcoin ネットワーク (Testnet) を通
じて、自分のクライアントまで到達しない場合には次のようなことが起きている
● ネットワークに接続されていない
● Bitcoin ネットワークが疎結合になっている
23
トランザクションの送受信 (2/2)
Bitcoin トランザクションは、大抵の場合、ブロックに入って、さらに合計 6 ブロック分が
経過するまで、確定しない (6 承認、などと呼ぶ)
24
Bitcoin アドレスについて
● Mainnet 用アドレスは 1 もしくは 3 (マルチシグ アドレス) から始まる
● Testnet 用アドレスは 2 から始まる
(例) 2NG3hSSWEUqRo89AbQ9Rxk4DRCyuGQXEmUr
https://testnet.blockchain.info/address/2NG3hSSWEUqRo89AbQ9Rxk4DRCyuGQXEmUr
秘密鍵
(乱数から生成)
公開鍵 アドレス
ベース ポイントの
スカラ倍 ハッシュ
25
[課題 1] C# のプログラムを動作させる
1-1 で説明した演習用の環境を用意し、C# のプログラムをコンパイルせよ
using System;
class Program {
static void Main() {
Console.WriteLine("Hello world!");
}
}
26
[課題 2] Bitcoin Core を動作させる (余力ある場合)
1. Bitcoin Core の公式クライアントを入手するか、テストネットと同期せよ
2. (もしくは) Docker イメージを利用してクライアント環境を作成せよ
3. あたらしいアドレスを作成し、Faucet からコインを調達せよ
4. 2N8dqyEiqfMbsbZbTUV1YeZCjg1JTDFXLbs に適当な量、送金せよ
5. 着金をブロックチェーン エクスプローラで確認せよ
27
第1回 まとめ
1. イントロダクション
● 開発環境、動作環境について
● ブロックチェーン エクスプローラ
● 仮想化環境
2. Bitcoin を動作させる
● Bitcoin Core クライアントについて
● テストネットへの接続
28

[Intermediate 01] イントロダクション / Bitcoin を動作させる