UNPKG

zksync-cli

Version:

CLI tool that simplifies the process of developing applications and interacting with the ZKsync network

64 lines 2.47 kB
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