walletdb: cleanup wipe method.

This commit is contained in:
Christopher Jeffrey 2016-11-04 09:58:15 -07:00
parent 5b43f76307
commit 704d9e1783
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -470,115 +470,43 @@ WalletDB.prototype.backup = function backup(path) {
WalletDB.prototype.wipe = co(function* wipe() {
var batch = this.db.batch();
var dummy = new Buffer(0);
var i, keys, key, gte, lte;
var total = 0;
var iter, item;
this.logger.warning('Wiping WalletDB TXDB...');
this.logger.warning('I hope you know what you\'re doing.');
// All TXDB records
keys = yield this.db.keys({
gte: TXDB.layout.prefix(0x00000000, dummy),
lte: TXDB.layout.prefix(0xffffffff, dummy)
iter = db.iterator({
gte: new Buffer([0x00]),
lte: new Buffer([0xff])
});
for (i = 0; i < keys.length; i++) {
key = keys[i];
batch.del(key);
for (;;) {
item = yield iter.next();
if (!item)
break;
try {
switch (item.key[0]) {
case 0x62: // b
case 0x63: // c
case 0x65: // e
case 0x74: // t
case 0x6f: // o
case 0x68: // h
case 0x52: // R
batch.del(item.key);
total++;
break;
}
} catch (e) {
yield iter.end();
throw e;
}
}
// All recent block hashes
keys = yield this.db.keys({
gte: layout.h(0),
lte: layout.h(0xffffffff)
});
for (i = 0; i < keys.length; i++) {
key = keys[i];
batch.del(key);
}
// The state record
batch.del(layout.R);
// All block maps
keys = yield this.db.keys({
gte: layout.b(0),
lte: layout.b(0xffffffff)
});
for (i = 0; i < keys.length; i++) {
key = keys[i];
batch.del(key);
}
// All outpoint maps
keys = yield this.db.keys({
gte: layout.o(constants.NULL_HASH, 0),
lte: layout.o(constants.HIGH_HASH, 0xffffffff)
});
for (i = 0; i < keys.length; i++) {
key = keys[i];
batch.del(key);
}
// All TX maps (e -- old)
gte = new Buffer(33);
gte.fill(0);
gte[0] = 0x65;
lte = new Buffer(33);
lte.fill(255);
lte[0] = 0x65;
keys = yield this.db.keys({
gte: gte,
lte: lte
});
for (i = 0; i < keys.length; i++) {
key = keys[i];
batch.del(key);
}
// All block maps (b -- 32 byte old)
gte = new Buffer(33);
gte.fill(0);
gte[0] = 0x62;
lte = new Buffer(33);
lte.fill(255);
lte[0] = 0x62;
keys = yield this.db.keys({
gte: gte,
lte: lte
});
for (i = 0; i < keys.length; i++) {
key = keys[i];
batch.del(key);
}
// All block records (c -- old)
gte = new Buffer(5);
gte.fill(0);
gte[0] = 0x63;
lte = new Buffer(5);
lte.fill(255);
lte[0] = 0x63;
keys = yield this.db.keys({
gte: gte,
lte: lte
});
for (i = 0; i < keys.length; i++) {
key = keys[i];
batch.del(key);
}
this.logger.warning('Wiped %d txdb records.', total);
yield batch.write();
});