@zerodev/sdk 5.2.15 → 5.2.17

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.
Files changed (80) hide show
  1. package/_cjs/accounts/kernel/createKernelAccount.js +25 -5
  2. package/_cjs/accounts/kernel/createKernelAccount.js.map +1 -1
  3. package/_cjs/accounts/kernel/utils/account/ep0_7/encodeCallData.js +4 -4
  4. package/_cjs/accounts/kernel/utils/account/ep0_7/encodeCallData.js.map +1 -1
  5. package/_cjs/accounts/kernel/utils/ep0_7/encodeExecuteBatchCall.js +2 -2
  6. package/_cjs/accounts/kernel/utils/ep0_7/encodeExecuteBatchCall.js.map +1 -1
  7. package/_cjs/accounts/kernel/utils/ep0_7/encodeExecuteCall.js +12 -1
  8. package/_cjs/accounts/kernel/utils/ep0_7/encodeExecuteCall.js.map +1 -1
  9. package/_cjs/accounts/kernel/utils/ep0_7/encodeExecuteDelegateCall.js +2 -2
  10. package/_cjs/accounts/kernel/utils/ep0_7/encodeExecuteDelegateCall.js.map +1 -1
  11. package/_cjs/accounts/kernel/utils/ep0_7/encodeExecuteSingleCall.js +2 -2
  12. package/_cjs/accounts/kernel/utils/ep0_7/encodeExecuteSingleCall.js.map +1 -1
  13. package/_cjs/accounts/kernel/utils/plugins/ep0_7/getEncodedPluginsData.js +3 -3
  14. package/_cjs/accounts/kernel/utils/plugins/ep0_7/getEncodedPluginsData.js.map +1 -1
  15. package/_cjs/accounts/kernel/utils/plugins/ep0_7/getPluginsEnableTypedData.js +3 -3
  16. package/_cjs/accounts/kernel/utils/plugins/ep0_7/getPluginsEnableTypedData.js.map +1 -1
  17. package/_cjs/accounts/utils/toKernelPluginManager.js +5 -2
  18. package/_cjs/accounts/utils/toKernelPluginManager.js.map +1 -1
  19. package/_cjs/clients/fallbackKernelAccountClient.js +42 -24
  20. package/_cjs/clients/fallbackKernelAccountClient.js.map +1 -1
  21. package/_cjs/index.js.map +1 -1
  22. package/_cjs/types/kernel.js.map +1 -1
  23. package/_esm/accounts/kernel/createKernelAccount.js +27 -5
  24. package/_esm/accounts/kernel/createKernelAccount.js.map +1 -1
  25. package/_esm/accounts/kernel/utils/account/ep0_7/encodeCallData.js +4 -4
  26. package/_esm/accounts/kernel/utils/account/ep0_7/encodeCallData.js.map +1 -1
  27. package/_esm/accounts/kernel/utils/ep0_7/encodeExecuteBatchCall.js +2 -2
  28. package/_esm/accounts/kernel/utils/ep0_7/encodeExecuteBatchCall.js.map +1 -1
  29. package/_esm/accounts/kernel/utils/ep0_7/encodeExecuteCall.js +17 -2
  30. package/_esm/accounts/kernel/utils/ep0_7/encodeExecuteCall.js.map +1 -1
  31. package/_esm/accounts/kernel/utils/ep0_7/encodeExecuteDelegateCall.js +2 -2
  32. package/_esm/accounts/kernel/utils/ep0_7/encodeExecuteDelegateCall.js.map +1 -1
  33. package/_esm/accounts/kernel/utils/ep0_7/encodeExecuteSingleCall.js +2 -2
  34. package/_esm/accounts/kernel/utils/ep0_7/encodeExecuteSingleCall.js.map +1 -1
  35. package/_esm/accounts/kernel/utils/plugins/ep0_7/getEncodedPluginsData.js +3 -3
  36. package/_esm/accounts/kernel/utils/plugins/ep0_7/getEncodedPluginsData.js.map +1 -1
  37. package/_esm/accounts/kernel/utils/plugins/ep0_7/getPluginsEnableTypedData.js +3 -3
  38. package/_esm/accounts/kernel/utils/plugins/ep0_7/getPluginsEnableTypedData.js.map +1 -1
  39. package/_esm/accounts/utils/toKernelPluginManager.js +5 -2
  40. package/_esm/accounts/utils/toKernelPluginManager.js.map +1 -1
  41. package/_esm/clients/fallbackKernelAccountClient.js +50 -29
  42. package/_esm/clients/fallbackKernelAccountClient.js.map +1 -1
  43. package/_esm/index.js.map +1 -1
  44. package/_esm/types/kernel.js.map +1 -1
  45. package/_types/accounts/kernel/createKernelAccount.d.ts.map +1 -1
  46. package/_types/accounts/kernel/utils/account/ep0_7/encodeCallData.d.ts +2 -2
  47. package/_types/accounts/kernel/utils/account/ep0_7/encodeCallData.d.ts.map +1 -1
  48. package/_types/accounts/kernel/utils/ep0_7/encodeExecuteBatchCall.d.ts +1 -1
  49. package/_types/accounts/kernel/utils/ep0_7/encodeExecuteBatchCall.d.ts.map +1 -1
  50. package/_types/accounts/kernel/utils/ep0_7/encodeExecuteCall.d.ts +1 -1
  51. package/_types/accounts/kernel/utils/ep0_7/encodeExecuteCall.d.ts.map +1 -1
  52. package/_types/accounts/kernel/utils/ep0_7/encodeExecuteDelegateCall.d.ts +1 -1
  53. package/_types/accounts/kernel/utils/ep0_7/encodeExecuteDelegateCall.d.ts.map +1 -1
  54. package/_types/accounts/kernel/utils/ep0_7/encodeExecuteSingleCall.d.ts +1 -1
  55. package/_types/accounts/kernel/utils/ep0_7/encodeExecuteSingleCall.d.ts.map +1 -1
  56. package/_types/accounts/kernel/utils/plugins/ep0_7/getEncodedPluginsData.d.ts +3 -2
  57. package/_types/accounts/kernel/utils/plugins/ep0_7/getEncodedPluginsData.d.ts.map +1 -1
  58. package/_types/accounts/kernel/utils/plugins/ep0_7/getPluginsEnableTypedData.d.ts +3 -1
  59. package/_types/accounts/kernel/utils/plugins/ep0_7/getPluginsEnableTypedData.d.ts.map +1 -1
  60. package/_types/accounts/utils/toKernelPluginManager.d.ts +1 -1
  61. package/_types/accounts/utils/toKernelPluginManager.d.ts.map +1 -1
  62. package/_types/clients/fallbackKernelAccountClient.d.ts +1 -1
  63. package/_types/clients/fallbackKernelAccountClient.d.ts.map +1 -1
  64. package/_types/index.d.ts +1 -1
  65. package/_types/index.d.ts.map +1 -1
  66. package/_types/types/kernel.d.ts +6 -0
  67. package/_types/types/kernel.d.ts.map +1 -1
  68. package/accounts/kernel/createKernelAccount.ts +36 -5
  69. package/accounts/kernel/utils/account/ep0_7/encodeCallData.ts +19 -9
  70. package/accounts/kernel/utils/ep0_7/encodeExecuteBatchCall.ts +4 -2
  71. package/accounts/kernel/utils/ep0_7/encodeExecuteCall.ts +30 -2
  72. package/accounts/kernel/utils/ep0_7/encodeExecuteDelegateCall.ts +10 -5
  73. package/accounts/kernel/utils/ep0_7/encodeExecuteSingleCall.ts +10 -5
  74. package/accounts/kernel/utils/plugins/ep0_7/getEncodedPluginsData.ts +9 -4
  75. package/accounts/kernel/utils/plugins/ep0_7/getPluginsEnableTypedData.ts +5 -2
  76. package/accounts/utils/toKernelPluginManager.ts +5 -1
  77. package/clients/fallbackKernelAccountClient.ts +56 -36
  78. package/index.ts +1 -0
  79. package/package.json +1 -1
  80. package/types/kernel.ts +7 -0
