From f8260541ef8a41b481bab4c08673565e81852c7f Mon Sep 17 00:00:00 2001 From: sairajzero Date: Wed, 19 Apr 2023 00:42:47 +0530 Subject: [PATCH] Fix: Cache value encoding - Using BigInt (uInt64) for cache value (balance, sent, received) as they are large for uInt32 - Reflect the changes for BigInt (uInt64) in decode cache value - Removed default values in cache encoding, as if a value is invalid then it must throw error and not write db --- lib/services/address/encoding.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/lib/services/address/encoding.js b/lib/services/address/encoding.js index e9ca5ba5..d7bf690e 100644 --- a/lib/services/address/encoding.js +++ b/lib/services/address/encoding.js @@ -127,35 +127,35 @@ Encoding.prototype.encodeAddressCacheValue = function(lastTx, balance, received, var buffer = []; - var balanceBuffer = new Buffer(4); - balanceBuffer.writeUInt32BE(balance || 0); + var balanceBuffer = new Buffer(8); + balanceBuffer.writeBigUInt64BE(BigInt(balance)); buffer.push(balanceBuffer); - var receivedBuffer = new Buffer(4); - receivedBuffer.writeUInt32BE(received || 0); + var receivedBuffer = new Buffer(8); + receivedBuffer.writeBigUInt64BE(BigInt(received)); buffer.push(receivedBuffer); - var sentBuffer = new Buffer(4); - sentBuffer.writeUInt32BE(sent || 0); + var sentBuffer = new Buffer(8); + sentBuffer.writeBigUInt64BE(BigInt(sent)); buffer.push(sentBuffer); var txApperancesBuffer = new Buffer(4); - txApperancesBuffer.writeUInt32BE(txApperances || 0); + txApperancesBuffer.writeUInt32BE(txApperances); buffer.push(txApperancesBuffer); - var txidBuffer = new Buffer(lastTx || Array(65).join('0'), 'hex'); + var txidBuffer = new Buffer(lastTx); buffer.push(txidBuffer); - return Buffer.concat(buffers); + return Buffer.concat(buffer); } Encoding.prototype.decodeAddressCacheValue = function(buffer) { - - var balance = buffer.readUInt32BE(0); - var received = buffer.readUInt32BE(4); - var sent = buffer.readUInt32BE(8); - var txApperances = buffer.readUInt32BE(12); - var lastTx = buffer.slice(24).toString('hex'); + + var balance = parseInt(buffer.readBigUInt64BE(0)); + var received = parseInt(buffer.readBigUInt64BE(8)); + var sent = parseInt(buffer.readBigUInt64BE(16)); + var txApperances = buffer.readUInt32BE(24); + var lastTx = buffer.slice(28).toString('hex'); return { lastTx, balance, received, sent, txApperances }; }