バージョン 0.3.12

6 件のメッセージ BitcoinTalk サトシ・ナカモト, マイケル・マーカート, ジェフ・ガージック, nelisky 2010年9月7日 — 2010年9月28日

バージョン 0.3.12 が利用可能になった。

機能:

  • json-rpc エラーがより標準的なエラーオブジェクトを返すようになった。(ギャビン・アンドレセンに感謝)
  • json-rpc コマンドラインが終了コードを返すようになった。
  • json-rpc backupwallet コマンド。
  • 受信したメッセージによって例外が発生した場合に回復して続行する。他のノードが例外を引き起こせるべきではなく、これまで起きたことはないが、例外を引き起こす方法が見つかった場合、ネットワークノードの停止に利用されることを防ぐ。

エラー文字列の内容を検査する json-rpc コードがある場合は、{“code”:,“message”:}の形式のエラーオブジェクトを期待するように変更する必要がある。これが標準だ。このスレッドを参照してくれ: topic 969

ダウンロード: http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.12/

theymos 2010年9月8日 00:25 UTC 原文 ·

「非標準」トランザクションを禁止することで何が起きるのか?

main.cpp:506
// Rather not work on nonstandard transactions
if (GetSigOpCount() > 2 || ::GetSerializeSize(*this, SER_NETWORK) < 100)
  return error("AcceptToMemoryPool() : nonstandard transaction");

GetSigOpCount には何が含まれ、GetSerializeSize は何を測っているのか?

これはネットワーク側で「ゆるく」強制されている:

main.cpp:1425
// Check that it's not full of nonstandard transactions
if (nHeight > 79400 && GetSigOpCount() > MAX_BLOCK_SIGOPS)
  return error("AcceptBlock() : too many nonstandard transactions");

Bitcoin クライアントは現在、2 つの可能なテンプレートに一致するトランザクションのみを作成・認識する。

これらは、トランザクションがそれらの標準トランザクションに適合するいくつかの一般的な指標に大まかに適合するかどうかを確認する簡易テストだ。ノードはそれらのトランザクションのみを自身のブロックに追加しようとする。

将来、既存の 2 種類のトランザクションにテンプレートを追加する場合、「非標準トランザクションには取り組まない」テストを変更してそれらを受け入れるようにできる。

サトシ・ナカモトの投稿(2010年9月8日 18:06 UTC)

将来、既存の 2 種類のトランザクションにテンプレートを追加する場合、「非標準トランザクションには取り組まない」テストを変更してそれらを受け入れるようにできる。

将来の新しいクライアントが非標準トランザクションを生成できるよう更新されたとしても、古いクライアントはそれを拒否してしまうのではないか?

theymos 2010年9月8日 18:56 UTC 原文 ·
ジェフ・ガージックの投稿(2010年9月8日 18:48 UTC)

将来の新しいクライアントが非標準トランザクションを生成できるよう更新されたとしても、古いクライアントはそれを拒否してしまうのではないか?

古いクライアントは、自分が生成するブロックにそれらを含めないというだけだ。だからトランザクションが少し遅くなることはあっても、完全に止まることはない。

nelisky 2010年9月28日 14:23 UTC 原文 ·

satoshi および皆へ: ウォレットのセキュリティについて長く深く考えてきた。今、より多額の bitcoin を動かす(といいのだが)他の Web サービスを実装しているところだ。backupwallet は素晴らしい。今は新しいアドレスを作るたびに自動でバックアップを取っている。トランザクションを送るときも含めてだ。

だが、トランザクションを大量に送るサイトでこれはスケールするのか? 毎回ウォレット全体をバックアップする必要があるが、それにはアドレス、鍵、トランザクションが含まれ、使用に応じてかなり大きくなる。より集約的な利用には、バックアップ点を減らすか、データの分離を改善するかのどちらかが必要だと思う。

これに対して思いつく単純な解決策は次の二つだ:

  1. アドレス/鍵を他のすべてから分離する。これにより差分バックアップが容易になるか、少なくともハードウェア障害時に資金を再現するのに必要な分にバックアップサイズを抑えられる。
  2. 将来機能として話されていた、使用するアドレスをあらかじめ束で生成しておく方式を実装する。そうすれば一度のウォレットバックアップで今後 1,000件のトランザクションをカバーできる、というような形になる。 2.1) これを効率よく使うには、未使用プールに残っているアドレス数を問い合わせ、必要に応じて新しいバッチの生成を要求できるようにすべきだ。そうすれば適切なタイミングでバックアップを作成でき、アドレス生成からバックアップまでの間にデータを失う可能性を 0 にできる。

もちろん 1)と 2)の両方を実現できれば完璧だが、上記のいずれかを将来のリリースで期待してよいか? それとも自前でパッチを当て始めるべきか?