@zerodev/sdk 5.2.0-alpha-4 → 5.2.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.
Files changed (203) hide show
  1. package/_cjs/accounts/kernel/abi/kernel_v_3_0_0/KernelAccountAbi.js +115 -58
  2. package/_cjs/accounts/kernel/abi/kernel_v_3_0_0/KernelAccountAbi.js.map +1 -1
  3. package/_cjs/accounts/kernel/abi/kernel_v_3_0_0/KernelFactoryAbi.js +39 -0
  4. package/_cjs/accounts/kernel/abi/kernel_v_3_0_0/KernelFactoryAbi.js.map +1 -0
  5. package/_cjs/accounts/kernel/abi/kernel_v_3_0_0/KernelFactoryStakerAbi.js +203 -0
  6. package/_cjs/accounts/kernel/abi/kernel_v_3_0_0/KernelFactoryStakerAbi.js.map +1 -0
  7. package/_cjs/accounts/kernel/createKernelAccount.js +42 -22
  8. package/_cjs/accounts/kernel/createKernelAccount.js.map +1 -1
  9. package/_cjs/accounts/kernel/utils/account/ep0_7/getKernelV3Nonce.js +22 -0
  10. package/_cjs/accounts/kernel/utils/account/ep0_7/getKernelV3Nonce.js.map +1 -0
  11. package/_cjs/accounts/kernel/utils/common/getActionSelector.js +19 -0
  12. package/_cjs/accounts/kernel/utils/common/getActionSelector.js.map +1 -0
  13. package/_cjs/accounts/kernel/utils/plugins/ep0_6/getEncodedPluginsData.js +22 -0
  14. package/_cjs/accounts/kernel/utils/plugins/ep0_6/getEncodedPluginsData.js.map +1 -0
  15. package/_cjs/accounts/kernel/utils/plugins/ep0_6/getPluginsEnableTypedData.js +39 -0
  16. package/_cjs/accounts/kernel/utils/plugins/ep0_6/getPluginsEnableTypedData.js.map +1 -0
  17. package/_cjs/accounts/kernel/utils/plugins/ep0_7/getEncodedPluginsData.js +21 -0
  18. package/_cjs/accounts/kernel/utils/plugins/ep0_7/getEncodedPluginsData.js.map +1 -0
  19. package/_cjs/accounts/kernel/utils/plugins/ep0_7/getPluginsEnableTypedData.js +41 -0
  20. package/_cjs/accounts/kernel/utils/plugins/ep0_7/getPluginsEnableTypedData.js.map +1 -0
  21. package/_cjs/accounts/kernel/utils/plugins/ep0_7/isPluginInitialized.js +20 -0
  22. package/_cjs/accounts/kernel/utils/plugins/ep0_7/isPluginInitialized.js.map +1 -0
  23. package/_cjs/accounts/kernel/v1/createKernelV1Account.js +4 -2
  24. package/_cjs/accounts/kernel/v1/createKernelV1Account.js.map +1 -1
  25. package/_cjs/accounts/kernel/v2/createKernelV2Account.js +9 -4
  26. package/_cjs/accounts/kernel/v2/createKernelV2Account.js.map +1 -1
  27. package/_cjs/accounts/utils/getCustomNonceKeyFromString.js +19 -0
  28. package/_cjs/accounts/utils/getCustomNonceKeyFromString.js.map +1 -0
  29. package/_cjs/accounts/utils/index.js +3 -1
  30. package/_cjs/accounts/utils/index.js.map +1 -1
  31. package/_cjs/accounts/utils/toKernelPluginManager.js +120 -184
  32. package/_cjs/accounts/utils/toKernelPluginManager.js.map +1 -1
  33. package/_cjs/actions/account-client/getUserOperationGasPrice.js +15 -0
  34. package/_cjs/actions/account-client/getUserOperationGasPrice.js.map +1 -0
  35. package/_cjs/actions/index.js +3 -1
  36. package/_cjs/actions/index.js.map +1 -1
  37. package/_cjs/actions/paymaster/estimateGasInERC20.js +2 -2
  38. package/_cjs/actions/paymaster/estimateGasInERC20.js.map +1 -1
  39. package/_cjs/actions/paymaster/sponsorUserOperation.js +1 -2
  40. package/_cjs/actions/paymaster/sponsorUserOperation.js.map +1 -1
  41. package/_cjs/clients/decorators/kernel.js +3 -1
  42. package/_cjs/clients/decorators/kernel.js.map +1 -1
  43. package/_cjs/clients/kernelAccountClient.js +29 -3
  44. package/_cjs/clients/kernelAccountClient.js.map +1 -1
  45. package/_cjs/clients/paymasterClient.js +18 -1
  46. package/_cjs/clients/paymasterClient.js.map +1 -1
  47. package/_cjs/clients/utils.js +31 -0
  48. package/_cjs/clients/utils.js.map +1 -0
  49. package/_cjs/constants.js +5 -2
  50. package/_cjs/constants.js.map +1 -1
  51. package/_cjs/index.js +6 -1
  52. package/_cjs/index.js.map +1 -1
  53. package/_cjs/providers/KernelEIP1193Provider.js +37 -0
  54. package/_cjs/providers/KernelEIP1193Provider.js.map +1 -1
  55. package/_cjs/types/index.js.map +1 -1
  56. package/_cjs/types/kernel.js.map +1 -1
  57. package/_cjs/utils.js +1 -2
  58. package/_cjs/utils.js.map +1 -1
  59. package/_esm/accounts/kernel/abi/kernel_v_3_0_0/KernelAccountAbi.js +115 -58
  60. package/_esm/accounts/kernel/abi/kernel_v_3_0_0/KernelAccountAbi.js.map +1 -1
  61. package/_esm/accounts/kernel/abi/kernel_v_3_0_0/KernelFactoryAbi.js +36 -0
  62. package/_esm/accounts/kernel/abi/kernel_v_3_0_0/KernelFactoryAbi.js.map +1 -0
  63. package/_esm/accounts/kernel/abi/kernel_v_3_0_0/KernelFactoryStakerAbi.js +200 -0
  64. package/_esm/accounts/kernel/abi/kernel_v_3_0_0/KernelFactoryStakerAbi.js.map +1 -0
  65. package/_esm/accounts/kernel/createKernelAccount.js +43 -23
  66. package/_esm/accounts/kernel/createKernelAccount.js.map +1 -1
  67. package/_esm/accounts/kernel/utils/account/ep0_7/getKernelV3Nonce.js +18 -0
  68. package/_esm/accounts/kernel/utils/account/ep0_7/getKernelV3Nonce.js.map +1 -0
  69. package/_esm/accounts/kernel/utils/common/getActionSelector.js +15 -0
  70. package/_esm/accounts/kernel/utils/common/getActionSelector.js.map +1 -0
  71. package/_esm/accounts/kernel/utils/plugins/ep0_6/getEncodedPluginsData.js +18 -0
  72. package/_esm/accounts/kernel/utils/plugins/ep0_6/getEncodedPluginsData.js.map +1 -0
  73. package/_esm/accounts/kernel/utils/plugins/ep0_6/getPluginsEnableTypedData.js +35 -0
  74. package/_esm/accounts/kernel/utils/plugins/ep0_6/getPluginsEnableTypedData.js.map +1 -0
  75. package/_esm/accounts/kernel/utils/plugins/ep0_7/getEncodedPluginsData.js +18 -0
  76. package/_esm/accounts/kernel/utils/plugins/ep0_7/getEncodedPluginsData.js.map +1 -0
  77. package/_esm/accounts/kernel/utils/plugins/ep0_7/getPluginsEnableTypedData.js +42 -0
  78. package/_esm/accounts/kernel/utils/plugins/ep0_7/getPluginsEnableTypedData.js.map +1 -0
  79. package/_esm/accounts/kernel/utils/plugins/ep0_7/isPluginInitialized.js +16 -0
  80. package/_esm/accounts/kernel/utils/plugins/ep0_7/isPluginInitialized.js.map +1 -0
  81. package/_esm/accounts/kernel/v1/createKernelV1Account.js +5 -3
  82. package/_esm/accounts/kernel/v1/createKernelV1Account.js.map +1 -1
  83. package/_esm/accounts/kernel/v2/createKernelV2Account.js +10 -5
  84. package/_esm/accounts/kernel/v2/createKernelV2Account.js.map +1 -1
  85. package/_esm/accounts/utils/getCustomNonceKeyFromString.js +15 -0
  86. package/_esm/accounts/utils/getCustomNonceKeyFromString.js.map +1 -0
  87. package/_esm/accounts/utils/index.js +1 -0
  88. package/_esm/accounts/utils/index.js.map +1 -1
  89. package/_esm/accounts/utils/toKernelPluginManager.js +124 -188
  90. package/_esm/accounts/utils/toKernelPluginManager.js.map +1 -1
  91. package/_esm/actions/account-client/getUserOperationGasPrice.js +11 -0
  92. package/_esm/actions/account-client/getUserOperationGasPrice.js.map +1 -0
  93. package/_esm/actions/index.js +1 -0
  94. package/_esm/actions/index.js.map +1 -1
  95. package/_esm/actions/paymaster/estimateGasInERC20.js +2 -2
  96. package/_esm/actions/paymaster/estimateGasInERC20.js.map +1 -1
  97. package/_esm/actions/paymaster/sponsorUserOperation.js +1 -2
  98. package/_esm/actions/paymaster/sponsorUserOperation.js.map +1 -1
  99. package/_esm/clients/decorators/kernel.js +3 -1
  100. package/_esm/clients/decorators/kernel.js.map +1 -1
  101. package/_esm/clients/kernelAccountClient.js +30 -4
  102. package/_esm/clients/kernelAccountClient.js.map +1 -1
  103. package/_esm/clients/paymasterClient.js +19 -2
  104. package/_esm/clients/paymasterClient.js.map +1 -1
  105. package/_esm/clients/utils.js +26 -0
  106. package/_esm/clients/utils.js.map +1 -0
  107. package/_esm/constants.js +4 -1
  108. package/_esm/constants.js.map +1 -1
  109. package/_esm/index.js +3 -1
  110. package/_esm/index.js.map +1 -1
  111. package/_esm/providers/KernelEIP1193Provider.js +37 -0
  112. package/_esm/providers/KernelEIP1193Provider.js.map +1 -1
  113. package/_esm/types/index.js.map +1 -1
  114. package/_esm/types/kernel.js.map +1 -1
  115. package/_esm/utils.js +2 -3
  116. package/_esm/utils.js.map +1 -1
  117. package/_types/accounts/kernel/abi/kernel_v_3_0_0/KernelAccountAbi.d.ts +110 -20
  118. package/_types/accounts/kernel/abi/kernel_v_3_0_0/KernelAccountAbi.d.ts.map +1 -1
  119. package/_types/accounts/kernel/abi/kernel_v_3_0_0/KernelFactoryAbi.d.ts +60 -0
  120. package/_types/accounts/kernel/abi/kernel_v_3_0_0/KernelFactoryAbi.d.ts.map +1 -0
  121. package/_types/accounts/kernel/abi/kernel_v_3_0_0/KernelFactoryStakerAbi.d.ts +215 -0
  122. package/_types/accounts/kernel/abi/kernel_v_3_0_0/KernelFactoryStakerAbi.d.ts.map +1 -0
  123. package/_types/accounts/kernel/createKernelAccount.d.ts +7 -4
  124. package/_types/accounts/kernel/createKernelAccount.d.ts.map +1 -1
  125. package/_types/accounts/kernel/utils/account/ep0_7/getKernelV3Nonce.d.ts +3 -0
  126. package/_types/accounts/kernel/utils/account/ep0_7/getKernelV3Nonce.d.ts.map +1 -0
  127. package/_types/accounts/kernel/utils/common/getActionSelector.d.ts +4 -0
  128. package/_types/accounts/kernel/utils/common/getActionSelector.d.ts.map +1 -0
  129. package/_types/accounts/kernel/utils/plugins/ep0_6/getEncodedPluginsData.d.ts +9 -0
  130. package/_types/accounts/kernel/utils/plugins/ep0_6/getEncodedPluginsData.d.ts.map +1 -0
  131. package/_types/accounts/kernel/utils/plugins/ep0_6/getPluginsEnableTypedData.d.ts +13 -0
  132. package/_types/accounts/kernel/utils/plugins/ep0_6/getPluginsEnableTypedData.d.ts.map +1 -0
  133. package/_types/accounts/kernel/utils/plugins/ep0_7/getEncodedPluginsData.d.ts +9 -0
  134. package/_types/accounts/kernel/utils/plugins/ep0_7/getEncodedPluginsData.d.ts.map +1 -0
  135. package/_types/accounts/kernel/utils/plugins/ep0_7/getPluginsEnableTypedData.d.ts +10 -0
  136. package/_types/accounts/kernel/utils/plugins/ep0_7/getPluginsEnableTypedData.d.ts.map +1 -0
  137. package/_types/accounts/kernel/utils/plugins/ep0_7/isPluginInitialized.d.ts +3 -0
  138. package/_types/accounts/kernel/utils/plugins/ep0_7/isPluginInitialized.d.ts.map +1 -0
  139. package/_types/accounts/kernel/v1/createKernelV1Account.d.ts +1 -1
  140. package/_types/accounts/kernel/v1/createKernelV1Account.d.ts.map +1 -1
  141. package/_types/accounts/kernel/v2/createKernelV2Account.d.ts +3 -1
  142. package/_types/accounts/kernel/v2/createKernelV2Account.d.ts.map +1 -1
  143. package/_types/accounts/utils/getCustomNonceKeyFromString.d.ts +3 -0
  144. package/_types/accounts/utils/getCustomNonceKeyFromString.d.ts.map +1 -0
  145. package/_types/accounts/utils/index.d.ts +1 -0
  146. package/_types/accounts/utils/index.d.ts.map +1 -1
  147. package/_types/accounts/utils/toKernelPluginManager.d.ts +1 -1
  148. package/_types/accounts/utils/toKernelPluginManager.d.ts.map +1 -1
  149. package/_types/actions/account-client/getUserOperationGasPrice.d.ts +9 -0
  150. package/_types/actions/account-client/getUserOperationGasPrice.d.ts.map +1 -0
  151. package/_types/actions/index.d.ts +1 -0
  152. package/_types/actions/index.d.ts.map +1 -1
  153. package/_types/actions/paymaster/estimateGasInERC20.d.ts.map +1 -1
  154. package/_types/actions/paymaster/sponsorUserOperation.d.ts.map +1 -1
  155. package/_types/clients/decorators/kernel.d.ts +8 -1
  156. package/_types/clients/decorators/kernel.d.ts.map +1 -1
  157. package/_types/clients/kernelAccountClient.d.ts +12 -4
  158. package/_types/clients/kernelAccountClient.d.ts.map +1 -1
  159. package/_types/clients/paymasterClient.d.ts.map +1 -1
  160. package/_types/clients/utils.d.ts +3 -0
  161. package/_types/clients/utils.d.ts.map +1 -0
  162. package/_types/constants.d.ts +4 -1
  163. package/_types/constants.d.ts.map +1 -1
  164. package/_types/index.d.ts +3 -1
  165. package/_types/index.d.ts.map +1 -1
  166. package/_types/providers/KernelEIP1193Provider.d.ts +2 -0
  167. package/_types/providers/KernelEIP1193Provider.d.ts.map +1 -1
  168. package/_types/types/index.d.ts +1 -1
  169. package/_types/types/index.d.ts.map +1 -1
  170. package/_types/types/kernel.d.ts +32 -17
  171. package/_types/types/kernel.d.ts.map +1 -1
  172. package/_types/utils.d.ts.map +1 -1
  173. package/accounts/kernel/abi/kernel_v_3_0_0/KernelAccountAbi.ts +115 -58
  174. package/accounts/kernel/abi/kernel_v_3_0_0/KernelFactoryAbi.ts +35 -0
  175. package/accounts/kernel/abi/kernel_v_3_0_0/KernelFactoryStakerAbi.ts +199 -0
  176. package/accounts/kernel/createKernelAccount.ts +57 -26
  177. package/accounts/kernel/utils/account/ep0_7/getKernelV3Nonce.ts +24 -0
  178. package/accounts/kernel/utils/common/getActionSelector.ts +20 -0
  179. package/accounts/kernel/utils/plugins/ep0_6/getEncodedPluginsData.ts +39 -0
  180. package/accounts/kernel/utils/plugins/ep0_6/getPluginsEnableTypedData.ts +76 -0
  181. package/accounts/kernel/utils/plugins/ep0_7/getEncodedPluginsData.ts +47 -0
  182. package/accounts/kernel/utils/plugins/ep0_7/getPluginsEnableTypedData.ts +63 -0
  183. package/accounts/kernel/utils/plugins/ep0_7/isPluginInitialized.ts +23 -0
  184. package/accounts/kernel/v1/createKernelV1Account.ts +20 -8
  185. package/accounts/kernel/v2/createKernelV2Account.ts +17 -6
  186. package/accounts/utils/getCustomNonceKeyFromString.ts +21 -0
  187. package/accounts/utils/index.ts +2 -0
  188. package/accounts/utils/toKernelPluginManager.ts +155 -224
  189. package/actions/account-client/getUserOperationGasPrice.ts +26 -0
  190. package/actions/index.ts +5 -0
  191. package/actions/paymaster/estimateGasInERC20.ts +2 -3
  192. package/actions/paymaster/sponsorUserOperation.ts +1 -3
  193. package/clients/decorators/kernel.ts +22 -6
  194. package/clients/kernelAccountClient.ts +36 -3
  195. package/clients/paymasterClient.ts +24 -1
  196. package/clients/utils.ts +28 -0
  197. package/constants.ts +6 -2
  198. package/index.ts +6 -1
  199. package/package.json +4 -4
  200. package/providers/KernelEIP1193Provider.ts +51 -0
  201. package/types/index.ts +4 -2
  202. package/types/kernel.ts +52 -38
  203. package/utils.ts +2 -3
