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