@locker-labs/sdk
Version:
A utility library for enhancing your ERC-4337 experience
695 lines • 28.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MultiOwnerPluginAbi = exports.MultiOwnerPluginExecutionFunctionAbi = exports.multiOwnerPluginActions = exports.MultiOwnerPlugin = void 0;
const viem_1 = require("viem");
const core_1 = require("@aa-sdk/core");
const smart_contracts_1 = require("@account-kit/smart-contracts");
const addresses = {
1: "0xcE0000007B008F50d762D155002600004cD6c647",
10: "0xcE0000007B008F50d762D155002600004cD6c647",
137: "0xcE0000007B008F50d762D155002600004cD6c647",
252: "0xcE0000007B008F50d762D155002600004cD6c647",
2523: "0xcE0000007B008F50d762D155002600004cD6c647",
8453: "0xcE0000007B008F50d762D155002600004cD6c647",
42161: "0xcE0000007B008F50d762D155002600004cD6c647",
80001: "0xcE0000007B008F50d762D155002600004cD6c647",
80002: "0xcE0000007B008F50d762D155002600004cD6c647",
84532: "0xcE0000007B008F50d762D155002600004cD6c647",
421614: "0xcE0000007B008F50d762D155002600004cD6c647",
7777777: "0xcE0000007B008F50d762D155002600004cD6c647",
11155111: "0xcE0000007B008F50d762D155002600004cD6c647",
11155420: "0xcE0000007B008F50d762D155002600004cD6c647",
999999999: "0xcE0000007B008F50d762D155002600004cD6c647",
};
exports.MultiOwnerPlugin = {
meta: {
name: "Multi Owner Plugin",
version: "1.0.0",
addresses,
},
getContract: (client, address) => {
if (!client.chain)
throw new core_1.ChainNotFoundError();
return (0, viem_1.getContract)({
address: address || addresses[client.chain.id],
abi: exports.MultiOwnerPluginAbi,
client: client,
});
},
};
const multiOwnerPluginActions = (client) => ({
updateOwners({ args, overrides, context, account = client.account }) {
if (!account) {
throw new core_1.AccountNotFoundError();
}
if (!(0, core_1.isSmartAccountClient)(client)) {
throw new core_1.IncompatibleClientError("SmartAccountClient", "updateOwners", client);
}
const uo = (0, viem_1.encodeFunctionData)({
abi: exports.MultiOwnerPluginExecutionFunctionAbi,
functionName: "updateOwners",
args,
});
return client.sendUserOperation({ uo, overrides, account, context });
},
installMultiOwnerPlugin({ account = client.account, overrides, context, ...params }) {
if (!account) {
throw new core_1.AccountNotFoundError();
}
if (!(0, core_1.isSmartAccountClient)(client)) {
throw new core_1.IncompatibleClientError("SmartAccountClient", "installMultiOwnerPlugin", client);
}
const chain = client.chain;
if (!chain) {
throw new core_1.ChainNotFoundError();
}
const dependencies = params.dependencyOverrides ?? [];
const pluginAddress = params.pluginAddress ??
exports.MultiOwnerPlugin.meta.addresses[chain.id];
if (!pluginAddress) {
throw new Error("missing MultiOwnerPlugin address for chain " + chain.name);
}
return (0, smart_contracts_1.installPlugin)(client, {
pluginAddress,
pluginInitData: (0, viem_1.encodeAbiParameters)([{ type: "address[]" }], params.args),
dependencies,
overrides,
account,
context,
});
},
encodeUpdateOwners({ args }) {
return (0, viem_1.encodeFunctionData)({
abi: exports.MultiOwnerPluginExecutionFunctionAbi,
functionName: "updateOwners",
args,
});
},
encodeEip712Domain() {
return (0, viem_1.encodeFunctionData)({
abi: exports.MultiOwnerPluginExecutionFunctionAbi,
functionName: "eip712Domain",
});
},
async readEip712Domain({ account = client.account }) {
if (!account) {
throw new core_1.AccountNotFoundError();
}
if (!(0, core_1.isSmartAccountClient)(client)) {
throw new core_1.IncompatibleClientError("SmartAccountClient", "readEip712Domain", client);
}
return client.readContract({
address: account.address,
abi: exports.MultiOwnerPluginExecutionFunctionAbi,
functionName: "eip712Domain",
});
},
encodeIsValidSignature({ args }) {
return (0, viem_1.encodeFunctionData)({
abi: exports.MultiOwnerPluginExecutionFunctionAbi,
functionName: "isValidSignature",
args,
});
},
async readIsValidSignature({ args, account = client.account }) {
if (!account) {
throw new core_1.AccountNotFoundError();
}
if (!(0, core_1.isSmartAccountClient)(client)) {
throw new core_1.IncompatibleClientError("SmartAccountClient", "readIsValidSignature", client);
}
return client.readContract({
address: account.address,
abi: exports.MultiOwnerPluginExecutionFunctionAbi,
functionName: "isValidSignature",
args,
});
},
});
exports.multiOwnerPluginActions = multiOwnerPluginActions;
exports.MultiOwnerPluginExecutionFunctionAbi = [
{
type: "function",
name: "updateOwners",
inputs: [
{ name: "ownersToAdd", type: "address[]", internalType: "address[]" },
{ name: "ownersToRemove", type: "address[]", internalType: "address[]" },
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "eip712Domain",
inputs: [],
outputs: [
{ name: "fields", type: "bytes1", internalType: "bytes1" },
{ name: "name", type: "string", internalType: "string" },
{ name: "version", type: "string", internalType: "string" },
{ name: "chainId", type: "uint256", internalType: "uint256" },
{ name: "verifyingContract", type: "address", internalType: "address" },
{ name: "salt", type: "bytes32", internalType: "bytes32" },
{ name: "extensions", type: "uint256[]", internalType: "uint256[]" },
],
stateMutability: "view",
},
{
type: "function",
name: "isValidSignature",
inputs: [
{ name: "digest", type: "bytes32", internalType: "bytes32" },
{ name: "signature", type: "bytes", internalType: "bytes" },
],
outputs: [{ name: "", type: "bytes4", internalType: "bytes4" }],
stateMutability: "view",
},
];
exports.MultiOwnerPluginAbi = [
{
type: "function",
name: "eip712Domain",
inputs: [],
outputs: [
{ name: "fields", type: "bytes1", internalType: "bytes1" },
{ name: "name", type: "string", internalType: "string" },
{ name: "version", type: "string", internalType: "string" },
{ name: "chainId", type: "uint256", internalType: "uint256" },
{ name: "verifyingContract", type: "address", internalType: "address" },
{ name: "salt", type: "bytes32", internalType: "bytes32" },
{ name: "extensions", type: "uint256[]", internalType: "uint256[]" },
],
stateMutability: "view",
},
{
type: "function",
name: "encodeMessageData",
inputs: [
{ name: "account", type: "address", internalType: "address" },
{ name: "message", type: "bytes", internalType: "bytes" },
],
outputs: [{ name: "", type: "bytes", internalType: "bytes" }],
stateMutability: "view",
},
{
type: "function",
name: "getMessageHash",
inputs: [
{ name: "account", type: "address", internalType: "address" },
{ name: "message", type: "bytes", internalType: "bytes" },
],
outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
stateMutability: "view",
},
{
type: "function",
name: "isOwnerOf",
inputs: [
{ name: "account", type: "address", internalType: "address" },
{ name: "ownerToCheck", type: "address", internalType: "address" },
],
outputs: [{ name: "", type: "bool", internalType: "bool" }],
stateMutability: "view",
},
{
type: "function",
name: "isValidSignature",
inputs: [
{ name: "digest", type: "bytes32", internalType: "bytes32" },
{ name: "signature", type: "bytes", internalType: "bytes" },
],
outputs: [{ name: "", type: "bytes4", internalType: "bytes4" }],
stateMutability: "view",
},
{
type: "function",
name: "onInstall",
inputs: [{ name: "data", type: "bytes", internalType: "bytes" }],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "onUninstall",
inputs: [{ name: "", type: "bytes", internalType: "bytes" }],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "ownersOf",
inputs: [{ name: "account", type: "address", internalType: "address" }],
outputs: [{ name: "", type: "address[]", internalType: "address[]" }],
stateMutability: "view",
},
{
type: "function",
name: "pluginManifest",
inputs: [],
outputs: [
{
name: "",
type: "tuple",
internalType: "struct PluginManifest",
components: [
{ name: "interfaceIds", type: "bytes4[]", internalType: "bytes4[]" },
{
name: "dependencyInterfaceIds",
type: "bytes4[]",
internalType: "bytes4[]",
},
{
name: "executionFunctions",
type: "bytes4[]",
internalType: "bytes4[]",
},
{
name: "permittedExecutionSelectors",
type: "bytes4[]",
internalType: "bytes4[]",
},
{
name: "permitAnyExternalAddress",
type: "bool",
internalType: "bool",
},
{ name: "canSpendNativeToken", type: "bool", internalType: "bool" },
{
name: "permittedExternalCalls",
type: "tuple[]",
internalType: "struct ManifestExternalCallPermission[]",
components: [
{
name: "externalAddress",
type: "address",
internalType: "address",
},
{ name: "permitAnySelector", type: "bool", internalType: "bool" },
{ name: "selectors", type: "bytes4[]", internalType: "bytes4[]" },
],
},
{
name: "userOpValidationFunctions",
type: "tuple[]",
internalType: "struct ManifestAssociatedFunction[]",
components: [
{
name: "executionSelector",
type: "bytes4",
internalType: "bytes4",
},
{
name: "associatedFunction",
type: "tuple",
internalType: "struct ManifestFunction",
components: [
{
name: "functionType",
type: "uint8",
internalType: "enum ManifestAssociatedFunctionType",
},
{ name: "functionId", type: "uint8", internalType: "uint8" },
{
name: "dependencyIndex",
type: "uint256",
internalType: "uint256",
},
],
},
],
},
{
name: "runtimeValidationFunctions",
type: "tuple[]",
internalType: "struct ManifestAssociatedFunction[]",
components: [
{
name: "executionSelector",
type: "bytes4",
internalType: "bytes4",
},
{
name: "associatedFunction",
type: "tuple",
internalType: "struct ManifestFunction",
components: [
{
name: "functionType",
type: "uint8",
internalType: "enum ManifestAssociatedFunctionType",
},
{ name: "functionId", type: "uint8", internalType: "uint8" },
{
name: "dependencyIndex",
type: "uint256",
internalType: "uint256",
},
],
},
],
},
{
name: "preUserOpValidationHooks",
type: "tuple[]",
internalType: "struct ManifestAssociatedFunction[]",
components: [
{
name: "executionSelector",
type: "bytes4",
internalType: "bytes4",
},
{
name: "associatedFunction",
type: "tuple",
internalType: "struct ManifestFunction",
components: [
{
name: "functionType",
type: "uint8",
internalType: "enum ManifestAssociatedFunctionType",
},
{ name: "functionId", type: "uint8", internalType: "uint8" },
{
name: "dependencyIndex",
type: "uint256",
internalType: "uint256",
},
],
},
],
},
{
name: "preRuntimeValidationHooks",
type: "tuple[]",
internalType: "struct ManifestAssociatedFunction[]",
components: [
{
name: "executionSelector",
type: "bytes4",
internalType: "bytes4",
},
{
name: "associatedFunction",
type: "tuple",
internalType: "struct ManifestFunction",
components: [
{
name: "functionType",
type: "uint8",
internalType: "enum ManifestAssociatedFunctionType",
},
{ name: "functionId", type: "uint8", internalType: "uint8" },
{
name: "dependencyIndex",
type: "uint256",
internalType: "uint256",
},
],
},
],
},
{
name: "executionHooks",
type: "tuple[]",
internalType: "struct ManifestExecutionHook[]",
components: [
{
name: "executionSelector",
type: "bytes4",
internalType: "bytes4",
},
{
name: "preExecHook",
type: "tuple",
internalType: "struct ManifestFunction",
components: [
{
name: "functionType",
type: "uint8",
internalType: "enum ManifestAssociatedFunctionType",
},
{ name: "functionId", type: "uint8", internalType: "uint8" },
{
name: "dependencyIndex",
type: "uint256",
internalType: "uint256",
},
],
},
{
name: "postExecHook",
type: "tuple",
internalType: "struct ManifestFunction",
components: [
{
name: "functionType",
type: "uint8",
internalType: "enum ManifestAssociatedFunctionType",
},
{ name: "functionId", type: "uint8", internalType: "uint8" },
{
name: "dependencyIndex",
type: "uint256",
internalType: "uint256",
},
],
},
],
},
],
},
],
stateMutability: "pure",
},
{
type: "function",
name: "pluginMetadata",
inputs: [],
outputs: [
{
name: "",
type: "tuple",
internalType: "struct PluginMetadata",
components: [
{ name: "name", type: "string", internalType: "string" },
{ name: "version", type: "string", internalType: "string" },
{ name: "author", type: "string", internalType: "string" },
{
name: "permissionDescriptors",
type: "tuple[]",
internalType: "struct SelectorPermission[]",
components: [
{
name: "functionSelector",
type: "bytes4",
internalType: "bytes4",
},
{
name: "permissionDescription",
type: "string",
internalType: "string",
},
],
},
],
},
],
stateMutability: "pure",
},
{
type: "function",
name: "postExecutionHook",
inputs: [
{ name: "functionId", type: "uint8", internalType: "uint8" },
{ name: "preExecHookData", type: "bytes", internalType: "bytes" },
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "preExecutionHook",
inputs: [
{ name: "functionId", type: "uint8", internalType: "uint8" },
{ name: "sender", type: "address", internalType: "address" },
{ name: "value", type: "uint256", internalType: "uint256" },
{ name: "data", type: "bytes", internalType: "bytes" },
],
outputs: [{ name: "", type: "bytes", internalType: "bytes" }],
stateMutability: "nonpayable",
},
{
type: "function",
name: "preRuntimeValidationHook",
inputs: [
{ name: "functionId", type: "uint8", internalType: "uint8" },
{ name: "sender", type: "address", internalType: "address" },
{ name: "value", type: "uint256", internalType: "uint256" },
{ name: "data", type: "bytes", internalType: "bytes" },
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "preUserOpValidationHook",
inputs: [
{ name: "functionId", type: "uint8", internalType: "uint8" },
{
name: "userOp",
type: "tuple",
internalType: "struct UserOperation",
components: [
{ name: "sender", type: "address", internalType: "address" },
{ name: "nonce", type: "uint256", internalType: "uint256" },
{ name: "initCode", type: "bytes", internalType: "bytes" },
{ name: "callData", type: "bytes", internalType: "bytes" },
{ name: "callGasLimit", type: "uint256", internalType: "uint256" },
{
name: "verificationGasLimit",
type: "uint256",
internalType: "uint256",
},
{
name: "preVerificationGas",
type: "uint256",
internalType: "uint256",
},
{ name: "maxFeePerGas", type: "uint256", internalType: "uint256" },
{
name: "maxPriorityFeePerGas",
type: "uint256",
internalType: "uint256",
},
{ name: "paymasterAndData", type: "bytes", internalType: "bytes" },
{ name: "signature", type: "bytes", internalType: "bytes" },
],
},
{ name: "userOpHash", type: "bytes32", internalType: "bytes32" },
],
outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
stateMutability: "nonpayable",
},
{
type: "function",
name: "runtimeValidationFunction",
inputs: [
{ name: "functionId", type: "uint8", internalType: "uint8" },
{ name: "sender", type: "address", internalType: "address" },
{ name: "", type: "uint256", internalType: "uint256" },
{ name: "", type: "bytes", internalType: "bytes" },
],
outputs: [],
stateMutability: "view",
},
{
type: "function",
name: "supportsInterface",
inputs: [{ name: "interfaceId", type: "bytes4", internalType: "bytes4" }],
outputs: [{ name: "", type: "bool", internalType: "bool" }],
stateMutability: "view",
},
{
type: "function",
name: "updateOwners",
inputs: [
{ name: "ownersToAdd", type: "address[]", internalType: "address[]" },
{ name: "ownersToRemove", type: "address[]", internalType: "address[]" },
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "userOpValidationFunction",
inputs: [
{ name: "functionId", type: "uint8", internalType: "uint8" },
{
name: "userOp",
type: "tuple",
internalType: "struct UserOperation",
components: [
{ name: "sender", type: "address", internalType: "address" },
{ name: "nonce", type: "uint256", internalType: "uint256" },
{ name: "initCode", type: "bytes", internalType: "bytes" },
{ name: "callData", type: "bytes", internalType: "bytes" },
{ name: "callGasLimit", type: "uint256", internalType: "uint256" },
{
name: "verificationGasLimit",
type: "uint256",
internalType: "uint256",
},
{
name: "preVerificationGas",
type: "uint256",
internalType: "uint256",
},
{ name: "maxFeePerGas", type: "uint256", internalType: "uint256" },
{
name: "maxPriorityFeePerGas",
type: "uint256",
internalType: "uint256",
},
{ name: "paymasterAndData", type: "bytes", internalType: "bytes" },
{ name: "signature", type: "bytes", internalType: "bytes" },
],
},
{ name: "userOpHash", type: "bytes32", internalType: "bytes32" },
],
outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
stateMutability: "view",
},
{
type: "event",
name: "OwnerUpdated",
inputs: [
{
name: "account",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "addedOwners",
type: "address[]",
indexed: false,
internalType: "address[]",
},
{
name: "removedOwners",
type: "address[]",
indexed: false,
internalType: "address[]",
},
],
anonymous: false,
},
{ type: "error", name: "AlreadyInitialized", inputs: [] },
{ type: "error", name: "EmptyOwnersNotAllowed", inputs: [] },
{ type: "error", name: "InvalidAction", inputs: [] },
{
type: "error",
name: "InvalidOwner",
inputs: [{ name: "owner", type: "address", internalType: "address" }],
},
{ type: "error", name: "NotAuthorized", inputs: [] },
{
type: "error",
name: "NotContractCaller",
inputs: [{ name: "caller", type: "address", internalType: "address" }],
},
{
type: "error",
name: "NotImplemented",
inputs: [
{ name: "selector", type: "bytes4", internalType: "bytes4" },
{ name: "functionId", type: "uint8", internalType: "uint8" },
],
},
{ type: "error", name: "NotInitialized", inputs: [] },
{
type: "error",
name: "OwnerDoesNotExist",
inputs: [{ name: "owner", type: "address", internalType: "address" }],
},
];
//# sourceMappingURL=plugin.js.map