@@ -0,0 +1,199 @@
1
+ export const KernelFactoryStakerAbi = [
2
+ {
3
+ type: "constructor",
4
+ inputs: [{ name: "_owner", type: "address", internalType: "address" }],
5
+ stateMutability: "nonpayable"
6
+ },
7
+ {
8
+ type: "function",
9
+ name: "approveFactory",
10
+ inputs: [
11
+ {
12
+ name: "factory",
13
+ type: "address",
14
+ internalType: "contract KernelFactory"
15
+ },
16
+ { name: "approval", type: "bool", internalType: "bool" }
17
+ ],
18
+ outputs: [],
19
+ stateMutability: "payable"
20
+ },
21
+ {
22
+ type: "function",
23
+ name: "approved",
24
+ inputs: [
25
+ {
26
+ name: "",
27
+ type: "address",
28
+ internalType: "contract KernelFactory"
29
+ }
30
+ ],
31
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
32
+ stateMutability: "view"
33
+ },
34
+ {
35
+ type: "function",
36
+ name: "cancelOwnershipHandover",
37
+ inputs: [],
38
+ outputs: [],
39
+ stateMutability: "payable"
40
+ },
41
+ {
42
+ type: "function",
43
+ name: "completeOwnershipHandover",
44
+ inputs: [
45
+ { name: "pendingOwner", type: "address", internalType: "address" }
46
+ ],
47
+ outputs: [],
48
+ stateMutability: "payable"
49
+ },
50
+ {
51
+ type: "function",
52
+ name: "deployWithFactory",
53
+ inputs: [
54
+ {
55
+ name: "factory",
56
+ type: "address",
57
+ internalType: "contract KernelFactory"
58
+ },
59
+ { name: "createData", type: "bytes", internalType: "bytes" },
60
+ { name: "salt", type: "bytes32", internalType: "bytes32" }
61
+ ],
62
+ outputs: [{ name: "", type: "address", internalType: "address" }],
63
+ stateMutability: "payable"
64
+ },
65
+ {
66
+ type: "function",
67
+ name: "owner",
68
+ inputs: [],
69
+ outputs: [{ name: "result", type: "address", internalType: "address" }],
70
+ stateMutability: "view"
71
+ },
72
+ {
73
+ type: "function",
74
+ name: "ownershipHandoverExpiresAt",
75
+ inputs: [
76
+ { name: "pendingOwner", type: "address", internalType: "address" }
77
+ ],
78
+ outputs: [{ name: "result", type: "uint256", internalType: "uint256" }],
79
+ stateMutability: "view"
80
+ },
81
+ {
82
+ type: "function",
83
+ name: "renounceOwnership",
84
+ inputs: [],
85
+ outputs: [],
86
+ stateMutability: "payable"
87
+ },
88
+ {
89
+ type: "function",
90
+ name: "requestOwnershipHandover",
91
+ inputs: [],
92
+ outputs: [],
93
+ stateMutability: "payable"
94
+ },
95
+ {
96
+ type: "function",
97
+ name: "stake",
98
+ inputs: [
99
+ {
100
+ name: "entryPoint",
101
+ type: "address",
102
+ internalType: "contract IEntryPoint"
103
+ },
104
+ { name: "unstakeDelay", type: "uint32", internalType: "uint32" }
105
+ ],
106
+ outputs: [],
107
+ stateMutability: "payable"
108
+ },
109
+ {
110
+ type: "function",
111
+ name: "transferOwnership",
112
+ inputs: [
113
+ { name: "newOwner", type: "address", internalType: "address" }
114
+ ],
115
+ outputs: [],
116
+ stateMutability: "payable"
117
+ },
118
+ {
119
+ type: "function",
120
+ name: "unlockStake",
121
+ inputs: [
122
+ {
123
+ name: "entryPoint",
124
+ type: "address",
125
+ internalType: "contract IEntryPoint"
126
+ }
127
+ ],
128
+ outputs: [],
129
+ stateMutability: "payable"
130
+ },
131
+ {
132
+ type: "function",
133
+ name: "withdrawStake",
134
+ inputs: [
135
+ {
136
+ name: "entryPoint",
137
+ type: "address",
138
+ internalType: "contract IEntryPoint"
139
+ },
140
+ {
141
+ name: "recipient",
142
+ type: "address",
143
+ internalType: "address payable"
144
+ }
145
+ ],
146
+ outputs: [],
147
+ stateMutability: "payable"
148
+ },
149
+ {
150
+ type: "event",
151
+ name: "OwnershipHandoverCanceled",
152
+ inputs: [
153
+ {
154
+ name: "pendingOwner",
155
+ type: "address",
156
+ indexed: true,
157
+ internalType: "address"
158
+ }
159
+ ],
160
+ anonymous: false
161
+ },
162
+ {
163
+ type: "event",
164
+ name: "OwnershipHandoverRequested",
165
+ inputs: [
166
+ {
167
+ name: "pendingOwner",
168
+ type: "address",
169
+ indexed: true,
170
+ internalType: "address"
171
+ }
172
+ ],
173
+ anonymous: false
174
+ },
175
+ {
176
+ type: "event",
177
+ name: "OwnershipTransferred",
178
+ inputs: [
179
+ {
180
+ name: "oldOwner",
181
+ type: "address",
182
+ indexed: true,
183
+ internalType: "address"
184
+ },
185
+ {
186
+ name: "newOwner",
187
+ type: "address",
188
+ indexed: true,
189
+ internalType: "address"
190
+ }
191
+ ],
192
+ anonymous: false
193
+ },
194
+ { type: "error", name: "AlreadyInitialized", inputs: [] },
195
+ { type: "error", name: "NewOwnerIsZeroAddress", inputs: [] },
196
+ { type: "error", name: "NoHandoverRequest", inputs: [] },
197
+ { type: "error", name: "NotApprovedFactory", inputs: [] },
198
+ { type: "error", name: "Unauthorized", inputs: [] }
199
+ ] as const
@@ -26,6 +26,7 @@ import {
26
26
  getTypesForEIP712Domain,
27
27
  hashMessage,
28
28
  hashTypedData,
29
+ toHex,
29
30
  validateTypedData,
30
31
  zeroAddress
31
32
  } from "viem"
