permissionless 0.3.6 → 0.4.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 (229) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/_cjs/accounts/biconomy/toBiconomySmartAccount.js +9 -5
  3. package/_cjs/accounts/biconomy/toBiconomySmartAccount.js.map +1 -1
  4. package/_cjs/accounts/kernel/toKernelSmartAccount.js +4 -0
  5. package/_cjs/accounts/kernel/toKernelSmartAccount.js.map +1 -1
  6. package/_cjs/accounts/light/toLightSmartAccount.js +9 -5
  7. package/_cjs/accounts/light/toLightSmartAccount.js.map +1 -1
  8. package/_cjs/accounts/nexus/toNexusSmartAccount.js +3 -2
  9. package/_cjs/accounts/nexus/toNexusSmartAccount.js.map +1 -1
  10. package/_cjs/accounts/safe/signUserOperation.js +14 -1
  11. package/_cjs/accounts/safe/signUserOperation.js.map +1 -1
  12. package/_cjs/accounts/safe/toSafeSmartAccount.js +6 -4
  13. package/_cjs/accounts/safe/toSafeSmartAccount.js.map +1 -1
  14. package/_cjs/accounts/simple/toSimpleSmartAccount.js +15 -10
  15. package/_cjs/accounts/simple/toSimpleSmartAccount.js.map +1 -1
  16. package/_cjs/accounts/thirdweb/utils/decodeCallData.js +7 -5
  17. package/_cjs/accounts/thirdweb/utils/decodeCallData.js.map +1 -1
  18. package/_cjs/accounts/trust/utils/decodeCallData.js +7 -5
  19. package/_cjs/accounts/trust/utils/decodeCallData.js.map +1 -1
  20. package/_cjs/actions/{erc7579.js → erc7579/index.js} +9 -9
  21. package/_cjs/actions/erc7579/index.js.map +1 -0
  22. package/_cjs/actions/{etherspot.js → etherspot/index.js} +2 -2
  23. package/_cjs/actions/etherspot/index.js.map +1 -0
  24. package/_cjs/actions/{passkeyServer.js → passkeyServer/index.js} +4 -4
  25. package/_cjs/actions/passkeyServer/index.js.map +1 -0
  26. package/_cjs/actions/pimlico/estimateErc20PaymasterCost.js +7 -3
  27. package/_cjs/actions/pimlico/estimateErc20PaymasterCost.js.map +1 -1
  28. package/_cjs/actions/{pimlico.js → pimlico/index.js} +8 -8
  29. package/_cjs/actions/pimlico/index.js.map +1 -0
  30. package/_cjs/actions/{smartAccount.js → smartAccount/index.js} +5 -5
  31. package/_cjs/actions/smartAccount/index.js.map +1 -0
  32. package/_cjs/clients/createSmartAccountClient.js.map +1 -1
  33. package/_cjs/clients/decorators/pimlico.js +4 -4
  34. package/_cjs/clients/decorators/pimlico.js.map +1 -1
  35. package/_cjs/clients/{passkeyServer.js → passkeyServer/index.js} +2 -2
  36. package/_cjs/clients/passkeyServer/index.js.map +1 -0
  37. package/_cjs/clients/{pimlico.js → pimlico/index.js} +2 -2
  38. package/_cjs/clients/pimlico/index.js.map +1 -0
  39. package/_cjs/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.js +6 -5
  40. package/_cjs/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.js.map +1 -1
  41. package/_cjs/utils/index.js +3 -1
  42. package/_cjs/utils/index.js.map +1 -1
  43. package/_cjs/utils/sortAddresses.js +16 -0
  44. package/_cjs/utils/sortAddresses.js.map +1 -0
  45. package/_esm/accounts/biconomy/toBiconomySmartAccount.js +9 -5
  46. package/_esm/accounts/biconomy/toBiconomySmartAccount.js.map +1 -1
  47. package/_esm/accounts/kernel/toKernelSmartAccount.js +4 -0
  48. package/_esm/accounts/kernel/toKernelSmartAccount.js.map +1 -1
  49. package/_esm/accounts/light/toLightSmartAccount.js +9 -5
  50. package/_esm/accounts/light/toLightSmartAccount.js.map +1 -1
  51. package/_esm/accounts/nexus/toNexusSmartAccount.js +3 -2
  52. package/_esm/accounts/nexus/toNexusSmartAccount.js.map +1 -1
  53. package/_esm/accounts/safe/signUserOperation.js +14 -1
  54. package/_esm/accounts/safe/signUserOperation.js.map +1 -1
  55. package/_esm/accounts/safe/toSafeSmartAccount.js +6 -4
  56. package/_esm/accounts/safe/toSafeSmartAccount.js.map +1 -1
  57. package/_esm/accounts/simple/toSimpleSmartAccount.js +15 -10
  58. package/_esm/accounts/simple/toSimpleSmartAccount.js.map +1 -1
  59. package/_esm/accounts/thirdweb/utils/decodeCallData.js +7 -5
  60. package/_esm/accounts/thirdweb/utils/decodeCallData.js.map +1 -1
  61. package/_esm/accounts/trust/utils/decodeCallData.js +7 -5
  62. package/_esm/accounts/trust/utils/decodeCallData.js.map +1 -1
  63. package/_esm/actions/{erc7579.js → erc7579/index.js} +9 -9
  64. package/_esm/actions/erc7579/index.js.map +1 -0
  65. package/_esm/actions/etherspot/index.js +2 -0
  66. package/_esm/actions/etherspot/index.js.map +1 -0
  67. package/_esm/actions/passkeyServer/index.js +4 -0
  68. package/_esm/actions/passkeyServer/index.js.map +1 -0
  69. package/_esm/actions/pimlico/estimateErc20PaymasterCost.js +7 -3
  70. package/_esm/actions/pimlico/estimateErc20PaymasterCost.js.map +1 -1
  71. package/_esm/actions/pimlico/index.js +8 -0
  72. package/_esm/actions/pimlico/index.js.map +1 -0
  73. package/_esm/actions/smartAccount/index.js +5 -0
  74. package/_esm/actions/smartAccount/index.js.map +1 -0
  75. package/_esm/clients/createSmartAccountClient.js.map +1 -1
  76. package/_esm/clients/decorators/pimlico.js +1 -1
  77. package/_esm/clients/decorators/pimlico.js.map +1 -1
  78. package/_esm/clients/{passkeyServer.js → passkeyServer/index.js} +2 -2
  79. package/_esm/clients/passkeyServer/index.js.map +1 -0
  80. package/_esm/clients/{pimlico.js → pimlico/index.js} +2 -2
  81. package/_esm/clients/pimlico/index.js.map +1 -0
  82. package/_esm/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.js +5 -4
  83. package/_esm/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.js.map +1 -1
  84. package/_esm/utils/index.js +1 -0
  85. package/_esm/utils/index.js.map +1 -1
  86. package/_esm/utils/sortAddresses.js +19 -0
  87. package/_esm/utils/sortAddresses.js.map +1 -0
  88. package/_types/accounts/biconomy/toBiconomySmartAccount.d.ts.map +1 -1
  89. package/_types/accounts/kernel/toKernelSmartAccount.d.ts.map +1 -1
  90. package/_types/accounts/light/toLightSmartAccount.d.ts.map +1 -1
  91. package/_types/accounts/nexus/toNexusSmartAccount.d.ts.map +1 -1
  92. package/_types/accounts/safe/signUserOperation.d.ts.map +1 -1
  93. package/_types/accounts/safe/toSafeSmartAccount.d.ts.map +1 -1
  94. package/_types/accounts/simple/toSimpleSmartAccount.d.ts.map +1 -1
  95. package/_types/accounts/thirdweb/utils/decodeCallData.d.ts.map +1 -1
  96. package/_types/accounts/trust/utils/decodeCallData.d.ts.map +1 -1
  97. package/_types/actions/{erc7579.d.ts → erc7579/index.d.ts} +11 -11
  98. package/_types/actions/erc7579/index.d.ts.map +1 -0
  99. package/_types/actions/etherspot/index.d.ts +2 -0
  100. package/_types/actions/etherspot/index.d.ts.map +1 -0
  101. package/_types/actions/passkeyServer/index.d.ts +4 -0
  102. package/_types/actions/passkeyServer/index.d.ts.map +1 -0
  103. package/_types/actions/pimlico/estimateErc20PaymasterCost.d.ts.map +1 -1
  104. package/_types/actions/pimlico/index.d.ts +8 -0
  105. package/_types/actions/pimlico/index.d.ts.map +1 -0
  106. package/_types/actions/smartAccount/index.d.ts +5 -0
  107. package/_types/actions/smartAccount/index.d.ts.map +1 -0
  108. package/_types/clients/createSmartAccountClient.d.ts +9 -1
  109. package/_types/clients/createSmartAccountClient.d.ts.map +1 -1
  110. package/_types/clients/decorators/pimlico.d.ts +1 -1
  111. package/_types/clients/decorators/pimlico.d.ts.map +1 -1
  112. package/_types/clients/{passkeyServer.d.ts → passkeyServer/index.d.ts} +8 -4
  113. package/_types/clients/passkeyServer/index.d.ts.map +1 -0
  114. package/_types/clients/pimlico/index.d.ts +21 -0
  115. package/_types/clients/pimlico/index.d.ts.map +1 -0
  116. package/_types/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.d.ts.map +1 -1
  117. package/_types/utils/index.d.ts +1 -0
  118. package/_types/utils/index.d.ts.map +1 -1
  119. package/_types/utils/sortAddresses.d.ts +9 -0
  120. package/_types/utils/sortAddresses.d.ts.map +1 -0
  121. package/accounts/biconomy/package.json +6 -0
  122. package/accounts/biconomy/toBiconomySmartAccount.ts +13 -5
  123. package/accounts/etherspot/package.json +6 -0
  124. package/accounts/kernel/package.json +6 -0
  125. package/accounts/kernel/toKernelSmartAccount.ts +7 -0
  126. package/accounts/light/package.json +6 -0
  127. package/accounts/light/toLightSmartAccount.ts +13 -5
  128. package/accounts/nexus/package.json +6 -0
  129. package/accounts/nexus/toNexusSmartAccount.ts +3 -6
  130. package/accounts/package.json +6 -0
  131. package/accounts/safe/package.json +6 -0
  132. package/accounts/safe/signUserOperation.ts +15 -3
  133. package/accounts/safe/toSafeSmartAccount.ts +7 -6
  134. package/accounts/simple/package.json +6 -0
  135. package/accounts/simple/toSimpleSmartAccount.ts +21 -10
  136. package/accounts/thirdweb/package.json +6 -0
  137. package/accounts/thirdweb/utils/decodeCallData.ts +9 -5
  138. package/accounts/trust/package.json +6 -0
  139. package/accounts/trust/utils/decodeCallData.ts +9 -5
  140. package/actions/{erc7579.ts → erc7579/index.ts} +10 -16
  141. package/actions/erc7579/package.json +6 -0
  142. package/actions/{etherspot.ts → etherspot/index.ts} +1 -1
  143. package/actions/etherspot/package.json +6 -0
  144. package/actions/{passkeyServer.ts → passkeyServer/index.ts} +3 -3
  145. package/actions/passkeyServer/package.json +6 -0
  146. package/actions/pimlico/estimateErc20PaymasterCost.ts +9 -3
  147. package/actions/{pimlico.ts → pimlico/index.ts} +7 -7
  148. package/actions/pimlico/package.json +6 -0
  149. package/actions/smartAccount/index.ts +7 -0
  150. package/actions/smartAccount/package.json +6 -0
  151. package/clients/createSmartAccountClient.ts +45 -20
  152. package/clients/decorators/pimlico.ts +10 -10
  153. package/clients/package.json +6 -0
  154. package/clients/{passkeyServer.ts → passkeyServer/index.ts} +15 -13
  155. package/clients/passkeyServer/package.json +6 -0
  156. package/clients/{pimlico.ts → pimlico/index.ts} +50 -23
  157. package/clients/pimlico/package.json +6 -0
  158. package/errors/package.json +6 -0
  159. package/experimental/pimlico/package.json +6 -0
  160. package/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts +6 -4
  161. package/package.json +34 -29
  162. package/utils/index.ts +1 -0
  163. package/utils/package.json +6 -0
  164. package/utils/sortAddresses.ts +21 -0
  165. package/_cjs/actions/erc7579.js.map +0 -1
  166. package/_cjs/actions/etherspot.js.map +0 -1
  167. package/_cjs/actions/passkeyServer.js.map +0 -1
  168. package/_cjs/actions/pimlico.js.map +0 -1
  169. package/_cjs/actions/smartAccount.js.map +0 -1
  170. package/_cjs/clients/passkeyServer.js.map +0 -1
  171. package/_cjs/clients/pimlico.js.map +0 -1
  172. package/_esm/actions/erc7579.js.map +0 -1
  173. package/_esm/actions/etherspot.js +0 -2
  174. package/_esm/actions/etherspot.js.map +0 -1
  175. package/_esm/actions/passkeyServer.js +0 -4
  176. package/_esm/actions/passkeyServer.js.map +0 -1
  177. package/_esm/actions/pimlico.js +0 -8
  178. package/_esm/actions/pimlico.js.map +0 -1
  179. package/_esm/actions/smartAccount.js +0 -5
  180. package/_esm/actions/smartAccount.js.map +0 -1
  181. package/_esm/clients/passkeyServer.js.map +0 -1
  182. package/_esm/clients/pimlico.js.map +0 -1
  183. package/_types/actions/erc7579.d.ts.map +0 -1
  184. package/_types/actions/etherspot.d.ts +0 -2
  185. package/_types/actions/etherspot.d.ts.map +0 -1
  186. package/_types/actions/passkeyServer.d.ts +0 -4
  187. package/_types/actions/passkeyServer.d.ts.map +0 -1
  188. package/_types/actions/pimlico.d.ts +0 -8
  189. package/_types/actions/pimlico.d.ts.map +0 -1
  190. package/_types/actions/smartAccount.d.ts +0 -5
  191. package/_types/actions/smartAccount.d.ts.map +0 -1
  192. package/_types/clients/passkeyServer.d.ts.map +0 -1
  193. package/_types/clients/pimlico.d.ts +0 -13
  194. package/_types/clients/pimlico.d.ts.map +0 -1
  195. package/accounts/decodeCalls.test.ts +0 -505
  196. package/accounts/safe/signUserOperation.test.ts +0 -275
  197. package/actions/erc7579/accountId.test.ts +0 -39
  198. package/actions/erc7579/installModule.test.ts +0 -214
  199. package/actions/erc7579/installModules.test.ts +0 -235
  200. package/actions/erc7579/isModuleInstalled.test.ts +0 -72
  201. package/actions/erc7579/supportsExecutionMode.test.ts +0 -108
  202. package/actions/erc7579/supportsModule.test.ts +0 -35
  203. package/actions/erc7579/uninstallModule.test.ts +0 -128
  204. package/actions/erc7579/uninstallModules.test.ts +0 -117
  205. package/actions/pimlico/getTokenQuotes.test.ts +0 -90
  206. package/actions/pimlico/getUserOperationGasPrice.test.ts +0 -82
  207. package/actions/pimlico/getUserOperationStatus.test.ts +0 -223
  208. package/actions/pimlico/sponsorUserOperation.test.ts +0 -236
  209. package/actions/pimlico/validateSponsorshipPolicies.test.ts +0 -153
  210. package/actions/public/getAccountNonce.test.ts +0 -96
  211. package/actions/public/getSenderAddress.test.ts +0 -154
  212. package/actions/smartAccount/getCallsStatus.test.ts +0 -253
  213. package/actions/smartAccount/sendCalls.test.ts +0 -569
  214. package/actions/smartAccount/sendTransaction.test.ts +0 -414
  215. package/actions/smartAccount/signMessage.test.ts +0 -217
  216. package/actions/smartAccount/signTypedData.test.ts +0 -226
  217. package/actions/smartAccount.ts +0 -7
  218. package/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts +0 -574
  219. package/types/package.json +0 -6
  220. package/utils/decodeNonce.test.ts +0 -40
  221. package/utils/deepHexlify.test.ts +0 -57
  222. package/utils/encode7579Calls.test.ts +0 -69
  223. package/utils/encodeNonce.test.ts +0 -38
  224. package/utils/erc20AllowanceOverride.test.ts +0 -59
  225. package/utils/erc20BalanceOverride.test.ts +0 -57
  226. package/utils/getAddressFromInitCodeOrPaymasterAndData.test.ts +0 -31
  227. package/utils/getPackedUserOperation.test.ts +0 -204
  228. package/utils/getRequiredPrefund.test.ts +0 -90
  229. package/vitest.config.ts +0 -41
