diff --git a/lib/wallet/walletdb.js b/lib/wallet/walletdb.js index 78b58bd4..eae1c802 100644 --- a/lib/wallet/walletdb.js +++ b/lib/wallet/walletdb.js @@ -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(); });