migrate: fixes and optimizations for chaindb2to3.
This commit is contained in:
parent
70a2f64de6
commit
7f5649dbd8
@ -173,6 +173,9 @@ async function reserializeUndo(hash) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We need to reverse everything.
|
||||||
|
undo.items.reverse();
|
||||||
|
|
||||||
batch.put(pair('u', tip.hash), undo.toRaw());
|
batch.put(pair('u', tip.hash), undo.toRaw());
|
||||||
|
|
||||||
if (++total % 1000 === 0) {
|
if (++total % 1000 === 0) {
|
||||||
@ -377,11 +380,17 @@ async function finalize() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function getMeta(coin, prevout) {
|
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];
|
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);
|
item = metaCache.get(prevout.hash);
|
||||||
|
|
||||||
if (item) {
|
if (item) {
|
||||||
@ -389,6 +398,9 @@ async function getMeta(coin, prevout) {
|
|||||||
return [version, height, false];
|
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));
|
data = await db.get(pair(0x01, prevout.hash));
|
||||||
|
|
||||||
if (data) {
|
if (data) {
|
||||||
@ -397,12 +409,16 @@ async function getMeta(coin, prevout) {
|
|||||||
return [version, height, false];
|
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));
|
data = await db.get(pair('c', prevout.hash));
|
||||||
assert(data);
|
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() {
|
async function getTip() {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user