viem 2.22.16 → 2.22.19

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 (98) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/_cjs/actions/public/simulate.js +1 -1
  3. package/_cjs/actions/public/simulate.js.map +1 -1
  4. package/_cjs/chains/definitions/forta.js +25 -0
  5. package/_cjs/chains/definitions/forta.js.map +1 -0
  6. package/_cjs/chains/definitions/sidra.js +25 -0
  7. package/_cjs/chains/definitions/sidra.js.map +1 -0
  8. package/_cjs/chains/definitions/songbird.js +6 -0
  9. package/_cjs/chains/definitions/songbird.js.map +1 -1
  10. package/_cjs/chains/definitions/wmcTestnet.js +22 -0
  11. package/_cjs/chains/definitions/wmcTestnet.js.map +1 -0
  12. package/_cjs/chains/index.js +14 -8
  13. package/_cjs/chains/index.js.map +1 -1
  14. package/_cjs/clients/transports/fallback.js +2 -0
  15. package/_cjs/clients/transports/fallback.js.map +1 -1
  16. package/_cjs/errors/version.js +1 -1
  17. package/_cjs/experimental/erc7821/actions/execute.js +36 -26
  18. package/_cjs/experimental/erc7821/actions/execute.js.map +1 -1
  19. package/_cjs/experimental/erc7821/actions/executeBatches.js +80 -0
  20. package/_cjs/experimental/erc7821/actions/executeBatches.js.map +1 -0
  21. package/_cjs/experimental/erc7821/actions/supportsExecutionMode.js +11 -3
  22. package/_cjs/experimental/erc7821/actions/supportsExecutionMode.js.map +1 -1
  23. package/_cjs/experimental/erc7821/constants.js +1 -0
  24. package/_cjs/experimental/erc7821/constants.js.map +1 -1
  25. package/_cjs/experimental/erc7821/decorators/erc7821.js +2 -0
  26. package/_cjs/experimental/erc7821/decorators/erc7821.js.map +1 -1
  27. package/_cjs/experimental/erc7821/index.js +3 -1
  28. package/_cjs/experimental/erc7821/index.js.map +1 -1
  29. package/_esm/actions/public/simulate.js +1 -1
  30. package/_esm/actions/public/simulate.js.map +1 -1
  31. package/_esm/chains/definitions/forta.js +22 -0
  32. package/_esm/chains/definitions/forta.js.map +1 -0
  33. package/_esm/chains/definitions/sidra.js +22 -0
  34. package/_esm/chains/definitions/sidra.js.map +1 -0
  35. package/_esm/chains/definitions/songbird.js +6 -0
  36. package/_esm/chains/definitions/songbird.js.map +1 -1
  37. package/_esm/chains/definitions/wmcTestnet.js +19 -0
  38. package/_esm/chains/definitions/wmcTestnet.js.map +1 -0
  39. package/_esm/chains/index.js +3 -0
  40. package/_esm/chains/index.js.map +1 -1
  41. package/_esm/clients/transports/fallback.js +2 -0
  42. package/_esm/clients/transports/fallback.js.map +1 -1
  43. package/_esm/errors/version.js +1 -1
  44. package/_esm/experimental/erc7821/actions/execute.js +36 -26
  45. package/_esm/experimental/erc7821/actions/execute.js.map +1 -1
  46. package/_esm/experimental/erc7821/actions/executeBatches.js +168 -0
  47. package/_esm/experimental/erc7821/actions/executeBatches.js.map +1 -0
  48. package/_esm/experimental/erc7821/actions/supportsExecutionMode.js +11 -3
  49. package/_esm/experimental/erc7821/actions/supportsExecutionMode.js.map +1 -1
  50. package/_esm/experimental/erc7821/constants.js +1 -0
  51. package/_esm/experimental/erc7821/constants.js.map +1 -1
  52. package/_esm/experimental/erc7821/decorators/erc7821.js +2 -0
  53. package/_esm/experimental/erc7821/decorators/erc7821.js.map +1 -1
  54. package/_esm/experimental/erc7821/index.js +1 -1
  55. package/_esm/experimental/erc7821/index.js.map +1 -1
  56. package/_types/actions/public/simulate.d.ts.map +1 -1
  57. package/_types/chains/definitions/forta.d.ts +37 -0
  58. package/_types/chains/definitions/forta.d.ts.map +1 -0
  59. package/_types/chains/definitions/sidra.d.ts +37 -0
  60. package/_types/chains/definitions/sidra.d.ts.map +1 -0
  61. package/_types/chains/definitions/songbird.d.ts +6 -10
  62. package/_types/chains/definitions/songbird.d.ts.map +1 -1
  63. package/_types/chains/definitions/wmcTestnet.d.ts +37 -0
  64. package/_types/chains/definitions/wmcTestnet.d.ts.map +1 -0
  65. package/_types/chains/index.d.ts +3 -0
  66. package/_types/chains/index.d.ts.map +1 -1
  67. package/_types/clients/transports/fallback.d.ts.map +1 -1
  68. package/_types/errors/version.d.ts +1 -1
  69. package/_types/experimental/erc7821/actions/execute.d.ts +2 -0
  70. package/_types/experimental/erc7821/actions/execute.d.ts.map +1 -1
  71. package/_types/experimental/erc7821/actions/executeBatches.d.ts +124 -0
  72. package/_types/experimental/erc7821/actions/executeBatches.d.ts.map +1 -0
  73. package/_types/experimental/erc7821/actions/supportsExecutionMode.d.ts +1 -1
  74. package/_types/experimental/erc7821/actions/supportsExecutionMode.d.ts.map +1 -1
  75. package/_types/experimental/erc7821/constants.d.ts +1 -0
  76. package/_types/experimental/erc7821/constants.d.ts.map +1 -1
  77. package/_types/experimental/erc7821/decorators/erc7821.d.ts +93 -0
  78. package/_types/experimental/erc7821/decorators/erc7821.d.ts.map +1 -1
  79. package/_types/experimental/erc7821/index.d.ts +1 -1
  80. package/_types/experimental/erc7821/index.d.ts.map +1 -1
  81. package/_types/types/calls.d.ts +21 -0
  82. package/_types/types/calls.d.ts.map +1 -1
  83. package/actions/public/simulate.ts +8 -7
  84. package/chains/definitions/forta.ts +22 -0
  85. package/chains/definitions/sidra.ts +22 -0
  86. package/chains/definitions/songbird.ts +6 -0
  87. package/chains/definitions/wmcTestnet.ts +19 -0
  88. package/chains/index.ts +3 -0
  89. package/clients/transports/fallback.ts +2 -0
  90. package/errors/version.ts +1 -1
  91. package/experimental/erc7821/actions/execute.ts +48 -36
  92. package/experimental/erc7821/actions/executeBatches.ts +254 -0
  93. package/experimental/erc7821/actions/supportsExecutionMode.ts +22 -9
  94. package/experimental/erc7821/constants.ts +2 -0
  95. package/experimental/erc7821/decorators/erc7821.ts +109 -0
  96. package/experimental/erc7821/index.ts +6 -1
  97. package/package.json +1 -1
  98. package/types/calls.ts +18 -0
