UNPKG

@ethereum-sourcify/contract-call-decoder

Version:

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

60 lines 4.52 kB
import { BigNumber } from '@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 */ export 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) { try { return decodedFunctionData.toBigInt(); } catch (e) { return decodedFunctionData.toNumber(); } } else { return decodedFunctionData; } } export function extractCustomFields(doc) { return Object.keys(doc) .filter((key) => key.startsWith('custom:')) .reduce((previous, current) => { const newValue = {}; newValue[current.replace('custom:', '')] = doc[current]; return { ...previous, ...newValue }; }, {}); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVyRDs7OztHQUlHO0FBQ0gsU0FBUywwQkFBMEIsQ0FBQyxLQUFhO0lBQy9DLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQiw2REFBNkQ7SUFDN0QsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN0QixVQUFVLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDO0FBQ3JDLENBQUM7QUFVRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLCtCQUErQixDQUM3QyxtQkFBMkI7SUFFM0IsSUFDRSxLQUFLLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1FBQ2xDLDBCQUEwQixDQUFDLG1CQUFtQixDQUFDLEVBQy9DLENBQUM7UUFDRCxNQUFNLG9DQUFvQyxHQUFvQixFQUFFLENBQUM7UUFDakUsS0FBSyxNQUFNLElBQUksSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMzQixvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6RSxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLG9DQUFvQyxDQUFDLENBQUM7UUFDdkUsTUFBTSxHQUFHLEdBQXlCLEVBQUUsQ0FBQztRQUNyQyxLQUFLLE1BQU0sUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzlCLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRywrQkFBK0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztRQUM5QyxPQUFPLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3ZDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxDQUN2QyxDQUFDO0lBQ0osQ0FBQztTQUFNLElBQUksbUJBQW1CLFlBQVksU0FBUyxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QyxDQUFDO1FBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNwQixPQUFPLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsR0FBVztJQUM3QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ3BCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUMxQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDNUIsTUFBTSxRQUFRLEdBQXlCLEVBQUUsQ0FBQztRQUMxQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsT0FBTyxFQUFFLEdBQUcsUUFBUSxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUM7SUFDdEMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1gsQ0FBQyJ9