Block
塊雜湊數據
伙計們,我有幾點我不清楚。1)在下面的連結中,它說我們必須組合和散列一些欄位。但是,當我通過從游泳池中說 getwork 來獲得工作時。我得到的也在下面。問題是我找不到第一個連結、Version、hashPrevBlock 等中列出的欄位。
<https://en.bitcoin.it/wiki/Block_hashing_algorithm>
得到工作結果。
{ 'data':'0000000271112b7a1cf8e97b8367102f7e155499bf5c7303cbcdd4360000000000000000427719b35a84bc7732edd34ff3a6278dc4ac0ec2a9544e6088bc0bd719e17a8e52db3b211902666600000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000', 'hash1':'00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000', 'target':'0000000000000000000000000000000000000000000000000000ffff00000000', 'midstate':'45aebb01c0fdb704ee7d2bbf02665943f50f299ff8bb252e614100065bc5c20c' }
2)它在第一個連結中說“每當 Nonce 溢出(它經常發生)時,生成事務的 extraNonce 部分就會增加,這會改變 Merkle 根。” 我應該為extranonce添加額外的32位嗎?
3)反轉標題的原因是什麼?
- 您發布的連結指的是整個挖礦過程,如果您使用的是 ASIC 或其他能夠每秒生成 4 gigahashes 或更多的硬體解決方案,您將需要該連結。如果您正在使用
getwork
,那麼大部分資訊都是不相關且令人困惑的。- 見上文 (1)。使用getwork時不用擔心extraNonce;您可以
getwork
再次請求並從伺服器獲取新data
字元串。- 反轉標頭(實際上反轉標頭中的每個 32 位字)的原因是它在發送給您之前已經反轉(轉換為小端),您需要撤消該反轉,將其放回大-endian 形式。
使用 getwork 時您需要做的就是:
- 轉換為
data
大端- 獲取 80 字節標頭的 sha256 散列的 sha256 散列
getwork
如果該雜湊值低於門檻值,則使用適當的帶有數據的 RPC 呼叫將帶有目前隨機數的標頭髮送到伺服器- 每次都用不同的 nonce 再次嘗試(80 個字節中的最後 4 個字節是 nonce)