wallet.datの自動バックアップ

5 件のメッセージ サトシ・ナカモト 2010年8月26日 — 2010年9月6日

別のトピックに投稿し始めたが、ここでも繰り返す。このスレッドの方がトピックに特化しているようだ。

主なバックアップの改善は、事前生成された鍵のプールと、ロード時にブロック履歴から見逃したトランザクションをスクレイピングする再スキャンだ。そうすればバックアップは長期間有効に持続する。

nelisky、あなたと同じアイデアを投稿し始めていた。

ウォレットをロックし、フラッシュし、wallet.datを指定した場所にコピーしてからアンロックするjson-rpcコマンドはどうだろうか?プールされた鍵よりも小さなプロジェクトなので、先に実装できるかもしれない。

ファイルをコピーする最もシンプルでポータブルな方法は何だろうか?Boostに何かあるか?

名前は何がよいだろうか?例えば: backupwallet

メモリに読み込んで書き出す方法だと、メモリが逼迫した状況で失敗する可能性がある。

copyfile(const char* from, const char* to)やcopyfile(path from, path to)のような、できればBoostにあるものを探している。見つけてくれれば、実装にかかる可能性が高くなる。

Quote from: nelisky on August 26, 2010, 01:21:57 AMファイルコピーについて、なぜBoostの依存関係を増やすのですか?個人的には依存関係の少ないコアライブラリが欲しいです。 JSONやwxWidgetsの依存関係を置き換える多数のものにBoostが必要だ。Boostは良い、ポータブルなもので、避けるべきではない。

Windowsにmmap(2)があるとは思えない。自作のものを作ってテストするよりも、既存のファイルコピー関数を呼び出す方が良い。

Quote from: nelisky on August 27, 2010, 01:21:09 AMしかし、すでにboost::filesystemの機能を使っているなら、そこからcopy_fileを使えます。ただ、すでに他の何かに必要でなければ、少しやりすぎだと思います。 ありがとう。どこかにあるだろうと思っていた。

すでに十数箇所でboost::filesystemを使っている。新たに追加される依存関係ではない。そうでなければ各OSごとに#ifdefを用意してあらゆる場所でテストしなければならないような、多くのポータブルなものを提供してくれる。

すまない、最近非常に忙しくてメッセージを流し読みしているが、それでも追いつけない。

可能な限りWindows API呼び出しは避けたい。通常6〜8個のパラメータが必要で、正しく動作させるために多くのテストが必要で、簡単なことを行うのに1ページ分のコードが必要になる。

通常iostreamsは避けている。よく制限にぶつかるようだ。90年代にC++ストリーム標準をやや台無しにしてしまった。残念なことに、正しく実装すればストリームは非常に強力で便利なものになり得る。rpc.cppで使っているのは、まだ間違いだったと判明するかもしれない。

結論は、自作のものを作ってテストするよりも、既存のファイルコピー関数を呼び出す方が良いということだ。

rpc backupwallet がSVN rev 147に入った。