viem 2.54.4 → 2.54.6

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 (44) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/_cjs/actions/wallet/prepareTransactionRequest.js +8 -6
  3. package/_cjs/actions/wallet/prepareTransactionRequest.js.map +1 -1
  4. package/_cjs/clients/createClient.js +3 -5
  5. package/_cjs/clients/createClient.js.map +1 -1
  6. package/_cjs/errors/version.js +1 -1
  7. package/_cjs/tempo/Transaction.js +24 -30
  8. package/_cjs/tempo/Transaction.js.map +1 -1
  9. package/_cjs/tempo/actions/token.js +46 -25
  10. package/_cjs/tempo/actions/token.js.map +1 -1
  11. package/_cjs/tempo/chainConfig.js +16 -0
  12. package/_cjs/tempo/chainConfig.js.map +1 -1
  13. package/_cjs/tempo/internal/utils.js +8 -2
  14. package/_cjs/tempo/internal/utils.js.map +1 -1
  15. package/_esm/actions/wallet/prepareTransactionRequest.js +8 -6
  16. package/_esm/actions/wallet/prepareTransactionRequest.js.map +1 -1
  17. package/_esm/clients/createClient.js +8 -5
  18. package/_esm/clients/createClient.js.map +1 -1
  19. package/_esm/errors/version.js +1 -1
  20. package/_esm/tempo/Transaction.js +31 -42
  21. package/_esm/tempo/Transaction.js.map +1 -1
  22. package/_esm/tempo/actions/token.js +68 -52
  23. package/_esm/tempo/actions/token.js.map +1 -1
  24. package/_esm/tempo/chainConfig.js +16 -0
  25. package/_esm/tempo/chainConfig.js.map +1 -1
  26. package/_esm/tempo/internal/utils.js +17 -3
  27. package/_esm/tempo/internal/utils.js.map +1 -1
  28. package/_types/actions/wallet/prepareTransactionRequest.d.ts.map +1 -1
  29. package/_types/clients/createClient.d.ts.map +1 -1
  30. package/_types/errors/version.d.ts +1 -1
  31. package/_types/tempo/Transaction.d.ts.map +1 -1
  32. package/_types/tempo/actions/token.d.ts +43 -47
  33. package/_types/tempo/actions/token.d.ts.map +1 -1
  34. package/_types/tempo/chainConfig.d.ts.map +1 -1
  35. package/_types/tempo/internal/utils.d.ts +21 -2
  36. package/_types/tempo/internal/utils.d.ts.map +1 -1
  37. package/actions/wallet/prepareTransactionRequest.ts +10 -6
  38. package/clients/createClient.ts +7 -3
  39. package/errors/version.ts +1 -1
  40. package/package.json +1 -1
  41. package/tempo/Transaction.ts +31 -42
  42. package/tempo/actions/token.ts +74 -71
  43. package/tempo/chainConfig.ts +15 -0
  44. package/tempo/internal/utils.ts +42 -4
@@ -46,9 +46,11 @@ import type {
46
46
  WriteParameters,
47
47
  } from '../internal/types.js'
48
48
  import {
49
+ type CallParameters,
49
50
  defineCall,
50
51
  findDeclaredToken,
51
52
  pickWriteParameters,
53
+ resolveCallParameters,
52
54
  resolveToken,
53
55
  resolveTokenWithDecimals,
54
56
  } from '../internal/utils.js'
