viem 0.0.0-main.20230606T175443 → 0.0.0-main.20230606T201917

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 (82) hide show
  1. package/dist/cjs/actions/public/getFilterChanges.js +5 -1
  2. package/dist/cjs/actions/public/getFilterChanges.js.map +1 -1
  3. package/dist/cjs/actions/public/getFilterLogs.js +6 -2
  4. package/dist/cjs/actions/public/getFilterLogs.js.map +1 -1
  5. package/dist/cjs/actions/public/getLogs.js +6 -2
  6. package/dist/cjs/actions/public/getLogs.js.map +1 -1
  7. package/dist/cjs/actions/public/watchContractEvent.js +3 -1
  8. package/dist/cjs/actions/public/watchContractEvent.js.map +1 -1
  9. package/dist/cjs/actions/public/watchEvent.js +3 -1
  10. package/dist/cjs/actions/public/watchEvent.js.map +1 -1
  11. package/dist/cjs/clients/decorators/public.js.map +1 -1
  12. package/dist/cjs/errors/version.js +1 -1
  13. package/dist/cjs/utils/abi/decodeEventLog.js +29 -23
  14. package/dist/cjs/utils/abi/decodeEventLog.js.map +1 -1
  15. package/dist/cjs/utils/abi/encodeEventTopics.js +11 -7
  16. package/dist/cjs/utils/abi/encodeEventTopics.js.map +1 -1
  17. package/dist/cjs/utils/abi/getAbiItem.js +2 -0
  18. package/dist/cjs/utils/abi/getAbiItem.js.map +1 -1
  19. package/dist/esm/actions/public/getFilterChanges.js +5 -1
  20. package/dist/esm/actions/public/getFilterChanges.js.map +1 -1
  21. package/dist/esm/actions/public/getFilterLogs.js +6 -2
  22. package/dist/esm/actions/public/getFilterLogs.js.map +1 -1
  23. package/dist/esm/actions/public/getLogs.js +6 -2
  24. package/dist/esm/actions/public/getLogs.js.map +1 -1
  25. package/dist/esm/actions/public/watchContractEvent.js +3 -1
  26. package/dist/esm/actions/public/watchContractEvent.js.map +1 -1
  27. package/dist/esm/actions/public/watchEvent.js +3 -1
  28. package/dist/esm/actions/public/watchEvent.js.map +1 -1
  29. package/dist/esm/clients/decorators/public.js.map +1 -1
  30. package/dist/esm/errors/version.js +1 -1
  31. package/dist/esm/utils/abi/decodeEventLog.js +29 -23
  32. package/dist/esm/utils/abi/decodeEventLog.js.map +1 -1
  33. package/dist/esm/utils/abi/encodeEventTopics.js +11 -7
  34. package/dist/esm/utils/abi/encodeEventTopics.js.map +1 -1
  35. package/dist/esm/utils/abi/getAbiItem.js +2 -0
  36. package/dist/esm/utils/abi/getAbiItem.js.map +1 -1
  37. package/dist/types/actions/getContract.d.ts +13 -5
  38. package/dist/types/actions/getContract.d.ts.map +1 -1
  39. package/dist/types/actions/public/createContractEventFilter.d.ts +1 -1
  40. package/dist/types/actions/public/createContractEventFilter.d.ts.map +1 -1
  41. package/dist/types/actions/public/createEventFilter.d.ts +1 -1
  42. package/dist/types/actions/public/createEventFilter.d.ts.map +1 -1
  43. package/dist/types/actions/public/getFilterChanges.d.ts +1 -1
  44. package/dist/types/actions/public/getFilterChanges.d.ts.map +1 -1
  45. package/dist/types/actions/public/getFilterLogs.d.ts +2 -2
  46. package/dist/types/actions/public/getFilterLogs.d.ts.map +1 -1
  47. package/dist/types/actions/public/getLogs.d.ts +2 -2
  48. package/dist/types/actions/public/getLogs.d.ts.map +1 -1
  49. package/dist/types/actions/public/watchContractEvent.d.ts +10 -5
  50. package/dist/types/actions/public/watchContractEvent.d.ts.map +1 -1
  51. package/dist/types/actions/public/watchEvent.d.ts +11 -5
  52. package/dist/types/actions/public/watchEvent.d.ts.map +1 -1
  53. package/dist/types/clients/decorators/public.d.ts +8 -8
  54. package/dist/types/clients/decorators/public.d.ts.map +1 -1
  55. package/dist/types/errors/version.d.ts +1 -1
  56. package/dist/types/types/contract.d.ts +3 -3
  57. package/dist/types/types/contract.d.ts.map +1 -1
  58. package/dist/types/types/filter.d.ts +3 -3
  59. package/dist/types/types/filter.d.ts.map +1 -1
  60. package/dist/types/types/log.d.ts +7 -8
  61. package/dist/types/types/log.d.ts.map +1 -1
  62. package/dist/types/utils/abi/decodeEventLog.d.ts +6 -5
  63. package/dist/types/utils/abi/decodeEventLog.d.ts.map +1 -1
  64. package/dist/types/utils/abi/encodeEventTopics.d.ts.map +1 -1
  65. package/dist/types/utils/abi/getAbiItem.d.ts.map +1 -1
  66. package/package.json +1 -1
  67. package/src/actions/getContract.ts +13 -8
  68. package/src/actions/public/createContractEventFilter.ts +1 -1
  69. package/src/actions/public/createEventFilter.ts +1 -1
  70. package/src/actions/public/getFilterChanges.ts +7 -2
  71. package/src/actions/public/getFilterLogs.ts +10 -5
  72. package/src/actions/public/getLogs.ts +10 -5
  73. package/src/actions/public/watchContractEvent.ts +16 -4
  74. package/src/actions/public/watchEvent.ts +17 -4
  75. package/src/clients/decorators/public.ts +18 -11
  76. package/src/errors/version.ts +1 -1
  77. package/src/types/contract.ts +3 -4
  78. package/src/types/filter.ts +3 -3
  79. package/src/types/log.ts +17 -16
  80. package/src/utils/abi/decodeEventLog.ts +42 -25
  81. package/src/utils/abi/encodeEventTopics.ts +16 -11
  82. package/src/utils/abi/getAbiItem.ts +1 -0
