From 60819985164804c407a3818993c7efef2d8cd2bb Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sun, 12 Jun 2016 09:11:43 -0700 Subject: [PATCH] Revert "store undo coins in coinviews." This reverts commit f2465c2cafa02c50b7fccd10bba8c56a6c05d98f. --- lib/bcoin/chaindb.js | 32 +++++++++++++++++++++----------- lib/bcoin/coinview.js | 32 -------------------------------- 2 files changed, 21 insertions(+), 43 deletions(-) diff --git a/lib/bcoin/chaindb.js b/lib/bcoin/chaindb.js index 0ff282f6..c5b5e32f 100644 --- a/lib/bcoin/chaindb.js +++ b/lib/bcoin/chaindb.js @@ -874,8 +874,7 @@ ChainDB.prototype.removeBlock = function removeBlock(hash, batch, callback) { ChainDB.prototype.connectBlock = function connectBlock(block, view, batch, callback) { var self = this; - var undo = new bcoin.coinview(); - var hasUndo = false; + var undo = new BufferWriter(); var i, j, tx, input, output, key, addresses, address, hash, coins, raw; if (this.options.spv) { @@ -917,8 +916,7 @@ ChainDB.prototype.connectBlock = function connectBlock(block, view, batch, callb batch.del(layout.C(address, input.prevout.hash, input.prevout.index)); } - hasUndo = true; - undo.addCoin(input.coin); + Framer.coin(input.coin, false, undo); } for (j = 0; j < tx.outputs.length; j++) { @@ -949,8 +947,8 @@ ChainDB.prototype.connectBlock = function connectBlock(block, view, batch, callb } } - if (hasUndo) - batch.put(layout.u(block.hash()), undo.toRaw()); + if (undo.written > 0) + batch.put(layout.u(block.hash()), undo.render()); this.emit('add block', block); @@ -1397,7 +1395,16 @@ ChainDB.prototype.getCoinView = function getCoinView(block, callback) { ChainDB.prototype.getUndoCoins = function getUndoCoins(hash, callback) { return this.db.fetch(layout.u(hash), function(data) { - return bcoin.coinview.fromRaw(data); + var p = new BufferReader(data); + var coins = []; + var coin; + + while (p.left()) { + coin = Parser.parseCoin(p, false); + coins.push(new bcoin.coin(coin)); + } + + return coins; }, callback); }; @@ -1409,7 +1416,7 @@ ChainDB.prototype.getUndoCoins = function getUndoCoins(hash, callback) { ChainDB.prototype.getUndoView = function getUndoView(block, callback) { var self = this; - var i, j, tx, input; + var i, j, k, tx, input, coin; return this.getCoinView(block, function(err, view) { if (err) @@ -1422,7 +1429,7 @@ ChainDB.prototype.getUndoView = function getUndoView(block, callback) { if (!coins) return callback(null, view); - for (i = 0; i < block.txs.length; i++) { + for (i = 0, k = 0; i < block.txs.length; i++) { tx = block.txs[i]; if (tx.isCoinbase()) @@ -1430,8 +1437,11 @@ ChainDB.prototype.getUndoView = function getUndoView(block, callback) { for (j = 0; j < tx.inputs.length; j++) { input = tx.inputs[j]; - input.coin = coins.spend(input.prevout.hash, input.prevout.index); - view.addCoin(input.coin); + coin = coins[k++]; + coin.hash = input.prevout.hash; + coin.index = input.prevout.index; + input.coin = coin; + view.addCoin(coin); } } diff --git a/lib/bcoin/coinview.js b/lib/bcoin/coinview.js index b556ec01..83950f18 100644 --- a/lib/bcoin/coinview.js +++ b/lib/bcoin/coinview.js @@ -8,8 +8,6 @@ var bcoin = require('./env'); var utils = bcoin.utils; var assert = utils.assert; -var BufferReader = require('./reader'); -var BufferWriter = require('./writer'); /** * A collections of {@link Coins} objects. @@ -98,36 +96,6 @@ CoinView.prototype.spend = function spend(hash, index) { return this.coins[hash].spend(index); }; -CoinView.prototype.toRaw = function toRaw() { - var keys = Object.keys(this.coins); - var p = new BufferWriter(); - var out = []; - var i, hash; - - for (i = 0; i < keys.length; i++) { - hash = keys[i]; - p.writeHash(hash); - p.writeVarBytes(this.coins[hash].toRaw()); - } - - return p.render(); -}; - -CoinView.fromRaw = function fromRaw(data) { - var p = new BufferReader(data, true); - var map = {}; - var hash, coins; - - while (p.left()) { - hash = p.readHash('hex'); - coins = bcoin.coins.fromRaw(p.readVarBytes()); - coins.hash = hash; - map[hash] = coins; - } - - return new CoinView(map); -}; - /** * Fill transaction(s) with coins. * @param {TX} tx