diff --git a/bin/spvnode b/bin/spvnode index 3625ee4d..6bb6014f 100755 --- a/bin/spvnode +++ b/bin/spvnode @@ -11,7 +11,7 @@ var node = bcoin.spvnode({ }); node.on('error', function(err) { - bcoin.debug(err.message); + bcoin.debug(err.stack + ''); }); node.open(function(err) { diff --git a/lib/bcoin/chain.js b/lib/bcoin/chain.js index 36c79ad9..bcba2823 100644 --- a/lib/bcoin/chain.js +++ b/lib/bcoin/chain.js @@ -336,18 +336,14 @@ Chain.prototype._preload = function _preload(callback) { }); stream.on('error', function(err) { - var start = Math.max(0, height - 2); - self.reset(start, function(e) { - if (e) - return callback(e); - return callback(err); - }); + stream.destroy(); + return callback(err); }); stream.on('data', function(data) { var blocks = []; var need = 80 - buf.size; - var lastEntry, block, entry, start; + var lastEntry, block, data, entry; while (data.length >= need) { buf.data.push(data.slice(0, need)); @@ -368,11 +364,12 @@ Chain.prototype._preload = function _preload(callback) { return; for (i = 0; i < blocks.length; i++) { - block = blocks[i]; + data = blocks[i]; try { data = parseHeader(data); } catch (e) { + stream.destroy(); return callback(e); } @@ -386,13 +383,8 @@ Chain.prototype._preload = function _preload(callback) { // Do some paranoid checks. if (lastEntry && data.prevBlock !== lastEntry.hash) { - start = Math.max(0, height - 2); stream.destroy(); - return self.reset(start, function(err) { - if (err) - return callback(err); - return callback(new Error('Corrupt headers.')); - }); + return callback(new Error('Corrupt headers.')); } // Create headers object for validation. @@ -401,13 +393,8 @@ Chain.prototype._preload = function _preload(callback) { // Verify the block headers. We don't want to // trust an external centralized source completely. if (!block.verifyHeaders()) { - start = Math.max(0, height - 2); stream.destroy(); - return self.reset(start, function(err) { - if (err) - return callback(err); - return callback(new Error('Bad headers.')); - }); + return callback(new Error('Bad headers.')); } // Create a chain entry. @@ -490,6 +477,9 @@ Chain.prototype._verify = function _verify(block, prev, callback) { if (!block.verify(ret)) return done(new VerifyError(block, 'invalid', ret.reason, ret.score)); + if (this.options.spv || block.type !== 'block') + return done(); + // Skip the genesis block if (block.isGenesis()) return done(null, flags); diff --git a/lib/bcoin/protocol/parser.js b/lib/bcoin/protocol/parser.js index 56ec359b..96d309e4 100644 --- a/lib/bcoin/protocol/parser.js +++ b/lib/bcoin/protocol/parser.js @@ -834,7 +834,6 @@ Parser.parseBlockHeaders = function parseBlockHeaders(p) { ts: p.readU32(), bits: p.readU32(), nonce: p.readU32(), - totalTX: p.readVarint(), _size: p.end() } };