@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
JavaScript
;
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;