From 37803d178d6b9f53b26b9b4c386a365df15259df Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 13 Jan 2016 03:54:32 -0800 Subject: [PATCH] use write64 for output values. --- lib/bcoin/protocol/framer.js | 9 +-------- lib/bcoin/utils.js | 39 +++++++++++++++++++----------------- 2 files changed, 22 insertions(+), 26 deletions(-) diff --git a/lib/bcoin/protocol/framer.js b/lib/bcoin/protocol/framer.js index 61952ea9..baa4903a 100644 --- a/lib/bcoin/protocol/framer.js +++ b/lib/bcoin/protocol/framer.js @@ -300,14 +300,7 @@ Framer.tx = function tx(tx) { for (i = 0; i < tx.outputs.length; i++) { output = tx.outputs[i]; - // Put LE value - value = output.value.toArray().slice().reverse(); - assert(value.length <= 8); - - off += utils.copy(value, p, off, true); - - for (j = value.length; j < 8; j++, off++) - p[off] = 0; + off += utils.write64(p, output.value, off); s = bcoin.script.encode(output.script); off += utils.writeIntv(p, s.length, off); diff --git a/lib/bcoin/utils.js b/lib/bcoin/utils.js index ccc4e5d0..9e57208c 100644 --- a/lib/bcoin/utils.js +++ b/lib/bcoin/utils.js @@ -1025,14 +1025,14 @@ utils.writeU64 = function writeU64(dst, num, off) { off = off >>> 0; - num = num.maskn(64).toArray(); - - while (num.length < 8) - num.unshift(0); + num = num.toArray().slice(-8); for (i = num.length - 1; i >= 0; i--) dst[off++] = num[i] & 0xff; + for (i = 8 - num.length; i > 0; i--) + dst[off++] = 0; + return 8; }; @@ -1041,15 +1041,15 @@ utils.writeU64BE = function writeU64BE(dst, num, off) { if (!(num instanceof bn)) { num = +num; - bn = new bn(num); + num = new bn(num); } off = off >>> 0; - num = num.maskn(64).toArray(); + num = num.toArray().slice(-8); - while (num.length < 8) - num.unshift(0); + for (i = 8 - num.length; i > 0; i--) + dst[off++] = 0; for (i = 0; i < num.length; i++) dst[off++] = num[i] & 0xff; @@ -1116,10 +1116,7 @@ utils.write64 = function write64(dst, num, off) { off = off >>> 0; - bytes = num.maskn(64).toArray(); - - while (bytes.length < 8) - bytes.unshift(0); + bytes = num.toArray().slice(-8); if (num.isNeg()) bytes[0] |= 0x80; @@ -1127,6 +1124,12 @@ utils.write64 = function write64(dst, num, off) { for (i = bytes.length - 1; i >= 0; i--) dst[off++] = bytes[i] & 0xff; + for (i = 8 - bytes.length; i > 0; i--) + dst[off++] = 0; + + if (num.isNeg()) + dst[off - 1] |= 0x80; + return 8; }; @@ -1146,17 +1149,17 @@ utils.write64BE = function write64BE(dst, num, off) { off = off >>> 0; - bytes = num.maskn(64).toArray(); + bytes = num.toArray().slice(-8); - while (bytes.length < 8) - bytes.unshift(0); - - if (num.isNeg()) - bytes[0] |= 0x80; + for (i = 8 - bytes.length; i > 0; i--) + dst[off++] = 0; for (i = 0; i < bytes.length; i++) dst[off++] = bytes[i] & 0xff; + if (num.isNeg()) + dst[off - 8] |= 0x80; + return 8; };