UNPKG

bitcoin-p2p-messages

Version:
60 lines (48 loc) 1.71 kB
import * as utils from '../utils' export default class Headers { constructor(input) { if (typeof this.build === 'function' && Array.isArray(input)) { for (let i = 0; i < input.length; i++) { input[i] = this.build(input[i]); } } this.headers = input; } toObject() { return { count : this.headers.length , headers : this.headers }; } toBuffer() { if (!Array.isArray(this.headers)) { return new Buffer(0); } let buffers = []; let totalLength = 0; buffers.push(utils.writeVarint(this.headers.length)); // count totalLength += buffers[0].length; for (let i = 0; i < this.headers.length; i++) { if (typeof this.serialize === 'function' && !Buffer.isBuffer(this.headers[i])) { buffers.push(this.serialize(this.headers[i])); } buffers.push(utils.checkBufferInput(this.headers[i])); totalLength += buffers[buffers.length-1].length; } return Buffer.concat(buffers,totalLength); } static fromBuffer(buffer) { let count = utils.readVarint(buffer); let startHeaders = utils.varintSize(buffer); let headers = []; for (let i = 0; i < count; i++) { headers.push(buffer.slice(startHeaders,startHeaders+utils.BLOCK_HEADER_LENGTH)); startHeaders += utils.BLOCK_HEADER_LENGTH; } return new Headers(headers); } static fromObject(message) { message.headers = utils.checkArrayInput(message.headers); return new Headers(message.headers); } }