permissionless 0.0.11 → 0.0.13

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 (306) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/_cjs/accounts/index.js +14 -0
  3. package/_cjs/accounts/index.js.map +1 -0
  4. package/_cjs/accounts/privateKeyToSafeSmartAccount.js +24 -0
  5. package/_cjs/accounts/privateKeyToSafeSmartAccount.js.map +1 -0
  6. package/_cjs/accounts/privateKeyToSimpleSmartAccount.js +16 -0
  7. package/_cjs/accounts/privateKeyToSimpleSmartAccount.js.map +1 -0
  8. package/_cjs/accounts/signerToSafeSmartAccount.js +492 -0
  9. package/_cjs/accounts/signerToSafeSmartAccount.js.map +1 -0
  10. package/_cjs/accounts/signerToSimpleSmartAccount.js +190 -0
  11. package/_cjs/accounts/signerToSimpleSmartAccount.js.map +1 -0
  12. package/_cjs/accounts/types.js +23 -0
  13. package/_cjs/accounts/types.js.map +1 -0
  14. package/_cjs/actions/bundler/chainId.js.map +1 -1
  15. package/_cjs/actions/bundler/estimateUserOperationGas.js +4 -1
  16. package/_cjs/actions/bundler/estimateUserOperationGas.js.map +1 -1
  17. package/_cjs/actions/bundler/getUserOperationByHash.js.map +1 -1
  18. package/_cjs/actions/bundler/getUserOperationReceipt.js.map +1 -1
  19. package/_cjs/actions/bundler/sendUserOperation.js +4 -1
  20. package/_cjs/actions/bundler/sendUserOperation.js.map +1 -1
  21. package/_cjs/actions/bundler/supportedEntryPoints.js.map +1 -1
  22. package/_cjs/actions/bundler/waitForUserOperationReceipt.js +7 -2
  23. package/_cjs/actions/bundler/waitForUserOperationReceipt.js.map +1 -1
  24. package/_cjs/actions/index.js.map +1 -1
  25. package/_cjs/actions/pimlico/getUserOperationGasPrice.js.map +1 -1
  26. package/_cjs/actions/pimlico/getUserOperationStatus.js.map +1 -1
  27. package/_cjs/actions/pimlico/sponsorUserOperation.js +4 -1
  28. package/_cjs/actions/pimlico/sponsorUserOperation.js.map +1 -1
  29. package/_cjs/actions/pimlico.js.map +1 -1
  30. package/_cjs/actions/public/getAccountNonce.js +4 -2
  31. package/_cjs/actions/public/getAccountNonce.js.map +1 -1
  32. package/_cjs/actions/public/getSenderAddress.js +7 -3
  33. package/_cjs/actions/public/getSenderAddress.js.map +1 -1
  34. package/_cjs/actions/smartAccount/deployContract.js +38 -0
  35. package/_cjs/actions/smartAccount/deployContract.js.map +1 -0
  36. package/_cjs/actions/smartAccount/prepareUserOperationRequest.js +73 -0
  37. package/_cjs/actions/smartAccount/prepareUserOperationRequest.js.map +1 -0
  38. package/_cjs/actions/smartAccount/sendTransaction.js +44 -0
  39. package/_cjs/actions/smartAccount/sendTransaction.js.map +1 -0
  40. package/_cjs/actions/smartAccount/sendTransactions.js +46 -0
  41. package/_cjs/actions/smartAccount/sendTransactions.js.map +1 -0
  42. package/_cjs/actions/smartAccount/sendUserOperation.js +22 -0
  43. package/_cjs/actions/smartAccount/sendUserOperation.js.map +1 -0
  44. package/_cjs/actions/smartAccount/signMessage.js +16 -0
  45. package/_cjs/actions/smartAccount/signMessage.js.map +1 -0
  46. package/_cjs/actions/smartAccount/signTypedData.js +34 -0
  47. package/_cjs/actions/smartAccount/signTypedData.js.map +1 -0
  48. package/_cjs/actions/smartAccount/writeContract.js +21 -0
  49. package/_cjs/actions/smartAccount/writeContract.js.map +1 -0
  50. package/_cjs/actions/smartAccount.js +18 -0
  51. package/_cjs/actions/smartAccount.js.map +1 -0
  52. package/_cjs/actions/stackup/sponsorUserOperation.js +5 -1
  53. package/_cjs/actions/stackup/sponsorUserOperation.js.map +1 -1
  54. package/_cjs/clients/{bundler.js → createBundlerClient.js} +1 -1
  55. package/_cjs/clients/createBundlerClient.js.map +1 -0
  56. package/_cjs/clients/createSmartAccountClient.js +20 -0
  57. package/_cjs/clients/createSmartAccountClient.js.map +1 -0
  58. package/_cjs/clients/decorators/bundler.js.map +1 -1
  59. package/_cjs/clients/decorators/pimlico.js.map +1 -1
  60. package/_cjs/clients/decorators/smartAccount.js +33 -0
  61. package/_cjs/clients/decorators/smartAccount.js.map +1 -0
  62. package/_cjs/clients/decorators/stackup.js.map +1 -1
  63. package/_cjs/clients/pimlico.js.map +1 -1
  64. package/_cjs/clients/stackup.js.map +1 -1
  65. package/_cjs/index.js +9 -5
  66. package/_cjs/index.js.map +1 -1
  67. package/_cjs/utils/deepHexlify.js +4 -4
  68. package/_cjs/utils/deepHexlify.js.map +1 -1
  69. package/_cjs/utils/getAction.js +8 -0
  70. package/_cjs/utils/getAction.js.map +1 -0
  71. package/_cjs/utils/getUserOperationHash.js.map +1 -1
  72. package/_cjs/utils/index.js +7 -1
  73. package/_cjs/utils/index.js.map +1 -1
  74. package/_cjs/utils/observe.js +7 -2
  75. package/_cjs/utils/observe.js.map +1 -1
  76. package/_cjs/utils/signUserOperationHashWithECDSA.js +7 -7
  77. package/_cjs/utils/signUserOperationHashWithECDSA.js.map +1 -1
  78. package/_esm/accounts/index.js +7 -0
  79. package/_esm/accounts/index.js.map +1 -0
  80. package/_esm/accounts/privateKeyToSafeSmartAccount.js +26 -0
  81. package/_esm/accounts/privateKeyToSafeSmartAccount.js.map +1 -0
  82. package/_esm/accounts/privateKeyToSimpleSmartAccount.js +18 -0
  83. package/_esm/accounts/privateKeyToSimpleSmartAccount.js.map +1 -0
  84. package/_esm/accounts/signerToSafeSmartAccount.js +499 -0
  85. package/_esm/accounts/signerToSafeSmartAccount.js.map +1 -0
  86. package/_esm/accounts/signerToSimpleSmartAccount.js +191 -0
  87. package/_esm/accounts/signerToSimpleSmartAccount.js.map +1 -0
  88. package/_esm/accounts/types.js +20 -0
  89. package/_esm/accounts/types.js.map +1 -0
  90. package/_esm/actions/bundler/chainId.js.map +1 -1
  91. package/_esm/actions/bundler/estimateUserOperationGas.js +4 -1
  92. package/_esm/actions/bundler/estimateUserOperationGas.js.map +1 -1
  93. package/_esm/actions/bundler/getUserOperationByHash.js.map +1 -1
  94. package/_esm/actions/bundler/getUserOperationReceipt.js.map +1 -1
  95. package/_esm/actions/bundler/sendUserOperation.js +4 -3
  96. package/_esm/actions/bundler/sendUserOperation.js.map +1 -1
  97. package/_esm/actions/bundler/supportedEntryPoints.js.map +1 -1
  98. package/_esm/actions/bundler/waitForUserOperationReceipt.js +7 -2
  99. package/_esm/actions/bundler/waitForUserOperationReceipt.js.map +1 -1
  100. package/_esm/actions/index.js.map +1 -1
  101. package/_esm/actions/pimlico/getUserOperationGasPrice.js +2 -2
  102. package/_esm/actions/pimlico/getUserOperationGasPrice.js.map +1 -1
  103. package/_esm/actions/pimlico/getUserOperationStatus.js +1 -1
  104. package/_esm/actions/pimlico/getUserOperationStatus.js.map +1 -1
  105. package/_esm/actions/pimlico/sponsorUserOperation.js +4 -1
  106. package/_esm/actions/pimlico/sponsorUserOperation.js.map +1 -1
  107. package/_esm/actions/pimlico.js.map +1 -1
  108. package/_esm/actions/public/getAccountNonce.js +7 -5
  109. package/_esm/actions/public/getAccountNonce.js.map +1 -1
  110. package/_esm/actions/public/getSenderAddress.js +8 -5
  111. package/_esm/actions/public/getSenderAddress.js.map +1 -1
  112. package/_esm/actions/smartAccount/deployContract.js +64 -0
  113. package/_esm/actions/smartAccount/deployContract.js.map +1 -0
  114. package/_esm/actions/smartAccount/prepareUserOperationRequest.js +69 -0
  115. package/_esm/actions/smartAccount/prepareUserOperationRequest.js.map +1 -0
  116. package/_esm/actions/smartAccount/sendTransaction.js +88 -0
  117. package/_esm/actions/smartAccount/sendTransaction.js.map +1 -0
  118. package/_esm/actions/smartAccount/sendTransactions.js +90 -0
  119. package/_esm/actions/smartAccount/sendTransactions.js.map +1 -0
  120. package/_esm/actions/smartAccount/sendUserOperation.js +18 -0
  121. package/_esm/actions/smartAccount/sendUserOperation.js.map +1 -0
  122. package/_esm/actions/smartAccount/signMessage.js +59 -0
  123. package/_esm/actions/smartAccount/signMessage.js.map +1 -0
  124. package/_esm/actions/smartAccount/signTypedData.js +129 -0
  125. package/_esm/actions/smartAccount/signTypedData.js.map +1 -0
  126. package/_esm/actions/smartAccount/writeContract.js +19 -0
  127. package/_esm/actions/smartAccount/writeContract.js.map +1 -0
  128. package/_esm/actions/smartAccount.js +9 -0
  129. package/_esm/actions/smartAccount.js.map +1 -0
  130. package/_esm/actions/stackup/accounts.js +1 -1
  131. package/_esm/actions/stackup/sponsorUserOperation.js +6 -2
  132. package/_esm/actions/stackup/sponsorUserOperation.js.map +1 -1
  133. package/_esm/clients/{bundler.js → createBundlerClient.js} +1 -1
  134. package/_esm/clients/createBundlerClient.js.map +1 -0
  135. package/_esm/clients/createSmartAccountClient.js +38 -0
  136. package/_esm/clients/createSmartAccountClient.js.map +1 -0
  137. package/_esm/clients/decorators/bundler.js.map +1 -1
  138. package/_esm/clients/decorators/pimlico.js +1 -1
  139. package/_esm/clients/decorators/pimlico.js.map +1 -1
  140. package/_esm/clients/decorators/smartAccount.js +29 -0
  141. package/_esm/clients/decorators/smartAccount.js.map +1 -0
  142. package/_esm/clients/decorators/stackup.js.map +1 -1
  143. package/_esm/clients/pimlico.js +1 -1
  144. package/_esm/clients/pimlico.js.map +1 -1
  145. package/_esm/clients/stackup.js +1 -1
  146. package/_esm/clients/stackup.js.map +1 -1
  147. package/_esm/index.js +5 -2
  148. package/_esm/index.js.map +1 -1
  149. package/_esm/utils/deepHexlify.js +6 -4
  150. package/_esm/utils/deepHexlify.js.map +1 -1
  151. package/_esm/utils/getAction.js +6 -0
  152. package/_esm/utils/getAction.js.map +1 -0
  153. package/_esm/utils/getUserOperationHash.js.map +1 -1
  154. package/_esm/utils/index.js +5 -0
  155. package/_esm/utils/index.js.map +1 -1
  156. package/_esm/utils/observe.js +7 -2
  157. package/_esm/utils/observe.js.map +1 -1
  158. package/_esm/utils/signUserOperationHashWithECDSA.js +7 -6
  159. package/_esm/utils/signUserOperationHashWithECDSA.js.map +1 -1
  160. package/_types/accounts/index.d.ts +7 -0
  161. package/_types/accounts/index.d.ts.map +1 -0
  162. package/_types/accounts/privateKeyToSafeSmartAccount.d.ts +26 -0
  163. package/_types/accounts/privateKeyToSafeSmartAccount.d.ts.map +1 -0
  164. package/_types/accounts/privateKeyToSimpleSmartAccount.d.ts +14 -0
  165. package/_types/accounts/privateKeyToSimpleSmartAccount.d.ts.map +1 -0
  166. package/_types/accounts/signerToSafeSmartAccount.d.ts +28 -0
  167. package/_types/accounts/signerToSafeSmartAccount.d.ts.map +1 -0
  168. package/_types/accounts/signerToSimpleSmartAccount.d.ts +15 -0
  169. package/_types/accounts/signerToSimpleSmartAccount.d.ts.map +1 -0
  170. package/_types/accounts/types.d.ts +32 -0
  171. package/_types/accounts/types.d.ts.map +1 -0
  172. package/_types/actions/bundler/chainId.d.ts +3 -2
  173. package/_types/actions/bundler/chainId.d.ts.map +1 -1
  174. package/_types/actions/bundler/estimateUserOperationGas.d.ts +3 -3
  175. package/_types/actions/bundler/estimateUserOperationGas.d.ts.map +1 -1
  176. package/_types/actions/bundler/getUserOperationByHash.d.ts +3 -3
  177. package/_types/actions/bundler/getUserOperationByHash.d.ts.map +1 -1
  178. package/_types/actions/bundler/getUserOperationReceipt.d.ts +3 -3
  179. package/_types/actions/bundler/getUserOperationReceipt.d.ts.map +1 -1
  180. package/_types/actions/bundler/sendUserOperation.d.ts +3 -5
  181. package/_types/actions/bundler/sendUserOperation.d.ts.map +1 -1
  182. package/_types/actions/bundler/supportedEntryPoints.d.ts +3 -3
  183. package/_types/actions/bundler/supportedEntryPoints.d.ts.map +1 -1
  184. package/_types/actions/bundler/waitForUserOperationReceipt.d.ts +2 -3
  185. package/_types/actions/bundler/waitForUserOperationReceipt.d.ts.map +1 -1
  186. package/_types/actions/index.d.ts.map +1 -1
  187. package/_types/actions/pimlico/getUserOperationGasPrice.d.ts +5 -4
  188. package/_types/actions/pimlico/getUserOperationGasPrice.d.ts.map +1 -1
  189. package/_types/actions/pimlico/getUserOperationStatus.d.ts +4 -5
  190. package/_types/actions/pimlico/getUserOperationStatus.d.ts.map +1 -1
  191. package/_types/actions/pimlico/sponsorUserOperation.d.ts +3 -3
  192. package/_types/actions/pimlico/sponsorUserOperation.d.ts.map +1 -1
  193. package/_types/actions/pimlico.d.ts.map +1 -1
  194. package/_types/actions/public/getAccountNonce.d.ts +5 -5
  195. package/_types/actions/public/getAccountNonce.d.ts.map +1 -1
  196. package/_types/actions/public/getSenderAddress.d.ts +3 -4
  197. package/_types/actions/public/getSenderAddress.d.ts.map +1 -1
  198. package/_types/actions/smartAccount/deployContract.d.ts +34 -0
  199. package/_types/actions/smartAccount/deployContract.d.ts.map +1 -0
  200. package/_types/actions/smartAccount/prepareUserOperationRequest.d.ts +20 -0
  201. package/_types/actions/smartAccount/prepareUserOperationRequest.d.ts.map +1 -0
  202. package/_types/actions/smartAccount/sendTransaction.d.ts +52 -0
  203. package/_types/actions/smartAccount/sendTransaction.d.ts.map +1 -0
  204. package/_types/actions/smartAccount/sendTransactions.d.ts +63 -0
  205. package/_types/actions/smartAccount/sendTransactions.d.ts.map +1 -0
  206. package/_types/actions/smartAccount/sendUserOperation.d.ts +10 -0
  207. package/_types/actions/smartAccount/sendUserOperation.d.ts.map +1 -0
  208. package/_types/actions/smartAccount/signMessage.d.ts +50 -0
  209. package/_types/actions/smartAccount/signMessage.d.ts.map +1 -0
  210. package/_types/actions/smartAccount/signTypedData.d.ts +104 -0
  211. package/_types/actions/smartAccount/signTypedData.d.ts.map +1 -0
  212. package/_types/actions/smartAccount/writeContract.d.ts +57 -0
  213. package/_types/actions/smartAccount/writeContract.d.ts.map +1 -0
  214. package/_types/actions/smartAccount.d.ts +9 -0
  215. package/_types/actions/smartAccount.d.ts.map +1 -0
  216. package/_types/actions/stackup/accounts.d.ts +1 -1
  217. package/_types/actions/stackup/sponsorUserOperation.d.ts +1 -1
  218. package/_types/actions/stackup/sponsorUserOperation.d.ts.map +1 -1
  219. package/_types/clients/{bundler.d.ts → createBundlerClient.d.ts} +1 -1
  220. package/_types/clients/createBundlerClient.d.ts.map +1 -0
  221. package/_types/clients/createSmartAccountClient.d.ts +282 -0
  222. package/_types/clients/createSmartAccountClient.d.ts.map +1 -0
  223. package/_types/clients/decorators/bundler.d.ts +1 -1
  224. package/_types/clients/decorators/bundler.d.ts.map +1 -1
  225. package/_types/clients/decorators/pimlico.d.ts +3 -3
  226. package/_types/clients/decorators/pimlico.d.ts.map +1 -1
  227. package/_types/clients/decorators/smartAccount.d.ts +327 -0
  228. package/_types/clients/decorators/smartAccount.d.ts.map +1 -0
  229. package/_types/clients/decorators/stackup.d.ts.map +1 -1
  230. package/_types/clients/pimlico.d.ts +1 -1
  231. package/_types/clients/pimlico.d.ts.map +1 -1
  232. package/_types/clients/stackup.d.ts +1 -1
  233. package/_types/clients/stackup.d.ts.map +1 -1
  234. package/_types/index.d.ts +6 -3
  235. package/_types/index.d.ts.map +1 -1
  236. package/_types/types/bundler.d.ts +4 -1
  237. package/_types/types/bundler.d.ts.map +1 -1
  238. package/_types/types/index.d.ts +20 -0
  239. package/_types/types/index.d.ts.map +1 -1
  240. package/_types/types/pimlico.d.ts.map +1 -1
  241. package/_types/types/stackup.d.ts.map +1 -1
  242. package/_types/utils/deepHexlify.d.ts.map +1 -1
  243. package/_types/utils/getAction.d.ts +3 -0
  244. package/_types/utils/getAction.d.ts.map +1 -0
  245. package/_types/utils/getUserOperationHash.d.ts.map +1 -1
  246. package/_types/utils/index.d.ts +2 -0
  247. package/_types/utils/index.d.ts.map +1 -1
  248. package/_types/utils/observe.d.ts.map +1 -1
  249. package/_types/utils/signUserOperationHashWithECDSA.d.ts +3 -11
  250. package/_types/utils/signUserOperationHashWithECDSA.d.ts.map +1 -1
  251. package/accounts/index.ts +33 -0
  252. package/accounts/privateKeyToSafeSmartAccount.ts +73 -0
  253. package/accounts/privateKeyToSimpleSmartAccount.ts +44 -0
  254. package/accounts/signerToSafeSmartAccount.ts +775 -0
  255. package/accounts/signerToSimpleSmartAccount.ts +267 -0
  256. package/accounts/types.ts +64 -0
  257. package/actions/bundler/chainId.ts +10 -2
  258. package/actions/bundler/estimateUserOperationGas.ts +17 -6
  259. package/actions/bundler/getUserOperationByHash.ts +16 -5
  260. package/actions/bundler/getUserOperationReceipt.ts +17 -4
  261. package/actions/bundler/sendUserOperation.ts +19 -7
  262. package/actions/bundler/supportedEntryPoints.ts +10 -3
  263. package/actions/bundler/waitForUserOperationReceipt.ts +64 -26
  264. package/actions/index.ts +4 -1
  265. package/actions/pimlico/getUserOperationGasPrice.ts +13 -6
  266. package/actions/pimlico/getUserOperationStatus.ts +12 -5
  267. package/actions/pimlico/sponsorUserOperation.ts +20 -7
  268. package/actions/pimlico.ts +8 -2
  269. package/actions/public/getAccountNonce.ts +20 -8
  270. package/actions/public/getSenderAddress.ts +25 -8
  271. package/actions/smartAccount/deployContract.ts +110 -0
  272. package/actions/smartAccount/prepareUserOperationRequest.ts +140 -0
  273. package/actions/smartAccount/sendTransaction.ts +138 -0
  274. package/actions/smartAccount/sendTransactions.ts +141 -0
  275. package/actions/smartAccount/sendUserOperation.ts +70 -0
  276. package/actions/smartAccount/signMessage.ts +79 -0
  277. package/actions/smartAccount/signTypedData.ts +161 -0
  278. package/actions/smartAccount/writeContract.ts +126 -0
  279. package/actions/smartAccount.ts +49 -0
  280. package/actions/stackup/accounts.ts +1 -1
  281. package/actions/stackup/sponsorUserOperation.ts +14 -4
  282. package/clients/{bundler.ts → createBundlerClient.ts} +14 -3
  283. package/clients/createSmartAccountClient.ts +95 -0
  284. package/clients/decorators/bundler.ts +20 -10
  285. package/clients/decorators/pimlico.ts +21 -9
  286. package/clients/decorators/smartAccount.ts +451 -0
  287. package/clients/decorators/stackup.ts +12 -4
  288. package/clients/pimlico.ts +20 -5
  289. package/clients/stackup.ts +17 -4
  290. package/index.ts +20 -3
  291. package/package.json +12 -2
  292. package/types/bundler.ts +4 -1
  293. package/types/index.ts +29 -0
  294. package/types/pimlico.ts +12 -2
  295. package/types/stackup.ts +4 -1
  296. package/utils/deepHexlify.test.ts +13 -7
  297. package/utils/deepHexlify.ts +5 -4
  298. package/utils/getAction.ts +15 -0
  299. package/utils/getUserOperationHash.ts +10 -2
  300. package/utils/index.ts +15 -2
  301. package/utils/observe.ts +18 -5
  302. package/utils/signUserOperationHashWithECDSA.ts +17 -20
  303. package/_cjs/clients/bundler.js.map +0 -1
  304. package/_esm/clients/bundler.js.map +0 -1
  305. package/_types/clients/bundler.d.ts.map +0 -1
  306. package/tsconfig.build.tsbuildinfo +0 -1
