bitcore/lib/block.js

68 lines
1.9 KiB
JavaScript

var Transaction = require('./transaction');
var BufferReader = require('./bufferreader');
var BufferWriter = require('./bufferwriter');
var Blockheader = require('./blockheader');
var Varint = require('./varint');
var Block = function Block(magicnum, blocksize, blockheader, txsvi, txs) {
if (!(this instanceof Block))
return new Block(magicnum, blocksize, blockheader, txsvi, txs);
if (typeof magicnum === 'number') {
this.set({
magicnum: magicnum,
blocksize: blocksize,
blockheader: blockheader,
txsvi: txsvi,
txs: txs
});
} else if (magicnum) {
var obj = magicnum;
}
};
Block.prototype.set = function(obj) {
this.magicnum = typeof obj.magicnum !== 'undefined' ? obj.magicnum : this.magicnum;
this.blocksize = typeof obj.blocksize !== 'undefined' ? obj.blocksize : this.blocksize;
this.blockheader = obj.blockheader || this.blockheader;
this.txsvi = obj.txsvi || this.txsvi;
this.txs = obj.txs || this.txs;
return this;
};
Block.prototype.fromBuffer = function(buf) {
return this.fromBufferReader(BufferReader(buf));
};
Block.prototype.fromBufferReader = function(br) {
this.magicnum = br.readUInt32LE();
this.blocksize = br.readUInt32LE();
this.blockheader = Blockheader().fromBufferReader(br);
this.txsvi = Varint(br.readVarintBuf());
var txslen = this.txsvi.toNumber();
this.txs = [];
for (var i = 0; i < txslen; i++) {
this.txs.push(Transaction().fromBufferReader(br));
}
return this;
};
Block.prototype.toBuffer = function() {
return this.toBufferWriter().concat();
};
Block.prototype.toBufferWriter = function(bw) {
if (!bw)
bw = new BufferWriter();
bw.writeUInt32LE(this.magicnum);
bw.writeUInt32LE(this.blocksize);
bw.write(this.blockheader.toBuffer());
bw.write(this.txsvi.buf);
var txslen = this.txsvi.toNumber();
for (var i = 0; i < txslen; i++) {
this.txs[i].toBufferWriter(bw);
}
return bw;
};
module.exports = Block;