ウォレットを壊してしまい、送金が承認されなくなった
お気づきの通り、根本的な問題は、少なくとも1回の承認があるまでトランザクションをカウントしたり使用したりすべきではないということだ。0/未承認のトランザクションは非常に二級市民的な扱いだ。せいぜい、何かが受信されたという通知程度であり、残高としてカウントしたり使用したりするのは時期尚早だ。
変更を加え、それらが薄い文字で表示され、入金額が[+1.23]のように角括弧で囲まれ、残高にカウントされず、使用もできないようにした。これは自分が送信したトランザクションには適用されない。自分で書いたものなので暗黙的に信頼しているからだ。
(+1.23)にしなかったのは、会計では括弧がマイナスを意味するからだ。角括弧なら意味が明確に区別できることを期待している。
JSON-RPCインターフェースでは、0回の承認を指定することで、引き続き0/未承認のトランザクションを確認できる。
変更をSVN rev 158にアップロードした。まもなく0.3.13 RCを投稿する。
これらのトランザクションがウォレットにある場合は、まもなくリリースされる0.3.13にアップグレードするまで支払いを送信しないでほしい。
これらのトランザクションをすでに送信した場合、またはそれらの作成者である場合は、theymosのパッチを使用するか、以下の変更を加えて、クリーンなトランザクションを新しいウォレットに送信してクリーンアップしてほしい。
変更前:
if (pcoin->GetDepthInMainChain() < 1 && pcoin->GetDebit() <= 0)
continue;
変更後:
if (pcoin->GetDepthInMainChain() < 1)
continue; 0.3.13リリース候補だ。テストしてほしい: http://www.bitcoin.org/download/bitcoin-0.3.13-rc1-win32-setup.exe
それはどちらかというとSelectCoinsの問題になるだろう。
SVN rev 161には、自分の未承認トランザクションが使用可能かどうかを再帰的に判定する改良が含まれている。自分のお釣りはすぐに使えるべきなので、これが必要だ。
新しい再帰的判定は:0/未承認のトランザクションは、それが自分のものであり、そのすべての依存関係がブロック内にあるか、やはり自分のものである場合に使用できる。
Windows版のビルドはこちらだ: http://www.bitcoin.org/download/bitcoin-0.3.13.2-win32-setup.exe
このバージョンは、すでに0/未承認トランザクションがあり、それをすでに使用した可能性がある場合の改善だ。0/未承認トランザクションの元の作成者である場合は、引き続きtheymosのパッチが必要だ。