ビッグエンディアンのコード問題
Bitcoinクライアントにビッグエンディアンの「問題」(要は動かないってこと)があるというメッセージを多く見てきた。すべてのソースコードを分析する前に、リトルエンディアンを前提としている既知の「問題箇所」はあるだろうか?
遊んでいるG4やSparcマシンがあるので活用したい……さらに古いAlphaもあるが、まだ起動するかテストが必要だ……
ByteReverseマクロは、SHA-256変換の前にスキップすべきだろう。
ByteReverseマクロは、SHA-256変換の前にスキップすべきだろう。
前後両方? ナンスやタイムスタンプのためにもおそらく削除が必要なByteReverse呼び出しが複数ある。
実際、ByteReverseされるためだけに存在する一時的なブロックヘッダーを完全に不要にできるかもしれない。
GGespensterの投稿(2010年8月29日11:35 UTC)ByteReverseマクロは、SHA-256変換の前にスキップすべきだろう。
前後両方? ナンスやタイムスタンプのためにもおそらく削除が必要なByteReverse呼び出しが複数ある。
実際、ByteReverseされるためだけに存在する一時的なブロックヘッダーを完全に不要にできるかもしれない。
SHA-256はバイトストリームがビッグエンディアンであることを期待しているので、すべて削除できると思う。最も速い確認方法は、BEマシンとLEマシンで同時にデバッガーを通してコードを実行し、各ステップで結果を比較することだと思う。
コードは全体を通してリトルエンディアンを前提としており、ビッグエンディアンに移植しない意図で書かれた。ネットワーク経由で送信されるすべての整数はバイトスワップする必要があり、コード内の他の数十箇所に加えて対応が必要だ。余分なソースコードの肥大化に見合わない。
いずれにせよ、ビッグエンディアンは廃れつつある。