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,416 +0,0 @@
1
- import { 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 { sendTransaction } from "./sendTransaction"
10
-
11
- const privateKey =
12
- "0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356"
13
-
14
- describe.each(getCoreSmartAccounts())(
15
- "sendTransaction $name",
16
- ({
17
- getSmartAccountClient,
18
- supportsEntryPointV06,
19
- supportsEntryPointV07,
20
- supportsEntryPointV08,
21
- isEip7702Compliant
22
- }) => {
23
- testWithRpc.skipIf(!supportsEntryPointV06)(
24
- "sendTransaction_v06",
25
- async ({ rpc }) => {
26
- const { anvilRpc } = rpc
27
-
28
- const smartClient = await getSmartAccountClient({
29
- entryPoint: {
30
- version: "0.6"
31
- },
32
- ...rpc
33
- })
34
-
35
- const transactionHash = await sendTransaction(smartClient, {
36
- to: zeroAddress,
37
- data: "0x",
38
- value: 0n
39
- })
40
-
41
- expect(transactionHash).toBeTruthy()
42
-
43
- const publicClient = getPublicClient(anvilRpc)
44
-
45
- const receipt = await publicClient.getTransactionReceipt({
46
- hash: transactionHash
47
- })
48
-
49
- expect(receipt).toBeTruthy()
50
- expect(receipt.transactionHash).toBe(transactionHash)
51
- expect(receipt.status).toBe("success")
52
-
53
- // -- second transaction after deployment
54
-
55
- const transactionHash2 = await sendTransaction(smartClient, {
56
- to: zeroAddress,
57
- data: "0x",
58
- value: 0n
59
- })
60
-
61
- expect(transactionHash2).toBeTruthy()
62
-
63
- const receipt2 = await publicClient.getTransactionReceipt({
64
- hash: transactionHash2
65
- })
66
-
67
- expect(receipt2).toBeTruthy()
68
- expect(receipt2.transactionHash).toBe(transactionHash2)
69
- expect(receipt2.status).toBe("success")
70
- }
71
- )
72
-
73
- testWithRpc.skipIf(!supportsEntryPointV07)(
74
- "sendTransaction_v07",
75
- async ({ rpc }) => {
76
- const { anvilRpc } = rpc
77
-
78
- const privateKeyAccount = privateKeyToAccount(privateKey)
79
-
80
- const smartClient = await getSmartAccountClient({
81
- entryPoint: {
82
- version: "0.7"
83
- },
84
- privateKey, // anvil private key
85
- ...rpc
86
- })
87
-
88
- const publicClient = getPublicClient(anvilRpc)
89
-
90
- const transactionHash = await sendTransaction(smartClient, {
91
- to: zeroAddress,
92
- data: "0x",
93
- value: 0n,
94
- authorization: isEip7702Compliant
95
- ? await privateKeyAccount.signAuthorization({
96
- address: (smartClient.account as any)
97
- .implementation,
98
- chainId: smartClient.chain.id,
99
- nonce: await publicClient.getTransactionCount({
100
- address: smartClient.account.address
101
- })
102
- })
103
- : undefined
104
- })
105
-
106
- expect(transactionHash).toBeTruthy()
107
-
108
- const receipt = await publicClient.getTransactionReceipt({
109
- hash: transactionHash
110
- })
111
-
112
- expect(receipt).toBeTruthy()
113
- expect(receipt.transactionHash).toBe(transactionHash)
114
- expect(receipt.status).toBe("success")
115
-
116
- const transactionHash2 = await sendTransaction(smartClient, {
117
- to: zeroAddress,
118
- data: "0x",
119
- value: 0n
120
- })
121
-
122
- // -- second transaction after deployment
123
-
124
- expect(transactionHash2).toBeTruthy()
125
-
126
- const receipt2 = await publicClient.getTransactionReceipt({
127
- hash: transactionHash2
128
- })
129
-
130
- expect(receipt2).toBeTruthy()
131
- expect(receipt2.transactionHash).toBe(transactionHash2)
132
- expect(receipt2.status).toBe("success")
133
- }
134
- )
135
-
136
- testWithRpc.skipIf(!supportsEntryPointV08)(
137
- "sendTransaction_v08",
138
- async ({ rpc }) => {
139
- const { anvilRpc } = rpc
140
-
141
- const privateKeyAccount = privateKeyToAccount(privateKey)
142
-
143
- const smartClient = await getSmartAccountClient({
144
- entryPoint: {
145
- version: "0.8"
146
- },
147
- privateKey, // anvil private key
148
- ...rpc
149
- })
150
-
151
- const publicClient = getPublicClient(anvilRpc)
152
-
153
- const authorization = isEip7702Compliant
154
- ? await privateKeyAccount.signAuthorization({
155
- address: (smartClient.account as any).implementation,
156
- chainId: smartClient.chain.id,
157
- nonce: await publicClient.getTransactionCount({
158
- address: smartClient.account.address
159
- })
160
- })
161
- : undefined
162
-
163
- const transactionHash = await sendTransaction(smartClient, {
164
- to: zeroAddress,
165
- data: "0x",
166
- value: 0n,
167
- authorization
168
- })
169
-
170
- expect(transactionHash).toBeTruthy()
171
-
172
- const receipt = await publicClient.getTransactionReceipt({
173
- hash: transactionHash
174
- })
175
-
176
- expect(receipt).toBeTruthy()
177
- expect(receipt.transactionHash).toBe(transactionHash)
178
- expect(receipt.status).toBe("success")
179
-
180
- const transactionHash2 = await sendTransaction(smartClient, {
181
- to: zeroAddress,
182
- data: "0x",
183
- value: 0n
184
- })
185
-
186
- // -- second transaction after deployment
187
-
188
- expect(transactionHash2).toBeTruthy()
189
-
190
- const receipt2 = await publicClient.getTransactionReceipt({
191
- hash: transactionHash2
192
- })
193
-
194
- expect(receipt2).toBeTruthy()
195
- expect(receipt2.transactionHash).toBe(transactionHash2)
196
- expect(receipt2.status).toBe("success")
197
- }
198
- )
199
-
200
- testWithRpc.skipIf(!supportsEntryPointV06)(
201
- "sendTransaction_v06 post deployment",
202
- async ({ rpc }) => {
203
- const { anvilRpc } = rpc
204
-
205
- await (async () => {
206
- const smartClient = await getSmartAccountClient({
207
- entryPoint: {
208
- version: "0.6"
209
- },
210
- privateKey, // anvil private key
211
- ...rpc
212
- })
213
-
214
- const transactionHash = await sendTransaction(smartClient, {
215
- to: zeroAddress,
216
- data: "0x",
217
- value: 0n
218
- })
219
-
220
- expect(transactionHash).toBeTruthy()
221
-
222
- const publicClient = getPublicClient(anvilRpc)
223
-
224
- const receipt = await publicClient.getTransactionReceipt({
225
- hash: transactionHash
226
- })
227
-
228
- expect(receipt).toBeTruthy()
229
- expect(receipt.transactionHash).toBe(transactionHash)
230
- expect(receipt.status).toBe("success")
231
- })()
232
-
233
- const smartClient = await getSmartAccountClient({
234
- entryPoint: {
235
- version: "0.6"
236
- },
237
- privateKey, // anvil private key
238
- ...rpc
239
- })
240
-
241
- const publicClient = getPublicClient(anvilRpc)
242
-
243
- // -- second transaction after deployment
244
- const transactionHash2 = await sendTransaction(smartClient, {
245
- to: zeroAddress,
246
- data: "0x",
247
- value: 0n
248
- })
249
-
250
- expect(transactionHash2).toBeTruthy()
251
-
252
- const receipt2 = await publicClient.getTransactionReceipt({
253
- hash: transactionHash2
254
- })
255
-
256
- expect(receipt2).toBeTruthy()
257
- expect(receipt2.transactionHash).toBe(transactionHash2)
258
- expect(receipt2.status).toBe("success")
259
- }
260
- )
261
-
262
- testWithRpc.skipIf(!supportsEntryPointV07)(
263
- "sendTransaction_v07 post deployment",
264
- async ({ rpc }) => {
265
- const { anvilRpc } = rpc
266
-
267
- await (async () => {
268
- const privateKeyAccount = privateKeyToAccount(privateKey)
269
-
270
- const smartClient = await getSmartAccountClient({
271
- entryPoint: {
272
- version: "0.7"
273
- },
274
- privateKey, // anvil private key
275
- ...rpc
276
- })
277
-
278
- const publicClient = getPublicClient(anvilRpc)
279
-
280
- const authorization = isEip7702Compliant
281
- ? await privateKeyAccount.signAuthorization({
282
- address: (smartClient.account as any)
283
- .implementation,
284
- chainId: smartClient.chain.id,
285
- nonce: await publicClient.getTransactionCount({
286
- address: smartClient.account.address
287
- })
288
- })
289
- : undefined
290
-
291
- const transactionHash = await sendTransaction(smartClient, {
292
- to: zeroAddress,
293
- data: "0x",
294
- value: 0n,
295
- authorization
296
- })
297
-
298
- expect(transactionHash).toBeTruthy()
299
-
300
- const receipt = await publicClient.getTransactionReceipt({
301
- hash: transactionHash
302
- })
303
-
304
- expect(receipt).toBeTruthy()
305
- expect(receipt.transactionHash).toBe(transactionHash)
306
- expect(receipt.status).toBe("success")
307
- })()
308
-
309
- const smartClient = await getSmartAccountClient({
310
- entryPoint: {
311
- version: "0.7"
312
- },
313
- privateKey, // anvil private key
314
- ...rpc
315
- })
316
-
317
- const publicClient = getPublicClient(anvilRpc)
318
-
319
- const transactionHash2 = await sendTransaction(smartClient, {
320
- to: zeroAddress,
321
- data: "0x",
322
- value: 0n
323
- })
324
-
325
- // -- second transaction after deployment
326
-
327
- expect(transactionHash2).toBeTruthy()
328
-
329
- const receipt2 = await publicClient.getTransactionReceipt({
330
- hash: transactionHash2
331
- })
332
-
333
- expect(receipt2).toBeTruthy()
334
- expect(receipt2.transactionHash).toBe(transactionHash2)
335
- expect(receipt2.status).toBe("success")
336
- }
337
- )
338
-
339
- testWithRpc.skipIf(!supportsEntryPointV08)(
340
- "sendTransaction_v08 post deployment",
341
- async ({ rpc }) => {
342
- const { anvilRpc } = rpc
343
-
344
- const privateKeyAccount = privateKeyToAccount(privateKey)
345
-
346
- await (async () => {
347
- const smartClient = await getSmartAccountClient({
348
- entryPoint: {
349
- version: "0.8"
350
- },
351
- privateKey, // anvil private key
352
- ...rpc
353
- })
354
-
355
- const publicClient = getPublicClient(anvilRpc)
356
-
357
- const authorization = isEip7702Compliant
358
- ? await privateKeyAccount.signAuthorization({
359
- address: (smartClient.account as any)
360
- .implementation,
361
- chainId: smartClient.chain.id,
362
- nonce: await publicClient.getTransactionCount({
363
- address: smartClient.account.address
364
- })
365
- })
366
- : undefined
367
-
368
- const transactionHash = await sendTransaction(smartClient, {
369
- to: zeroAddress,
370
- data: "0x",
371
- value: 0n,
372
- authorization
373
- })
374
-
375
- expect(transactionHash).toBeTruthy()
376
-
377
- const receipt = await publicClient.getTransactionReceipt({
378
- hash: transactionHash
379
- })
380
-
381
- expect(receipt).toBeTruthy()
382
- expect(receipt.transactionHash).toBe(transactionHash)
383
- expect(receipt.status).toBe("success")
384
- })()
385
-
386
- const smartClient = await getSmartAccountClient({
387
- entryPoint: {
388
- version: "0.8"
389
- },
390
- privateKey, // anvil private key
391
- ...rpc
392
- })
393
-
394
- const publicClient = getPublicClient(anvilRpc)
395
-
396
- const transactionHash2 = await sendTransaction(smartClient, {
397
- to: zeroAddress,
398
- data: "0x",
399
- value: 0n
400
- })
401
-
402
- // -- second transaction after deployment
403
-
404
- expect(transactionHash2).toBeTruthy()
405
-
406
- const receipt2 = await publicClient.getTransactionReceipt({
407
- hash: transactionHash2
408
- })
409
-
410
- expect(receipt2).toBeTruthy()
411
- expect(receipt2.transactionHash).toBe(transactionHash2)
412
- expect(receipt2.status).toBe("success")
413
- }
414
- )
415
- }
416
- )
@@ -1,219 +0,0 @@
1
- import { 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 { signMessage } from "./signMessage"
10
-
11
- const privateKey =
12
- "0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356"
13
-
14
- describe.each(getCoreSmartAccounts())(
15
- "signMessage $name",
16
- ({
17
- getSmartAccountClient,
18
- isEip1271Compliant,
19
- supportsEntryPointV06,
20
- supportsEntryPointV07,
21
- supportsEntryPointV08,
22
- isEip7702Compliant,
23
- name
24
- }) => {
25
- testWithRpc.skipIf(isEip1271Compliant || !supportsEntryPointV06)(
26
- "not isEip1271Compliant_v06",
27
- async ({ rpc }) => {
28
- const smartClient = await getSmartAccountClient({
29
- entryPoint: {
30
- version: "0.6"
31
- },
32
- ...rpc
33
- })
34
-
35
- await expect(async () =>
36
- signMessage(smartClient, {
37
- message: "slowly and steadily burning the private keys"
38
- })
39
- ).rejects.toThrow()
40
- }
41
- )
42
-
43
- testWithRpc.skipIf(!isEip1271Compliant || !supportsEntryPointV06)(
44
- "isEip1271Compliant_v06",
45
- async ({ rpc }) => {
46
- const { anvilRpc } = rpc
47
-
48
- const smartClient = await getSmartAccountClient({
49
- entryPoint: {
50
- version: "0.6"
51
- },
52
- ...rpc
53
- })
54
-
55
- if (!smartClient.account) {
56
- throw new Error("Account not found")
57
- }
58
-
59
- if (name.includes("Safe 7579")) {
60
- // Due to 7579 launchpad, we can't verify the signature before deploying the account.
61
- await smartClient.sendTransaction({
62
- calls: [{ to: zeroAddress, value: 0n }]
63
- })
64
- }
65
-
66
- const signature = await signMessage(smartClient, {
67
- message: "slowly and steadily burning the private keys",
68
- account: smartClient.account
69
- })
70
-
71
- const publicClient = getPublicClient(anvilRpc)
72
-
73
- const isVerified = await publicClient.verifyMessage({
74
- address: smartClient.account.address,
75
- message: "slowly and steadily burning the private keys",
76
- signature
77
- })
78
-
79
- expect(isVerified).toBeTruthy()
80
- }
81
- )
82
-
83
- testWithRpc.skipIf(isEip1271Compliant || !supportsEntryPointV07)(
84
- "not isEip1271Compliant_v07",
85
- async ({ rpc }) => {
86
- const smartClient = await getSmartAccountClient({
87
- entryPoint: {
88
- version: "0.7"
89
- },
90
- ...rpc
91
- })
92
-
93
- await expect(async () =>
94
- signMessage(smartClient, {
95
- message: "slowly and steadily burning the private keys"
96
- })
97
- ).rejects.toThrow()
98
- }
99
- )
100
-
101
- testWithRpc.skipIf(!isEip1271Compliant || !supportsEntryPointV07)(
102
- "isEip1271Compliant_v07",
103
- async ({ rpc }) => {
104
- const { anvilRpc } = rpc
105
-
106
- const privateKeyAccount = privateKeyToAccount(privateKey)
107
-
108
- const smartClient = await getSmartAccountClient({
109
- entryPoint: {
110
- version: "0.7"
111
- },
112
- privateKey, // anvil private key
113
- ...rpc
114
- })
115
-
116
- if (name === "LightAccount 2.0.0") {
117
- // LightAccount 2.0.0 doesn't support EIP-1271
118
- return
119
- }
120
-
121
- if (
122
- name.includes("Safe 7579") ||
123
- name.includes("Kernel 0.3.3 + EIP-7702")
124
- ) {
125
- const publicClient = getPublicClient(anvilRpc)
126
-
127
- // Due to 7579 launchpad, we can't verify the signature before deploying the account.
128
- await smartClient.sendTransaction({
129
- calls: [{ to: zeroAddress, value: 0n }],
130
- authorization: isEip7702Compliant
131
- ? await privateKeyAccount.signAuthorization({
132
- address: (smartClient.account as any)
133
- .implementation,
134
- chainId: smartClient.chain.id,
135
- nonce: await publicClient.getTransactionCount(
136
- {
137
- address: smartClient.account.address
138
- }
139
- )
140
- })
141
- : undefined
142
- })
143
- }
144
-
145
- const signature = await signMessage(smartClient, {
146
- message: "slowly and steadily burning the private keys"
147
- })
148
-
149
- const publicClient = getPublicClient(anvilRpc)
150
-
151
- const isVerified = await publicClient.verifyMessage({
152
- address: smartClient.account.address,
153
- message: "slowly and steadily burning the private keys",
154
- signature
155
- })
156
-
157
- expect(isVerified).toBeTruthy()
158
- }
159
- )
160
-
161
- testWithRpc.skipIf(isEip1271Compliant || !supportsEntryPointV08)(
162
- "not isEip1271Compliant_v08",
163
- async ({ rpc }) => {
164
- const smartClient = await getSmartAccountClient({
165
- entryPoint: {
166
- version: "0.8"
167
- },
168
- ...rpc
169
- })
170
-
171
- await expect(async () =>
172
- signMessage(smartClient, {
173
- message: "slowly and steadily burning the private keys"
174
- })
175
- ).rejects.toThrow()
176
- }
177
- )
178
-
179
- testWithRpc.skipIf(!isEip1271Compliant || !supportsEntryPointV08)(
180
- "isEip1271Compliant_v08",
181
- async ({ rpc }) => {
182
- const { anvilRpc } = rpc
183
-
184
- const smartClient = await getSmartAccountClient({
185
- entryPoint: {
186
- version: "0.8"
187
- },
188
- ...rpc
189
- })
190
-
191
- if (name === "LightAccount 2.0.0") {
192
- // LightAccount 2.0.0 doesn't support EIP-1271
193
- return
194
- }
195
-
196
- if (name.includes("Safe 7579")) {
197
- // Due to 7579 launchpad, we can't verify the signature before deploying the account.
198
- await smartClient.sendTransaction({
199
- calls: [{ to: zeroAddress, value: 0n }]
200
- })
201
- }
202
-
203
- const signature = await signMessage(smartClient, {
204
- message: "slowly and steadily burning the private keys"
205
- })
206
-
207
- const publicClient = getPublicClient(anvilRpc)
208
-
209
- const isVerified = await publicClient.verifyMessage({
210
- address: smartClient.account.address,
211
- message: "slowly and steadily burning the private keys",
212
- signature
213
- })
214
-
215
- expect(isVerified).toBeTruthy()
216
- }
217
- )
218
- }
219
- )