オーバーフローバグ 深刻

12 件のメッセージ サトシ・ナカモト 2010年8月15日 — 2010年8月16日

予備的な変更だ。正しいだろうか? まだ変更することがある。これがすべてではない。間もなくSVNにコミットする。

    bool CheckTransaction() const
    {
        // コンテキストに依存しない基本チェック
        if (vin.empty() || vout.empty())
            return error("CTransaction::CheckTransaction() : vin or vout empty");

        // 負の値とオーバーフロー値のチェック
        int64 nTotal = 0;
        foreach(const CTxOut& txout, vout)
        {
            if (txout.nValue < 0)
                return error("CTransaction::CheckTransaction() : txout.nValue negative");
            if (txout.nValue > 21000000 * COIN)
                return error("CTransaction::CheckTransaction() : txout.nValue too high");
            nTotal += txout.nValue;
            if (nTotal > 21000000 * COIN)
                return error("CTransaction::CheckTransaction() : txout total too high");
        }

        if (IsCoinBase())
        {
            if (vin[0].scriptSig.size() < 2 || vin[0].scriptSig.size() > 100)
                return error("CTransaction::CheckTransaction() : coinbase script size");
        }
        else
        {
            foreach(const CTxIn& txin, vin)
                if (txin.prevout.IsNull())
                    return error("CTransaction::CheckTransaction() : prevout is null");
        }

        return true;
    }

トピックをスティッキーにしないでくれ、あそこは誰も見ない。バンプするのに十分な投稿があるだろう。

皆さんが生成を停止してくれると助かる。おそらく現在のブランチの周辺でブランチをやり直す必要があり、生成が少ないほどそれが早く完了する。

最初のパッチはSVN rev 132に入る予定だ。まだアップロードされていない。まず他の雑多な変更を先に出してから、この件のパッチをアップロードする。

パッチがSVN rev 132にアップロードされた!

現時点での推奨手順:

  1. シャットダウンする。
  2. knightmbのblkファイルをダウンロードする。(blk0001.datとblkindex.datファイルを置き換える)
  3. アップグレードする。
  4. 74000ブロック未満から開始されるはずだ。残りを再ダウンロードさせてほしい。

knightmbのファイルを使いたくない場合は、blk*.datファイルを削除するだけでもよいが、全員が同時にブロックインデックス全体をダウンロードするとネットワークにかなりの負荷がかかる。

まもなくリリースをビルドする。

ブロックチェーンのダウンロードを更新しないでほしい。誰かのブロックチェーンダウンロードを使う場合、最後まで含むものは望ましくない。やや古いもののほうが良く、最新のブロックをダウンロードして検証できる。

tcatmの4-way SSE2 SHA-256はファイルsha256.cppに入っており、数リビジョン前にすでにアップロードされている。

たった今、Linux上でのビルドを有効にするmakefile.unixであるrev 134をアップロードした。今Linuxでrev 134をビルドすると-4wayスイッチが使える。

ビルドに問題がある場合は、makefile.unixを編集して:

  • -DFOURWAYSSE2を削除
  • 以下の行の末尾からobj/sha256.oを削除:
bitcoin: $(OBJS) obj/ui.o obj/uibase.o obj/sha256.o
bitcoind: $(OBJS:obj/%=obj/nogui/%) obj/sha256.o

0.3.10のLinuxビルドには、私がビルドする際に-4wayオプションが含まれる

Windows用のパッチダウンロードはこちらだ:

http://www.bitcoin.org/download/bitcoin-0.3.10-win32-setup.exe http://www.bitcoin.org/download/bitcoin-0.3.10-win32.zip

SHA1 16645ec5fcdb35bc54bc7195309a1a81105242bb bitcoin-0.3.10-win32-setup.exe SHA1 4f35ad7711a38fe8c880c6c9beab430824c426d3 bitcoin-0.3.10-win32.zip

手順:

  1. シャットダウンする。
  2. knightmbのblkファイルをダウンロードし、blk0001.datとblkindex.datファイルを置き換える。 http://knightmb.dyndns.org/files/bitcoin/blocks/ http://rapidshare.com/files/413168038/BitcoinBlocks.torrent
  3. 0.3.10にアップグレードする。
  4. 74000ブロック未満から開始され、残りを再ダウンロードするはずだ。

あるいは、blkファイルのダウンロードが面倒な場合は、以下のようにするだけでよい:

  1. シャットダウンする。
  2. blk*.datを削除(または移動)する。
  3. 0.3.10にアップグレードする。
  4. すべてのブロックを再ダウンロードし、おそらく約1時間かかる。

Quote from: knightmb on August 15, 2010, 10:59:04 PM[編集] 投稿を見ました。74,000未満でビルドします。技術的な方々のダウンロード時間を少なくとも数分は節約できるはずです。 古いものはそのままにしてくれ!古いほうが良いのだ。何番のブロックだ?60000から74000のどこかであれば問題ない。しばらく前から公開していたものは検証済みで、最善の選択肢だ。

