From 6af6309b8247989c31c75a8c98de35694a01dc97 Mon Sep 17 00:00:00 2001 From: AlexanderBuzz Date: Tue, 31 Jan 2023 20:41:25 +0100 Subject: [PATCH] - Added Hash128 edge case --- content/_code-samples/tx-serialization/js/index.js | 7 +++---- .../tx-serialization/js/tx-serializer.js | 14 +++++++++++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/content/_code-samples/tx-serialization/js/index.js b/content/_code-samples/tx-serialization/js/index.js index bdf3d656b7..67fef50a15 100644 --- a/content/_code-samples/tx-serialization/js/index.js +++ b/content/_code-samples/tx-serialization/js/index.js @@ -3,8 +3,7 @@ // Organize imports const fs = require("fs") const parseArgs = require('minimist') -const TxSerializer = require('./tx-serializer') // Main serialization logic can be found in this file - +const TxSerializer = require('./tx-serializer') function main(rawJson, verbose) { const json = JSON.parse(rawJson) @@ -37,7 +36,7 @@ const args = parseArgs(process.argv.slice(2), { let rawJson if (args.json) { rawJson = args.json - main(rawJson) + main(rawJson, args.verbose) } else if (args.stdin) { const stdin = process.openStdin(); @@ -48,7 +47,7 @@ if (args.json) { }); stdin.on('end', function() { - main(data) + main(data, args.verbose) }); } else { rawJson = fs.readFileSync(args.filename, 'utf8') diff --git a/content/_code-samples/tx-serialization/js/tx-serializer.js b/content/_code-samples/tx-serialization/js/tx-serializer.js index 8b2672fdc8..5cba755d63 100644 --- a/content/_code-samples/tx-serialization/js/tx-serializer.js +++ b/content/_code-samples/tx-serialization/js/tx-serializer.js @@ -373,6 +373,11 @@ class TxSerializer { * @returns {string} */ hash128ToBytes(contents) { + if (/^0+$/.exec(contents)) { + // Edge case, an all-zero bytes input returns an empty string + return "" + } + const buffer = this.hashToBytes(contents) if(buffer.length !== 16) { // 16 bytes = 128 bits @@ -585,11 +590,11 @@ class TxSerializer { this._logger("Serializing field " + fieldName + " of type " + fieldType) const idPrefix = this.fieldId(fieldName) - this._logger("ID Prefix is: " + idPrefix.toUpperCase()) // Special case: convert from string to UInt16 if (fieldName === "TransactionType") { const fieldBytes = this.txTypeToBytes(fieldValue) + this._logger("ID Prefix is: " + idPrefix.toUpperCase()) this._logger(fieldName + ' : ' + fieldBytes.toUpperCase()) return idPrefix + fieldBytes @@ -612,6 +617,13 @@ class TxSerializer { const fieldBytes = dispatch[fieldType](fieldValue) + if (fieldBytes.length === 0) { + this._logger('Unset field: ' + fieldName) + + return '' + } + + this._logger("ID Prefix is: " + idPrefix.toUpperCase()) this._logger(fieldName + ': ' + fieldBytes.toUpperCase()) return idPrefix.toString("hex") + fieldBytes