permissionless 0.3.5 → 0.3.7

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