initialize transaction

In order to add convenience methods to a transaction, such as pushing new
inputs and outputs, we need to first have the notion of an initialized
transaction, which is actually not blank. An initialized transaction just has
default values for everything, such as no inputs and no outputs, and default
version and nlocktime.
This commit is contained in:
Ryan X. Charles 2014-09-23 22:01:30 -07:00
parent 729049a7da
commit c07d509623
2 changed files with 39 additions and 0 deletions

View File

@ -9,6 +9,7 @@ var Transaction = function Transaction(version, txinsvi, txins, txoutsvi, txouts
if (!(this instanceof Transaction)) if (!(this instanceof Transaction))
return new Transaction(version, txinsvi, txins, txoutsvi, txouts, nlocktime); return new Transaction(version, txinsvi, txins, txoutsvi, txouts, nlocktime);
if (typeof version === 'number') { if (typeof version === 'number') {
this.initialize();
this.set({ this.set({
version: version, version: version,
txinsvi: txinsvi, txinsvi: txinsvi,
@ -18,14 +19,28 @@ var Transaction = function Transaction(version, txinsvi, txins, txoutsvi, txouts
nlocktime: nlocktime nlocktime: nlocktime
}); });
} else if (Buffer.isBuffer(version)) { } else if (Buffer.isBuffer(version)) {
//not necessary to initialize, since everything should be overwritten
var txbuf = version; var txbuf = version;
this.fromBuffer(txbuf); this.fromBuffer(txbuf);
} else if (version) { } else if (version) {
this.initialize();
var obj = version; var obj = version;
this.set(obj); this.set(obj);
} else {
this.initialize();
} }
}; };
Transaction.prototype.initialize = function() {
this.version = 1;
this.txinsvi = Varint(0);
this.txins = [];
this.txoutsvi = Varint(0);
this.txouts = [];
this.nlocktime = 0xffffffff;
return this;
};
Transaction.prototype.set = function(obj) { Transaction.prototype.set = function(obj) {
this.version = typeof obj.version !== 'undefined' ? obj.version : this.version; this.version = typeof obj.version !== 'undefined' ? obj.version : this.version;
this.txinsvi = obj.txinsvi || this.txinsvi; this.txinsvi = obj.txinsvi || this.txinsvi;

View File

@ -30,7 +30,31 @@ describe('Transaction', function() {
should.exist(tx); should.exist(tx);
tx = Transaction(); tx = Transaction();
should.exist(tx); should.exist(tx);
Transaction(txbuf).toBuffer().toString('hex').should.equal(txhex); Transaction(txbuf).toBuffer().toString('hex').should.equal(txhex);
//should set known defaults
tx.version.should.equal(1);
tx.txinsvi.toNumber().should.equal(0);
tx.txins.length.should.equal(0);
tx.txoutsvi.toNumber().should.equal(0);
tx.txouts.length.should.equal(0);
tx.nlocktime.should.equal(0xffffffff);
});
describe('#initialize', function() {
it('should set these known defaults', function() {
var tx = new Transaction();
tx.initialize();
tx.version.should.equal(1);
tx.txinsvi.toNumber().should.equal(0);
tx.txins.length.should.equal(0);
tx.txoutsvi.toNumber().should.equal(0);
tx.txouts.length.should.equal(0);
tx.nlocktime.should.equal(0xffffffff);
});
}); });
describe('#set', function() { describe('#set', function() {