refactor mtx.

This commit is contained in:
Christopher Jeffrey 2016-07-01 01:25:11 -07:00
parent 91de71851d
commit 8069360c7b
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -56,55 +56,68 @@ var TX = bcoin.tx;
*/ */
function MTX(options) { function MTX(options) {
var i;
if (!(this instanceof MTX)) if (!(this instanceof MTX))
return new MTX(options); return new MTX(options);
if (!options) TX.call(this);
options = {};
this.version = options.version || 1;
this.flag = options.flag || 1;
this.inputs = [];
this.outputs = [];
this.locktime = 0;
this.ts = 0;
this.block = null;
this.index = -1;
this.ps = options.ps != null ? options.ps : utils.now();
this.height = -1;
this.mutable = true; this.mutable = true;
this.changeIndex = -1;
this._hash = null; if (options)
this._whash = null; this.fromOptions(options);
}
this._raw = null; utils.inherits(MTX, TX);
this._size = -1;
this._witnessSize = -1;
this._lastWitnessSize = 0;
this._outputValue = -1; /**
this._inputValue = -1; * Inject properties from options object.
this._hashPrevouts = null; * @private
this._hashSequence = null; * @param {Object} options
this._hashOutputs = null; */
this.changeIndex = options.changeIndex != null ? options.changeIndex : -1; MTX.prototype.fromOptions = function fromOptions(options) {
var i;
if (options.version != null) {
assert(utils.isNumber(options.version));
this.version = options.version;
}
if (options.flag != null) {
assert(utils.isNumber(options.flag));
this.flag = options.flag;
}
if (options.inputs) { if (options.inputs) {
assert(Array.isArray(options.inputs));
for (i = 0; i < options.inputs.length; i++) for (i = 0; i < options.inputs.length; i++)
this.addInput(options.inputs[i]); this.addInput(options.inputs[i]);
} }
if (options.outputs) { if (options.outputs) {
assert(Array.isArray(options.outputs));
for (i = 0; i < options.outputs.length; i++) for (i = 0; i < options.outputs.length; i++)
this.addOutput(options.outputs[i]); this.addOutput(options.outputs[i]);
} }
}
utils.inherits(MTX, TX); if (options.locktime != null) {
assert(utils.isNumber(options.locktime));
this.locktime = options.locktime;
}
if (options.ps != null) {
assert(utils.isNumber(options.ps));
this.ps = options.ps;
}
if (options.changeIndex != null) {
assert(utils.isNumber(options.changeIndex));
this.changeIndex = options.changeIndex;
}
return this;
};
/** /**
* Instantiate MTX from options. * Instantiate MTX from options.
@ -113,7 +126,7 @@ utils.inherits(MTX, TX);
*/ */
MTX.fromOptions = function fromOptions(options) { MTX.fromOptions = function fromOptions(options) {
return new MTX(options); return new MTX().fromOptions(options);
}; };
/** /**
@ -122,14 +135,7 @@ MTX.fromOptions = function fromOptions(options) {
*/ */
MTX.prototype.clone = function clone() { MTX.prototype.clone = function clone() {
var tx = new MTX(this); return new MTX(this);
tx.locktime = this.locktime;
tx.ts = this.ts;
tx.block = this.block;
tx.index = this.index;
tx.ps = this.ps;
tx.height = this.height;
return tx;
}; };
/** /**
@ -1290,6 +1296,20 @@ MTX.prototype.setLocktime = function setLocktime(locktime) {
this.locktime = locktime; this.locktime = locktime;
}; };
/**
* Mark inputs and outputs as mutable.
* @private
*/
MTX.prototype._mutable = function _mutable() {
var i;
for (i = 0; i < this.inputs.length; i++)
this.inputs[i].mutable = true;
for (i = 0; i < this.outputs.length; i++)
this.outputs[i].mutable = true;
return this;
};
/** /**
* @see TX.fromJSON * @see TX.fromJSON
*/ */
@ -1308,20 +1328,6 @@ MTX.fromRaw = function fromRaw(data, enc) {
return new MTX().fromRaw(data)._mutable(); return new MTX().fromRaw(data)._mutable();
}; };
/**
* Mark inputs and outputs as mutable.
* @private
*/
MTX._mutable = function _mutable() {
var i;
for (i = 0; i < this.inputs.length; i++)
this.inputs[i].mutable = true;
for (i = 0; i < this.outputs.length; i++)
this.outputs[i].mutable = true;
return this;
};
/** /**
* @see TX.fromExtended * @see TX.fromExtended
*/ */