tx: some misc cleanup.

This commit is contained in:
Christopher Jeffrey 2017-01-15 17:52:42 -08:00
parent 94460ba592
commit 5ee83e9114
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
3 changed files with 27 additions and 22 deletions

View File

@ -84,7 +84,7 @@ MempoolEntry.fromOptions = function fromOptions(options) {
MempoolEntry.prototype.fromTX = function fromTX(tx, view, height) {
var flags = Script.flags.STANDARD_VERIFY_FLAGS;
var priority = tx.getPriority(view, height);
var value = tx.getChainValue(view, height);
var value = tx.getChainValue(view);
var sigops = tx.getSigopsCost(view, flags);
var dependencies = false;
var size = tx.getVirtualSize();

View File

@ -800,14 +800,13 @@ MTX.prototype.signature = function signature(index, prev, value, key, type, vers
if (type == null)
type = Script.hashType.ALL;
if (typeof type === 'string')
if (typeof type === 'string') {
type = Script.hashType[type.toUpperCase()];
assert(type != null, 'Unknown sighash type.');
}
// Get the hash of the current tx, minus the other
// inputs, plus the sighash type.
hash = this.signatureHash(index, prev, value, type, version);
// Sign the transaction with our one input
return Script.sign(hash, key, type);
};
@ -1508,8 +1507,15 @@ CoinSelector.prototype.fromOptions = function fromOptions(options) {
}
if (options.subtractFee != null) {
this.subtractFee = options.subtractFee;
this.shouldSubtract = options.subtractFee !== false;
if (typeof options.subtractFee === 'number') {
assert(util.isNumber(options.subtractFee));
this.subtractFee = options.subtractFee;
this.shouldSubtract = true;
} else {
assert(typeof options.subtractFee === 'boolean');
this.subtractFee = options.subtractFee;
this.shouldSubtract = options.subtractFee;
}
}
if (options.height != null) {

View File

@ -40,8 +40,7 @@ var BAD_NONSTD_P2WSH = 3;
* A static transaction object.
* @exports TX
* @constructor
* @param {NakedTX} options - Transaction fields.
* @property {String} type - "tx" (inv type).
* @param {Object} options - Transaction fields.
* @property {Number} version - Transaction version. Note that BCoin reads
* versions as unsigned even though they are signed at the protocol level.
* This value will never be negative.
@ -446,8 +445,10 @@ TX.prototype.hasWitness = function hasWitness() {
*/
TX.prototype.signatureHash = function signatureHash(index, prev, value, type, version) {
if (typeof type === 'string')
if (typeof type === 'string') {
type = Script.hashType[type.toUpperCase()];
assert(type != null, 'Unknown sighash type.');
}
assert(index >= 0 && index < this.inputs.length);
assert(prev instanceof Script);
@ -1698,7 +1699,7 @@ TX.prototype.getWitnessStandard = function getWitnessStandard(view) {
ret = BAD_NONSTD_P2WSH;
}
redeem = Script.fromRaw(redeem);
redeem = new Script(redeem);
if (redeem.isPubkey()) {
if (input.witness.length - 1 !== 1)
@ -1769,7 +1770,6 @@ TX.prototype.checkInputs = function checkInputs(view, height, ret) {
coins = view.get(input.prevout.hash);
if (!coins) {
// Note: don't trigger dos score here.
ret.reason = 'bad-txns-inputs-missingorspent';
ret.score = 0;
return false;
@ -1783,7 +1783,13 @@ TX.prototype.checkInputs = function checkInputs(view, height, ret) {
}
}
coin = view.getOutput(input);
coin = coins.getOutput(input.prevout.index);
if (!coin) {
ret.reason = 'bad-txns-inputs-missingorspent';
ret.score = 0;
return false;
}
if (coin.value < 0 || coin.value > consensus.MAX_MONEY) {
ret.reason = 'bad-txns-inputvalues-outofrange';
@ -1898,22 +1904,16 @@ TX.prototype.getPriority = function getPriority(view, height, size) {
/**
* Calculate the transaction's on-chain value.
* @param {CoinView} view
* @param {Number} height
* @returns {Number}
*/
TX.prototype.getChainValue = function getChainValue(view, height) {
TX.prototype.getChainValue = function getChainValue(view) {
var value = 0;
var i, input, coin, coinHeight;
assert(typeof height === 'number', 'Must pass in height.');
if (this.isCoinbase())
return value;
if (height == null)
height = Infinity;
for (i = 0; i < this.inputs.length; i++) {
input = this.inputs[i];
coin = view.getOutput(input);
@ -1926,8 +1926,7 @@ TX.prototype.getChainValue = function getChainValue(view, height) {
if (coinHeight === -1)
continue;
if (coinHeight <= height)
value += coin.value;
value += coin.value;
}
return value;