隗より始めよ

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

Blockchain.comのAPIを使ってみる(2)

f:id:mazarimono:20180626111319j:plain

昨日はAPIの使い方を見てみましたが、今日は調べてみたかったことにAPIを使ってみます。

昨日使ってみて思ったのですが、Segwitにて付け加えられたWitness IDとかが見られません。ただ使いこなせていない可能性も高いですが、unlocking scriptとかdifficultyも見当たらないので、全部のデータが取れるわけでもないのかもしれません。

python-bitcoinlibという色々できそうなやつも見つけたので、次からはそれを試してみようと思います。

bitcoinの最初からの歴史を知りたい人にお勧めの本!


もくじ


Genesis Blockをみる

さて、まずやってみたかったのはGenesis Blockを見ることです。みんなそうかな?違うかな?新聞記事が刻まれているってのも見たいのだけれど、それはかないませんでした。

ブロック高で、検索を行うにはblockexplorerのget_block_height()を使います。

gblock = bbe.get_block_height(0)
print(vars(gblock[0]))

昨日かいたか忘れましたが、blockchain.infoのモジュールは内容をするっと見れるようにできてません。普通だったらprint(gblock)でみれたりするけど、ちょっと工夫しないとみられない。インスタンスがどうのこうのオブジェクトがどうのこうの出てきたけれどよく分かってなかったし、よく分かりませんでした。けど、こんな感じで中身が見られます。

f:id:mazarimono:20180626094431p:plain

'previous_block': '0000000000000000000000000000000000000000000000000000000000000000'と出ているので間違いないです。これが最初のブロックです。次にインプットとアウトプットを見てみましょう。

f:id:mazarimono:20180626094700p:plain

addr_tagが'Genesis of Bitcoin'になっています。コインベースも50BTCとなっています。今ならみんなよだれが出るほど欲しいでしょう。少なくとも私は欲しいですw。しかし、どこに新聞から取った文字が刻まれているのか分かりません… 。datetime.fromtimestamp()で日時を調べると2009年1月4日3時15分5秒となっています。

違いをみたらどこにその文字が刻まれていそうかわかるでしょうから、次のブロックを見てみましょう。

snd_b = bbe.get_block_height(1)
print(vars(snd_b[0]))
print(vars(snd_b[0].transactions[0]))
print(vars(snd_b[0].transactions[0].inputs[0]))
print(vars(snd_b[0].transactions[0].outputs[0]))

f:id:mazarimono:20180626095459p:plain

インプットのscript_sigがGenesis Blockと比較して物凄く短くなっているので、多分ここに新聞から取ったといわれる文章があるのでしょう。しかし、ハッシュ化されたものの戻し方がわからないので、見ることはできませんでした(ショック大)。

あと、ふたつ目のブロックのaddr_tagは何も記されていません。

やはり、一番は覚えられ二番は覚えられないのでしょう!

目指すは一番!

ウォレットが違った

上の二つを見ているとウォレットのアドレスが違うことがわかります。サトシさんはウォレットは毎回違うのを使うように推奨していましたし、それを守っているのでしょうか。ちょっと気になったので、トランザクション数、時間とともに調べてみました。

wallet_a = []

for i in range(25):
    block_g = bbe.get_block_height(i)
    times = datetime.fromtimestamp(block_g[0].transactions[0].time)
    t = len(block_g[0].transactions[0].outputs)
    wallet = block_g[0].transactions[0].outputs[0].address
    wallet_a.append(wallet)
    print('日時: {} / トランザクション数: {} / ウォレットアドレス: {}'.format(times, t, wallet))

f:id:mazarimono:20180626100629p:plain

知らなかったけど、一番最初に生み出されたGenesis Blockのあと、2番目のブロックが生み出されるまで5日以上かかっています。知らなかった。その後コンスタントに生み出されているのかと思いきや、1月9日の13時から10日の13時まで飛んだりと、実験だったのか気まぐれなのかなんか面白い感じです。

そして注目のウォレットのアドレスですが、最初の25個はすべて違うものとなっていました。

サトシさん自体がそうせいいうてますしねw

トランザクションを1000個見てみた

最初の1000個を見てみました。ちょっと時間がかかりますが、10分はかかりませんでした。

f:id:mazarimono:20180626104252p:plain

13日くらいからは止まらずに動いていたようですね。ちなみに1000個とも受取アドレスは異なっていました。

ちなみに10万個くらいデータを取ろうとしたらエラーが返ってきました。取る数などは規制されているのでしょう。

statisticsは使い方がいまいちわからず・・・

統計データが時系列でみられたりするのかと思って使ってみましたが、そんなわけではありませんでした。データは出てきたけど、id入れても変化せずという感じでした。

まとめ

ひとまず、blockchain.infoのAPIを2回にわたり利用でしてみました。面白いけど、ちょっとほしいデータが取れなかったというの心残りでした。

しかしこのようなものを使うことによって、わからないことを調べたりするので、また新たなものが見つかってというポジティブな良いループが発生することもわかりました。python-bitcoinlibだとかなり色んなことができそうですが、使いこなせるかという疑問もあります。 プログラミングの実力がないもので・・・

github.com

次の展開としてはEthreumのAPIを使ってみるか、RippleのAPIを使ってみるか、さっきのライブラリを使ってみるか・・・。いずれにせよ色々触って楽しんで、その次の段階

何かを作るというところに向かいたいと思います。

Ethereum Developers APIs and Services

Ripple Data API v2 - XRP Ledger Dev Portal