UNPKG

@locker-labs/sdk

Version:

A utility library for enhancing your ERC-4337 experience

153 lines 6.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createLockerSplitClient = createLockerSplitClient; const viem_1 = require("viem"); const impl_js_1 = require("../accounts/impl.js"); const plugin_js_1 = require("./gens/base/split/plugin.js"); const plugin_js_2 = require("./gens/sepolia/split/plugin.js"); const plugin_js_3 = require("./gens/baseSepolia/split/plugin.js"); const helpers_js_1 = require("./utils/helpers.js"); const config_js_1 = require("./defs/split/config.js"); const infra_1 = require("@account-kit/infra"); const helpers_js_2 = require("../accounts/helpers.js"); const abi_js_1 = require("./defs/split/abi.js"); async function createLockerSplitClient(params) { const lockerClient = await (0, impl_js_1.createLockerClient)(params); const { chain: lockerChain, alchemyApiKey } = params; const chain = (0, helpers_js_2.adaptLockerChain2AlchemyChain)(lockerChain); const chainId = chain.id; let splitPluginActions; switch (chainId) { case infra_1.base.id: splitPluginActions = plugin_js_1.splitPluginActions; break; case infra_1.baseSepolia.id: splitPluginActions = plugin_js_3.splitPluginActions; break; case infra_1.sepolia.id: splitPluginActions = plugin_js_2.splitPluginActions; break; default: throw new Error(`Unsupported chain: ${chain.id}`); } const splitLockerClient = await lockerClient.extend(splitPluginActions); const alchemyRpcUrl = `${chain.rpcUrls.alchemy.http[0]}/${alchemyApiKey}`; const client = (0, viem_1.createPublicClient)({ chain, transport: (0, viem_1.http)(alchemyRpcUrl), }); return { ...lockerClient, async getConfigs() { if (!(await (0, helpers_js_1.isSplitPluginInstalled)(splitLockerClient, chainId))) { console.log("Split plugin not installed."); return []; } const globalIndexes = []; for (let i = 0; i < 5; i++) { let globalIndex; try { globalIndex = await client.readContract({ address: config_js_1.chainToSplitPluginAddress[chain.id], abi: abi_js_1.SplitPluginAbi, functionName: "splitConfigIndexes", args: [await splitLockerClient.getAddress(), BigInt(i)], }); globalIndexes.push(globalIndex); } catch { break; } } return globalIndexes; }, async createSplit(tokenAddress, percentage, receiverAddresses) { if (!(await (0, helpers_js_1.isSplitPluginInstalled)(splitLockerClient, chainId))) { console.log("Split plugin not installed."); return null; } console.log("Creating Split Config..."); const res = await splitLockerClient.createSplit({ args: [tokenAddress, receiverAddresses, percentage], }); console.log("Waiting for creation confirmation..."); await (0, helpers_js_2.waitForTransaction)(res.hash, alchemyRpcUrl); console.log("Split config created:", res); return res; }, async installSplitPlugin(tokenAddress, percentages, splitAddresses) { if (await (0, helpers_js_1.isSplitPluginInstalled)(splitLockerClient, chainId)) { console.log("Split plugin already installed."); return null; } console.log("Installing Split Plugin..."); const res = await splitLockerClient.installSplitPlugin({ args: [tokenAddress, splitAddresses, percentages], }); console.log("Waiting for installation confirmation..."); await (0, helpers_js_2.waitForTransaction)(res.hash, alchemyRpcUrl); console.log("Split plugin installed with:", res); return res; }, async isSplitPluginInstalled() { return await (0, helpers_js_1.isSplitPluginInstalled)(splitLockerClient, chainId); }, async uninstallSplitPlugin() { if (!(await (0, helpers_js_1.isSplitPluginInstalled)(splitLockerClient, chainId))) { console.log("Split plugin not installed."); return null; } console.log("Uninstalling Split Plugin..."); const res = await splitLockerClient.uninstallPlugin({ pluginAddress: config_js_1.chainToSplitPluginAddress[chain.id], }); console.log("Waiting for uninstallation confirmation..."); await (0, helpers_js_2.waitForTransaction)(res.hash, alchemyRpcUrl); return res; }, async toggleIsSplitEnabled(configIndex) { if (!(await (0, helpers_js_1.isSplitPluginInstalled)(splitLockerClient, chainId))) { console.log("Split plugin not installed."); return null; } const res = await splitLockerClient.pauseAutomation({ args: [configIndex], }); return res; }, async split(configIndex) { if (!(await (0, helpers_js_1.isSplitPluginInstalled)(splitLockerClient, chainId))) { console.log("Split plugin not installed."); return null; } const res = await splitLockerClient.split({ args: [BigInt(configIndex)], }); return res; }, async deleteSplit(configIndex) { if (!(await (0, helpers_js_1.isSplitPluginInstalled)(splitLockerClient, chainId))) { console.log("Split plugin not installed."); return null; } const isSplitCreator = await client.readContract({ address: config_js_1.chainToSplitPluginAddress[chain.id], abi: abi_js_1.SplitPluginAbi, functionName: "isSplitCreator", args: [configIndex, await splitLockerClient.getAddress()], }); if (!isSplitCreator) { console.log("You are not the creator of this split config:", Number(configIndex)); return null; } console.log("Deleting Split Config..."); const res = await splitLockerClient.deleteSplitConfig({ args: [configIndex], }); console.log("Waiting for deletion confirmation..."); await (0, helpers_js_2.waitForTransaction)(res.hash, alchemyRpcUrl); return res; }, }; } //# sourceMappingURL=index.js.map