diff --git a/lib/block/blockheader.js b/lib/block/blockheader.js index 64df63090..7390a2a28 100644 --- a/lib/block/blockheader.js +++ b/lib/block/blockheader.js @@ -12,7 +12,7 @@ const GENESIS_BITS = 0x1d00ffff; * Instantiate a BlockHeader from a Buffer, JSON object, or Object with * the properties of the BlockHeader * - * @param {BlockHeader.fromObjectParams|Buffer} arg - A Buffer, JSON string, or Object + * @param {BlockHeader.fromObjectParams|Buffer|Uint8Array} arg - A Buffer, Uint8Array, JSON string, or Object * @returns {BlockHeader} - An instance of block header * @constructor */ @@ -40,7 +40,7 @@ const BlockHeader = function BlockHeader(arg) { }; /** - * @param {BlockHeader.fromObjectParams|Buffer} arg - A Buffer, JSON string or Object + * @param {BlockHeader.fromObjectParams|Buffer|Uint8Array} arg - A Buffer, Uint8Array, JSON string or Object * @returns {Object} - An object representing block header data * @throws {TypeError} - If the argument was not recognized * @private diff --git a/lib/encoding/bufferreader.js b/lib/encoding/bufferreader.js index 2ff70db80..cb5e0c683 100644 --- a/lib/encoding/bufferreader.js +++ b/lib/encoding/bufferreader.js @@ -21,9 +21,9 @@ var BufferReader = function BufferReader(buf) { if (_.isUndefined(buf)) { return; } - if (Buffer.isBuffer(buf)) { + if (buf instanceof Uint8Array) { this.set({ - buf: buf, + buf: Buffer.isBuffer(buf) ? buf : Buffer.from(buf), }); } else if (_.isString(buf)) { this.set({ diff --git a/test/block/blockheader.js b/test/block/blockheader.js index a3020de05..da877e4d1 100644 --- a/test/block/blockheader.js +++ b/test/block/blockheader.js @@ -161,6 +161,24 @@ describe('BlockHeader', function () { .toString('hex') .should.equal(bhhex); }); + + it('should accept Uint8Array', function () { + var bytes = new Uint8Array(bhbuf); + var fromBuffer = BlockHeader.fromBuffer(bhbuf); + var fromBytes = new BlockHeader(bytes); + + fromBytes.version.should.equal(fromBuffer.version); + fromBytes.prevHash.toString('hex').should.equal( + fromBuffer.prevHash.toString('hex') + ); + fromBytes.merkleRoot.toString('hex').should.equal( + fromBuffer.merkleRoot.toString('hex') + ); + fromBytes.time.should.equal(fromBuffer.time); + fromBytes.bits.should.equal(fromBuffer.bits); + fromBytes.nonce.should.equal(fromBuffer.nonce); + fromBytes.toBuffer().toString('hex').should.equal(bhhex); + }); }); describe('#fromBufferReader', function () { diff --git a/test/encoding/bufferreader.js b/test/encoding/bufferreader.js index ca3d77813..dd3086175 100644 --- a/test/encoding/bufferreader.js +++ b/test/encoding/bufferreader.js @@ -23,6 +23,18 @@ describe('BufferReader', function () { should.exist(br); Buffer.isBuffer(br.buf).should.equal(true); }); + + it('should accept Uint8Array', function () { + var bytes = new Uint8Array([1, 2, 0x34, 0x12, 0xdd, 0xcc, 0xbb, 0xaa]); + var br = new BufferReader(bytes); + should.exist(br); + Buffer.isBuffer(br.buf).should.equal(true); + br.readUInt8().should.equal(1); + br.readUInt8().should.equal(2); + br.readUInt16LE().should.equal(0x1234); + br.readUInt32LE().should.equal(0xaabbccdd); + }); + it('should fail for invalid object', function () { var fail = function () { return new BufferReader(5);