Blockchain.info

下載單個和特定的塊用於學習目的

  • July 3, 2021

我剛開始研究比特幣。

我希望能夠從比特幣網路下載一個區塊。

這應該是一個舊區塊,已經開採,我可以知道隨機數。

然後我想通過 bash linux 命令來驗證這樣的 nonce 是否解決了這個問題。

感謝這裡提出的問題,我知道我可以看看

https://blockchain.info/block-height/474044?format=json

然而這是 JSON,我想我不能用它來驗證隨機數。

因此我的問題是:

  1. 我怎樣才能下載一個塊?
  2. 這種塊的文件格式是什麼?
  3. 我可以在什麼字節開始增加隨機數欄位,例如使用 Python 腳本?
  4. 一旦我得到正確的(並且已知的:))nonce,如何驗證塊是否已解決?我的意思是,它的雜湊應該以很多零開頭,我可以將塊視為字元串並直接傳遞給 python hashlib 函式嗎?

提前致謝。

然而這是 JSON,我想我不能用它來驗證隨機數。

你可以。您可以使用 JSON 對像開頭的數據建構塊頭,然後對其進行雜湊處理。當然,獲取塊十六進制會更容易,您可以通過訪問 blockchain.info 上的塊雜湊並附?format=hex加到 url 來獲取它。例如,對於您連結的塊高度,可以在此處找到該塊的十六進制:https ://blockchain.info/block/000000000000000000ff265a641721e79bbc559d8b0e4894332732109f1a3383?format=hex

我怎樣才能下載一個塊?

獲取塊十六進制。那是塊本身的原始數據。您可以通過將十六進制放在十六進制編輯器中來使其成為文件,或者將十六進製作為字元串保存在文本文件中。

這種塊的文件格式是什麼?

塊沒有文件格式。它們只是二進制數據的 blob,您需要了解如何解析。<https://bitcoin.org/en/developer-reference#serialized-blocks>解釋了區塊序列化。

我可以在什麼字節開始增加隨機數欄位,例如使用 Python 腳本?

被散列的部分是塊頭,即塊的前 80 個字節。nonce 是該標頭的最後 4 個字節。您可以在此處閱讀有關區塊頭格式的資訊:https ://bitcoin.org/en/developer-reference#block-headers

一旦我得到正確的(並且已知的:))nonce,如何驗證塊是否已解決?我的意思是,它的雜湊應該以很多零開頭,我可以將塊視為字元串並直接傳遞給 python hashlib 函式嗎?

不,塊頭不是字元串。它是一團二進制數據。在 python 中,最簡單的做法是將其設為字節對象,然後將其傳遞給 hashlib。

如果一個塊的工作證明是有效的(注意這並不意味著塊本身是有效的),那麼在使用 SHA256 Double 對其進行雜湊處理後,您將輸出視為一個整數並將其與標頭的 nBits 欄位進行比較。nBits 欄位是一個 4 字節欄位,從頭的末尾開始 8 個字節,是目標的緊湊表示。您可以在此處閱讀有關如何解釋它的資訊:https ://bitcoin.org/en/developer-reference#target-nbits 。塊雜湊(被視為一個大整數)必須小於 nBits 欄位指定的目標。

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