下載單個和特定的塊用於學習目的
我剛開始研究比特幣。
我希望能夠從比特幣網路下載一個區塊。
這應該是一個舊區塊,已經開採,我可以知道隨機數。
然後我想通過 bash linux 命令來驗證這樣的 nonce 是否解決了這個問題。
感謝這裡提出的問題,我知道我可以看看
https://blockchain.info/block-height/474044?format=json
然而這是 JSON,我想我不能用它來驗證隨機數。
因此我的問題是:
- 我怎樣才能下載一個塊?
- 這種塊的文件格式是什麼?
- 我可以在什麼字節開始增加隨機數欄位,例如使用 Python 腳本?
- 一旦我得到正確的(並且已知的:))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 欄位指定的目標。