@zerodev/sdk 4.4.2 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/kernel-zerodev/constants.d.ts +1 -1
- package/dist/cjs/kernel-zerodev/constants.js +2 -2
- package/dist/cjs/kernel-zerodev/constants.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/session-key-validator.d.ts +4 -1
- package/dist/cjs/kernel-zerodev/validator/session-key-validator.js +17 -5
- package/dist/cjs/kernel-zerodev/validator/session-key-validator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/types.d.ts +1 -1
- package/dist/cjs/kernel-zerodev/validator/types.js.map +1 -1
- package/dist/esm/kernel-zerodev/constants.d.ts +1 -1
- package/dist/esm/kernel-zerodev/constants.js +2 -2
- package/dist/esm/kernel-zerodev/constants.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/session-key-validator.d.ts +4 -1
- package/dist/esm/kernel-zerodev/validator/session-key-validator.js +17 -5
- package/dist/esm/kernel-zerodev/validator/session-key-validator.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/types.d.ts +1 -1
- package/dist/esm/kernel-zerodev/validator/types.js.map +1 -1
- package/dist/types/kernel-zerodev/constants.d.ts +1 -1
- package/dist/types/kernel-zerodev/validator/session-key-validator.d.ts +4 -1
- package/dist/types/kernel-zerodev/validator/session-key-validator.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/types.d.ts +1 -1
- package/dist/types/kernel-zerodev/validator/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/kernel-zerodev/constants.ts +2 -2
- package/src/kernel-zerodev/validator/session-key-validator.ts +31 -9
- package/src/kernel-zerodev/validator/types.ts +1 -1
|
@@ -16,7 +16,7 @@ export declare const KILL_SWITCH_ACTION = "0x3f38e479304c7F18F988269a1bDa7d646bd
|
|
|
16
16
|
export declare const DUMMY_ECDSA_SIG = "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
|
|
17
17
|
export declare const ERC165_SESSION_KEY_VALIDATOR_ADDRESS = "0xe149290800De29D4b0BF9dB82c508255D81902E6";
|
|
18
18
|
export declare const TOKEN_ACTION = "0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1";
|
|
19
|
-
export declare const SESSION_KEY_VALIDATOR_ADDRESS = "
|
|
19
|
+
export declare const SESSION_KEY_VALIDATOR_ADDRESS = "0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5";
|
|
20
20
|
export declare const RECOVERY_VALIDATOR_ADDRESS = "0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6";
|
|
21
21
|
export declare const RECOVERY_ACTION = "0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1";
|
|
22
22
|
export declare const oneAddress = "0x0000000000000000000000000000000000000001";
|
|
@@ -19,7 +19,7 @@ exports.KILL_SWITCH_ACTION = "0x3f38e479304c7F18F988269a1bDa7d646bd48243";
|
|
|
19
19
|
exports.DUMMY_ECDSA_SIG = "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
|
|
20
20
|
exports.ERC165_SESSION_KEY_VALIDATOR_ADDRESS = "0xe149290800De29D4b0BF9dB82c508255D81902E6";
|
|
21
21
|
exports.TOKEN_ACTION = "0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1";
|
|
22
|
-
exports.SESSION_KEY_VALIDATOR_ADDRESS = "
|
|
22
|
+
exports.SESSION_KEY_VALIDATOR_ADDRESS = "0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5";
|
|
23
23
|
exports.RECOVERY_VALIDATOR_ADDRESS = "0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6";
|
|
24
24
|
exports.RECOVERY_ACTION = "0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1";
|
|
25
25
|
exports.oneAddress = "0x0000000000000000000000000000000000000001";
|
|
@@ -71,7 +71,7 @@ exports.CHAIN_ID_TO_NODE = {
|
|
|
71
71
|
204: "https://opbnb.rpc.thirdweb.com/eed98c1f30120c0508f17c1f01d3102b",
|
|
72
72
|
42069: "https://rpc.op-testnet.gelato.digital",
|
|
73
73
|
1261120: "https://rpc.zkatana.gelato.digital",
|
|
74
|
-
84532:
|
|
74
|
+
84532: 'https://floral-old-feather.base-sepolia.quiknode.pro/4c3b4295d0c174410872b1e461a91cc33c7969a9/',
|
|
75
75
|
421614: `https://arbitrum-sepolia.infura.io/v3/${exports.INFURA_API_KEY}`,
|
|
76
76
|
11155420: `https://optimism-sepolia.infura.io/v3/${exports.INFURA_API_KEY}`,
|
|
77
77
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/constants.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/constants.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseUnits, type Hex } from \"viem\";\nimport type { IGasTokenAddresses } from \"./paymaster/types.js\";\nimport { polygon } from \"viem/chains\";\n\nexport const DEFAULT_SEND_TX_MAX_RETRIES = 3;\nexport const DEFAULT_SEND_TX_RETRY_INTERVAL_MS = 60000; // 1 minutes\nexport const BUNDLER_URL =\n \"https://meta-aa-provider.onrender.com/api/v1/bundler\";\nexport const PAYMASTER_URL =\n \"https://meta-aa-provider.onrender.com/api/v1/paymaster\";\nexport const ENTRYPOINT_ADDRESS: Hex =\n \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\";\nexport const MULTISEND_ADDR: Hex = \"0x8ae01fcf7c655655ff2c6ef907b8b4718ab4e17c\";\nexport const BACKEND_URL = \"https://backend-vikp.onrender.com\";\nexport const API_URL = \"https://prod-api.zerodev.app\";\nexport const ECDSA_VALIDATOR_ADDRESS =\n \"0xd9AB5096a832b9ce79914329DAEE236f8Eea0390\";\nexport const KERNEL_FACTORY_ADDRESS =\n \"0x5de4839a76cf55d0c90e2061ef4386d962E15ae3\";\nexport const KERNEL_IMPL_ADDRESS = \"0x0DA6a956B9488eD4dd761E59f52FDc6c8068E6B5\";\nexport const KILL_SWITCH_VALIDATOR_ADDRESS =\n \"0x7393A7dA58CCfFb78f52adb09705BE6E20F704BC\";\nexport const KILL_SWITCH_ACTION = \"0x3f38e479304c7F18F988269a1bDa7d646bd48243\";\nexport const DUMMY_ECDSA_SIG =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\nexport const ERC165_SESSION_KEY_VALIDATOR_ADDRESS =\n \"0xe149290800De29D4b0BF9dB82c508255D81902E6\";\nexport const TOKEN_ACTION = \"0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1\";\nexport const SESSION_KEY_VALIDATOR_ADDRESS =\n \"0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5\";\nexport const RECOVERY_VALIDATOR_ADDRESS =\n \"0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6\";\nexport const RECOVERY_ACTION = \"0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1\";\nexport const oneAddress = \"0x0000000000000000000000000000000000000001\";\n\nexport const gasTokenChainAddresses: IGasTokenAddresses = {\n USDC: {\n 1: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n // 5: \"0x2f3A40A3db8a7e3D09B0adfEfbCe4f6F81927557\",\n 137: \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n // 80001: \"\",\n // 420: \"0x7F5c764cBc14f9669B88837ca1490cCa17c31607\",\n 42161: \"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8\",\n // 421613: \"\",\n 43114: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n // 43113: \"\",\n // 56: \"\",\n // 97: \"\"\n },\n PEPE: {\n 1: \"0x6982508145454Ce325dDbE47a25d4ec3d2311933\",\n },\n};\n\nexport const ERC20_APPROVAL_AMOUNT: { [key: string]: bigint } = {\n // ETH\n [gasTokenChainAddresses[\"USDC\"][1]]: parseUnits(\"100\", 6),\n\n // Goerli\n [gasTokenChainAddresses[\"USDC\"][5]]: parseUnits(\"100\", 6),\n\n // Polygon\n [gasTokenChainAddresses[\"USDC\"][137]]: parseUnits(\"10\", 6),\n\n // Arbitrum\n [gasTokenChainAddresses[\"USDC\"][42161]]: parseUnits(\"10\", 6),\n\n // Avalanche\n [gasTokenChainAddresses[\"USDC\"][43114]]: parseUnits(\"10\", 6),\n\n // ETH\n [gasTokenChainAddresses[\"PEPE\"][1]]: parseUnits(\"50000000\", 18),\n\n \"0x3870419Ba2BBf0127060bCB37f69A1b1C090992B\": parseUnits(\"100\", 18),\n};\n\nexport const minPriorityFeePerBidDefaults = new Map<number, bigint>([\n [polygon.id, 30_000_000_000n],\n]);\n\nexport const INFURA_API_KEY = \"f36f7f706a58477884ce6fe89165666c\";\nexport const CHAIN_ID_TO_NODE: { [key: number]: string } = {\n 1: `https://mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 5: `https://goerli.infura.io/v3/${INFURA_API_KEY}`,\n 11155111:\n \"https://fittest-ultra-aura.ethereum-sepolia.quiknode.pro/3893d01b1dd411fdfa9b6dd372dd2b4f69fcf1ea/\",\n 137: `https://polygon-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 80001: `https://polygon-mumbai.infura.io/v3/${INFURA_API_KEY}`,\n 10: `https://optimism-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 420: `https://optimism-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 42161: `https://arbitrum-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n // 42161: 'https://evocative-stylish-dinghy.arbitrum-mainnet.discover.quiknode.pro/80b526d14fa9fd9a8b0db1e65554acaf00c6a1ab/',\n 421613: `https://arbitrum-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 43114: `https://avalanche-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 43113: `https://avalanche-fuji.infura.io/v3/${INFURA_API_KEY}`,\n 1313161554: `https://aurora-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 1313161555: `https://aurora-testnet.infura.io/v3/${INFURA_API_KEY}`,\n 56: \"https://neat-greatest-layer.bsc.quiknode.pro/9405a499ceee314e5f2f68c9d47518d3537fce6a/\",\n 8453: \"https://twilight-red-tree.base-mainnet.quiknode.pro/dc6eb27bf0f917df215922488dd97f4de7d9b08e/\",\n 84531:\n \"https://icy-long-mountain.base-goerli.quiknode.pro/5b80d93e97cc9412a63c10a30841869abbef9596/\",\n 100: \"https://thrilling-fluent-film.xdai.quiknode.pro/305955cffb9868cdd95b5e3dc9775f20678ad9ac/\",\n 10200: \"https://nd-810-853-201.p2pify.com/e828b09f0d43591de96c297b3f36fffd\",\n 59144: `https://linea-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 59140: `https://linea-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 204: \"https://opbnb.rpc.thirdweb.com/eed98c1f30120c0508f17c1f01d3102b\",\n 42069: \"https://rpc.op-testnet.gelato.digital\",\n 1261120: \"https://rpc.zkatana.gelato.digital\",\n 84532: 'https://floral-old-feather.base-sepolia.quiknode.pro/4c3b4295d0c174410872b1e461a91cc33c7969a9/',\n 421614: `https://arbitrum-sepolia.infura.io/v3/${INFURA_API_KEY}`,\n 11155420: `https://optimism-sepolia.infura.io/v3/${INFURA_API_KEY}`,\n // 5611: 'opBnb-testnet',\n};\n"]}
|
|
@@ -4,6 +4,7 @@ import { type GetAbiItemParameters } from "viem";
|
|
|
4
4
|
import { MerkleTree } from "merkletreejs";
|
|
5
5
|
import type { GetAbiItemReturnType } from "viem/dist/types/utils/abi/getAbiItem.js";
|
|
6
6
|
import type { GeneratePermissionFromArgsParameters } from "./types.js";
|
|
7
|
+
import { Operation } from "../provider.js";
|
|
7
8
|
export interface SessionKeyValidatorParams extends KernelBaseValidatorParams {
|
|
8
9
|
sessionKey: SmartAccountSigner;
|
|
9
10
|
sessionKeyData: SessionKeyData;
|
|
@@ -42,6 +43,7 @@ export type Permission = {
|
|
|
42
43
|
sig?: Hex;
|
|
43
44
|
valueLimit?: bigint;
|
|
44
45
|
executionRule?: ExecutionRule;
|
|
46
|
+
operation?: Operation;
|
|
45
47
|
};
|
|
46
48
|
export interface SessionKeyData {
|
|
47
49
|
validUntil: number;
|
|
@@ -50,7 +52,7 @@ export interface SessionKeyData {
|
|
|
50
52
|
permissions?: Permission[];
|
|
51
53
|
}
|
|
52
54
|
export declare function getAbiItem<TAbi extends Abi | readonly unknown[], TItemName extends string>({ abi, args, name, }: GetAbiItemParameters<TAbi, TItemName>): GetAbiItemReturnType<TAbi, TItemName>;
|
|
53
|
-
export declare function getPermissionFromABI<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string>({ abi, target, args, functionName, valueLimit, }: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Permission;
|
|
55
|
+
export declare function getPermissionFromABI<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string>({ abi, target, args, functionName, valueLimit, operation, }: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Permission;
|
|
54
56
|
export declare class SessionKeyValidator extends KernelBaseValidator {
|
|
55
57
|
protected sessionKey: SmartAccountSigner;
|
|
56
58
|
sessionKeyData: SessionKeyData;
|
|
@@ -60,6 +62,7 @@ export declare class SessionKeyValidator extends KernelBaseValidator {
|
|
|
60
62
|
shouldDelegateViaFallback(): boolean;
|
|
61
63
|
findMatchingPermissions(callData: Hex): Permission | Permission[] | undefined;
|
|
62
64
|
private filterPermissions;
|
|
65
|
+
private filterByOperation;
|
|
63
66
|
private filterBySignature;
|
|
64
67
|
private findPermissionByRule;
|
|
65
68
|
private getFormattedHex;
|
|
@@ -11,6 +11,7 @@ const KernelAccountAbi_js_1 = require("../abis/KernelAccountAbi.js");
|
|
|
11
11
|
const merkletreejs_1 = require("merkletreejs");
|
|
12
12
|
const index_js_1 = require("../api/index.js");
|
|
13
13
|
const utils_js_1 = require("../utils.js");
|
|
14
|
+
const provider_js_1 = require("../provider.js");
|
|
14
15
|
BigInt.prototype.toJSON = function () {
|
|
15
16
|
return this.toString();
|
|
16
17
|
};
|
|
@@ -56,7 +57,7 @@ function getAbiItem({ abi, args = [], name, }) {
|
|
|
56
57
|
.reduce((a, c) => `${a}\n${c}`)}`);
|
|
57
58
|
}
|
|
58
59
|
exports.getAbiItem = getAbiItem;
|
|
59
|
-
function getPermissionFromABI({ abi, target, args, functionName, valueLimit, }) {
|
|
60
|
+
function getPermissionFromABI({ abi, target, args, functionName, valueLimit, operation, }) {
|
|
60
61
|
const abiItem = getAbiItem({
|
|
61
62
|
abi,
|
|
62
63
|
args,
|
|
@@ -83,6 +84,7 @@ function getPermissionFromABI({ abi, target, args, functionName, valueLimit, })
|
|
|
83
84
|
rules: paramRules,
|
|
84
85
|
target,
|
|
85
86
|
valueLimit: valueLimit ?? 0n,
|
|
87
|
+
operation: operation ?? provider_js_1.Operation.Call,
|
|
86
88
|
};
|
|
87
89
|
}
|
|
88
90
|
exports.getPermissionFromABI = getPermissionFromABI;
|
|
@@ -125,6 +127,7 @@ class SessionKeyValidator extends base_js_1.KernelBaseValidator {
|
|
|
125
127
|
interval: 0,
|
|
126
128
|
runs: 0,
|
|
127
129
|
},
|
|
130
|
+
operation: perm.operation ?? provider_js_1.Operation.Call,
|
|
128
131
|
}));
|
|
129
132
|
this.merkleTree = this.getMerkleTree();
|
|
130
133
|
this.selector =
|
|
@@ -184,12 +187,13 @@ class SessionKeyValidator extends base_js_1.KernelBaseValidator {
|
|
|
184
187
|
if (!permissionsList || !permissionsList.length)
|
|
185
188
|
return undefined;
|
|
186
189
|
const targetToMatch = target.toLowerCase();
|
|
187
|
-
let targetPermissions = permissionsList.filter((permission) => permission.target.toLowerCase() === targetToMatch
|
|
188
|
-
|
|
189
|
-
targetPermissions = permissionsList.filter((permission) => permission.target.toLowerCase() === viem_1.zeroAddress.toLowerCase());
|
|
190
|
-
}
|
|
190
|
+
let targetPermissions = permissionsList.filter((permission) => permission.target.toLowerCase() === targetToMatch ||
|
|
191
|
+
permission.target.toLowerCase() === viem_1.zeroAddress.toLowerCase());
|
|
191
192
|
if (!targetPermissions.length)
|
|
192
193
|
return undefined;
|
|
194
|
+
const operationPermissions = this.filterByOperation(targetPermissions, provider_js_1.Operation.Call);
|
|
195
|
+
if (!operationPermissions.length)
|
|
196
|
+
return undefined;
|
|
193
197
|
const signaturePermissions = this.filterBySignature(targetPermissions, dataArray[index].slice(0, 10).toLowerCase());
|
|
194
198
|
const valueLimitPermissions = signaturePermissions.filter((permission) => (permission.valueLimit ?? 0n) >= values[index]);
|
|
195
199
|
if (!valueLimitPermissions.length)
|
|
@@ -211,6 +215,9 @@ class SessionKeyValidator extends base_js_1.KernelBaseValidator {
|
|
|
211
215
|
? filteredPermissions
|
|
212
216
|
: undefined;
|
|
213
217
|
}
|
|
218
|
+
filterByOperation(permissions, operation) {
|
|
219
|
+
return permissions.filter((permission) => permission.operation === operation || provider_js_1.Operation.Call === operation);
|
|
220
|
+
}
|
|
214
221
|
filterBySignature(permissions, signature) {
|
|
215
222
|
return permissions.filter((permission) => (permission.sig ?? (0, viem_1.pad)("0x", { size: 4 })).toLowerCase() === signature);
|
|
216
223
|
}
|
|
@@ -320,6 +327,11 @@ class SessionKeyValidator extends base_js_1.KernelBaseValidator {
|
|
|
320
327
|
name: "executionRule",
|
|
321
328
|
type: "tuple",
|
|
322
329
|
},
|
|
330
|
+
{
|
|
331
|
+
internalType: "enum Operation",
|
|
332
|
+
name: "operation",
|
|
333
|
+
type: "uint8",
|
|
334
|
+
},
|
|
323
335
|
],
|
|
324
336
|
name: "permission",
|
|
325
337
|
type: Array.isArray(permission) ? "tuple[]" : "tuple",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-key-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/session-key-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n type Abi,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n type ValidatorPluginData,\n} from \"./base.js\";\nimport {\n encodeFunctionData,\n toBytes,\n concat,\n pad,\n toHex,\n encodeAbiParameters,\n concatHex,\n zeroAddress,\n decodeFunctionData,\n isHex,\n getFunctionSelector,\n type GetAbiItemParameters,\n keccak256,\n} from \"viem\";\nimport { formatAbiItem } from \"viem/utils\";\nimport { SessionKeyValidatorAbi } from \"../abis/SessionKeyValidatorAbi.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MerkleTree } from \"merkletreejs\";\nimport { getChainId } from \"../api/index.js\";\nimport { fixSignedData, getChain } from \"../utils.js\";\nimport type { GetAbiItemReturnType } from \"viem/dist/types/utils/abi/getAbiItem.js\";\nimport { type AbiFunction } from \"abitype\";\nimport type {\n CombinedArgs,\n GeneratePermissionFromArgsParameters,\n} from \"./types.js\";\n\n// We need to be able to serialize bigint to transmit session key over\n// the network.\n// Using this trick: https://github.com/GoogleChromeLabs/jsbi/issues/30#issuecomment-1006086291\n(BigInt.prototype as any).toJSON = function () {\n return this.toString();\n};\n\nexport interface SessionKeyValidatorParams extends KernelBaseValidatorParams {\n sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n}\n\nexport type SessionKeyParams = Pick<\n SessionKeyValidatorParams,\n \"sessionKeyData\" | \"enableSignature\"\n> &\n ValidatorPluginData & {\n sessionPrivateKey?: Hex;\n initCode?: Hex;\n accountAddress?: Address;\n };\n\nexport enum ParamOperator {\n EQUAL = 0,\n GREATER_THAN = 1,\n LESS_THAN = 2,\n GREATER_THAN_OR_EQUAL = 3,\n LESS_THAN_OR_EQUAL = 4,\n NOT_EQUAL = 5,\n}\n\nexport type SessionNonces = {\n lastNonce: bigint;\n invalidNonce: bigint;\n};\n\nexport type ExecutionRule = {\n validAfter: number; // 48 bits\n interval: number; // 48 bits\n runs: number; // 48 bits\n};\nexport interface ParamRules {\n offset: number;\n condition: ParamOperator;\n param: Hex;\n}\n\nexport type Permission = {\n target: Address;\n index?: number;\n rules?: ParamRules[];\n sig?: Hex;\n valueLimit?: bigint;\n executionRule?: ExecutionRule;\n};\n\nexport interface SessionKeyData {\n validUntil: number;\n validAfter: number;\n paymaster?: Address;\n permissions?: Permission[];\n}\n\nexport function getAbiItem<\n TAbi extends Abi | readonly unknown[],\n TItemName extends string\n>({\n abi,\n args = [],\n name,\n}: GetAbiItemParameters<TAbi, TItemName>): GetAbiItemReturnType<\n TAbi,\n TItemName\n> {\n const abiItems = (abi as Abi).filter((x) => \"name\" in x && x.name === name);\n if (abiItems.length === 0) return undefined as any;\n if (abiItems.length === 1) return abiItems[0] as any;\n const abiItemsParamFiltered = [];\n for (const abiItem of abiItems) {\n if (!(\"inputs\" in abiItem)) continue;\n if (!args || args.length === 0) {\n if (!abiItem.inputs || abiItem.inputs.length === 0) return abiItem as any;\n continue;\n }\n if (!abiItem.inputs) continue;\n if (abiItem.inputs.length === 0) continue;\n if (abiItem.inputs.length !== args.length) continue;\n abiItemsParamFiltered.push(abiItem);\n }\n if (abiItemsParamFiltered.length === 0) return abiItems[0] as any;\n else if (abiItemsParamFiltered.length === 1)\n return abiItemsParamFiltered[0] as any;\n else\n throw Error(\n `Couldn't parse funtion signature using params, set appropriate one from below:\\n${abiItemsParamFiltered\n .map((item) => formatAbiItem(item))\n .reduce((a, c) => `${a}\\n${c}`)}`\n );\n}\n\nexport function getPermissionFromABI<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string | undefined = string\n>({\n abi,\n target,\n args,\n functionName,\n valueLimit,\n}: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Permission {\n const abiItem = getAbiItem({\n abi,\n args,\n name: functionName,\n } as GetAbiItemParameters);\n if (abiItem.type !== \"function\") {\n throw Error(`${functionName} not found in abi`);\n }\n const functionSelector = getFunctionSelector(abiItem);\n let paramRules: ParamRules[] = [];\n if (args && Array.isArray(args)) {\n paramRules = (args as CombinedArgs<AbiFunction[\"inputs\"]>)\n .map(\n (arg, i) =>\n arg && {\n param: pad(\n isHex(arg.value)\n ? arg.value\n : toHex(arg.value as Parameters<typeof toHex>[0]),\n { size: 32 }\n ),\n offset: i * 32,\n condition: arg.operator,\n }\n )\n .filter((rule) => rule) as ParamRules[];\n }\n return {\n sig: functionSelector,\n rules: paramRules,\n target,\n valueLimit: valueLimit ?? 0n,\n };\n}\n\nexport class SessionKeyValidator extends KernelBaseValidator {\n protected sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n merkleTree: MerkleTree;\n\n constructor(params: SessionKeyValidatorParams) {\n super(params);\n this.sessionKey = params.sessionKey;\n this.sessionKeyData = {\n ...params.sessionKeyData,\n validAfter: params.sessionKeyData.validAfter ?? 0,\n validUntil: params.sessionKeyData.validUntil ?? 0,\n paymaster: params.sessionKeyData.paymaster ?? zeroAddress,\n };\n this.sessionKeyData.permissions = this.sessionKeyData.permissions?.map(\n (perm, index) => ({\n ...perm,\n valueLimit: perm.valueLimit ?? 0n,\n sig: perm.sig ?? pad(\"0x\", { size: 4 }),\n rules: perm.rules ?? [],\n index,\n executionRule: perm.executionRule ?? {\n validAfter: 0,\n interval: 0,\n runs: 0,\n },\n })\n );\n this.merkleTree = this.getMerkleTree();\n this.selector =\n params.selector ??\n getFunctionSelector(\"execute(address, uint256, bytes, uint8)\");\n this.executor = params.executor ?? zeroAddress;\n this.mode = params.mode ?? ValidatorMode.plugin;\n }\n\n public static async init(\n params: SessionKeyValidatorParams\n ): Promise<SessionKeyValidator> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new SessionKeyValidator({ ...params, chain });\n return instance;\n }\n\n shouldDelegateViaFallback(): boolean {\n return this.merkleTree.getHexRoot() === pad(\"0x00\", { size: 32 });\n }\n\n findMatchingPermissions(\n callData: Hex\n ): Permission | Permission[] | undefined {\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: callData,\n });\n\n if (functionName !== \"execute\" && functionName !== \"executeBatch\")\n return undefined;\n if (functionName === \"execute\") {\n const [to, value, data] = args;\n return this.filterPermissions([to], [data], [value])?.[0];\n } else if (functionName === \"executeBatch\") {\n let targets: Hex[] = [],\n values: bigint[] = [],\n dataArray: Hex[] = [];\n args[0].forEach((arg) => {\n targets.push(arg.to);\n values.push(arg.value);\n dataArray.push(arg.data);\n });\n return this.filterPermissions(targets, dataArray, values);\n } else {\n throw Error(\"Invalid function\");\n }\n } catch (error) {\n return undefined;\n }\n }\n\n private filterPermissions(\n targets: Address[],\n dataArray: Hex[],\n values: bigint[]\n ): Permission[] | undefined {\n if (\n targets.length !== dataArray.length ||\n targets.length !== values.length\n ) {\n throw Error(\"Invalid arguments\");\n }\n const filteredPermissions = targets.map((target, index) => {\n const permissionsList = this.sessionKeyData.permissions;\n if (!permissionsList || !permissionsList.length) return undefined;\n\n const targetToMatch = target.toLowerCase();\n\n // Filter permissions by target\n let targetPermissions = permissionsList.filter(\n (permission) => permission.target.toLowerCase() === targetToMatch\n );\n\n // If no permissions match the exact target, check for generic permissions (using zero address)\n if (!targetPermissions.length) {\n targetPermissions = permissionsList.filter(\n (permission) =>\n permission.target.toLowerCase() === zeroAddress.toLowerCase()\n );\n }\n\n if (!targetPermissions.length) return undefined;\n\n const signaturePermissions = this.filterBySignature(\n targetPermissions,\n dataArray[index].slice(0, 10).toLowerCase()\n );\n\n const valueLimitPermissions = signaturePermissions.filter(\n (permission) => (permission.valueLimit ?? 0n) >= values[index]\n );\n\n if (!valueLimitPermissions.length) return undefined;\n\n const sortedPermissions = valueLimitPermissions.sort((a, b) => {\n if ((b.valueLimit ?? 0n) > (a.valueLimit ?? 0n)) {\n return 1;\n } else if ((b.valueLimit ?? 0n) < (a.valueLimit ?? 0n)) {\n return -1;\n } else {\n return 0;\n }\n });\n\n return this.findPermissionByRule(sortedPermissions, dataArray[index]);\n });\n return filteredPermissions.every((permission) => permission !== undefined)\n ? (filteredPermissions as Permission[])\n : undefined;\n }\n\n private filterBySignature(\n permissions: Permission[],\n signature: string\n ): Permission[] {\n return permissions.filter(\n (permission) =>\n (permission.sig ?? pad(\"0x\", { size: 4 })).toLowerCase() === signature\n );\n }\n\n private findPermissionByRule(\n permissions: Permission[],\n data: string\n ): Permission | undefined {\n return permissions.find((permission) => {\n for (const rule of permission.rules ?? []) {\n const dataParam: Hex = this.getFormattedHex(\n \"0x\" + data.slice(10 + rule.offset * 2, 10 + rule.offset * 2 + 64)\n );\n const ruleParam: Hex = this.getFormattedHex(rule.param);\n\n if (!this.evaluateRuleCondition(dataParam, ruleParam, rule.condition)) {\n return false;\n }\n }\n return true;\n });\n }\n\n private getFormattedHex(value: string): Hex {\n return pad(isHex(value) ? value : toHex(value), {\n size: 32,\n }).toLowerCase() as Hex;\n }\n\n private evaluateRuleCondition(\n dataParam: Hex,\n ruleParam: Hex,\n condition: ParamOperator\n ): boolean {\n switch (condition) {\n case ParamOperator.EQUAL:\n return dataParam === ruleParam;\n case ParamOperator.GREATER_THAN:\n return dataParam > ruleParam;\n case ParamOperator.LESS_THAN:\n return dataParam < ruleParam;\n case ParamOperator.GREATER_THAN_OR_EQUAL:\n return dataParam >= ruleParam;\n case ParamOperator.LESS_THAN_OR_EQUAL:\n return dataParam <= ruleParam;\n case ParamOperator.NOT_EQUAL:\n return dataParam !== ruleParam;\n default:\n return false;\n }\n }\n\n getMerkleTree(): MerkleTree {\n const permissionPacked = this.sessionKeyData.permissions?.map(\n (permission) => this.encodePermissionData(permission)\n );\n\n // Having one leaf returns empty array in getProof(). To hack it we push the leaf twice\n // issue - https://github.com/merkletreejs/merkletreejs/issues/58\n if (permissionPacked && permissionPacked.length === 1)\n permissionPacked.push(permissionPacked[0]);\n\n return permissionPacked && permissionPacked.length !== 0\n ? new MerkleTree(permissionPacked, keccak256, {\n hashLeaves: true,\n sortPairs: true,\n })\n : new MerkleTree([pad(\"0x00\", { size: 32 })], keccak256, {\n hashLeaves: false,\n complete: true,\n });\n }\n\n encodePermissionData(\n permission: Permission | Permission[],\n merkleProof?: string[] | string[][]\n ): Hex {\n let permissionParam = {\n components: [\n {\n name: \"index\",\n type: \"uint32\",\n },\n {\n name: \"target\",\n type: \"address\",\n },\n {\n name: \"sig\",\n type: \"bytes4\",\n },\n {\n name: \"valueLimit\",\n type: \"uint256\",\n },\n {\n components: [\n {\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"enum ParamCondition\",\n name: \"condition\",\n type: \"uint8\",\n },\n {\n name: \"param\",\n type: \"bytes32\",\n },\n ],\n name: \"rules\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n name: \"interval\",\n type: \"uint48\",\n },\n {\n name: \"runs\",\n type: \"uint48\",\n },\n {\n internalType: \"ValidAfter\",\n name: \"validAfter\",\n type: \"uint48\",\n },\n ],\n name: \"executionRule\",\n type: \"tuple\",\n },\n ],\n name: \"permission\",\n type: Array.isArray(permission) ? \"tuple[]\" : \"tuple\",\n };\n let params;\n let values;\n if (merkleProof) {\n params = [\n permissionParam,\n {\n name: \"merkleProof\",\n type: Array.isArray(merkleProof[0]) ? \"bytes32[][]\" : \"bytes32[]\",\n },\n ];\n values = [permission, merkleProof];\n } else {\n params = [permissionParam];\n values = [permission];\n }\n return encodeAbiParameters(params, values);\n }\n\n getSessionData(): SessionKeyParams {\n if (!this.selector || !this.executor) {\n throw Error(\"Plugin Validator data params uninitialised\");\n }\n return {\n selector: this.selector,\n executor: this.executor,\n validUntil: this.validUntil,\n validAfter: this.validAfter,\n sessionKeyData: this.sessionKeyData,\n enableSignature: this.enableSignature,\n };\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.sessionKey);\n }\n\n async getSessionNonces(\n kernelAccountAddress: Address\n ): Promise<SessionNonces> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const nonce = await this.publicClient.readContract({\n abi: SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"nonces\",\n args: [kernelAccountAddress],\n });\n return { lastNonce: nonce[0], invalidNonce: nonce[1] };\n }\n\n async getEnableData(\n kernelAccountAddress?: Address,\n enabledLastNonce?: bigint\n ): Promise<Hex> {\n if (!this.merkleTree) {\n throw Error(\"SessionKeyValidator: MerkleTree not generated\");\n }\n if (!kernelAccountAddress) {\n throw Error(\"SessionKeyValidator: Kernel account address not provided\");\n }\n const lastNonce =\n enabledLastNonce ??\n (await this.getSessionNonces(kernelAccountAddress)).lastNonce + 1n;\n return concat([\n await this.sessionKey.getAddress(),\n pad(this.merkleTree.getHexRoot() as Hex, { size: 32 }),\n pad(toHex(this.sessionKeyData.validAfter), { size: 6 }),\n pad(toHex(this.sessionKeyData.validUntil), { size: 6 }),\n this.sessionKeyData.paymaster!,\n pad(toHex(lastNonce), { size: 32 }),\n ]);\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const execDetail = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getExecution\",\n args: [selector],\n });\n const enableData = await this.publicClient.readContract({\n abi: SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"sessionData\",\n args: [await this.sessionKey.getAddress(), kernelAccountAddress],\n });\n const enableDataHex = concatHex([\n await this.sessionKey.getAddress(),\n pad(enableData[0], { size: 32 }),\n pad(toHex(enableData[1]), { size: 6 }),\n pad(toHex(enableData[2]), { size: 6 }),\n enableData[3],\n pad(toHex(enableData[4]), { size: 32 }),\n ]);\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableDataHex.toLowerCase() ===\n (\n await this.getEnableData(kernelAccountAddress, enableData[4])\n ).toLowerCase()\n );\n }\n\n async getDummyUserOpSignature(callData: Hex): Promise<Hex> {\n return concatHex([\n await this.sessionKey.getAddress(),\n DUMMY_ECDSA_SIG,\n this.getEncodedPermissionProofData(callData),\n ]);\n }\n\n private getEncodedPermissionProofData(callData: Hex): Hex {\n const matchingPermission = this.findMatchingPermissions(callData);\n if (!matchingPermission && !this.shouldDelegateViaFallback()) {\n throw Error(\n \"SessionKeyValidator: No matching permission found for the userOp\"\n );\n }\n const encodedPermissionData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission)\n : \"0x\";\n let merkleProof: string[] | string[][] = [];\n if (Array.isArray(matchingPermission)) {\n let encodedPerms = matchingPermission.map((permission) =>\n keccak256(this.encodePermissionData(permission))\n );\n merkleProof = encodedPerms.map((perm) =>\n this.merkleTree.getHexProof(perm)\n );\n } else if (matchingPermission) {\n merkleProof = this.merkleTree.getHexProof(\n keccak256(encodedPermissionData)\n );\n }\n return this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission, merkleProof)\n : \"0x\";\n }\n\n encodeEnable(sessionKeyEnableData: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"enable\",\n args: [sessionKeyEnableData],\n });\n }\n\n encodeDisable(sessionKey: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"disable\",\n args: [sessionKey],\n });\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.sessionKey.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.sessionKey.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n\n const signature = concat([\n await this.sessionKey.getAddress(),\n await this.sessionKey.signMessage(formattedMessage),\n this.getEncodedPermissionProofData(userOp.callData),\n ]);\n return signature;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"session-key-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/session-key-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n type Abi,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n type ValidatorPluginData,\n} from \"./base.js\";\nimport {\n encodeFunctionData,\n toBytes,\n concat,\n pad,\n toHex,\n encodeAbiParameters,\n concatHex,\n zeroAddress,\n decodeFunctionData,\n isHex,\n getFunctionSelector,\n type GetAbiItemParameters,\n keccak256,\n} from \"viem\";\nimport { formatAbiItem } from \"viem/utils\";\nimport { SessionKeyValidatorAbi } from \"../abis/SessionKeyValidatorAbi.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MerkleTree } from \"merkletreejs\";\nimport { getChainId } from \"../api/index.js\";\nimport { fixSignedData, getChain } from \"../utils.js\";\nimport type { GetAbiItemReturnType } from \"viem/dist/types/utils/abi/getAbiItem.js\";\nimport { type AbiFunction } from \"abitype\";\nimport type {\n CombinedArgs,\n GeneratePermissionFromArgsParameters,\n} from \"./types.js\";\nimport { Operation } from \"../provider.js\";\n\n// We need to be able to serialize bigint to transmit session key over\n// the network.\n// Using this trick: https://github.com/GoogleChromeLabs/jsbi/issues/30#issuecomment-1006086291\n(BigInt.prototype as any).toJSON = function () {\n return this.toString();\n};\n\nexport interface SessionKeyValidatorParams extends KernelBaseValidatorParams {\n sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n}\n\nexport type SessionKeyParams = Pick<\n SessionKeyValidatorParams,\n \"sessionKeyData\" | \"enableSignature\"\n> &\n ValidatorPluginData & {\n sessionPrivateKey?: Hex;\n initCode?: Hex;\n accountAddress?: Address;\n };\n\nexport enum ParamOperator {\n EQUAL = 0,\n GREATER_THAN = 1,\n LESS_THAN = 2,\n GREATER_THAN_OR_EQUAL = 3,\n LESS_THAN_OR_EQUAL = 4,\n NOT_EQUAL = 5,\n}\n\nexport type SessionNonces = {\n lastNonce: bigint;\n invalidNonce: bigint;\n};\n\nexport type ExecutionRule = {\n validAfter: number; // 48 bits\n interval: number; // 48 bits\n runs: number; // 48 bits\n};\nexport interface ParamRules {\n offset: number;\n condition: ParamOperator;\n param: Hex;\n}\n\nexport type Permission = {\n target: Address;\n index?: number;\n rules?: ParamRules[];\n sig?: Hex;\n valueLimit?: bigint;\n executionRule?: ExecutionRule;\n operation?: Operation;\n};\n\nexport interface SessionKeyData {\n validUntil: number;\n validAfter: number;\n paymaster?: Address;\n permissions?: Permission[];\n}\n\nexport function getAbiItem<\n TAbi extends Abi | readonly unknown[],\n TItemName extends string\n>({\n abi,\n args = [],\n name,\n}: GetAbiItemParameters<TAbi, TItemName>): GetAbiItemReturnType<\n TAbi,\n TItemName\n> {\n const abiItems = (abi as Abi).filter((x) => \"name\" in x && x.name === name);\n if (abiItems.length === 0) return undefined as any;\n if (abiItems.length === 1) return abiItems[0] as any;\n const abiItemsParamFiltered = [];\n for (const abiItem of abiItems) {\n if (!(\"inputs\" in abiItem)) continue;\n if (!args || args.length === 0) {\n if (!abiItem.inputs || abiItem.inputs.length === 0) return abiItem as any;\n continue;\n }\n if (!abiItem.inputs) continue;\n if (abiItem.inputs.length === 0) continue;\n if (abiItem.inputs.length !== args.length) continue;\n abiItemsParamFiltered.push(abiItem);\n }\n if (abiItemsParamFiltered.length === 0) return abiItems[0] as any;\n else if (abiItemsParamFiltered.length === 1)\n return abiItemsParamFiltered[0] as any;\n else\n throw Error(\n `Couldn't parse funtion signature using params, set appropriate one from below:\\n${abiItemsParamFiltered\n .map((item) => formatAbiItem(item))\n .reduce((a, c) => `${a}\\n${c}`)}`\n );\n}\n\nexport function getPermissionFromABI<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string | undefined = string\n>({\n abi,\n target,\n args,\n functionName,\n valueLimit,\n operation,\n}: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Permission {\n const abiItem = getAbiItem({\n abi,\n args,\n name: functionName,\n } as GetAbiItemParameters);\n if (abiItem.type !== \"function\") {\n throw Error(`${functionName} not found in abi`);\n }\n const functionSelector = getFunctionSelector(abiItem);\n let paramRules: ParamRules[] = [];\n if (args && Array.isArray(args)) {\n paramRules = (args as CombinedArgs<AbiFunction[\"inputs\"]>)\n .map(\n (arg, i) =>\n arg && {\n param: pad(\n isHex(arg.value)\n ? arg.value\n : toHex(arg.value as Parameters<typeof toHex>[0]),\n { size: 32 }\n ),\n offset: i * 32,\n condition: arg.operator,\n }\n )\n .filter((rule) => rule) as ParamRules[];\n }\n return {\n sig: functionSelector,\n rules: paramRules,\n target,\n valueLimit: valueLimit ?? 0n,\n operation: operation ?? Operation.Call,\n };\n}\n\nexport class SessionKeyValidator extends KernelBaseValidator {\n protected sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n merkleTree: MerkleTree;\n\n constructor(params: SessionKeyValidatorParams) {\n super(params);\n this.sessionKey = params.sessionKey;\n this.sessionKeyData = {\n ...params.sessionKeyData,\n validAfter: params.sessionKeyData.validAfter ?? 0,\n validUntil: params.sessionKeyData.validUntil ?? 0,\n paymaster: params.sessionKeyData.paymaster ?? zeroAddress,\n };\n this.sessionKeyData.permissions = this.sessionKeyData.permissions?.map(\n (perm, index) => ({\n ...perm,\n valueLimit: perm.valueLimit ?? 0n,\n sig: perm.sig ?? pad(\"0x\", { size: 4 }),\n rules: perm.rules ?? [],\n index,\n executionRule: perm.executionRule ?? {\n validAfter: 0,\n interval: 0,\n runs: 0,\n },\n operation: perm.operation ?? Operation.Call,\n })\n );\n this.merkleTree = this.getMerkleTree();\n this.selector =\n params.selector ??\n getFunctionSelector(\"execute(address, uint256, bytes, uint8)\");\n this.executor = params.executor ?? zeroAddress;\n this.mode = params.mode ?? ValidatorMode.plugin;\n }\n\n public static async init(\n params: SessionKeyValidatorParams\n ): Promise<SessionKeyValidator> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new SessionKeyValidator({ ...params, chain });\n return instance;\n }\n\n shouldDelegateViaFallback(): boolean {\n return this.merkleTree.getHexRoot() === pad(\"0x00\", { size: 32 });\n }\n\n findMatchingPermissions(\n callData: Hex\n ): Permission | Permission[] | undefined {\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: callData,\n });\n\n if (functionName !== \"execute\" && functionName !== \"executeBatch\")\n return undefined;\n if (functionName === \"execute\") {\n const [to, value, data] = args;\n return this.filterPermissions([to], [data], [value])?.[0];\n } else if (functionName === \"executeBatch\") {\n let targets: Hex[] = [],\n values: bigint[] = [],\n dataArray: Hex[] = [];\n args[0].forEach((arg) => {\n targets.push(arg.to);\n values.push(arg.value);\n dataArray.push(arg.data);\n });\n return this.filterPermissions(targets, dataArray, values);\n } else {\n throw Error(\"Invalid function\");\n }\n } catch (error) {\n return undefined;\n }\n }\n\n private filterPermissions(\n targets: Address[],\n dataArray: Hex[],\n values: bigint[]\n ): Permission[] | undefined {\n if (\n targets.length !== dataArray.length ||\n targets.length !== values.length\n ) {\n throw Error(\"Invalid arguments\");\n }\n const filteredPermissions = targets.map((target, index) => {\n const permissionsList = this.sessionKeyData.permissions;\n if (!permissionsList || !permissionsList.length) return undefined;\n\n const targetToMatch = target.toLowerCase();\n\n // Filter permissions by target\n let targetPermissions = permissionsList.filter(\n (permission) =>\n permission.target.toLowerCase() === targetToMatch ||\n permission.target.toLowerCase() === zeroAddress.toLowerCase()\n );\n\n if (!targetPermissions.length) return undefined;\n\n const operationPermissions = this.filterByOperation(\n targetPermissions,\n // [TODO]: Check if we need to pass operation from userOp after Kernel v2.3 in\n Operation.Call\n );\n\n if (!operationPermissions.length) return undefined;\n\n const signaturePermissions = this.filterBySignature(\n targetPermissions,\n dataArray[index].slice(0, 10).toLowerCase()\n );\n\n const valueLimitPermissions = signaturePermissions.filter(\n (permission) => (permission.valueLimit ?? 0n) >= values[index]\n );\n\n if (!valueLimitPermissions.length) return undefined;\n\n const sortedPermissions = valueLimitPermissions.sort((a, b) => {\n if ((b.valueLimit ?? 0n) > (a.valueLimit ?? 0n)) {\n return 1;\n } else if ((b.valueLimit ?? 0n) < (a.valueLimit ?? 0n)) {\n return -1;\n } else {\n return 0;\n }\n });\n\n return this.findPermissionByRule(sortedPermissions, dataArray[index]);\n });\n return filteredPermissions.every((permission) => permission !== undefined)\n ? (filteredPermissions as Permission[])\n : undefined;\n }\n\n private filterByOperation(\n permissions: Permission[],\n operation: Operation\n ): Permission[] {\n return permissions.filter(\n (permission) =>\n permission.operation === operation || Operation.Call === operation\n );\n }\n\n private filterBySignature(\n permissions: Permission[],\n signature: string\n ): Permission[] {\n return permissions.filter(\n (permission) =>\n (permission.sig ?? pad(\"0x\", { size: 4 })).toLowerCase() === signature\n );\n }\n\n private findPermissionByRule(\n permissions: Permission[],\n data: string\n ): Permission | undefined {\n return permissions.find((permission) => {\n for (const rule of permission.rules ?? []) {\n const dataParam: Hex = this.getFormattedHex(\n \"0x\" + data.slice(10 + rule.offset * 2, 10 + rule.offset * 2 + 64)\n );\n const ruleParam: Hex = this.getFormattedHex(rule.param);\n\n if (!this.evaluateRuleCondition(dataParam, ruleParam, rule.condition)) {\n return false;\n }\n }\n return true;\n });\n }\n\n private getFormattedHex(value: string): Hex {\n return pad(isHex(value) ? value : toHex(value), {\n size: 32,\n }).toLowerCase() as Hex;\n }\n\n private evaluateRuleCondition(\n dataParam: Hex,\n ruleParam: Hex,\n condition: ParamOperator\n ): boolean {\n switch (condition) {\n case ParamOperator.EQUAL:\n return dataParam === ruleParam;\n case ParamOperator.GREATER_THAN:\n return dataParam > ruleParam;\n case ParamOperator.LESS_THAN:\n return dataParam < ruleParam;\n case ParamOperator.GREATER_THAN_OR_EQUAL:\n return dataParam >= ruleParam;\n case ParamOperator.LESS_THAN_OR_EQUAL:\n return dataParam <= ruleParam;\n case ParamOperator.NOT_EQUAL:\n return dataParam !== ruleParam;\n default:\n return false;\n }\n }\n\n getMerkleTree(): MerkleTree {\n const permissionPacked = this.sessionKeyData.permissions?.map(\n (permission) => this.encodePermissionData(permission)\n );\n\n // Having one leaf returns empty array in getProof(). To hack it we push the leaf twice\n // issue - https://github.com/merkletreejs/merkletreejs/issues/58\n if (permissionPacked && permissionPacked.length === 1)\n permissionPacked.push(permissionPacked[0]);\n\n return permissionPacked && permissionPacked.length !== 0\n ? new MerkleTree(permissionPacked, keccak256, {\n hashLeaves: true,\n sortPairs: true,\n })\n : new MerkleTree([pad(\"0x00\", { size: 32 })], keccak256, {\n hashLeaves: false,\n complete: true,\n });\n }\n\n encodePermissionData(\n permission: Permission | Permission[],\n merkleProof?: string[] | string[][]\n ): Hex {\n let permissionParam = {\n components: [\n {\n name: \"index\",\n type: \"uint32\",\n },\n {\n name: \"target\",\n type: \"address\",\n },\n {\n name: \"sig\",\n type: \"bytes4\",\n },\n {\n name: \"valueLimit\",\n type: \"uint256\",\n },\n {\n components: [\n {\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"enum ParamCondition\",\n name: \"condition\",\n type: \"uint8\",\n },\n {\n name: \"param\",\n type: \"bytes32\",\n },\n ],\n name: \"rules\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n name: \"interval\",\n type: \"uint48\",\n },\n {\n name: \"runs\",\n type: \"uint48\",\n },\n {\n internalType: \"ValidAfter\",\n name: \"validAfter\",\n type: \"uint48\",\n },\n ],\n name: \"executionRule\",\n type: \"tuple\",\n },\n {\n internalType: \"enum Operation\",\n name: \"operation\",\n type: \"uint8\",\n },\n ],\n name: \"permission\",\n type: Array.isArray(permission) ? \"tuple[]\" : \"tuple\",\n };\n let params;\n let values;\n if (merkleProof) {\n params = [\n permissionParam,\n {\n name: \"merkleProof\",\n type: Array.isArray(merkleProof[0]) ? \"bytes32[][]\" : \"bytes32[]\",\n },\n ];\n values = [permission, merkleProof];\n } else {\n params = [permissionParam];\n values = [permission];\n }\n return encodeAbiParameters(params, values);\n }\n\n getSessionData(): SessionKeyParams {\n if (!this.selector || !this.executor) {\n throw Error(\"Plugin Validator data params uninitialised\");\n }\n return {\n selector: this.selector,\n executor: this.executor,\n validUntil: this.validUntil,\n validAfter: this.validAfter,\n sessionKeyData: this.sessionKeyData,\n enableSignature: this.enableSignature,\n };\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.sessionKey);\n }\n\n async getSessionNonces(\n kernelAccountAddress: Address\n ): Promise<SessionNonces> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const nonce = await this.publicClient.readContract({\n abi: SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"nonces\",\n args: [kernelAccountAddress],\n });\n return { lastNonce: nonce[0], invalidNonce: nonce[1] };\n }\n\n async getEnableData(\n kernelAccountAddress?: Address,\n enabledLastNonce?: bigint\n ): Promise<Hex> {\n if (!this.merkleTree) {\n throw Error(\"SessionKeyValidator: MerkleTree not generated\");\n }\n if (!kernelAccountAddress) {\n throw Error(\"SessionKeyValidator: Kernel account address not provided\");\n }\n const lastNonce =\n enabledLastNonce ??\n (await this.getSessionNonces(kernelAccountAddress)).lastNonce + 1n;\n return concat([\n await this.sessionKey.getAddress(),\n pad(this.merkleTree.getHexRoot() as Hex, { size: 32 }),\n pad(toHex(this.sessionKeyData.validAfter), { size: 6 }),\n pad(toHex(this.sessionKeyData.validUntil), { size: 6 }),\n this.sessionKeyData.paymaster!,\n pad(toHex(lastNonce), { size: 32 }),\n ]);\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const execDetail = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getExecution\",\n args: [selector],\n });\n const enableData = await this.publicClient.readContract({\n abi: SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"sessionData\",\n args: [await this.sessionKey.getAddress(), kernelAccountAddress],\n });\n const enableDataHex = concatHex([\n await this.sessionKey.getAddress(),\n pad(enableData[0], { size: 32 }),\n pad(toHex(enableData[1]), { size: 6 }),\n pad(toHex(enableData[2]), { size: 6 }),\n enableData[3],\n pad(toHex(enableData[4]), { size: 32 }),\n ]);\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableDataHex.toLowerCase() ===\n (\n await this.getEnableData(kernelAccountAddress, enableData[4])\n ).toLowerCase()\n );\n }\n\n async getDummyUserOpSignature(callData: Hex): Promise<Hex> {\n return concatHex([\n await this.sessionKey.getAddress(),\n DUMMY_ECDSA_SIG,\n this.getEncodedPermissionProofData(callData),\n ]);\n }\n\n private getEncodedPermissionProofData(callData: Hex): Hex {\n const matchingPermission = this.findMatchingPermissions(callData);\n if (!matchingPermission && !this.shouldDelegateViaFallback()) {\n throw Error(\n \"SessionKeyValidator: No matching permission found for the userOp\"\n );\n }\n const encodedPermissionData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission)\n : \"0x\";\n let merkleProof: string[] | string[][] = [];\n if (Array.isArray(matchingPermission)) {\n let encodedPerms = matchingPermission.map((permission) =>\n keccak256(this.encodePermissionData(permission))\n );\n merkleProof = encodedPerms.map((perm) =>\n this.merkleTree.getHexProof(perm)\n );\n } else if (matchingPermission) {\n merkleProof = this.merkleTree.getHexProof(\n keccak256(encodedPermissionData)\n );\n }\n return this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission, merkleProof)\n : \"0x\";\n }\n\n encodeEnable(sessionKeyEnableData: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"enable\",\n args: [sessionKeyEnableData],\n });\n }\n\n encodeDisable(sessionKey: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"disable\",\n args: [sessionKey],\n });\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.sessionKey.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.sessionKey.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n\n const signature = concat([\n await this.sessionKey.getAddress(),\n await this.sessionKey.signMessage(formattedMessage),\n this.getEncodedPermissionProofData(userOp.callData),\n ]);\n return signature;\n }\n}\n"]}
|
|
@@ -47,7 +47,7 @@ export type GetFunctionArgs<TAbi extends Abi | readonly unknown[], TFunctionName
|
|
|
47
47
|
} : {
|
|
48
48
|
args?: TArgs;
|
|
49
49
|
};
|
|
50
|
-
export type GeneratePermissionFromArgsParameters<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string, _FunctionName = TAbi extends Abi ? InferFunctionName<TAbi, TFunctionName> : never> = Pick<Permission, "target" | "valueLimit"> & {
|
|
50
|
+
export type GeneratePermissionFromArgsParameters<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string, _FunctionName = TAbi extends Abi ? InferFunctionName<TAbi, TFunctionName> : never> = Pick<Permission, "target" | "valueLimit" | "operation"> & {
|
|
51
51
|
functionName?: _FunctionName;
|
|
52
52
|
} & (TFunctionName extends string ? {
|
|
53
53
|
abi: Narrow<TAbi>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/types.ts"],"names":[],"mappings":"","sourcesContent":["import {\n type AbiParameter,\n type AbiParameterKind,\n type AbiParameterToPrimitiveType,\n type AbiFunction,\n type ExtractAbiFunction,\n} from \"abitype\";\nimport { type Pretty } from \"abitype/src/types.js\";\nimport type {\n ECDSAValidator,\n ECDSAValidatorParams,\n} from \"./ecdsa-validator.js\";\nimport type {\n ERC165SessionKeyValidator,\n ERC165SessionKeyValidatorParams,\n} from \"./erc165-session-key-validator.js\";\n\nimport type {\n KillSwitchValidator,\n KillSwitchValidatorParams,\n} from \"./kill-switch-validator.js\";\nimport type {\n RecoveryValidator,\n RecoveryValidatorParams,\n} from \"./recovery-validator.js\";\nimport type {\n SessionKeyValidator,\n SessionKeyValidatorParams,\n ParamRules,\n Permission,\n SessionKeyData,\n SessionKeyParams,\n ParamOperator,\n} from \"./session-key-validator.js\";\nimport type { Abi, InferFunctionName, Narrow } from \"viem\";\n\nexport type SupportedValidators =\n | \"ECDSA\"\n | \"KILL_SWITCH\"\n | \"ERC165_SESSION_KEY\"\n | \"SESSION_KEY\"\n | \"RECOVERY\";\n\nexport type ValidatorTypeMap = {\n ECDSA: ECDSAValidator;\n KILL_SWITCH: KillSwitchValidator;\n ERC165_SESSION_KEY: ERC165SessionKeyValidator;\n SESSION_KEY: SessionKeyValidator;\n RECOVERY: RecoveryValidator;\n};\n\nexport type ValidatorParamsMap = {\n ECDSA: ECDSAValidatorParams;\n KILL_SWITCH: KillSwitchValidatorParams;\n ERC165_SESSION_KEY: ERC165SessionKeyValidatorParams;\n SESSION_KEY: SessionKeyValidatorParams;\n RECOVERY: RecoveryValidatorParams;\n};\n\nexport type ValidatorMap = {\n [V in SupportedValidators]: new (\n params: ValidatorParamsMap[V]\n ) => ValidatorTypeMap[V];\n};\n\nexport type EthereumProvider = { request(...args: any): Promise<any> };\n\nexport type { ParamRules, Permission, SessionKeyData, SessionKeyParams };\n\n// Session Key types\nexport type AbiParametersToPrimitiveTypes<\n TAbiParameters extends readonly AbiParameter[],\n TAbiParameterKind extends AbiParameterKind = AbiParameterKind\n> = Pretty<{\n [K in keyof TAbiParameters]: AbiParameterToPrimitiveType<\n TAbiParameters[K],\n TAbiParameterKind\n >;\n}>;\n\nexport type AbiParametersToConditons<\n TAbiParameters extends readonly AbiParameter[]\n> = Pretty<{\n [K in keyof TAbiParameters]: ParamOperator;\n}>;\n\nexport type CombinedArgs<\n TAbiParameters extends readonly AbiParameter[],\n TAbiParameterKind extends AbiParameterKind = AbiParameterKind\n> = {\n [K in keyof TAbiParameters]: {\n operator: ParamOperator;\n value: AbiParameterToPrimitiveType<TAbiParameters[K], TAbiParameterKind>;\n } | null;\n};\n\nexport type GetFunctionArgs<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string,\n TAbiFunction extends AbiFunction = TAbi extends Abi\n ? ExtractAbiFunction<TAbi, TFunctionName>\n : AbiFunction,\n TArgs = CombinedArgs<TAbiFunction[\"inputs\"]>,\n FailedToParseArgs =\n | ([TArgs] extends [never] ? true : false)\n | (readonly unknown[] extends TArgs ? true : false)\n> = true extends FailedToParseArgs\n ? {\n args?: readonly unknown[];\n }\n : TArgs extends readonly []\n ? { args?: never }\n : {\n args?: TArgs;\n };\n\nexport type GeneratePermissionFromArgsParameters<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string | undefined = string,\n _FunctionName = TAbi extends Abi\n ? InferFunctionName<TAbi, TFunctionName>\n : never\n> = Pick<Permission, \"target\" | \"valueLimit\"> & {\n functionName?: _FunctionName;\n} & (TFunctionName extends string\n ? { abi: Narrow<TAbi> } & GetFunctionArgs<TAbi, TFunctionName>\n : _FunctionName extends string\n ? { abi: [Narrow<TAbi[number]>] } & GetFunctionArgs<TAbi, _FunctionName>\n : never);\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/types.ts"],"names":[],"mappings":"","sourcesContent":["import {\n type AbiParameter,\n type AbiParameterKind,\n type AbiParameterToPrimitiveType,\n type AbiFunction,\n type ExtractAbiFunction,\n} from \"abitype\";\nimport { type Pretty } from \"abitype/src/types.js\";\nimport type {\n ECDSAValidator,\n ECDSAValidatorParams,\n} from \"./ecdsa-validator.js\";\nimport type {\n ERC165SessionKeyValidator,\n ERC165SessionKeyValidatorParams,\n} from \"./erc165-session-key-validator.js\";\n\nimport type {\n KillSwitchValidator,\n KillSwitchValidatorParams,\n} from \"./kill-switch-validator.js\";\nimport type {\n RecoveryValidator,\n RecoveryValidatorParams,\n} from \"./recovery-validator.js\";\nimport type {\n SessionKeyValidator,\n SessionKeyValidatorParams,\n ParamRules,\n Permission,\n SessionKeyData,\n SessionKeyParams,\n ParamOperator,\n} from \"./session-key-validator.js\";\nimport type { Abi, InferFunctionName, Narrow } from \"viem\";\n\nexport type SupportedValidators =\n | \"ECDSA\"\n | \"KILL_SWITCH\"\n | \"ERC165_SESSION_KEY\"\n | \"SESSION_KEY\"\n | \"RECOVERY\";\n\nexport type ValidatorTypeMap = {\n ECDSA: ECDSAValidator;\n KILL_SWITCH: KillSwitchValidator;\n ERC165_SESSION_KEY: ERC165SessionKeyValidator;\n SESSION_KEY: SessionKeyValidator;\n RECOVERY: RecoveryValidator;\n};\n\nexport type ValidatorParamsMap = {\n ECDSA: ECDSAValidatorParams;\n KILL_SWITCH: KillSwitchValidatorParams;\n ERC165_SESSION_KEY: ERC165SessionKeyValidatorParams;\n SESSION_KEY: SessionKeyValidatorParams;\n RECOVERY: RecoveryValidatorParams;\n};\n\nexport type ValidatorMap = {\n [V in SupportedValidators]: new (\n params: ValidatorParamsMap[V]\n ) => ValidatorTypeMap[V];\n};\n\nexport type EthereumProvider = { request(...args: any): Promise<any> };\n\nexport type { ParamRules, Permission, SessionKeyData, SessionKeyParams };\n\n// Session Key types\nexport type AbiParametersToPrimitiveTypes<\n TAbiParameters extends readonly AbiParameter[],\n TAbiParameterKind extends AbiParameterKind = AbiParameterKind\n> = Pretty<{\n [K in keyof TAbiParameters]: AbiParameterToPrimitiveType<\n TAbiParameters[K],\n TAbiParameterKind\n >;\n}>;\n\nexport type AbiParametersToConditons<\n TAbiParameters extends readonly AbiParameter[]\n> = Pretty<{\n [K in keyof TAbiParameters]: ParamOperator;\n}>;\n\nexport type CombinedArgs<\n TAbiParameters extends readonly AbiParameter[],\n TAbiParameterKind extends AbiParameterKind = AbiParameterKind\n> = {\n [K in keyof TAbiParameters]: {\n operator: ParamOperator;\n value: AbiParameterToPrimitiveType<TAbiParameters[K], TAbiParameterKind>;\n } | null;\n};\n\nexport type GetFunctionArgs<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string,\n TAbiFunction extends AbiFunction = TAbi extends Abi\n ? ExtractAbiFunction<TAbi, TFunctionName>\n : AbiFunction,\n TArgs = CombinedArgs<TAbiFunction[\"inputs\"]>,\n FailedToParseArgs =\n | ([TArgs] extends [never] ? true : false)\n | (readonly unknown[] extends TArgs ? true : false)\n> = true extends FailedToParseArgs\n ? {\n args?: readonly unknown[];\n }\n : TArgs extends readonly []\n ? { args?: never }\n : {\n args?: TArgs;\n };\n\nexport type GeneratePermissionFromArgsParameters<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string | undefined = string,\n _FunctionName = TAbi extends Abi\n ? InferFunctionName<TAbi, TFunctionName>\n : never\n> = Pick<Permission, \"target\" | \"valueLimit\" | \"operation\"> & {\n functionName?: _FunctionName;\n} & (TFunctionName extends string\n ? { abi: Narrow<TAbi> } & GetFunctionArgs<TAbi, TFunctionName>\n : _FunctionName extends string\n ? { abi: [Narrow<TAbi[number]>] } & GetFunctionArgs<TAbi, _FunctionName>\n : never);\n"]}
|
|
@@ -16,7 +16,7 @@ export declare const KILL_SWITCH_ACTION = "0x3f38e479304c7F18F988269a1bDa7d646bd
|
|
|
16
16
|
export declare const DUMMY_ECDSA_SIG = "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
|
|
17
17
|
export declare const ERC165_SESSION_KEY_VALIDATOR_ADDRESS = "0xe149290800De29D4b0BF9dB82c508255D81902E6";
|
|
18
18
|
export declare const TOKEN_ACTION = "0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1";
|
|
19
|
-
export declare const SESSION_KEY_VALIDATOR_ADDRESS = "
|
|
19
|
+
export declare const SESSION_KEY_VALIDATOR_ADDRESS = "0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5";
|
|
20
20
|
export declare const RECOVERY_VALIDATOR_ADDRESS = "0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6";
|
|
21
21
|
export declare const RECOVERY_ACTION = "0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1";
|
|
22
22
|
export declare const oneAddress = "0x0000000000000000000000000000000000000001";
|
|
@@ -16,7 +16,7 @@ export const KILL_SWITCH_ACTION = "0x3f38e479304c7F18F988269a1bDa7d646bd48243";
|
|
|
16
16
|
export const DUMMY_ECDSA_SIG = "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
|
|
17
17
|
export const ERC165_SESSION_KEY_VALIDATOR_ADDRESS = "0xe149290800De29D4b0BF9dB82c508255D81902E6";
|
|
18
18
|
export const TOKEN_ACTION = "0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1";
|
|
19
|
-
export const SESSION_KEY_VALIDATOR_ADDRESS = "
|
|
19
|
+
export const SESSION_KEY_VALIDATOR_ADDRESS = "0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5";
|
|
20
20
|
export const RECOVERY_VALIDATOR_ADDRESS = "0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6";
|
|
21
21
|
export const RECOVERY_ACTION = "0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1";
|
|
22
22
|
export const oneAddress = "0x0000000000000000000000000000000000000001";
|
|
@@ -68,7 +68,7 @@ export const CHAIN_ID_TO_NODE = {
|
|
|
68
68
|
204: "https://opbnb.rpc.thirdweb.com/eed98c1f30120c0508f17c1f01d3102b",
|
|
69
69
|
42069: "https://rpc.op-testnet.gelato.digital",
|
|
70
70
|
1261120: "https://rpc.zkatana.gelato.digital",
|
|
71
|
-
84532:
|
|
71
|
+
84532: 'https://floral-old-feather.base-sepolia.quiknode.pro/4c3b4295d0c174410872b1e461a91cc33c7969a9/',
|
|
72
72
|
421614: `https://arbitrum-sepolia.infura.io/v3/${INFURA_API_KEY}`,
|
|
73
73
|
11155420: `https://optimism-sepolia.infura.io/v3/${INFURA_API_KEY}`,
|
|
74
74
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAY,MAAM,MAAM,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,iCAAiC,GAAG,KAAK,CAAC;AACvD,MAAM,CAAC,MAAM,WAAW,GACtB,sDAAsD,CAAC;AACzD,MAAM,CAAC,MAAM,aAAa,GACxB,wDAAwD,CAAC;AAC3D,MAAM,CAAC,MAAM,kBAAkB,GAC7B,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,cAAc,GAAQ,4CAA4C,CAAC;AAChF,MAAM,CAAC,MAAM,WAAW,GAAG,mCAAmC,CAAC;AAC/D,MAAM,CAAC,MAAM,OAAO,GAAG,8BAA8B,CAAC;AACtD,MAAM,CAAC,MAAM,uBAAuB,GAClC,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,sBAAsB,GACjC,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,mBAAmB,GAAG,4CAA4C,CAAC;AAChF,MAAM,CAAC,MAAM,6BAA6B,GACxC,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,4CAA4C,CAAC;AAC/E,MAAM,CAAC,MAAM,eAAe,GAC1B,sIAAsI,CAAC;AACzI,MAAM,CAAC,MAAM,oCAAoC,GAC/C,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAG,4CAA4C,CAAC;AACzE,MAAM,CAAC,MAAM,6BAA6B,GACxC,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,0BAA0B,GACrC,4CAA4C,CAAC;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,4CAA4C,CAAC;AAC5E,MAAM,CAAC,MAAM,UAAU,GAAG,4CAA4C,CAAC;AAEvE,MAAM,CAAC,MAAM,sBAAsB,GAAuB;IACxD,IAAI,EAAE;QACJ,CAAC,EAAE,4CAA4C;QAE/C,GAAG,EAAE,4CAA4C;QAGjD,KAAK,EAAE,4CAA4C;QAEnD,KAAK,EAAE,4CAA4C;KAIpD;IACD,IAAI,EAAE;QACJ,CAAC,EAAE,4CAA4C;KAChD;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAA8B;IAE9D,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAGzD,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAGzD,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAG1D,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAG5D,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAG5D,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC;IAE/D,4CAA4C,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;CACpE,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAiB;IAClE,CAAC,OAAO,CAAC,EAAE,EAAE,YAAe,CAAC;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,kCAAkC,CAAC;AACjE,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACzD,CAAC,EAAE,gCAAgC,cAAc,EAAE;IACnD,CAAC,EAAE,+BAA+B,cAAc,EAAE;IAClD,QAAQ,EACN,oGAAoG;IACtG,GAAG,EAAE,wCAAwC,cAAc,EAAE;IAC7D,KAAK,EAAE,uCAAuC,cAAc,EAAE;IAC9D,EAAE,EAAE,yCAAyC,cAAc,EAAE;IAC7D,GAAG,EAAE,wCAAwC,cAAc,EAAE;IAC7D,KAAK,EAAE,yCAAyC,cAAc,EAAE;IAEhE,MAAM,EAAE,wCAAwC,cAAc,EAAE;IAChE,KAAK,EAAE,0CAA0C,cAAc,EAAE;IACjE,KAAK,EAAE,uCAAuC,cAAc,EAAE;IAC9D,UAAU,EAAE,uCAAuC,cAAc,EAAE;IACnE,UAAU,EAAE,uCAAuC,cAAc,EAAE;IACnE,EAAE,EAAE,wFAAwF;IAC5F,IAAI,EAAE,+FAA+F;IACrG,KAAK,EACH,8FAA8F;IAChG,GAAG,EAAE,2FAA2F;IAChG,KAAK,EAAE,oEAAoE;IAC3E,KAAK,EAAE,sCAAsC,cAAc,EAAE;IAC7D,KAAK,EAAE,qCAAqC,cAAc,EAAE;IAC5D,GAAG,EAAE,iEAAiE;IACtE,KAAK,EAAE,uCAAuC;IAC9C,OAAO,EAAE,oCAAoC;IAC7C,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/constants.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseUnits, type Hex } from \"viem\";\nimport type { IGasTokenAddresses } from \"./paymaster/types.js\";\nimport { polygon } from \"viem/chains\";\n\nexport const DEFAULT_SEND_TX_MAX_RETRIES = 3;\nexport const DEFAULT_SEND_TX_RETRY_INTERVAL_MS = 60000; // 1 minutes\nexport const BUNDLER_URL =\n \"https://meta-aa-provider.onrender.com/api/v1/bundler\";\nexport const PAYMASTER_URL =\n \"https://meta-aa-provider.onrender.com/api/v1/paymaster\";\nexport const ENTRYPOINT_ADDRESS: Hex =\n \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\";\nexport const MULTISEND_ADDR: Hex = \"0x8ae01fcf7c655655ff2c6ef907b8b4718ab4e17c\";\nexport const BACKEND_URL = \"https://backend-vikp.onrender.com\";\nexport const API_URL = \"https://prod-api.zerodev.app\";\nexport const ECDSA_VALIDATOR_ADDRESS =\n \"0xd9AB5096a832b9ce79914329DAEE236f8Eea0390\";\nexport const KERNEL_FACTORY_ADDRESS =\n \"0x5de4839a76cf55d0c90e2061ef4386d962E15ae3\";\nexport const KERNEL_IMPL_ADDRESS = \"0x0DA6a956B9488eD4dd761E59f52FDc6c8068E6B5\";\nexport const KILL_SWITCH_VALIDATOR_ADDRESS =\n \"0x7393A7dA58CCfFb78f52adb09705BE6E20F704BC\";\nexport const KILL_SWITCH_ACTION = \"0x3f38e479304c7F18F988269a1bDa7d646bd48243\";\nexport const DUMMY_ECDSA_SIG =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\nexport const ERC165_SESSION_KEY_VALIDATOR_ADDRESS =\n \"0xe149290800De29D4b0BF9dB82c508255D81902E6\";\nexport const TOKEN_ACTION = \"0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1\";\nexport const SESSION_KEY_VALIDATOR_ADDRESS =\n \"0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5\";\nexport const RECOVERY_VALIDATOR_ADDRESS =\n \"0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6\";\nexport const RECOVERY_ACTION = \"0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1\";\nexport const oneAddress = \"0x0000000000000000000000000000000000000001\";\n\nexport const gasTokenChainAddresses: IGasTokenAddresses = {\n USDC: {\n 1: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n // 5: \"0x2f3A40A3db8a7e3D09B0adfEfbCe4f6F81927557\",\n 137: \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n // 80001: \"\",\n // 420: \"0x7F5c764cBc14f9669B88837ca1490cCa17c31607\",\n 42161: \"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8\",\n // 421613: \"\",\n 43114: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n // 43113: \"\",\n // 56: \"\",\n // 97: \"\"\n },\n PEPE: {\n 1: \"0x6982508145454Ce325dDbE47a25d4ec3d2311933\",\n },\n};\n\nexport const ERC20_APPROVAL_AMOUNT: { [key: string]: bigint } = {\n // ETH\n [gasTokenChainAddresses[\"USDC\"][1]]: parseUnits(\"100\", 6),\n\n // Goerli\n [gasTokenChainAddresses[\"USDC\"][5]]: parseUnits(\"100\", 6),\n\n // Polygon\n [gasTokenChainAddresses[\"USDC\"][137]]: parseUnits(\"10\", 6),\n\n // Arbitrum\n [gasTokenChainAddresses[\"USDC\"][42161]]: parseUnits(\"10\", 6),\n\n // Avalanche\n [gasTokenChainAddresses[\"USDC\"][43114]]: parseUnits(\"10\", 6),\n\n // ETH\n [gasTokenChainAddresses[\"PEPE\"][1]]: parseUnits(\"50000000\", 18),\n\n \"0x3870419Ba2BBf0127060bCB37f69A1b1C090992B\": parseUnits(\"100\", 18),\n};\n\nexport const minPriorityFeePerBidDefaults = new Map<number, bigint>([\n [polygon.id, 30_000_000_000n],\n]);\n\nexport const INFURA_API_KEY = \"f36f7f706a58477884ce6fe89165666c\";\nexport const CHAIN_ID_TO_NODE: { [key: number]: string } = {\n 1: `https://mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 5: `https://goerli.infura.io/v3/${INFURA_API_KEY}`,\n 11155111:\n \"https://fittest-ultra-aura.ethereum-sepolia.quiknode.pro/3893d01b1dd411fdfa9b6dd372dd2b4f69fcf1ea/\",\n 137: `https://polygon-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 80001: `https://polygon-mumbai.infura.io/v3/${INFURA_API_KEY}`,\n 10: `https://optimism-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 420: `https://optimism-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 42161: `https://arbitrum-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n // 42161: 'https://evocative-stylish-dinghy.arbitrum-mainnet.discover.quiknode.pro/80b526d14fa9fd9a8b0db1e65554acaf00c6a1ab/',\n 421613: `https://arbitrum-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 43114: `https://avalanche-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 43113: `https://avalanche-fuji.infura.io/v3/${INFURA_API_KEY}`,\n 1313161554: `https://aurora-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 1313161555: `https://aurora-testnet.infura.io/v3/${INFURA_API_KEY}`,\n 56: \"https://neat-greatest-layer.bsc.quiknode.pro/9405a499ceee314e5f2f68c9d47518d3537fce6a/\",\n 8453: \"https://twilight-red-tree.base-mainnet.quiknode.pro/dc6eb27bf0f917df215922488dd97f4de7d9b08e/\",\n 84531:\n \"https://icy-long-mountain.base-goerli.quiknode.pro/5b80d93e97cc9412a63c10a30841869abbef9596/\",\n 100: \"https://thrilling-fluent-film.xdai.quiknode.pro/305955cffb9868cdd95b5e3dc9775f20678ad9ac/\",\n 10200: \"https://nd-810-853-201.p2pify.com/e828b09f0d43591de96c297b3f36fffd\",\n 59144: `https://linea-mainnet.infura.io/v3/${INFURA_API_KEY}`,\n 59140: `https://linea-goerli.infura.io/v3/${INFURA_API_KEY}`,\n 204: \"https://opbnb.rpc.thirdweb.com/eed98c1f30120c0508f17c1f01d3102b\",\n 42069: \"https://rpc.op-testnet.gelato.digital\",\n 1261120: \"https://rpc.zkatana.gelato.digital\",\n 84532: 'https://floral-old-feather.base-sepolia.quiknode.pro/4c3b4295d0c174410872b1e461a91cc33c7969a9/',\n 421614: `https://arbitrum-sepolia.infura.io/v3/${INFURA_API_KEY}`,\n 11155420: `https://optimism-sepolia.infura.io/v3/${INFURA_API_KEY}`,\n // 5611: 'opBnb-testnet',\n};\n"]}
|
|
@@ -4,6 +4,7 @@ import { type GetAbiItemParameters } from "viem";
|
|
|
4
4
|
import { MerkleTree } from "merkletreejs";
|
|
5
5
|
import type { GetAbiItemReturnType } from "viem/dist/types/utils/abi/getAbiItem.js";
|
|
6
6
|
import type { GeneratePermissionFromArgsParameters } from "./types.js";
|
|
7
|
+
import { Operation } from "../provider.js";
|
|
7
8
|
export interface SessionKeyValidatorParams extends KernelBaseValidatorParams {
|
|
8
9
|
sessionKey: SmartAccountSigner;
|
|
9
10
|
sessionKeyData: SessionKeyData;
|
|
@@ -42,6 +43,7 @@ export type Permission = {
|
|
|
42
43
|
sig?: Hex;
|
|
43
44
|
valueLimit?: bigint;
|
|
44
45
|
executionRule?: ExecutionRule;
|
|
46
|
+
operation?: Operation;
|
|
45
47
|
};
|
|
46
48
|
export interface SessionKeyData {
|
|
47
49
|
validUntil: number;
|
|
@@ -50,7 +52,7 @@ export interface SessionKeyData {
|
|
|
50
52
|
permissions?: Permission[];
|
|
51
53
|
}
|
|
52
54
|
export declare function getAbiItem<TAbi extends Abi | readonly unknown[], TItemName extends string>({ abi, args, name, }: GetAbiItemParameters<TAbi, TItemName>): GetAbiItemReturnType<TAbi, TItemName>;
|
|
53
|
-
export declare function getPermissionFromABI<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string>({ abi, target, args, functionName, valueLimit, }: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Permission;
|
|
55
|
+
export declare function getPermissionFromABI<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string>({ abi, target, args, functionName, valueLimit, operation, }: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Permission;
|
|
54
56
|
export declare class SessionKeyValidator extends KernelBaseValidator {
|
|
55
57
|
protected sessionKey: SmartAccountSigner;
|
|
56
58
|
sessionKeyData: SessionKeyData;
|
|
@@ -60,6 +62,7 @@ export declare class SessionKeyValidator extends KernelBaseValidator {
|
|
|
60
62
|
shouldDelegateViaFallback(): boolean;
|
|
61
63
|
findMatchingPermissions(callData: Hex): Permission | Permission[] | undefined;
|
|
62
64
|
private filterPermissions;
|
|
65
|
+
private filterByOperation;
|
|
63
66
|
private filterBySignature;
|
|
64
67
|
private findPermissionByRule;
|
|
65
68
|
private getFormattedHex;
|
|
@@ -9,6 +9,7 @@ import { MerkleTree } from "merkletreejs";
|
|
|
9
9
|
import { getChainId } from "../api/index.js";
|
|
10
10
|
import { fixSignedData, getChain } from "../utils.js";
|
|
11
11
|
import {} from "abitype";
|
|
12
|
+
import { Operation } from "../provider.js";
|
|
12
13
|
BigInt.prototype.toJSON = function () {
|
|
13
14
|
return this.toString();
|
|
14
15
|
};
|
|
@@ -53,7 +54,7 @@ export function getAbiItem({ abi, args = [], name, }) {
|
|
|
53
54
|
.map((item) => formatAbiItem(item))
|
|
54
55
|
.reduce((a, c) => `${a}\n${c}`)}`);
|
|
55
56
|
}
|
|
56
|
-
export function getPermissionFromABI({ abi, target, args, functionName, valueLimit, }) {
|
|
57
|
+
export function getPermissionFromABI({ abi, target, args, functionName, valueLimit, operation, }) {
|
|
57
58
|
const abiItem = getAbiItem({
|
|
58
59
|
abi,
|
|
59
60
|
args,
|
|
@@ -80,6 +81,7 @@ export function getPermissionFromABI({ abi, target, args, functionName, valueLim
|
|
|
80
81
|
rules: paramRules,
|
|
81
82
|
target,
|
|
82
83
|
valueLimit: valueLimit ?? 0n,
|
|
84
|
+
operation: operation ?? Operation.Call,
|
|
83
85
|
};
|
|
84
86
|
}
|
|
85
87
|
export class SessionKeyValidator extends KernelBaseValidator {
|
|
@@ -121,6 +123,7 @@ export class SessionKeyValidator extends KernelBaseValidator {
|
|
|
121
123
|
interval: 0,
|
|
122
124
|
runs: 0,
|
|
123
125
|
},
|
|
126
|
+
operation: perm.operation ?? Operation.Call,
|
|
124
127
|
}));
|
|
125
128
|
this.merkleTree = this.getMerkleTree();
|
|
126
129
|
this.selector =
|
|
@@ -180,12 +183,13 @@ export class SessionKeyValidator extends KernelBaseValidator {
|
|
|
180
183
|
if (!permissionsList || !permissionsList.length)
|
|
181
184
|
return undefined;
|
|
182
185
|
const targetToMatch = target.toLowerCase();
|
|
183
|
-
let targetPermissions = permissionsList.filter((permission) => permission.target.toLowerCase() === targetToMatch
|
|
184
|
-
|
|
185
|
-
targetPermissions = permissionsList.filter((permission) => permission.target.toLowerCase() === zeroAddress.toLowerCase());
|
|
186
|
-
}
|
|
186
|
+
let targetPermissions = permissionsList.filter((permission) => permission.target.toLowerCase() === targetToMatch ||
|
|
187
|
+
permission.target.toLowerCase() === zeroAddress.toLowerCase());
|
|
187
188
|
if (!targetPermissions.length)
|
|
188
189
|
return undefined;
|
|
190
|
+
const operationPermissions = this.filterByOperation(targetPermissions, Operation.Call);
|
|
191
|
+
if (!operationPermissions.length)
|
|
192
|
+
return undefined;
|
|
189
193
|
const signaturePermissions = this.filterBySignature(targetPermissions, dataArray[index].slice(0, 10).toLowerCase());
|
|
190
194
|
const valueLimitPermissions = signaturePermissions.filter((permission) => (permission.valueLimit ?? 0n) >= values[index]);
|
|
191
195
|
if (!valueLimitPermissions.length)
|
|
@@ -207,6 +211,9 @@ export class SessionKeyValidator extends KernelBaseValidator {
|
|
|
207
211
|
? filteredPermissions
|
|
208
212
|
: undefined;
|
|
209
213
|
}
|
|
214
|
+
filterByOperation(permissions, operation) {
|
|
215
|
+
return permissions.filter((permission) => permission.operation === operation || Operation.Call === operation);
|
|
216
|
+
}
|
|
210
217
|
filterBySignature(permissions, signature) {
|
|
211
218
|
return permissions.filter((permission) => (permission.sig ?? pad("0x", { size: 4 })).toLowerCase() === signature);
|
|
212
219
|
}
|
|
@@ -316,6 +323,11 @@ export class SessionKeyValidator extends KernelBaseValidator {
|
|
|
316
323
|
name: "executionRule",
|
|
317
324
|
type: "tuple",
|
|
318
325
|
},
|
|
326
|
+
{
|
|
327
|
+
internalType: "enum Operation",
|
|
328
|
+
name: "operation",
|
|
329
|
+
type: "uint8",
|
|
330
|
+
},
|
|
319
331
|
],
|
|
320
332
|
name: "permission",
|
|
321
333
|
type: Array.isArray(permission) ? "tuple[]" : "tuple",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-key-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/session-key-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n type Abi,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n type ValidatorPluginData,\n} from \"./base.js\";\nimport {\n encodeFunctionData,\n toBytes,\n concat,\n pad,\n toHex,\n encodeAbiParameters,\n concatHex,\n zeroAddress,\n decodeFunctionData,\n isHex,\n getFunctionSelector,\n type GetAbiItemParameters,\n keccak256,\n} from \"viem\";\nimport { formatAbiItem } from \"viem/utils\";\nimport { SessionKeyValidatorAbi } from \"../abis/SessionKeyValidatorAbi.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MerkleTree } from \"merkletreejs\";\nimport { getChainId } from \"../api/index.js\";\nimport { fixSignedData, getChain } from \"../utils.js\";\nimport type { GetAbiItemReturnType } from \"viem/dist/types/utils/abi/getAbiItem.js\";\nimport { type AbiFunction } from \"abitype\";\nimport type {\n CombinedArgs,\n GeneratePermissionFromArgsParameters,\n} from \"./types.js\";\n\n// We need to be able to serialize bigint to transmit session key over\n// the network.\n// Using this trick: https://github.com/GoogleChromeLabs/jsbi/issues/30#issuecomment-1006086291\n(BigInt.prototype as any).toJSON = function () {\n return this.toString();\n};\n\nexport interface SessionKeyValidatorParams extends KernelBaseValidatorParams {\n sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n}\n\nexport type SessionKeyParams = Pick<\n SessionKeyValidatorParams,\n \"sessionKeyData\" | \"enableSignature\"\n> &\n ValidatorPluginData & {\n sessionPrivateKey?: Hex;\n initCode?: Hex;\n accountAddress?: Address;\n };\n\nexport enum ParamOperator {\n EQUAL = 0,\n GREATER_THAN = 1,\n LESS_THAN = 2,\n GREATER_THAN_OR_EQUAL = 3,\n LESS_THAN_OR_EQUAL = 4,\n NOT_EQUAL = 5,\n}\n\nexport type SessionNonces = {\n lastNonce: bigint;\n invalidNonce: bigint;\n};\n\nexport type ExecutionRule = {\n validAfter: number; // 48 bits\n interval: number; // 48 bits\n runs: number; // 48 bits\n};\nexport interface ParamRules {\n offset: number;\n condition: ParamOperator;\n param: Hex;\n}\n\nexport type Permission = {\n target: Address;\n index?: number;\n rules?: ParamRules[];\n sig?: Hex;\n valueLimit?: bigint;\n executionRule?: ExecutionRule;\n};\n\nexport interface SessionKeyData {\n validUntil: number;\n validAfter: number;\n paymaster?: Address;\n permissions?: Permission[];\n}\n\nexport function getAbiItem<\n TAbi extends Abi | readonly unknown[],\n TItemName extends string\n>({\n abi,\n args = [],\n name,\n}: GetAbiItemParameters<TAbi, TItemName>): GetAbiItemReturnType<\n TAbi,\n TItemName\n> {\n const abiItems = (abi as Abi).filter((x) => \"name\" in x && x.name === name);\n if (abiItems.length === 0) return undefined as any;\n if (abiItems.length === 1) return abiItems[0] as any;\n const abiItemsParamFiltered = [];\n for (const abiItem of abiItems) {\n if (!(\"inputs\" in abiItem)) continue;\n if (!args || args.length === 0) {\n if (!abiItem.inputs || abiItem.inputs.length === 0) return abiItem as any;\n continue;\n }\n if (!abiItem.inputs) continue;\n if (abiItem.inputs.length === 0) continue;\n if (abiItem.inputs.length !== args.length) continue;\n abiItemsParamFiltered.push(abiItem);\n }\n if (abiItemsParamFiltered.length === 0) return abiItems[0] as any;\n else if (abiItemsParamFiltered.length === 1)\n return abiItemsParamFiltered[0] as any;\n else\n throw Error(\n `Couldn't parse funtion signature using params, set appropriate one from below:\\n${abiItemsParamFiltered\n .map((item) => formatAbiItem(item))\n .reduce((a, c) => `${a}\\n${c}`)}`\n );\n}\n\nexport function getPermissionFromABI<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string | undefined = string\n>({\n abi,\n target,\n args,\n functionName,\n valueLimit,\n}: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Permission {\n const abiItem = getAbiItem({\n abi,\n args,\n name: functionName,\n } as GetAbiItemParameters);\n if (abiItem.type !== \"function\") {\n throw Error(`${functionName} not found in abi`);\n }\n const functionSelector = getFunctionSelector(abiItem);\n let paramRules: ParamRules[] = [];\n if (args && Array.isArray(args)) {\n paramRules = (args as CombinedArgs<AbiFunction[\"inputs\"]>)\n .map(\n (arg, i) =>\n arg && {\n param: pad(\n isHex(arg.value)\n ? arg.value\n : toHex(arg.value as Parameters<typeof toHex>[0]),\n { size: 32 }\n ),\n offset: i * 32,\n condition: arg.operator,\n }\n )\n .filter((rule) => rule) as ParamRules[];\n }\n return {\n sig: functionSelector,\n rules: paramRules,\n target,\n valueLimit: valueLimit ?? 0n,\n };\n}\n\nexport class SessionKeyValidator extends KernelBaseValidator {\n protected sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n merkleTree: MerkleTree;\n\n constructor(params: SessionKeyValidatorParams) {\n super(params);\n this.sessionKey = params.sessionKey;\n this.sessionKeyData = {\n ...params.sessionKeyData,\n validAfter: params.sessionKeyData.validAfter ?? 0,\n validUntil: params.sessionKeyData.validUntil ?? 0,\n paymaster: params.sessionKeyData.paymaster ?? zeroAddress,\n };\n this.sessionKeyData.permissions = this.sessionKeyData.permissions?.map(\n (perm, index) => ({\n ...perm,\n valueLimit: perm.valueLimit ?? 0n,\n sig: perm.sig ?? pad(\"0x\", { size: 4 }),\n rules: perm.rules ?? [],\n index,\n executionRule: perm.executionRule ?? {\n validAfter: 0,\n interval: 0,\n runs: 0,\n },\n })\n );\n this.merkleTree = this.getMerkleTree();\n this.selector =\n params.selector ??\n getFunctionSelector(\"execute(address, uint256, bytes, uint8)\");\n this.executor = params.executor ?? zeroAddress;\n this.mode = params.mode ?? ValidatorMode.plugin;\n }\n\n public static async init(\n params: SessionKeyValidatorParams\n ): Promise<SessionKeyValidator> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new SessionKeyValidator({ ...params, chain });\n return instance;\n }\n\n shouldDelegateViaFallback(): boolean {\n return this.merkleTree.getHexRoot() === pad(\"0x00\", { size: 32 });\n }\n\n findMatchingPermissions(\n callData: Hex\n ): Permission | Permission[] | undefined {\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: callData,\n });\n\n if (functionName !== \"execute\" && functionName !== \"executeBatch\")\n return undefined;\n if (functionName === \"execute\") {\n const [to, value, data] = args;\n return this.filterPermissions([to], [data], [value])?.[0];\n } else if (functionName === \"executeBatch\") {\n let targets: Hex[] = [],\n values: bigint[] = [],\n dataArray: Hex[] = [];\n args[0].forEach((arg) => {\n targets.push(arg.to);\n values.push(arg.value);\n dataArray.push(arg.data);\n });\n return this.filterPermissions(targets, dataArray, values);\n } else {\n throw Error(\"Invalid function\");\n }\n } catch (error) {\n return undefined;\n }\n }\n\n private filterPermissions(\n targets: Address[],\n dataArray: Hex[],\n values: bigint[]\n ): Permission[] | undefined {\n if (\n targets.length !== dataArray.length ||\n targets.length !== values.length\n ) {\n throw Error(\"Invalid arguments\");\n }\n const filteredPermissions = targets.map((target, index) => {\n const permissionsList = this.sessionKeyData.permissions;\n if (!permissionsList || !permissionsList.length) return undefined;\n\n const targetToMatch = target.toLowerCase();\n\n // Filter permissions by target\n let targetPermissions = permissionsList.filter(\n (permission) => permission.target.toLowerCase() === targetToMatch\n );\n\n // If no permissions match the exact target, check for generic permissions (using zero address)\n if (!targetPermissions.length) {\n targetPermissions = permissionsList.filter(\n (permission) =>\n permission.target.toLowerCase() === zeroAddress.toLowerCase()\n );\n }\n\n if (!targetPermissions.length) return undefined;\n\n const signaturePermissions = this.filterBySignature(\n targetPermissions,\n dataArray[index].slice(0, 10).toLowerCase()\n );\n\n const valueLimitPermissions = signaturePermissions.filter(\n (permission) => (permission.valueLimit ?? 0n) >= values[index]\n );\n\n if (!valueLimitPermissions.length) return undefined;\n\n const sortedPermissions = valueLimitPermissions.sort((a, b) => {\n if ((b.valueLimit ?? 0n) > (a.valueLimit ?? 0n)) {\n return 1;\n } else if ((b.valueLimit ?? 0n) < (a.valueLimit ?? 0n)) {\n return -1;\n } else {\n return 0;\n }\n });\n\n return this.findPermissionByRule(sortedPermissions, dataArray[index]);\n });\n return filteredPermissions.every((permission) => permission !== undefined)\n ? (filteredPermissions as Permission[])\n : undefined;\n }\n\n private filterBySignature(\n permissions: Permission[],\n signature: string\n ): Permission[] {\n return permissions.filter(\n (permission) =>\n (permission.sig ?? pad(\"0x\", { size: 4 })).toLowerCase() === signature\n );\n }\n\n private findPermissionByRule(\n permissions: Permission[],\n data: string\n ): Permission | undefined {\n return permissions.find((permission) => {\n for (const rule of permission.rules ?? []) {\n const dataParam: Hex = this.getFormattedHex(\n \"0x\" + data.slice(10 + rule.offset * 2, 10 + rule.offset * 2 + 64)\n );\n const ruleParam: Hex = this.getFormattedHex(rule.param);\n\n if (!this.evaluateRuleCondition(dataParam, ruleParam, rule.condition)) {\n return false;\n }\n }\n return true;\n });\n }\n\n private getFormattedHex(value: string): Hex {\n return pad(isHex(value) ? value : toHex(value), {\n size: 32,\n }).toLowerCase() as Hex;\n }\n\n private evaluateRuleCondition(\n dataParam: Hex,\n ruleParam: Hex,\n condition: ParamOperator\n ): boolean {\n switch (condition) {\n case ParamOperator.EQUAL:\n return dataParam === ruleParam;\n case ParamOperator.GREATER_THAN:\n return dataParam > ruleParam;\n case ParamOperator.LESS_THAN:\n return dataParam < ruleParam;\n case ParamOperator.GREATER_THAN_OR_EQUAL:\n return dataParam >= ruleParam;\n case ParamOperator.LESS_THAN_OR_EQUAL:\n return dataParam <= ruleParam;\n case ParamOperator.NOT_EQUAL:\n return dataParam !== ruleParam;\n default:\n return false;\n }\n }\n\n getMerkleTree(): MerkleTree {\n const permissionPacked = this.sessionKeyData.permissions?.map(\n (permission) => this.encodePermissionData(permission)\n );\n\n // Having one leaf returns empty array in getProof(). To hack it we push the leaf twice\n // issue - https://github.com/merkletreejs/merkletreejs/issues/58\n if (permissionPacked && permissionPacked.length === 1)\n permissionPacked.push(permissionPacked[0]);\n\n return permissionPacked && permissionPacked.length !== 0\n ? new MerkleTree(permissionPacked, keccak256, {\n hashLeaves: true,\n sortPairs: true,\n })\n : new MerkleTree([pad(\"0x00\", { size: 32 })], keccak256, {\n hashLeaves: false,\n complete: true,\n });\n }\n\n encodePermissionData(\n permission: Permission | Permission[],\n merkleProof?: string[] | string[][]\n ): Hex {\n let permissionParam = {\n components: [\n {\n name: \"index\",\n type: \"uint32\",\n },\n {\n name: \"target\",\n type: \"address\",\n },\n {\n name: \"sig\",\n type: \"bytes4\",\n },\n {\n name: \"valueLimit\",\n type: \"uint256\",\n },\n {\n components: [\n {\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"enum ParamCondition\",\n name: \"condition\",\n type: \"uint8\",\n },\n {\n name: \"param\",\n type: \"bytes32\",\n },\n ],\n name: \"rules\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n name: \"interval\",\n type: \"uint48\",\n },\n {\n name: \"runs\",\n type: \"uint48\",\n },\n {\n internalType: \"ValidAfter\",\n name: \"validAfter\",\n type: \"uint48\",\n },\n ],\n name: \"executionRule\",\n type: \"tuple\",\n },\n ],\n name: \"permission\",\n type: Array.isArray(permission) ? \"tuple[]\" : \"tuple\",\n };\n let params;\n let values;\n if (merkleProof) {\n params = [\n permissionParam,\n {\n name: \"merkleProof\",\n type: Array.isArray(merkleProof[0]) ? \"bytes32[][]\" : \"bytes32[]\",\n },\n ];\n values = [permission, merkleProof];\n } else {\n params = [permissionParam];\n values = [permission];\n }\n return encodeAbiParameters(params, values);\n }\n\n getSessionData(): SessionKeyParams {\n if (!this.selector || !this.executor) {\n throw Error(\"Plugin Validator data params uninitialised\");\n }\n return {\n selector: this.selector,\n executor: this.executor,\n validUntil: this.validUntil,\n validAfter: this.validAfter,\n sessionKeyData: this.sessionKeyData,\n enableSignature: this.enableSignature,\n };\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.sessionKey);\n }\n\n async getSessionNonces(\n kernelAccountAddress: Address\n ): Promise<SessionNonces> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const nonce = await this.publicClient.readContract({\n abi: SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"nonces\",\n args: [kernelAccountAddress],\n });\n return { lastNonce: nonce[0], invalidNonce: nonce[1] };\n }\n\n async getEnableData(\n kernelAccountAddress?: Address,\n enabledLastNonce?: bigint\n ): Promise<Hex> {\n if (!this.merkleTree) {\n throw Error(\"SessionKeyValidator: MerkleTree not generated\");\n }\n if (!kernelAccountAddress) {\n throw Error(\"SessionKeyValidator: Kernel account address not provided\");\n }\n const lastNonce =\n enabledLastNonce ??\n (await this.getSessionNonces(kernelAccountAddress)).lastNonce + 1n;\n return concat([\n await this.sessionKey.getAddress(),\n pad(this.merkleTree.getHexRoot() as Hex, { size: 32 }),\n pad(toHex(this.sessionKeyData.validAfter), { size: 6 }),\n pad(toHex(this.sessionKeyData.validUntil), { size: 6 }),\n this.sessionKeyData.paymaster!,\n pad(toHex(lastNonce), { size: 32 }),\n ]);\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const execDetail = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getExecution\",\n args: [selector],\n });\n const enableData = await this.publicClient.readContract({\n abi: SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"sessionData\",\n args: [await this.sessionKey.getAddress(), kernelAccountAddress],\n });\n const enableDataHex = concatHex([\n await this.sessionKey.getAddress(),\n pad(enableData[0], { size: 32 }),\n pad(toHex(enableData[1]), { size: 6 }),\n pad(toHex(enableData[2]), { size: 6 }),\n enableData[3],\n pad(toHex(enableData[4]), { size: 32 }),\n ]);\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableDataHex.toLowerCase() ===\n (\n await this.getEnableData(kernelAccountAddress, enableData[4])\n ).toLowerCase()\n );\n }\n\n async getDummyUserOpSignature(callData: Hex): Promise<Hex> {\n return concatHex([\n await this.sessionKey.getAddress(),\n DUMMY_ECDSA_SIG,\n this.getEncodedPermissionProofData(callData),\n ]);\n }\n\n private getEncodedPermissionProofData(callData: Hex): Hex {\n const matchingPermission = this.findMatchingPermissions(callData);\n if (!matchingPermission && !this.shouldDelegateViaFallback()) {\n throw Error(\n \"SessionKeyValidator: No matching permission found for the userOp\"\n );\n }\n const encodedPermissionData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission)\n : \"0x\";\n let merkleProof: string[] | string[][] = [];\n if (Array.isArray(matchingPermission)) {\n let encodedPerms = matchingPermission.map((permission) =>\n keccak256(this.encodePermissionData(permission))\n );\n merkleProof = encodedPerms.map((perm) =>\n this.merkleTree.getHexProof(perm)\n );\n } else if (matchingPermission) {\n merkleProof = this.merkleTree.getHexProof(\n keccak256(encodedPermissionData)\n );\n }\n return this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission, merkleProof)\n : \"0x\";\n }\n\n encodeEnable(sessionKeyEnableData: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"enable\",\n args: [sessionKeyEnableData],\n });\n }\n\n encodeDisable(sessionKey: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"disable\",\n args: [sessionKey],\n });\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.sessionKey.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.sessionKey.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n\n const signature = concat([\n await this.sessionKey.getAddress(),\n await this.sessionKey.signMessage(formattedMessage),\n this.getEncodedPermissionProofData(userOp.callData),\n ]);\n return signature;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"session-key-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/session-key-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n type Abi,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n type ValidatorPluginData,\n} from \"./base.js\";\nimport {\n encodeFunctionData,\n toBytes,\n concat,\n pad,\n toHex,\n encodeAbiParameters,\n concatHex,\n zeroAddress,\n decodeFunctionData,\n isHex,\n getFunctionSelector,\n type GetAbiItemParameters,\n keccak256,\n} from \"viem\";\nimport { formatAbiItem } from \"viem/utils\";\nimport { SessionKeyValidatorAbi } from \"../abis/SessionKeyValidatorAbi.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MerkleTree } from \"merkletreejs\";\nimport { getChainId } from \"../api/index.js\";\nimport { fixSignedData, getChain } from \"../utils.js\";\nimport type { GetAbiItemReturnType } from \"viem/dist/types/utils/abi/getAbiItem.js\";\nimport { type AbiFunction } from \"abitype\";\nimport type {\n CombinedArgs,\n GeneratePermissionFromArgsParameters,\n} from \"./types.js\";\nimport { Operation } from \"../provider.js\";\n\n// We need to be able to serialize bigint to transmit session key over\n// the network.\n// Using this trick: https://github.com/GoogleChromeLabs/jsbi/issues/30#issuecomment-1006086291\n(BigInt.prototype as any).toJSON = function () {\n return this.toString();\n};\n\nexport interface SessionKeyValidatorParams extends KernelBaseValidatorParams {\n sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n}\n\nexport type SessionKeyParams = Pick<\n SessionKeyValidatorParams,\n \"sessionKeyData\" | \"enableSignature\"\n> &\n ValidatorPluginData & {\n sessionPrivateKey?: Hex;\n initCode?: Hex;\n accountAddress?: Address;\n };\n\nexport enum ParamOperator {\n EQUAL = 0,\n GREATER_THAN = 1,\n LESS_THAN = 2,\n GREATER_THAN_OR_EQUAL = 3,\n LESS_THAN_OR_EQUAL = 4,\n NOT_EQUAL = 5,\n}\n\nexport type SessionNonces = {\n lastNonce: bigint;\n invalidNonce: bigint;\n};\n\nexport type ExecutionRule = {\n validAfter: number; // 48 bits\n interval: number; // 48 bits\n runs: number; // 48 bits\n};\nexport interface ParamRules {\n offset: number;\n condition: ParamOperator;\n param: Hex;\n}\n\nexport type Permission = {\n target: Address;\n index?: number;\n rules?: ParamRules[];\n sig?: Hex;\n valueLimit?: bigint;\n executionRule?: ExecutionRule;\n operation?: Operation;\n};\n\nexport interface SessionKeyData {\n validUntil: number;\n validAfter: number;\n paymaster?: Address;\n permissions?: Permission[];\n}\n\nexport function getAbiItem<\n TAbi extends Abi | readonly unknown[],\n TItemName extends string\n>({\n abi,\n args = [],\n name,\n}: GetAbiItemParameters<TAbi, TItemName>): GetAbiItemReturnType<\n TAbi,\n TItemName\n> {\n const abiItems = (abi as Abi).filter((x) => \"name\" in x && x.name === name);\n if (abiItems.length === 0) return undefined as any;\n if (abiItems.length === 1) return abiItems[0] as any;\n const abiItemsParamFiltered = [];\n for (const abiItem of abiItems) {\n if (!(\"inputs\" in abiItem)) continue;\n if (!args || args.length === 0) {\n if (!abiItem.inputs || abiItem.inputs.length === 0) return abiItem as any;\n continue;\n }\n if (!abiItem.inputs) continue;\n if (abiItem.inputs.length === 0) continue;\n if (abiItem.inputs.length !== args.length) continue;\n abiItemsParamFiltered.push(abiItem);\n }\n if (abiItemsParamFiltered.length === 0) return abiItems[0] as any;\n else if (abiItemsParamFiltered.length === 1)\n return abiItemsParamFiltered[0] as any;\n else\n throw Error(\n `Couldn't parse funtion signature using params, set appropriate one from below:\\n${abiItemsParamFiltered\n .map((item) => formatAbiItem(item))\n .reduce((a, c) => `${a}\\n${c}`)}`\n );\n}\n\nexport function getPermissionFromABI<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string | undefined = string\n>({\n abi,\n target,\n args,\n functionName,\n valueLimit,\n operation,\n}: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Permission {\n const abiItem = getAbiItem({\n abi,\n args,\n name: functionName,\n } as GetAbiItemParameters);\n if (abiItem.type !== \"function\") {\n throw Error(`${functionName} not found in abi`);\n }\n const functionSelector = getFunctionSelector(abiItem);\n let paramRules: ParamRules[] = [];\n if (args && Array.isArray(args)) {\n paramRules = (args as CombinedArgs<AbiFunction[\"inputs\"]>)\n .map(\n (arg, i) =>\n arg && {\n param: pad(\n isHex(arg.value)\n ? arg.value\n : toHex(arg.value as Parameters<typeof toHex>[0]),\n { size: 32 }\n ),\n offset: i * 32,\n condition: arg.operator,\n }\n )\n .filter((rule) => rule) as ParamRules[];\n }\n return {\n sig: functionSelector,\n rules: paramRules,\n target,\n valueLimit: valueLimit ?? 0n,\n operation: operation ?? Operation.Call,\n };\n}\n\nexport class SessionKeyValidator extends KernelBaseValidator {\n protected sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n merkleTree: MerkleTree;\n\n constructor(params: SessionKeyValidatorParams) {\n super(params);\n this.sessionKey = params.sessionKey;\n this.sessionKeyData = {\n ...params.sessionKeyData,\n validAfter: params.sessionKeyData.validAfter ?? 0,\n validUntil: params.sessionKeyData.validUntil ?? 0,\n paymaster: params.sessionKeyData.paymaster ?? zeroAddress,\n };\n this.sessionKeyData.permissions = this.sessionKeyData.permissions?.map(\n (perm, index) => ({\n ...perm,\n valueLimit: perm.valueLimit ?? 0n,\n sig: perm.sig ?? pad(\"0x\", { size: 4 }),\n rules: perm.rules ?? [],\n index,\n executionRule: perm.executionRule ?? {\n validAfter: 0,\n interval: 0,\n runs: 0,\n },\n operation: perm.operation ?? Operation.Call,\n })\n );\n this.merkleTree = this.getMerkleTree();\n this.selector =\n params.selector ??\n getFunctionSelector(\"execute(address, uint256, bytes, uint8)\");\n this.executor = params.executor ?? zeroAddress;\n this.mode = params.mode ?? ValidatorMode.plugin;\n }\n\n public static async init(\n params: SessionKeyValidatorParams\n ): Promise<SessionKeyValidator> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new SessionKeyValidator({ ...params, chain });\n return instance;\n }\n\n shouldDelegateViaFallback(): boolean {\n return this.merkleTree.getHexRoot() === pad(\"0x00\", { size: 32 });\n }\n\n findMatchingPermissions(\n callData: Hex\n ): Permission | Permission[] | undefined {\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: callData,\n });\n\n if (functionName !== \"execute\" && functionName !== \"executeBatch\")\n return undefined;\n if (functionName === \"execute\") {\n const [to, value, data] = args;\n return this.filterPermissions([to], [data], [value])?.[0];\n } else if (functionName === \"executeBatch\") {\n let targets: Hex[] = [],\n values: bigint[] = [],\n dataArray: Hex[] = [];\n args[0].forEach((arg) => {\n targets.push(arg.to);\n values.push(arg.value);\n dataArray.push(arg.data);\n });\n return this.filterPermissions(targets, dataArray, values);\n } else {\n throw Error(\"Invalid function\");\n }\n } catch (error) {\n return undefined;\n }\n }\n\n private filterPermissions(\n targets: Address[],\n dataArray: Hex[],\n values: bigint[]\n ): Permission[] | undefined {\n if (\n targets.length !== dataArray.length ||\n targets.length !== values.length\n ) {\n throw Error(\"Invalid arguments\");\n }\n const filteredPermissions = targets.map((target, index) => {\n const permissionsList = this.sessionKeyData.permissions;\n if (!permissionsList || !permissionsList.length) return undefined;\n\n const targetToMatch = target.toLowerCase();\n\n // Filter permissions by target\n let targetPermissions = permissionsList.filter(\n (permission) =>\n permission.target.toLowerCase() === targetToMatch ||\n permission.target.toLowerCase() === zeroAddress.toLowerCase()\n );\n\n if (!targetPermissions.length) return undefined;\n\n const operationPermissions = this.filterByOperation(\n targetPermissions,\n // [TODO]: Check if we need to pass operation from userOp after Kernel v2.3 in\n Operation.Call\n );\n\n if (!operationPermissions.length) return undefined;\n\n const signaturePermissions = this.filterBySignature(\n targetPermissions,\n dataArray[index].slice(0, 10).toLowerCase()\n );\n\n const valueLimitPermissions = signaturePermissions.filter(\n (permission) => (permission.valueLimit ?? 0n) >= values[index]\n );\n\n if (!valueLimitPermissions.length) return undefined;\n\n const sortedPermissions = valueLimitPermissions.sort((a, b) => {\n if ((b.valueLimit ?? 0n) > (a.valueLimit ?? 0n)) {\n return 1;\n } else if ((b.valueLimit ?? 0n) < (a.valueLimit ?? 0n)) {\n return -1;\n } else {\n return 0;\n }\n });\n\n return this.findPermissionByRule(sortedPermissions, dataArray[index]);\n });\n return filteredPermissions.every((permission) => permission !== undefined)\n ? (filteredPermissions as Permission[])\n : undefined;\n }\n\n private filterByOperation(\n permissions: Permission[],\n operation: Operation\n ): Permission[] {\n return permissions.filter(\n (permission) =>\n permission.operation === operation || Operation.Call === operation\n );\n }\n\n private filterBySignature(\n permissions: Permission[],\n signature: string\n ): Permission[] {\n return permissions.filter(\n (permission) =>\n (permission.sig ?? pad(\"0x\", { size: 4 })).toLowerCase() === signature\n );\n }\n\n private findPermissionByRule(\n permissions: Permission[],\n data: string\n ): Permission | undefined {\n return permissions.find((permission) => {\n for (const rule of permission.rules ?? []) {\n const dataParam: Hex = this.getFormattedHex(\n \"0x\" + data.slice(10 + rule.offset * 2, 10 + rule.offset * 2 + 64)\n );\n const ruleParam: Hex = this.getFormattedHex(rule.param);\n\n if (!this.evaluateRuleCondition(dataParam, ruleParam, rule.condition)) {\n return false;\n }\n }\n return true;\n });\n }\n\n private getFormattedHex(value: string): Hex {\n return pad(isHex(value) ? value : toHex(value), {\n size: 32,\n }).toLowerCase() as Hex;\n }\n\n private evaluateRuleCondition(\n dataParam: Hex,\n ruleParam: Hex,\n condition: ParamOperator\n ): boolean {\n switch (condition) {\n case ParamOperator.EQUAL:\n return dataParam === ruleParam;\n case ParamOperator.GREATER_THAN:\n return dataParam > ruleParam;\n case ParamOperator.LESS_THAN:\n return dataParam < ruleParam;\n case ParamOperator.GREATER_THAN_OR_EQUAL:\n return dataParam >= ruleParam;\n case ParamOperator.LESS_THAN_OR_EQUAL:\n return dataParam <= ruleParam;\n case ParamOperator.NOT_EQUAL:\n return dataParam !== ruleParam;\n default:\n return false;\n }\n }\n\n getMerkleTree(): MerkleTree {\n const permissionPacked = this.sessionKeyData.permissions?.map(\n (permission) => this.encodePermissionData(permission)\n );\n\n // Having one leaf returns empty array in getProof(). To hack it we push the leaf twice\n // issue - https://github.com/merkletreejs/merkletreejs/issues/58\n if (permissionPacked && permissionPacked.length === 1)\n permissionPacked.push(permissionPacked[0]);\n\n return permissionPacked && permissionPacked.length !== 0\n ? new MerkleTree(permissionPacked, keccak256, {\n hashLeaves: true,\n sortPairs: true,\n })\n : new MerkleTree([pad(\"0x00\", { size: 32 })], keccak256, {\n hashLeaves: false,\n complete: true,\n });\n }\n\n encodePermissionData(\n permission: Permission | Permission[],\n merkleProof?: string[] | string[][]\n ): Hex {\n let permissionParam = {\n components: [\n {\n name: \"index\",\n type: \"uint32\",\n },\n {\n name: \"target\",\n type: \"address\",\n },\n {\n name: \"sig\",\n type: \"bytes4\",\n },\n {\n name: \"valueLimit\",\n type: \"uint256\",\n },\n {\n components: [\n {\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"enum ParamCondition\",\n name: \"condition\",\n type: \"uint8\",\n },\n {\n name: \"param\",\n type: \"bytes32\",\n },\n ],\n name: \"rules\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n name: \"interval\",\n type: \"uint48\",\n },\n {\n name: \"runs\",\n type: \"uint48\",\n },\n {\n internalType: \"ValidAfter\",\n name: \"validAfter\",\n type: \"uint48\",\n },\n ],\n name: \"executionRule\",\n type: \"tuple\",\n },\n {\n internalType: \"enum Operation\",\n name: \"operation\",\n type: \"uint8\",\n },\n ],\n name: \"permission\",\n type: Array.isArray(permission) ? \"tuple[]\" : \"tuple\",\n };\n let params;\n let values;\n if (merkleProof) {\n params = [\n permissionParam,\n {\n name: \"merkleProof\",\n type: Array.isArray(merkleProof[0]) ? \"bytes32[][]\" : \"bytes32[]\",\n },\n ];\n values = [permission, merkleProof];\n } else {\n params = [permissionParam];\n values = [permission];\n }\n return encodeAbiParameters(params, values);\n }\n\n getSessionData(): SessionKeyParams {\n if (!this.selector || !this.executor) {\n throw Error(\"Plugin Validator data params uninitialised\");\n }\n return {\n selector: this.selector,\n executor: this.executor,\n validUntil: this.validUntil,\n validAfter: this.validAfter,\n sessionKeyData: this.sessionKeyData,\n enableSignature: this.enableSignature,\n };\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.sessionKey);\n }\n\n async getSessionNonces(\n kernelAccountAddress: Address\n ): Promise<SessionNonces> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const nonce = await this.publicClient.readContract({\n abi: SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"nonces\",\n args: [kernelAccountAddress],\n });\n return { lastNonce: nonce[0], invalidNonce: nonce[1] };\n }\n\n async getEnableData(\n kernelAccountAddress?: Address,\n enabledLastNonce?: bigint\n ): Promise<Hex> {\n if (!this.merkleTree) {\n throw Error(\"SessionKeyValidator: MerkleTree not generated\");\n }\n if (!kernelAccountAddress) {\n throw Error(\"SessionKeyValidator: Kernel account address not provided\");\n }\n const lastNonce =\n enabledLastNonce ??\n (await this.getSessionNonces(kernelAccountAddress)).lastNonce + 1n;\n return concat([\n await this.sessionKey.getAddress(),\n pad(this.merkleTree.getHexRoot() as Hex, { size: 32 }),\n pad(toHex(this.sessionKeyData.validAfter), { size: 6 }),\n pad(toHex(this.sessionKeyData.validUntil), { size: 6 }),\n this.sessionKeyData.paymaster!,\n pad(toHex(lastNonce), { size: 32 }),\n ]);\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const execDetail = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getExecution\",\n args: [selector],\n });\n const enableData = await this.publicClient.readContract({\n abi: SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"sessionData\",\n args: [await this.sessionKey.getAddress(), kernelAccountAddress],\n });\n const enableDataHex = concatHex([\n await this.sessionKey.getAddress(),\n pad(enableData[0], { size: 32 }),\n pad(toHex(enableData[1]), { size: 6 }),\n pad(toHex(enableData[2]), { size: 6 }),\n enableData[3],\n pad(toHex(enableData[4]), { size: 32 }),\n ]);\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableDataHex.toLowerCase() ===\n (\n await this.getEnableData(kernelAccountAddress, enableData[4])\n ).toLowerCase()\n );\n }\n\n async getDummyUserOpSignature(callData: Hex): Promise<Hex> {\n return concatHex([\n await this.sessionKey.getAddress(),\n DUMMY_ECDSA_SIG,\n this.getEncodedPermissionProofData(callData),\n ]);\n }\n\n private getEncodedPermissionProofData(callData: Hex): Hex {\n const matchingPermission = this.findMatchingPermissions(callData);\n if (!matchingPermission && !this.shouldDelegateViaFallback()) {\n throw Error(\n \"SessionKeyValidator: No matching permission found for the userOp\"\n );\n }\n const encodedPermissionData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission)\n : \"0x\";\n let merkleProof: string[] | string[][] = [];\n if (Array.isArray(matchingPermission)) {\n let encodedPerms = matchingPermission.map((permission) =>\n keccak256(this.encodePermissionData(permission))\n );\n merkleProof = encodedPerms.map((perm) =>\n this.merkleTree.getHexProof(perm)\n );\n } else if (matchingPermission) {\n merkleProof = this.merkleTree.getHexProof(\n keccak256(encodedPermissionData)\n );\n }\n return this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission, merkleProof)\n : \"0x\";\n }\n\n encodeEnable(sessionKeyEnableData: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"enable\",\n args: [sessionKeyEnableData],\n });\n }\n\n encodeDisable(sessionKey: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"disable\",\n args: [sessionKey],\n });\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.sessionKey.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.sessionKey.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n\n const signature = concat([\n await this.sessionKey.getAddress(),\n await this.sessionKey.signMessage(formattedMessage),\n this.getEncodedPermissionProofData(userOp.callData),\n ]);\n return signature;\n }\n}\n"]}
|
|
@@ -47,7 +47,7 @@ export type GetFunctionArgs<TAbi extends Abi | readonly unknown[], TFunctionName
|
|
|
47
47
|
} : {
|
|
48
48
|
args?: TArgs;
|
|
49
49
|
};
|
|
50
|
-
export type GeneratePermissionFromArgsParameters<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string, _FunctionName = TAbi extends Abi ? InferFunctionName<TAbi, TFunctionName> : never> = Pick<Permission, "target" | "valueLimit"> & {
|
|
50
|
+
export type GeneratePermissionFromArgsParameters<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string, _FunctionName = TAbi extends Abi ? InferFunctionName<TAbi, TFunctionName> : never> = Pick<Permission, "target" | "valueLimit" | "operation"> & {
|
|
51
51
|
functionName?: _FunctionName;
|
|
52
52
|
} & (TFunctionName extends string ? {
|
|
53
53
|
abi: Narrow<TAbi>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAMN,MAAM,SAAS,CAAC;AACjB,OAAO,EAAe,MAAM,sBAAsB,CAAC","sourcesContent":["import {\n type AbiParameter,\n type AbiParameterKind,\n type AbiParameterToPrimitiveType,\n type AbiFunction,\n type ExtractAbiFunction,\n} from \"abitype\";\nimport { type Pretty } from \"abitype/src/types.js\";\nimport type {\n ECDSAValidator,\n ECDSAValidatorParams,\n} from \"./ecdsa-validator.js\";\nimport type {\n ERC165SessionKeyValidator,\n ERC165SessionKeyValidatorParams,\n} from \"./erc165-session-key-validator.js\";\n\nimport type {\n KillSwitchValidator,\n KillSwitchValidatorParams,\n} from \"./kill-switch-validator.js\";\nimport type {\n RecoveryValidator,\n RecoveryValidatorParams,\n} from \"./recovery-validator.js\";\nimport type {\n SessionKeyValidator,\n SessionKeyValidatorParams,\n ParamRules,\n Permission,\n SessionKeyData,\n SessionKeyParams,\n ParamOperator,\n} from \"./session-key-validator.js\";\nimport type { Abi, InferFunctionName, Narrow } from \"viem\";\n\nexport type SupportedValidators =\n | \"ECDSA\"\n | \"KILL_SWITCH\"\n | \"ERC165_SESSION_KEY\"\n | \"SESSION_KEY\"\n | \"RECOVERY\";\n\nexport type ValidatorTypeMap = {\n ECDSA: ECDSAValidator;\n KILL_SWITCH: KillSwitchValidator;\n ERC165_SESSION_KEY: ERC165SessionKeyValidator;\n SESSION_KEY: SessionKeyValidator;\n RECOVERY: RecoveryValidator;\n};\n\nexport type ValidatorParamsMap = {\n ECDSA: ECDSAValidatorParams;\n KILL_SWITCH: KillSwitchValidatorParams;\n ERC165_SESSION_KEY: ERC165SessionKeyValidatorParams;\n SESSION_KEY: SessionKeyValidatorParams;\n RECOVERY: RecoveryValidatorParams;\n};\n\nexport type ValidatorMap = {\n [V in SupportedValidators]: new (\n params: ValidatorParamsMap[V]\n ) => ValidatorTypeMap[V];\n};\n\nexport type EthereumProvider = { request(...args: any): Promise<any> };\n\nexport type { ParamRules, Permission, SessionKeyData, SessionKeyParams };\n\n// Session Key types\nexport type AbiParametersToPrimitiveTypes<\n TAbiParameters extends readonly AbiParameter[],\n TAbiParameterKind extends AbiParameterKind = AbiParameterKind\n> = Pretty<{\n [K in keyof TAbiParameters]: AbiParameterToPrimitiveType<\n TAbiParameters[K],\n TAbiParameterKind\n >;\n}>;\n\nexport type AbiParametersToConditons<\n TAbiParameters extends readonly AbiParameter[]\n> = Pretty<{\n [K in keyof TAbiParameters]: ParamOperator;\n}>;\n\nexport type CombinedArgs<\n TAbiParameters extends readonly AbiParameter[],\n TAbiParameterKind extends AbiParameterKind = AbiParameterKind\n> = {\n [K in keyof TAbiParameters]: {\n operator: ParamOperator;\n value: AbiParameterToPrimitiveType<TAbiParameters[K], TAbiParameterKind>;\n } | null;\n};\n\nexport type GetFunctionArgs<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string,\n TAbiFunction extends AbiFunction = TAbi extends Abi\n ? ExtractAbiFunction<TAbi, TFunctionName>\n : AbiFunction,\n TArgs = CombinedArgs<TAbiFunction[\"inputs\"]>,\n FailedToParseArgs =\n | ([TArgs] extends [never] ? true : false)\n | (readonly unknown[] extends TArgs ? true : false)\n> = true extends FailedToParseArgs\n ? {\n args?: readonly unknown[];\n }\n : TArgs extends readonly []\n ? { args?: never }\n : {\n args?: TArgs;\n };\n\nexport type GeneratePermissionFromArgsParameters<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string | undefined = string,\n _FunctionName = TAbi extends Abi\n ? InferFunctionName<TAbi, TFunctionName>\n : never\n> = Pick<Permission, \"target\" | \"valueLimit\"> & {\n functionName?: _FunctionName;\n} & (TFunctionName extends string\n ? { abi: Narrow<TAbi> } & GetFunctionArgs<TAbi, TFunctionName>\n : _FunctionName extends string\n ? { abi: [Narrow<TAbi[number]>] } & GetFunctionArgs<TAbi, _FunctionName>\n : never);\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAMN,MAAM,SAAS,CAAC;AACjB,OAAO,EAAe,MAAM,sBAAsB,CAAC","sourcesContent":["import {\n type AbiParameter,\n type AbiParameterKind,\n type AbiParameterToPrimitiveType,\n type AbiFunction,\n type ExtractAbiFunction,\n} from \"abitype\";\nimport { type Pretty } from \"abitype/src/types.js\";\nimport type {\n ECDSAValidator,\n ECDSAValidatorParams,\n} from \"./ecdsa-validator.js\";\nimport type {\n ERC165SessionKeyValidator,\n ERC165SessionKeyValidatorParams,\n} from \"./erc165-session-key-validator.js\";\n\nimport type {\n KillSwitchValidator,\n KillSwitchValidatorParams,\n} from \"./kill-switch-validator.js\";\nimport type {\n RecoveryValidator,\n RecoveryValidatorParams,\n} from \"./recovery-validator.js\";\nimport type {\n SessionKeyValidator,\n SessionKeyValidatorParams,\n ParamRules,\n Permission,\n SessionKeyData,\n SessionKeyParams,\n ParamOperator,\n} from \"./session-key-validator.js\";\nimport type { Abi, InferFunctionName, Narrow } from \"viem\";\n\nexport type SupportedValidators =\n | \"ECDSA\"\n | \"KILL_SWITCH\"\n | \"ERC165_SESSION_KEY\"\n | \"SESSION_KEY\"\n | \"RECOVERY\";\n\nexport type ValidatorTypeMap = {\n ECDSA: ECDSAValidator;\n KILL_SWITCH: KillSwitchValidator;\n ERC165_SESSION_KEY: ERC165SessionKeyValidator;\n SESSION_KEY: SessionKeyValidator;\n RECOVERY: RecoveryValidator;\n};\n\nexport type ValidatorParamsMap = {\n ECDSA: ECDSAValidatorParams;\n KILL_SWITCH: KillSwitchValidatorParams;\n ERC165_SESSION_KEY: ERC165SessionKeyValidatorParams;\n SESSION_KEY: SessionKeyValidatorParams;\n RECOVERY: RecoveryValidatorParams;\n};\n\nexport type ValidatorMap = {\n [V in SupportedValidators]: new (\n params: ValidatorParamsMap[V]\n ) => ValidatorTypeMap[V];\n};\n\nexport type EthereumProvider = { request(...args: any): Promise<any> };\n\nexport type { ParamRules, Permission, SessionKeyData, SessionKeyParams };\n\n// Session Key types\nexport type AbiParametersToPrimitiveTypes<\n TAbiParameters extends readonly AbiParameter[],\n TAbiParameterKind extends AbiParameterKind = AbiParameterKind\n> = Pretty<{\n [K in keyof TAbiParameters]: AbiParameterToPrimitiveType<\n TAbiParameters[K],\n TAbiParameterKind\n >;\n}>;\n\nexport type AbiParametersToConditons<\n TAbiParameters extends readonly AbiParameter[]\n> = Pretty<{\n [K in keyof TAbiParameters]: ParamOperator;\n}>;\n\nexport type CombinedArgs<\n TAbiParameters extends readonly AbiParameter[],\n TAbiParameterKind extends AbiParameterKind = AbiParameterKind\n> = {\n [K in keyof TAbiParameters]: {\n operator: ParamOperator;\n value: AbiParameterToPrimitiveType<TAbiParameters[K], TAbiParameterKind>;\n } | null;\n};\n\nexport type GetFunctionArgs<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string,\n TAbiFunction extends AbiFunction = TAbi extends Abi\n ? ExtractAbiFunction<TAbi, TFunctionName>\n : AbiFunction,\n TArgs = CombinedArgs<TAbiFunction[\"inputs\"]>,\n FailedToParseArgs =\n | ([TArgs] extends [never] ? true : false)\n | (readonly unknown[] extends TArgs ? true : false)\n> = true extends FailedToParseArgs\n ? {\n args?: readonly unknown[];\n }\n : TArgs extends readonly []\n ? { args?: never }\n : {\n args?: TArgs;\n };\n\nexport type GeneratePermissionFromArgsParameters<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string | undefined = string,\n _FunctionName = TAbi extends Abi\n ? InferFunctionName<TAbi, TFunctionName>\n : never\n> = Pick<Permission, \"target\" | \"valueLimit\" | \"operation\"> & {\n functionName?: _FunctionName;\n} & (TFunctionName extends string\n ? { abi: Narrow<TAbi> } & GetFunctionArgs<TAbi, TFunctionName>\n : _FunctionName extends string\n ? { abi: [Narrow<TAbi[number]>] } & GetFunctionArgs<TAbi, _FunctionName>\n : never);\n"]}
|
|
@@ -16,7 +16,7 @@ export declare const KILL_SWITCH_ACTION = "0x3f38e479304c7F18F988269a1bDa7d646bd
|
|
|
16
16
|
export declare const DUMMY_ECDSA_SIG = "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
|
|
17
17
|
export declare const ERC165_SESSION_KEY_VALIDATOR_ADDRESS = "0xe149290800De29D4b0BF9dB82c508255D81902E6";
|
|
18
18
|
export declare const TOKEN_ACTION = "0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1";
|
|
19
|
-
export declare const SESSION_KEY_VALIDATOR_ADDRESS = "
|
|
19
|
+
export declare const SESSION_KEY_VALIDATOR_ADDRESS = "0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5";
|
|
20
20
|
export declare const RECOVERY_VALIDATOR_ADDRESS = "0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6";
|
|
21
21
|
export declare const RECOVERY_ACTION = "0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1";
|
|
22
22
|
export declare const oneAddress = "0x0000000000000000000000000000000000000001";
|
|
@@ -4,6 +4,7 @@ import { type GetAbiItemParameters } from "viem";
|
|
|
4
4
|
import { MerkleTree } from "merkletreejs";
|
|
5
5
|
import type { GetAbiItemReturnType } from "viem/dist/types/utils/abi/getAbiItem.js";
|
|
6
6
|
import type { GeneratePermissionFromArgsParameters } from "./types.js";
|
|
7
|
+
import { Operation } from "../provider.js";
|
|
7
8
|
export interface SessionKeyValidatorParams extends KernelBaseValidatorParams {
|
|
8
9
|
sessionKey: SmartAccountSigner;
|
|
9
10
|
sessionKeyData: SessionKeyData;
|
|
@@ -42,6 +43,7 @@ export type Permission = {
|
|
|
42
43
|
sig?: Hex;
|
|
43
44
|
valueLimit?: bigint;
|
|
44
45
|
executionRule?: ExecutionRule;
|
|
46
|
+
operation?: Operation;
|
|
45
47
|
};
|
|
46
48
|
export interface SessionKeyData {
|
|
47
49
|
validUntil: number;
|
|
@@ -50,7 +52,7 @@ export interface SessionKeyData {
|
|
|
50
52
|
permissions?: Permission[];
|
|
51
53
|
}
|
|
52
54
|
export declare function getAbiItem<TAbi extends Abi | readonly unknown[], TItemName extends string>({ abi, args, name, }: GetAbiItemParameters<TAbi, TItemName>): GetAbiItemReturnType<TAbi, TItemName>;
|
|
53
|
-
export declare function getPermissionFromABI<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string>({ abi, target, args, functionName, valueLimit, }: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Permission;
|
|
55
|
+
export declare function getPermissionFromABI<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string>({ abi, target, args, functionName, valueLimit, operation, }: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Permission;
|
|
54
56
|
export declare class SessionKeyValidator extends KernelBaseValidator {
|
|
55
57
|
protected sessionKey: SmartAccountSigner;
|
|
56
58
|
sessionKeyData: SessionKeyData;
|
|
@@ -60,6 +62,7 @@ export declare class SessionKeyValidator extends KernelBaseValidator {
|
|
|
60
62
|
shouldDelegateViaFallback(): boolean;
|
|
61
63
|
findMatchingPermissions(callData: Hex): Permission | Permission[] | undefined;
|
|
62
64
|
private filterPermissions;
|
|
65
|
+
private filterByOperation;
|
|
63
66
|
private filterBySignature;
|
|
64
67
|
private findPermissionByRule;
|
|
65
68
|
private getFormattedHex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-key-validator.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/session-key-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,GAAG,EACR,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,GAAG,EACT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EAEnB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAC;AACnB,OAAO,EAYL,KAAK,oBAAoB,EAE1B,MAAM,MAAM,CAAC;AAKd,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAEpF,OAAO,KAAK,EAEV,oCAAoC,EACrC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"session-key-validator.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/session-key-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,7 +47,7 @@ export type GetFunctionArgs<TAbi extends Abi | readonly unknown[], TFunctionName
|
|
|
47
47
|
} : {
|
|
48
48
|
args?: TArgs;
|
|
49
49
|
};
|
|
50
|
-
export type GeneratePermissionFromArgsParameters<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string, _FunctionName = TAbi extends Abi ? InferFunctionName<TAbi, TFunctionName> : never> = Pick<Permission, "target" | "valueLimit"> & {
|
|
50
|
+
export type GeneratePermissionFromArgsParameters<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string, _FunctionName = TAbi extends Abi ? InferFunctionName<TAbi, TFunctionName> : never> = Pick<Permission, "target" | "valueLimit" | "operation"> & {
|
|
51
51
|
functionName?: _FunctionName;
|
|
52
52
|
} & (TFunctionName extends string ? {
|
|
53
53
|
abi: Narrow<TAbi>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -27,7 +27,7 @@ export const ERC165_SESSION_KEY_VALIDATOR_ADDRESS =
|
|
|
27
27
|
"0xe149290800De29D4b0BF9dB82c508255D81902E6";
|
|
28
28
|
export const TOKEN_ACTION = "0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1";
|
|
29
29
|
export const SESSION_KEY_VALIDATOR_ADDRESS =
|
|
30
|
-
"
|
|
30
|
+
"0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5";
|
|
31
31
|
export const RECOVERY_VALIDATOR_ADDRESS =
|
|
32
32
|
"0xA60dA4E29A27F9510AC37faE3706EaEb1d55e8d6";
|
|
33
33
|
export const RECOVERY_ACTION = "0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1";
|
|
@@ -106,7 +106,7 @@ export const CHAIN_ID_TO_NODE: { [key: number]: string } = {
|
|
|
106
106
|
204: "https://opbnb.rpc.thirdweb.com/eed98c1f30120c0508f17c1f01d3102b",
|
|
107
107
|
42069: "https://rpc.op-testnet.gelato.digital",
|
|
108
108
|
1261120: "https://rpc.zkatana.gelato.digital",
|
|
109
|
-
84532:
|
|
109
|
+
84532: 'https://floral-old-feather.base-sepolia.quiknode.pro/4c3b4295d0c174410872b1e461a91cc33c7969a9/',
|
|
110
110
|
421614: `https://arbitrum-sepolia.infura.io/v3/${INFURA_API_KEY}`,
|
|
111
111
|
11155420: `https://optimism-sepolia.infura.io/v3/${INFURA_API_KEY}`,
|
|
112
112
|
// 5611: 'opBnb-testnet',
|
|
@@ -41,6 +41,7 @@ import type {
|
|
|
41
41
|
CombinedArgs,
|
|
42
42
|
GeneratePermissionFromArgsParameters,
|
|
43
43
|
} from "./types.js";
|
|
44
|
+
import { Operation } from "../provider.js";
|
|
44
45
|
|
|
45
46
|
// We need to be able to serialize bigint to transmit session key over
|
|
46
47
|
// the network.
|
|
@@ -96,6 +97,7 @@ export type Permission = {
|
|
|
96
97
|
sig?: Hex;
|
|
97
98
|
valueLimit?: bigint;
|
|
98
99
|
executionRule?: ExecutionRule;
|
|
100
|
+
operation?: Operation;
|
|
99
101
|
};
|
|
100
102
|
|
|
101
103
|
export interface SessionKeyData {
|
|
@@ -151,6 +153,7 @@ export function getPermissionFromABI<
|
|
|
151
153
|
args,
|
|
152
154
|
functionName,
|
|
153
155
|
valueLimit,
|
|
156
|
+
operation,
|
|
154
157
|
}: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Permission {
|
|
155
158
|
const abiItem = getAbiItem({
|
|
156
159
|
abi,
|
|
@@ -184,6 +187,7 @@ export function getPermissionFromABI<
|
|
|
184
187
|
rules: paramRules,
|
|
185
188
|
target,
|
|
186
189
|
valueLimit: valueLimit ?? 0n,
|
|
190
|
+
operation: operation ?? Operation.Call,
|
|
187
191
|
};
|
|
188
192
|
}
|
|
189
193
|
|
|
@@ -213,6 +217,7 @@ export class SessionKeyValidator extends KernelBaseValidator {
|
|
|
213
217
|
interval: 0,
|
|
214
218
|
runs: 0,
|
|
215
219
|
},
|
|
220
|
+
operation: perm.operation ?? Operation.Call,
|
|
216
221
|
})
|
|
217
222
|
);
|
|
218
223
|
this.merkleTree = this.getMerkleTree();
|
|
@@ -290,19 +295,21 @@ export class SessionKeyValidator extends KernelBaseValidator {
|
|
|
290
295
|
|
|
291
296
|
// Filter permissions by target
|
|
292
297
|
let targetPermissions = permissionsList.filter(
|
|
293
|
-
(permission) =>
|
|
298
|
+
(permission) =>
|
|
299
|
+
permission.target.toLowerCase() === targetToMatch ||
|
|
300
|
+
permission.target.toLowerCase() === zeroAddress.toLowerCase()
|
|
294
301
|
);
|
|
295
302
|
|
|
296
|
-
// If no permissions match the exact target, check for generic permissions (using zero address)
|
|
297
|
-
if (!targetPermissions.length) {
|
|
298
|
-
targetPermissions = permissionsList.filter(
|
|
299
|
-
(permission) =>
|
|
300
|
-
permission.target.toLowerCase() === zeroAddress.toLowerCase()
|
|
301
|
-
);
|
|
302
|
-
}
|
|
303
|
-
|
|
304
303
|
if (!targetPermissions.length) return undefined;
|
|
305
304
|
|
|
305
|
+
const operationPermissions = this.filterByOperation(
|
|
306
|
+
targetPermissions,
|
|
307
|
+
// [TODO]: Check if we need to pass operation from userOp after Kernel v2.3 in
|
|
308
|
+
Operation.Call
|
|
309
|
+
);
|
|
310
|
+
|
|
311
|
+
if (!operationPermissions.length) return undefined;
|
|
312
|
+
|
|
306
313
|
const signaturePermissions = this.filterBySignature(
|
|
307
314
|
targetPermissions,
|
|
308
315
|
dataArray[index].slice(0, 10).toLowerCase()
|
|
@@ -331,6 +338,16 @@ export class SessionKeyValidator extends KernelBaseValidator {
|
|
|
331
338
|
: undefined;
|
|
332
339
|
}
|
|
333
340
|
|
|
341
|
+
private filterByOperation(
|
|
342
|
+
permissions: Permission[],
|
|
343
|
+
operation: Operation
|
|
344
|
+
): Permission[] {
|
|
345
|
+
return permissions.filter(
|
|
346
|
+
(permission) =>
|
|
347
|
+
permission.operation === operation || Operation.Call === operation
|
|
348
|
+
);
|
|
349
|
+
}
|
|
350
|
+
|
|
334
351
|
private filterBySignature(
|
|
335
352
|
permissions: Permission[],
|
|
336
353
|
signature: string
|
|
@@ -470,6 +487,11 @@ export class SessionKeyValidator extends KernelBaseValidator {
|
|
|
470
487
|
name: "executionRule",
|
|
471
488
|
type: "tuple",
|
|
472
489
|
},
|
|
490
|
+
{
|
|
491
|
+
internalType: "enum Operation",
|
|
492
|
+
name: "operation",
|
|
493
|
+
type: "uint8",
|
|
494
|
+
},
|
|
473
495
|
],
|
|
474
496
|
name: "permission",
|
|
475
497
|
type: Array.isArray(permission) ? "tuple[]" : "tuple",
|
|
@@ -120,7 +120,7 @@ export type GeneratePermissionFromArgsParameters<
|
|
|
120
120
|
_FunctionName = TAbi extends Abi
|
|
121
121
|
? InferFunctionName<TAbi, TFunctionName>
|
|
122
122
|
: never
|
|
123
|
-
> = Pick<Permission, "target" | "valueLimit"> & {
|
|
123
|
+
> = Pick<Permission, "target" | "valueLimit" | "operation"> & {
|
|
124
124
|
functionName?: _FunctionName;
|
|
125
125
|
} & (TFunctionName extends string
|
|
126
126
|
? { abi: Narrow<TAbi> } & GetFunctionArgs<TAbi, TFunctionName>
|