@@ -24,15 +24,18 @@ import { uninstallFilter } from './uninstallFilter.js'
24
24
 
25
25
  export type OnLogsParameter<
26
26
  TAbiEvent extends AbiEvent | undefined = undefined,
27
+ TStrict extends boolean | undefined = undefined,
27
28
  TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
28
- > = Log<bigint, number, TAbiEvent, [TAbiEvent], TEventName>[]
29
+ > = Log<bigint, number, TAbiEvent, TStrict, [TAbiEvent], TEventName>[]
29
30
  export type OnLogsFn<
30
31
  TAbiEvent extends AbiEvent | undefined = undefined,
32
+ TStrict extends boolean | undefined = undefined,
31
33
  TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
32
- > = (logs: OnLogsParameter<TAbiEvent, TEventName>) => void
34
+ > = (logs: OnLogsParameter<TAbiEvent, TStrict, TEventName>) => void
33
35
 
34
36
  export type WatchEventParameters<
35
37
  TAbiEvent extends AbiEvent | undefined = undefined,
38
+ TStrict extends boolean | undefined = undefined,
36
39
  TEventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
37
40
  > = {
38
41
  /** The address of the contract. */
@@ -45,17 +48,23 @@ export type WatchEventParameters<
45
48
  /** The callback to call when an error occurred when trying to get for a new block. */
46
49
  onError?: (error: Error) => void
47
50
  /** The callback to call when new event logs are received. */
48
- onLogs: OnLogsFn<TAbiEvent, TEventName>
51
+ onLogs: OnLogsFn<TAbiEvent, TStrict, TEventName>
49
52
  /** Polling frequency (in ms). Defaults to Client's pollingInterval config. */
50
53
  pollingInterval?: number
51
54
  } & (
52
55
  | {
53
56
  event: TAbiEvent
54
57
  args?: MaybeExtractEventArgsFromAbi<[TAbiEvent], TEventName>
58
+ /**
59
+ * Whether or not the logs must match the indexed/non-indexed arguments on `event`.
60
+ * @default false
61
+ */
62
+ strict?: TStrict
55
63
  }
56
64
  | {
57
65
  event?: never
58
66
  args?: never
67
+ strict?: never
59
68
  }
60
69
  )
61
70
 
@@ -97,6 +106,7 @@ export function watchEvent<
97
106
  TChain extends Chain | undefined,
98
107
  TAbiEvent extends AbiEvent | undefined,
99
108
  TEventName extends string | undefined,