@@ -42,6 +43,7 @@ import {
42
43
  } from "../utils/toKernelPluginManager.js"
43
44
  import { KernelInitAbi } from "./abi/KernelAccountAbi.js"
44
45
  import { KernelV3InitAbi } from "./abi/kernel_v_3_0_0/KernelAccountAbi.js"
46
+ import { KernelFactoryStakerAbi } from "./abi/kernel_v_3_0_0/KernelFactoryStakerAbi.js"
45
47
  import { encodeCallData as encodeCallDataEpV06 } from "./utils/account/ep0_6/encodeCallData.js"
46
48
  import { encodeDeployCallData as encodeDeployCallDataV06 } from "./utils/account/ep0_6/encodeDeployCallData.js"
47
49
  import { encodeCallData as encodeCallDataEpV07 } from "./utils/account/ep0_7/encodeCallData.js"
@@ -55,18 +57,20 @@ export type KernelSmartAccount<
55
57
  chain extends Chain | undefined = Chain | undefined
56
58
  > = SmartAccount<entryPoint, "kernelSmartAccount", transport, chain> & {
57
59
  kernelPluginManager: KernelPluginManager<entryPoint>
60
+ getNonce: (customNonceKey?: bigint) => Promise<bigint>
58
61
  generateInitCode: () => Promise<Hex>
59
62
  encodeCallData: (args: KernelEncodeCallDataArgs) => Promise<Hex>
60
63
  }
