Blockchain

使用 PHP 或 R 的所有塊中日期的原始數據

  • December 2, 2021

到目前為止,是否可以使用 PHP 或 R 等語言獲取每個比特幣塊的日期(時間戳)?

我正在為一個科學項目開發比特幣使用時間序列的分析,雖然許多來源提供平均值,但很少提供原始數據。

在我的相關文章(所有區塊中交易的原始數據)中,一個人(amaclin)好心地提供了所有現有區塊中的交易數量,是否可以獲得日期?

這是可以在 R 或 PHP 中完成的嗎?

我編寫了這個簡單的 PHP 程式碼,每個逗號都有解釋

PHP 程式碼

<?php

$lastBlockEnd = $this->MyRPC->BitcoinCoreCommand('getblockcount' , []);
// https://bitcoin.org/en/developer-reference#getblockcount

for ($i = 0; $i <= $lastBlockEnd; $i++){
   $blockHash = $this->MyRPC->BitcoinCoreCommand('getblockhash' , [$i]);
   //https://bitcoin.org/en/developer-reference#getblockhash
   $blockData = $this->MyRPC->BitcoinCoreCommand('getdata' , [$blockHash]);
   //https://bitcoin.org/en/developer-reference#getblock
   $block[$i]['time'] = $blockData['time'];
   $block[$i]['hash'] = $blockHash;
}

print_r($block);

程式碼說明

  • 我們正在獲得總可用塊數,例如 65443
  • 我們將從塊號 0 開始循環到 65443

注意:您應該發送“批量請求”而不是單獨呼叫每個塊 - 我們正在獲取塊雜湊,然後我們正在呼叫getdata並傳遞該塊雜湊。

現在我們得到以下響應:

{
   "hash": "00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048",
   "confirmations": 447014,
   "strippedsize": 215,
   "size": 215,
   "weight": 860,
   "height": 1,
   "version": 1,
   "versionHex": "00000001",
   "merkleroot": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098",
   "tx": [
       "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098"
   ],
   "time": 1231469665,
   "mediantime": 1231469665,
   "nonce": 2573394689,
   "bits": "1d00ffff",
   "difficulty": 1,
   "chainwork": "0000000000000000000000000000000000000000000000000000000200020002",
   "previousblockhash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",
   "nextblockhash": "000000006a625f06636b8bb6ac7b960a8d03705d1ace08b1a19da3fdcc99ddbd"
}

最後,我們time在一個數組中儲存和阻塞雜湊並列印它。

經過一番搜尋,我在 R 中找到了一個非常好的程式碼,它可以從多個 API 查詢比特幣數據。該程式碼幾乎可以複製和粘貼,儘管速度很慢。感謝那個人,但決定在這裡發布它,因為我可以看到人們將它用於分析目的。

<https://github.com/organofcorti/bitcoin-blockchain-data>

因此,為了在 R 中使用,我在這裡提取了從 blocktrail 查詢數據的程式碼

library(RJSONIO)

 nullToNA &lt;- function(x) {
 x[sapply(x, is.null)] &lt;- NA
 return(x)
 } #ensure null data are kept


 MY_APIKEY &lt;- "6debaf0ebd4c9081795fe38716df550c46ab06fb"
       # API url
       block_url   &lt;- "https://api.blocktrail.com/v1/btc/block/"
       APIkey      &lt;- paste0("?api_key=", MY_APIKEY)

 Data=data.frame()
 for (x in 446097:502027) {      #blocks for 2017
 block_data_list_0 &lt;- nullToNA(fromJSON(paste0(block_url, x, APIkey)))
 datax=data.frame(t(unlist(block_data_list_0)) )
 Data=rbind(Data,datax)
 }

引用自:https://bitcoin.stackexchange.com/questions/74067