@@ -2,5 +2,5 @@ import type { EntryPoint } from "permissionless/types";
2
2
  import type { Chain, Transport } from "viem";
3
3
  import type { KernelSmartAccount } from "../accounts/index.js";
4
4
  import type { KernelAccountClient } from "./kernelAccountClient.js";
5
- export declare const createFallbackKernelAccountClient: <TEntryPoint extends EntryPoint, TTransport extends Transport, TChain extends Chain | undefined, TSmartAccount extends KernelSmartAccount<TEntryPoint> | undefined>(clients: KernelAccountClient<TEntryPoint, TTransport, TChain, TSmartAccount>[]) => KernelAccountClient<TEntryPoint, TTransport, TChain, TSmartAccount>;
5
+ export declare const createFallbackKernelAccountClient: <TEntryPoint extends EntryPoint, TTransport extends Transport, TChain extends Chain | undefined, TSmartAccount extends KernelSmartAccount<TEntryPoint> | undefined>(clients: KernelAccountClient<TEntryPoint, TTransport, TChain, TSmartAccount>[], onError?: ((error: Error, clientUrl: string) => Promise<void>) | undefined) => KernelAccountClient<TEntryPoint, TTransport, TChain, TSmartAccount>;
6
6
  //# sourceMappingURL=fallbackKernelAccountClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fallbackKernelAccountClient.d.ts","sourceRoot":"","sources":["../../clients/fallbackKernelAccountClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEnE,eAAO,MAAM,iCAAiC,4TAwD7C,CAAA"}
