@q-dev/gdk-sdk
Version:
Typescript Library to interact with GDK Contracts
83 lines • 4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getParameterValue = exports.getDecodeDataByABI = exports.getDecodeData = exports.getEncodedDataByABI = exports.getEncodedData = exports.getParameterValues = exports.getReadableParameters = exports.getReadableParameter = void 0;
const ethers_1 = require("ethers");
const caster_1 = require("./caster");
const types_1 = require("../types");
const ABIImporter_1 = require("../abi/ABIImporter");
const getReadableParameter = (parameter) => {
parameter.value = (0, exports.getParameterValue)(parameter);
return parameter;
};
exports.getReadableParameter = getReadableParameter;
const getReadableParameters = (parameters) => {
return parameters.map((parameter) => {
return (0, exports.getReadableParameter)(parameter);
});
};
exports.getReadableParameters = getReadableParameters;
const getParameterValues = (parameters) => {
return parameters.map((parameter) => {
return (0, exports.getParameterValue)(parameter);
});
};
exports.getParameterValues = getParameterValues;
const getEncodedData = (abiName, name, ...args) => {
const contractInterface = (0, ABIImporter_1.getEthersInterface)(`${abiName}.json`);
return contractInterface.encodeFunctionData(name, [...args]);
};
exports.getEncodedData = getEncodedData;
const getEncodedDataByABI = (abi, name, ...args) => {
const contractInterface = new ethers_1.ethers.utils.Interface(abi);
return contractInterface.encodeFunctionData(name, [...args]);
};
exports.getEncodedDataByABI = getEncodedDataByABI;
const getDecodeData = (abiName, calldata) => {
const contractInterface = (0, ABIImporter_1.getEthersInterface)(`${abiName}.json`);
const decodedData = contractInterface.parseTransaction({ data: calldata, value: 0 });
return {
functionName: decodedData.name,
arguments: filterDecodedData((0, caster_1.cast)(Object.assign({}, decodedData.args))),
abiFunction: contractInterface.getFunction(decodedData.sighash).format(ethers_1.ethers.utils.FormatTypes.full),
};
};
exports.getDecodeData = getDecodeData;
const getDecodeDataByABI = (abi, calldata) => {
const contractInterface = new ethers_1.ethers.utils.Interface(abi);
const decodedData = contractInterface.parseTransaction({ data: calldata, value: 0 });
return {
functionName: decodedData.name,
arguments: filterDecodedData((0, caster_1.cast)(Object.assign({}, decodedData.args))),
abiFunction: contractInterface.getFunction(decodedData.sighash).format(ethers_1.ethers.utils.FormatTypes.full),
};
};
exports.getDecodeDataByABI = getDecodeDataByABI;
function filterDecodedData(rawObject) {
if (rawObject.parameters_ === undefined && rawObject.parameter_ === undefined) {
return rawObject;
}
return rawObject.parameters_
? (0, exports.getReadableParameters)(rawObject.parameters_)
: (0, exports.getReadableParameter)(rawObject.parameter_);
}
const getParameterValue = (parameter) => {
const coder = new ethers_1.ethers.utils.AbiCoder();
if (String(parameter.solidityType) === types_1.ParameterType.ADDRESS.toString()) {
return coder.decode(["address"], parameter.value)[0];
}
else if (String(parameter.solidityType) === types_1.ParameterType.UINT256.toString()) {
return coder.decode(["uint256"], parameter.value)[0].toString();
}
else if (String(parameter.solidityType) === types_1.ParameterType.STRING.toString()) {
return coder.decode(["string"], parameter.value)[0];
}
else if (String(parameter.solidityType) === types_1.ParameterType.BYTES.toString()) {
return parameter.value;
}
else if (String(parameter.solidityType) === types_1.ParameterType.BOOL.toString()) {
return coder.decode(["bool"], parameter.value)[0];
}
throw new Error("Parameter type not supported");
};
exports.getParameterValue = getParameterValue;
//# sourceMappingURL=encoding-helper.js.map