[BTC101]#1: 猿でも出来るBitcoin送金ハンズオン

前回記事(#0)：[10分でわかった気になるBitcoinとBlockchain](https://qiita.com/nagahisa/items/eb706b43510ab7a43839)

本記事(#1)の後半のハンズオン手順は、先日参加させて頂いた勉強会の以下資料のまんまです。
とてもわかりやすいハンズオン手順資料を公開された作者の方に大感謝ですm(_ _)m
[ビットコイン送金体験](https://speakerdeck.com/shukob/blocktecco-vol-dot-1-bitcoinsong-jin-ti-yan)

なお次回記事(#2)は今回説明しない技術的な内容の説明を予定しています。

# AGENDA
1. Walletって何？
2. Testnetって何？
3. Block Explorerって何？
4. スマホにBitcoin Walletを導入しよう！
5. Testnet Faucet(蛇口)からBitcoinもらおう！
6. となりの人に送金してみよう！
7. 終わりに

# 1.Walletって何？
Walletは英語で「お財布」のことですが、BitcoinのWalletは中にジャラジャラ「ビットコイン」が入っているお財布・・・ではなくて、「鍵」もとい「鍵束」を管理するモノ(アプリ・ハード等)なんです。

## (1)鍵？？

[前回記事](https://qiita.com/nagahisa/items/eb706b43510ab7a43839#4bitcoin%E3%81%A8bc%E3%81%AE%E9%96%A2%E4%BF%82tx%E3%81%A8block)でちょろっと説明したように、Bitcoinでは参加者は送金時や検証時に「公開鍵暗号方式」による「電子署名」を使います。

公開鍵暗号？？　電子署名？？って感じですが、今回は「猿でもできるハンズオン」なので詳しく説明しません:sweat:
簡単に言うと、公開鍵暗号方式ってのは、自分だけが知っている秘密鍵(Secret Key/Private Key)と外部に公開する公開鍵(Public Key)の２つを使ってデジタルデータを暗号化・復号する暗号方式です。
で、電子署名ってのは、この公開鍵暗号方式を使って、あるデジタルデータが改竄されてないことを証明するために付与する電子的サインです。


次回(#2)に技術的な説明を予定していますが、詳しくはWikiPediaなどをどうぞ。　
[公開鍵暗号](https://ja.wikipedia.org/wiki/%E5%85%AC%E9%96%8B%E9%8D%B5%E6%9A%97%E5%8F%B7)
[電子署名](https://ja.wikipedia.org/wiki/%E9%9B%BB%E5%AD%90%E7%BD%B2%E5%90%8D)

ちなみに、僕たちはどちらの技術にも毎日すごくお世話になっていますよー。
![000.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/49a0bacb-968e-9f0b-126f-3c585204a348.jpeg)

Bitcoinを使う時には、まず自分用の公開鍵・秘密鍵のペアをつくります。
Bitcoinのアドレス(送金・受金に使うアドレス)はこの公開鍵から作成されます。
自分のBitcoinアドレス＝公開鍵と、送受金用の秘密鍵を管理するのがWalletなんです。

## (2)鍵束？？

実は Bitcoin Walletは自動的に複数の鍵ペアを作成して「鍵束」として管理してくれます。
Walletに表示される「残高(Balance)」はこの鍵束の複数Bitcoinアドレスの残高の合計なんです。なんでこんな面倒なことしてんですかねー:worried:

前回紹介した[Satoshi Paper](https://bitcoin.org/bitcoin.pdf)をMLに投稿した際に、サトシ・ナカモトは Bitcoinによって"participants can be anonymous"が実現できるよんと言っています。
![000.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/ccd9d9f8-0249-940a-6fc8-2a1296514b2a.jpeg)

Bitcoinアドレスが１ケだけだと、そのアドレスでの入出金履歴(Blockchainで公開されます)により個人が特定される可能性があるので、サトシは、毎回の入出金で別々のBitcoinアドレスを使うよう[Satoshi Paper](https://bitcoin.org/bitcoin.pdf)に書いています。

*As an additional firewall, a new key pair should be used for each transaction to keep them
from being linked to a common owner.*

# 2.Testnetって何？

ググって[最初にヒットしたサイトの説明](https://bitflyer.com/ja-jp/glossary/testnet)です:sweat:
*Testnet は、ビットコインの開発のための環境です。開発中のコードで本物のビットコインを扱いたいという人は滅多にいません。そこで通常の ビットコインネットワークとは別に Testnet ネットワークが存在します。Testnet のコインは Test Net Faucet において無料で手に入れることができます。そのためテストネット上のビットコインは価値を持ちません（ドルや円と交換できない）が、それ以外の点では通常のビットコインと同様にふるまうため、コードのテストに使用できます。*

詳しい説明はこちら： [Testnet](https://en.bitcoin.it/wiki/Testnet)

本番環境は Mainnetと呼びます。
今回のハンズオンでは、Testnetを使ってBitcoin入手・送金を行います:money_mouth:

# 3. Block Explorerって何？

またまた、ググって[最初に出てきた説明](http://www.bitcoin-wakaru.net/article/442129476.html)です:sweat:

*ビットコインのブロックチェーンには、世界中で行われたビットコインの送受のやり取りが全て記録されている(中略)、では、そのブロックチェーンに記録された取引の情報を見るにはどうすればいいのでしょうか？
その取引情報を見る手段を提供してくれるサイトが、「ブロックエクスプローラー」と呼ばれるタイプのサイトです。
ブロックチェーンの中に記録されているブロックと、各ブロックに入っている取引の情報を検索して見ることができます。*

今回はTestnet用の以下のBlock Explorerを使ってみます。
https://live.blockcypher.com/btc-testnet/
![010.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/e465ca21-8f94-bfc5-0662-e11e84e6d816.jpeg)


"Recent Blocks"の1列目の"Height"は"Block Height"のことで、日本語では「ブロック高」といいいます。
ブロックチェーンはブロックが１列に順番に繋がっているので、最初のブロック(Genesis Block)を0とした順番です。

ブロック高のリンクをクリックすると、ブロックの中身が表示されます。
![011.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/239bd555-8d72-e28b-dbe6-6cc4433f42bf.jpeg)

こちらもTransactionのリンクをクリックすると、トランザクションの中身が表示されます。
![012.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/31c562b4-6030-a60a-458c-7e3f5bd62b29.jpeg)

今回はTestnetを覗いていますが、当然Mainnetも同じように覗くことができます。
ぜひ後で色々覗いて見てください:smile:
https://live.blockcypher.com/btc/


# 4.スマホにBitcoin Walletを導入しよう！

今回はTestnetにも対応したスマホWalletとして"Copay"を使用します。
Walletはたくさん種類がありますが、Mainnetにしか対応していないものや、ちょっと怪しいものもありますので、ちゃんと調べてから導入しましょう。

## (1)インストール
iOSならApple Store, AndroidならGoogle Playから"Copay"をインストールします（画像はAndroidです）。
|![001.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/8b075420-df89-2121-cb16-9d09817afd70.jpeg)}|![002.JPG](https://qiita-image-store.s3.amazonaws.com/0/79389/a84656ff-d278-6b50-c177-86bd0b842359.jpeg)![003.JPG](https://qiita-image-store.s3.amazonaws.com/0/79389/05a6ec8a-69b3-1adb-70e2-5f86d3d3ddce.jpeg)|

## (2)設定
~~手抜きのため~~ ハンズオン手順は[参考資料](https://speakerdeck.com/shukob/blocktecco-vol-dot-1-bitcoinsong-jin-ti-yan)と同じ内容なのと、僕はインストール済みでキャプチャ取るのが難しいので:sweat:、ここからは参考資料の該当ページのキャプチャを貼ります。

・[順番に設定](https://speakerdeck.com/shukob/blocktecco-vol-dot-1-bitcoinsong-jin-ti-yan?slide=6)
![020.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/0e7e9e95-16cb-1b49-deb1-edacb6245b97.jpeg)

・[復元フレーズ](https://speakerdeck.com/shukob/blocktecco-vol-dot-1-bitcoinsong-jin-ti-yan?slide=7)
![021.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/30cc71bd-7fef-1141-0ac6-3c8c996f022f.jpeg)

・[復元フレーズ](https://speakerdeck.com/shukob/blocktecco-vol-dot-1-bitcoinsong-jin-ti-yan?slide=9)
![022.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/87bda1b7-b233-6b04-5d9b-fdcdb4d8c598.jpeg)

・[ウォレット完成](https://speakerdeck.com/shukob/blocktecco-vol-dot-1-bitcoinsong-jin-ti-yan?slide=10)
![023.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/fcbad9f9-da67-95de-7a11-2cf9e38b0c65.jpeg)

・[テストネットウォレット作成](https://speakerdeck.com/shukob/blocktecco-vol-dot-1-bitcoinsong-jin-ti-yan?slide=11)
![024.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/50ae678c-77bd-a272-c08f-13992f2a6905.jpeg)

・[テストネットウォレット完成](https://speakerdeck.com/shukob/blocktecco-vol-dot-1-bitcoinsong-jin-ti-yan?slide=12)
![025.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/7a8078fa-7eaf-8a6b-eb45-39e02c651e25.jpeg)

## (3)時間短縮のためちょびっと「上級者設定」

・[未承認ビットコインを使用](https://speakerdeck.com/shukob/blocktecco-vol-dot-1-bitcoinsong-jin-ti-yan?slide=13)
![030.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/b29e5e63-c02f-cbb9-2216-ee397adc9633.jpeg)


# 5.Testnet Faucet(蛇口)からBitcoinもらおう！

Blockchain Testnet(今回はBitcoin)では、テスト用のToken(今回はBTC)をもらえるサイトがあります。
このようなサイトをFaucet(蛇口)と言い、"bitcoin testnet faucet"などでググると色々出てきます。

今回は以下を使用します。
https://testnet.manu.backend.hamburg/faucet
https://goo.gl/wxvEe3
![SS 2018-08-29 10.34.42.JPG](https://qiita-image-store.s3.amazonaws.com/0/79389/bf65754a-8a09-c298-1eb1-af549e64af6c.jpeg)

PCまたはスマホからFaucetにアクセスして自分のアドレスを入力します（以下はPC画面、スマホだとロボット抑止の画像チェックが面白いです:smile:)。
![026.JPG](https://qiita-image-store.s3.amazonaws.com/0/79389/087780aa-1eaf-dc7f-6388-d79daee0590c.jpeg)

リクエストが受付けられると送信したTransaction IDが表示されるので、Explorerで確認することができます。
(Copayには上で紹介したのとは別のExplorerリンク(inSight)も表示されるので、そちらでの確認でもOKです）

# 5-1.ハンズオン時の注意
**2018.9.4ハンズオン中止のお詫び**
なんか今日は軒並みFaucetサイトが動かないし、Block生成に20分もかかっているし、Testnet自体がすごく調子悪いです。よく見たらFaucetサイトにこんな表示がありました。
残念ですが今日予定していたハンズオンは延期します:sweat:
https://testnet.manu.backend.hamburg/faucet
![041.JPG](https://qiita-image-store.s3.amazonaws.com/0/79389/ac0e6023-6722-234e-f78c-7da00e1a9f58.jpeg)

**2018.9.25ハンズオン時の注意**
まだTestnetのTrafficが多くFaucetサイトも使えないところが多いですが、以下サイトでトライします。
このサイトは同一IPからのリクエストには制限があるようですので、Wifiを使わないで各自スマホ経由のモバイル通信で使用してください。

https://coinfaucet.eu/en/btc-testnet/
![050.png](http://qiita-image-store.s3.amazonaws.com/0/79389/4b813133-e1c3-96e0-a78c-fc1e4773a40b.png)

以下画面にCopyアプリの「テストネット」の「受取」に表示されるBitcoinアドレス(mから始まる文字列）をコピペで入力し　、"I'm no a robot"にチェックを入れて"Get bitcoins!"を押します。
![051.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/ab65a327-e250-a1b8-a8c9-b908b3b1b887.jpeg)

リクエストが正常に受け付けられるとtxid(トランザクションID）が表示されますので、Block Explorerでそのtxidや送金先のBitcoinアドレスを入力して送金できたかどうか確認します。
以下のように該当txidの"CONFIRMATIONS"が1以上になれば Blockに取り込まれていますのでOKです。
![052.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/a8a0a745-1cce-bacd-fec5-1428aad6b625.jpeg)

どのBlockに取り込まれたかは"Advanced Details"で確認できます。（この例ではブロック高：1,413,874)

![053.JPG](https://qiita-image-store.s3.amazonaws.com/0/79389/d34ec0d1-91ea-be1c-97f9-594952f38067.jpeg)


# 6.となりの人に送金してみよう！

## (1)BTC送金と受取り

・[　受取と送金](https://speakerdeck.com/shukob/blocktecco-vol-dot-1-bitcoinsong-jin-ti-yan?slide=14)
![031.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/4cfad70a-d7e4-bd60-2b81-eca3e88d12af.jpeg)

・[送金](https://speakerdeck.com/shukob/blocktecco-vol-dot-1-bitcoinsong-jin-ti-yan?slide=15)
![032.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/ab0b3feb-8b66-8533-d95e-0100a2074b61.jpeg)

・[ブロックチェーンエクスプローラでの送金の確認](https://speakerdeck.com/shukob/blocktecco-vol-dot-1-bitcoinsong-jin-ti-yan?slide=17)
![033.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/dcbbe9bc-f93e-2a95-6fb8-4236d77f894a.jpeg)

上図はCoppay内からリンクされているBlockchain　Explorerでの確認です。
当然、[別サイト](https://live.blockcypher.com/btc-testnet/)でも確認できます。

## 7.終わりに

取引所でBitcoin売買経験・送金経験のある方もいらっると思いますが、今回ハンズオンは如何だったでしょうか？

さすがに、Mainnet用Faucetはないので、最初のBTC入手は、取引所のWeb画面から自分のWalletが生成したBitcoinアドレス（Mainnetのもの）宛てに送金します。
自分のWalletにBTCがきたら、後は今回のハンズオンと同じです。

投資としてのBitcoinも良いですが、実際のBitcoin送金や受取りで「サトシ・ナカモトを名乗る個人またはグループ」が目指した世界を体感するのも面白いですよ。

なお、同じWalletでMainnetとTestnetを両方使うとよく間違えるので注意しましょう！


***Enjoy:tada:***