From 7f5649dbd89a4dff1e429ddae1c5b2ecad2e06d3 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Tue, 18 Jul 2017 08:57:28 -0700 Subject: [PATCH] migrate: fixes and optimizations for chaindb2to3. --- migrate/chaindb2to3.js | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/migrate/chaindb2to3.js b/migrate/chaindb2to3.js index c4916630..9e75725c 100644 --- a/migrate/chaindb2to3.js +++ b/migrate/chaindb2to3.js @@ -173,6 +173,9 @@ async function reserializeUndo(hash) { } } + // We need to reverse everything. + undo.items.reverse(); + batch.put(pair('u', tip.hash), undo.toRaw()); if (++total % 1000 === 0) { @@ -377,11 +380,17 @@ async function finalize() { } async function getMeta(coin, prevout) { - let item, data, coins; + let item, data, br, version, height; - if (coin.height !== -1) + // Case 1: Undo coin is the last spend. + if (coin.height !== -1) { + assert(coin.version !== -1); return [coin.version, coin.height, true]; + } + // Case 2: We have previously cached + // this coin's metadata, but it's not + // written yet. item = metaCache.get(prevout.hash); if (item) { @@ -389,6 +398,9 @@ async function getMeta(coin, prevout) { return [version, height, false]; } + // Case 3: We have previously cached + // this coin's metadata, and it is + // written. data = await db.get(pair(0x01, prevout.hash)); if (data) { @@ -397,12 +409,16 @@ async function getMeta(coin, prevout) { return [version, height, false]; } + // Case 4: The coin's metadata is + // still in the top-level UTXO set. data = await db.get(pair('c', prevout.hash)); assert(data); - coins = OldCoins.fromRaw(data, prevout.hash); + br = new BufferReader(data); + version = br.readVarint(); + height = br.readU32(); - return [coins.version, coins.height, true]; + return [version, height, true]; } async function getTip() {