@radixdlt/tx-parser
Version:
Parsing of Radix Engine transactions and instructions
44 lines • 1.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Transaction = void 0;
const neverthrow_1 = require("neverthrow");
const instruction_1 = require("./instruction");
const crypto_1 = require("@radixdlt/crypto");
const util_1 = require("@radixdlt/util");
const fromBuffer = (blob) => {
const instructions = [];
const bufferReader = util_1.BufferReader.create(blob);
while (!bufferReader.finishedParsing()) {
const instructionRes = instruction_1.Instruction.parseFromBufferReader(bufferReader);
if (instructionRes.isErr()) {
return (0, neverthrow_1.err)(instructionRes.error);
}
const instruction = instructionRes.value;
instructions.push(instruction);
}
const reassembleBlob = () => instructions
.map(i => i.toBuffer())
.reduce((a, i) => Buffer.concat([a, i]), Buffer.alloc(0));
const reassembledTxBlob = reassembleBlob();
if (reassembledTxBlob.toString('hex') !== blob.toString('hex')) {
throw new Error(`Incorrect implementation, reasambled blob NEQ original blob.`);
}
const txID = () => (0, crypto_1.sha256Twice)(reassembledTxBlob).toString('hex');
const toString = () => [
'Instructions:',
instructions
.map(i => `|- ${i.toString()}`)
// .map(s => s.trimStart())
.join('\n'),
].join('\n');
return (0, neverthrow_1.ok)({
instructions,
txID,
toBuffer: () => reassembledTxBlob,
toString,
});
};
exports.Transaction = {
fromBuffer,
};
//# sourceMappingURL=transaction.js.map