61
64
 
62
65
  export type CreateKernelAccountParameters<entryPoint extends EntryPoint> = {
63
66
  plugins:
64
- | KernelPluginManagerParams<entryPoint>
67
+ | Omit<KernelPluginManagerParams<entryPoint>, "entryPoint">
65
68
  | KernelPluginManager<entryPoint>
66
69
  entryPoint: entryPoint
67
70
  index?: bigint
68
71
  factoryAddress?: Address
69
72
  accountLogicAddress?: Address
73
+ factoryStakerAddress?: Address
70
74
  deployedAccountAddress?: Address
71
75
  }
72
76
 
@@ -111,13 +115,15 @@ const createAccountAbi = [
111
115
  export const KERNEL_ADDRESSES: {
112
116
  ACCOUNT_LOGIC_V0_6: Address
113
117
  ACCOUNT_LOGIC_V0_7: Address
114
- FACTORY_ADDRESS: Address
115
- ENTRYPOINT_V0_6: Address
118
+ FACTORY_ADDRESS_V0_6: Address
119
+ FACTORY_ADDRESS_V0_7: Address
120
+ FACTORY_STAKER: Address
116
121
  } = {
117
122
  ACCOUNT_LOGIC_V0_6: "0xd3082872F8B06073A021b4602e022d5A070d7cfC",
118
- ACCOUNT_LOGIC_V0_7: "0x079D5D8A3275A230AF743cB59c341Ff74B82488D",
119
- FACTORY_ADDRESS: "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3",
120
- ENTRYPOINT_V0_6: "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"
123
+ ACCOUNT_LOGIC_V0_7: "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27",
124
+ FACTORY_ADDRESS_V0_6: "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3",
125
+ FACTORY_ADDRESS_V0_7: "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f",
126
+ FACTORY_STAKER: "0xd703aaE79538628d27099B8c4f621bE4CCd142d5"
121
127
  }
122
128
 
123
129
  const getKernelInitData = async <entryPoint extends EntryPoint>({
@@ -128,7 +134,7 @@ const getKernelInitData = async <entryPoint extends EntryPoint>({
128
134
  kernelPluginManager: KernelPluginManager<entryPoint>
129
135
  }) => {
130
136
  const entryPointVersion = getEntryPointVersion(entryPointAddress)
131
- const { enableData, validatorAddress } =
137
+ const { enableData, identifier, validatorAddress } =
132
138
  await kernelPluginManager.getValidatorInitData()
133
139
 
134
140
  if (entryPointVersion === "v0.6") {
@@ -142,12 +148,7 @@ const getKernelInitData = async <entryPoint extends EntryPoint>({
142
148
  return encodeFunctionData({
143
149
  abi: KernelV3InitAbi,
144
150
  functionName: "initialize",
145
- args: [
146
- kernelPluginManager.getValidationId(true),
147
- zeroAddress,
148
- enableData,
149
- "0x"
150
- ]
151
+ args: [identifier, zeroAddress, enableData, "0x"]
151
152
  })
152
153
  }
153
154
 
@@ -162,12 +163,14 @@ const getAccountInitCode = async <entryPoint extends EntryPoint>({
162
163
  index,
163
164
  factoryAddress,
164
165
  accountLogicAddress,
166
+ factoryStakerAddress,
165
167
  entryPoint: entryPointAddress,
166
168
  kernelPluginManager
167
169
  }: {
168
170
  index: bigint
169
171
  factoryAddress: Address
170
172
  accountLogicAddress: Address
173
+ factoryStakerAddress: Address
171
174
  entryPoint: entryPoint
172
175
  kernelPluginManager: KernelPluginManager<entryPoint>
173
176
  }): Promise<Hex> => {
@@ -176,15 +179,31 @@ const getAccountInitCode = async <entryPoint extends EntryPoint>({
176
179
  entryPoint: entryPointAddress,
177
180
  kernelPluginManager
178
181
  })
182
+ const entryPointVersion = getEntryPointVersion(entryPointAddress)
179
183
 
180
184
  // Build the account init code
185
+ if (entryPointVersion === "v0.6") {
186
+ return concatHex([
187
+ factoryAddress,
188
+ encodeFunctionData({
189
+ abi: createAccountAbi,
190
+ functionName: "createAccount",
191
+ args: [accountLogicAddress, initialisationData, index]
192
+ }) as Hex
193
+ ])
194
+ }
195
+
181
196
  return concatHex([
182
- factoryAddress,
197
+ factoryStakerAddress,
183
198
  encodeFunctionData({
184
- abi: createAccountAbi,
185
- functionName: "createAccount",
186
- args: [accountLogicAddress, initialisationData, index]
187
- }) as Hex
199
+ abi: KernelFactoryStakerAbi,
200
+ functionName: "deployWithFactory",
201
+ args: [
202
+ factoryAddress,
203
+ initialisationData,
204
+ toHex(index, { size: 32 })
205
+ ]
206
+ })
188
207
  ])
189
208
  }
190
209
 
@@ -248,8 +267,9 @@ export async function createKernelAccount<
248
267
  plugins,
249
268
  entryPoint: entryPointAddress,
250
269
  index = 0n,
251
- factoryAddress = KERNEL_ADDRESSES.FACTORY_ADDRESS,
270
+ factoryAddress = KERNEL_ADDRESSES.FACTORY_ADDRESS_V0_6,
252
271
  accountLogicAddress = KERNEL_ADDRESSES.ACCOUNT_LOGIC_V0_6,
272
+ factoryStakerAddress = KERNEL_ADDRESSES.FACTORY_STAKER,
253
273
  deployedAccountAddress
254
274
  }: CreateKernelAccountParameters<entryPoint>
255
275
  ): Promise<KernelSmartAccount<entryPoint, TTransport, TChain>> {
@@ -258,13 +278,17 @@ export async function createKernelAccount<
258
278
  entryPointVersion === "v0.6"
259
279
  ? KERNEL_ADDRESSES.ACCOUNT_LOGIC_V0_6
260
280
  : KERNEL_ADDRESSES.ACCOUNT_LOGIC_V0_7
281
+ factoryAddress =
282
+ entryPointVersion === "v0.6"
283
+ ? KERNEL_ADDRESSES.FACTORY_ADDRESS_V0_6
284
+ : KERNEL_ADDRESSES.FACTORY_ADDRESS_V0_7
261
285
 
262
286
  const kernelPluginManager = isKernelPluginManager<entryPoint>(plugins)
263
287
  ? plugins
264
288
  : await toKernelPluginManager<entryPoint>(client, {
265
289
  sudo: plugins.sudo,
266
290
  regular: plugins.regular,
267
- executorData: plugins.executorData,
291
+ action: plugins.action,
268
292
  pluginEnableSignature: plugins.pluginEnableSignature,
269
293
  entryPoint: entryPointAddress
270
294
  })
@@ -274,6 +298,7 @@ export async function createKernelAccount<
274
298
  index,
275
299
  factoryAddress,
276
300
  accountLogicAddress,
301
+ factoryStakerAddress,
277
302
  entryPoint: entryPointAddress,
278
303
  kernelPluginManager
279
304
  })
@@ -335,7 +360,11 @@ export async function createKernelAccount<
335
360
 
336
361
  if (smartAccountDeployed) return undefined
337
362
 
338
- return factoryAddress
363
+ const entryPointVersion =
364
+ getEntryPointVersion(entryPointAddress)
365
+ return entryPointVersion === "v0.6"
366
+ ? factoryAddress
367
+ : factoryStakerAddress
339
368
  },
