@locker-labs/sdk
Version:
A utility library for enhancing your ERC-4337 experience
153 lines • 6.85 kB
JavaScript
;
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