@@ -1,235 +0,0 @@
1
- import { encodeAbiParameters, encodePacked, isHash, zeroAddress } from "viem"
2
- import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"
3
- import { describe, expect } from "vitest"
4
- import { testWithRpc } from "../../../permissionless-test/src/testWithRpc"
5
- import {
6
- getCoreSmartAccounts,
7
- getPublicClient
8
- } from "../../../permissionless-test/src/utils"
9
- import { erc7579Actions } from "../erc7579"
10
- import { installModules } from "./installModules"
11
-
12
- describe.each(getCoreSmartAccounts())(
13
- "installModules $name",
14
- ({ getErc7579SmartAccountClient, name, isEip7702Compliant }) => {
15
- testWithRpc.skipIf(!getErc7579SmartAccountClient)(
16
- "installModules",
17
- async ({ rpc }) => {
18
- if (!getErc7579SmartAccountClient) {
19
- throw new Error("getErc7579SmartAccountClient not defined")
20
- }
21
-
22
- const privateKey = generatePrivateKey()
23
-
24
- const privateKeyAccount = privateKeyToAccount(privateKey)
25
-
26
- const smartClientWithoutExtend =
27
- await getErc7579SmartAccountClient({
28
- entryPoint: {
29
- version: "0.7"
30
- },
31
- privateKey,
32
- ...rpc
33
- })
34
-
35
- const publicClient = getPublicClient(rpc.anvilRpc)
36
-
37
- const smartClient = smartClientWithoutExtend.extend(
38
- erc7579Actions()
39
- )
40
-
41
- const moduleData = encodePacked(
42
- ["address"],
43
- [smartClient.account.address]
44
- )
45
-
46
- const opHash = await installModules(smartClient, {
47
- account: smartClient.account,
48
- calls: [
49
- {
50
- to: smartClient.account.address,
51
- value: 0n,
52
- data: "0x"
53
- }
54
- ],
55
- authorization: isEip7702Compliant
56
- ? await privateKeyAccount.signAuthorization({
57
- address: (smartClient.account as any)
58
- .implementation,
59
- chainId: smartClient.chain.id,
60
- nonce: await publicClient.getTransactionCount({
61
- address: smartClient.account.address
62
- })
63
- })
64
- : undefined,
65
- modules: [
66
- {
67
- type: "executor",
68
- address:
69
- "0x4Fd8d57b94966982B62e9588C27B4171B55E8354",
70
- context: name.startsWith("Kernel 7579")
71
- ? encodePacked(
72
- ["address", "bytes"],
73
- [
74
- zeroAddress,
75
- encodeAbiParameters(
76
- [
77
- { type: "bytes" },
78
- { type: "bytes" }
79
- ],
80
- [moduleData, "0x"]
81
- )
82
- ]
83
- )
84
- : moduleData
85
- }
86
- ]
87
- })
88
-
89
- expect(isHash(opHash)).toBe(true)
90
-
91
- const userOperationReceipt =
92
- await smartClient.waitForUserOperationReceipt({
93
- hash: opHash,
94
- timeout: 100000
95
- })
96
- expect(userOperationReceipt).not.toBeNull()
97
- expect(userOperationReceipt?.userOpHash).toBe(opHash)
98
- expect(
99
- userOperationReceipt?.receipt.transactionHash
100
- ).toBeTruthy()
101
-
102
- const receipt = await smartClient.getUserOperationReceipt({
103
- hash: opHash
104
- })
105
-
106
- expect(receipt?.receipt.transactionHash).toBe(
107
- userOperationReceipt?.receipt.transactionHash
108
- )
109
-
110
- const isModuleInstalled = await smartClient.isModuleInstalled({
111
- type: "executor",
112
- address: "0x4Fd8d57b94966982B62e9588C27B4171B55E8354",
113
- context: "0x"
114
- })
115
-
116
- expect(isModuleInstalled).toBe(true)
117
- }
118
- )
119
- testWithRpc.skipIf(!getErc7579SmartAccountClient)(
120
- "installModules post deployment",
121
- async ({ rpc }) => {
122
- if (!getErc7579SmartAccountClient) {
123
- throw new Error("getErc7579SmartAccountClient not defined")
124
- }
125
-
126
- const privateKey = generatePrivateKey()
127
-
128
- const privateKeyAccount = privateKeyToAccount(privateKey)
129
-
130
- const smartClientWithoutExtend =
131
- await getErc7579SmartAccountClient({
132
- entryPoint: {
133
- version: "0.7"
134
- },
135
- privateKey,
136
- ...rpc
137
- })
138
- const publicClient = getPublicClient(rpc.anvilRpc)
139
-
140
- const smartClient = smartClientWithoutExtend.extend(
141
- erc7579Actions()
142
- )
143
-
144
- const userOpHash = await smartClient.sendUserOperation({
145
- authorization: isEip7702Compliant
146
- ? await privateKeyAccount.signAuthorization({
147
- address: (smartClient.account as any)
148
- .implementation,
149
- chainId: smartClient.chain.id,
150
- nonce: await publicClient.getTransactionCount({
151
- address: smartClient.account.address
152
- })
153
- })
154
- : undefined,
155
- calls: [
156
- {
157
- to: smartClient.account.address,
158
- value: 0n,
159
- data: "0x"
160
- },
161
- {
162
- to: smartClient.account.address,
163
- value: 0n,
164
- data: "0x"
165
- }
166
- ]
167
- })
168
-
169
- await smartClient.waitForUserOperationReceipt({
170
- hash: userOpHash
171
- })
172
-
173
- const moduleData = encodePacked(
174
- ["address"],
175
- [smartClient.account.address]
176
- )
177
-
178
- const opHash = await installModules(smartClient, {
179
- account: smartClient.account,
180
- modules: [
181
- {
182
- type: "executor",
183
- address:
184
- "0x4Fd8d57b94966982B62e9588C27B4171B55E8354",
185
- context: name.startsWith("Kernel 7579")
186
- ? encodePacked(
187
- ["address", "bytes"],
188
- [
189
- zeroAddress,
190
- encodeAbiParameters(
191
- [
192
- { type: "bytes" },
193
- { type: "bytes" }
194
- ],
195
- [moduleData, "0x"]
196
- )
197
- ]
198
- )
199
- : moduleData
200
- }
201
- ]
202
- })
203
-
204
- expect(isHash(opHash)).toBe(true)
205
-
206
- const userOperationReceipt =
207
- await smartClient.waitForUserOperationReceipt({
208
- hash: opHash,
209
- timeout: 100000
210
- })
211
- expect(userOperationReceipt).not.toBeNull()
212
- expect(userOperationReceipt?.userOpHash).toBe(opHash)
213
- expect(
214
- userOperationReceipt?.receipt.transactionHash
215
- ).toBeTruthy()
216
-
217
- const receipt = await smartClient.getUserOperationReceipt({
218
- hash: opHash
219
- })
220
-
221
- expect(receipt?.receipt.transactionHash).toBe(
222
- userOperationReceipt?.receipt.transactionHash
223
- )
224
-
225
- const isModuleInstalled = await smartClient.isModuleInstalled({
226
- type: "executor",
227
- address: "0x4Fd8d57b94966982B62e9588C27B4171B55E8354",
228
- context: "0x"
229
- })
230
-
231
- expect(isModuleInstalled).toBe(true)
232
- }
233
- )
234
- }
235
- )
@@ -1,72 +0,0 @@
1
- import { encodeAbiParameters, encodePacked, zeroAddress } from "viem"
2
- import { describe, expect } from "vitest"
3
- import { testWithRpc } from "../../../permissionless-test/src/testWithRpc"
4
- import { getCoreSmartAccounts } from "../../../permissionless-test/src/utils"
5
- import { erc7579Actions } from "../erc7579"
6
- import { isModuleInstalled } from "./isModuleInstalled"
7
-
8
- describe.each(getCoreSmartAccounts())(
9
- "isModuleInstalled $name",
10
- ({ getErc7579SmartAccountClient, name }) => {
11
- testWithRpc.skipIf(!getErc7579SmartAccountClient)(
12
- "isModuleInstalled",
13
- async ({ rpc }) => {
14
- if (!getErc7579SmartAccountClient) {
15
- throw new Error("getErc7579SmartAccountClient not defined")
16
- }
17
-
18
- const smartClientWithoutExtend =
19
- await getErc7579SmartAccountClient({
20
- entryPoint: {
21
- version: "0.7"
22
- },
23
- ...rpc
24
- })
25
-
26
- const smartClient = smartClientWithoutExtend.extend(
27
- erc7579Actions()
28
- )
29
-
30
- const moduleData = encodePacked(
31
- ["address"],
32
- [smartClient.account.address]
33
- )
34
-
35
- const opHash = await smartClient.installModule({
36
- account: smartClient.account as any,
37
- type: "executor",
38
- address: "0x4Fd8d57b94966982B62e9588C27B4171B55E8354",
39
- context: name.startsWith("Kernel 7579")
40
- ? encodePacked(
41
- ["address", "bytes"],
42
- [
43
- zeroAddress,
44
- encodeAbiParameters(
45
- [{ type: "bytes" }, { type: "bytes" }],
46
- [moduleData, "0x"]
47
- )
48
- ]
49
- )
50
- : moduleData
51
- })
52
-
53
- await smartClient.waitForUserOperationReceipt({
54
- hash: opHash,
55
- timeout: 100000
56
- })
57
-
58
- const isModuleInstalledResult = await isModuleInstalled(
59
- smartClient,
60
- {
61
- account: smartClient.account,
62
- type: "executor",
63
- address: "0x4Fd8d57b94966982B62e9588C27B4171B55E8354",
64
- context: "0x"
65
- }
66
- )
67
-
68
- expect(isModuleInstalledResult).toBe(true)
69
- }
70
- )
71
- }
72
- )
@@ -1,108 +0,0 @@
1
- import { zeroAddress } from "viem"
2
- import { describe, expect } from "vitest"
3
- import { testWithRpc } from "../../../permissionless-test/src/testWithRpc"
4
- import { getCoreSmartAccounts } from "../../../permissionless-test/src/utils"
5
- import { supportsExecutionMode } from "./supportsExecutionMode"
6
-
7
- describe.each(getCoreSmartAccounts())(
8
- "supportsExecutionMode $name",
9
- ({ getErc7579SmartAccountClient }) => {
10
- testWithRpc.skipIf(!getErc7579SmartAccountClient)(
11
- "supportsExecutionMode",
12
- async ({ rpc }) => {
13
- if (!getErc7579SmartAccountClient) {
14
- throw new Error("getErc7579SmartAccountClient not defined")
15
- }
16
-
17
- const smartClient = await getErc7579SmartAccountClient({
18
- entryPoint: {
19
- version: "0.7"
20
- },
21
- ...rpc
22
- })
23
-
24
- const supportsExecutionModeBatchCallBeforeDeploy =
25
- await supportsExecutionMode(smartClient, {
26
- account: smartClient.account,
27
- type: "batchcall",
28
- revertOnError: false,
29
- selector: "0x0",
30
- context: "0x"
31
- })
32
-
33
- expect(supportsExecutionModeBatchCallBeforeDeploy).toBe(true)
34
-
35
- // deploy account
36
- await smartClient.sendTransaction({
37
- to: zeroAddress,
38
- value: 0n,
39
- data: "0x"
40
- })
41
-
42
- const supportsExecutionModeBatchCallBeforeDeployPostDeploy =
43
- await supportsExecutionMode(smartClient, {
44
- account: smartClient.account,
45
- type: "batchcall",
46
- revertOnError: false,
47
- selector: "0x0",
48
- context: "0x"
49
- })
50
-
51
- expect(
52
- supportsExecutionModeBatchCallBeforeDeployPostDeploy
53
- ).toBe(true)
54
-
55
- expect(supportsExecutionModeBatchCallBeforeDeploy).toBe(
56
- supportsExecutionModeBatchCallBeforeDeployPostDeploy
57
- )
58
- }
59
- )
60
- testWithRpc.skipIf(!getErc7579SmartAccountClient)(
61
- "supportsExecutionMode",
62
- async ({ rpc }) => {
63
- if (!getErc7579SmartAccountClient) {
64
- throw new Error("getErc7579SmartAccountClient not defined")
65
- }
66
-
67
- const smartClient = await getErc7579SmartAccountClient({
68
- entryPoint: {
69
- version: "0.7"
70
- },
71
- ...rpc
72
- })
73
-
74
- const supportsExecutionModeBatchCallBeforeDeploy =
75
- await supportsExecutionMode(smartClient, {
76
- account: smartClient.account,
77
- type: "delegatecall"
78
- })
79
-
80
- expect(supportsExecutionModeBatchCallBeforeDeploy).toBe(true)
81
-
82
- // deploy account
83
- await smartClient.sendTransaction({
84
- to: zeroAddress,
85
- value: 0n,
86
- data: "0x"
87
- })
88
-
89
- const supportsExecutionModeBatchCallBeforeDeployPostDeploy =
90
- await supportsExecutionMode(smartClient, {
91
- account: smartClient.account,
92
- type: "batchcall",
93
- revertOnError: false,
94
- selector: "0x0",
95
- context: "0x"
96
- })
97
-
98
- expect(
99
- supportsExecutionModeBatchCallBeforeDeployPostDeploy
100
- ).toBe(true)
101
-
102
- expect(supportsExecutionModeBatchCallBeforeDeploy).toBe(
103
- supportsExecutionModeBatchCallBeforeDeployPostDeploy
104
- )
105
- }
106
- )
107
- }
108
- )
@@ -1,35 +0,0 @@
1
- import { describe, expect } from "vitest"
2
- import { testWithRpc } from "../../../permissionless-test/src/testWithRpc"
3
- import { getCoreSmartAccounts } from "../../../permissionless-test/src/utils"
4
- import { supportsModule } from "./supportsModule"
5
-
6
- describe.each(getCoreSmartAccounts())(
7
- "supportsModule $name",
8
- ({ getErc7579SmartAccountClient }) => {
9
- testWithRpc.skipIf(!getErc7579SmartAccountClient)(
10
- "supportsModule",
11
- async ({ rpc }) => {
12
- if (!getErc7579SmartAccountClient) {
13
- throw new Error("getErc7579SmartAccountClient not defined")
14
- }
15
-
16
- const smartClient = await getErc7579SmartAccountClient({
17
- entryPoint: {
18
- version: "0.7"
19
- },
20
- ...rpc
21
- })
22
-
23
- const supportsValidationModule = await supportsModule(
24
- smartClient,
25
- {
26
- account: smartClient.account,
27
- type: "validator"
28
- }
29
- )
30
-
31
- expect(supportsValidationModule).toBe(true)
32
- }
33
- )
34
- }
35
- )
@@ -1,128 +0,0 @@
1
- import { encodeAbiParameters, encodePacked, isHash, zeroAddress } from "viem"
2
- import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"
3
- import { describe, expect } from "vitest"
4
- import { testWithRpc } from "../../../permissionless-test/src/testWithRpc"
5
- import {
6
- getCoreSmartAccounts,
7
- getPublicClient
8
- } from "../../../permissionless-test/src/utils"
9
- import { erc7579Actions } from "../erc7579"
10
- import { uninstallModule } from "./uninstallModule"
11
-
12
- describe.each(getCoreSmartAccounts())(
13
- "uninstallModule $name",
14
- ({ getErc7579SmartAccountClient, name, isEip7702Compliant }) => {
15
- testWithRpc.skipIf(!getErc7579SmartAccountClient)(
16
- "uninstallModule",
17
- async ({ rpc }) => {
18
- if (!getErc7579SmartAccountClient) {
19
- throw new Error("getErc7579SmartAccountClient not defined")
20
- }
21
-
22
- const privateKey = generatePrivateKey()
23
-
24
- const privateKeyAccount = privateKeyToAccount(privateKey)
25
-
26
- const smartClientWithoutExtend =
27
- await getErc7579SmartAccountClient({
28
- entryPoint: {
29
- version: "0.7"
30
- },
31
- privateKey,
32
- ...rpc
33
- })
34
-
35
- const publicClient = getPublicClient(rpc.anvilRpc)
36
-
37
- const smartClient = smartClientWithoutExtend.extend(
38
- erc7579Actions()
39
- )
40
-
41
- const moduleData = encodePacked(
42
- ["address"],
43
- [smartClient.account.address]
44
- )
45
-
46
- const opHash = await smartClient.installModule({
47
- type: "executor",
48
- address: "0x4Fd8d57b94966982B62e9588C27B4171B55E8354",
49
- context: name.startsWith("Kernel 7579")
50
- ? encodePacked(
51
- ["address", "bytes"],
52
- [
53
- zeroAddress,
54
- encodeAbiParameters(
55
- [{ type: "bytes" }, { type: "bytes" }],
56
- [moduleData, "0x"]
57
- )
58
- ]
59
- )
60
- : moduleData,
61
- authorization: isEip7702Compliant
62
- ? await privateKeyAccount.signAuthorization({
63
- address: (smartClient.account as any)
64
- .implementation,
65
- chainId: smartClient.chain.id,
66
- nonce: await publicClient.getTransactionCount({
67
- address: smartClient.account.address
68
- })
69
- })
70
- : undefined
71
- })
72
-
73
- await smartClient.waitForUserOperationReceipt({
74
- hash: opHash,
75
- timeout: 100000
76
- })
77
-
78
- const uninstallModuleUserOpHash = await uninstallModule(
79
- smartClient,
80
- {
81
- account: smartClient.account,
82
- type: "executor",
83
- address: "0x4Fd8d57b94966982B62e9588C27B4171B55E8354",
84
- context: name.startsWith("Kernel 7579")
85
- ? "0x"
86
- : encodeAbiParameters(
87
- [
88
- { name: "prev", type: "address" },
89
- {
90
- name: "moduleInitData",
91
- type: "bytes"
92
- }
93
- ],
94
- [
95
- "0x0000000000000000000000000000000000000001",
96
- "0x"
97
- ]
98
- )
99
- }
100
- )
101
-
102
- expect(isHash(uninstallModuleUserOpHash)).toBe(true)
103
-
104
- const userOperationReceiptUninstallModule =
105
- await smartClient.waitForUserOperationReceipt({
106
- hash: uninstallModuleUserOpHash,
107
- timeout: 100000
108
- })
109
- expect(userOperationReceiptUninstallModule).not.toBeNull()
110
- expect(userOperationReceiptUninstallModule?.userOpHash).toBe(
111
- uninstallModuleUserOpHash
112
- )
113
- expect(
114
- userOperationReceiptUninstallModule?.receipt.transactionHash
115
- ).toBeTruthy()
116
-
117
- const receiptUninstallModule =
118
- await smartClient.getUserOperationReceipt({
119
- hash: uninstallModuleUserOpHash
120
- })
121
-
122
- expect(receiptUninstallModule?.receipt.transactionHash).toBe(
123
- userOperationReceiptUninstallModule?.receipt.transactionHash
124
- )
125
- }
126
- )
127
- }
128
- )