Blockchain
使用 PHP 或 R 的所有塊中日期的原始數據
到目前為止,是否可以使用 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 <- function(x) { x[sapply(x, is.null)] <- NA return(x) } #ensure null data are kept MY_APIKEY <- "6debaf0ebd4c9081795fe38716df550c46ab06fb" # API url block_url <- "https://api.blocktrail.com/v1/btc/block/" APIkey <- paste0("?api_key=", MY_APIKEY) Data=data.frame() for (x in 446097:502027) { #blocks for 2017 block_data_list_0 <- nullToNA(fromJSON(paste0(block_url, x, APIkey))) datax=data.frame(t(unlist(block_data_list_0)) ) Data=rbind(Data,datax) }