@alchemy/smart-accounts 0.0.0-alpha.9 → 5.0.0-beta.10

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 (187) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +34 -0
  3. package/dist/esm/index.d.ts +5 -10
  4. package/dist/esm/index.js +5 -7
  5. package/dist/esm/index.js.map +1 -1
  6. package/dist/esm/light-account/accounts/account.d.ts +7 -3
  7. package/dist/esm/light-account/accounts/account.js +20 -10
  8. package/dist/esm/light-account/accounts/account.js.map +1 -1
  9. package/dist/esm/light-account/accounts/base.js +50 -24
  10. package/dist/esm/light-account/accounts/base.js.map +1 -1
  11. package/dist/esm/light-account/accounts/calldataCodec.d.ts +17 -0
  12. package/dist/esm/light-account/accounts/calldataCodec.js +20 -2
  13. package/dist/esm/light-account/accounts/calldataCodec.js.map +1 -1
  14. package/dist/esm/light-account/accounts/multi-owner-account.d.ts +6 -2
  15. package/dist/esm/light-account/accounts/multi-owner-account.js +14 -6
  16. package/dist/esm/light-account/accounts/multi-owner-account.js.map +1 -1
  17. package/dist/esm/light-account/lightAccountStaticImpl.d.ts +3 -1
  18. package/dist/esm/light-account/lightAccountStaticImpl.js +57 -7
  19. package/dist/esm/light-account/lightAccountStaticImpl.js.map +1 -1
  20. package/dist/esm/light-account/predictAddress.d.ts +40 -2
  21. package/dist/esm/light-account/predictAddress.js +83 -3
  22. package/dist/esm/light-account/predictAddress.js.map +1 -1
  23. package/dist/esm/light-account/registry.d.ts +3410 -0
  24. package/dist/esm/light-account/registry.js +33 -1
  25. package/dist/esm/light-account/registry.js.map +1 -1
  26. package/dist/esm/light-account/utils.js +0 -5
  27. package/dist/esm/light-account/utils.js.map +1 -1
  28. package/dist/esm/logger.d.ts +1 -1
  29. package/dist/esm/logger.js +1 -1
  30. package/dist/esm/logger.js.map +1 -1
  31. package/dist/esm/ma-v1/accounts/base.js +6 -50
  32. package/dist/esm/ma-v1/accounts/base.js.map +1 -1
  33. package/dist/esm/ma-v1/accounts/calldataCodec.d.ts +20 -0
  34. package/dist/esm/ma-v1/accounts/calldataCodec.js +69 -0
  35. package/dist/esm/ma-v1/accounts/calldataCodec.js.map +1 -0
  36. package/dist/esm/ma-v1/accounts/multi-owner-account.d.ts +6 -2
  37. package/dist/esm/ma-v1/accounts/multi-owner-account.js +18 -7
  38. package/dist/esm/ma-v1/accounts/multi-owner-account.js.map +1 -1
  39. package/dist/esm/ma-v1/mav1StaticImpl.d.ts +0 -2
  40. package/dist/esm/ma-v1/mav1StaticImpl.js +0 -2
  41. package/dist/esm/ma-v1/mav1StaticImpl.js.map +1 -1
  42. package/dist/esm/ma-v1/predictAddress.d.ts +20 -1
  43. package/dist/esm/ma-v1/predictAddress.js +38 -2
  44. package/dist/esm/ma-v1/predictAddress.js.map +1 -1
  45. package/dist/esm/ma-v2/accounts/account.d.ts +8 -5
  46. package/dist/esm/ma-v2/accounts/account.js +24 -43
  47. package/dist/esm/ma-v2/accounts/account.js.map +1 -1
  48. package/dist/esm/ma-v2/accounts/base.d.ts +2 -2
  49. package/dist/esm/ma-v2/accounts/base.js +19 -113
  50. package/dist/esm/ma-v2/accounts/base.js.map +1 -1
  51. package/dist/esm/ma-v2/accounts/calldataCodec.d.ts +20 -0
  52. package/dist/esm/ma-v2/accounts/calldataCodec.js +77 -0
  53. package/dist/esm/ma-v2/accounts/calldataCodec.js.map +1 -0
  54. package/dist/esm/ma-v2/decorators/installValidation.d.ts +8 -20
  55. package/dist/esm/ma-v2/decorators/installValidation.js +7 -58
  56. package/dist/esm/ma-v2/decorators/installValidation.js.map +1 -1
  57. package/dist/esm/ma-v2/mav2StaticImpl.d.ts +1 -19
  58. package/dist/esm/ma-v2/mav2StaticImpl.js +0 -37
  59. package/dist/esm/ma-v2/mav2StaticImpl.js.map +1 -1
  60. package/dist/esm/ma-v2/modules/time-range-module/module.js +3 -2
  61. package/dist/esm/ma-v2/modules/time-range-module/module.js.map +1 -1
  62. package/dist/esm/ma-v2/predictAddress.d.ts +22 -6
  63. package/dist/esm/ma-v2/predictAddress.js +46 -12
  64. package/dist/esm/ma-v2/predictAddress.js.map +1 -1
  65. package/dist/esm/ma-v2/utils/account.d.ts +0 -3
  66. package/dist/esm/ma-v2/utils/account.js +0 -5
  67. package/dist/esm/ma-v2/utils/account.js.map +1 -1
  68. package/dist/esm/ma-v2/utils/signature.d.ts +1 -16
  69. package/dist/esm/ma-v2/utils/signature.js +1 -38
  70. package/dist/esm/ma-v2/utils/signature.js.map +1 -1
  71. package/dist/esm/utils.d.ts +24 -11
  72. package/dist/esm/utils.js +67 -21
  73. package/dist/esm/utils.js.map +1 -1
  74. package/dist/esm/version.d.ts +1 -1
  75. package/dist/esm/version.js +1 -1
  76. package/dist/esm/version.js.map +1 -1
  77. package/dist/types/index.d.ts +5 -10
  78. package/dist/types/index.d.ts.map +1 -1
  79. package/dist/types/light-account/accounts/account.d.ts +7 -3
  80. package/dist/types/light-account/accounts/account.d.ts.map +1 -1
  81. package/dist/types/light-account/accounts/base.d.ts.map +1 -1
  82. package/dist/types/light-account/accounts/calldataCodec.d.ts +17 -0
  83. package/dist/types/light-account/accounts/calldataCodec.d.ts.map +1 -1
  84. package/dist/types/light-account/accounts/multi-owner-account.d.ts +6 -2
  85. package/dist/types/light-account/accounts/multi-owner-account.d.ts.map +1 -1
  86. package/dist/types/light-account/lightAccountStaticImpl.d.ts +3 -1
  87. package/dist/types/light-account/lightAccountStaticImpl.d.ts.map +1 -1
  88. package/dist/types/light-account/predictAddress.d.ts +40 -2
  89. package/dist/types/light-account/predictAddress.d.ts.map +1 -1
  90. package/dist/types/light-account/registry.d.ts +3410 -0
  91. package/dist/types/light-account/registry.d.ts.map +1 -1
  92. package/dist/types/light-account/utils.d.ts.map +1 -1
  93. package/dist/types/logger.d.ts +1 -1
  94. package/dist/types/logger.d.ts.map +1 -1
  95. package/dist/types/ma-v1/accounts/base.d.ts.map +1 -1
  96. package/dist/types/ma-v1/accounts/calldataCodec.d.ts +21 -0
  97. package/dist/types/ma-v1/accounts/calldataCodec.d.ts.map +1 -0
  98. package/dist/types/ma-v1/accounts/multi-owner-account.d.ts +6 -2
  99. package/dist/types/ma-v1/accounts/multi-owner-account.d.ts.map +1 -1
  100. package/dist/types/ma-v1/mav1StaticImpl.d.ts +0 -2
  101. package/dist/types/ma-v1/mav1StaticImpl.d.ts.map +1 -1
  102. package/dist/types/ma-v1/predictAddress.d.ts +20 -1
  103. package/dist/types/ma-v1/predictAddress.d.ts.map +1 -1
  104. package/dist/types/ma-v2/accounts/account.d.ts +8 -5
  105. package/dist/types/ma-v2/accounts/account.d.ts.map +1 -1
  106. package/dist/types/ma-v2/accounts/base.d.ts +2 -2
  107. package/dist/types/ma-v2/accounts/base.d.ts.map +1 -1
  108. package/dist/types/ma-v2/accounts/calldataCodec.d.ts +21 -0
  109. package/dist/types/ma-v2/accounts/calldataCodec.d.ts.map +1 -0
  110. package/dist/types/ma-v2/decorators/installValidation.d.ts +8 -20
  111. package/dist/types/ma-v2/decorators/installValidation.d.ts.map +1 -1
  112. package/dist/types/ma-v2/mav2StaticImpl.d.ts +1 -19
  113. package/dist/types/ma-v2/mav2StaticImpl.d.ts.map +1 -1
  114. package/dist/types/ma-v2/modules/time-range-module/module.d.ts.map +1 -1
  115. package/dist/types/ma-v2/predictAddress.d.ts +22 -6
  116. package/dist/types/ma-v2/predictAddress.d.ts.map +1 -1
  117. package/dist/types/ma-v2/utils/account.d.ts +0 -3
  118. package/dist/types/ma-v2/utils/account.d.ts.map +1 -1
  119. package/dist/types/ma-v2/utils/signature.d.ts +1 -16
  120. package/dist/types/ma-v2/utils/signature.d.ts.map +1 -1
  121. package/dist/types/utils.d.ts +24 -11
  122. package/dist/types/utils.d.ts.map +1 -1
  123. package/dist/types/version.d.ts +1 -1
  124. package/dist/types/version.d.ts.map +1 -1
  125. package/package.json +10 -9
  126. package/src/index.ts +15 -19
  127. package/src/light-account/accounts/account.ts +30 -16
  128. package/src/light-account/accounts/base.ts +62 -24
  129. package/src/light-account/accounts/calldataCodec.ts +20 -2
  130. package/src/light-account/accounts/multi-owner-account.ts +22 -9
  131. package/src/light-account/lightAccountStaticImpl.ts +84 -11
  132. package/src/light-account/predictAddress.ts +124 -3
  133. package/src/light-account/registry.ts +44 -0
  134. package/src/light-account/utils.ts +0 -6
  135. package/src/logger.ts +2 -2
  136. package/src/ma-v1/accounts/base.ts +4 -55
  137. package/src/ma-v1/accounts/calldataCodec.ts +80 -0
  138. package/src/ma-v1/accounts/multi-owner-account.ts +26 -11
  139. package/src/ma-v1/mav1StaticImpl.ts +0 -2
  140. package/src/ma-v1/predictAddress.ts +60 -3
  141. package/src/ma-v2/accounts/account.ts +41 -54
  142. package/src/ma-v2/accounts/base.ts +17 -152
  143. package/src/ma-v2/accounts/calldataCodec.ts +89 -0
  144. package/src/ma-v2/decorators/installValidation.ts +8 -83
  145. package/src/ma-v2/mav2StaticImpl.ts +1 -56
  146. package/src/ma-v2/modules/time-range-module/module.ts +3 -2
  147. package/src/ma-v2/predictAddress.ts +68 -30
  148. package/src/ma-v2/utils/account.ts +0 -5
  149. package/src/ma-v2/utils/signature.ts +2 -57
  150. package/src/utils.ts +111 -27
  151. package/src/version.ts +1 -1
  152. package/dist/esm/light-account/decorators/multiOwner.d.ts +0 -17
  153. package/dist/esm/light-account/decorators/multiOwner.js +0 -39
  154. package/dist/esm/light-account/decorators/multiOwner.js.map +0 -1
  155. package/dist/esm/light-account/decorators/singleOwner.d.ts +0 -16
  156. package/dist/esm/light-account/decorators/singleOwner.js +0 -35
  157. package/dist/esm/light-account/decorators/singleOwner.js.map +0 -1
  158. package/dist/esm/ma-v1/decorators/multiOwner.d.ts +0 -17
  159. package/dist/esm/ma-v1/decorators/multiOwner.js +0 -39
  160. package/dist/esm/ma-v1/decorators/multiOwner.js.map +0 -1
  161. package/dist/esm/ma-v2/abis/webAuthnFactoryAbi.d.ts +0 -330
  162. package/dist/esm/ma-v2/abis/webAuthnFactoryAbi.js +0 -260
  163. package/dist/esm/ma-v2/abis/webAuthnFactoryAbi.js.map +0 -1
  164. package/dist/esm/ma-v2/modules/webauthn-validation/abis/webauthnValidationAbi.d.ts +0 -287
  165. package/dist/esm/ma-v2/modules/webauthn-validation/abis/webauthnValidationAbi.js +0 -374
  166. package/dist/esm/ma-v2/modules/webauthn-validation/abis/webauthnValidationAbi.js.map +0 -1
  167. package/dist/esm/ma-v2/modules/webauthn-validation/module.d.ts +0 -11
  168. package/dist/esm/ma-v2/modules/webauthn-validation/module.js +0 -16
  169. package/dist/esm/ma-v2/modules/webauthn-validation/module.js.map +0 -1
  170. package/dist/types/light-account/decorators/multiOwner.d.ts +0 -18
  171. package/dist/types/light-account/decorators/multiOwner.d.ts.map +0 -1
  172. package/dist/types/light-account/decorators/singleOwner.d.ts +0 -17
  173. package/dist/types/light-account/decorators/singleOwner.d.ts.map +0 -1
  174. package/dist/types/ma-v1/decorators/multiOwner.d.ts +0 -18
  175. package/dist/types/ma-v1/decorators/multiOwner.d.ts.map +0 -1
  176. package/dist/types/ma-v2/abis/webAuthnFactoryAbi.d.ts +0 -331
  177. package/dist/types/ma-v2/abis/webAuthnFactoryAbi.d.ts.map +0 -1
  178. package/dist/types/ma-v2/modules/webauthn-validation/abis/webauthnValidationAbi.d.ts +0 -288
  179. package/dist/types/ma-v2/modules/webauthn-validation/abis/webauthnValidationAbi.d.ts.map +0 -1
  180. package/dist/types/ma-v2/modules/webauthn-validation/module.d.ts +0 -12
  181. package/dist/types/ma-v2/modules/webauthn-validation/module.d.ts.map +0 -1
  182. package/src/light-account/decorators/multiOwner.ts +0 -72
  183. package/src/light-account/decorators/singleOwner.ts +0 -63
  184. package/src/ma-v1/decorators/multiOwner.ts +0 -72
  185. package/src/ma-v2/abis/webAuthnFactoryAbi.ts +0 -259
  186. package/src/ma-v2/modules/webauthn-validation/abis/webauthnValidationAbi.ts +0 -373
  187. package/src/ma-v2/modules/webauthn-validation/module.ts +0 -28
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023 Alchemy Insights, Inc.
3
+ Copyright (c) 2026 Alchemy Insights, Inc.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # @alchemy/smart-accounts
2
+
3
+ Viem-compatible smart account implementations for Alchemy's smart contract accounts. Supports LightAccount, Modular Account v1, and Modular Account v2 with EIP-7702.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @alchemy/smart-accounts @alchemy/common viem
9
+ ```
10
+
11
+ ## Key Exports
12
+
13
+ ### LightAccount
14
+
15
+ - **`toLightAccount`** - Single-owner LightAccount
16
+ - **`toMultiOwnerLightAccount`** - Multi-owner variant
17
+ - **`predictLightAccountAddress`** / **`predictMultiOwnerLightAccountAddress`** - Counterfactual address prediction
18
+
19
+ ### Modular Account v1 (ERC-6900)
20
+
21
+ - **`toMultiOwnerModularAccountV1`** - Account constructor
22
+ - **`predictMultiOwnerModularAccountV1Address`** - Address prediction
23
+
24
+ ### Modular Account v2
25
+
26
+ - **`toModularAccountV2`** - Account constructor with EIP-7702 support
27
+ - **`deferralActions`** / **`installValidationActions`** - Client decorators
28
+ - **Modules** - `AllowlistModule`, `NativeTokenLimitModule`, `PaymasterGuardModule`, `SingleSignerValidationModule`, `TimeRangeModule`
29
+ - **`PermissionBuilder`** - Fluent builder for session key permissions
30
+ - **Signature utilities** - `packUOSignature`, `pack1271Signature`, `toReplaySafeTypedData`
31
+
32
+ ## License
33
+
34
+ MIT
@@ -1,45 +1,40 @@
1
1
  export type * from "./types.js";
2
- export { chainHas7212 } from "./utils.js";
3
2
  export type * from "./light-account/accounts/account.js";
4
3
  export { toLightAccount } from "./light-account/accounts/account.js";
5
4
  export type * from "./light-account/accounts/multi-owner-account.js";
6
5
  export { toMultiOwnerLightAccount } from "./light-account/accounts/multi-owner-account.js";
7
- export type * from "./light-account/decorators/singleOwner.js";
8
- export { singleOwnerLightAccountActions } from "./light-account/decorators/singleOwner.js";
9
- export type * from "./light-account/decorators/multiOwner.js";
10
- export { multiOwnerLightAccountActions } from "./light-account/decorators/multiOwner.js";
11
6
  export type * from "./light-account/predictAddress.js";
12
7
  export { predictLightAccountAddress, predictMultiOwnerLightAccountAddress, } from "./light-account/predictAddress.js";
13
8
  export { AccountVersionRegistry } from "./light-account/registry.js";
14
9
  export type * from "./light-account/registry.js";
15
10
  export { defaultLightAccountVersion, getLightAccountImplAddress, LightAccountUnsupported1271Factories, LightAccountUnsupported1271Impls, } from "./light-account/utils.js";
11
+ export { encodeCallsLA, decodeCallsLA, } from "./light-account/accounts/calldataCodec.js";
16
12
  export { lightAccountStaticImplV1_0_1, lightAccountStaticImplV1_0_2, lightAccountStaticImplV1_1_0, lightAccountStaticImplV2_0_0, multiOwnerLightAccountStaticImplV2_0_0, } from "./light-account/lightAccountStaticImpl.js";
17
13
  export type * from "./ma-v1/accounts/base.js";
18
14
  export { toModularAccountV1Base } from "./ma-v1/accounts/base.js";
19
15
  export type * from "./ma-v1/accounts/multi-owner-account.js";
20
16
  export { toMultiOwnerModularAccountV1 } from "./ma-v1/accounts/multi-owner-account.js";
21
- export type * from "./ma-v1/decorators/multiOwner.js";
22
- export { multiOwnerModularAccountV1Actions } from "./ma-v1/decorators/multiOwner.js";
23
17
  export type * from "./ma-v1/predictAddress.js";
24
18
  export { predictMultiOwnerModularAccountV1Address } from "./ma-v1/predictAddress.js";
25
19
  export { multiOwnerModularAccountStaticImpl } from "./ma-v1/mav1StaticImpl.js";
26
20
  export { DefaultMaV1Address, DefaultMaV1PluginAddress, } from "./ma-v1/account.js";
21
+ export { encodeCallsMAv1, decodeCallsMAv1, } from "./ma-v1/accounts/calldataCodec.js";
27
22
  export type * from "./ma-v2/accounts/account.js";
28
23
  export { toModularAccountV2 } from "./ma-v2/accounts/account.js";
29
24
  export type * from "./ma-v2/accounts/base.js";
30
25
  export { toModularAccountV2Base } from "./ma-v2/accounts/base.js";
26
+ export { encodeCallsMAv2, decodeCallsMAv2, } from "./ma-v2/accounts/calldataCodec.js";
31
27
  export type * from "./ma-v2/decorators/deferralActions.js";
32
28
  export { deferralActions } from "./ma-v2/decorators/deferralActions.js";
33
29
  export type * from "./ma-v2/decorators/installValidation.js";
34
30
  export { installValidationActions } from "./ma-v2/decorators/installValidation.js";
35
- export { semiModularAccountV2StaticImpl, semiModularAccount7702StaticImpl, webAuthnModularAccountV2StaticImpl, } from "./ma-v2/mav2StaticImpl.js";
31
+ export { semiModularAccountV2StaticImpl, semiModularAccount7702StaticImpl, } from "./ma-v2/mav2StaticImpl.js";
36
32
  export type * from "./ma-v2/mav2StaticImpl.js";
37
33
  export { AllowlistModule } from "./ma-v2/modules/allowlist-module/module.js";
38
34
  export { NativeTokenLimitModule } from "./ma-v2/modules/native-token-limit-module/module.js";
39
35
  export { PaymasterGuardModule } from "./ma-v2/modules/paymaster-guard-module/module.js";
40
36
  export { SingleSignerValidationModule } from "./ma-v2/modules/single-signer-validation/module.js";
41
37
  export { TimeRangeModule } from "./ma-v2/modules/time-range-module/module.js";
42
- export { WebAuthnValidationModule } from "./ma-v2/modules/webauthn-validation/module.js";
43
38
  export type * from "./ma-v2/permissionBuilder.js";
44
39
  export { PermissionBuilder, PermissionType, } from "./ma-v2/permissionBuilder.js";
45
40
  export type * from "./ma-v2/predictAddress.js";
@@ -52,7 +47,7 @@ export { parseDeferredAction, buildDeferredActionDigest, } from "./ma-v2/utils/d
52
47
  export type * from "./ma-v2/utils/hooks.js";
53
48
  export { serializeValidationConfig, serializeHookConfig, } from "./ma-v2/utils/hooks.js";
54
49
  export type * from "./ma-v2/utils/signature.js";
55
- export { packUOSignature, pack1271Signature, toReplaySafeTypedData, toWebAuthnSignature, WEBAUTHN_DUMMY_SIGNATURE, } from "./ma-v2/utils/signature.js";
50
+ export { packUOSignature, pack1271Signature, toReplaySafeTypedData, } from "./ma-v2/utils/signature.js";
56
51
  export { EntityIdOverrideError } from "./errors/EntityIdOverrideError.js";
57
52
  export { InvalidDeferredActionNonceError } from "./errors/InvalidDeferredActionNonceError.js";
58
53
  export { InvalidEntityIdError } from "./errors/InvalidEntityIdError.js";
package/dist/esm/index.js CHANGED
@@ -1,36 +1,34 @@
1
- export { chainHas7212 } from "./utils.js";
2
1
  export { toLightAccount } from "./light-account/accounts/account.js";
3
2
  export { toMultiOwnerLightAccount } from "./light-account/accounts/multi-owner-account.js";
4
- export { singleOwnerLightAccountActions } from "./light-account/decorators/singleOwner.js";
5
- export { multiOwnerLightAccountActions } from "./light-account/decorators/multiOwner.js";
6
3
  export { predictLightAccountAddress, predictMultiOwnerLightAccountAddress, } from "./light-account/predictAddress.js";
7
4
  export { AccountVersionRegistry } from "./light-account/registry.js";
8
5
  export { defaultLightAccountVersion, getLightAccountImplAddress, LightAccountUnsupported1271Factories, LightAccountUnsupported1271Impls, } from "./light-account/utils.js";
6
+ export { encodeCallsLA, decodeCallsLA, } from "./light-account/accounts/calldataCodec.js";
9
7
  export { lightAccountStaticImplV1_0_1, lightAccountStaticImplV1_0_2, lightAccountStaticImplV1_1_0, lightAccountStaticImplV2_0_0, multiOwnerLightAccountStaticImplV2_0_0, } from "./light-account/lightAccountStaticImpl.js";
10
8
  export { toModularAccountV1Base } from "./ma-v1/accounts/base.js";
11
9
  export { toMultiOwnerModularAccountV1 } from "./ma-v1/accounts/multi-owner-account.js";
12
- export { multiOwnerModularAccountV1Actions } from "./ma-v1/decorators/multiOwner.js";
13
10
  export { predictMultiOwnerModularAccountV1Address } from "./ma-v1/predictAddress.js";
14
11
  export { multiOwnerModularAccountStaticImpl } from "./ma-v1/mav1StaticImpl.js";
15
12
  export { DefaultMaV1Address, DefaultMaV1PluginAddress, } from "./ma-v1/account.js";
13
+ export { encodeCallsMAv1, decodeCallsMAv1, } from "./ma-v1/accounts/calldataCodec.js";
16
14
  export { toModularAccountV2 } from "./ma-v2/accounts/account.js";
17
15
  export { toModularAccountV2Base } from "./ma-v2/accounts/base.js";
16
+ export { encodeCallsMAv2, decodeCallsMAv2, } from "./ma-v2/accounts/calldataCodec.js";
18
17
  export { deferralActions } from "./ma-v2/decorators/deferralActions.js";
19
18
  export { installValidationActions } from "./ma-v2/decorators/installValidation.js";
20
- export { semiModularAccountV2StaticImpl, semiModularAccount7702StaticImpl, webAuthnModularAccountV2StaticImpl, } from "./ma-v2/mav2StaticImpl.js";
19
+ export { semiModularAccountV2StaticImpl, semiModularAccount7702StaticImpl, } from "./ma-v2/mav2StaticImpl.js";
21
20
  // Modules
22
21
  export { AllowlistModule } from "./ma-v2/modules/allowlist-module/module.js";
23
22
  export { NativeTokenLimitModule } from "./ma-v2/modules/native-token-limit-module/module.js";
24
23
  export { PaymasterGuardModule } from "./ma-v2/modules/paymaster-guard-module/module.js";
25
24
  export { SingleSignerValidationModule } from "./ma-v2/modules/single-signer-validation/module.js";
26
25
  export { TimeRangeModule } from "./ma-v2/modules/time-range-module/module.js";
27
- export { WebAuthnValidationModule } from "./ma-v2/modules/webauthn-validation/module.js";
28
26
  export { PermissionBuilder, PermissionType, } from "./ma-v2/permissionBuilder.js";
29
27
  export { predictModularAccountV2Address } from "./ma-v2/predictAddress.js";
30
28
  export { DefaultAddress, DefaultModuleAddress, DEFAULT_OWNER_ENTITY_ID, EXECUTE_USER_OP_SELECTOR, getMAV2UpgradeToData, buildFullNonceKey, serializeModuleEntity, isModularAccountV2, } from "./ma-v2/utils/account.js";
31
29
  export { parseDeferredAction, buildDeferredActionDigest, } from "./ma-v2/utils/deferredActions.js";
32
30
  export { serializeValidationConfig, serializeHookConfig, } from "./ma-v2/utils/hooks.js";
33
- export { packUOSignature, pack1271Signature, toReplaySafeTypedData, toWebAuthnSignature, WEBAUTHN_DUMMY_SIGNATURE, } from "./ma-v2/utils/signature.js";
31
+ export { packUOSignature, pack1271Signature, toReplaySafeTypedData, } from "./ma-v2/utils/signature.js";
34
32
  // Errors
35
33
  export { EntityIdOverrideError } from "./errors/EntityIdOverrideError.js";
36
34
  export { InvalidDeferredActionNonceError } from "./errors/InvalidDeferredActionNonceError.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export type * from \"./types.js\";\n\nexport { chainHas7212 } from \"./utils.js\";\n\n// LightAccount\nexport type * from \"./light-account/accounts/account.js\";\nexport { toLightAccount } from \"./light-account/accounts/account.js\";\n\nexport type * from \"./light-account/accounts/multi-owner-account.js\";\nexport { toMultiOwnerLightAccount } from \"./light-account/accounts/multi-owner-account.js\";\n\n// TODO(v5): Something to consider for v5 - can we cut the exports for the account-specific actions\n// from the public interface, and just consume these internally with account + rely on the standard\n// bundlerClient actions for performing state writes (i.e. rotating owners)? I'm not sure it's useful\n// to consumers outside of attaching to instances of a client with the right action.\nexport type * from \"./light-account/decorators/singleOwner.js\";\nexport { singleOwnerLightAccountActions } from \"./light-account/decorators/singleOwner.js\";\n\nexport type * from \"./light-account/decorators/multiOwner.js\";\nexport { multiOwnerLightAccountActions } from \"./light-account/decorators/multiOwner.js\";\n\nexport type * from \"./light-account/predictAddress.js\";\nexport {\n predictLightAccountAddress,\n predictMultiOwnerLightAccountAddress,\n} from \"./light-account/predictAddress.js\";\n\nexport { AccountVersionRegistry } from \"./light-account/registry.js\";\nexport type * from \"./light-account/registry.js\";\nexport {\n defaultLightAccountVersion,\n getLightAccountImplAddress,\n LightAccountUnsupported1271Factories,\n LightAccountUnsupported1271Impls,\n} from \"./light-account/utils.js\";\n\nexport {\n lightAccountStaticImplV1_0_1,\n lightAccountStaticImplV1_0_2,\n lightAccountStaticImplV1_1_0,\n lightAccountStaticImplV2_0_0,\n multiOwnerLightAccountStaticImplV2_0_0,\n} from \"./light-account/lightAccountStaticImpl.js\";\n\n// ModularAccountV1\nexport type * from \"./ma-v1/accounts/base.js\";\nexport { toModularAccountV1Base } from \"./ma-v1/accounts/base.js\";\n\nexport type * from \"./ma-v1/accounts/multi-owner-account.js\";\nexport { toMultiOwnerModularAccountV1 } from \"./ma-v1/accounts/multi-owner-account.js\";\n\nexport type * from \"./ma-v1/decorators/multiOwner.js\";\nexport { multiOwnerModularAccountV1Actions } from \"./ma-v1/decorators/multiOwner.js\";\n\nexport type * from \"./ma-v1/predictAddress.js\";\nexport { predictMultiOwnerModularAccountV1Address } from \"./ma-v1/predictAddress.js\";\n\nexport { multiOwnerModularAccountStaticImpl } from \"./ma-v1/mav1StaticImpl.js\";\n\nexport {\n DefaultMaV1Address,\n DefaultMaV1PluginAddress,\n} from \"./ma-v1/account.js\";\n\n// ModularAccountV2\nexport type * from \"./ma-v2/accounts/account.js\";\nexport { toModularAccountV2 } from \"./ma-v2/accounts/account.js\";\n\nexport type * from \"./ma-v2/accounts/base.js\";\nexport { toModularAccountV2Base } from \"./ma-v2/accounts/base.js\";\n\nexport type * from \"./ma-v2/decorators/deferralActions.js\";\nexport { deferralActions } from \"./ma-v2/decorators/deferralActions.js\";\n\nexport type * from \"./ma-v2/decorators/installValidation.js\";\nexport { installValidationActions } from \"./ma-v2/decorators/installValidation.js\";\n\nexport {\n semiModularAccountV2StaticImpl,\n semiModularAccount7702StaticImpl,\n webAuthnModularAccountV2StaticImpl,\n} from \"./ma-v2/mav2StaticImpl.js\";\nexport type * from \"./ma-v2/mav2StaticImpl.js\";\n\n// Modules\nexport { AllowlistModule } from \"./ma-v2/modules/allowlist-module/module.js\";\nexport { NativeTokenLimitModule } from \"./ma-v2/modules/native-token-limit-module/module.js\";\nexport { PaymasterGuardModule } from \"./ma-v2/modules/paymaster-guard-module/module.js\";\nexport { SingleSignerValidationModule } from \"./ma-v2/modules/single-signer-validation/module.js\";\nexport { TimeRangeModule } from \"./ma-v2/modules/time-range-module/module.js\";\nexport { WebAuthnValidationModule } from \"./ma-v2/modules/webauthn-validation/module.js\";\n\nexport type * from \"./ma-v2/permissionBuilder.js\";\nexport {\n PermissionBuilder,\n PermissionType,\n} from \"./ma-v2/permissionBuilder.js\";\n\nexport type * from \"./ma-v2/predictAddress.js\";\nexport { predictModularAccountV2Address } from \"./ma-v2/predictAddress.js\";\n\nexport type * from \"./ma-v2/types.js\";\n\nexport type * from \"./ma-v2/utils/account.js\";\nexport {\n DefaultAddress,\n DefaultModuleAddress,\n DEFAULT_OWNER_ENTITY_ID,\n EXECUTE_USER_OP_SELECTOR,\n getMAV2UpgradeToData,\n buildFullNonceKey,\n serializeModuleEntity,\n isModularAccountV2,\n} from \"./ma-v2/utils/account.js\";\n\nexport type * from \"./ma-v2/utils/deferredActions.js\";\nexport {\n parseDeferredAction,\n buildDeferredActionDigest,\n} from \"./ma-v2/utils/deferredActions.js\";\n\nexport type * from \"./ma-v2/utils/hooks.js\";\nexport {\n serializeValidationConfig,\n serializeHookConfig,\n} from \"./ma-v2/utils/hooks.js\";\n\nexport type * from \"./ma-v2/utils/signature.js\";\nexport {\n packUOSignature,\n pack1271Signature,\n toReplaySafeTypedData,\n toWebAuthnSignature,\n WEBAUTHN_DUMMY_SIGNATURE,\n} from \"./ma-v2/utils/signature.js\";\n\n// Errors\nexport { EntityIdOverrideError } from \"./errors/EntityIdOverrideError.js\";\nexport { InvalidDeferredActionNonceError } from \"./errors/InvalidDeferredActionNonceError.js\";\nexport { InvalidEntityIdError } from \"./errors/InvalidEntityIdError.js\";\nexport { InvalidNonceKeyError } from \"./errors/InvalidNonceKeyError.js\";\nexport { InvalidOwnerError } from \"./errors/InvalidOwnerError.js\";\nexport {\n PermissionBuilderError,\n RootPermissionOnlyError,\n AccountAddressAsTargetError,\n DuplicateTargetAddressError,\n NoFunctionsProvidedError,\n ExpiredDeadlineError,\n DeadlineOverLimitError,\n ValidationConfigUnsetError,\n MultipleNativeTokenTransferError,\n ZeroAddressError,\n MultipleGasLimitError,\n UnsupportedPermissionTypeError,\n SelectorNotAllowed,\n} from \"./errors/permissionBuilderErrors.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export type * from \"./types.js\";\n\n// LightAccount\nexport type * from \"./light-account/accounts/account.js\";\nexport { toLightAccount } from \"./light-account/accounts/account.js\";\n\nexport type * from \"./light-account/accounts/multi-owner-account.js\";\nexport { toMultiOwnerLightAccount } from \"./light-account/accounts/multi-owner-account.js\";\n\nexport type * from \"./light-account/predictAddress.js\";\nexport {\n predictLightAccountAddress,\n predictMultiOwnerLightAccountAddress,\n} from \"./light-account/predictAddress.js\";\n\nexport { AccountVersionRegistry } from \"./light-account/registry.js\";\nexport type * from \"./light-account/registry.js\";\nexport {\n defaultLightAccountVersion,\n getLightAccountImplAddress,\n LightAccountUnsupported1271Factories,\n LightAccountUnsupported1271Impls,\n} from \"./light-account/utils.js\";\n\nexport {\n encodeCallsLA,\n decodeCallsLA,\n} from \"./light-account/accounts/calldataCodec.js\";\n\nexport {\n lightAccountStaticImplV1_0_1,\n lightAccountStaticImplV1_0_2,\n lightAccountStaticImplV1_1_0,\n lightAccountStaticImplV2_0_0,\n multiOwnerLightAccountStaticImplV2_0_0,\n} from \"./light-account/lightAccountStaticImpl.js\";\n\n// ModularAccountV1\nexport type * from \"./ma-v1/accounts/base.js\";\nexport { toModularAccountV1Base } from \"./ma-v1/accounts/base.js\";\n\nexport type * from \"./ma-v1/accounts/multi-owner-account.js\";\nexport { toMultiOwnerModularAccountV1 } from \"./ma-v1/accounts/multi-owner-account.js\";\n\nexport type * from \"./ma-v1/predictAddress.js\";\nexport { predictMultiOwnerModularAccountV1Address } from \"./ma-v1/predictAddress.js\";\n\nexport { multiOwnerModularAccountStaticImpl } from \"./ma-v1/mav1StaticImpl.js\";\n\nexport {\n DefaultMaV1Address,\n DefaultMaV1PluginAddress,\n} from \"./ma-v1/account.js\";\n\nexport {\n encodeCallsMAv1,\n decodeCallsMAv1,\n} from \"./ma-v1/accounts/calldataCodec.js\";\n\n// ModularAccountV2\nexport type * from \"./ma-v2/accounts/account.js\";\nexport { toModularAccountV2 } from \"./ma-v2/accounts/account.js\";\n\nexport type * from \"./ma-v2/accounts/base.js\";\nexport { toModularAccountV2Base } from \"./ma-v2/accounts/base.js\";\n\nexport {\n encodeCallsMAv2,\n decodeCallsMAv2,\n} from \"./ma-v2/accounts/calldataCodec.js\";\n\nexport type * from \"./ma-v2/decorators/deferralActions.js\";\nexport { deferralActions } from \"./ma-v2/decorators/deferralActions.js\";\n\nexport type * from \"./ma-v2/decorators/installValidation.js\";\nexport { installValidationActions } from \"./ma-v2/decorators/installValidation.js\";\n\nexport {\n semiModularAccountV2StaticImpl,\n semiModularAccount7702StaticImpl,\n} from \"./ma-v2/mav2StaticImpl.js\";\nexport type * from \"./ma-v2/mav2StaticImpl.js\";\n\n// Modules\nexport { AllowlistModule } from \"./ma-v2/modules/allowlist-module/module.js\";\nexport { NativeTokenLimitModule } from \"./ma-v2/modules/native-token-limit-module/module.js\";\nexport { PaymasterGuardModule } from \"./ma-v2/modules/paymaster-guard-module/module.js\";\nexport { SingleSignerValidationModule } from \"./ma-v2/modules/single-signer-validation/module.js\";\nexport { TimeRangeModule } from \"./ma-v2/modules/time-range-module/module.js\";\n\nexport type * from \"./ma-v2/permissionBuilder.js\";\nexport {\n PermissionBuilder,\n PermissionType,\n} from \"./ma-v2/permissionBuilder.js\";\n\nexport type * from \"./ma-v2/predictAddress.js\";\nexport { predictModularAccountV2Address } from \"./ma-v2/predictAddress.js\";\n\nexport type * from \"./ma-v2/types.js\";\n\nexport type * from \"./ma-v2/utils/account.js\";\nexport {\n DefaultAddress,\n DefaultModuleAddress,\n DEFAULT_OWNER_ENTITY_ID,\n EXECUTE_USER_OP_SELECTOR,\n getMAV2UpgradeToData,\n buildFullNonceKey,\n serializeModuleEntity,\n isModularAccountV2,\n} from \"./ma-v2/utils/account.js\";\n\nexport type * from \"./ma-v2/utils/deferredActions.js\";\nexport {\n parseDeferredAction,\n buildDeferredActionDigest,\n} from \"./ma-v2/utils/deferredActions.js\";\n\nexport type * from \"./ma-v2/utils/hooks.js\";\nexport {\n serializeValidationConfig,\n serializeHookConfig,\n} from \"./ma-v2/utils/hooks.js\";\n\nexport type * from \"./ma-v2/utils/signature.js\";\nexport {\n packUOSignature,\n pack1271Signature,\n toReplaySafeTypedData,\n} from \"./ma-v2/utils/signature.js\";\n\n// Errors\nexport { EntityIdOverrideError } from \"./errors/EntityIdOverrideError.js\";\nexport { InvalidDeferredActionNonceError } from \"./errors/InvalidDeferredActionNonceError.js\";\nexport { InvalidEntityIdError } from \"./errors/InvalidEntityIdError.js\";\nexport { InvalidNonceKeyError } from \"./errors/InvalidNonceKeyError.js\";\nexport { InvalidOwnerError } from \"./errors/InvalidOwnerError.js\";\nexport {\n PermissionBuilderError,\n RootPermissionOnlyError,\n AccountAddressAsTargetError,\n DuplicateTargetAddressError,\n NoFunctionsProvidedError,\n ExpiredDeadlineError,\n DeadlineOverLimitError,\n ValidationConfigUnsetError,\n MultipleNativeTokenTransferError,\n ZeroAddressError,\n MultipleGasLimitError,\n UnsupportedPermissionTypeError,\n SelectorNotAllowed,\n} from \"./errors/permissionBuilderErrors.js\";\n"]}
@@ -8,12 +8,16 @@ export type LightAccount<TLightAccountVersion extends LightAccountVersion<"Light
8
8
  export type ToLightAccountParams<TLightAccountVersion extends LightAccountVersion<"LightAccount"> = LightAccountVersion<"LightAccount">> = {
9
9
  client: Client<Transport, Chain, JsonRpcAccount | LocalAccount | undefined>;
10
10
  owner: JsonRpcAccount | LocalAccount;
11
- salt?: bigint;
12
11
  accountAddress?: Address;
13
12
  factory?: Address;
14
- factoryData?: Hex;
15
13
  version?: TLightAccountVersion;
16
- };
14
+ } & ({
15
+ salt?: bigint;
16
+ factoryData?: never;
17
+ } | {
18
+ salt?: never;
19
+ factoryData?: Hex;
20
+ });
17
21
  /**
18
22
  * Creates a light account.
19
23
  *
@@ -4,8 +4,8 @@ import { LightAccountAbi_v1 } from "../abis/LightAccountAbi_v1.js";
4
4
  import { LightAccountAbi_v2 } from "../abis/LightAccountAbi_v2.js";
5
5
  import { LightAccountFactoryAbi_v1 } from "../abis/LightAccountFactoryAbi_v1.js";
6
6
  import { LightAccountFactoryAbi_v2 } from "../abis/LightAccountFactoryAbi_v2.js";
7
- import { predictLightAccountAddress } from "../predictAddress.js";
8
- import { AccountVersionRegistry, } from "../registry.js";
7
+ import { getLightAccountAddressFromFactoryData, predictLightAccountAddress, } from "../predictAddress.js";
8
+ import { AccountVersionRegistry, isLightAccountVersion2, } from "../registry.js";
9
9
  import { LightAccountUnsupported1271Factories, defaultLightAccountVersion, } from "../utils.js";
10
10
  import { toLightAccountBase } from "./base.js";
11
11
  import { BaseError, lowerAddress } from "@alchemy/common";
@@ -22,20 +22,30 @@ export async function toLightAccount({ client, owner, salt: salt_ = 0n, accountA
22
22
  version,
23
23
  hasAccountAddress: !!accountAddress_,
24
24
  });
25
- const accountAbi = version === "v2.0.0" ? LightAccountAbi_v2 : LightAccountAbi_v1;
26
- const factoryAbi = version === "v2.0.0"
25
+ const accountAbi = isLightAccountVersion2(version)
26
+ ? LightAccountAbi_v2
27
+ : LightAccountAbi_v1;
28
+ const factoryAbi = isLightAccountVersion2(version)
27
29
  ? LightAccountFactoryAbi_v2
28
30
  : LightAccountFactoryAbi_v1;
29
31
  const salt = LightAccountUnsupported1271Factories.has(lowerAddress(factory))
30
32
  ? 0n
31
33
  : salt_;
32
34
  const accountAddress = accountAddress_ ??
33
- predictLightAccountAddress({
34
- factoryAddress: factory,
35
- salt,
36
- ownerAddress: owner.address,
37
- version,
38
- });
35
+ (factoryData_
36
+ ? await getLightAccountAddressFromFactoryData({
37
+ client,
38
+ factoryAddress: factory,
39
+ factoryData: factoryData_,
40
+ entryPoint: AccountVersionRegistry["LightAccount"][version].entryPoint,
41
+ version,
42
+ })
43
+ : predictLightAccountAddress({
44
+ factoryAddress: factory,
45
+ salt,
46
+ ownerAddress: owner.address,
47
+ version,
48
+ }));
39
49
  LOGGER.debug("toLightAccount:address-resolved", { accountAddress });
40
50
  const getFactoryArgs = async () => {
41
51
  const factoryData = factoryData_ ??
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../../src/light-account/accounts/account.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n encodeFunctionData,\n type Address,\n type Chain,\n type Client,\n type Hex,\n type JsonRpcAccount,\n type LocalAccount,\n type Transport,\n} from \"viem\";\nimport { readContract } from \"viem/actions\";\nimport { LightAccountAbi_v1 } from \"../abis/LightAccountAbi_v1.js\";\nimport { LightAccountAbi_v2 } from \"../abis/LightAccountAbi_v2.js\";\nimport { LightAccountFactoryAbi_v1 } from \"../abis/LightAccountFactoryAbi_v1.js\";\nimport { LightAccountFactoryAbi_v2 } from \"../abis/LightAccountFactoryAbi_v2.js\";\nimport { predictLightAccountAddress } from \"../predictAddress.js\";\nimport {\n type LightAccountVersion,\n AccountVersionRegistry,\n} from \"../registry.js\";\nimport {\n LightAccountUnsupported1271Factories,\n defaultLightAccountVersion,\n} from \"../utils.js\";\nimport { toLightAccountBase, type LightAccountBase } from \"./base.js\";\nimport { BaseError, lowerAddress } from \"@alchemy/common\";\nimport { getAction } from \"viem/utils\";\nimport { LOGGER } from \"../../logger.js\";\n\nexport type LightAccount<\n TLightAccountVersion extends\n LightAccountVersion<\"LightAccount\"> = LightAccountVersion<\"LightAccount\">,\n> = LightAccountBase<\"LightAccount\", TLightAccountVersion> & {\n encodeTransferOwnership: (newOwner: Address) => Hex;\n getOwnerAddress: () => Promise<Address>;\n};\n\nexport type ToLightAccountParams<\n TLightAccountVersion extends\n LightAccountVersion<\"LightAccount\"> = LightAccountVersion<\"LightAccount\">,\n> = {\n client: Client<Transport, Chain, JsonRpcAccount | LocalAccount | undefined>;\n owner: JsonRpcAccount | LocalAccount;\n salt?: bigint;\n accountAddress?: Address;\n factory?: Address;\n factoryData?: Hex;\n version?: TLightAccountVersion;\n};\n\n/**\n * Creates a light account.\n *\n * @param {ToLightAccountParams} param0 - The parameters for creating a light account.\n * @returns {Promise<LightAccount<TSigner, TLightAccountVersion>>} A light account.\n */\nexport async function toLightAccount<\n TLightAccountVersion extends\n LightAccountVersion<\"LightAccount\"> = LightAccountVersion<\"LightAccount\">,\n>({\n client,\n owner,\n salt: salt_ = 0n,\n accountAddress: accountAddress_,\n version = defaultLightAccountVersion() as TLightAccountVersion,\n factory = AccountVersionRegistry.LightAccount[version].factoryAddress,\n factoryData: factoryData_,\n}: ToLightAccountParams<TLightAccountVersion>): Promise<\n LightAccount<TLightAccountVersion>\n> {\n LOGGER.debug(\"toLightAccount:start\", {\n version,\n hasAccountAddress: !!accountAddress_,\n });\n\n const accountAbi =\n version === \"v2.0.0\" ? LightAccountAbi_v2 : LightAccountAbi_v1;\n const factoryAbi =\n version === \"v2.0.0\"\n ? LightAccountFactoryAbi_v2\n : LightAccountFactoryAbi_v1;\n\n const salt = LightAccountUnsupported1271Factories.has(lowerAddress(factory))\n ? 0n\n : salt_;\n\n const accountAddress =\n accountAddress_ ??\n predictLightAccountAddress({\n factoryAddress: factory,\n salt,\n ownerAddress: owner.address,\n version,\n });\n\n LOGGER.debug(\"toLightAccount:address-resolved\", { accountAddress });\n\n const getFactoryArgs = async () => {\n const factoryData =\n factoryData_ ??\n encodeFunctionData({\n abi: factoryAbi,\n functionName: \"createAccount\",\n args: [owner.address, salt],\n });\n\n return {\n factory,\n factoryData,\n };\n };\n\n const baseAccount = await toLightAccountBase({\n client,\n owner,\n abi: accountAbi,\n accountAddress,\n type: \"LightAccount\",\n version,\n getFactoryArgs,\n });\n\n return {\n ...baseAccount,\n\n encodeTransferOwnership: (newOwner: Address) => {\n return encodeFunctionData({\n abi: accountAbi,\n functionName: \"transferOwnership\",\n args: [newOwner],\n });\n },\n\n async getOwnerAddress(): Promise<Address> {\n LOGGER.debug(\"getOwnerAddress:start\", { accountAddress });\n const readContractAction = getAction(\n client,\n readContract,\n \"readContract\",\n );\n const owner = await readContractAction({\n address: accountAddress,\n abi: accountAbi,\n functionName: \"owner\",\n });\n\n if (owner == null) {\n LOGGER.error(\"getOwnerAddress:failed\", { accountAddress });\n throw new BaseError(\"could not get on-chain owner\");\n }\n\n LOGGER.debug(\"getOwnerAddress:success\", { owner });\n return owner;\n },\n };\n}\n"]}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../../src/light-account/accounts/account.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n encodeFunctionData,\n type Address,\n type Chain,\n type Client,\n type Hex,\n type JsonRpcAccount,\n type LocalAccount,\n type Transport,\n} from \"viem\";\nimport { readContract } from \"viem/actions\";\nimport { LightAccountAbi_v1 } from \"../abis/LightAccountAbi_v1.js\";\nimport { LightAccountAbi_v2 } from \"../abis/LightAccountAbi_v2.js\";\nimport { LightAccountFactoryAbi_v1 } from \"../abis/LightAccountFactoryAbi_v1.js\";\nimport { LightAccountFactoryAbi_v2 } from \"../abis/LightAccountFactoryAbi_v2.js\";\nimport {\n getLightAccountAddressFromFactoryData,\n predictLightAccountAddress,\n} from \"../predictAddress.js\";\nimport {\n type LightAccountVersion,\n AccountVersionRegistry,\n isLightAccountVersion2,\n} from \"../registry.js\";\nimport {\n LightAccountUnsupported1271Factories,\n defaultLightAccountVersion,\n} from \"../utils.js\";\nimport { toLightAccountBase, type LightAccountBase } from \"./base.js\";\nimport { BaseError, lowerAddress } from \"@alchemy/common\";\nimport { getAction } from \"viem/utils\";\nimport { LOGGER } from \"../../logger.js\";\n\nexport type LightAccount<\n TLightAccountVersion extends\n LightAccountVersion<\"LightAccount\"> = LightAccountVersion<\"LightAccount\">,\n> = LightAccountBase<\"LightAccount\", TLightAccountVersion> & {\n encodeTransferOwnership: (newOwner: Address) => Hex;\n getOwnerAddress: () => Promise<Address>;\n};\n\nexport type ToLightAccountParams<\n TLightAccountVersion extends\n LightAccountVersion<\"LightAccount\"> = LightAccountVersion<\"LightAccount\">,\n> = {\n client: Client<Transport, Chain, JsonRpcAccount | LocalAccount | undefined>;\n owner: JsonRpcAccount | LocalAccount;\n accountAddress?: Address;\n factory?: Address;\n version?: TLightAccountVersion;\n} & (\n | { salt?: bigint; factoryData?: never }\n | { salt?: never; factoryData?: Hex }\n);\n\n/**\n * Creates a light account.\n *\n * @param {ToLightAccountParams} param0 - The parameters for creating a light account.\n * @returns {Promise<LightAccount<TSigner, TLightAccountVersion>>} A light account.\n */\nexport async function toLightAccount<\n TLightAccountVersion extends\n LightAccountVersion<\"LightAccount\"> = LightAccountVersion<\"LightAccount\">,\n>({\n client,\n owner,\n salt: salt_ = 0n,\n accountAddress: accountAddress_,\n version = defaultLightAccountVersion() as TLightAccountVersion,\n factory = AccountVersionRegistry.LightAccount[version].factoryAddress,\n factoryData: factoryData_,\n}: ToLightAccountParams<TLightAccountVersion>): Promise<\n LightAccount<TLightAccountVersion>\n> {\n LOGGER.debug(\"toLightAccount:start\", {\n version,\n hasAccountAddress: !!accountAddress_,\n });\n\n const accountAbi = isLightAccountVersion2(version)\n ? LightAccountAbi_v2\n : LightAccountAbi_v1;\n const factoryAbi = isLightAccountVersion2(version)\n ? LightAccountFactoryAbi_v2\n : LightAccountFactoryAbi_v1;\n\n const salt = LightAccountUnsupported1271Factories.has(lowerAddress(factory))\n ? 0n\n : salt_;\n\n const accountAddress =\n accountAddress_ ??\n (factoryData_\n ? await getLightAccountAddressFromFactoryData({\n client,\n factoryAddress: factory,\n factoryData: factoryData_,\n entryPoint:\n AccountVersionRegistry[\"LightAccount\"][version].entryPoint,\n version,\n })\n : predictLightAccountAddress({\n factoryAddress: factory,\n salt,\n ownerAddress: owner.address,\n version,\n }));\n\n LOGGER.debug(\"toLightAccount:address-resolved\", { accountAddress });\n\n const getFactoryArgs = async () => {\n const factoryData =\n factoryData_ ??\n encodeFunctionData({\n abi: factoryAbi,\n functionName: \"createAccount\",\n args: [owner.address, salt],\n });\n\n return {\n factory,\n factoryData,\n };\n };\n\n const baseAccount = await toLightAccountBase({\n client,\n owner,\n abi: accountAbi,\n accountAddress,\n type: \"LightAccount\",\n version,\n getFactoryArgs,\n });\n\n return {\n ...baseAccount,\n\n encodeTransferOwnership: (newOwner: Address) => {\n return encodeFunctionData({\n abi: accountAbi,\n functionName: \"transferOwnership\",\n args: [newOwner],\n });\n },\n\n async getOwnerAddress(): Promise<Address> {\n LOGGER.debug(\"getOwnerAddress:start\", { accountAddress });\n const readContractAction = getAction(\n client,\n readContract,\n \"readContract\",\n );\n const owner = await readContractAction({\n address: accountAddress,\n abi: accountAbi,\n functionName: \"owner\",\n });\n\n if (owner == null) {\n LOGGER.error(\"getOwnerAddress:failed\", { accountAddress });\n throw new BaseError(\"could not get on-chain owner\");\n }\n\n LOGGER.debug(\"getOwnerAddress:success\", { owner });\n return owner;\n },\n };\n}\n"]}
@@ -1,8 +1,8 @@
1
- import { concat, concatHex, encodeFunctionData, fromHex, hashMessage, hashTypedData, trim, } from "viem";
2
- import { getUserOperationHash, toSmartAccount, } from "viem/account-abstraction";
1
+ import { concatHex, encodeFunctionData, fromHex, hashMessage, hashTypedData, trim, } from "viem";
2
+ import { getUserOperationHash, getUserOperationTypedData, toSmartAccount, } from "viem/account-abstraction";
3
3
  import { getStorageAt, signMessage, signTypedData } from "viem/actions";
4
4
  import { EIP1967_PROXY_IMPL_STORAGE_SLOT } from "../utils.js";
5
- import { AccountVersionRegistry } from "../registry.js";
5
+ import { AccountVersionRegistry, isLightAccountVersion2 } from "../registry.js";
6
6
  import { encodeCallsLA as encodeCalls, decodeCallsLA as decodeCalls, } from "./calldataCodec.js";
7
7
  import { BaseError, lowerAddress } from "@alchemy/common";
8
8
  import { getAction } from "viem/utils";
@@ -15,7 +15,6 @@ export async function toLightAccountBase({ client, abi, accountAddress, owner, t
15
15
  const encodeUpgradeToAndCall = async ({ upgradeToAddress, upgradeToInitData, }) => {
16
16
  const expectedImplAddresses = Object.values(AccountVersionRegistry[type]).map((x) => x.accountImplementation);
17
17
  const getStorageAtAction = getAction(client, getStorageAt, "getStorageAt");
18
- // TODO(v5): This is a super fragile workflow, and we should consider not supporting this on the SmartAccount level in v5.
19
18
  const storage = await getStorageAtAction({
20
19
  address: accountAddress,
21
20
  slot: EIP1967_PROXY_IMPL_STORAGE_SLOT,
@@ -68,6 +67,8 @@ export async function toLightAccountBase({ client, abi, accountAddress, owner, t
68
67
  data: get1271Wrapper(messageHash, "1"),
69
68
  };
70
69
  case "v2.0.0":
70
+ case "v2.1.0":
71
+ case "v2.2.0":
71
72
  return {
72
73
  type: "eth_signTypedData_v4",
73
74
  data: get1271Wrapper(messageHash, "2"),
@@ -77,8 +78,8 @@ export async function toLightAccountBase({ client, abi, accountAddress, owner, t
77
78
  }
78
79
  };
79
80
  const formatSignature = async (signature) => {
80
- return version === "v2.0.0"
81
- ? concat([SignaturePrefix.EOA, signature])
81
+ return isLightAccountVersion2(version)
82
+ ? concatHex([SignaturePrefix.EOA, signature])
82
83
  : signature;
83
84
  };
84
85
  const entryPoint = AccountVersionRegistry[type][version].entryPoint;
@@ -103,7 +104,9 @@ export async function toLightAccountBase({ client, abi, accountAddress, owner, t
103
104
  case "v1.1.0":
104
105
  return signature;
105
106
  case "v2.0.0":
106
- return concat([SignaturePrefix.EOA, signature]);
107
+ case "v2.1.0":
108
+ case "v2.2.0":
109
+ return concatHex([SignaturePrefix.EOA, signature]);
107
110
  default:
108
111
  throw new BaseError(`Unknown version ${type} of ${String(version)}`);
109
112
  }
@@ -140,23 +143,46 @@ export async function toLightAccountBase({ client, abi, accountAddress, owner, t
140
143
  },
141
144
  async signUserOperation(parameters) {
142
145
  const { chainId = client.chain.id, ...userOperation } = parameters;
143
- const userOpHash = getUserOperationHash({
144
- chainId,
145
- entryPointAddress: entryPoint.address,
146
- entryPointVersion: entryPoint.version,
147
- userOperation: {
148
- ...userOperation,
149
- sender: accountAddress,
150
- },
151
- });
152
- const signMessageAction = getAction(client, signMessage, "signMessage");
153
- const signature = await signMessageAction({
154
- account: owner,
155
- message: { raw: userOpHash },
156
- });
157
- return version === "v2.0.0"
158
- ? concatHex([SignaturePrefix.EOA, signature])
159
- : signature;
146
+ let signature;
147
+ switch (version) {
148
+ case "v1.0.1":
149
+ case "v1.0.2":
150
+ case "v1.1.0":
151
+ case "v2.0.0":
152
+ const userOpHash = getUserOperationHash({
153
+ chainId,
154
+ entryPointAddress: entryPoint.address,
155
+ entryPointVersion: entryPoint.version,
156
+ userOperation: {
157
+ ...userOperation,
158
+ sender: accountAddress,
159
+ },
160
+ });
161
+ const signMessageAction = getAction(client, signMessage, "signMessage");
162
+ signature = await signMessageAction({
163
+ account: owner,
164
+ message: { raw: userOpHash },
165
+ });
166
+ break;
167
+ case "v2.1.0":
168
+ case "v2.2.0":
169
+ const signTypedDataAction = getAction(client, signTypedData, "signTypedData");
170
+ signature = await signTypedDataAction({
171
+ account: owner,
172
+ ...getUserOperationTypedData({
173
+ chainId,
174
+ entryPointAddress: entryPoint.address,
175
+ userOperation: {
176
+ ...userOperation,
177
+ sender: accountAddress,
178
+ },
179
+ }),
180
+ });
181
+ break;
182
+ default:
183
+ throw new BaseError(`Unknown version ${type} of ${String(version)}`);
184
+ }
185
+ return formatSignature(signature);
160
186
  },
161
187
  extend: {
162
188
  smartAccountType: type,
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/light-account/accounts/base.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n concat,\n concatHex,\n encodeFunctionData,\n fromHex,\n hashMessage,\n hashTypedData,\n trim,\n type Abi,\n type Address,\n type Chain,\n type Client,\n type Hex,\n type JsonRpcAccount,\n type LocalAccount,\n type Transport,\n type TypedDataDefinition,\n} from \"viem\";\nimport {\n getUserOperationHash,\n toSmartAccount,\n type SmartAccountImplementation,\n} from \"viem/account-abstraction\";\nimport { getStorageAt, signMessage, signTypedData } from \"viem/actions\";\nimport type {\n EntryPointFromAccountRegistry,\n LightAccountType,\n LightAccountVersion,\n} from \"../registry.js\";\nimport { EIP1967_PROXY_IMPL_STORAGE_SLOT } from \"../utils.js\";\nimport { AccountVersionRegistry } from \"../registry.js\";\nimport {\n encodeCallsLA as encodeCalls,\n decodeCallsLA as decodeCalls,\n} from \"./calldataCodec.js\";\nimport { BaseError, lowerAddress } from \"@alchemy/common\";\nimport type {\n SignatureRequest,\n StaticSmartAccountImplementation,\n SmartAccountWithDecodeCalls,\n} from \"../../types.js\";\nimport { getAction } from \"viem/utils\";\n\nconst SignaturePrefix = {\n EOA: \"0x00\",\n CONTRACT: \"0x01\",\n CONTRACT_WITH_ADDR: \"0x02\",\n} as const;\n\nexport type BaseLightAccountImplementation<\n TLightAccountType extends LightAccountType = LightAccountType,\n TLightAccountVersion extends\n LightAccountVersion<TLightAccountType> = LightAccountVersion<TLightAccountType>,\n> = SmartAccountImplementation<\n EntryPointFromAccountRegistry<TLightAccountType, TLightAccountVersion>[\"abi\"],\n EntryPointFromAccountRegistry<\n TLightAccountType,\n TLightAccountVersion\n >[\"version\"],\n {\n getLightAccountVersion: () => TLightAccountVersion;\n smartAccountType: TLightAccountType;\n encodeUpgradeToAndCall: (params: {\n upgradeToAddress: Address;\n upgradeToInitData: Hex;\n }) => Promise<Hex>;\n prepareSignature: (request: SignatureRequest) => Promise<SignatureRequest>;\n formatSignature: (signature: Hex) => Promise<Hex>;\n },\n false\n>;\n\nexport type LightAccountBase<\n TLightAccountType extends LightAccountType = LightAccountType,\n TLightAccountVersion extends\n LightAccountVersion<TLightAccountType> = LightAccountVersion<TLightAccountType>,\n> = SmartAccountWithDecodeCalls<\n BaseLightAccountImplementation<TLightAccountType, TLightAccountVersion>\n>;\n\nexport type ToLightAccountBaseParams<\n TLightAccountType extends LightAccountType,\n TLightAccountVersion extends\n LightAccountVersion<TLightAccountType> = LightAccountVersion<TLightAccountType>,\n TTransport extends Transport = Transport,\n> = {\n client: Client<TTransport, Chain, JsonRpcAccount | LocalAccount | undefined>;\n abi: Abi;\n accountAddress: Address;\n owner: JsonRpcAccount | LocalAccount;\n type: TLightAccountType;\n version: TLightAccountVersion;\n getFactoryArgs: () => Promise<{\n factory?: Address | undefined;\n factoryData?: Hex | undefined;\n }>;\n};\n\nexport async function toLightAccountBase<\n TLightAccountType extends LightAccountType,\n TLightAccountVersion extends\n LightAccountVersion<TLightAccountType> = LightAccountVersion<TLightAccountType>,\n TTransport extends Transport = Transport,\n>({\n client,\n abi,\n accountAddress,\n owner,\n type,\n version,\n getFactoryArgs,\n}: ToLightAccountBaseParams<\n TLightAccountType,\n TLightAccountVersion,\n TTransport\n>): Promise<LightAccountBase<TLightAccountType, TLightAccountVersion>> {\n const encodeUpgradeToAndCall = async ({\n upgradeToAddress,\n upgradeToInitData,\n }: {\n upgradeToAddress: Address;\n upgradeToInitData: Hex;\n }): Promise<Hex> => {\n const expectedImplAddresses = (\n Object.values(\n AccountVersionRegistry[type],\n ) as StaticSmartAccountImplementation<false>[]\n ).map((x) => x.accountImplementation);\n\n const getStorageAtAction = getAction(client, getStorageAt, \"getStorageAt\");\n // TODO(v5): This is a super fragile workflow, and we should consider not supporting this on the SmartAccount level in v5.\n const storage = await getStorageAtAction({\n address: accountAddress,\n slot: EIP1967_PROXY_IMPL_STORAGE_SLOT,\n });\n\n if (storage == null) {\n throw new BaseError(\n `Failed to get storage slot: ${EIP1967_PROXY_IMPL_STORAGE_SLOT}`,\n );\n }\n\n // Only upgrade undeployed accounts (storage 0) or deployed light accounts, else error.\n if (\n fromHex(storage, \"number\") !== 0 &&\n !expectedImplAddresses.some((x) => x === lowerAddress(trim(storage)))\n ) {\n throw new BaseError(\n `could not determine if smart account implementation is ${type} ${String(\n version,\n )}`,\n );\n }\n\n return encodeFunctionData({\n abi,\n functionName: \"upgradeToAndCall\",\n args: [upgradeToAddress, upgradeToInitData],\n });\n };\n\n const get1271Wrapper = (\n hashedMessage: Hex,\n version: string,\n ): TypedDataDefinition => {\n return {\n // EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\n // https://github.com/alchemyplatform/light-account/blob/main/src/LightAccount.sol#L236\n domain: {\n chainId: client.chain.id,\n name: type,\n verifyingContract: accountAddress,\n version,\n },\n types: {\n LightAccountMessage: [{ name: \"message\", type: \"bytes\" }],\n },\n message: {\n message: hashedMessage,\n },\n primaryType: \"LightAccountMessage\",\n };\n };\n\n const prepareSignature = async (\n params: SignatureRequest,\n ): Promise<SignatureRequest> => {\n const messageHash =\n params.type === \"eth_signTypedData_v4\"\n ? hashTypedData(params.data)\n : hashMessage(params.data);\n\n switch (version) {\n case \"v1.0.1\":\n return params;\n case \"v1.0.2\":\n throw new BaseError(\n `Version ${String(version)} of LightAccount doesn't support 1271`,\n );\n case \"v1.1.0\":\n return {\n type: \"eth_signTypedData_v4\",\n data: get1271Wrapper(messageHash, \"1\"),\n };\n case \"v2.0.0\":\n return {\n type: \"eth_signTypedData_v4\",\n data: get1271Wrapper(messageHash, \"2\"),\n };\n default:\n throw new BaseError(\n `Unknown version ${String(version)} of LightAccount`,\n );\n }\n };\n\n const formatSignature = async (signature: Hex): Promise<Hex> => {\n return version === \"v2.0.0\"\n ? concat([SignaturePrefix.EOA, signature])\n : signature;\n };\n\n const entryPoint = (\n AccountVersionRegistry[type][version] as StaticSmartAccountImplementation\n ).entryPoint;\n\n return await toSmartAccount({\n getFactoryArgs,\n client,\n entryPoint,\n\n async getAddress() {\n return accountAddress;\n },\n\n async encodeCalls(calls) {\n return encodeCalls(calls);\n },\n\n async decodeCalls(data) {\n return decodeCalls(data, accountAddress);\n },\n\n async getStubSignature() {\n const signature =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\n\n switch (version) {\n case \"v1.0.1\":\n case \"v1.0.2\":\n case \"v1.1.0\":\n return signature;\n case \"v2.0.0\":\n return concat([SignaturePrefix.EOA, signature]);\n default:\n throw new BaseError(`Unknown version ${type} of ${String(version)}`);\n }\n },\n\n async signMessage({ message }) {\n const signMessageAction = getAction(client, signMessage, \"signMessage\");\n const signTypedDataAction = getAction(\n client,\n signTypedData,\n \"signTypedData\",\n );\n\n const { type, data } = await prepareSignature({\n type: \"personal_sign\",\n data: message,\n });\n\n const sig =\n type === \"eth_signTypedData_v4\"\n ? await signTypedDataAction({\n ...data,\n account: owner,\n })\n : await signMessageAction({ account: owner, message: data });\n\n return formatSignature(sig);\n },\n\n async signTypedData(params) {\n const signMessageAction = getAction(client, signMessage, \"signMessage\");\n const signTypedDataAction = getAction(\n client,\n signTypedData,\n \"signTypedData\",\n );\n\n const { type, data } = await prepareSignature({\n type: \"eth_signTypedData_v4\",\n data: params as TypedDataDefinition,\n });\n\n const sig =\n type === \"eth_signTypedData_v4\"\n ? await signTypedDataAction({\n ...data,\n account: owner,\n })\n : await signMessageAction({ account: owner, message: data });\n\n return formatSignature(sig);\n },\n\n async signUserOperation(parameters) {\n const { chainId = client.chain.id, ...userOperation } = parameters;\n const userOpHash = getUserOperationHash({\n chainId,\n entryPointAddress: entryPoint.address,\n entryPointVersion: entryPoint.version,\n userOperation: {\n ...userOperation,\n sender: accountAddress,\n },\n });\n\n const signMessageAction = getAction(client, signMessage, \"signMessage\");\n\n const signature = await signMessageAction({\n account: owner,\n message: { raw: userOpHash },\n });\n\n return version === \"v2.0.0\"\n ? concatHex([SignaturePrefix.EOA, signature])\n : signature;\n },\n\n extend: {\n smartAccountType: type,\n getLightAccountVersion: () => version,\n encodeUpgradeToAndCall,\n prepareSignature,\n formatSignature,\n },\n });\n}\n"]}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/light-account/accounts/base.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n concatHex,\n encodeFunctionData,\n fromHex,\n hashMessage,\n hashTypedData,\n trim,\n type Abi,\n type Address,\n type Chain,\n type Client,\n type Hex,\n type JsonRpcAccount,\n type LocalAccount,\n type Transport,\n type TypedDataDefinition,\n} from \"viem\";\nimport {\n getUserOperationHash,\n getUserOperationTypedData,\n toSmartAccount,\n type SmartAccountImplementation,\n} from \"viem/account-abstraction\";\nimport { getStorageAt, signMessage, signTypedData } from \"viem/actions\";\nimport type {\n EntryPointFromAccountRegistry,\n LightAccountType,\n LightAccountVersion,\n} from \"../registry.js\";\nimport { EIP1967_PROXY_IMPL_STORAGE_SLOT } from \"../utils.js\";\nimport { AccountVersionRegistry, isLightAccountVersion2 } from \"../registry.js\";\nimport {\n encodeCallsLA as encodeCalls,\n decodeCallsLA as decodeCalls,\n} from \"./calldataCodec.js\";\nimport { BaseError, lowerAddress } from \"@alchemy/common\";\nimport type {\n SignatureRequest,\n StaticSmartAccountImplementation,\n SmartAccountWithDecodeCalls,\n} from \"../../types.js\";\nimport { getAction } from \"viem/utils\";\n\nconst SignaturePrefix = {\n EOA: \"0x00\",\n CONTRACT: \"0x01\",\n CONTRACT_WITH_ADDR: \"0x02\",\n} as const;\n\nexport type BaseLightAccountImplementation<\n TLightAccountType extends LightAccountType = LightAccountType,\n TLightAccountVersion extends\n LightAccountVersion<TLightAccountType> = LightAccountVersion<TLightAccountType>,\n> = SmartAccountImplementation<\n EntryPointFromAccountRegistry<TLightAccountType, TLightAccountVersion>[\"abi\"],\n EntryPointFromAccountRegistry<\n TLightAccountType,\n TLightAccountVersion\n >[\"version\"],\n {\n getLightAccountVersion: () => TLightAccountVersion;\n smartAccountType: TLightAccountType;\n encodeUpgradeToAndCall: (params: {\n upgradeToAddress: Address;\n upgradeToInitData: Hex;\n }) => Promise<Hex>;\n prepareSignature: (request: SignatureRequest) => Promise<SignatureRequest>;\n formatSignature: (signature: Hex) => Promise<Hex>;\n },\n false\n>;\n\nexport type LightAccountBase<\n TLightAccountType extends LightAccountType = LightAccountType,\n TLightAccountVersion extends\n LightAccountVersion<TLightAccountType> = LightAccountVersion<TLightAccountType>,\n> = SmartAccountWithDecodeCalls<\n BaseLightAccountImplementation<TLightAccountType, TLightAccountVersion>\n>;\n\nexport type ToLightAccountBaseParams<\n TLightAccountType extends LightAccountType,\n TLightAccountVersion extends\n LightAccountVersion<TLightAccountType> = LightAccountVersion<TLightAccountType>,\n TTransport extends Transport = Transport,\n> = {\n client: Client<TTransport, Chain, JsonRpcAccount | LocalAccount | undefined>;\n abi: Abi;\n accountAddress: Address;\n owner: JsonRpcAccount | LocalAccount;\n type: TLightAccountType;\n version: TLightAccountVersion;\n getFactoryArgs: () => Promise<{\n factory?: Address | undefined;\n factoryData?: Hex | undefined;\n }>;\n};\n\nexport async function toLightAccountBase<\n TLightAccountType extends LightAccountType,\n TLightAccountVersion extends\n LightAccountVersion<TLightAccountType> = LightAccountVersion<TLightAccountType>,\n TTransport extends Transport = Transport,\n>({\n client,\n abi,\n accountAddress,\n owner,\n type,\n version,\n getFactoryArgs,\n}: ToLightAccountBaseParams<\n TLightAccountType,\n TLightAccountVersion,\n TTransport\n>): Promise<LightAccountBase<TLightAccountType, TLightAccountVersion>> {\n const encodeUpgradeToAndCall = async ({\n upgradeToAddress,\n upgradeToInitData,\n }: {\n upgradeToAddress: Address;\n upgradeToInitData: Hex;\n }): Promise<Hex> => {\n const expectedImplAddresses = (\n Object.values(\n AccountVersionRegistry[type],\n ) as StaticSmartAccountImplementation<false>[]\n ).map((x) => x.accountImplementation);\n\n const getStorageAtAction = getAction(client, getStorageAt, \"getStorageAt\");\n const storage = await getStorageAtAction({\n address: accountAddress,\n slot: EIP1967_PROXY_IMPL_STORAGE_SLOT,\n });\n\n if (storage == null) {\n throw new BaseError(\n `Failed to get storage slot: ${EIP1967_PROXY_IMPL_STORAGE_SLOT}`,\n );\n }\n\n // Only upgrade undeployed accounts (storage 0) or deployed light accounts, else error.\n if (\n fromHex(storage, \"number\") !== 0 &&\n !expectedImplAddresses.some((x) => x === lowerAddress(trim(storage)))\n ) {\n throw new BaseError(\n `could not determine if smart account implementation is ${type} ${String(\n version,\n )}`,\n );\n }\n\n return encodeFunctionData({\n abi,\n functionName: \"upgradeToAndCall\",\n args: [upgradeToAddress, upgradeToInitData],\n });\n };\n\n const get1271Wrapper = (\n hashedMessage: Hex,\n version: string,\n ): TypedDataDefinition => {\n return {\n // EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\n // https://github.com/alchemyplatform/light-account/blob/main/src/LightAccount.sol#L236\n domain: {\n chainId: client.chain.id,\n name: type,\n verifyingContract: accountAddress,\n version,\n },\n types: {\n LightAccountMessage: [{ name: \"message\", type: \"bytes\" }],\n },\n message: {\n message: hashedMessage,\n },\n primaryType: \"LightAccountMessage\",\n };\n };\n\n const prepareSignature = async (\n params: SignatureRequest,\n ): Promise<SignatureRequest> => {\n const messageHash =\n params.type === \"eth_signTypedData_v4\"\n ? hashTypedData(params.data)\n : hashMessage(params.data);\n\n switch (version) {\n case \"v1.0.1\":\n return params;\n case \"v1.0.2\":\n throw new BaseError(\n `Version ${String(version)} of LightAccount doesn't support 1271`,\n );\n case \"v1.1.0\":\n return {\n type: \"eth_signTypedData_v4\",\n data: get1271Wrapper(messageHash, \"1\"),\n };\n case \"v2.0.0\":\n case \"v2.1.0\":\n case \"v2.2.0\":\n return {\n type: \"eth_signTypedData_v4\",\n data: get1271Wrapper(messageHash, \"2\"),\n };\n default:\n throw new BaseError(\n `Unknown version ${String(version)} of LightAccount`,\n );\n }\n };\n\n const formatSignature = async (signature: Hex): Promise<Hex> => {\n return isLightAccountVersion2(\n version as LightAccountVersion<\"LightAccount\">,\n )\n ? concatHex([SignaturePrefix.EOA, signature])\n : signature;\n };\n\n const entryPoint = (\n AccountVersionRegistry[type][version] as StaticSmartAccountImplementation\n ).entryPoint;\n\n return await toSmartAccount({\n getFactoryArgs,\n client,\n entryPoint,\n\n async getAddress() {\n return accountAddress;\n },\n\n async encodeCalls(calls) {\n return encodeCalls(calls);\n },\n\n async decodeCalls(data) {\n return decodeCalls(data, accountAddress);\n },\n\n async getStubSignature() {\n const signature =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\n\n switch (version) {\n case \"v1.0.1\":\n case \"v1.0.2\":\n case \"v1.1.0\":\n return signature;\n case \"v2.0.0\":\n case \"v2.1.0\":\n case \"v2.2.0\":\n return concatHex([SignaturePrefix.EOA, signature]);\n default:\n throw new BaseError(`Unknown version ${type} of ${String(version)}`);\n }\n },\n\n async signMessage({ message }) {\n const signMessageAction = getAction(client, signMessage, \"signMessage\");\n const signTypedDataAction = getAction(\n client,\n signTypedData,\n \"signTypedData\",\n );\n\n const { type, data } = await prepareSignature({\n type: \"personal_sign\",\n data: message,\n });\n\n const sig =\n type === \"eth_signTypedData_v4\"\n ? await signTypedDataAction({\n ...data,\n account: owner,\n })\n : await signMessageAction({ account: owner, message: data });\n\n return formatSignature(sig);\n },\n\n async signTypedData(params) {\n const signMessageAction = getAction(client, signMessage, \"signMessage\");\n const signTypedDataAction = getAction(\n client,\n signTypedData,\n \"signTypedData\",\n );\n\n const { type, data } = await prepareSignature({\n type: \"eth_signTypedData_v4\",\n data: params as TypedDataDefinition,\n });\n\n const sig =\n type === \"eth_signTypedData_v4\"\n ? await signTypedDataAction({\n ...data,\n account: owner,\n })\n : await signMessageAction({ account: owner, message: data });\n\n return formatSignature(sig);\n },\n\n async signUserOperation(parameters) {\n const { chainId = client.chain.id, ...userOperation } = parameters;\n let signature: Hex;\n\n switch (version) {\n case \"v1.0.1\":\n case \"v1.0.2\":\n case \"v1.1.0\":\n case \"v2.0.0\":\n const userOpHash = getUserOperationHash({\n chainId,\n entryPointAddress: entryPoint.address,\n entryPointVersion: entryPoint.version,\n userOperation: {\n ...userOperation,\n sender: accountAddress,\n },\n });\n\n const signMessageAction = getAction(\n client,\n signMessage,\n \"signMessage\",\n );\n\n signature = await signMessageAction({\n account: owner,\n message: { raw: userOpHash },\n });\n break;\n case \"v2.1.0\":\n case \"v2.2.0\":\n const signTypedDataAction = getAction(\n client,\n signTypedData,\n \"signTypedData\",\n );\n\n signature = await signTypedDataAction({\n account: owner,\n ...getUserOperationTypedData({\n chainId,\n entryPointAddress: entryPoint.address,\n userOperation: {\n ...userOperation,\n sender: accountAddress,\n },\n }),\n });\n break;\n default:\n throw new BaseError(`Unknown version ${type} of ${String(version)}`);\n }\n\n return formatSignature(signature);\n },\n\n extend: {\n smartAccountType: type,\n getLightAccountVersion: () => version,\n encodeUpgradeToAndCall,\n prepareSignature,\n formatSignature,\n },\n });\n}\n"]}
@@ -1,3 +1,20 @@
1
1
  import { type Address, type Call, type Hex } from "viem";
2
+ /**
3
+ * Encodes an array of calls into LightAccount calldata for `execute` or `executeBatch`.
4
+ * Used internally by the LightAccount SmartAccount implementation. Typically not needed
5
+ * directly unless you have an advanced use case.
6
+ *
7
+ * @param {Call[]} calls The calls to encode.
8
+ * @returns {Hex} The encoded calldata.
9
+ */
2
10
  export declare function encodeCallsLA(calls: readonly Call[]): Hex;
11
+ /**
12
+ * Decodes LightAccount calldata back into an array of calls.
13
+ * Used internally by the LightAccount SmartAccount implementation. Typically not needed
14
+ * directly unless you have an advanced use case.
15
+ *
16
+ * @param {Hex} data The calldata to decode.
17
+ * @param {Address} accountAddress The account address, used as the `to` for unrecognized selectors.
18
+ * @returns {Call[]} The decoded calls.
19
+ */
3
20
  export declare function decodeCallsLA(data: Hex, accountAddress: Address): Call[];
@@ -1,6 +1,15 @@
1
1
  import { decodeFunctionData, encodeFunctionData, } from "viem";
2
2
  import { LightAccountAbi_v1 } from "../abis/LightAccountAbi_v1.js";
3
+ import { BaseError } from "@alchemy/common";
3
4
  // Conveniently, all variants of LA up to v2.0.0 use the same function signatures for `execute` and `executeBatch`.
5
+ /**
6
+ * Encodes an array of calls into LightAccount calldata for `execute` or `executeBatch`.
7
+ * Used internally by the LightAccount SmartAccount implementation. Typically not needed
8
+ * directly unless you have an advanced use case.
9
+ *
10
+ * @param {Call[]} calls The calls to encode.
11
+ * @returns {Hex} The encoded calldata.
12
+ */
4
13
  export function encodeCallsLA(calls) {
5
14
  if (calls.length === 1) {
6
15
  return encodeFunctionData({
@@ -22,6 +31,15 @@ export function encodeCallsLA(calls) {
22
31
  args: hasValue ? [targets, values, datas] : [targets, datas],
23
32
  });
24
33
  }
34
+ /**
35
+ * Decodes LightAccount calldata back into an array of calls.
36
+ * Used internally by the LightAccount SmartAccount implementation. Typically not needed
37
+ * directly unless you have an advanced use case.
38
+ *
39
+ * @param {Hex} data The calldata to decode.
40
+ * @param {Address} accountAddress The account address, used as the `to` for unrecognized selectors.
41
+ * @returns {Call[]} The decoded calls.
42
+ */
25
43
  export function decodeCallsLA(data, accountAddress) {
26
44
  const decoded = decodeFunctionData({
27
45
  abi: LightAccountAbi_v1,
@@ -41,7 +59,7 @@ export function decodeCallsLA(data, accountAddress) {
41
59
  if (isThreeTupleArray(decoded.args)) {
42
60
  const [targets, values, datas] = decoded.args;
43
61
  if (targets.length !== values.length || targets.length !== datas.length) {
44
- throw new Error("Invalid arguments for executeBatch");
62
+ throw new BaseError("Invalid arguments for executeBatch");
45
63
  }
46
64
  return targets.map((to, index) => ({
47
65
  to,
@@ -52,7 +70,7 @@ export function decodeCallsLA(data, accountAddress) {
52
70
  // Two tuple array (no values)
53
71
  const [targets, datas] = decoded.args;
54
72
  if (targets.length !== datas.length) {
55
- throw new Error("Invalid arguments for executeBatch");
73
+ throw new BaseError("Invalid arguments for executeBatch");
56
74
  }
57
75
  return targets.map((to, index) => ({
58
76
  to,
@@ -1 +1 @@
1
- {"version":3,"file":"calldataCodec.js","sourceRoot":"","sources":["../../../../src/light-account/accounts/calldataCodec.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n decodeFunctionData,\n encodeFunctionData,\n type Address,\n type Call,\n type Hex,\n} from \"viem\";\nimport { LightAccountAbi_v1 } from \"../abis/LightAccountAbi_v1.js\";\n\n// Conveniently, all variants of LA up to v2.0.0 use the same function signatures for `execute` and `executeBatch`.\n\nexport function encodeCallsLA(calls: readonly Call[]): Hex {\n if (calls.length === 1) {\n return encodeFunctionData({\n abi: LightAccountAbi_v1,\n functionName: \"execute\",\n args: [calls[0].to, calls[0].value ?? 0n, calls[0].data ?? \"0x\"],\n });\n }\n\n const [targets, values, datas, hasValue] = calls.reduce(\n (accum, curr) => {\n accum[0].push(curr.to);\n accum[1].push(curr.value ?? 0n);\n accum[2].push(curr.data ?? \"0x\");\n accum[3] = accum[3] || (curr.value ?? 0n) !== 0n;\n return accum;\n },\n [[], [], [], false] as [Address[], bigint[], Hex[], boolean],\n );\n\n return encodeFunctionData({\n abi: LightAccountAbi_v1,\n functionName: \"executeBatch\",\n args: hasValue ? [targets, values, datas] : [targets, datas],\n });\n}\n\nexport function decodeCallsLA(data: Hex, accountAddress: Address): Call[] {\n const decoded = decodeFunctionData({\n abi: LightAccountAbi_v1,\n data,\n });\n\n if (decoded.functionName === \"execute\") {\n return [\n {\n to: decoded.args[0],\n data: decoded.args[2],\n ...(decoded.args[1] !== undefined ? { value: decoded.args[1] } : {}),\n },\n ];\n }\n\n if (decoded.functionName === \"executeBatch\") {\n // This function is overloaded - may or may not have an array for values.\n\n if (isThreeTupleArray(decoded.args)) {\n const [targets, values, datas] = decoded.args;\n\n if (targets.length !== values.length || targets.length !== datas.length) {\n throw new Error(\"Invalid arguments for executeBatch\");\n }\n\n return targets.map((to, index) => ({\n to,\n value: values[index],\n data: datas[index],\n }));\n }\n\n // Two tuple array (no values)\n const [targets, datas] = decoded.args;\n\n if (targets.length !== datas.length) {\n throw new Error(\"Invalid arguments for executeBatch\");\n }\n\n return targets.map((to, index) => ({\n to,\n data: datas[index],\n }));\n }\n\n // Otherwise, treat the call as a single call to the account itself.\n return [\n {\n to: accountAddress,\n data,\n },\n ];\n}\n\n// Needed to narrow types for LAv1 `executeBatch` function.\nfunction isThreeTupleArray(\n input:\n | readonly [readonly Address[], readonly Hex[]]\n | readonly [readonly Address[], readonly bigint[], readonly Hex[]],\n): input is readonly [readonly Address[], readonly bigint[], readonly Hex[]] {\n return input.length === 3;\n}\n"]}
1
+ {"version":3,"file":"calldataCodec.js","sourceRoot":"","sources":["../../../../src/light-account/accounts/calldataCodec.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n decodeFunctionData,\n encodeFunctionData,\n type Address,\n type Call,\n type Hex,\n} from \"viem\";\nimport { LightAccountAbi_v1 } from \"../abis/LightAccountAbi_v1.js\";\nimport { BaseError } from \"@alchemy/common\";\n\n// Conveniently, all variants of LA up to v2.0.0 use the same function signatures for `execute` and `executeBatch`.\n\n/**\n * Encodes an array of calls into LightAccount calldata for `execute` or `executeBatch`.\n * Used internally by the LightAccount SmartAccount implementation. Typically not needed\n * directly unless you have an advanced use case.\n *\n * @param {Call[]} calls The calls to encode.\n * @returns {Hex} The encoded calldata.\n */\nexport function encodeCallsLA(calls: readonly Call[]): Hex {\n if (calls.length === 1) {\n return encodeFunctionData({\n abi: LightAccountAbi_v1,\n functionName: \"execute\",\n args: [calls[0].to, calls[0].value ?? 0n, calls[0].data ?? \"0x\"],\n });\n }\n\n const [targets, values, datas, hasValue] = calls.reduce(\n (accum, curr) => {\n accum[0].push(curr.to);\n accum[1].push(curr.value ?? 0n);\n accum[2].push(curr.data ?? \"0x\");\n accum[3] = accum[3] || (curr.value ?? 0n) !== 0n;\n return accum;\n },\n [[], [], [], false] as [Address[], bigint[], Hex[], boolean],\n );\n\n return encodeFunctionData({\n abi: LightAccountAbi_v1,\n functionName: \"executeBatch\",\n args: hasValue ? [targets, values, datas] : [targets, datas],\n });\n}\n\n/**\n * Decodes LightAccount calldata back into an array of calls.\n * Used internally by the LightAccount SmartAccount implementation. Typically not needed\n * directly unless you have an advanced use case.\n *\n * @param {Hex} data The calldata to decode.\n * @param {Address} accountAddress The account address, used as the `to` for unrecognized selectors.\n * @returns {Call[]} The decoded calls.\n */\nexport function decodeCallsLA(data: Hex, accountAddress: Address): Call[] {\n const decoded = decodeFunctionData({\n abi: LightAccountAbi_v1,\n data,\n });\n\n if (decoded.functionName === \"execute\") {\n return [\n {\n to: decoded.args[0],\n data: decoded.args[2],\n ...(decoded.args[1] !== undefined ? { value: decoded.args[1] } : {}),\n },\n ];\n }\n\n if (decoded.functionName === \"executeBatch\") {\n // This function is overloaded - may or may not have an array for values.\n\n if (isThreeTupleArray(decoded.args)) {\n const [targets, values, datas] = decoded.args;\n\n if (targets.length !== values.length || targets.length !== datas.length) {\n throw new BaseError(\"Invalid arguments for executeBatch\");\n }\n\n return targets.map((to, index) => ({\n to,\n value: values[index],\n data: datas[index],\n }));\n }\n\n // Two tuple array (no values)\n const [targets, datas] = decoded.args;\n\n if (targets.length !== datas.length) {\n throw new BaseError(\"Invalid arguments for executeBatch\");\n }\n\n return targets.map((to, index) => ({\n to,\n data: datas[index],\n }));\n }\n\n // Otherwise, treat the call as a single call to the account itself.\n return [\n {\n to: accountAddress,\n data,\n },\n ];\n}\n\n// Needed to narrow types for LAv1 `executeBatch` function.\nfunction isThreeTupleArray(\n input:\n | readonly [readonly Address[], readonly Hex[]]\n | readonly [readonly Address[], readonly bigint[], readonly Hex[]],\n): input is readonly [readonly Address[], readonly bigint[], readonly Hex[]] {\n return input.length === 3;\n}\n"]}