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