109
+ TStrict extends boolean | undefined = undefined,
100
110
  >(
101
111
  client: PublicClient<Transport, TChain>,
102
112
  {
@@ -107,7 +117,8 @@ export function watchEvent<
107
117
  onError,
108
118
  onLogs,
109
119
  pollingInterval = client.pollingInterval,
110
- }: WatchEventParameters<TAbiEvent>,
120
+ strict: strict_,
121
+ }: WatchEventParameters<TAbiEvent, TStrict>,
111
122
  ): WatchEventReturnType {
112
123
  const observerId = stringify([
113
124
  'watchEvent',
@@ -118,6 +129,7 @@ export function watchEvent<
118
129
  event,
119
130
  pollingInterval,
120
131
  ])
132
+ const strict = strict_ ?? false
121
133
 
122
134
  return observe(observerId, { onLogs, onError }, (emit) => {
123
135
  let previousBlockNumber: bigint
@@ -132,6 +144,7 @@ export function watchEvent<
132
144
  address,
133
145
  args,
134
146
  event: event!,
147
+ strict,
135
148
  } as unknown as CreateEventFilterParameters)) as unknown as Filter<
136
149
  'event',
137
150
  [TAbiEvent],
@@ -199,6 +199,7 @@ import {
199
199
  import type { Chain } from '../../types/chain.js'
200
200
  import type {
201
201
  ContractFunctionConfig,
202
+ MaybeAbiEventName,
202
203
  MaybeExtractEventArgsFromAbi,
203
204
  } from '../../types/contract.js'
204
205
  import type { FilterType } from '../../types/filter.js'
@@ -277,7 +278,7 @@ export type PublicActions<
277
278
  TAbi extends Abi | readonly unknown[],
278
279
  TEventName extends string | undefined,
279
280
  TArgs extends MaybeExtractEventArgsFromAbi<TAbi, TEventName> | undefined,
280
- TStrict extends boolean | undefined,
281
+ TStrict extends boolean | undefined = undefined,
281
282
  >(
282
283
  args: CreateContractEventFilterParameters<TAbi, TEventName, TArgs, TStrict>,
283
284
  ) => Promise<
@@ -306,10 +307,12 @@ export type PublicActions<
306
307
  */
307
308
  createEventFilter: <
308
309
  TAbiEvent extends AbiEvent | undefined,
309
- TStrict extends boolean | undefined,
310
- _Abi extends Abi | readonly unknown[],
311
- _EventName extends string | undefined,
312
- _Args extends MaybeExtractEventArgsFromAbi<_Abi, _EventName> | undefined,
310
+ TStrict extends boolean | undefined = undefined,
311
+ _Abi extends Abi | readonly unknown[] = [TAbiEvent],
312
+ _EventName extends string | undefined = MaybeAbiEventName<TAbiEvent>,
313
+ _Args extends
314
+ | MaybeExtractEventArgsFromAbi<_Abi, _EventName>
315
+ | undefined = undefined,
313
316
  >(
314
317
  args?: CreateEventFilterParameters<
315
318
  TAbiEvent,
@@ -804,7 +807,7 @@ export type PublicActions<
804
807
  TFilterType extends FilterType,
805
808
  TAbi extends Abi | readonly unknown[],
806
809
  TEventName extends string | undefined,
807
- TStrict extends boolean | undefined,
810
+ TStrict extends boolean | undefined = undefined,
808
811
  >(
809
812
  args: GetFilterChangesParameters<TFilterType, TAbi, TEventName, TStrict>,
810
813
  ) => Promise<
@@ -839,7 +842,7 @@ export type PublicActions<
839
842
  getFilterLogs: <
840
843
  TAbi extends Abi | readonly unknown[],
841
844
  TEventName extends string | undefined,
842
- TStrict extends boolean | undefined,
845
+ TStrict extends boolean | undefined = undefined,
843
846
  >(
844
847
  args: GetFilterLogsParameters<TAbi, TEventName, TStrict>,
845
848
  ) => Promise<GetFilterLogsReturnType<TAbi, TEventName, TStrict>>
@@ -884,7 +887,7 @@ export type PublicActions<
884
887
  */
885
888
  getLogs: <
886
889
  TAbiEvent extends AbiEvent | undefined,
887
- TStrict extends boolean | undefined,
890
+ TStrict extends boolean | undefined = undefined,
888
891
  >(
889
892
  args?: GetLogsParameters<TAbiEvent, TStrict>,
890
893
  ) => Promise<GetLogsReturnType<TAbiEvent, TStrict>>
@@ -1295,8 +1298,9 @@ export type PublicActions<
1295
1298
  watchContractEvent: <
1296
1299
  TAbi extends Abi | readonly unknown[],
1297
1300
  TEventName extends string,
1301
+ TStrict extends boolean | undefined = undefined,
1298
1302
  >(
1299
- args: WatchContractEventParameters<TAbi, TEventName>,
1303
+ args: WatchContractEventParameters<TAbi, TEventName, TStrict>,
1300
1304
  ) => WatchContractEventReturnType
1301
1305
  /**
1302
1306
  * Watches and returns emitted [Event Logs](https://viem.sh/docs/glossary/terms.html#event-log).
@@ -1329,8 +1333,11 @@ export type PublicActions<
1329
1333
  * onLogs: (logs) => console.log(logs),
1330
1334
  * })
1331
1335
  */
1332
- watchEvent: <TAbiEvent extends AbiEvent | undefined>(
1333
- args: WatchEventParameters<TAbiEvent>,
1336
+ watchEvent: <
1337
+ TAbiEvent extends AbiEvent | undefined,
1338
+ TStrict extends boolean | undefined = undefined,
1339
+ >(
1340
+ args: WatchEventParameters<TAbiEvent, TStrict>,
1334
1341
  ) => WatchEventReturnType
1335
1342
  /**
1336
1343
  * Watches and returns pending transaction hashes.
@@ -1 +1 @@
1
- export const version = '0.0.0-main.20230606T175443'
1
+ export const version = '0.0.0-main.20230606T201917'
@@ -223,9 +223,7 @@ export type GetEventArgs<
223
223
  | ([TArgs] extends [never] ? true : false)
224
224
  | (readonly unknown[] extends TArgs ? true : false),
225
225
  > = true extends FailedToParseArgs
226
- ? readonly unknown[]
227
- : TArgs extends readonly []
228
- ? never
226
+ ? readonly unknown[] | Record<string, unknown>
229
227
  : TArgs
230
228
 
231
229
  export type GetEventArgsFromTopics<
@@ -233,12 +231,13 @@ export type GetEventArgsFromTopics<
233
231
  TEventName extends string,
234
232
  TTopics extends LogTopic[],
235
233
  TData extends Hex | undefined,
234
+ TStrict extends boolean = true,
236
235
  TAbiEvent extends AbiEvent & { type: 'event' } = TAbi extends Abi
237
236
  ? ExtractAbiEvent<TAbi, TEventName>
238
237
  : AbiEvent & { type: 'event' },
239
238
  TArgs = AbiEventParametersToPrimitiveTypes<
240
239
  TAbiEvent['inputs'],
241
- { EnableUnion: false; IndexedOnly: false; Required: true }
240
+ { EnableUnion: false; IndexedOnly: false; Required: TStrict }
242
241
  >,
243
242
  > = TTopics extends readonly []
244
243
  ? TData extends undefined
@@ -33,20 +33,20 @@ export type Filter<
33
33
  abi: TAbi
34
34
  args?: never
35
35
  eventName?: never
36
- strict?: TStrict
36
+ strict: TStrict
37
37
  }
38
38
  : TArgs extends MaybeExtractEventArgsFromAbi<TAbi, TEventName>
39
39
  ? {
40
40
  abi: TAbi
41
41
  args: TArgs
42
42
  eventName: TEventName
43
- strict?: TStrict
43
+ strict: TStrict
44
44
  }
45
45
  : {
46
46
  abi: TAbi
47
47
  args?: never
48
48
  eventName: TEventName
49
- strict?: TStrict
49
+ strict: TStrict
50
50
  }
51
51
  : {
52
52
  abi?: never
package/src/types/log.ts CHANGED
@@ -11,17 +11,16 @@ import type {
11
11
  GetEventArgs,
12
12
  } from './contract.js'
13
13
  import type { Hash, Hex } from './misc.js'
14
- import type { MaybeUndefined } from './utils.js'
15
14
 
16
15
  export type Log<
17
16
  TQuantity = bigint,
18
17
  TIndex = number,
19
18
  TAbiEvent extends AbiEvent | undefined = undefined,
19
+ TStrict extends boolean | undefined = undefined,
20
20
  TAbi extends Abi | readonly unknown[] = [TAbiEvent],
21
21
  TEventName extends string | undefined = TAbiEvent extends AbiEvent
22
22
  ? TAbiEvent['name']
23
23
  : undefined,
24
- TStrict extends boolean | undefined = undefined,
25
24
  > = {
26
25
  /** The address from which this log originated */
27
26
  address: Address
@@ -93,13 +92,14 @@ type GetInferredLogValues<
93
92
  > = TAbi extends Abi
94
93
  ? TEventName extends string
95
94
  ? {
96
- args: MaybeUndefined<
97
- GetEventArgs<
98
- TAbi,
99
- TEventName,
100
- { EnableUnion: false; IndexedOnly: false; Required: true }
101
- >,
102
- TStrict extends true ? false : true
95
+ args: GetEventArgs<
96
+ TAbi,
97
+ TEventName,
98
+ {
99
+ EnableUnion: false
100
+ IndexedOnly: false
101
+ Required: TStrict extends boolean ? TStrict : false
102
+ }
103
103
  >
104
104
  /** The event name decoded from `topics`. */
105
105
  eventName: TEventName
@@ -108,13 +108,14 @@ type GetInferredLogValues<
108
108
  }
109
109
  : {
110
110
  [TName in _EventNames]: {
111
- args: MaybeUndefined<
112
- GetEventArgs<
113
- TAbi,
114
- string,
115
- { EnableUnion: false; IndexedOnly: false; Required: true }
116
- >,
117
- TStrict extends true ? false : true
111
+ args: GetEventArgs<
112
+ TAbi,
113
+ string,
114
+ {
115
+ EnableUnion: false
116
+ IndexedOnly: false
117
+ Required: TStrict extends boolean ? TStrict : false
118
+ }
118
119
  >
119
120
  /** The event name decoded from `topics`. */
120
121
  eventName: TName
@@ -24,10 +24,12 @@ export type DecodeEventLogParameters<
24
24
  TEventName extends string | undefined = string,
25
25
  TTopics extends Hex[] = Hex[],
26
26
  TData extends Hex | undefined = undefined,
27
+ TStrict extends boolean = true,
27
28
  > = {
28
29
  abi: Narrow<TAbi>
29
30
  data?: TData
30
31
  eventName?: InferEventName<TAbi, TEventName>
32
+ strict?: TStrict
31
33
  topics: [signature: Hex, ...args: TTopics] | []
32
34
  }
33
35
 
@@ -36,6 +38,7 @@ export type DecodeEventLogReturnType<
36
38
  TEventName extends string | undefined = string,
37
39
  TTopics extends Hex[] = Hex[],
38
40
  TData extends Hex | undefined = undefined,
41
+ TStrict extends boolean = true,
39
42
  _EventNames extends string = TAbi extends Abi
40
43
  ? Abi extends TAbi
41
44
  ? string
@@ -45,13 +48,13 @@ export type DecodeEventLogReturnType<
45
48
  ? Prettify<
46
49
  {
47
50
  eventName: TEventName
48
- } & GetEventArgsFromTopics<TAbi, TEventName, TTopics, TData>
51
+ } & GetEventArgsFromTopics<TAbi, TEventName, TTopics, TData, TStrict>
49
52
  >
50
53
  : {
51
54
  [TName in _EventNames]: Prettify<
52
55
  {
53
56
  eventName: TName
54
- } & GetEventArgsFromTopics<TAbi, TName, TTopics, TData>
57
+ } & GetEventArgsFromTopics<TAbi, TName, TTopics, TData, TStrict>
55
58
  >
56
59
  }[_EventNames]
57
60
 
@@ -62,16 +65,20 @@ export function decodeEventLog<
62
65
  TEventName extends string | undefined = undefined,
63
66
  TTopics extends Hex[] = Hex[],
64
67
  TData extends Hex | undefined = undefined,
68
+ TStrict extends boolean = true,
65
69
  >({
66
70
  abi,
67
71
  data,
72
+ strict: strict_,
68
73
  topics,
69
74
  }: DecodeEventLogParameters<
70
75
  TAbi,
71
76
  TEventName,
72
77
  TTopics,
73
- TData
74
- >): DecodeEventLogReturnType<TAbi, TEventName, TTopics, TData> {
78
+ TData,
79
+ TStrict
80
+ >): DecodeEventLogReturnType<TAbi, TEventName, TTopics, TData, TStrict> {
81
+ const strict = strict_ ?? true
75
82
  const [signature, ...argTopics] = topics
76
83
  if (!signature)
77
84
  throw new AbiEventSignatureEmptyTopicsError({
@@ -110,39 +117,49 @@ export function decodeEventLog<
110
117
  // Decode data (non-indexed args).
111
118
  const nonIndexedInputs = inputs.filter((x) => !('indexed' in x && x.indexed))
112
119
  if (nonIndexedInputs.length > 0) {
113
- if (!data || data === '0x')
120
+ if (data && data !== '0x') {
121
+ try {
122
+ const decodedData = decodeAbiParameters(nonIndexedInputs, data)
123
+ if (decodedData) {
124
+ if (isUnnamed) args = [...args, ...decodedData]
125
+ else {
126
+ for (let i = 0; i < nonIndexedInputs.length; i++) {
127
+ args[nonIndexedInputs[i].name!] = decodedData[i]
128
+ }
129
+ }
130
+ }
131
+ } catch (err) {
132
+ if (strict) {
133
+ if (err instanceof AbiDecodingDataSizeTooSmallError)
134
+ throw new DecodeLogDataMismatch({
135
+ abiItem,
136
+ data: err.data,
137
+ params: err.params,
138
+ size: err.size,
139
+ })
140
+ throw err
141
+ }
142
+ }
143
+ } else if (strict) {
114
144
  throw new DecodeLogDataMismatch({
115
145
  abiItem,
116
146
  data: '0x',
117
147
  params: nonIndexedInputs,
118
148
  size: 0,
119
149
  })
120
- try {
121
- const decodedData = decodeAbiParameters(nonIndexedInputs, data)
122
- if (decodedData) {
123
- if (isUnnamed) args = [...args, ...decodedData]
124
- else {
125
- for (let i = 0; i < nonIndexedInputs.length; i++) {
126
- args[nonIndexedInputs[i].name!] = decodedData[i]
127
- }
128
- }
129
- }
130
- } catch (err) {
131
- if (err instanceof AbiDecodingDataSizeTooSmallError)
132
- throw new DecodeLogDataMismatch({
133
- abiItem,
134
- data: err.data,
135
- params: err.params,
136
- size: err.size,
137
- })
138
- throw err
139
150
  }
140
151
  }
141
152
 
142
153
  return {
143
154
  eventName: name,
144
155
  args: Object.values(args).length > 0 ? args : undefined,
145
- } as unknown as DecodeEventLogReturnType<TAbi, TEventName, TTopics, TData>
156
+ } as unknown as DecodeEventLogReturnType<
157
+ TAbi,
158
+ TEventName,
159
+ TTopics,
160
+ TData,
161
+ TStrict
162
+ >
146
163
  }
147
164
 
148
165
  function decodeTopic({ param, value }: { param: AbiParameter; value: Hex }) {
@@ -66,17 +66,22 @@ export function encodeEventTopics<
66
66
  )
67
67
  const args_ = Array.isArray(args)
68
68
  ? args
69
- : indexedInputs?.map((x: any) => (args as any)[x.name]) ?? []
70
- topics =
71
- indexedInputs?.map((param, i) =>
72
- Array.isArray(args_[i])
73
- ? args_[i].map((_: any, j: number) =>
74
- encodeArg({ param, value: args_[i][j] }),
75
- )
76
- : args_[i]
77
- ? encodeArg({ param, value: args_[i] })
78
- : null,
79
- ) ?? []
69
+ : Object.values(args).length > 0
70
+ ? indexedInputs?.map((x: any) => (args as any)[x.name]) ?? []
71
+ : []
72
+
73
+ if (args_.length > 0) {
74
+ topics =
75
+ indexedInputs?.map((param, i) =>
76
+ Array.isArray(args_[i])
77
+ ? args_[i].map((_: any, j: number) =>
78
+ encodeArg({ param, value: args_[i][j] }),
79
+ )
80
+ : args_[i]
81
+ ? encodeArg({ param, value: args_[i] })
82
+ : null,
83
+ ) ?? []
84
+ }
80
85
  }
81
86
  return [signature, ...topics]
82
87
  }
@@ -45,6 +45,7 @@ export function getAbiItem<
45
45
  }
46
46
  if (!abiItem.inputs) continue
47
47
  if (abiItem.inputs.length === 0) continue
48
+ if (abiItem.inputs.length !== args.length) continue
48
49
  const matched = (args as readonly unknown[]).every((arg, index) => {
49
50
  const abiParameter = 'inputs' in abiItem && abiItem.inputs![index]
50
51
  if (!abiParameter) return false