chaindb: fix reorg handling for spv.

This commit is contained in:
Christopher Jeffrey 2016-10-03 08:47:41 -07:00
parent f5625e76e1
commit 0d9afabd87
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -11,7 +11,6 @@ var AsyncObject = require('../utils/async');
var constants = require('../protocol/constants'); var constants = require('../protocol/constants');
var utils = require('../utils/utils'); var utils = require('../utils/utils');
var assert = require('assert'); var assert = require('assert');
var DUMMY = new Buffer([0]);
var BufferWriter = require('../utils/writer'); var BufferWriter = require('../utils/writer');
var BufferReader = require('../utils/reader'); var BufferReader = require('../utils/reader');
var co = require('../utils/co'); var co = require('../utils/co');
@ -24,6 +23,7 @@ var Coin = require('../primitives/coin');
var TX = require('../primitives/tx'); var TX = require('../primitives/tx');
var Address = require('../primitives/address'); var Address = require('../primitives/address');
var ChainEntry = require('./chainentry'); var ChainEntry = require('./chainentry');
var DUMMY = new Buffer([0]);
/* /*
* Database Layout: * Database Layout:
@ -655,7 +655,7 @@ ChainDB.prototype.disconnect = co(function* disconnect(entry) {
if (this.options.spv) { if (this.options.spv) {
this.put(layout.R, this.pending.commit(entry.prevBlock)); this.put(layout.R, this.pending.commit(entry.prevBlock));
yield this.commit(); yield this.commit();
return [entry, entry.toHeaders()]; return entry.toHeaders();
} }
try { try {
@ -1032,18 +1032,19 @@ ChainDB.prototype.disconnectBlock = co(function* disconnectBlock(block) {
*/ */
ChainDB.prototype.fillCoins = co(function* fillCoins(tx) { ChainDB.prototype.fillCoins = co(function* fillCoins(tx) {
var i, input, coin; var i, input, prevout, coin;
if (tx.isCoinbase()) if (tx.isCoinbase())
return tx; return tx;
for (i = 0; i < tx.inputs.length; i++) { for (i = 0; i < tx.inputs.length; i++) {
input = tx.inputs[i]; input = tx.inputs[i];
prevout = input.prevout;
if (input.coin) if (input.coin)
continue; continue;
coin = yield this.getCoin(input.prevout.hash, input.prevout.index); coin = yield this.getCoin(prevout.hash, prevout.index);
if (coin) if (coin)
input.coin = coin; input.coin = coin;