From ab1fc4c9a4a8d8620a8fe66f303fab6e0eddb10b Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Wed, 19 Apr 2017 14:41:59 +1000 Subject: [PATCH] reduce bufferutils usage --- src/block.js | 7 +++---- src/index.js | 2 +- src/transaction.js | 25 ++++++++++++++++--------- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/block.js b/src/block.js index b004f4e..10da4b0 100644 --- a/src/block.js +++ b/src/block.js @@ -1,5 +1,4 @@ var bcrypto = require('./crypto') -var bufferutils = require('./bufferutils') var fastMerkleRoot = require('merkle-lib/fastRoot') var typeforce = require('typeforce') var types = require('./types') @@ -48,9 +47,9 @@ Block.fromBuffer = function (buffer) { if (buffer.length === 80) return block function readVarInt () { - var vi = bufferutils.readVarInt(buffer, offset) - offset += vi.size - return vi.number + var vi = varuint.decode(buffer, offset) + offset += varuint.decode.bytes + return vi } function readTransaction () { diff --git a/src/index.js b/src/index.js index 8ca21f1..b123a63 100644 --- a/src/index.js +++ b/src/index.js @@ -7,7 +7,7 @@ module.exports = { TransactionBuilder: require('./transaction_builder'), address: require('./address'), - bufferutils: require('./bufferutils'), + bufferutils: require('./bufferutils'), // TODO: remove in 4.0.0 crypto: require('./crypto'), networks: require('./networks'), opcodes: require('bitcoin-ops'), diff --git a/src/transaction.js b/src/transaction.js index 1750036..6dbeeb1 100644 --- a/src/transaction.js +++ b/src/transaction.js @@ -4,17 +4,18 @@ var bufferutils = require('./bufferutils') var opcodes = require('bitcoin-ops') var typeforce = require('typeforce') var types = require('./types') +var varuint = require('varuint-bitcoin') function varSliceSize (someScript) { var length = someScript.length - return bufferutils.varIntSize(length) + length + return varuint.encodingLength(length) + length } function vectorSize (someVector) { var length = someVector.length - return bufferutils.varIntSize(length) + someVector.reduce(function (sum, witness) { + return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) { return sum + varSliceSize(witness) }, 0) } @@ -70,9 +71,9 @@ Transaction.fromBuffer = function (buffer, __noStrict) { } function readVarInt () { - var vi = bufferutils.readVarInt(buffer, offset) - offset += vi.size - return vi.number + var vi = varuint.decode(buffer, offset) + offset += varuint.decode.bytes + return vi } function readVarSlice () { @@ -198,8 +199,8 @@ Transaction.prototype.__byteLength = function (__allowWitness) { return ( (hasWitnesses ? 10 : 8) + - bufferutils.varIntSize(this.ins.length) + - bufferutils.varIntSize(this.outs.length) + + varuint.encodingLength(this.ins.length) + + varuint.encodingLength(this.outs.length) + this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) + this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) + (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0) @@ -311,7 +312,10 @@ Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value function writeSlice (slice) { toffset += slice.copy(tbuffer, toffset) } function writeUInt32 (i) { toffset = tbuffer.writeUInt32LE(i, toffset) } function writeUInt64 (i) { toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset) } - function writeVarInt (i) { toffset += bufferutils.writeVarInt(tbuffer, i, toffset) } + function writeVarInt (i) { + varuint.encode(i, tbuffer, toffset) + toffset += varuint.encode.bytes + } function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) } var hashOutputs = ZERO @@ -409,7 +413,10 @@ Transaction.prototype.__toBuffer = function (buffer, initialOffset, __allowWitne function writeUInt32 (i) { offset = buffer.writeUInt32LE(i, offset) } function writeInt32 (i) { offset = buffer.writeInt32LE(i, offset) } function writeUInt64 (i) { offset = bufferutils.writeUInt64LE(buffer, i, offset) } - function writeVarInt (i) { offset += bufferutils.writeVarInt(buffer, i, offset) } + function writeVarInt (i) { + varuint.encode(i, buffer, offset) + offset += varuint.encode.bytes + } function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) } function writeVector (vector) { writeVarInt(vector.length); vector.forEach(writeVarSlice) }