@@ -0,0 +1,124 @@
1
+ import type { Address, Narrow } from 'abitype';
2
+ import { type SendTransactionErrorType } from '../../../actions/wallet/sendTransaction.js';
3
+ import type { Client } from '../../../clients/createClient.js';
4
+ import type { Transport } from '../../../clients/transports/createTransport.js';
5
+ import type { ErrorType } from '../../../errors/utils.js';
6
+ import type { Account, GetAccountParameter } from '../../../types/account.js';
7
+ import type { Batches } from '../../../types/calls.js';
8
+ import type { Chain, DeriveChain, GetChainParameter } from '../../../types/chain.js';
9
+ import type { Hex } from '../../../types/misc.js';
10
+ import type { UnionEvaluate, UnionPick } from '../../../types/utils.js';
11
+ import { type DecodeErrorResultErrorType } from '../../../utils/abi/decodeErrorResult.js';
12
+ import { type EncodeFunctionDataErrorType } from '../../../utils/abi/encodeFunctionData.js';
13
+ import { type GetContractErrorReturnType } from '../../../utils/errors/getContractError.js';
14
+ import type { FormattedTransactionRequest } from '../../../utils/formatters/transactionRequest.js';
15
+ /** @internal */
16
+ export type Batch = {
17
+ calls: readonly unknown[];
18
+ opData?: Hex | undefined;
19
+ };
20
+ export type ExecuteBatchesParameters<batches extends readonly Batch[] = readonly Batch[], chain extends Chain | undefined = Chain | undefined, account extends Account | undefined = Account | undefined, chainOverride extends Chain | undefined = Chain | undefined, _derivedChain extends Chain | undefined = DeriveChain<chain, chainOverride>> = UnionEvaluate<UnionPick<FormattedTransactionRequest<_derivedChain>, 'authorizationList' | 'gas' | 'gasPrice' | 'maxFeePerGas' | 'maxPriorityFeePerGas'>> & GetAccountParameter<account, Account | Address, true, true> & GetChainParameter<chain, chainOverride> & {
21
+ /** Address that will execute the calls. */
22
+ address: Address;
23
+ /** Batches to execute. */
24
+ batches: Batches<Narrow<batches>, {
25
+ opData?: Hex | undefined;
26
+ }>;
27
+ /** Additional data to include for execution. */
28
+ opData?: Hex | undefined;
29
+ };
30
+ export type ExecuteBatchesReturnType = Hex;
31
+ export type ExecuteBatchesErrorType = DecodeErrorResultErrorType | GetContractErrorReturnType | EncodeFunctionDataErrorType | SendTransactionErrorType | ErrorType;
32
+ /**
33
+ * Executes batches of call(s) using "batch of batches" mode on an [ERC-7821-compatible contract](https://eips.ethereum.org/EIPS/eip-7821).
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * import { createClient, http, parseEther } from 'viem'
38
+ * import { privateKeyToAccount } from 'viem/accounts'
39
+ * import { mainnet } from 'viem/chains'
40
+ * import { executeBatches } from 'viem/experimental/erc7821'
41
+ *
42
+ * const account = privateKeyToAccount('0x...')
43
+ *
44
+ * const client = createClient({
45
+ * chain: mainnet,
46
+ * transport: http(),
47
+ * })
48
+ *
49
+ * const hash = await executeBatches(client, {
50
+ * account,
51
+ * batches: [
52
+ * {
53
+ * calls: [
54
+ * {
55
+ * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
56
+ * value: parseEther('1'),
57
+ * },
58
+ * ],
59
+ * },
60
+ * {
61
+ * calls: [
62
+ * {
63
+ * to: '0xcb98643b8786950F0461f3B0edf99D88F274574D',
64
+ * value: parseEther('2'),
65
+ * },
66
+ * {
67
+ * data: '0xdeadbeef',
68
+ * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
69
+ * },
70
+ * ],
71
+ * },
72
+ * ],
73
+ * to: account.address,
74
+ * })
75
+ * ```
76
+ *
77
+ * @example
78
+ * ```ts
79
+ * // Account Hoisting
80
+ * import { createClient, http, parseEther } from 'viem'
81
+ * import { privateKeyToAccount } from 'viem/accounts'
82
+ * import { mainnet } from 'viem/chains'
83
+ * import { executeBatches } from 'viem/experimental/erc7821'
84
+ *
85
+ * const account = privateKeyToAccount('0x...')
86
+ *
87
+ * const client = createClient({
88
+ * chain: mainnet,
89
+ * transport: http(),
90
+ * })
91
+ *
92
+ * const hash = await executeBatches(client, {
93
+ * batches: [
94
+ * {
95
+ * calls: [
96
+ * {
97
+ * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
98
+ * value: parseEther('1'),
99
+ * },
100
+ * ],
101
+ * },
102
+ * {
103
+ * calls: [
104
+ * {
105
+ * to: '0xcb98643b8786950F0461f3B0edf99D88F274574D',
106
+ * value: parseEther('2'),
107
+ * },
108
+ * {
109
+ * data: '0xdeadbeef',
110
+ * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
111
+ * },
112
+ * ],
113
+ * },
114
+ * ],
115
+ * to: account.address,
116
+ * })
117
+ * ```
118
+ *
119
+ * @param client - Client to use.
120
+ * @param parameters - {@link ExecuteBatchesParameters}
121
+ * @returns Transaction hash. {@link ExecuteBatchesReturnType}
122
+ */
123
+ export declare function executeBatches<batches extends readonly Batch[], chain extends Chain | undefined, account extends Account | undefined, chainOverride extends Chain | undefined = undefined>(client: Client<Transport, chain, account>, parameters: ExecuteBatchesParameters<batches, chain, account, chainOverride>): Promise<ExecuteBatchesReturnType>;
124
+ //# sourceMappingURL=executeBatches.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executeBatches.d.ts","sourceRoot":"","sources":["../../../../experimental/erc7821/actions/executeBatches.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import type { Chain } from '../../../types/chain.js';
6
6
  import type { Hex } from '../../../types/misc.js';
