ビッグエンディアンのコード問題

5 件のメッセージ BitcoinTalk chromicant, Gespenster, lfm, サトシ・ナカモト 2010年8月14日 — 2010年8月29日
chromicant 2010年8月14日 22:08 UTC 原文 ·

Bitcoin クライアントにビッグエンディアンの「問題」(つまり動かない)があるというメッセージを多く見てきた。すべてのソースコードを分析する前に、リトルエンディアンを前提としている既知の「問題箇所」はあるだろうか?

遊んでいる G4 や Sparc マシンがあるので活用したい……さらに古い Alpha もあるが、まだ起動するかテストが必要だ……

Gespenster 2010年8月29日 11:35 UTC 原文 ·

ByteReverse マクロは、SHA-256 変換の前にスキップすべきだろう。

lfm 2010年8月29日 16:41 UTC 原文 ·
Gespensterの投稿(2010年8月29日 02:35 UTC)

ByteReverse マクロは、SHA-256 変換の前にスキップすべきだろう。

前後両方?ナンスやタイムスタンプのためにも削除が必要な ByteReverse 呼び出しが複数ある。

実際、ByteReverse されるためだけに存在する一時的なブロックヘッダーを完全に不要にできるかもしれない。

Gespenster 2010年8月29日 17:18 UTC 原文 ·
lfmの投稿(2010年8月29日 07:41 UTC)
Gespensterの投稿(2010年8月29日 02:35 UTC)

ByteReverseマクロは、SHA-256変換の前にスキップすべきだろう。

前後両方?ナンスやタイムスタンプのためにも削除が必要なByteReverse呼び出しが複数ある。

実際、ByteReverseされるためだけに存在する一時的なブロックヘッダーを完全に不要にできるかもしれない。

SHA-256 はバイトストリームがビッグエンディアンであることを期待しているので、すべて削除できると思う。最も速い確認方法は、BE マシンと LE マシンで同時にデバッガーを通してコードを実行し、各ステップで結果を比較することだと思う。

コードは全体を通してリトルエンディアンを前提としており、ビッグエンディアンに移植しない意図で書かれた。ネットワーク経由で送信されるすべての整数はバイトスワップする必要があり、コード内の他の数十箇所に加えて対応が必要だ。余分なソースコードの肥大化に見合わない。

いずれにせよ、ビッグエンディアンは廃れつつある。