coin.fromTX.
This commit is contained in:
parent
c6e36353fa
commit
b9c7afa0ea
@ -838,7 +838,7 @@ ChainDB.prototype.connectBlock = function connectBlock(block, batch, callback) {
|
|||||||
if (output.script.isUnspendable())
|
if (output.script.isUnspendable())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
coin = bcoin.coin(tx, j);
|
coin = bcoin.coin.fromTX(tx, j);
|
||||||
|
|
||||||
if (self.options.indexAddress) {
|
if (self.options.indexAddress) {
|
||||||
address = output.getHash();
|
address = output.getHash();
|
||||||
@ -1021,7 +1021,7 @@ ChainDB.prototype.fillHistory = function fillHistory(tx, callback) {
|
|||||||
return next(err);
|
return next(err);
|
||||||
|
|
||||||
if (tx)
|
if (tx)
|
||||||
input.coin = bcoin.coin(tx, input.prevout.index);
|
input.coin = bcoin.coin.fromTX(tx, input.prevout.index);
|
||||||
|
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
@ -1287,7 +1287,7 @@ ChainDB.prototype.fillBlock = function fillBlock(block, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (j = 0; j < tx.outputs.length; j++)
|
for (j = 0; j < tx.outputs.length; j++)
|
||||||
coins[hash + '/' + j] = bcoin.coin(tx, j);
|
coins[hash + '/' + j] = bcoin.coin.fromTX(tx, j);
|
||||||
}
|
}
|
||||||
|
|
||||||
return callback(null, block);
|
return callback(null, block);
|
||||||
|
|||||||
@ -15,11 +15,7 @@ var assert = utils.assert;
|
|||||||
* @exports Coin
|
* @exports Coin
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends Output
|
* @extends Output
|
||||||
* @example
|
* @param {NakedCoin|Coin} options
|
||||||
* new Coin(tx, i);
|
|
||||||
* new Coin(options);
|
|
||||||
* @param {TX|NakedCoin|Coin} tx/options - TX or options object.
|
|
||||||
* @param {Number?} index - Output index.
|
|
||||||
* @property {Number} version - Transaction version.
|
* @property {Number} version - Transaction version.
|
||||||
* @property {Number} height - Transaction height (-1 if unconfirmed).
|
* @property {Number} height - Transaction height (-1 if unconfirmed).
|
||||||
* @property {Amount} value - Output value in satoshis.
|
* @property {Amount} value - Output value in satoshis.
|
||||||
@ -30,35 +26,22 @@ var assert = utils.assert;
|
|||||||
* @property {Number} index - Output index.
|
* @property {Number} index - Output index.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function Coin(tx, index) {
|
function Coin(options) {
|
||||||
var options;
|
if (options instanceof Coin)
|
||||||
|
return options;
|
||||||
if (tx instanceof Coin)
|
|
||||||
return tx;
|
|
||||||
|
|
||||||
if (!(this instanceof Coin))
|
if (!(this instanceof Coin))
|
||||||
return new Coin(tx, index);
|
return new Coin(options);
|
||||||
|
|
||||||
assert(tx, 'Coin data is required.');
|
assert(options, 'Coin data is required.');
|
||||||
|
|
||||||
if (tx instanceof bcoin.tx) {
|
this.version = options.version;
|
||||||
this.version = tx.version;
|
this.height = options.height;
|
||||||
this.height = tx.height;
|
this.value = options.value;
|
||||||
this.value = tx.outputs[index].value;
|
this.script = bcoin.script(options.script, false);
|
||||||
this.script = bcoin.script(tx.outputs[index].script, false);
|
this.coinbase = options.coinbase;
|
||||||
this.coinbase = tx.isCoinbase();
|
this.hash = options.hash;
|
||||||
this.hash = tx.hash('hex');
|
this.index = options.index;
|
||||||
this.index = index;
|
|
||||||
} else {
|
|
||||||
options = tx;
|
|
||||||
this.version = options.version;
|
|
||||||
this.height = options.height;
|
|
||||||
this.value = options.value;
|
|
||||||
this.script = bcoin.script(options.script, false);
|
|
||||||
this.coinbase = options.coinbase;
|
|
||||||
this.hash = options.hash;
|
|
||||||
this.index = options.index;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(typeof this.version === 'number');
|
assert(typeof this.version === 'number');
|
||||||
assert(utils.isNumber(this.height));
|
assert(utils.isNumber(this.height));
|
||||||
@ -267,6 +250,25 @@ Coin.fromExtended = function fromExtended(data, enc) {
|
|||||||
return new Coin(Coin.parseExtended(data, enc));
|
return new Coin(Coin.parseExtended(data, enc));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiate a coin from a TX
|
||||||
|
* @param {TX} tx
|
||||||
|
* @param {Number} index - Output index.
|
||||||
|
* @returns {Coin}
|
||||||
|
*/
|
||||||
|
|
||||||
|
Coin.fromTX = function fromTX(tx, index) {
|
||||||
|
return new Coin({
|
||||||
|
version: tx.version,
|
||||||
|
height: tx.height,
|
||||||
|
value: tx.outputs[index].value,
|
||||||
|
script: tx.outputs[index].script,
|
||||||
|
coinbase: tx.isCoinbase(),
|
||||||
|
hash: tx.hash('hex'),
|
||||||
|
index: index
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test an object to see if it is a Coin.
|
* Test an object to see if it is a Coin.
|
||||||
* @param {Object} obj
|
* @param {Object} obj
|
||||||
|
|||||||
@ -72,7 +72,7 @@ Coins.prototype.add = function add(tx, i) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.outputs[i] = new bcoin.coin(tx, i);
|
this.outputs[i] = new bcoin.coin.fromTX(tx, i);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -510,7 +510,7 @@ Mempool.prototype.fillHistory = function fillHistory(tx, callback) {
|
|||||||
return next(err);
|
return next(err);
|
||||||
|
|
||||||
if (tx)
|
if (tx)
|
||||||
input.coin = bcoin.coin(tx, input.prevout.index);
|
input.coin = bcoin.coin.fromTX(tx, input.prevout.index);
|
||||||
|
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
@ -1549,7 +1549,7 @@ Mempool.prototype._addUnchecked = function _addUnchecked(entry, callback) {
|
|||||||
if (output.script.isUnspendable())
|
if (output.script.isUnspendable())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
coin = bcoin.coin(tx, i).toRaw();
|
coin = bcoin.coin.fromTX(tx, i).toRaw();
|
||||||
|
|
||||||
batch.put('c/' + key, coin);
|
batch.put('c/' + key, coin);
|
||||||
|
|
||||||
|
|||||||
@ -121,7 +121,7 @@ MTX.prototype.clone = function clone() {
|
|||||||
* tx.addInput({ prevout: { hash: ... }, sequence: ... });
|
* tx.addInput({ prevout: { hash: ... }, sequence: ... });
|
||||||
* tx.addInput(prev, prevIndex);
|
* tx.addInput(prev, prevIndex);
|
||||||
* tx.addInput(coin);
|
* tx.addInput(coin);
|
||||||
* tx.addInput(bcoin.coin(prev, prevIndex));
|
* tx.addInput(bcoin.coin.fromTX(prev, prevIndex));
|
||||||
* @param {Object|TX|Coin} options - Options object, transaction, or coin.
|
* @param {Object|TX|Coin} options - Options object, transaction, or coin.
|
||||||
* @param {Number?} index - Input of output if `options` is a TX.
|
* @param {Number?} index - Input of output if `options` is a TX.
|
||||||
*/
|
*/
|
||||||
@ -130,7 +130,7 @@ MTX.prototype.addInput = function addInput(options, index) {
|
|||||||
var input;
|
var input;
|
||||||
|
|
||||||
if (options instanceof bcoin.tx)
|
if (options instanceof bcoin.tx)
|
||||||
options = bcoin.coin(options, index);
|
options = bcoin.coin.fromTX(options, index);
|
||||||
|
|
||||||
if (options instanceof bcoin.coin) {
|
if (options instanceof bcoin.coin) {
|
||||||
assert(typeof options.hash === 'string');
|
assert(typeof options.hash === 'string');
|
||||||
|
|||||||
@ -923,7 +923,7 @@ TX.prototype.hasCoins = function hasCoins() {
|
|||||||
|
|
||||||
TX.prototype.fillCoins = function fillCoins(coins) {
|
TX.prototype.fillCoins = function fillCoins(coins) {
|
||||||
var total = 0;
|
var total = 0;
|
||||||
var inputs, txs, key, i, input;
|
var inputs, txs, key, i, input, prevout;
|
||||||
|
|
||||||
if ((coins instanceof bcoin.coin) || (coins instanceof bcoin.tx))
|
if ((coins instanceof bcoin.coin) || (coins instanceof bcoin.tx))
|
||||||
coins = [coins];
|
coins = [coins];
|
||||||
@ -945,12 +945,13 @@ TX.prototype.fillCoins = function fillCoins(coins) {
|
|||||||
|
|
||||||
for (i = 0; i < this.inputs.length; i++) {
|
for (i = 0; i < this.inputs.length; i++) {
|
||||||
input = this.inputs[i];
|
input = this.inputs[i];
|
||||||
|
prevout = input.prevout;
|
||||||
|
|
||||||
if (!input.coin) {
|
if (!input.coin) {
|
||||||
if (coins[input.prevout.hash]) {
|
if (coins[prevout.hash]) {
|
||||||
input.coin = bcoin.coin(coins[input.prevout.hash], input.prevout.index);
|
input.coin = bcoin.coin.fromTX(coins[prevout.hash], prevout.index);
|
||||||
} else {
|
} else {
|
||||||
key = input.prevout.hash + '/' + input.prevout.index;
|
key = prevout.hash + '/' + prevout.index;
|
||||||
if (coins[key])
|
if (coins[key])
|
||||||
input.coin = coins[key];
|
input.coin = coins[key];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -394,7 +394,7 @@ TXDB.prototype._add = function add(tx, map, callback, force) {
|
|||||||
if (!prev)
|
if (!prev)
|
||||||
return callback(new Error('Could not find double-spent coin.'));
|
return callback(new Error('Could not find double-spent coin.'));
|
||||||
|
|
||||||
input.coin = bcoin.coin(prev, input.prevout.index);
|
input.coin = bcoin.coin.fromTX(prev, input.prevout.index);
|
||||||
|
|
||||||
// Skip invalid transactions
|
// Skip invalid transactions
|
||||||
if (self.options.verify) {
|
if (self.options.verify) {
|
||||||
@ -448,7 +448,7 @@ TXDB.prototype._add = function add(tx, map, callback, force) {
|
|||||||
if (output.script.isUnspendable())
|
if (output.script.isUnspendable())
|
||||||
return next();
|
return next();
|
||||||
|
|
||||||
coin = bcoin.coin(tx, i);
|
coin = bcoin.coin.fromTX(tx, i);
|
||||||
|
|
||||||
self._getOrphans(key, function(err, orphans) {
|
self._getOrphans(key, function(err, orphans) {
|
||||||
var some = false;
|
var some = false;
|
||||||
@ -1503,7 +1503,7 @@ TXDB.prototype.fillHistory = function fillHistory(tx, callback) {
|
|||||||
return next(err);
|
return next(err);
|
||||||
|
|
||||||
if (tx)
|
if (tx)
|
||||||
input.coin = bcoin.coin(tx, input.prevout.index);
|
input.coin = bcoin.coin.fromTX(tx, input.prevout.index);
|
||||||
|
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
|
|||||||
@ -320,7 +320,7 @@ describe('Script', function() {
|
|||||||
hash: coin.hash('hex'),
|
hash: coin.hash('hex'),
|
||||||
index: 0
|
index: 0
|
||||||
},
|
},
|
||||||
coin: bcoin.coin(coin, 0),
|
coin: bcoin.coin.fromTX(coin, 0),
|
||||||
script: input,
|
script: input,
|
||||||
witness: witness,
|
witness: witness,
|
||||||
sequence: 0xffffffff
|
sequence: 0xffffffff
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user