ビットコインサーバーでgetworkを呼び出すと、次のようになります。
./bitcoind getwork
{
"midstate" : "695d56ae173bbd0fd5f51d8f7753438b940b7cdd61eb62039036acd1af5e51e3",
"data" : "000000013d9dcbbc2d120137c5b1cb1da96bd45b249fd1014ae2c2b400001511000000009726fba001940ebb5c04adc4450bdc0c20b50db44951d9ca22fc5e75d51d501f4deec2711a1d932f00000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000",
"hash1" : "00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000",
"target" : "00000000000000000000000000000000000000000000002f931d000000000000"
}
このプロトコルは文書化されていないようです。このデータからハッシュを計算するにはどうすればよいですか。このデータはリトルエンディアンだと思います。では、最初のステップはすべてをビッグエンディアンに変換することですか?それが終わったら、データのsha256を計算します。データは、それぞれ64バイトの2つのチャンクに分割できます。最初のチャックのハッシュはmidstateによって与えられるため、計算する必要はありません。
したがって、初期ハッシュ値としてミッドステートを使用して、チャンク#2をsha256でハッシュする必要があります。それが完了すると、32バイトのチャンク2のハッシュになります。このチャンクのハッシュをもう一度計算して、最終的なハッシュを取得します。
次に、すべてをリトルエンディアンに変換して作業を送信しますか?
hash1は何に使用されますか?