You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
argsman.AddArg("-dumpfile=<file name>", "When used with 'dump', writes out the records to this file.", ArgsManager::ALLOW_STRING, OptionsCategory::OPTIONS);
30
+
argsman.AddArg("-dumpfile=<file name>", "When used with 'dump', writes out the records to this file. When used with 'createfromdump', loads the records into a new wallet.", ArgsManager::ALLOW_STRING, OptionsCategory::OPTIONS);
31
31
argsman.AddArg("-debug=<category>", "Output debugging information (default: 0).", ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST);
32
32
argsman.AddArg("-descriptors", "Create descriptors wallet. Only for create", ArgsManager::ALLOW_BOOL, OptionsCategory::OPTIONS);
33
+
argsman.AddArg("-format=<format>", "The format of the wallet file to create. Either \"bdb\" or \"sqlite\". Only used with 'createfromdump'", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
33
34
argsman.AddArg("-printtoconsole", "Send trace/debug info to console (default: 1 when no -debug is true, 0 otherwise).", ArgsManager::ALLOW_ANY, OptionsCategory::DEBUG_TEST);
argsman.AddArg("create", "Create new wallet file", ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS);
37
38
argsman.AddArg("salvage", "Attempt to recover private keys from a corrupt wallet. Warning: 'salvage' is experimental.", ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS);
38
39
argsman.AddArg("dump", "Print out all of the wallet key-value records", ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS);
40
+
argsman.AddArg("createfromdump", "Create new wallet file from dumped records", ArgsManager::ALLOW_ANY, OptionsCategory::COMMANDS);
error = _("No dump file provided. To use createfromdump, -dumpfile=<filename> must be provided.");
114
+
returnfalse;
115
+
}
116
+
117
+
fs::path dump_path = dump_filename;
118
+
dump_path = fs::absolute(dump_path);
119
+
if (!fs::exists(dump_path)) {
120
+
error = strprintf(_("Dump file %s does not exist."), dump_path.string());
121
+
returnfalse;
122
+
}
123
+
fsbridge::ifstream dump_file(dump_path);
124
+
125
+
// Compute the checksum
126
+
CHashWriter hasher(0, 0);
127
+
uint256 checksum;
128
+
129
+
// Check the magic and version
130
+
std::string magic_key;
131
+
std::getline(dump_file, magic_key, ',');
132
+
std::string version_value;
133
+
std::getline(dump_file, version_value, '\n');
134
+
if (magic_key != DUMP_MAGIC) {
135
+
error = strprintf(_("Error: Dumpfile identifier record is incorrect. Got \"%s\", expected \"%s\"."), magic_key, DUMP_MAGIC);
136
+
dump_file.close();
137
+
returnfalse;
138
+
}
139
+
// Check the version number (value of first record)
140
+
uint32_t ver;
141
+
if (!ParseUInt32(version_value, &ver)) {
142
+
error =strprintf(_("Error: Unable to parse version %u as a uint32_t"), version_value);
143
+
dump_file.close();
144
+
returnfalse;
145
+
}
146
+
if (ver != DUMP_VERSION) {
147
+
error = strprintf(_("Error: Dumpfile version is not supported. This version of bitcoin-wallet only supports version 1 dumpfiles. Got dumpfile with version %s"), version_value);
error = _("No wallet file format provided. To use createfromdump, -format=<format> must be provided.");
168
+
returnfalse;
169
+
}
170
+
DatabaseFormat data_format;
171
+
if (file_format == "bdb") {
172
+
data_format = DatabaseFormat::BERKELEY;
173
+
} elseif (file_format == "sqlite") {
174
+
data_format = DatabaseFormat::SQLITE;
175
+
} else {
176
+
error = strprintf(_("Unknown wallet file format \"%s\" provided. Please provide one of \"bdb\" or \"sqlite\"."), file_format);
177
+
returnfalse;
178
+
}
179
+
if (file_format != format_value) {
180
+
warnings.push_back(strprintf(_("Warning: Dumpfile wallet format \"%s\" does not match command line specified format \"%s\"."), format_value, file_format));
0 commit comments