bitcore/lib/txin.js

84 lines
2.3 KiB
JavaScript
Raw Normal View History

2014-11-20 07:56:35 -08:00
'use strict';
2014-11-21 07:54:56 -08:00
var BufferReader = require('./encoding/bufferreader');
var BufferWriter = require('./encoding/bufferwriter');
var Varint = require('./encoding/varint');
2014-09-15 17:08:09 -07:00
var Script = require('./script');
2014-09-17 16:48:23 -07:00
var Txin = function Txin(txidbuf, txoutnum, scriptvi, script, seqnum) {
2014-09-15 17:08:09 -07:00
if (!(this instanceof Txin))
2014-09-17 16:48:23 -07:00
return new Txin(txidbuf, txoutnum, scriptvi, script, seqnum);
2014-09-15 17:08:09 -07:00
if (Buffer.isBuffer(txidbuf)) {
if (txidbuf.length !== 32)
throw new Error('txidbuf must be 32 bytes');
2014-09-15 17:08:09 -07:00
this.txidbuf = txidbuf;
this.txoutnum = txoutnum;
2014-09-17 16:48:23 -07:00
this.scriptvi = scriptvi;
2014-09-15 17:08:09 -07:00
this.script = script;
this.seqnum = seqnum;
} else if (txidbuf) {
var obj = txidbuf;
this.set(obj);
}
};
Txin.prototype.set = function(obj) {
this.txidbuf = obj.txidbuf || this.txidbuf;
this.txoutnum = typeof obj.txoutnum !== 'undefined' ? obj.txoutnum : this.txoutnum;
2014-09-17 16:48:23 -07:00
this.scriptvi = typeof obj.scriptvi !== 'undefined' ? obj.scriptvi : this.scriptvi;
2014-09-15 17:08:09 -07:00
this.script = obj.script || this.script;
this.seqnum = typeof obj.seqnum !== 'undefined' ? obj.seqnum : this.seqnum;
return this;
};
Txin.prototype.fromJSON = function(json) {
this.set({
txidbuf: new Buffer(json.txidbuf, 'hex'),
txoutnum: json.txoutnum,
scriptvi: Varint().fromJSON(json.scriptvi),
script: Script().fromJSON(json.script),
seqnum: json.seqnum
});
return this;
};
Txin.prototype.toJSON = function() {
return {
txidbuf: this.txidbuf.toString('hex'),
txoutnum: this.txoutnum,
scriptvi: this.scriptvi.toJSON(),
script: this.script.toJSON(),
seqnum: this.seqnum
};
};
2014-09-15 17:08:09 -07:00
Txin.prototype.fromBuffer = function(buf) {
return this.fromBufferReader(BufferReader(buf));
};
Txin.prototype.fromBufferReader = function(br) {
2014-09-17 15:49:45 -07:00
this.txidbuf = br.read(32);
2014-09-15 17:08:09 -07:00
this.txoutnum = br.readUInt32LE();
2014-09-17 16:48:23 -07:00
this.scriptvi = Varint(br.readVarintBuf());
this.script = Script().fromBuffer(br.read(this.scriptvi.toNumber()));
2014-09-15 17:08:09 -07:00
this.seqnum = br.readUInt32LE();
return this;
};
Txin.prototype.toBuffer = function() {
return this.toBufferWriter().concat();
};
Txin.prototype.toBufferWriter = function(bw) {
if (!bw)
bw = new BufferWriter();
bw.write(this.txidbuf);
bw.writeUInt32LE(this.txoutnum);
2014-09-17 16:48:23 -07:00
bw.write(this.scriptvi.buf);
2014-09-15 17:08:09 -07:00
bw.write(this.script.toBuffer());
bw.writeUInt32LE(this.seqnum);
return bw;
};
module.exports = Txin;