C言語で簡単なCPUマイナーの作成を開始した。主にデモンストレーション用で、
getworkを理解するためだ。
getwork がバイト反転を行う。midstate、data、hash1 はすでにビッグエンディアンで、data を返す時もビッグエンディアンのままなので、ビッグエンディアンで作業し、バイト反転は不要だ。これらは ScanHash_関数に渡されるのと同じデータだ。midstate、data、hash1 を 16 バイトアラインされたバッファに入れて ScanHash_関数に渡すことができる。例えば ScanHash(pmidstate, pdata + 64, phash1, nHashesDone)のように。ナンスが見つかったら data にパッチして getwork を呼び出す。
ScanHash_関数が pdata + 64 ではなく pdata を使うように変更して一貫性を持たせるべきかもしれない。
target はリトルエンディアンで、m0mchil のものと同じ方法のはずだ。(もし違えば修正すべきだ)バイト反転を使う唯一のケースだ。こんな感じだと思う:if ByteReverse((unsigned int*)hash[6]) < (unsigned int*)target[6]。
DiabloD3の投稿(2010年11月24日 02:31 UTC)サトシ、getwork の実装を m0mchil の仕様に準拠するように修正してほしい
これが新しい仕様だ。マイナーをこれに対応させるのは難しくないはずだ。
変更点:
- 候補を送信した時に work を返さない。パラメーターなしで呼び出した時のみだ。
- block フィールドが data と hash1 に分割された。
- 一貫性のため state を midstate に改名。
- extranonce は不要になった。