bitcore/lib/transaction.js

78 lines
2.2 KiB
JavaScript
Raw Normal View History

2014-09-16 14:35:26 -07:00
var Txin = require('./txin');
var Txout = require('./txout');
var BufferWriter = require('./bufferwriter');
var BufferReader = require('./bufferreader');
var Varint = require('./varint');
2014-09-17 16:48:23 -07:00
var Transaction = function Transaction(version, txinsvi, txins, txoutsvi, txouts, nlocktime) {
2014-09-16 14:35:26 -07:00
if (!(this instanceof Transaction))
2014-09-17 16:48:23 -07:00
return new Transaction(version, txinsvi, txins, txoutsvi, txouts, nlocktime);
2014-09-16 14:35:26 -07:00
if (typeof version === 'number') {
this.set({
version: version,
2014-09-17 16:48:23 -07:00
txinsvi: txinsvi,
2014-09-16 14:35:26 -07:00
txins: txins,
2014-09-17 16:48:23 -07:00
txoutsvi: txoutsvi,
2014-09-16 14:35:26 -07:00
txouts: txouts,
nlocktime: nlocktime
});
} else if (version) {
var obj = version;
this.set(obj);
}
};
Transaction.prototype.set = function(obj) {
this.version = typeof obj.version !== 'undefined' ? obj.version : this.version;
2014-09-17 16:48:23 -07:00
this.txinsvi = obj.txinsvi || this.txinsvi;
2014-09-16 14:35:26 -07:00
this.txins = obj.txins || this.txins;
2014-09-17 16:48:23 -07:00
this.txoutsvi = obj.txoutsvi || this.txoutsvi;
2014-09-16 14:35:26 -07:00
this.txouts = obj.txouts || this.txouts;
this.nlocktime = typeof obj.nlocktime !== 'undefined' ? obj.nlocktime : this.nlocktime;
return this;
};
Transaction.prototype.fromBuffer = function(buf) {
return this.fromBufferReader(BufferReader(buf));
};
Transaction.prototype.fromBufferReader = function(br) {
this.version = br.readUInt32LE();
2014-09-17 16:48:23 -07:00
this.txinsvi = Varint(br.readVarintBuf());
var txinsnum = this.txinsvi.toNumber();
2014-09-16 14:35:26 -07:00
this.txins = [];
for (var i = 0; i < txinsnum; i++) {
this.txins.push(Txin().fromBufferReader(br));
}
2014-09-17 16:48:23 -07:00
this.txoutsvi = Varint(br.readVarintBuf());
var txoutsnum = this.txoutsvi.toNumber();
2014-09-16 14:35:26 -07:00
this.txouts = [];
for (var i = 0; i < txoutsnum; i++) {
this.txouts.push(Txout().fromBufferReader(br));
}
this.nlocktime = br.readUInt32LE();
return this;
};
Transaction.prototype.toBuffer = function() {
return this.toBufferWriter().concat();
};
Transaction.prototype.toBufferWriter = function(bw) {
if (!bw)
bw = new BufferWriter();
bw.writeUInt32LE(this.version);
2014-09-17 16:48:23 -07:00
bw.write(this.txinsvi.buf);
2014-09-16 14:35:26 -07:00
for (var i = 0; i < this.txins.length; i++) {
this.txins[i].toBufferWriter(bw);
}
2014-09-17 16:48:23 -07:00
bw.write(this.txoutsvi.buf)
2014-09-16 14:35:26 -07:00
for (var i = 0; i < this.txouts.length; i++) {
this.txouts[i].toBufferWriter(bw);
}
bw.writeUInt32LE(this.nlocktime);
return bw;
};
module.exports = Transaction;