@@ -0,0 +1,499 @@
1
+ import { concatHex, encodeFunctionData, encodePacked, getContractAddress, hashMessage, hashTypedData, hexToBigInt, keccak256, toBytes, zeroAddress } from "viem";
2
+ import { toAccount } from "viem/accounts";
3
+ import { getBytecode, getChainId, readContract, signMessage, signTypedData } from "viem/actions";
4
+ import { getAccountNonce } from "../actions/public/getAccountNonce.js";
5
+ import { SignTransactionNotSupportedBySmartAccount } from "./types.js";
6
+ const EIP712_SAFE_OPERATION_TYPE = {
7
+ SafeOp: [
8
+ { type: "address", name: "safe" },
9
+ { type: "bytes", name: "callData" },
10
+ { type: "uint256", name: "nonce" },
11
+ { type: "uint256", name: "preVerificationGas" },
12
+ { type: "uint256", name: "verificationGasLimit" },
13
+ { type: "uint256", name: "callGasLimit" },
14
+ { type: "uint256", name: "maxFeePerGas" },
15
+ { type: "uint256", name: "maxPriorityFeePerGas" },
16
+ { type: "address", name: "entryPoint" }
17
+ ]
18
+ };
19
+ const SAFE_VERSION_TO_ADDRESSES_MAP = {
20
+ "1.4.1": {
21
+ ADD_MODULES_LIB_ADDRESS: "0x191EFDC03615B575922289DC339F4c70aC5C30Af",
22
+ SAFE_4337_MODULE_ADDRESS: "0x39E54Bb2b3Aa444b4B39DEe15De3b7809c36Fc38",
23
+ SAFE_PROXY_FACTORY_ADDRESS: "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67",
24
+ SAFE_SINGLETON_ADDRESS: "0x41675C099F32341bf84BFc5382aF534df5C7461a",
25
+ MULTI_SEND_ADDRESS: "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526",
26
+ MULTI_SEND_CALL_ONLY_ADDRESS: "0x9641d764fc13c8B624c04430C7356C1C7C8102e2"
27
+ }
28
+ };
29
+ const adjustVInSignature = (signingMethod, signature) => {
30
+ const ETHEREUM_V_VALUES = [0, 1, 27, 28];
31
+ const MIN_VALID_V_VALUE_FOR_SAFE_ECDSA = 27;
32
+ let signatureV = parseInt(signature.slice(-2), 16);
33
+ if (!ETHEREUM_V_VALUES.includes(signatureV)) {
34
+ throw new Error("Invalid signature");
35
+ }
36
+ if (signingMethod === "eth_sign") {
37
+ if (signatureV < MIN_VALID_V_VALUE_FOR_SAFE_ECDSA) {
38
+ signatureV += MIN_VALID_V_VALUE_FOR_SAFE_ECDSA;
39
+ }
40
+ signatureV += 4;
41
+ }
42
+ if (signingMethod === "eth_signTypedData") {
43
+ if (signatureV < MIN_VALID_V_VALUE_FOR_SAFE_ECDSA) {
44
+ signatureV += MIN_VALID_V_VALUE_FOR_SAFE_ECDSA;
45
+ }
46
+ }
47
+ return (signature.slice(0, -2) + signatureV.toString(16));
48
+ };
49
+ const generateSafeMessageMessage = (message) => {
50
+ const signableMessage = message;
51
+ if (typeof signableMessage === "string" || signableMessage.raw) {
52
+ return hashMessage(signableMessage);
53
+ }
54
+ return hashTypedData(message);
55
+ };
56
+ const encodeInternalTransaction = (tx) => {
57
+ const encoded = encodePacked(["uint8", "address", "uint256", "uint256", "bytes"], [
58
+ tx.operation,
59
+ tx.to,
60
+ tx.value,
61
+ BigInt(tx.data.slice(2).length / 2),
62
+ tx.data
63
+ ]);
64
+ return encoded.slice(2);
65
+ };
66
+ const encodeMultiSend = (txs) => {
67
+ const data = `0x${txs
68
+ .map((tx) => encodeInternalTransaction(tx))
69
+ .join("")}`;
70
+ return encodeFunctionData({
71
+ abi: [
72
+ {
73
+ inputs: [
74
+ {
75
+ internalType: "bytes",
76
+ name: "transactions",
77
+ type: "bytes"
78
+ }
79
+ ],
80
+ name: "multiSend",
81
+ outputs: [],
82
+ stateMutability: "payable",
83
+ type: "function"
84
+ }
85
+ ],
86
+ functionName: "multiSend",
87
+ args: [data]
88
+ });
89
+ };
90
+ const getInitializerCode = async ({ owner, addModuleLibAddress, safe4337ModuleAddress, multiSendAddress, setupTransactions = [], safeModules = [] }) => {
91
+ const multiSendCallData = encodeMultiSend([
92
+ {
93
+ to: addModuleLibAddress,
94
+ data: encodeFunctionData({
95
+ abi: [
96
+ {
97
+ inputs: [
98
+ {
99
+ internalType: "address[]",
100
+ name: "modules",
101
+ type: "address[]"
102
+ }
103
+ ],
104
+ name: "enableModules",
105
+ outputs: [],
106
+ stateMutability: "nonpayable",
107
+ type: "function"
108
+ }
109
+ ],
110
+ functionName: "enableModules",
111
+ args: [[safe4337ModuleAddress, ...safeModules]]
112
+ }),
113
+ value: 0n,
114
+ operation: 1
115
+ },
116
+ ...setupTransactions.map((tx) => ({ ...tx, operation: 0 }))
117
+ ]);
118
+ return encodeFunctionData({
119
+ abi: [
120
+ {
121
+ inputs: [
122
+ {
123
+ internalType: "address[]",
124
+ name: "_owners",
125
+ type: "address[]"
126
+ },
127
+ {
128
+ internalType: "uint256",
129
+ name: "_threshold",
130
+ type: "uint256"
131
+ },
132
+ {
133
+ internalType: "address",
134
+ name: "to",
135
+ type: "address"
136
+ },
137
+ {
138
+ internalType: "bytes",
139
+ name: "data",
140
+ type: "bytes"
141
+ },
142
+ {
143
+ internalType: "address",
144
+ name: "fallbackHandler",
145
+ type: "address"
146
+ },
147
+ {
148
+ internalType: "address",
149
+ name: "paymentToken",
150
+ type: "address"
151
+ },
152
+ {
153
+ internalType: "uint256",
154
+ name: "payment",
155
+ type: "uint256"
156
+ },
157
+ {
158
+ internalType: "address payable",
159
+ name: "paymentReceiver",
160
+ type: "address"
161
+ }
162
+ ],
163
+ name: "setup",
164
+ outputs: [],
165
+ stateMutability: "nonpayable",
166
+ type: "function"
167
+ }
168
+ ],
169
+ functionName: "setup",
170
+ args: [
171
+ [owner],
172
+ 1n,
173
+ multiSendAddress,
174
+ multiSendCallData,
175
+ safe4337ModuleAddress,
176
+ zeroAddress,
177
+ 0n,
178
+ zeroAddress
179
+ ]
180
+ });
181
+ };
182
+ const getAccountInitCode = async ({ owner, addModuleLibAddress, safe4337ModuleAddress, safeProxyFactoryAddress, safeSingletonAddress, multiSendAddress, saltNonce = 0n, setupTransactions = [], safeModules = [] }) => {
183
+ if (!owner)
184
+ throw new Error("Owner account not found");
185
+ const initializer = await getInitializerCode({
186
+ owner,
187
+ addModuleLibAddress,
188
+ safe4337ModuleAddress,
189
+ multiSendAddress,
190
+ setupTransactions,
191
+ safeModules
192
+ });
193
+ const initCodeCallData = encodeFunctionData({
194
+ abi: [
195
+ {
196
+ inputs: [
197
+ {
198
+ internalType: "address",
199
+ name: "_singleton",
200
+ type: "address"
201
+ },
202
+ {
203
+ internalType: "bytes",
204
+ name: "initializer",
205
+ type: "bytes"
206
+ },
207
+ {
208
+ internalType: "uint256",
209
+ name: "saltNonce",
210
+ type: "uint256"
211
+ }
212
+ ],
213
+ name: "createProxyWithNonce",
214
+ outputs: [
215
+ {
216
+ internalType: "contract SafeProxy",
217
+ name: "proxy",
218
+ type: "address"
219
+ }
220
+ ],
221
+ stateMutability: "nonpayable",
222
+ type: "function"
223
+ }
224
+ ],
225
+ functionName: "createProxyWithNonce",
226
+ args: [safeSingletonAddress, initializer, saltNonce]
227
+ });
228
+ return concatHex([safeProxyFactoryAddress, initCodeCallData]);
229
+ };
230
+ const getAccountAddress = async ({ client, owner, addModuleLibAddress, safe4337ModuleAddress, safeProxyFactoryAddress, safeSingletonAddress, multiSendAddress, setupTransactions = [], safeModules = [], saltNonce = 0n }) => {
231
+ const proxyCreationCode = await readContract(client, {
232
+ abi: [
233
+ {
234
+ inputs: [],
235
+ name: "proxyCreationCode",
236
+ outputs: [
237
+ {
238
+ internalType: "bytes",
239
+ name: "",
240
+ type: "bytes"
241
+ }
242
+ ],
243
+ stateMutability: "pure",
244
+ type: "function"
245
+ }
246
+ ],
247
+ address: safeProxyFactoryAddress,
248
+ functionName: "proxyCreationCode"
249
+ });
250
+ const deploymentCode = encodePacked(["bytes", "uint256"], [proxyCreationCode, hexToBigInt(safeSingletonAddress)]);
251
+ const initializer = await getInitializerCode({
252
+ owner,
253
+ addModuleLibAddress,
254
+ safe4337ModuleAddress,
255
+ multiSendAddress,
256
+ setupTransactions,
257
+ safeModules
258
+ });
259
+ const salt = keccak256(encodePacked(["bytes32", "uint256"], [keccak256(encodePacked(["bytes"], [initializer])), saltNonce]));
260
+ return getContractAddress({
261
+ from: safeProxyFactoryAddress,
262
+ salt,
263
+ bytecode: deploymentCode,
264
+ opcode: "CREATE2"
265
+ });
266
+ };
267
+ const getDefaultAddresses = (safeVersion, { addModuleLibAddress: _addModuleLibAddress, safe4337ModuleAddress: _safe4337ModuleAddress, safeProxyFactoryAddress: _safeProxyFactoryAddress, safeSingletonAddress: _safeSingletonAddress, multiSendAddress: _multiSendAddress, multiSendCallOnlyAddress: _multiSendCallOnlyAddress }) => {
268
+ const addModuleLibAddress = _addModuleLibAddress ??
269
+ SAFE_VERSION_TO_ADDRESSES_MAP[safeVersion].ADD_MODULES_LIB_ADDRESS;
270
+ const safe4337ModuleAddress = _safe4337ModuleAddress ??
271
+ SAFE_VERSION_TO_ADDRESSES_MAP[safeVersion].SAFE_4337_MODULE_ADDRESS;
272
+ const safeProxyFactoryAddress = _safeProxyFactoryAddress ??
273
+ SAFE_VERSION_TO_ADDRESSES_MAP[safeVersion].SAFE_PROXY_FACTORY_ADDRESS;
274
+ const safeSingletonAddress = _safeSingletonAddress ??
275
+ SAFE_VERSION_TO_ADDRESSES_MAP[safeVersion].SAFE_SINGLETON_ADDRESS;
276
+ const multiSendAddress = _multiSendAddress ??
277
+ SAFE_VERSION_TO_ADDRESSES_MAP[safeVersion].MULTI_SEND_ADDRESS;
278
+ const multiSendCallOnlyAddress = _multiSendCallOnlyAddress ??
279
+ SAFE_VERSION_TO_ADDRESSES_MAP[safeVersion].MULTI_SEND_CALL_ONLY_ADDRESS;
280
+ return {
281
+ addModuleLibAddress,
282
+ safe4337ModuleAddress,
283
+ safeProxyFactoryAddress,
284
+ safeSingletonAddress,
285
+ multiSendAddress,
286
+ multiSendCallOnlyAddress
287
+ };
288
+ };
289
+ /**
290
+ * @description Creates an Simple Account from a private key.
291
+ *
292
+ * @returns A Private Key Simple Account.
293
+ */
294
+ export async function signerToSafeSmartAccount(client, { signer, safeVersion, entryPoint, addModuleLibAddress: _addModuleLibAddress, safe4337ModuleAddress: _safe4337ModuleAddress, safeProxyFactoryAddress: _safeProxyFactoryAddress, safeSingletonAddress: _safeSingletonAddress, multiSendAddress: _multiSendAddress, multiSendCallOnlyAddress: _multiSendCallOnlyAddress, saltNonce = 0n, safeModules = [], setupTransactions = [] }) {
295
+ const chainId = await getChainId(client);
296
+ const viemSigner = signer.type === "local"
297
+ ? {
298
+ ...signer,
299
+ signTransaction: (_, __) => {
300
+ throw new SignTransactionNotSupportedBySmartAccount();
301
+ }
302
+ }
303
+ : signer;
304
+ const { addModuleLibAddress, safe4337ModuleAddress, safeProxyFactoryAddress, safeSingletonAddress, multiSendAddress, multiSendCallOnlyAddress } = getDefaultAddresses(safeVersion, {
305
+ addModuleLibAddress: _addModuleLibAddress,
306
+ safe4337ModuleAddress: _safe4337ModuleAddress,
307
+ safeProxyFactoryAddress: _safeProxyFactoryAddress,
308
+ safeSingletonAddress: _safeSingletonAddress,
309
+ multiSendAddress: _multiSendAddress,
310
+ multiSendCallOnlyAddress: _multiSendCallOnlyAddress
311
+ });
312
+ const accountAddress = await getAccountAddress({
313
+ client,
314
+ owner: viemSigner.address,
315
+ addModuleLibAddress,
316
+ safe4337ModuleAddress,
317
+ safeProxyFactoryAddress,
318
+ safeSingletonAddress,
319
+ multiSendAddress,
320
+ saltNonce,
321
+ setupTransactions,
322
+ safeModules
323
+ });
324
+ if (!accountAddress)
325
+ throw new Error("Account address not found");
326
+ const account = toAccount({
327
+ address: accountAddress,
328
+ async signMessage({ message }) {
329
+ const messageHash = hashTypedData({
330
+ domain: {
331
+ chainId: chainId,
332
+ verifyingContract: accountAddress
333
+ },
334
+ types: {
335
+ SafeMessage: [{ name: "message", type: "bytes" }]
336
+ },
337
+ primaryType: "SafeMessage",
338
+ message: {
339
+ message: generateSafeMessageMessage(message)
340
+ }
341
+ });
342
+ return adjustVInSignature("eth_sign", await signMessage(client, {
343
+ account: viemSigner,
344
+ message: {
345
+ raw: toBytes(messageHash)
346
+ }
347
+ }));
348
+ },
349
+ async signTransaction(_, __) {
350
+ throw new SignTransactionNotSupportedBySmartAccount();
351
+ },
352
+ async signTypedData(typedData) {
353
+ return adjustVInSignature("eth_signTypedData", await signTypedData(client, {
354
+ account: viemSigner,
355
+ domain: {
356
+ chainId: chainId,
357
+ verifyingContract: accountAddress
358
+ },
359
+ types: {
360
+ SafeMessage: [{ name: "message", type: "bytes" }]
361
+ },
362
+ primaryType: "SafeMessage",
363
+ message: {
364
+ message: generateSafeMessageMessage(typedData)
365
+ }
366
+ }));
367
+ }
368
+ });
369
+ return {
370
+ ...account,
371
+ client: client,
372
+ publicKey: accountAddress,
373
+ entryPoint: entryPoint,
374
+ source: "SafeSmartAccount",
375
+ async getNonce() {
376
+ return getAccountNonce(client, {
377
+ sender: accountAddress,
378
+ entryPoint: entryPoint
379
+ });
380
+ },
381
+ async signUserOperation(userOperation) {
382
+ // const timestamps = 0n
383
+ const signatures = [
384
+ {
385
+ signer: viemSigner.address,
386
+ data: await signTypedData(client, {
387
+ account: viemSigner,
388
+ domain: {
389
+ chainId: chainId,
390
+ verifyingContract: safe4337ModuleAddress
391
+ },
392
+ types: EIP712_SAFE_OPERATION_TYPE,
393
+ primaryType: "SafeOp",
394
+ message: {
395
+ safe: accountAddress,
396
+ callData: userOperation.callData,
397
+ nonce: userOperation.nonce,
398
+ preVerificationGas: userOperation.preVerificationGas,
399
+ verificationGasLimit: userOperation.verificationGasLimit,
400
+ callGasLimit: userOperation.callGasLimit,
401
+ maxFeePerGas: userOperation.maxFeePerGas,
402
+ maxPriorityFeePerGas: userOperation.maxPriorityFeePerGas,
403
+ // signatureTimestamps: timestamps,
404
+ entryPoint: entryPoint
405
+ }
406
+ })
407
+ }
408
+ ];
409
+ signatures.sort((left, right) => left.signer
410
+ .toLowerCase()
411
+ .localeCompare(right.signer.toLowerCase()));
412
+ let signatureBytes = "0x";
413
+ for (const sig of signatures) {
414
+ signatureBytes += sig.data.slice(2);
415
+ }
416
+ // const signatureWithTimestamps = encodePacked(
417
+ // ["uint96", "bytes"],
418
+ // [timestamps, signatureBytes]
419
+ // )
420
+ return signatureBytes;
421
+ },
422
+ async getInitCode() {
423
+ const contractCode = await getBytecode(client, {
424
+ address: accountAddress
425
+ });
426
+ if ((contractCode?.length ?? 0) > 2)
427
+ return "0x";
428
+ return getAccountInitCode({
429
+ owner: viemSigner.address,
430
+ addModuleLibAddress,
431
+ safe4337ModuleAddress,
432
+ safeProxyFactoryAddress,
433
+ safeSingletonAddress,
434
+ multiSendAddress,
435
+ saltNonce,
436
+ setupTransactions,
437
+ safeModules
438
+ });
439
+ },
440
+ async encodeDeployCallData(_) {
441
+ throw new Error("Safe account doesn't support account deployment");
442
+ },
443
+ async encodeCallData(args) {
444
+ let to;
445
+ let value;
446
+ let data;
447
+ if (Array.isArray(args)) {
448
+ const argsArray = args;
449
+ to = multiSendCallOnlyAddress;
450
+ value = 0n;
451
+ data = encodeMultiSend(argsArray.map((tx) => ({ ...tx, operation: 0 })));
452
+ }
453
+ else {
454
+ const singleTransaction = args;
455
+ to = singleTransaction.to;
456
+ data = singleTransaction.data;
457
+ value = singleTransaction.value;
458
+ }
459
+ return encodeFunctionData({
460
+ abi: [
461
+ {
462
+ inputs: [
463
+ {
464
+ internalType: "address",
465
+ name: "to",
466
+ type: "address"
467
+ },
468
+ {
469
+ internalType: "uint256",
470
+ name: "value",
471
+ type: "uint256"
472
+ },
473
+ {
474
+ internalType: "bytes",
475
+ name: "data",
476
+ type: "bytes"
477
+ },
478
+ {
479
+ internalType: "uint8",
480
+ name: "operation",
481
+ type: "uint8"
482
+ }
483
+ ],
484
+ name: "executeUserOp",
485
+ outputs: [],
486
+ stateMutability: "nonpayable",
487
+ type: "function"
488
+ }
489
+ ],
490
+ functionName: "executeUserOp",
491
+ args: [to, value, data, 0]
492
+ });
493
+ },
494
+ async getDummySignature() {
495
+ return "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
496
+ }
497
+ };
498
+ }
499
+ //# sourceMappingURL=signerToSafeSmartAccount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signerToSafeSmartAccount.js","sourceRoot":"","sources":["../../accounts/signerToSafeSmartAccount.ts"],"names":[],"mappings":"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"}