ビットコイン・インスティテュート

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

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日11:35 UTC)

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

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

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

Gespenster 2010年8月29日17:18 UTC
lfmの投稿(2010年8月29日16:41 UTC)
Gespensterの投稿(2010年8月29日11:35 UTC)

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

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

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

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

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

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