@@ -130,15 +132,14 @@ export namespace approve {
130
132
  * `address`; `amount.decimals` is inferred from the client's declared
131
133
  * `tokens` when omitted.
132
134
  *
133
- * @param client - Client.
134
- * @param parameters - Parameters.
135
+ * @param parameters - Client (optional), followed by the call arguments.
135
136
  * @returns The call.
136
137
  */
137
138
  export function call<chain extends Chain | undefined>(
138
- client: Client<Transport, chain>,
139
- parameters: Args,
139
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
140
140
  ) {
141
- const { amount, spender, token } = parameters
141
+ const [client, args] = resolveCallParameters(parameters)
142
+ const { amount, spender, token } = args
142
143
  const { address, decimals } = resolveToken(client, { token })
143
144
  return defineCall({
144
145
  address,
@@ -389,13 +390,13 @@ export namespace burnBlocked {
389
390
  *
390
391
  * `amount.decimals` is inferred from the client's declared `tokens` when omitted.
391
392
  *
392
- * @param args - Arguments.
393
+ * @param parameters - Client (optional), followed by the call arguments.
393
394
  * @returns The call.
394
395
  */
395
396
  export function call<chain extends Chain | undefined>(
396
- client: Client<Transport, chain>,
397
- args: Args,
397
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
398
398
  ) {
399
+ const [client, args] = resolveCallParameters(parameters)
399
400
  const { from, amount, token } = args
400
401
  const { address, decimals } = resolveToken(client, { token })
401
402
  return defineCall({
@@ -598,13 +599,13 @@ export namespace burn {
598
599
  *
599
600
  * `amount.decimals` is inferred from the client's declared `tokens` when omitted.
600
601
  *
601
- * @param args - Arguments.
602
+ * @param parameters - Client (optional), followed by the call arguments.
602
603
  * @returns The call.
603
604
  */
604
605
  export function call<chain extends Chain | undefined>(
605
- client: Client<Transport, chain>,
606
- args: Args,
606
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
607
607
  ) {
608
+ const [client, args] = resolveCallParameters(parameters)
608
609
  const { amount, memo, token } = args
609
610
  const { address, decimals } = resolveToken(client, { token })
610
611
  const value = internal_Token.toBaseUnits(amount, decimals)
@@ -812,13 +813,13 @@ export namespace changeTransferPolicy {
812
813
  * })
813
814
  * ```
814
815
  *
815
- * @param args - Arguments.
816
+ * @param parameters - Client (optional), followed by the call arguments.
816
817
  * @returns The call.
817
818
  */
818
819
  export function call<chain extends Chain | undefined>(
819
- client: Client<Transport, chain>,
820
- args: Args,
820
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
821
821
  ) {
822
+ const [client, args] = resolveCallParameters(parameters)
822
823
  const { token, policyId } = args
823
824
  return defineCall({
824
825
  address: resolveToken(client, { token }).address,
@@ -1049,13 +1050,13 @@ export namespace create {
1049
1050
  * })
1050
1051
  * ```
1051
1052
  *
1052
- * @param args - Arguments.
1053
+ * @param parameters - Client (optional), followed by the call arguments.
1053
1054
  * @returns The call.
1054
1055
  */
1055
1056
  export function call<chain extends Chain | undefined>(
1056
- client: Client<Transport, chain>,
1057
- args: Args,
1057
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
1058
1058
  ) {
1059
+ const [client, args] = resolveCallParameters(parameters)
1059
1060
  const {
1060
1061
  name,
1061
1062
  symbol,
@@ -1247,14 +1248,13 @@ export namespace getAllowance {
1247
1248
  * other action that accepts a contract call. The token is selected by `token`,
1248
1249
  * which is either a TIP20 token id or a contract address.
1249
1250
  *
1250
- * @param client - Client.
1251
- * @param args - Arguments.
1251
+ * @param parameters - Client (optional), followed by the call arguments.
1252
1252
  * @returns The call.
1253
1253
  */
1254
1254
  export function call<chain extends Chain | undefined>(
1255
- client: Client<Transport, chain>,
1256
- args: Args,
1255
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
1257
1256
  ) {
1257
+ const [client, args] = resolveCallParameters(parameters)
1258
1258
  return defineCall({
1259
1259
  address: resolveToken(client, args).address,
1260
1260
  abi: Abis.tip20,
@@ -1333,15 +1333,20 @@ export namespace getBalance {
1333
1333
  * other action that accepts a contract call. The token is selected by `token`,
1334
1334
  * which is either a TIP20 token id or a contract address.
1335
1335
  *
1336
- * @param client - Client.
1337
- * @param args - Arguments.
1336
+ * @param parameters - Client (optional), followed by the call arguments.
1338
1337
  * @returns The call.
1339
1338
  */
1340
1339
  export function call<
1341
1340
  chain extends Chain | undefined,
1342
1341
  account extends Account | undefined,
1343
- >(client: Client<Transport, chain, account>, args: Args<account>) {
1344
- const account_ = args.account ?? client.account
1342
+ >(
1343
+ ...parameters: CallParameters<
1344
+ Args<account>,
1345
+ Client<Transport, chain, account>
1346
+ >
1347
+ ) {
1348
+ const [client, args] = resolveCallParameters(parameters)
1349
+ const account_ = args.account ?? client?.account
1345
1350
  if (!account_) throw new AccountNotFoundError()
1346
1351
  const account = parseAccount(account_).address
1347
1352
  return defineCall({
@@ -1658,14 +1663,13 @@ export namespace getTotalSupply {
1658
1663
  * other action that accepts a contract call. The token is selected by `token`,
1659
1664
  * which is either a TIP20 token id or a contract address.
1660
1665
  *
1661
- * @param client - Client.
1662
- * @param args - Arguments.
1666
+ * @param parameters - Client (optional), followed by the call arguments.
1663
1667
  * @returns The call.
1664
1668
  */
1665
1669
  export function call<chain extends Chain | undefined>(
1666
- client: Client<Transport, chain>,
1667
- args: Args,
1670
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
1668
1671
  ) {
1672
+ const [client, args] = resolveCallParameters(parameters)
1669
1673
  return defineCall({
1670
1674
  address: resolveToken(client, args).address,
1671
1675
  abi: Abis.tip20,
@@ -1728,13 +1732,13 @@ export namespace getRoleAdmin {
1728
1732
  /**
1729
1733
  * Defines a call to the `getRoleAdmin` function.
1730
1734
  *
1731
- * @param args - Arguments.
1735
+ * @param parameters - Client (optional), followed by the call arguments.
1732
1736
  * @returns The call.
1733
1737
  */
1734
1738
  export function call<chain extends Chain | undefined>(
1735
- client: Client<Transport, chain>,
1736
- args: Args,
1739
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
1737
1740
  ) {
1741
+ const [client, args] = resolveCallParameters(parameters)
1738
1742
  const { role, token } = args
1739
1743
  return defineCall({
1740
1744
  address: resolveToken(client, { token }).address,
@@ -1809,13 +1813,13 @@ export namespace hasRole {
1809
1813
  /**
1810
1814
  * Defines a call to the `hasRole` function.
1811
1815
  *
1812
- * @param args - Arguments.
1816
+ * @param parameters - Client (optional), followed by the call arguments.
1813
1817
  * @returns The call.
1814
1818
  */
1815
1819
  export function call<chain extends Chain | undefined>(
1816
- client: Client<Transport, chain>,
1817
- args: Args,
1820
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
1818
1821
  ) {
1822
+ const [client, args] = resolveCallParameters(parameters)
1819
1823
  const { account, role, token } = args
1820
1824
  return defineCall({
1821
1825
  address: resolveToken(client, { token }).address,
@@ -1939,13 +1943,13 @@ export namespace grantRoles {
1939
1943
  * })
1940
1944
  * ```
1941
1945
  *
1942
- * @param args - Arguments.
1946
+ * @param parameters - Client (optional), followed by the call arguments.
1943
1947
  * @returns The call.
1944
1948
  */
1945
1949
  export function call<chain extends Chain | undefined>(
1946
- client: Client<Transport, chain>,
1947
- args: Args,
1950
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
1948
1951
  ) {
1952
+ const [client, args] = resolveCallParameters(parameters)
1949
1953
  const { token, to, role } = args
1950
1954
  const roleHash = TokenRole.serialize(role)
1951
1955
  return defineCall({
@@ -2149,13 +2153,13 @@ export namespace mint {
2149
2153
  *
2150
2154
  * `amount.decimals` is inferred from the client's declared `tokens` when omitted.
2151
2155
  *
2152
- * @param args - Arguments.
2156
+ * @param parameters - Client (optional), followed by the call arguments.
2153
2157
  * @returns The call.
2154
2158
  */
2155
2159
  export function call<chain extends Chain | undefined>(
2156
- client: Client<Transport, chain>,
2157
- args: Args,
2160
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
2158
2161
  ) {
2162
+ const [client, args] = resolveCallParameters(parameters)
2159
2163
  const { to, amount, memo, token } = args
2160
2164
  const { address, decimals } = resolveToken(client, { token })
2161
2165
  const value = internal_Token.toBaseUnits(amount, decimals)
@@ -2360,13 +2364,13 @@ export namespace pause {
2360
2364
  * })
2361
2365
  * ```
2362
2366
  *
2363
- * @param args - Arguments.
2367
+ * @param parameters - Client (optional), followed by the call arguments.
2364
2368
  * @returns The call.
2365
2369
  */
2366
2370
  export function call<chain extends Chain | undefined>(
2367
- client: Client<Transport, chain>,
2368
- args: Args,
2371
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
2369
2372
  ) {
2373
+ const [client, args] = resolveCallParameters(parameters)
2370
2374
  const { token } = args
2371
2375
  return defineCall({
2372
2376
  address: resolveToken(client, { token }).address,
@@ -2566,13 +2570,13 @@ export namespace renounceRoles {
2566
2570
  * })
2567
2571
  * ```
2568
2572
  *
2569
- * @param args - Arguments.
2573
+ * @param parameters - Client (optional), followed by the call arguments.
2570
2574
  * @returns The call.
2571
2575
  */
2572
2576
  export function call<chain extends Chain | undefined>(
2573
- client: Client<Transport, chain>,
2574
- args: Args,
2577
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
2575
2578
  ) {
2579
+ const [client, args] = resolveCallParameters(parameters)
2576
2580
  const { token, role } = args
2577
2581
  const roleHash = TokenRole.serialize(role)
2578
2582
  return defineCall({
@@ -2782,13 +2786,13 @@ export namespace revokeRoles {
2782
2786
  * })
2783
2787
  * ```
2784
2788
  *
2785
- * @param args - Arguments.
2789
+ * @param parameters - Client (optional), followed by the call arguments.
2786
2790
  * @returns The call.
2787
2791
  */
2788
2792
  export function call<chain extends Chain | undefined>(
2789
- client: Client<Transport, chain>,
2790
- args: Args,
2793
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
2791
2794
  ) {
2795
+ const [client, args] = resolveCallParameters(parameters)
2792
2796
  const { token, from, role } = args
2793
2797
  const roleHash = TokenRole.serialize(role)
2794
2798
  return defineCall({
@@ -2986,13 +2990,13 @@ export namespace setSupplyCap {
2986
2990
  * })
2987
2991
  * ```
2988
2992
  *
2989
- * @param args - Arguments.
2993
+ * @param parameters - Client (optional), followed by the call arguments.
2990
2994
  * @returns The call.
2991
2995
  */
2992
2996
  export function call<chain extends Chain | undefined>(
2993
- client: Client<Transport, chain>,
2994
- args: Args,
2997
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
2995
2998
  ) {
2999
+ const [client, args] = resolveCallParameters(parameters)
2996
3000
  const { token, supplyCap } = args
2997
3001
  return defineCall({
2998
3002
  address: resolveToken(client, { token }).address,
@@ -3189,13 +3193,13 @@ export namespace setRoleAdmin {
3189
3193
  * })
3190
3194
  * ```
3191
3195
  *
3192
- * @param args - Arguments.
3196
+ * @param parameters - Client (optional), followed by the call arguments.
3193
3197
  * @returns The call.
3194
3198
  */
3195
3199
  export function call<chain extends Chain | undefined>(
3196
- client: Client<Transport, chain>,
3197
- args: Args,
3200
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
3198
3201
  ) {
3202
+ const [client, args] = resolveCallParameters(parameters)
3199
3203
  const { token, role, adminRole } = args
3200
3204
  const roleHash = TokenRole.serialize(role)
3201
3205
  const adminRoleHash = TokenRole.serialize(adminRole)
@@ -3371,17 +3375,16 @@ export namespace transfer {
3371
3375
  * `address`; `amount.decimals` is inferred from the client's declared
3372
3376
  * `tokens` when omitted.
3373
3377
  *
3374
- * @param client - Client.
3375
- * @param parameters - Parameters.
3378
+ * @param parameters - Client (optional), followed by the call arguments.
3376
3379
  * @returns The call.
3377
3380
  */
3378
3381
  export function call<chain extends Chain | undefined>(
3379
- client: Client<Transport, chain>,
3380
- parameters: Args,
3382
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
3381
3383
  ) {
3382
- const { from, memo, to, token } = parameters
3384
+ const [client, args] = resolveCallParameters(parameters)
3385
+ const { from, memo, to, token } = args
3383
3386
  const { address, decimals } = resolveToken(client, { token })
3384
- const value = internal_Token.toBaseUnits(parameters.amount, decimals)
3387
+ const value = internal_Token.toBaseUnits(args.amount, decimals)
3385
3388
  const callArgs = (() => {
3386
3389
  if (memo && from)
3387
3390
  return {
@@ -3645,13 +3648,13 @@ export namespace unpause {
3645
3648
  * })
3646
3649
  * ```
3647
3650
  *
3648
- * @param args - Arguments.
3651
+ * @param parameters - Client (optional), followed by the call arguments.
3649
3652
  * @returns The call.
3650
3653
  */
3651
3654
  export function call<chain extends Chain | undefined>(
3652
- client: Client<Transport, chain>,
3653
- args: Args,
3655
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
3654
3656
  ) {
3657
+ const [client, args] = resolveCallParameters(parameters)
3655
3658
  const { token } = args
3656
3659
  return defineCall({
3657
3660
  address: resolveToken(client, { token }).address,
@@ -3843,13 +3846,13 @@ export namespace prepareUpdateQuoteToken {
3843
3846
  * })
3844
3847
  * ```
3845
3848
  *
3846
- * @param args - Arguments.
3849
+ * @param parameters - Client (optional), followed by the call arguments.
3847
3850
  * @returns The call.
3848
3851
  */
3849
3852
  export function call<chain extends Chain | undefined>(
3850
- client: Client<Transport, chain>,
3851
- args: Args,
3853
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
3852
3854
  ) {
3855
+ const [client, args] = resolveCallParameters(parameters)
3853
3856
  const { token, quoteToken } = args
3854
3857
  return defineCall({
3855
3858
  address: resolveToken(client, { token }).address,
@@ -4043,13 +4046,13 @@ export namespace updateQuoteToken {
4043
4046
  * })
4044
4047
  * ```
4045
4048
  *
4046
- * @param args - Arguments.
4049
+ * @param parameters - Client (optional), followed by the call arguments.
4047
4050
  * @returns The call.
4048
4051
  */
4049
4052
  export function call<chain extends Chain | undefined>(
4050
- client: Client<Transport, chain>,
4051
- args: Args,
4053
+ ...parameters: CallParameters<Args, Client<Transport, chain>>
4052
4054
  ) {
4055
+ const [client, args] = resolveCallParameters(parameters)
4053
4056
  const { token } = args
4054
4057
  return defineCall({
4055
4058
  address: resolveToken(client, { token }).address,
@@ -94,6 +94,7 @@ export const chainConfig = {
94
94
  weight: Number(owner.weight),
95
95
  })),
96
96
  }
97
+ request.multisigSignatureCount ??= inferMultisigSignatureCount(config)
97
98
  // A non-multisig `account` (e.g. the client's default) isn't the sender,
98
99
  // so drop it: core then fills nonce/gas/fees for the multisig sender via
99
100
  // `request.from`. A multisig account *is* the sender — keep it so the
@@ -147,6 +148,7 @@ export const chainConfig = {
147
148
  // validBefore timestamp.
148
149
  const useExpiringNonce = await (async () => {
149
150
  if (request.nonceKey === 'expiring') return true
151
+ if (multisig) return false
150
152
  if (request.feePayer && typeof request.nonceKey === 'undefined')
151
153
  return true
152
154
  const address = request.account?.address
@@ -261,3 +263,16 @@ export const chainConfig = {
261
263
  } as const satisfies viem_ChainConfig & { blockTime: number }
262
264
 
263
265
  export type ChainConfig = typeof chainConfig
266
+
267
+ function inferMultisigSignatureCount(config: MultisigConfig.Config) {
268
+ const threshold = Number(config.threshold)
269
+ const weights = config.owners
270
+ .map((owner) => Number(owner.weight))
271
+ .sort((a, b) => b - a)
272
+ let total = 0
273
+ for (const [index, weight] of weights.entries()) {
274
+ total += weight
275
+ if (total >= threshold) return index + 1
276
+ }
277
+ return weights.length
278
+ }
@@ -1,5 +1,6 @@
1
1
  import type { Abi, AbiStateMutability, Address } from 'abitype'
2
2
  import { TokenId } from 'ox/tempo'
3
+ import type { Account } from '../../accounts/types.js'
3
4
  import { readContract } from '../../actions/public/readContract.js'
4
5
  import type { Client } from '../../clients/createClient.js'
5
6
  import type { Transport } from '../../clients/transports/createTransport.js'
@@ -26,17 +27,21 @@ import * as Abis from '../Abis.js'
26
27
  * from the client's declared `tokens` when the address matches a declared token,
27
28
  * otherwise taken from the explicit `decimals`.
28
29
  *
29
- * @param client - Client.
30
+ * When `client` is omitted, `token` must be a token id or address (symbols
31
+ * cannot be resolved), and `decimals` is only taken from the explicit
32
+ * `decimals`.
33
+ *
34
+ * @param client - Client (optional).
30
35
  * @param parameters - Parameters.
31
36
  * @returns The resolved `address` and `decimals`.
32
37
  */
33
38
  export function resolveToken(
34
- client: Client<Transport, Chain | undefined>,
39
+ client: Client<Transport, Chain | undefined> | undefined,
35
40
  parameters: resolveToken.Parameters,
36
41
  ): { address: Address; decimals: number | undefined } {
37
42
  const { decimals, token } = parameters
38
43
 
39
- if (typeof token === 'string') {
44
+ if (client && typeof token === 'string') {
40
45
  const declared = findDeclaredTokenBySymbol(client, token)
41
46
  if (declared)
42
47
  return {
@@ -48,7 +53,7 @@ export function resolveToken(
48
53
  const address = TokenId.toAddress(token as TokenId.TokenIdOrAddress)
49
54
  return {
50
55
  address,
51
- decimals: decimals ?? inferDecimals(client, address),
56
+ decimals: decimals ?? (client ? inferDecimals(client, address) : undefined),
52
57
  }
53
58
  }
54
59
 
@@ -211,6 +216,39 @@ export function pickWriteParameters(parameters: Record<string, unknown>) {
211
216
  }
212
217
  }
213
218
 
219
+ /**
220
+ * Parameters of an action's `.call` builder: the call arguments, optionally
221
+ * preceded by a Client. The Client is used to resolve token symbols declared
222
+ * on its `tokens` array and to infer token `decimals`. When the Client is
223
+ * omitted, `token` must be a TIP20 token id or contract `address`, and
224
+ * formatted `amount` values must carry explicit `decimals`.
225
+ */
226
+ export type CallParameters<
227
+ args,
228
+ client extends Client<
229
+ Transport,
230
+ Chain | undefined,
231
+ Account | undefined
232
+ > = Client<Transport, Chain | undefined>,
233
+ // Note: mutable (non-`readonly`) tuples, so bound decorator helpers can
234
+ // pattern-match these parameters (see `BoundHelper` in `../Decorator.ts`).
235
+ > = [client: client, args: args] | [args: args]
236
+
237
+ /**
238
+ * Splits {@link CallParameters} into `[client, args]`, with an `undefined`
239
+ * client when the caller omitted it.
240
+ * @internal
241
+ */
242
+ export function resolveCallParameters<
243
+ args,
244
+ client extends Client<Transport, Chain | undefined, Account | undefined>,
245
+ >(
246
+ parameters: CallParameters<args, client>,
247
+ ): readonly [client: client | undefined, args: args] {
248
+ if (parameters.length === 2) return parameters
249
+ return [undefined, parameters[0]]
250
+ }
251
+
214
252
  export function defineCall<
215
253
  const abi extends Abi,
216
254
  const functionName extends ContractFunctionName<abi, AbiStateMutability>,