当我在我的 bitcoind 服务器上调用 getwork 时,我得到以下信息:
./bitcoind getwork
{
"midstate" : "695d56ae173bbd0fd5f51d8f7753438b940b7cdd61eb62039036acd1af5e51e3",
"data" : "000000013d9dcbbc2d120137c5b1cb1da96bd45b249fd1014ae2c2b400001511000000009726fba001940ebb5c04adc4450bdc0c20b50db44951d9ca22fc5e75d51d501f4deec2711a1d932f00000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000",
"hash1" : "00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000",
"target" : "00000000000000000000000000000000000000000000002f931d000000000000"
}
该协议似乎没有记录。如何从这些数据中计算哈希值。我认为这些数据是小端的。那么第一步是将所有内容都转换为大端?完成后,我计算数据的 sha256。数据可以分成两块,每块 64 字节。第一个卡盘的哈希由 midstate 给出,因此不必计算。
因此,我必须使用 sha256 对块 #2 进行散列,使用中间状态作为初始散列值。完成后,我最终得到了块 2 的散列,即 32 个字节。我再次计算这个块的哈希以获得最终的哈希。
然后,我是否将所有内容都转换为小端并提交工作?
hash1 是做什么用的?