Never Too Late

いつだってゼロからやり直そう

ブロックチェーンからあるビットコインアドレスのトランザクション情報を取得する

(2017年9月25日にQiitaにて執筆した記事をこちらに転載しています。)

ホリエモンこと堀江貴文さんはTwitterのプロフィール欄にて投げビットコインアドレスをひとつ公開しています。

f:id:rintaromasuda:20200405090936j:plain

今回はこのビットコインアドレスを例として使わせてもらい、ブロックチェーンからトランザクションの情報を取得してみます。これにより堀江さんがどれくらいのビットコインをこのアドレスで受け取ったのかが分かるはずです。

280万人ものフォロワーがいる堀江さんです。結構な数の人がこのアドレスを見て投げ銭をしたかもしれません(投げ銭目的で堀江さんがこのアドレスを載せているのかは知りませんが。)ちょっと結果が楽しみですね。

今回はBlockchain.infoのBlockchain Data APIを使いたいと思います。どうやらSingle AddressというAPIを使うと、あるひとつのビットコインアドレスに対するトランザクション情報が取得できるようです。

では実際に使ってみましょう。以下のコードはPowerShellです。

$address = "1G2jt5WeGhqWtDKEkcKY2GrZKjfYsuiVxX";
$uri = [System.String]::Format("https://blockchain.info/ja/rawaddr/{0}", $address);
$response = Invoke-RestMethod -Method Get -Uri $uri;

Write-Output $response.txs.Length;

# output
18

このコードの実行時点では18個のトランザクションが見つかりました。思ったより少ないですね。しかもこれには堀江さんのアドレスからビットコインが送信された場合のトランザクションも含まれていますので、受信のトランザクションはもっと少ないはずです。

堀江さんのアドレスが受信先だったトランザクションのみにデータを絞るため、取得したトランザクションの送り先アドレスを確認し、堀江さんのアドレスであった場合のみ対象とします。その際にトランザクションの総数と受け取ったビットコインの総量を計算します。

$receivedCount = 0;
$receivedAmount = 0;
foreach ($tx in $response.txs.out)
{
    if ($tx.addr -eq $address)
    {
       $receivedCount += 1;
       $receivedAmount += $tx.value;
    }
}

Write-Output $receivedCount
Write-Output $receivedAmount

# output
13
47715300

受信のトランザクションは13件見つかりました。一方でビットコインの総量は47,715,300という数字が返ってきました。単位を良く知らないとここで「おおおっっ!さすがホリエモン!!!」と思ってしまうかもしれませんが、これは実はsatoshiという単位ベースの数字です。

1satsohiは1/100,000,000BTC(1億分の1ビットコイン)と定義されていますので、堀江さんが受け取った投げ銭の総額は0.477153BTCということになります。本日の相場で言うと20万円と少しというところです。

これでも「20万円はすごい!さすがホリエモン!」となるかもしれませんが、ほとんどのトランザクションは2014年、2015年とビットコインがまだ現在のような価格に暴騰する前のものでした。今年に入ってからのトランザクションはありませんでした。