67000から開始するのは完璧だ。

はい、現時点では74638で止まるだろう。より多くのノードがアップグレードして生成するにつれて、ゆっくりと増加し始めるはずだ。

Linux版のビルドリンクは以下の通りだ。

Linux版にはtcatmの4-way SSE2 SHA-256が含まれており、i5およびAMD CPUでの生成が高速になる。「-4way」スイッチを使って有効にし、お使いの環境で高速かどうか確認してほしい。

ダウンロードリンク: http://www.bitcoin.org/download/bitcoin-0.3.10-win32-setup.exe http://www.bitcoin.org/download/bitcoin-0.3.10-win32.zip http://www.bitcoin.org/download/bitcoin-0.3.10-linux.tar.gz

SHA1 16645ec5fcdb35bc54bc7195309a1a81105242bb bitcoin-0.3.10-win32-setup.exe SHA1 4f35ad7711a38fe8c880c6c9beab430824c426d3 bitcoin-0.3.10-win32.zip SHA1 e3fda1ddb31b0d5c35156cacd80dee6ea6ae6423 bitcoin-0.3.10-linux.tar.gz

Quote from: Joozero on August 15, 2010, 11:32:43 PMこれについて何か追加すべきだと思います:http://bitcointalk.org/index.php?topic=259.0 必要な場合に警告メッセージを表示するラベルがクライアントにあるべきだ。 今は常にウェブサイトを確認しなければならず、それは良くないと思う。 同意する。長い間やりたかったのだが、やる時間がなかった。

今のところ、bitcoin-listメーリングリストに登録することもできる。このようなお知らせや主要な新バージョン以外ではほとんど使われていない。

登録/解除ページ: http://lists.sourceforge.net/mailman/listinfo/bitcoin-list

Quote from: Ground Loop on August 16, 2010, 12:29:55 AM影響についての質問:不正なブロックの後、不正なブロックチェーンを使ってトランザクションを送信しました。

そのトランザクションのステータスはどうなりますか? 見たところ、(更新された)送信側のクライアントウォレットには差し引かれた金額が表示されています。

修正されたチェーンに再統合され、受信者はそれを使えるようになりますか? ああ、修正されたチェーンに再統合される。トランザクションは消えず、双方で引き続き表示されるが、確認数が0に戻り、再び増え始める。

ブロック74638以降の不正なチェーンでブロックを生成した場合のみ、そのブロックからの50 BTCが消える。不正なチェーン内のブロックはまだ成熟していなかったはずだ。

Quote from: kosovito on August 16, 2010, 12:39:17 AMすべての手順を実行しました。現在クライアントは0.3.10で、ブロック74638で止まっています。これで問題ありませんか? まだ74638ブロックと表示されているなら、0.3.10のノードに接続されていない。

今日のところは、以下のパラメータを追加してみてほしい: -addnode=75.158.131.108 -addnode=99.27.237.13 -addnode=68.68.99.14

参照 http://bitcointalk.org/index.php?topic=828

Quote from: trebronics on August 16, 2010, 01:02:35 AMクライアントを実行しているほとんどの人はこのメッセージスレッドを読んでいません。では…素朴な質問です:

  1. これはバージョン3.8.1(大災害前)の不正なブロックチェーンを持つクライアントにどのような影響を与え続けますか?
  2. 3.8.10にアップグレードしたがブロックチェーンファイルを削除しないクライアントにどのような影響がありますか?
  3. ノードパワーの50%以上がアップグレードされ、正しいチェーンが不正なチェーンを追い越せば、0.3.10ノードは不正なトランザクションが確認を得ることを困難にする。
  4. blk*.datファイルを削除しなかった場合、その50%への貢献にはなっておらず、正しいチェーンが不正なチェーンを追い越すまで不正なトランザクションが表示され続ける。

Windowsでは、findstr /c:“version message” debug.log

不正なチェーンは最近ブロック74678にあったようだ。追い越すのが待ちきれない。

http://nullvoid.org/bitcoin/statistix.phpの統計では、過去3時間で1時間あたり5ブロックだった。約1日前に難易度調整があり、1時間あたり6ブロックに戻るはずだった。

未アップグレードのノードはほとんどの場合正しいチェーンを持っているが、依然としてすべてのブロックにオーバーフロートランザクションを含めようとしているため、継続的にフォークして無効なブロックを生成しようとしている。旧バージョンのノードを再起動すると、トランザクションプールが空になるため、トランザクションが再ブロードキャストされるまでしばらくは有効なブロックを生成するかもしれない。0.3.9以下のノードはまだアップグレードが必要だ。

SVNには、blk*.datファイルを手動で削除せずにブロックチェーンを自動的に再編成するために必要なコードが入っている。昨日はそのコードを迅速かつ慎重に書くことができないとわかっていたので、手動の簡易オプションで対応した。