340
369
 
341
370
  async getFactoryData() {
@@ -379,7 +408,7 @@ export async function createKernelAccount<
379
408
  }
380
409
 
381
410
  return concatHex([
382
- kernelPluginManager.getValidationId(),
411
+ kernelPluginManager.getIdentifier(),
383
412
  signature
384
413
  ])
385
414
  },
@@ -428,14 +457,16 @@ export async function createKernelAccount<
428
457
  return signature
429
458
  }
430
459
  return concatHex([
431
- kernelPluginManager.getValidationId(),
460
+ kernelPluginManager.getIdentifier(),
432
461
  signature
433
462
  ])
434
463
  },
435
464
  // Get the nonce of the smart account
436
- async getNonce() {
437
- const key =
438
- await kernelPluginManager.getNonceKey(accountAddress)
465
+ async getNonce(customNonceKey?: bigint) {
466
+ const key = await kernelPluginManager.getNonceKey(
467
+ accountAddress,
468
+ customNonceKey
469
+ )
439
470
  return getAccountNonce(client, {
440
471
  sender: accountAddress,
441
472
  entryPoint: entryPointAddress,
@@ -0,0 +1,24 @@
1
+ import { getAction } from "permissionless"
2
+ import type { Address, Client } from "viem"
3
+ import { readContract } from "viem/actions"
4
+ import { KernelV3AccountAbi } from "../../../abi/kernel_v_3_0_0/KernelAccountAbi.js"
5
+
6
+ export const getKernelV3Nonce = async (
7
+ client: Client,
8
+ accountAddress: Address
9
+ ): Promise<number> => {
10
+ try {
11
+ const nonce = await getAction(
12
+ client,
13
+ readContract
14
+ )({
15
+ abi: KernelV3AccountAbi,
16
+ address: accountAddress,
17
+ functionName: "currentNonce",
18
+ args: []
19
+ })
20
+ return nonce
21
+ } catch (error) {
22
+ return 1
23
+ }
24
+ }
@@ -0,0 +1,20 @@
1
+ import type { EntryPointVersion } from "permissionless/types/entrypoint"
2
+ import { type Hex, getAbiItem, toFunctionSelector } from "viem"
3
+ import { KernelAccountAbi } from "../../abi/KernelAccountAbi.js"
4
+ import { KernelV3AccountAbi } from "../../abi/kernel_v_3_0_0/KernelAccountAbi.js"
5
+
6
+ export const getActionSelector = (
7
+ entryPointVersion: EntryPointVersion
8
+ ): Hex => {
9
+ if (entryPointVersion === "v0.6") {
10
+ return toFunctionSelector(
11
+ getAbiItem({ abi: KernelAccountAbi, name: "execute" })
12
+ )
13
+ } else if (entryPointVersion === "v0.7") {
14
+ return toFunctionSelector(
15
+ getAbiItem({ abi: KernelV3AccountAbi, name: "execute" })
16
+ )
17
+ } else {
18
+ throw new Error("Unsupported entry point version")
19
+ }
20
+ }
@@ -0,0 +1,39 @@
1
+ import type {
2
+ ENTRYPOINT_ADDRESS_V06_TYPE,
3
+ EntryPoint
4
+ } from "permissionless/types/entrypoint"
5
+ import { type Address, type Hex, concat, pad, toHex } from "viem"
6
+ import {
7
+ type PluginValidityData,
8
+ ValidatorMode
9
+ } from "../../../../../types/index.js"
10
+ import type { Kernel2_0_plugins } from "./getPluginsEnableTypedData.js"
11
+
12
+ export const getEncodedPluginsData = async <
13
+ entryPoint extends EntryPoint = ENTRYPOINT_ADDRESS_V06_TYPE
14
+ >({
15
+ accountAddress,
16
+ enableSignature,
17
+ action,
18
+ validator,
19
+ validUntil,
20
+ validAfter
21
+ }: {
22
+ accountAddress: Address
23
+ enableSignature: Hex
24
+ } & Kernel2_0_plugins<entryPoint> &
25
+ PluginValidityData) => {
26
+ const enableData = await validator.getEnableData(accountAddress)
27
+ const enableDataLength = enableData.length / 2 - 1
28
+ return concat([
29
+ ValidatorMode.enable,
30
+ pad(toHex(validUntil, { size: 6 }), { size: 6 }), // 6 bytes 4 - 10
31
+ pad(toHex(validAfter), { size: 6 }), // 6 bytes 10 - 16
32
+ pad(validator.address, { size: 20 }), // 20 bytes 16 - 36
33
+ pad(action.address, { size: 20 }), // 20 bytes 36 - 56
34
+ pad(toHex(enableDataLength), { size: 32 }), // 32 bytes 56 - 88
35
+ enableData, // 88 - 88 + enableData.length
36
+ pad(toHex(enableSignature.length / 2 - 1), { size: 32 }), // 32 bytes 88 + enableData.length - 120 + enableData.length
37
+ enableSignature // 120 + enableData.length - 120 + enableData.length + enableSignature.length
38
+ ])
39
+ }
@@ -0,0 +1,76 @@
1
+ import type {
2
+ ENTRYPOINT_ADDRESS_V06_TYPE,
3
+ EntryPoint
4
+ } from "permissionless/types/entrypoint"
5
+ import {
6
+ type Address,
7
+ type CustomSource,
8
+ concatHex,
9
+ hexToBigInt,
10
+ pad,
11
+ toHex
12
+ } from "viem"
13
+ import type {
14
+ Action,
15
+ KernelValidator,
16
+ PluginValidityData
17
+ } from "../../../../../types/index.js"
18
+
19
+ export type Kernel2_0_plugins<entryPoint extends EntryPoint> = {
20
+ validator: KernelValidator<entryPoint>
21
+ action: Action
22
+ }
23
+ export const getPluginsEnableTypedData = async <
24
+ entryPoint extends EntryPoint = ENTRYPOINT_ADDRESS_V06_TYPE
25
+ >({
26
+ accountAddress,
27
+ chainId,
28
+ kernelVersion,
29
+ action,
30
+ validator,
31
+ validUntil,
32
+ validAfter
33
+ }: {
34
+ accountAddress: Address
35
+ chainId: number
36
+ kernelVersion: string
37
+ // { action, validator }: Kernel2_0_plugins
38
+ } & Kernel2_0_plugins<entryPoint> &
39
+ PluginValidityData): Promise<
40
+ Parameters<CustomSource["signTypedData"]>[0]
41
+ > => {
42
+ return {
43
+ domain: {
44
+ name: "Kernel",
45
+ version: kernelVersion,
46
+ chainId,
47
+ verifyingContract: accountAddress
48
+ },
49
+ types: {
50
+ ValidatorApproved: [
51
+ { name: "sig", type: "bytes4" },
52
+ { name: "validatorData", type: "uint256" },
53
+ { name: "executor", type: "address" },
54
+ { name: "enableData", type: "bytes" }
55
+ ]
56
+ },
57
+ message: {
58
+ sig: action.selector,
59
+ validatorData: hexToBigInt(
60
+ concatHex([
61
+ pad(toHex(validUntil ?? 0), {
62
+ size: 6
63
+ }),
64
+ pad(toHex(validAfter ?? 0), {
65
+ size: 6
66
+ }),
67
+ validator.address
68
+ ]),
69
+ { size: 32 }
70
+ ),
71
+ executor: action.address as Address,
72
+ enableData: await validator.getEnableData(accountAddress)
73
+ },
74
+ primaryType: "ValidatorApproved"
75
+ }
76
+ }
@@ -0,0 +1,47 @@
1
+ import type {
2
+ ENTRYPOINT_ADDRESS_V06_TYPE,
3
+ EntryPoint
4
+ } from "permissionless/types/entrypoint"
5
+ import {
6
+ type Address,
7
+ type Hex,
8
+ concat,
9
+ encodeAbiParameters,
10
+ parseAbiParameters,
11
+ zeroAddress
12
+ } from "viem"
13
+ import type { Kernel2_0_plugins } from "../ep0_6/getPluginsEnableTypedData.js"
14
+
15
+ export const getEncodedPluginsData = async <
16
+ entryPoint extends EntryPoint = ENTRYPOINT_ADDRESS_V06_TYPE
17
+ >({
18
+ accountAddress,
19
+ enableSignature,
20
+ userOpSignature,
21
+ action,
22
+ validator
23
+ }: {
24
+ accountAddress: Address
25
+ enableSignature: Hex
26
+ userOpSignature: Hex
27
+ } & Kernel2_0_plugins<entryPoint>) => {
28
+ const enableData = await validator.getEnableData(accountAddress)
29
+ return concat([
30
+ zeroAddress, // hook address 20 bytes
31
+ encodeAbiParameters(
32
+ parseAbiParameters(
33
+ "bytes validatorData, bytes hookData, bytes selectorData, bytes enableSig, bytes userOpSig"
34
+ ),
35
+ [
36
+ enableData,
37
+ "0x",
38
+ // [TODO]: Integrate custom target contract and hook
39
+ concat([
40
+ action.selector /*, action.address, zeroAddress, "0x"*/
41
+ ]),
42
+ enableSignature,
43
+ userOpSignature
44
+ ]
45
+ )
46
+ ])
47
+ }
@@ -0,0 +1,63 @@
1
+ import type {
2
+ ENTRYPOINT_ADDRESS_V07_TYPE,
3
+ EntryPoint
4
+ } from "permissionless/types/entrypoint"
5
+ import { type Address, type CustomSource, concat, pad, zeroAddress } from "viem"
6
+ import { VALIDATOR_TYPE } from "../../../../../constants.js"
7
+ import type { Kernel2_0_plugins } from "../ep0_6/getPluginsEnableTypedData.js"
8
+
9
+ export const getPluginsEnableTypedData = async <
10
+ entryPoint extends EntryPoint = ENTRYPOINT_ADDRESS_V07_TYPE
11
+ >({
12
+ accountAddress,
13
+ chainId,
14
+ kernelVersion,
15
+ action,
16
+ validator,
17
+ validatorNonce
18
+ }: {
19
+ accountAddress: Address
20
+ chainId: number
21
+ kernelVersion: string
22
+ validatorNonce: number
23
+ } & Kernel2_0_plugins<entryPoint>): Promise<
24
+ Parameters<CustomSource["signTypedData"]>[0]
25
+ > => {
26
+ return {
27
+ domain: {
28
+ name: "Kernel",
29
+ version: kernelVersion,
30
+ chainId,
31
+ verifyingContract: accountAddress
32
+ },
33
+ types: {
34
+ Enable: [
35
+ { name: "validationId", type: "bytes21" },
36
+ { name: "nonce", type: "uint32" },
37
+ { name: "hook", type: "address" },
38
+ { name: "validatorData", type: "bytes" },
39
+ { name: "hookData", type: "bytes" },
40
+ { name: "selectorData", type: "bytes" }
41
+ ]
42
+ },
43
+ message: {
44
+ validationId: concat([
45
+ VALIDATOR_TYPE[validator.validatorType],
46
+ pad(validator.getIdentifier(), { size: 20, dir: "right" })
47
+ ]),
48
+ nonce: validatorNonce,
49
+ hook: zeroAddress,
50
+ validatorData: await validator.getEnableData(accountAddress),
51
+ hookData: "0x",
52
+ selectorData: concat([
53
+ action.selector
54
+ /*
55
+ action.address,
56
+ zeroAddress,
57
+ "0x"
58
+ */
59
+ ])
60
+ },
61
+ primaryType: "Enable"
62
+ }
63
+ }