1
+ {"version":3,"file":"fallbackKernelAccountClient.d.ts","sourceRoot":"","sources":["../../clients/fallbackKernelAccountClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEnE,eAAO,MAAM,iCAAiC,yQASxB,KAAK,aAAa,MAAM,KAAK,QAAQ,IAAI,CAAC,qFAmE/D,CAAA"}
package/_types/index.d.ts CHANGED
@@ -5,7 +5,7 @@ export { zerodevPaymasterActions, type ZeroDevPaymasterClientActions, kernelAcco
5
5
  export { createZeroDevPaymasterClient, type ZeroDevPaymasterClient } from "./clients/paymasterClient.js";
6
6
  export { createKernelAccountClient, type KernelAccountClient } from "./clients/kernelAccountClient.js";
7
7
  export { createFallbackKernelAccountClient } from "./clients/fallbackKernelAccountClient.js";
8
- export { type KernelValidator, type ZeroDevPaymasterRpcSchema, type KernelPluginManager, type Action } from "./types/kernel.js";
8
+ export { type KernelValidator, type KernelValidatorHook, type ZeroDevPaymasterRpcSchema, type KernelPluginManager, type Action } from "./types/kernel.js";
9
9
  export { KernelAccountAbi } from "./accounts/kernel/abi/KernelAccountAbi.js";
10
10
  export { KernelFactoryAbi } from "./accounts/kernel/abi/KernelFactoryAbi.js";
11
11
  export { KernelV3AccountAbi, KernelV3ExecuteAbi, KernelV3InitAbi } from "./accounts/kernel/abi/kernel_v_3_0_0/KernelAccountAbi.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,UAAU,EACb,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACH,oBAAoB,EACpB,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACtC,MAAM,6CAA6C,CAAA;AACpD,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAChF,OAAO,EACH,uBAAuB,EACvB,KAAK,6BAA6B,EAClC,0BAA0B,EAC1B,KAAK,0BAA0B,EAClC,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACH,4BAA4B,EAC5B,KAAK,sBAAsB,EAC9B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACH,yBAAyB,EACzB,KAAK,mBAAmB,EAC3B,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,iCAAiC,EAAE,MAAM,0CAA0C,CAAA;AAC5F,OAAO,EACH,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,MAAM,EACd,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AAC5E,OAAO,EACH,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EAClB,MAAM,0DAA0D,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0DAA0D,CAAA;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,gEAAgE,CAAA;AACvG,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAA;AAC1E,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,EACH,sBAAsB,EACtB,2BAA2B,EAC9B,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gEAAgE,CAAA;AACtG,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,UAAU,EACb,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACH,oBAAoB,EACpB,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACtC,MAAM,6CAA6C,CAAA;AACpD,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAChF,OAAO,EACH,uBAAuB,EACvB,KAAK,6BAA6B,EAClC,0BAA0B,EAC1B,KAAK,0BAA0B,EAClC,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACH,4BAA4B,EAC5B,KAAK,sBAAsB,EAC9B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACH,yBAAyB,EACzB,KAAK,mBAAmB,EAC3B,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,iCAAiC,EAAE,MAAM,0CAA0C,CAAA;AAC5F,OAAO,EACH,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,MAAM,EACd,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AAC5E,OAAO,EACH,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EAClB,MAAM,0DAA0D,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0DAA0D,CAAA;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,gEAAgE,CAAA;AACvG,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAA;AAC1E,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,EACH,sBAAsB,EACtB,2BAA2B,EAC9B,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gEAAgE,CAAA;AACtG,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAA"}
@@ -101,6 +101,10 @@ export type KernelValidator<entryPoint extends EntryPoint, Name extends string =
101
101
  isEnabled(accountAddress: Address, selector: Hex): Promise<boolean>;
102
102
  getIdentifier: () => Hex;
103
103
  };
