UNPKG

@morpho-labs/gnosis-tx-builder

Version:

Transform an array of transactions into a json for Gnosis Tx-Builder UX

35 lines (34 loc) 1.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addChecksum = exports.calculateChecksum = exports.serializeJSONObject = exports.stringifyReplacer = void 0; const ethers_1 = require("ethers"); const stringifyReplacer = (_, value) => (value === undefined ? null : value); exports.stringifyReplacer = stringifyReplacer; const serializeJSONObject = (json) => { if (Array.isArray(json)) { return `[${json.map((el) => (0, exports.serializeJSONObject)(el)).join(",")}]`; } if (typeof json === "object" && json !== null) { let acc = ""; const keys = Object.keys(json).sort(); acc += `{${JSON.stringify(keys, exports.stringifyReplacer)}`; for (let i = 0; i < keys.length; i++) { acc += `${(0, exports.serializeJSONObject)(json[keys[i]])},`; } return `${acc}}`; } return `${JSON.stringify(json, exports.stringifyReplacer)}`; }; exports.serializeJSONObject = serializeJSONObject; const calculateChecksum = (batchFile) => { const batchFileMeta = Object.assign({}, batchFile.meta); delete batchFileMeta.checksum; const serialized = (0, exports.serializeJSONObject)(Object.assign(Object.assign({}, batchFile), { meta: Object.assign(Object.assign({}, batchFileMeta), { name: null }) })); const sha = (0, ethers_1.solidityPackedKeccak256)(["string"], [serialized]); return sha || undefined; }; exports.calculateChecksum = calculateChecksum; const addChecksum = (batchFile) => { return Object.assign(Object.assign({}, batchFile), { meta: Object.assign(Object.assign({}, batchFile.meta), { checksum: (0, exports.calculateChecksum)(batchFile) }) }); }; exports.addChecksum = addChecksum;