zksync-cli
Version:
CLI tool that simplifies the process of developing applications and interacting with the ZKsync network
64 lines • 2.47 kB
JavaScript
import { ethers, AbiCoder } from "ethers";
export const getInterfaceFromSignature = (method) => {
return new ethers.Interface(["function " + String(method)]);
};
export const getFragmentFromSignature = (method) => {
const functionInterface = getInterfaceFromSignature(method);
return functionInterface.fragments[0];
};
export const getInputsFromSignature = (method) => {
return getFragmentFromSignature(method).inputs;
};
export const encodeData = (func, args) => {
const functionInterface = getInterfaceFromSignature(func);
return functionInterface.encodeFunctionData(func, args);
};
export const encodeParam = (param, arg) => {
return AbiCoder.defaultAbiCoder().encode([param], [arg]);
};
export const decodeData = (types, bytecode) => {
return AbiCoder.defaultAbiCoder().decode(types, bytecode);
};
export const getInputValues = (inputsString) => {
return inputsString
.split(",")
.map((element) => element.trim())
.filter((element) => !!element);
};
export const getMethodId = (method) => {
const methodSignature = getFragmentFromSignature(method).format("sighash");
return ethers.id(methodSignature).substring(2, 10); // remove 0x and take first 4 bytes
};
export const getMethodsFromAbi = (abi, type) => {
if (type === "read") {
const readMethods = abi.filter((fragment) => fragment.type === "function" && (fragment.stateMutability === "view" || fragment.stateMutability === "pure"));
const contractInterface = new ethers.Interface(readMethods);
return contractInterface.fragments;
}
else {
const writeMethods = abi.filter((fragment) => fragment.type === "function" &&
(fragment.stateMutability === "nonpayable" || fragment.stateMutability === "payable"));
const contractInterface = new ethers.Interface(writeMethods);
return contractInterface.fragments;
}
};
/**
* Format method args based on the method signature into a valid
* encodable format.
*
* @example "42,77" => [42,77]
*/
export const formatArgs = (method, args) => {
const inputs = getInputsFromSignature(method);
return args.map((arg, index) => {
const input = inputs[index];
if (input.baseType === "array") {
return arg
.replace(/\[|\]/g, "")
.split(",")
.map((element) => element.trim());
}
return arg;
});
};
//# sourceMappingURL=formatters.js.map