7
7
  export type SupportsExecutionModeParameters = {
8
8
  address: Address;
9
- opData?: Hex | undefined;
9
+ mode?: 'default' | 'opData' | 'batchOfBatches' | Hex;
10
10
  };
11
11
  export type SupportsExecutionModeReturnType = boolean;
12
12
  export type SupportsExecutionModeErrorType = ErrorType;
@@ -1 +1 @@
1
- {"version":3,"file":"supportsExecutionMode.d.ts","sourceRoot":"","sources":["../../../../experimental/erc7821/actions/supportsExecutionMode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAA;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAA;AAGjD,MAAM,MAAM,+BAA+B,GAAG;IAC5C,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,GAAG,GAAG,SAAS,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,+BAA+B,GAAG,OAAO,CAAA;AAErD,MAAM,MAAM,8BAA8B,GAAG,SAAS,CAAA;AAEtD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,EAEnD,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,EAChC,UAAU,EAAE,+BAA+B,GAC1C,OAAO,CAAC,+BAA+B,CAAC,CAa1C"}
1
+ {"version":3,"file":"supportsExecutionMode.d.ts","sourceRoot":"","sources":["../../../../experimental/erc7821/actions/supportsExecutionMode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAA;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAA;AAIjD,MAAM,MAAM,+BAA+B,GAAG;IAC5C,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,gBAAgB,GAAG,GAAG,CAAA;CACrD,CAAA;AAED,MAAM,MAAM,+BAA+B,GAAG,OAAO,CAAA;AAErD,MAAM,MAAM,8BAA8B,GAAG,SAAS,CAAA;AAQtD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,EAEnD,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,EAChC,UAAU,EAAE,+BAA+B,GAC1C,OAAO,CAAC,+BAA+B,CAAC,CAmB1C"}
@@ -44,5 +44,6 @@ export declare const abi: readonly [{
44
44
  export declare const executionMode: {
45
45
  readonly default: "0x0100000000000000000000000000000000000000000000000000000000000000";
46
46
  readonly opData: "0x0100000000007821000100000000000000000000000000000000000000000000";
47
+ readonly batchOfBatches: "0x0100000000007821000200000000000000000000000000000000000000000000";
47
48
  };
48
49
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../experimental/erc7821/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwDN,CAAA;AAEV,eAAO,MAAM,aAAa;;;CAGhB,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../experimental/erc7821/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwDN,CAAA;AAEV,eAAO,MAAM,aAAa;;;;CAKhB,CAAA"}
@@ -3,6 +3,7 @@ import type { Transport } from '../../../clients/transports/createTransport.js';
3
3
  import type { Account } from '../../../types/account.js';
4
4
  import type { Chain } from '../../../types/chain.js';
5
5
  import { type ExecuteParameters, type ExecuteReturnType } from '../actions/execute.js';
6
+ import { type Batch, type ExecuteBatchesParameters, type ExecuteBatchesReturnType } from '../actions/executeBatches.js';
6
7
  import { type SupportsExecutionModeParameters, type SupportsExecutionModeReturnType } from '../actions/supportsExecutionMode.js';
7
8
  export type Erc7821Actions<chain extends Chain | undefined = Chain | undefined, account extends Account | undefined = Account | undefined> = {
8
9
  /**
@@ -74,6 +75,98 @@ export type Erc7821Actions<chain extends Chain | undefined = Chain | undefined,
74
75
  * @returns Transaction hash. {@link ExecuteReturnType}
75
76
  */
76
77
  execute: <const calls extends readonly unknown[], chainOverride extends Chain | undefined = undefined>(parameters: ExecuteParameters<calls, chain, account, chainOverride>) => Promise<ExecuteReturnType>;
78
+ /**
79
+ * Executes batches of call(s) using "batch of batches" mode on an [ERC-7821-compatible contract](https://eips.ethereum.org/EIPS/eip-7821).
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * import { createClient, http, parseEther } from 'viem'
84
+ * import { privateKeyToAccount } from 'viem/accounts'
85
+ * import { mainnet } from 'viem/chains'
86
+ * import { erc7821Actions } from 'viem/experimental'
87
+ *
88
+ * const account = privateKeyToAccount('0x...')
89
+ *
90
+ * const client = createClient({
91
+ * chain: mainnet,
92
+ * transport: http(),
93
+ * }).extend(erc7821Actions())
94
+ *
95
+ * const hash = await client.executeBatches({
96
+ * account,
97
+ * batches: [
98
+ * {
99
+ * calls: [
100
+ * {
101
+ * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
102
+ * value: parseEther('1'),
103
+ * },
104
+ * ],
105
+ * },
106
+ * {
107
+ * calls: [
108
+ * {
109
+ * to: '0xcb98643b8786950F0461f3B0edf99D88F274574D',
110
+ * value: parseEther('2'),
111
+ * },
112
+ * {
113
+ * data: '0xdeadbeef',
114
+ * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
115
+ * },
116
+ * ],
117
+ * },
118
+ * ],
119
+ * to: account.address,
120
+ * })
121
+ * ```
122
+ *
123
+ * @example
124
+ * ```ts
125
+ * // Account Hoisting
126
+ * import { createClient, http, parseEther } from 'viem'
127
+ * import { privateKeyToAccount } from 'viem/accounts'
128
+ * import { mainnet } from 'viem/chains'
129
+ * import { erc7821Actions } from 'viem/experimental'
130
+ *
131
+ * const account = privateKeyToAccount('0x...')
132
+ *
133
+ * const client = createClient({
134
+ * chain: mainnet,
135
+ * transport: http(),
136
+ * }).extend(erc7821Actions())
137
+ *
138
+ * const hash = await client.executeBatches({
139
+ * batches: [
140
+ * {
141
+ * calls: [
142
+ * {
143
+ * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
144
+ * value: parseEther('1'),
145
+ * },
146
+ * ],
147
+ * },
148
+ * {
149
+ * calls: [
150
+ * {
151
+ * to: '0xcb98643b8786950F0461f3B0edf99D88F274574D',
152
+ * value: parseEther('2'),
153
+ * },
154
+ * {
155
+ * data: '0xdeadbeef',
156
+ * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
157
+ * },
158
+ * ],
159
+ * },
160
+ * ],
161
+ * to: account.address,
162
+ * })
163
+ * ```
164
+ *
165
+ * @param client - Client to use.
166
+ * @param parameters - {@link ExecuteBatchesParameters}
167
+ * @returns Transaction hash. {@link ExecuteBatchesReturnType}
168
+ */
169
+ executeBatches: <const batches extends readonly Batch[], chainOverride extends Chain | undefined = undefined>(parameters: ExecuteBatchesParameters<batches, chain, account, chainOverride>) => Promise<ExecuteBatchesReturnType>;
77
170
  /**
78
171
  * Checks if the contract supports the ERC-7821 execution mode.
79
172
  *
@@ -1 +1 @@
1
- {"version":3,"file":"erc7821.d.ts","sourceRoot":"","sources":["../../../../experimental/erc7821/decorators/erc7821.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAA;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EAEvB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EAErC,MAAM,qCAAqC,CAAA;AAE5C,MAAM,MAAM,cAAc,CACxB,KAAK,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,EACnD,OAAO,SAAS,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,IACvD;IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmEG;IACH,OAAO,EAAE,CACP,KAAK,CAAC,KAAK,SAAS,SAAS,OAAO,EAAE,EACtC,aAAa,SAAS,KAAK,GAAG,SAAS,GAAG,SAAS,EAEnD,UAAU,EAAE,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,KAChE,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC/B;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,qBAAqB,EAAE,CACrB,UAAU,EAAE,+BAA+B,KACxC,OAAO,CAAC,+BAA+B,CAAC,CAAA;CAC9C,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,KAE1B,SAAS,SAAS,SAAS,EAC3B,KAAK,SAAS,KAAK,GAAG,SAAS,sBAC/B,OAAO,SAAS,OAAO,GAAG,SAAS,gCAE3B,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KACxC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAOlC"}
1
+ {"version":3,"file":"erc7821.d.ts","sourceRoot":"","sources":["../../../../experimental/erc7821/decorators/erc7821.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAA;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EAEvB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,KAAK,KAAK,EACV,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAE9B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EAErC,MAAM,qCAAqC,CAAA;AAE5C,MAAM,MAAM,cAAc,CACxB,KAAK,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,EACnD,OAAO,SAAS,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,IACvD;IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmEG;IACH,OAAO,EAAE,CACP,KAAK,CAAC,KAAK,SAAS,SAAS,OAAO,EAAE,EACtC,aAAa,SAAS,KAAK,GAAG,SAAS,GAAG,SAAS,EAEnD,UAAU,EAAE,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,KAChE,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0FG;IACH,cAAc,EAAE,CACd,KAAK,CAAC,OAAO,SAAS,SAAS,KAAK,EAAE,EACtC,aAAa,SAAS,KAAK,GAAG,SAAS,GAAG,SAAS,EAEnD,UAAU,EAAE,wBAAwB,CAClC,OAAO,EACP,KAAK,EACL,OAAO,EACP,aAAa,CACd,KACE,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACtC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,qBAAqB,EAAE,CACrB,UAAU,EAAE,+BAA+B,KACxC,OAAO,CAAC,+BAA+B,CAAC,CAAA;CAC9C,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,KAE1B,SAAS,SAAS,SAAS,EAC3B,KAAK,SAAS,KAAK,GAAG,SAAS,sBAC/B,OAAO,SAAS,OAAO,GAAG,SAAS,gCAE3B,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KACxC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAQlC"}
@@ -1,5 +1,5 @@
1
- /** */
2
1
  export { type ExecuteErrorType, type ExecuteParameters, type ExecuteReturnType, execute, } from './actions/execute.js';
2
+ export { type ExecuteBatchesErrorType, type ExecuteBatchesParameters, type ExecuteBatchesReturnType, executeBatches, } from './actions/executeBatches.js';
3
3
  export { type SupportsExecutionModeErrorType, type SupportsExecutionModeParameters, type SupportsExecutionModeReturnType, supportsExecutionMode, } from './actions/supportsExecutionMode.js';
4
4
  export { ExecuteUnsupportedError, type ExecuteUnsupportedErrorType, FunctionSelectorNotRecognizedError, type FunctionSelectorNotRecognizedErrorType, } from './errors.js';
5
5
  export { type Erc7821Actions, erc7821Actions } from './decorators/erc7821.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../experimental/erc7821/index.ts"],"names":[],"mappings":"AAAA,OAAO;AAEP,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,OAAO,GACR,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACpC,qBAAqB,GACtB,MAAM,oCAAoC,CAAA;AAE3C,OAAO,EACL,uBAAuB,EACvB,KAAK,2BAA2B,EAChC,kCAAkC,EAClC,KAAK,sCAAsC,GAC5C,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,KAAK,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../experimental/erc7821/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,OAAO,GACR,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,cAAc,GACf,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACpC,qBAAqB,GACtB,MAAM,oCAAoC,CAAA;AAE3C,OAAO,EACL,uBAAuB,EACvB,KAAK,2BAA2B,EAChC,kCAAkC,EAClC,KAAK,sCAAsC,GAC5C,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,KAAK,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA"}
@@ -16,4 +16,25 @@ export type Calls<calls extends readonly unknown[], extraProperties extends Reco
16
16
  ...result,
17
17
  Prettify<Call<call, extraProperties>>
18
18
  ]> : readonly unknown[] extends calls ? calls : calls extends readonly (infer call extends OneOf<Call>)[] ? readonly Prettify<call>[] : readonly OneOf<Call>[];
19
+ export type Batches<batches extends readonly {
20
+ calls: readonly unknown[];
21
+ }[], properties extends Record<string, any> = {}, result extends readonly any[] = []> = batches extends readonly [infer batch extends {
22
+ calls: readonly unknown[];
23
+ }] ? [...result, {
24
+ calls: Calls<batch['calls']>;
25
+ } & properties] : batches extends readonly [
26
+ infer batch extends {
27
+ calls: readonly unknown[];
28
+ },
29
+ ...infer rest extends readonly {
30
+ calls: readonly unknown[];
31
+ }[]
32
+ ] ? Batches<[
33
+ ...rest
34
+ ], properties, [
35
+ ...result,
36
+ {
37
+ calls: Calls<batch['calls']>;
38
+ } & properties
39
+ ]> : batches;
19
40
  //# sourceMappingURL=calls.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../types/calls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAC1D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAA;AACpE,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAEjD,MAAM,MAAM,IAAI,CACd,IAAI,GAAG,OAAO,EACd,eAAe,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,IAClD,KAAK,CACL,CAAC,eAAe,GAAG;IACjB,IAAI,CAAC,EAAE,GAAG,GAAG,SAAS,CAAA;IACtB,EAAE,EAAE,OAAO,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B,CAAC,GACF,CAAC,eAAe,GACd,CAAC,IAAI,CACH,8BAA8B,CAAC,IAAI,EAAE,kBAAkB,CAAC,EACxD,SAAS,CACV,GAAG;IACF,EAAE,EAAE,OAAO,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B,CAAC,CAAC,CACR,CAAA;AAED,MAAM,MAAM,KAAK,CACf,KAAK,SAAS,SAAS,OAAO,EAAE,EAChC,eAAe,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,EAEpD,MAAM,SAAS,SAAS,GAAG,EAAE,GAAG,EAAE,IAChC,KAAK,SAAS,SAAS,EAAE,GACzB,SAAS,EAAE,GACX,KAAK,SAAS,SAAS,CAAC,MAAM,IAAI,CAAC,GACjC,SAAS,CAAC,GAAG,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,GAC3D,KAAK,SAAS,SAAS,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GAChD,KAAK,CACH;IAAC,GAAG,IAAI;CAAC,EACT,eAAe,EACf;IAAC,GAAG,MAAM;IAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;CAAC,CACnD,GACD,SAAS,OAAO,EAAE,SAAS,KAAK,GAC9B,KAAK,GAGL,KAAK,SAAS,SAAS,CAAC,MAAM,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GACvD,SAAS,QAAQ,CAAC,IAAI,CAAC,EAAE,GAEzB,SAAS,KAAK,CAAC,IAAI,CAAC,EAAE,CAAA"}
1
+ {"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../types/calls.ts"],"names":[],"mappings":"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"}
@@ -242,13 +242,14 @@ export async function simulate<
242
242
  const logs = call.logs?.map((log) => formatLog(log))
243
243
  const status = call.status === '0x1' ? 'success' : 'failure'
244
244
 
245
- const result = abi
246
- ? decodeFunctionResult({
247
- abi,
248
- data,
249
- functionName,
250
- })
251
- : null
245
+ const result =
246
+ abi && status === 'success'
247
+ ? decodeFunctionResult({
248
+ abi,
249
+ data,
250
+ functionName,
251
+ })
252
+ : null
252
253
 
253
254
  const error = (() => {
254
255
  if (status === 'success') return undefined
@@ -0,0 +1,22 @@
1
+ import { defineChain } from '../../utils/chain/defineChain.js'
2
+
3
+ export const forta = /*#__PURE__*/ defineChain({
4
+ id: 80_931,
5
+ name: 'Forta Chain',
6
+ nativeCurrency: {
7
+ symbol: 'FORT',
8
+ name: 'FORT',
9
+ decimals: 18,
10
+ },
11
+ rpcUrls: {
12
+ default: {
13
+ http: ['https://rpc-forta-chain-8gj1qndmfc.t.conduit.xyz'],
14
+ },
15
+ },
16
+ blockExplorers: {
17
+ default: {
18
+ name: 'Forta Explorer',
19
+ url: 'https://explorer.forta.org',
20
+ },
21
+ },
22
+ })
@@ -0,0 +1,22 @@
1
+ import { defineChain } from '../../utils/chain/defineChain.js'
2
+
3
+ export const sidraChain = /*#__PURE__*/ defineChain({
4
+ id: 97_453,
5
+ name: 'Sidra Chain',
6
+ nativeCurrency: {
7
+ decimals: 18,
8
+ name: 'Sidra Digital Asset',
9
+ symbol: 'SDA',
10
+ },
11
+ rpcUrls: {
12
+ default: {
13
+ http: ['https://node.sidrachain.com'],
14
+ },
15
+ },
16
+ blockExplorers: {
17
+ default: {
18
+ name: 'Sidra Chain Explorer',
19
+ url: 'https://ledger.sidrachain.com',
20
+ },
21
+ },
22
+ })
@@ -18,4 +18,10 @@ export const songbird = /*#__PURE__*/ defineChain({
18
18
  apiUrl: 'https://songbird-explorer.flare.network/api',
19
19
  },
20
20
  },
21
+ contracts: {
22
+ multicall3: {
23
+ address: '0xcA11bde05977b3631167028862bE2a173976CA11',
24
+ blockCreated: 13382504,
25
+ },
26
+ },
21
27
  })
@@ -0,0 +1,19 @@
1
+ import { defineChain } from '../../utils/chain/defineChain.js'
2
+
3
+ export const wmcTestnet = /*#__PURE__*/ defineChain({
4
+ id: 42070,
5
+ name: 'WMC Testnet',
6
+ nativeCurrency: { name: 'WMTx', symbol: 'WMTx', decimals: 18 },
7
+ rpcUrls: {
8
+ default: {
9
+ http: ['https://rpc-testnet-base.worldmobile.net'],
10
+ },
11
+ },
12
+ blockExplorers: {
13
+ default: {
14
+ name: 'WMC Explorer',
15
+ url: 'https://explorer2-base-testnet.worldmobile.net',
16
+ },
17
+ },
18
+ testnet: true,
19
+ })
package/chains/index.ts CHANGED
@@ -171,6 +171,7 @@ export { fluence } from './definitions/fluence.js'
171
171
  export { fluenceStage } from './definitions/fluenceStage.js'
172
172
  export { fluenceTestnet } from './definitions/fluenceTestnet.js'
173
173
  export { forma } from './definitions/forma.js'
174
+ export { forta } from './definitions/forta.js'
174
175
  /** @deprecated Use `anvil` instead. */
175
176
  export { foundry } from './definitions/foundry.js'
176
177
  export { fraxtal } from './definitions/fraxtal.js'
@@ -401,6 +402,7 @@ export { shibariumTestnet } from './definitions/shibariumTestnet.js'
401
402
  export { shiden } from './definitions/shiden.js'
402
403
  export { shimmer } from './definitions/shimmer.js'
403
404
  export { shimmerTestnet } from './definitions/shimmerTestnet.js'
405
+ export { sidraChain } from './definitions/sidra.js'
404
406
  export { silicon } from './definitions/silicon.js'
405
407
  export { siliconSepolia } from './definitions/siliconSepolia.js'
406
408
  export { sixProtocol } from './definitions/sixProtocol.js'
@@ -490,6 +492,7 @@ export { wanchainTestnet } from './definitions/wanchainTestnet.js'
490
492
  export { weaveVMAlphanet } from './definitions/weavevmAlphanet.js'
491
493
  export { wemix } from './definitions/wemix.js'
492
494
  export { wemixTestnet } from './definitions/wemixTestnet.js'
495
+ export { wmcTestnet } from './definitions/wmcTestnet.js'
493
496
  export { worldchain } from './definitions/worldchain.js'
494
497
  export { worldchainSepolia } from './definitions/worldchainSepolia.js'
495
498
  export { worldLand } from './definitions/worldLand.js'
@@ -1,3 +1,4 @@
1
+ import { ExecutionRevertedError } from '../../errors/node.js'
1
2
  import {
2
3
  TransactionRejectedRpcError,
3
4
  UserRejectedRequestError,
@@ -195,6 +196,7 @@ function shouldThrow(error: Error) {
195
196
  if (
196
197
  error.code === TransactionRejectedRpcError.code ||
197
198
  error.code === UserRejectedRequestError.code ||
199
+ ExecutionRevertedError.nodeMessage.test(error.message) ||
198
200
  error.code === 5000 // CAIP UserRejectedRequestError
199
201
  )
200
202
  return true
package/errors/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '2.22.16'
1
+ export const version = '2.22.19'
@@ -32,6 +32,7 @@ import {
32
32
  getContractError,
33
33
  } from '../../../utils/errors/getContractError.js'
34
34
  import type { FormattedTransactionRequest } from '../../../utils/formatters/transactionRequest.js'
35
+ import { withCache } from '../../../utils/promise/withCache.js'
35
36
  import { abi, executionMode } from '../constants.js'
36
37
  import {
37
38
  ExecuteUnsupportedError,
@@ -151,37 +152,28 @@ export async function execute<
151
152
  client: Client<Transport, chain, account>,
152
153
  parameters: ExecuteParameters<calls, chain, account, chainOverride>,
153
154
  ): Promise<ExecuteReturnType> {
154
- const { address, authorizationList, opData } = parameters
155
+ const { authorizationList, calls, opData } = parameters
155
156
 
156
- const calls = parameters.calls.map((call_) => {
157
- const call = call_ as Call
158
- return {
159
- data: call.abi ? encodeFunctionData(call) : (call.data ?? '0x'),
160
- value: call.value ?? 0n,
161
- target: call.to,
162
- }
163
- })
157
+ const address = authorizationList?.[0]?.contractAddress ?? parameters.address
158
+ const encodedCalls = encodeCalls(calls, opData)
164
159
  const mode = opData ? executionMode.opData : executionMode.default
165
160
 
166
- const encodedCalls = AbiParameters.encode(
167
- AbiParameters.from([
168
- 'struct Call { address target; uint256 value; bytes data; }',
169
- 'Call[] calls',
170
- ...(opData ? ['bytes opData'] : []),
171
- ]),
172
- [calls, ...(opData ? [opData] : [])] as any,
161
+ const supported = await withCache(
162
+ () =>
163
+ supportsExecutionMode(client, {
164
+ address,
165
+ mode,
166
+ }),
167
+ {
168
+ cacheKey: `supportsExecutionMode.${client.uid}.${address}.${mode}`,
169
+ },
173
170
  )
174
-
175
- const supported = await supportsExecutionMode(client, {
176
- address: authorizationList?.[0]?.contractAddress ?? address,
177
- opData,
178
- })
179
171
  if (!supported) throw new ExecuteUnsupportedError()
180
172
 
181
173
  try {
182
174
  return await sendTransaction(client, {
183
175
  ...parameters,
184
- to: address,
176
+ to: parameters.address,
185
177
  data: encodeFunctionData({
186
178
  abi,
187
179
  functionName: 'execute',
@@ -200,29 +192,25 @@ export async function execute<
200
192
  )
201
193
  throw new FunctionSelectorNotRecognizedError()
202
194
 
203
- const matched = parameters.calls.find((call_) => {
204
- const call = call_ as Call
205
- if (!call.abi) return false
195
+ let matched: Call | null = null
196
+ for (const c of parameters.calls) {
197
+ const call = c as Call
198
+ if (!call.abi) continue
206
199
  try {
207
- return Boolean(
200
+ const matches = Boolean(
208
201
  decodeErrorResult({
209
202
  abi: call.abi,
210
203
  data: error.data!,
211
204
  }),
212
205
  )
213
- } catch {
214
- return false
215
- }
216
- }) as {
217
- abi: Abi
218
- functionName: string
219
- args: unknown[]
220
- to: Address
221
- } | null
206
+ if (!matches) continue
207
+ matched = call
208
+ } catch {}
209
+ }
222
210
  if (!matched) throw e
223
211
 
224
212
  throw getContractError(error as BaseError, {
225
- abi: matched.abi,
213
+ abi: matched.abi as Abi,
226
214
  address: matched.to,
227
215
  args: matched.args,
228
216
  docsPath: '/experimental/erc7821/execute',
@@ -230,3 +218,27 @@ export async function execute<
230
218
  })
231
219
  }
232
220
  }
221
+
222
+ /** @internal */
223
+ export function encodeCalls(
224
+ calls_: Calls<readonly unknown[]>,
225
+ opData?: Hex | undefined,
226
+ ) {
227
+ const calls = calls_.map((call_) => {
228
+ const call = call_ as Call
229
+ return {
230
+ data: call.abi ? encodeFunctionData(call) : (call.data ?? '0x'),
231
+ value: call.value ?? 0n,
232
+ target: call.to,
233
+ }
234
+ })
235
+
236
+ return AbiParameters.encode(
237
+ AbiParameters.from([
238
+ 'struct Call { address target; uint256 value; bytes data; }',
239
+ 'Call[] calls',
240
+ ...(opData ? ['bytes opData'] : []),
241
+ ]),
242
+ [calls, ...(opData ? [opData] : [])] as any,
243
+ )
244
+ }