@alchemy/smart-accounts 5.0.0-beta.2 → 5.0.0-beta.4

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 (38) hide show
  1. package/dist/esm/index.d.ts +3 -0
  2. package/dist/esm/index.js +3 -0
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/light-account/accounts/calldataCodec.d.ts +17 -0
  5. package/dist/esm/light-account/accounts/calldataCodec.js +17 -0
  6. package/dist/esm/light-account/accounts/calldataCodec.js.map +1 -1
  7. package/dist/esm/ma-v1/accounts/base.js +5 -49
  8. package/dist/esm/ma-v1/accounts/base.js.map +1 -1
  9. package/dist/esm/ma-v1/accounts/calldataCodec.d.ts +20 -0
  10. package/dist/esm/ma-v1/accounts/calldataCodec.js +69 -0
  11. package/dist/esm/ma-v1/accounts/calldataCodec.js.map +1 -0
  12. package/dist/esm/ma-v2/accounts/base.js +6 -53
  13. package/dist/esm/ma-v2/accounts/base.js.map +1 -1
  14. package/dist/esm/ma-v2/accounts/calldataCodec.d.ts +20 -0
  15. package/dist/esm/ma-v2/accounts/calldataCodec.js +77 -0
  16. package/dist/esm/ma-v2/accounts/calldataCodec.js.map +1 -0
  17. package/dist/esm/version.d.ts +1 -1
  18. package/dist/esm/version.js +1 -1
  19. package/dist/esm/version.js.map +1 -1
  20. package/dist/types/index.d.ts +3 -0
  21. package/dist/types/index.d.ts.map +1 -1
  22. package/dist/types/light-account/accounts/calldataCodec.d.ts +17 -0
  23. package/dist/types/light-account/accounts/calldataCodec.d.ts.map +1 -1
  24. package/dist/types/ma-v1/accounts/base.d.ts.map +1 -1
  25. package/dist/types/ma-v1/accounts/calldataCodec.d.ts +21 -0
  26. package/dist/types/ma-v1/accounts/calldataCodec.d.ts.map +1 -0
  27. package/dist/types/ma-v2/accounts/base.d.ts.map +1 -1
  28. package/dist/types/ma-v2/accounts/calldataCodec.d.ts +21 -0
  29. package/dist/types/ma-v2/accounts/calldataCodec.d.ts.map +1 -0
  30. package/dist/types/version.d.ts +1 -1
  31. package/package.json +4 -4
  32. package/src/index.ts +15 -0
  33. package/src/light-account/accounts/calldataCodec.ts +17 -0
  34. package/src/ma-v1/accounts/base.ts +3 -54
  35. package/src/ma-v1/accounts/calldataCodec.ts +80 -0
  36. package/src/ma-v2/accounts/base.ts +5 -67
  37. package/src/ma-v2/accounts/calldataCodec.ts +89 -0
  38. package/src/version.ts +1 -1
@@ -0,0 +1,89 @@
1
+ import {
2
+ decodeFunctionData,
3
+ encodeFunctionData,
4
+ type Address,
5
+ type Call,
6
+ type Hex,
7
+ } from "viem";
8
+ import { sliceHex } from "viem/utils";
9
+ import { modularAccountAbi } from "../abis/modularAccountAbi.js";
10
+ import { EXECUTE_USER_OP_SELECTOR } from "../utils/account.js";
11
+
12
+ /**
13
+ * Encodes an array of calls into ModularAccountV2 calldata for `execute` or `executeBatch`.
14
+ * Used internally by the ModularAccountV2 SmartAccount implementation. Typically not needed
15
+ * directly unless you have an advanced use case.
16
+ *
17
+ * @param {Call[]} calls The calls to encode.
18
+ * @returns {Hex} The encoded calldata.
19
+ */
20
+ export function encodeCallsMAv2(calls: readonly Call[]): Hex {
21
+ if (calls.length === 1) {
22
+ return encodeFunctionData({
23
+ abi: modularAccountAbi,
24
+ functionName: "execute",
25
+ args: [calls[0].to, calls[0].value ?? 0n, calls[0].data ?? "0x"],
26
+ });
27
+ }
28
+
29
+ return encodeFunctionData({
30
+ abi: modularAccountAbi,
31
+ functionName: "executeBatch",
32
+ args: [
33
+ calls.map((call) => ({
34
+ target: call.to,
35
+ data: call.data ?? "0x",
36
+ value: call.value ?? 0n,
37
+ })),
38
+ ],
39
+ });
40
+ }
41
+
42
+ /**
43
+ * Decodes ModularAccountV2 calldata back into an array of calls. Strips the `EXECUTE_USER_OP_SELECTOR` prefix if present.
44
+ * Used internally by the ModularAccountV2 SmartAccount implementation. Typically not needed
45
+ * directly unless you have an advanced use case.
46
+ *
47
+ * @param {Hex} data The calldata to decode.
48
+ * @param {Address} accountAddress The account address, used as the `to` for unrecognized selectors.
49
+ * @returns {Call[]} The decoded calls.
50
+ */
51
+ export function decodeCallsMAv2(data: Hex, accountAddress: Address): Call[] {
52
+ // Strip the EXECUTE_USER_OP_SELECTOR prefix if present.
53
+ const trimmedData = data
54
+ .toLowerCase()
55
+ .startsWith(EXECUTE_USER_OP_SELECTOR.toLowerCase())
56
+ ? sliceHex(data, 4)
57
+ : data;
58
+
59
+ const decoded = decodeFunctionData({
60
+ abi: modularAccountAbi,
61
+ data: trimmedData,
62
+ });
63
+
64
+ if (decoded.functionName === "execute") {
65
+ return [
66
+ {
67
+ to: decoded.args[0],
68
+ value: decoded.args[1],
69
+ data: decoded.args[2],
70
+ },
71
+ ];
72
+ }
73
+
74
+ if (decoded.functionName === "executeBatch") {
75
+ return decoded.args[0].map((call) => ({
76
+ to: call.target,
77
+ value: call.value,
78
+ data: call.data,
79
+ }));
80
+ }
81
+
82
+ // If the data is not for an `execute` or `executeBatch` call, treat it as a single call to the account itself.
83
+ return [
84
+ {
85
+ to: accountAddress,
86
+ data,
87
+ },
88
+ ];
89
+ }
package/src/version.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  // This file is autogenerated by inject-version.ts. Any changes will be
2
2
  // overwritten on commit!
3
- export const VERSION = "5.0.0-beta.2";
3
+ export const VERSION = "5.0.0-beta.4";