Protocol

Getwork 和 GetMemoryPool - 為什麼以前的塊雜湊不同?

  • February 15, 2012

當我打電話時:

print bitcoin.getmemorypool()
print bitcoin.getwork()

使用 Python JSON 作為測試網 BitcoinQT 伺服器,我得到了以下響應:

{'previousblockhash': '00000000032e361b246e96c4e594523b6ff42bc0527e560f203fb20a08a86185', 'transactions': ..., 'version': 1, 'coinbasevalue': 5000400000, 'time': 1329342730, 'bits': '1c2336a4'}
{... 'data': '0000000108a86185203fb20a527e560f6ff42bc0e594523b246e96c4032e361b000000004c50804820b143e1583c8c49dd43a6ddb8bc777c57c2da4a92b39ee0e709bf504f3c290b1c2336a400000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000', ...}

比較來自 GetMemoryPool 的前一個塊雜湊和從 Getwork 的塊頭中提取的一個:

00000000 032e361b 246e96c4 e594523b 6ff42bc0 527e560f 203fb20a 08a86185
08a86185 203fb20a 527e560f 6ff42bc0 e594523b 246e96c4 032e361b 00000000

從我所見,數據以 4 個字節的塊反轉。為什麼要完成這樣的過程,這兩個 RPC 呼叫中的其他哪些欄位會進行這樣的操作?

previousblockhashin output的值getmemorypool是大端順序的塊雜湊。

datain output的值的getwork格式與我在this answer to your question about how hash1are計算中描述的一樣。

這種 4 字節字的字節順序反轉是由呼叫FormatHashBuffersin的函式完成的main.cpp。僅對輸出的dataandhash1欄位執行此操作getwork。沒有評論解釋為什麼這樣做。

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