104
+ export type KernelValidatorHook = {
105
+ getEnableData(accountAddress?: Address): Promise<Hex>;
106
+ getIdentifier: () => Hex;
107
+ };
104
108
  export type ValidatorInitData = {
105
109
  validatorAddress: Address;
106
110
  enableData: Hex;
@@ -108,6 +112,7 @@ export type ValidatorInitData = {
108
112
  };
109
113
  export type KernelPluginManager<entryPoint extends EntryPoint> = KernelValidator<entryPoint> & {
110
114
  sudoValidator?: KernelValidator<entryPoint>;
115
+ hook?: KernelValidatorHook;
111
116
  getPluginEnableSignature(accountAddress: Address): Promise<Hex>;
112
117
  getValidatorInitData(): Promise<ValidatorInitData>;
113
118
  getAction(): Action;
@@ -128,6 +133,7 @@ export type PluginInstallData<entryPoint extends EntryPoint> = entryPoint extend
128
133
  export type KernelPluginManagerParams<entryPoint extends EntryPoint> = {
129
134
  sudo?: KernelValidator<entryPoint>;
130
135
  regular?: KernelValidator<entryPoint>;
136
+ hook?: KernelValidatorHook;
131
137
  pluginEnableSignature?: Hex;
132
138
  validatorInitData?: ValidatorInitData;
133
139
  action?: Action;
@@ -1 +1 @@
1
- {"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../types/kernel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../types/kernel.ts"],"names":[],"mappings":"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"}
@@ -129,10 +129,12 @@ export const KERNEL_ADDRESSES: {
129
129
 
130
130
  const getKernelInitData = async <entryPoint extends EntryPoint>({
131
131
  entryPoint: entryPointAddress,
132
- kernelPluginManager
132
+ kernelPluginManager,
133
+ initHook
133
134
  }: {
134
135
  entryPoint: entryPoint
135
136
  kernelPluginManager: KernelPluginManager<entryPoint>
137
+ initHook: boolean
136
138
  }) => {
137
139
  const entryPointVersion = getEntryPointVersion(entryPointAddress)
138
140
  const { enableData, identifier, validatorAddress } =
@@ -149,7 +151,16 @@ const getKernelInitData = async <entryPoint extends EntryPoint>({
149
151
  return encodeFunctionData({
150
152
  abi: KernelV3InitAbi,
151
153
  functionName: "initialize",
152
- args: [identifier, zeroAddress, enableData, "0x"]
154
+ args: [
155
+ identifier,
156
+ initHook && kernelPluginManager.hook
157
+ ? kernelPluginManager.hook?.getIdentifier()
158
+ : zeroAddress,
159
+ enableData,
160
+ initHook && kernelPluginManager.hook
161
+ ? await kernelPluginManager.hook?.getEnableData()
162
+ : "0x"
163
+ ]
153
164
  })
154
165
  }
155
166
 
@@ -166,7 +177,8 @@ const getAccountInitCode = async <entryPoint extends EntryPoint>({
166
177
  accountLogicAddress,
167
178
  factoryStakerAddress,
168
179
  entryPoint: entryPointAddress,
169
- kernelPluginManager
180
+ kernelPluginManager,
181
+ initHook
170
182
  }: {
171
183
  index: bigint
172
184
  factoryAddress: Address
@@ -174,11 +186,13 @@ const getAccountInitCode = async <entryPoint extends EntryPoint>({
174
186
  factoryStakerAddress: Address
175
187
  entryPoint: entryPoint
176
188
  kernelPluginManager: KernelPluginManager<entryPoint>
189
+ initHook: boolean
177
190
  }): Promise<Hex> => {
178
191
  // Build the account initialization data
179
192
  const initialisationData = await getKernelInitData<entryPoint>({
180
193
  entryPoint: entryPointAddress,
181
- kernelPluginManager
194
+ kernelPluginManager,
195
+ initHook
182
196
  })
183
197
  const entryPointVersion = getEntryPointVersion(entryPointAddress)
184
198
 
@@ -291,10 +305,22 @@ export async function createKernelAccount<
291
305
  : await toKernelPluginManager<entryPoint>(client, {
292
306
  sudo: plugins.sudo,
293
307
  regular: plugins.regular,
308
+ hook: plugins.hook,
294
309
  action: plugins.action,
295
310
  pluginEnableSignature: plugins.pluginEnableSignature,
296
311
  entryPoint: entryPointAddress
297
312
  })
313
+
314
+ // initHook flag is activated only if both the hook and sudo validator are given
315
+ // if the hook is given with regular plugins, then consider it as a hook for regular plugins
316
+ const initHook = Boolean(
317
+ isKernelPluginManager<entryPoint>(plugins)
318
+ ? plugins.hook &&
319
+ plugins.getIdentifier() ===
320
+ plugins.sudoValidator?.getIdentifier()
321
+ : plugins.hook && !plugins.regular
322
+ )
323
+
298
324
  // Helper to generate the init code for the smart account
299
325
  const generateInitCode = async () => {
300
326
  if (!accountLogicAddress || !factoryAddress)
@@ -305,7 +331,8 @@ export async function createKernelAccount<
305
331
  accountLogicAddress,
306
332
  factoryStakerAddress,
307
333
  entryPoint: entryPointAddress,
308
- kernelPluginManager
334
+ kernelPluginManager,
335
+ initHook
309
336
  })
310
337
  }
311
338
 
@@ -358,6 +385,10 @@ export async function createKernelAccount<
358
385
  if (entryPointVersion === "v0.6") {
359
386
  return encodeCallDataEpV06(tx)
360
387
  }
388
+
389
+ if (plugins.hook) {
390
+ return encodeCallDataEpV07(tx, true)
391
+ }
361
392
  return encodeCallDataEpV07(tx)
362
393
  },
363
394
  async getFactory() {
@@ -1,4 +1,4 @@
1
- import type { EntryPoint } from "permissionless/types/entrypoint.js"
1
+ import type { EntryPoint } from "permissionless/types"
2
2
  import { EXEC_TYPE } from "../../../../../constants.js"
3
3
  import type { KernelSmartAccount } from "../../../createKernelAccount.js"
4
4
  import { encodeExecuteBatchCall } from "../../ep0_7/encodeExecuteBatchCall.js"
@@ -8,23 +8,32 @@ import { encodeExecuteSingleCall } from "../../ep0_7/encodeExecuteSingleCall.js"
8
8
  export const encodeCallData = async <
9
9
  entryPoint extends EntryPoint = EntryPoint
10
10
  >(
11
- tx: Parameters<KernelSmartAccount<entryPoint>["encodeCallData"]>[0]
11
+ tx: Parameters<KernelSmartAccount<entryPoint>["encodeCallData"]>[0],
12
+ includeHooks?: boolean
12
13
  ) => {
13
14
  if (Array.isArray(tx)) {
14
15
  if (tx.some((t) => t.callType === "delegatecall")) {
15
16
  throw new Error("Cannot batch delegatecall")
16
17
  }
17
18
  // Encode a batched call
18
- return encodeExecuteBatchCall(tx, {
19
- execType: EXEC_TYPE.DEFAULT
20
- })
19
+ return encodeExecuteBatchCall(
20
+ tx,
21
+ {
22
+ execType: EXEC_TYPE.DEFAULT
23
+ },
24
+ includeHooks
25
+ )
21
26
  }
22
27
 
23
28
  // Default to `call`
24
29
  if (!tx.callType || tx.callType === "call") {
25
- return encodeExecuteSingleCall(tx, {
26
- execType: EXEC_TYPE.DEFAULT
27
- })
30
+ return encodeExecuteSingleCall(
31
+ tx,
32
+ {
33
+ execType: EXEC_TYPE.DEFAULT
34
+ },
35
+ includeHooks
36
+ )
28
37
  }
29
38
 
30
39
  if (tx.callType === "delegatecall") {
@@ -32,7 +41,8 @@ export const encodeCallData = async <
32
41
  { to: tx.to, data: tx.data },
33
42
  {
34
43
  execType: EXEC_TYPE.DEFAULT
35
- }
44
+ },
45
+ includeHooks
36
46
  )
37
47
  }
38
48
 
@@ -8,7 +8,8 @@ import {
8
8
 
9
9
  export const encodeExecuteBatchCall = (
10
10
  args: CallArgs[],
11
- options: Omit<EncodeExecuteOptions, "callType">
11
+ options: Omit<EncodeExecuteOptions, "callType">,
12
+ includeHooks?: boolean
12
13
  ) => {
13
14
  const calldata = encodeAbiParameters(
14
15
  [
@@ -46,6 +47,7 @@ export const encodeExecuteBatchCall = (
46
47
  {
47
48
  callType: CALL_TYPE.BATCH,
48
49
  execType: options.execType
49
- }
50
+ },
51
+ includeHooks
50
52
  )
51
53
  }
@@ -1,4 +1,11 @@
1
- import { type Hex, concatHex, encodeFunctionData, toHex } from "viem"
1
+ import {
2
+ type Hex,
3
+ concatHex,
4
+ encodeFunctionData,
5
+ getAbiItem,
6
+ toFunctionSelector,
7
+ toHex
8
+ } from "viem"
2
9
  import { CALL_TYPE } from "../../../../constants.js"
3
10
  import { getExecMode } from "../../../../utils.js"
4
11
  import { KernelV3ExecuteAbi } from "../../abi/kernel_v_3_0_0/KernelAccountAbi.js"
@@ -16,7 +23,8 @@ type EncodeExecuteCallArgs<TOptions> =
16
23
 
17
24
  export const encodeExecuteCall = <TOptions extends EncodeExecuteOptions>(
18
25
  args: EncodeExecuteCallArgs<TOptions>,
19
- options: TOptions
26
+ options: TOptions,
27
+ includeHooks = false
20
28
  ) => {
21
29
  let calldata: Hex
22
30
  if ("calldata" in args) {
@@ -30,6 +38,26 @@ export const encodeExecuteCall = <TOptions extends EncodeExecuteOptions>(
30
38
  args.data
31
39
  ])
32
40
  }
41
+
42
+ const executeUserOpSig = toFunctionSelector(
43
+ getAbiItem({ abi: KernelV3ExecuteAbi, name: "executeUserOp" })
44
+ )
45
+
46
+ // The calldata using hook plugin should be as follows:
47
+ // [0:4] - `executeUserOp` function signature
48
+ // [4:8] - `execute` function signature
49
+ // [8:] - `execute` function arguments
50
+ if (includeHooks) {
51
+ return concatHex([
52
+ executeUserOpSig,
53
+ encodeFunctionData({
54
+ abi: KernelV3ExecuteAbi,
55
+ functionName: "execute",
56
+ args: [getExecMode(options), calldata]
57
+ })
58
+ ])
59
+ }
60
+
33
61
  return encodeFunctionData({
34
62
  abi: KernelV3ExecuteAbi,
35
63
  functionName: "execute",
@@ -7,10 +7,15 @@ import {
7
7
 
8
8
  export const encodeExecuteDelegateCall = (
9
9
  args: DelegateCallArgs,
10
- options: Omit<EncodeExecuteOptions, "callType">
10
+ options: Omit<EncodeExecuteOptions, "callType">,
11
+ includeHooks?: boolean
11
12
  ) => {
12
- return encodeExecuteCall(args, {
13
- callType: CALL_TYPE.DELEGATE_CALL,
14
- execType: options.execType
15
- })
13
+ return encodeExecuteCall(
14
+ args,
15
+ {
16
+ callType: CALL_TYPE.DELEGATE_CALL,
17
+ execType: options.execType
18
+ },
19
+ includeHooks
20
+ )
16
21
  }
@@ -7,10 +7,15 @@ import {
7
7
 
8
8
  export const encodeExecuteSingleCall = (
9
9
  args: CallArgs,
10
- options: Omit<EncodeExecuteOptions, "callType">
10
+ options: Omit<EncodeExecuteOptions, "callType">,
11
+ includeHooks?: boolean
11
12
  ) => {
12
- return encodeExecuteCall(args, {
13
- callType: CALL_TYPE.SINGLE,
14
- execType: options.execType
15
- })
13
+ return encodeExecuteCall(
14
+ args,
15
+ {
16
+ callType: CALL_TYPE.SINGLE,
17
+ execType: options.execType
18
+ },
19
+ includeHooks
20
+ )
16
21
  }
@@ -6,28 +6,33 @@ import {
6
6
  zeroAddress
7
7
  } from "viem"
8
8
  import { CALL_TYPE } from "../../../../../constants.js"
9
- import type { Action } from "../../../../../types/kernel.js"
9
+ import type {
10
+ Action,
11
+ KernelValidatorHook
12
+ } from "../../../../../types/kernel.js"
10
13
 
11
14
  export const getEncodedPluginsData = async ({
12
15
  enableSignature,
13
16
  userOpSignature,
14
17
  action,
15
- enableData
18
+ enableData,
19
+ hook
16
20
  }: {
17
21
  enableSignature: Hex
18
22
  userOpSignature: Hex
19
23
  action: Action
20
24
  enableData: Hex
25
+ hook?: KernelValidatorHook
21
26
  }) => {
22
27
  return concat([
23
- zeroAddress, // hook address 20 bytes
28
+ hook?.getIdentifier() ?? zeroAddress, // hook address 20 bytes
24
29
  encodeAbiParameters(
25
30
  parseAbiParameters(
26
31
  "bytes validatorData, bytes hookData, bytes selectorData, bytes enableSig, bytes userOpSig"
27
32
  ),
28
33
  [
29
34
  enableData,
30
- "0x",
35
+ (await hook?.getEnableData()) ?? "0x",
31
36
  concat([
32
37
  action.selector,
33
38
  action.address,
@@ -12,6 +12,7 @@ import {
12
12
  zeroAddress
13
13
  } from "viem"
14
14
  import { CALL_TYPE, VALIDATOR_TYPE } from "../../../../../constants.js"
15
+ import type { KernelValidatorHook } from "../../../../../types/kernel.js"
15
16
  import type { Kernel2_0_plugins } from "../ep0_6/getPluginsEnableTypedData.js"
16
17
 
17
18
  export const getPluginsEnableTypedData = async <
@@ -21,6 +22,7 @@ export const getPluginsEnableTypedData = async <
21
22
  chainId,
22
23
  kernelVersion,
23
24
  action,
25
+ hook,
24
26
  validator,
25
27
  validatorNonce
26
28
  }: {
@@ -28,6 +30,7 @@ export const getPluginsEnableTypedData = async <
28
30
  chainId: number
29
31
  kernelVersion: string
30
32
  validatorNonce: number
33
+ hook?: KernelValidatorHook
31
34
  } & Kernel2_0_plugins<entryPoint>): Promise<
32
35
  Parameters<CustomSource["signTypedData"]>[0]
33
36
  > => {
@@ -54,9 +57,9 @@ export const getPluginsEnableTypedData = async <
54
57
  pad(validator.getIdentifier(), { size: 20, dir: "right" })
55
58
  ]),
56
59
  nonce: validatorNonce,
57
- hook: zeroAddress,
60
+ hook: hook?.getIdentifier() ?? zeroAddress,
58
61
  validatorData: await validator.getEnableData(accountAddress),
59
- hookData: "0x",
62
+ hookData: (await hook?.getEnableData(accountAddress)) ?? "0x",
60
63
  selectorData: concat([
61
64
  action.selector,
62
65
  action.address,
@@ -51,6 +51,7 @@ export async function toKernelPluginManager<
51
51
  {
52
52
  sudo,
53
53
  regular,
54
+ hook,
54
55
  pluginEnableSignature,
55
56
  validatorInitData,
56
57
  action,
@@ -130,7 +131,8 @@ export async function toKernelPluginManager<
130
131
  enableSignature,
131
132
  userOpSignature,
132
133
  action,
133
- enableData: await regular.getEnableData(accountAddress)
134
+ enableData: await regular.getEnableData(accountAddress),
135
+ hook
134
136
  })
135
137
  } else if (sudo) {
136
138
  return userOpSignature
@@ -190,6 +192,7 @@ export async function toKernelPluginManager<
190
192
  chainId,
191
193
  kernelVersion: version,
192
194
  action,
195
+ hook,
193
196
  validator: regular,
194
197
  validatorNonce
195
198
  })
@@ -238,6 +241,7 @@ export async function toKernelPluginManager<
238
241
  return {
239
242
  sudoValidator: sudo,
240
243
  ...activeValidator,
244
+ hook,
241
245
  getIdentifier,
242
246
  encodeModuleInstallCallData: async (accountAddress: Address) => {
243
247
  if (!action) {
@@ -11,50 +11,70 @@ export const createFallbackKernelAccountClient = <
11
11
  >(
12
12
  clients: Array<
13
13
  KernelAccountClient<TEntryPoint, TTransport, TChain, TSmartAccount>
14
- >
14
+ >,
15
+ onError?: (error: Error, clientUrl: string) => Promise<void>
15
16
  ): KernelAccountClient<TEntryPoint, TTransport, TChain, TSmartAccount> => {
17
+ // Function to create a fallback method for a given property.
18
+ // This method will try each client in sequence until one succeeds or all fail.
19
+ function createFallbackMethod(prop: PropertyKey) {
20
+ // biome-ignore lint/suspicious/noExplicitAny: expected any
21
+ return async (...args: any[]) => {
22
+ for (let i = 0; i < clients.length; i++) {
23
+ try {
24
+ const method = Reflect.get(clients[i], prop)
25
+ if (typeof method === "function") {
26
+ return await method(...args)
27
+ }
28
+ } catch (error) {
29
+ console.error(
30
+ `Action ${String(prop)} failed with client ${
31
+ clients[i].transport.url
32
+ }, trying next if available.`
33
+ )
34
+ // Call the error handler if provided.
35
+ if (onError !== undefined) {
36
+ await onError(error as Error, clients[i].transport.url)
37
+ }
38
+ if (i === clients.length - 1) {
39
+ throw error
40
+ }
41
+ }
42
+ }
43
+ }
44
+ }
45
+
16
46
  const proxyClient = new Proxy(clients[0], {
17
47
  get(_target, prop, receiver) {
18
- for (const client of clients) {
19
- const value = Reflect.get(client, prop, receiver)
20
- if (value !== undefined) {
21
- // If the property is a function, wrap it to add fallback logic
22
- if (typeof value === "function") {
23
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
24
- return async (...args: any[]) => {
25
- for (let i = 0; i < clients.length; i++) {
26
- try {
27
- const method = Reflect.get(
28
- clients[i],
29
- prop,
30
- receiver
31
- )
32
- if (typeof method === "function") {
33
- // Attempt to call the function on the current client
34
- return await method(...args)
35
- }
36
- } catch (error) {
37
- console.error(
38
- `Action ${String(
39
- prop
40
- )} failed with client ${
41
- client.transport.url
42
- }, trying next if available.`,
43
- error
44
- )
45
- if (i === clients.length - 1) {
46
- throw error
47
- }
48
- }
48
+ if (prop === "extend") {
49
+ // biome-ignore lint/suspicious/noExplicitAny: expected any
50
+ return (fn: any) => {
51
+ const modifications = fn(proxyClient)
52
+ for (const [key, modification] of Object.entries(
53
+ modifications
54
+ )) {
55
+ if (typeof modification === "function") {
56
+ // biome-ignore lint/suspicious/noExplicitAny: expected any
57
+ ;(proxyClient as any)[key] = async (
58
+ // biome-ignore lint/suspicious/noExplicitAny: expected any
59
+ ...args: any[]
60
+ ) => {
61
+ return modification(...args)
49
62
  }
63
+ } else {
64
+ console.error(
65
+ `Expected a function for modification of ${key}, but received type ${typeof modification}`
66
+ )
50
67
  }
51
68
  }
52
- // For non-function properties, return the first defined value found
53
- return value
69
+ return proxyClient
54
70
  }
55
71
  }
56
- // If no clients have a defined value for the property, return undefined
57
- return undefined
72
+
73
+ const value = Reflect.get(_target, prop, receiver)
74
+ if (typeof value === "function") {
75
+ return createFallbackMethod(prop)
76
+ }
77
+ return value
58
78
  }
59
79
  })
60
80
 
package/index.ts CHANGED
@@ -30,6 +30,7 @@ export {
30
30
  export { createFallbackKernelAccountClient } from "./clients/fallbackKernelAccountClient.js"
31
31
  export {
32
32
  type KernelValidator,
33
+ type KernelValidatorHook,
33
34
  type ZeroDevPaymasterRpcSchema,
34
35
  type KernelPluginManager,
35
36
  type Action
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zerodev/sdk",
3
- "version": "5.2.15",
3
+ "version": "5.2.17",
4
4
  "author": "ZeroDev",
5
5
  "main": "./_cjs/index.js",
6
6
  "module": "./_esm/index.js",
package/types/kernel.ts CHANGED
@@ -143,6 +143,11 @@ export type KernelValidator<
143
143
  getIdentifier: () => Hex
144
144
  }
145
145
 
146
+ export type KernelValidatorHook = {
147
+ getEnableData(accountAddress?: Address): Promise<Hex>
148
+ getIdentifier: () => Hex
149
+ }
150
+
146
151
  export type ValidatorInitData = {
147
152
  validatorAddress: Address
148
153
  enableData: Hex
@@ -152,6 +157,7 @@ export type ValidatorInitData = {
152
157
  export type KernelPluginManager<entryPoint extends EntryPoint> =
153
158
  KernelValidator<entryPoint> & {
154
159
  sudoValidator?: KernelValidator<entryPoint>
160
+ hook?: KernelValidatorHook
155
161
  getPluginEnableSignature(accountAddress: Address): Promise<Hex>
156
162
  getValidatorInitData(): Promise<ValidatorInitData>
157
163
  getAction(): Action
@@ -182,6 +188,7 @@ export type PluginInstallData<entryPoint extends EntryPoint> =
182
188
  export type KernelPluginManagerParams<entryPoint extends EntryPoint> = {
183
189
  sudo?: KernelValidator<entryPoint>
184
190
  regular?: KernelValidator<entryPoint>
191
+ hook?: KernelValidatorHook
185
192
  pluginEnableSignature?: Hex
186
193
  validatorInitData?: ValidatorInitData
187
194
  action?: Action