UNPKG

@q-dev/q-js-sdk

Version:

Typescript Library to interact with Q System Contracts

60 lines 2.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getDecodedDataByABI = exports.getEncodedDataByABI = exports.getDecodedData = exports.getEncodedData = void 0; const ethers_1 = require("ethers"); const AbiImporter_1 = require("../abi/AbiImporter"); const ethers_2 = require("ethers"); function hasNumericProperty(object) { return Object.keys(object).some((key) => Number.isInteger(+key)); } function isSolidityStruct(object) { return !hasNumericProperty(object) && !(object instanceof ethers_1.BigNumber); } function isSolidityStructArray(object) { return Array.isArray(object) && object.length > 0 && isSolidityStruct(object[0]); } function cast(object) { if (isSolidityStructArray(object)) { return object.map((element) => cast(element)); } if (!isSolidityStruct(object)) { return object; } return Object.keys(object).reduce((acc, currentKey) => { if (!Number.isInteger(+currentKey)) { acc[currentKey] = cast(object[currentKey]); } return acc; }, {}); } // eslint-disable-next-line @typescript-eslint/no-explicit-any function getEncodedData(abiName, name, ...args) { const contractInterface = (0, AbiImporter_1.getEthersInterface)(`${abiName}.json`); return contractInterface.encodeFunctionData(name, [...args]); } exports.getEncodedData = getEncodedData; function getDecodedData(abiName, calldata) { const contractInterface = (0, AbiImporter_1.getEthersInterface)(`${abiName}.json`); const decodedData = contractInterface.parseTransaction({ data: calldata, value: 0 }); return { functionName: decodedData.name, arguments: cast(decodedData.args), }; } exports.getDecodedData = getDecodedData; // eslint-disable-next-line @typescript-eslint/no-explicit-any function getEncodedDataByABI(abi, name, ...args) { const contractInterface = new ethers_2.utils.Interface(abi); return contractInterface.encodeFunctionData(name, [...args]); } exports.getEncodedDataByABI = getEncodedDataByABI; function getDecodedDataByABI(abi, calldata) { const contractInterface = new ethers_2.utils.Interface(abi); const decodedData = contractInterface.parseTransaction({ data: calldata, value: 0 }); return { functionName: decodedData.name, arguments: cast(decodedData.args), }; } exports.getDecodedDataByABI = getDecodedDataByABI; //# sourceMappingURL=abi-helper.js.map