ビットコイン半減期までの日数をblockchain.comのAPIを使って計算する
こんにちはピー助です。
ビットコイン関係のAPIについて。
ググると面白いのが沢山出てきます
その1つがblockchain.comというAPI
これはAPIキーとかもいらないし、ビットコイン限定だけど価格・ブロック高・マイニング情報をRESTAPIから取得できます
そんなblockchain.com API利用の練習も兼ね、
次回ビットコイン半減期までの日数を計算してみました。
ビットコイン半減期の基礎知識について
ビットコインは10分に1回ブロックを生成します。
1つのブロックの中には取引(トランザクション=Tx)が詰め込まれており、マイナーが承認作業を行うことでブロックにTxが追加されます
そしてマイナーがTxを承認するたびに送信者が設定した手数料がマイナーのへの報酬として支払われるわけですね。
そのマイナー報酬が半減するのが半減期です
ビットコイン(のブロックチェーン)が稼働したばかりのころ、
そのマイナー報酬は50BTCもありました。
そして次の半減期を経ながら半減していきます
1回目 - 2011年12月 : 50BTC ⇒ 25BTC
2回目 - 2016年7月 : 25BTC ⇒ 12.5BTC
3回目 - 2020年11月 : 12.5BTC ⇒ 6.25BTC
4回目 - 2024年ごろ : 6.25BTC ⇒ 3.125BTC
この半減期は210000ブロックごとに発生し、
およそ4年に1回起こるように設定されています
だから今のブロック高から半減期までの日時を計算するのはそれほど難しくありません。
ただしブロックの生成時間は10分きっかりではなく、採掘難易度などによっては9分~11分の間で変動する模様です
だから1ブロック10分で生成と割り切って計算することに
blockchain.com APIでブロック高取得
ではblockchain.com API使い方について
これは次の特徴を備えているAPIです
APIキーなどは一切不要で使える
呼び出し回数の制限などもなし
そして取得できる情報も幅広いです
BTCの価格・出来高・Tx
ブロック高などブロックチェーン情報
他ウォレット/支払い関連APIなど
ビットコイン限定なら本当に使い勝手のいいAPIです
ここではブロック高を知りたいので次のAPIを使いました。
✅ API URL : https://api.blockchain.info/stats
▼Ajaxを使うならこのように呼び出せる
$.ajax({
url: 'https://api.blockchain.info/stats',
type: 'GET'
}).then(
function(data){
console.log('data : ',data)
/// タイムスタンプ
const timestamp = data['timestamp']
/// 現在までのブロック高
const nBlocksTotal = data['n_blocks_total']
}
)
※このAPIは10分に1回ごとに細心に更新されます
ここで必要なのは現在ブロック高を表す n_blocks_totalの値だけ。
もし他にどういった情報が返されるのか知りたいなら https://api.blockchain.info/stats に直接アクセスしてみてください。レスポンスはJSON形式で帰ってきます
実際に次回半減期までの日数・時間を求めてみる
次のことさえ理解してれば大丈夫です
1つのブロックは10分ごとに生成
210000ブロックごとに半減期発生
厳密にはブロック生成は9分~11分のように変動しますが、
それは個別のケースなので全体には影響を与えません。
平均すればブロック時間は10分に集約すると仮定します
実際に書いてみたコード(JS)はこういう感じです
▼半減期までの日数・時間をコンソール表示
function calcHalvingCountdown(timestamp, nBlocksTotal){
const X_BLOCKS_TOTAL = 210000
const leftBlocksTotal = X_BLOCKS_TOTAL
* (Math.floor(nBlocksTotal / X_BLOCKS_TOTAL)+1)
- nBlocksTotal
const halvingAtBlocksTotal = nBlocksTotal+leftBlocksTotal
let leftSecsTotal = leftBlocksTotal * 60*10
- (Date.now() - timestamp) / 1000
const leftDays = Math.floor(leftSecsTotal / (60*60*24))
leftSecsTotal -= leftDays*60*60*24
const leftHours = Math.floor(leftSecsTotal / (60*60))
leftSecsTotal -= leftHours*60*60
const leftMinutes = Math.floor(leftSecsTotal / 60)
const leftSeconds = Math.floor(leftSecsTotal % 60)
console.log(`BTC半減期まで :
${leftDays}日${leftHours}時間${leftMinutes}分
`)
}
▼blockchain.comのAPI呼び出しと一緒に使う
$.ajax({
url: 'https://api.blockchain.info/stats',
type: 'GET'
}).then(
function(data){
console.log('data : ',data)
/// タイムスタンプ
const timestamp = data['timestamp']
/// 現在までのブロック高
const nBlocksTotal = data['n_blocks_total']
/// 半減期までの残り日時を表示
calcHalvingCountdown(timestamp, nBlocksTotal )
}
)
▼ブロック高723027のコンソール表示結果
BTC半減期まで :
812日7時間23分
工夫すれば半減期カウントダウンタイマーなんかも作れます。
以上、blockchain.comで半減期までの日数数えでした
もし質問・指摘などあればコメント欄からどうぞ。ではまた
この記事が気に入ったらサポートをしてみませんか?