UNPKG

@ethereum-sourcify/contract-call-decoder

Version:

Library to decode Ethereum smart contract calls into human-readable descriptions using ABI and NatSpec

65 lines 4.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.extractCustomFields = exports.getValueFromDecodedFunctionData = void 0; const bignumber_1 = require("@ethersproject/bignumber"); /** * Check if the array contains both string and number as keys * @param array any array * @returns true if the array contains both string and number as keys */ function arrayContainsMixedTypeKeys(array) { let realLength = 0; // eslint-disable-next-line @typescript-eslint/no-unused-vars for (const _ in array) { realLength++; } return array.length !== realLength; } /** * * @param decodedFunctionData response from ethers Interface.decodeFunctionData (mixed typed index array) * @returns a javascript rappresentation of the arrays / objects / values passed in the calldata */ function getValueFromDecodedFunctionData(decodedFunctionData) { if (Array.isArray(decodedFunctionData) && arrayContainsMixedTypeKeys(decodedFunctionData)) { const decodedFunctionDataWithoutStringKeys = []; for (const prop in decodedFunctionData) { if (!(parseInt(prop) >= 0)) { decodedFunctionDataWithoutStringKeys[prop] = decodedFunctionData[prop]; } } const result = Object.assign({}, decodedFunctionDataWithoutStringKeys); const res = {}; for (const property in result) { res[property] = getValueFromDecodedFunctionData(result[property]); } return res; } else if (Array.isArray(decodedFunctionData)) { return decodedFunctionData.map((value) => getValueFromDecodedFunctionData(value)); } else if (decodedFunctionData instanceof bignumber_1.BigNumber) { try { return decodedFunctionData.toBigInt(); } catch (e) { return decodedFunctionData.toNumber(); } } else { return decodedFunctionData; } } exports.getValueFromDecodedFunctionData = getValueFromDecodedFunctionData; function extractCustomFields(doc) { return Object.keys(doc) .filter((key) => key.startsWith('custom:')) .reduce((previous, current) => { const newValue = {}; newValue[current.replace('custom:', '')] = doc[current]; return Object.assign(Object.assign({}, previous), newValue); }, {}); } exports.extractCustomFields = extractCustomFields; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHdEQUFxRDtBQUVyRDs7OztHQUlHO0FBQ0gsU0FBUywwQkFBMEIsQ0FBQyxLQUFhO0lBQy9DLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQiw2REFBNkQ7SUFDN0QsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN0QixVQUFVLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDO0FBQ3JDLENBQUM7QUFVRDs7OztHQUlHO0FBQ0gsU0FBZ0IsK0JBQStCLENBQzdDLG1CQUEyQjtJQUUzQixJQUNFLEtBQUssQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7UUFDbEMsMEJBQTBCLENBQUMsbUJBQW1CLENBQUMsRUFDL0MsQ0FBQztRQUNELE1BQU0sb0NBQW9DLEdBQW9CLEVBQUUsQ0FBQztRQUNqRSxLQUFLLE1BQU0sSUFBSSxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLG9DQUFvQyxDQUFDLElBQUksQ0FBQyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pFLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsb0NBQW9DLENBQUMsQ0FBQztRQUN2RSxNQUFNLEdBQUcsR0FBeUIsRUFBRSxDQUFDO1FBQ3JDLEtBQUssTUFBTSxRQUFRLElBQUksTUFBTSxFQUFFLENBQUM7WUFDOUIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1FBQzlDLE9BQU8sbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDdkMsK0JBQStCLENBQUMsS0FBSyxDQUFDLENBQ3ZDLENBQUM7SUFDSixDQUFDO1NBQU0sSUFBSSxtQkFBbUIsWUFBWSxxQkFBUyxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QyxDQUFDO1FBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNwQixPQUFPLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztBQUNILENBQUM7QUFqQ0QsMEVBaUNDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMsR0FBVztJQUM3QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ3BCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUMxQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDNUIsTUFBTSxRQUFRLEdBQXlCLEVBQUUsQ0FBQztRQUMxQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsdUNBQVksUUFBUSxHQUFLLFFBQVEsRUFBRztJQUN0QyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDWCxDQUFDO0FBUkQsa0RBUUMifQ==