txid parsing fixes for txdb.
This commit is contained in:
parent
14a51a25b2
commit
55a7842f59
@ -261,13 +261,6 @@ TXPool.prototype.add = function add(tx, callback) {
|
||||
});
|
||||
};
|
||||
|
||||
function pad32(num) {
|
||||
num = num + '';
|
||||
while (num.length < 10)
|
||||
num = '0' + num;
|
||||
return num;
|
||||
}
|
||||
|
||||
// This big scary function is what a persistent tx pool
|
||||
// looks like. It's a semi mempool in that it can handle
|
||||
// receiving txs out of order.
|
||||
@ -687,6 +680,78 @@ TXPool.prototype._remove = function remove(tx, map, callback) {
|
||||
});
|
||||
};
|
||||
|
||||
TXPool.prototype._confirm = function _confirm(tx, map, callback) {
|
||||
var self = this;
|
||||
var prefix = this.prefix + '/';
|
||||
var hash = tx.hash('hex');
|
||||
var height = tx.height;
|
||||
var ts = tx.ts;
|
||||
var batch;
|
||||
|
||||
this.getTX(hash, function(err, existing) {
|
||||
if (err)
|
||||
return done(err);
|
||||
|
||||
batch = self.db.batch();
|
||||
|
||||
if (!existing)
|
||||
return callback(null, false);
|
||||
|
||||
if (!(existing.ts === 0 && tx.ts !== 0))
|
||||
return callback(null, true);
|
||||
|
||||
// Tricky - update the tx and coin in storage,
|
||||
// and remove pending flag to mark as confirmed.
|
||||
assert(tx.height >= 0);
|
||||
assert(existing.ps > 0);
|
||||
|
||||
batch.put(prefix + 't/t/' + hash, tx.toExtended());
|
||||
batch.del(prefix + 't/p/t/' + hash);
|
||||
batch.put(prefix + 't/h/h/' + pad32(tx.height) + '/' + hash, DUMMY);
|
||||
batch.del(prefix + 't/s/s/' + pad32(existing.ps) + '/' + hash);
|
||||
batch.put(prefix + 't/s/s/' + pad32(tx.ts) + '/' + hash, DUMMY);
|
||||
|
||||
map.all.forEach(function(id) {
|
||||
batch.del(prefix + 't/p/a/' + id + '/' + hash);
|
||||
batch.put(
|
||||
prefix + 't/h/a/' + id + '/' + pad32(tx.height) + '/' + hash, DUMMY);
|
||||
batch.del(
|
||||
prefix + 't/s/a/' + id + '/' + pad32(existing.ps) + '/' + hash);
|
||||
batch.put(
|
||||
prefix + 't/s/a/' + id + '/' + pad32(tx.ts) + '/' + hash, DUMMY);
|
||||
});
|
||||
|
||||
utils.forEachSerial(tx.outputs, function(output, next, i) {
|
||||
self.getCoin(hash, i, function(err, coin) {
|
||||
if (err)
|
||||
return next(err);
|
||||
|
||||
if (!coin)
|
||||
return next();
|
||||
|
||||
coin.height = tx.height;
|
||||
|
||||
batch.put(prefix + 'u/t/' + hash + '/' + i, coin.toRaw());
|
||||
|
||||
next();
|
||||
});
|
||||
}, function(err) {
|
||||
if (err)
|
||||
return done(err);
|
||||
|
||||
batch.write(function(err) {
|
||||
if (err)
|
||||
return done(err);
|
||||
|
||||
self.emit('confirmed', tx, map);
|
||||
self.emit('tx', tx, map);
|
||||
|
||||
return callback(null, true);
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
TXPool.prototype.unconfirm = function unconfirm(hash, callback) {
|
||||
var self = this;
|
||||
|
||||
@ -897,9 +962,9 @@ TXPool.prototype.getPendingHashes = function getPendingHashes(address, callback)
|
||||
}
|
||||
|
||||
if (address)
|
||||
txs.push(key.split('/')[4]);
|
||||
txs.push(key.split('/')[5]);
|
||||
else
|
||||
txs.push(key.split('/')[3]);
|
||||
txs.push(key.split('/')[4]);
|
||||
|
||||
next();
|
||||
});
|
||||
@ -1008,7 +1073,10 @@ TXPool.prototype.getHeightRangeHashes = function getHeightRangeHashes(address, o
|
||||
});
|
||||
}
|
||||
|
||||
txs.push(key.split('/')[4]);
|
||||
if (address)
|
||||
txs.push(key.split('/')[6]);
|
||||
else
|
||||
txs.push(key.split('/')[5]);
|
||||
|
||||
next();
|
||||
});
|
||||
@ -1058,7 +1126,10 @@ TXPool.prototype.getTimeRangeHashes = function getTimeRangeHashes(address, optio
|
||||
});
|
||||
}
|
||||
|
||||
txs.push(key.split('/')[4]);
|
||||
if (address)
|
||||
txs.push(key.split('/')[6]);
|
||||
else
|
||||
txs.push(key.split('/')[5]);
|
||||
|
||||
next();
|
||||
});
|
||||
@ -1348,6 +1419,13 @@ TXPool.prototype.getBalance = function getBalance(callback) {
|
||||
return this.getBalanceByAddress(null, callback);
|
||||
};
|
||||
|
||||
function pad32(num) {
|
||||
num = num + '';
|
||||
while (num.length < 10)
|
||||
num = '0' + num;
|
||||
return num;
|
||||
}
|
||||
|
||||
/**
|
||||
* Expose
|
||||
*/
|
||||
|
||||
Loading…
Reference in New Issue
Block a user