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,569 +0,0 @@
1
- import { type Hex, zeroAddress } from "viem"
2
- import { waitForUserOperationReceipt } from "viem/account-abstraction"
3
- import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"
4
- import { describe, expect } from "vitest"
5
- import { testWithRpc } from "../../../permissionless-test/src/testWithRpc"
6
- import {
7
- getCoreSmartAccounts,
8
- getPublicClient
9
- } from "../../../permissionless-test/src/utils"
10
- import { sendCalls } from "./sendCalls"
11
-
12
- describe.each(getCoreSmartAccounts())(
13
- "sendCalls $name",
14
- ({
15
- getSmartAccountClient,
16
- supportsEntryPointV06,
17
- supportsEntryPointV07,
18
- supportsEntryPointV08,
19
- isEip7702Compliant
20
- }) => {
21
- const privateKey = generatePrivateKey()
22
- testWithRpc.skipIf(!supportsEntryPointV06)(
23
- "sendCalls_v06",
24
- async ({ rpc }) => {
25
- const { anvilRpc } = rpc
26
-
27
- const smartClient = await getSmartAccountClient({
28
- entryPoint: {
29
- version: "0.6"
30
- },
31
- ...rpc
32
- })
33
-
34
- const { id: userOpHash } = await sendCalls(smartClient, {
35
- calls: [
36
- {
37
- to: zeroAddress,
38
- data: "0x",
39
- value: 0n
40
- }
41
- ]
42
- })
43
-
44
- expect(userOpHash).toBeTruthy()
45
- expect(userOpHash).toMatch(/^0x[a-fA-F0-9]{64}$/)
46
-
47
- const receipt = await waitForUserOperationReceipt(smartClient, {
48
- hash: userOpHash as Hex
49
- })
50
-
51
- expect(receipt).toBeTruthy()
52
- expect(receipt.success).toBe(true)
53
-
54
- const publicClient = getPublicClient(anvilRpc)
55
-
56
- const txReceipt = await publicClient.getTransactionReceipt({
57
- hash: receipt.receipt.transactionHash
58
- })
59
-
60
- expect(txReceipt).toBeTruthy()
61
- expect(txReceipt.status).toBe("success")
62
- }
63
- )
64
-
65
- testWithRpc.skipIf(!supportsEntryPointV06)(
66
- "sendCalls_v06 with multiple calls",
67
- async ({ rpc }) => {
68
- const { anvilRpc } = rpc
69
-
70
- const smartClient = await getSmartAccountClient({
71
- entryPoint: {
72
- version: "0.6"
73
- },
74
- ...rpc
75
- })
76
-
77
- const { id: userOpHash } = await sendCalls(smartClient, {
78
- calls: [
79
- {
80
- to: zeroAddress,
81
- data: "0x",
82
- value: 0n
83
- },
84
- {
85
- to: zeroAddress,
86
- data: "0x1234",
87
- value: 0n
88
- },
89
- {
90
- to: zeroAddress,
91
- data: "0x5678",
92
- value: 0n
93
- }
94
- ]
95
- })
96
-
97
- expect(userOpHash).toBeTruthy()
98
- expect(userOpHash).toMatch(/^0x[a-fA-F0-9]{64}$/)
99
-
100
- const receipt = await waitForUserOperationReceipt(smartClient, {
101
- hash: userOpHash as Hex
102
- })
103
-
104
- expect(receipt).toBeTruthy()
105
- expect(receipt.success).toBe(true)
106
-
107
- const publicClient = getPublicClient(anvilRpc)
108
-
109
- const txReceipt = await publicClient.getTransactionReceipt({
110
- hash: receipt.receipt.transactionHash
111
- })
112
-
113
- expect(txReceipt).toBeTruthy()
114
- expect(txReceipt.status).toBe("success")
115
- }
116
- )
117
-
118
- testWithRpc.skipIf(!supportsEntryPointV07)(
119
- "sendCalls_v07",
120
- async ({ rpc }) => {
121
- const { anvilRpc } = rpc
122
-
123
- const privateKeyAccount = privateKeyToAccount(privateKey)
124
-
125
- const smartClient = await getSmartAccountClient({
126
- entryPoint: {
127
- version: "0.7"
128
- },
129
- privateKey,
130
- ...rpc
131
- })
132
-
133
- const publicClient = getPublicClient(anvilRpc)
134
-
135
- const { id: userOpHash } = await sendCalls(smartClient, {
136
- calls: [
137
- {
138
- to: zeroAddress,
139
- data: "0x",
140
- value: 0n
141
- }
142
- ],
143
- authorization: isEip7702Compliant
144
- ? await privateKeyAccount.signAuthorization({
145
- address: (smartClient.account as any)
146
- .implementation,
147
- chainId: smartClient.chain.id,
148
- nonce: await publicClient.getTransactionCount({
149
- address: smartClient.account.address
150
- })
151
- })
152
- : undefined
153
- })
154
-
155
- expect(userOpHash).toBeTruthy()
156
- expect(userOpHash).toMatch(/^0x[a-fA-F0-9]{64}$/)
157
-
158
- const receipt = await waitForUserOperationReceipt(smartClient, {
159
- hash: userOpHash as Hex
160
- })
161
-
162
- expect(receipt).toBeTruthy()
163
- expect(receipt.success).toBe(true)
164
-
165
- const txReceipt = await publicClient.getTransactionReceipt({
166
- hash: receipt.receipt.transactionHash
167
- })
168
-
169
- expect(txReceipt).toBeTruthy()
170
- expect(txReceipt.status).toBe("success")
171
-
172
- // Second transaction after deployment
173
- const { id: userOpHash2 } = await sendCalls(smartClient, {
174
- calls: [
175
- {
176
- to: zeroAddress,
177
- data: "0x",
178
- value: 0n
179
- }
180
- ]
181
- })
182
-
183
- expect(userOpHash2).toBeTruthy()
184
- expect(userOpHash2).toMatch(/^0x[a-fA-F0-9]{64}$/)
185
-
186
- const receipt2 = await waitForUserOperationReceipt(
187
- smartClient,
188
- {
189
- hash: userOpHash2 as Hex
190
- }
191
- )
192
-
193
- expect(receipt2).toBeTruthy()
194
- expect(receipt2.success).toBe(true)
195
- }
196
- )
197
-
198
- testWithRpc.skipIf(!supportsEntryPointV08)(
199
- "sendCalls_v08",
200
- async ({ rpc }) => {
201
- const { anvilRpc } = rpc
202
-
203
- const privateKeyAccount = privateKeyToAccount(privateKey)
204
-
205
- const smartClient = await getSmartAccountClient({
206
- entryPoint: {
207
- version: "0.8"
208
- },
209
- privateKey,
210
- ...rpc
211
- })
212
-
213
- const publicClient = getPublicClient(anvilRpc)
214
-
215
- const authorization = isEip7702Compliant
216
- ? await privateKeyAccount.signAuthorization({
217
- address: (smartClient.account as any).implementation,
218
- chainId: smartClient.chain.id,
219
- nonce: await publicClient.getTransactionCount({
220
- address: smartClient.account.address
221
- })
222
- })
223
- : undefined
224
-
225
- const { id: userOpHash } = await sendCalls(smartClient, {
226
- calls: [
227
- {
228
- to: zeroAddress,
229
- data: "0x",
230
- value: 0n
231
- }
232
- ],
233
- authorization
234
- })
235
-
236
- expect(userOpHash).toBeTruthy()
237
- expect(userOpHash).toMatch(/^0x[a-fA-F0-9]{64}$/)
238
-
239
- const receipt = await waitForUserOperationReceipt(smartClient, {
240
- hash: userOpHash as Hex
241
- })
242
-
243
- expect(receipt).toBeTruthy()
244
- expect(receipt.success).toBe(true)
245
-
246
- const txReceipt = await publicClient.getTransactionReceipt({
247
- hash: receipt.receipt.transactionHash
248
- })
249
-
250
- expect(txReceipt).toBeTruthy()
251
- expect(txReceipt.status).toBe("success")
252
-
253
- // Second transaction after deployment
254
- const { id: userOpHash2 } = await sendCalls(smartClient, {
255
- calls: [
256
- {
257
- to: zeroAddress,
258
- data: "0x",
259
- value: 0n
260
- }
261
- ]
262
- })
263
-
264
- expect(userOpHash2).toBeTruthy()
265
- expect(userOpHash2).toMatch(/^0x[a-fA-F0-9]{64}$/)
266
-
267
- const receipt2 = await waitForUserOperationReceipt(
268
- smartClient,
269
- {
270
- hash: userOpHash2 as Hex
271
- }
272
- )
273
-
274
- expect(receipt2).toBeTruthy()
275
- expect(receipt2.success).toBe(true)
276
- }
277
- )
278
-
279
- testWithRpc.skipIf(!supportsEntryPointV06)(
280
- "sendCalls_v06 post deployment",
281
- async ({ rpc }) => {
282
- const { anvilRpc } = rpc
283
-
284
- await (async () => {
285
- const smartClient = await getSmartAccountClient({
286
- entryPoint: {
287
- version: "0.6"
288
- },
289
- privateKey,
290
- ...rpc
291
- })
292
-
293
- const { id: userOpHash } = await sendCalls(smartClient, {
294
- calls: [
295
- {
296
- to: zeroAddress,
297
- data: "0x",
298
- value: 0n
299
- }
300
- ]
301
- })
302
-
303
- expect(userOpHash).toBeTruthy()
304
-
305
- const receipt = await waitForUserOperationReceipt(
306
- smartClient,
307
- {
308
- hash: userOpHash as Hex
309
- }
310
- )
311
-
312
- expect(receipt).toBeTruthy()
313
- expect(receipt.success).toBe(true)
314
-
315
- const publicClient = getPublicClient(anvilRpc)
316
-
317
- const txReceipt = await publicClient.getTransactionReceipt({
318
- hash: receipt.receipt.transactionHash
319
- })
320
-
321
- expect(txReceipt).toBeTruthy()
322
- expect(txReceipt.status).toBe("success")
323
- })()
324
-
325
- const smartClient = await getSmartAccountClient({
326
- entryPoint: {
327
- version: "0.6"
328
- },
329
- privateKey,
330
- ...rpc
331
- })
332
-
333
- // Second transaction after deployment
334
- const { id: userOpHash2 } = await sendCalls(smartClient, {
335
- calls: [
336
- {
337
- to: zeroAddress,
338
- data: "0x",
339
- value: 0n
340
- }
341
- ]
342
- })
343
-
344
- expect(userOpHash2).toBeTruthy()
345
-
346
- const receipt2 = await waitForUserOperationReceipt(
347
- smartClient,
348
- {
349
- hash: userOpHash2 as Hex
350
- }
351
- )
352
-
353
- expect(receipt2).toBeTruthy()
354
- expect(receipt2.success).toBe(true)
355
-
356
- const publicClient = getPublicClient(anvilRpc)
357
-
358
- const txReceipt2 = await publicClient.getTransactionReceipt({
359
- hash: receipt2.receipt.transactionHash
360
- })
361
-
362
- expect(txReceipt2).toBeTruthy()
363
- expect(txReceipt2.status).toBe("success")
364
- }
365
- )
366
-
367
- testWithRpc.skipIf(!supportsEntryPointV07)(
368
- "sendCalls_v07 post deployment",
369
- async ({ rpc }) => {
370
- const { anvilRpc } = rpc
371
-
372
- await (async () => {
373
- const privateKeyAccount = privateKeyToAccount(privateKey)
374
-
375
- const smartClient = await getSmartAccountClient({
376
- entryPoint: {
377
- version: "0.7"
378
- },
379
- privateKey,
380
- ...rpc
381
- })
382
-
383
- const publicClient = getPublicClient(anvilRpc)
384
-
385
- const authorization = isEip7702Compliant
386
- ? await privateKeyAccount.signAuthorization({
387
- address: (smartClient.account as any)
388
- .implementation,
389
- chainId: smartClient.chain.id,
390
- nonce: await publicClient.getTransactionCount({
391
- address: smartClient.account.address
392
- })
393
- })
394
- : undefined
395
-
396
- const { id: userOpHash } = await sendCalls(smartClient, {
397
- calls: [
398
- {
399
- to: zeroAddress,
400
- data: "0x",
401
- value: 0n
402
- }
403
- ],
404
- authorization
405
- })
406
-
407
- expect(userOpHash).toBeTruthy()
408
-
409
- const receipt = await waitForUserOperationReceipt(
410
- smartClient,
411
- {
412
- hash: userOpHash as Hex
413
- }
414
- )
415
-
416
- expect(receipt).toBeTruthy()
417
- expect(receipt.success).toBe(true)
418
-
419
- const txReceipt = await publicClient.getTransactionReceipt({
420
- hash: receipt.receipt.transactionHash
421
- })
422
-
423
- expect(txReceipt).toBeTruthy()
424
- expect(txReceipt.status).toBe("success")
425
- })()
426
-
427
- const smartClient = await getSmartAccountClient({
428
- entryPoint: {
429
- version: "0.7"
430
- },
431
- privateKey,
432
- ...rpc
433
- })
434
-
435
- const { id: userOpHash2 } = await sendCalls(smartClient, {
436
- calls: [
437
- {
438
- to: zeroAddress,
439
- data: "0x",
440
- value: 0n
441
- }
442
- ]
443
- })
444
-
445
- expect(userOpHash2).toBeTruthy()
446
-
447
- const receipt2 = await waitForUserOperationReceipt(
448
- smartClient,
449
- {
450
- hash: userOpHash2 as Hex
451
- }
452
- )
453
-
454
- expect(receipt2).toBeTruthy()
455
- expect(receipt2.success).toBe(true)
456
-
457
- const publicClient = getPublicClient(anvilRpc)
458
-
459
- const txReceipt2 = await publicClient.getTransactionReceipt({
460
- hash: receipt2.receipt.transactionHash
461
- })
462
-
463
- expect(txReceipt2).toBeTruthy()
464
- expect(txReceipt2.status).toBe("success")
465
- }
466
- )
467
-
468
- testWithRpc.skipIf(!supportsEntryPointV08)(
469
- "sendCalls_v08 post deployment",
470
- async ({ rpc }) => {
471
- const { anvilRpc } = rpc
472
-
473
- const privateKeyAccount = privateKeyToAccount(privateKey)
474
-
475
- await (async () => {
476
- const smartClient = await getSmartAccountClient({
477
- entryPoint: {
478
- version: "0.8"
479
- },
480
- privateKey,
481
- ...rpc
482
- })
483
-
484
- const publicClient = getPublicClient(anvilRpc)
485
-
486
- const authorization = isEip7702Compliant
487
- ? await privateKeyAccount.signAuthorization({
488
- address: (smartClient.account as any)
489
- .implementation,
490
- chainId: smartClient.chain.id,
491
- nonce: await publicClient.getTransactionCount({
492
- address: smartClient.account.address
493
- })
494
- })
495
- : undefined
496
-
497
- const { id: userOpHash } = await sendCalls(smartClient, {
498
- calls: [
499
- {
500
- to: zeroAddress,
501
- data: "0x",
502
- value: 0n
503
- }
504
- ],
505
- authorization
506
- })
507
-
508
- expect(userOpHash).toBeTruthy()
509
-
510
- const receipt = await waitForUserOperationReceipt(
511
- smartClient,
512
- {
513
- hash: userOpHash as Hex
514
- }
515
- )
516
-
517
- expect(receipt).toBeTruthy()
518
- expect(receipt.success).toBe(true)
519
-
520
- const txReceipt = await publicClient.getTransactionReceipt({
521
- hash: receipt.receipt.transactionHash
522
- })
523
-
524
- expect(txReceipt).toBeTruthy()
525
- expect(txReceipt.status).toBe("success")
526
- })()
527
-
528
- const smartClient = await getSmartAccountClient({
529
- entryPoint: {
530
- version: "0.8"
531
- },
532
- privateKey,
533
- ...rpc
534
- })
535
-
536
- const { id: userOpHash2 } = await sendCalls(smartClient, {
537
- calls: [
538
- {
539
- to: zeroAddress,
540
- data: "0x",
541
- value: 0n
542
- }
543
- ]
544
- })
545
-
546
- expect(userOpHash2).toBeTruthy()
547
-
548
- const receipt2 = await waitForUserOperationReceipt(
549
- smartClient,
550
- {
551
- hash: userOpHash2 as Hex
552
- }
553
- )
554
-
555
- expect(receipt2).toBeTruthy()
556
- expect(receipt2.success).toBe(true)
557
-
558
- const publicClient = getPublicClient(anvilRpc)
559
-
560
- const txReceipt2 = await publicClient.getTransactionReceipt({
561
- hash: receipt2.receipt.transactionHash
562
- })
563
-
564
- expect(txReceipt2).toBeTruthy()
565
- expect(txReceipt2.status).toBe("success")
566
- }
567
- )
568
- }
569
- )