隗より始めよ

今後はいろいろ考え始めます。

Blockchain.comのAPIを使ってみる

f:id:mazarimono:20180625232334j:plain

先日の金融庁仮想通貨取引所への処分発表後、一段と仮想通貨の価格は下落しました。

mazarimono.hatenadiary.jp

カリスマはノックダウンされ、仮想通貨市場は焼け野原の様相を呈しています。

f:id:mazarimono:20180625212822p:plain:w600
Cryptocurrency market

黙って働いてくれているVPSで暗号通貨市場のチェックを行うと、まぁ4月の安値は割っていません。4月の安値を耐えた人たちが、3ヵ月後にそれと同水準で投げるってのは、投資家が相当疲弊しているんだろうなという感じを受けます。ちなみに私は株の下落の方が疲弊の要因となっています。

f:id:mazarimono:20180625213209p:plain:w600
coincheck currencies

「まだ仮想通貨やってるの?」って イケハヤさんは煽るのかと思っていブログをのぞいてみたけど、冷静に「こんな下げで焦るようなら仮想通貨なんてやるなよ」って書いてました。

入ったタイミングが悪かった人にとっては、こんな糞市場はないと思いますが、まだまだこれからですよって感じに個人的にも思っているのと、ちょっと所用で色々調べている延長で、Blockchain.infoのAPIを使って何ができたか記しておきます。


もくじ


Blockcchain.infoがBlockchain.comと統合されるようです。

まず最初に、ビットコインのブロックを見る時にこれまでBlockchain.infoを見ていたのですが、これからはBlockchain.comにまとまるようです。APIに関してはどちらも共通のもののようで、多分使い勝手が変わるということはないでしょう。

Pythonのライブラリがあった

APIをrequestsで叩くのが一番楽なのですが、サイトにpipでインストールできるのでライブラリを使ってみました。Python以外にもJavaC#RubyPHP、NodeJSなどのライブラリというのかなんと呼ぶのか分かりませんが、あるみたいです。

Blockchain API: Bitcoin API - Blockchain

使い方を見るためにgithubを見てみると、なんだか7つに分かれていて、それぞれブロックチェーン、ウォレットを作る、交換所での価格、pushtx、受取、統計、ウォレットというモジュールがありました。ドキュメントは以下に。

github.com

関心があったのはブロックチェーンだったので、まずはそれを見てみます。

from blockchain import blockexplorer as bbe
block = bbe.get_block('000000000000000016f9a2c3e0f4c1245ff24856a79c34806969f5084f410680')
vars(block)

たくさん文字を打つのが面倒なのでbbeという名前でライブラリを呼び出して、そのままget_blockにブロックのidのハッシュを入れたらそのブロックの内容を引っ張ってきてくれます。

インスタンスというやつで帰ってくるようで、そのまま開けませんが、vars()で呼び出すと中身が見られるようになりました。

f:id:mazarimono:20180625220026p:plain

「おお、マスタリングビットコインで読んだ感じで帰ってきてる!!!」

という感じでちょっと興奮できました。ちなみにこのハッシュはbitcoin.infoのAPIの使い方にあったやつなのですが、'time'を普通の時間に直すと2014年9月10日14時25分1秒のものだということがわかります。

直近のやつを調べる

さて直近のブロックを調べることもできるようです。blockexplorerのget_latest_blockでとってきてくれます。

latest = bbe.get_latest_block()
vars(latest)

f:id:mazarimono:20180625221438p:plain

get_blockより中身が薄いので、get_block()で読み込んでみます。

latest_block = bbe.get_block(latest.hash)
vars(latest_block)

f:id:mazarimono:20180625221917p:plain

「むむむ、バージョンが2から536870912へと幾何級数的にアップしている!!!」

上がりすぎやろと思いますが、どうなっているのでしょうか?segwitで別のところになんかの値を突っ込んでいるみたいな話がありましたが、それもこれでしょうか?あれはトランザクションのお話だったような。

transactioinsを見てみる

さて見てみたかったのはtransactionsなのでそちらに目を向けましょう。まずは2014年のものから。

for i in block.transactions:
       print(vars(i))

f:id:mazarimono:20180625223851p:plain

timeは結構バラバラな感じが見て取れたので、ちょっと我々がわかりやすい時間に直して、どれくらいの違いがあるのか見てみました。

f:id:mazarimono:20180625224544p:plain

それほど散らばっているわけでもないみたいです。次に新しいブロックを見てみましょう。

f:id:mazarimono:20180625224815p:plain

f:id:mazarimono:20180625225107p:plain

40分ほどの幅はありますが、まぁそれほど送金に遅れはないように見えます。あと、"relayed by"という項目が「0.0.0.0」になっているのは検証が終わっていないということでしょうか?

transactionsのinputs、outputsを見てみる

トランザクションの本当の中身を見てみましょう。

f:id:mazarimono:20180625225522p:plain

これはビットコインが生まれるコインベースってやつで一番最初に書き込まれています。このころは25BTC報酬がありましたからねぇ(遠い目)

2つ目のトランザクションに目を向けてみましょう。

f:id:mazarimono:20180625230916p:plain

おつりを返すトランザクションが見られました。このトランザクションは一つのインプットに対して二つのアウトプットが返されています。一方のアウトプットは知らないアドレスに。もう一方のアウトプットはインプットと同じアドレスにいっています。

さて、直近のやつを見てみましょう。

f:id:mazarimono:20180625231643p:plain

コインベースなのに(ビットコインの生成トランザクション)アドレスがありません。まぁそんなこともありますね。

f:id:mazarimono:20180625231924p:plain

普通のアドレスからSegwit対応のアドレスに送られていますね。

などなどいろいろ見られてAPIを使ってみると面白いです。つづく

ビットコインとブロックチェーン:暗号通貨を支える技術

ビットコインとブロックチェーン:暗号通貨を支える技術