@q-dev/q-js-sdk
Version:
Typescript Library to interact with Q System Contracts
60 lines • 2.45 kB
JavaScript
;
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