viem 0.0.1-alpha.24 → 0.0.1-alpha.25

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 (154) hide show
  1. package/contract/package.json +4 -0
  2. package/dist/call-ac509982.d.ts +23 -0
  3. package/dist/{chain-e33d019b.d.ts → chain-c4ccb458.d.ts} +1 -1
  4. package/dist/{chain-afa13f5a.d.ts → chain-f16512e8.d.ts} +20 -1
  5. package/dist/chains.d.ts +20 -8
  6. package/dist/chains.js +46 -46
  7. package/dist/chains.mjs +1 -1
  8. package/dist/{chunk-YQUC52RL.mjs → chunk-2Y3UZMSP.mjs} +77 -84
  9. package/dist/chunk-2Y3UZMSP.mjs.map +1 -0
  10. package/dist/{chunk-A2HXAZXC.js → chunk-CD2XJOBJ.js} +135 -142
  11. package/dist/chunk-CD2XJOBJ.js.map +1 -0
  12. package/dist/{chunk-LQVMDX5I.mjs → chunk-KSAO4Y4Q.mjs} +133 -54
  13. package/dist/chunk-KSAO4Y4Q.mjs.map +1 -0
  14. package/dist/{chunk-3ARWEJ3G.mjs → chunk-LEPQJNVO.mjs} +18 -2
  15. package/dist/chunk-LEPQJNVO.mjs.map +1 -0
  16. package/dist/{chunk-ZYSXBTBB.js → chunk-NUXMGPMK.js} +30 -14
  17. package/dist/chunk-NUXMGPMK.js.map +1 -0
  18. package/dist/{chunk-4D5XG6XB.js → chunk-THMRUG4D.js} +148 -69
  19. package/dist/chunk-THMRUG4D.js.map +1 -0
  20. package/dist/{contract-70f4ddbe.d.ts → contract-9e76e561.d.ts} +44 -31
  21. package/dist/contract.d.ts +123 -0
  22. package/dist/contract.js +53 -0
  23. package/dist/{clients/index.js.map → contract.js.map} +0 -0
  24. package/dist/contract.mjs +53 -0
  25. package/dist/{clients/index.mjs.map → contract.mjs.map} +0 -0
  26. package/dist/{createClient-60e3ab98.d.ts → createClient-68ee4bb4.d.ts} +3 -3
  27. package/dist/{createPublicClient-d3d12dc3.d.ts → createPublicClient-b732194e.d.ts} +3 -3
  28. package/dist/{createTestClient-5f4532c4.d.ts → createTestClient-dedf321e.d.ts} +3 -3
  29. package/dist/{createWalletClient-9ec3df4f.d.ts → createWalletClient-75813d83.d.ts} +3 -3
  30. package/dist/decodeErrorResult-0b934d23.d.ts +16 -0
  31. package/dist/{eip1193-9317a312.d.ts → eip1193-6f9ba163.d.ts} +1 -1
  32. package/dist/ens.d.ts +82 -1
  33. package/dist/ens.js +208 -3
  34. package/dist/ens.js.map +1 -1
  35. package/dist/ens.mjs +209 -4
  36. package/dist/ens.mjs.map +1 -1
  37. package/dist/getAbiItem-c8e6e7d4.d.ts +97 -0
  38. package/dist/index.d.ts +85 -175
  39. package/dist/index.js +237 -279
  40. package/dist/index.js.map +1 -1
  41. package/dist/index.mjs +245 -287
  42. package/dist/index.mjs.map +1 -1
  43. package/dist/public.d.ts +352 -10
  44. package/dist/public.js +3 -4
  45. package/dist/public.mjs +6 -7
  46. package/dist/readContract-4f6e2692.d.ts +10 -0
  47. package/dist/rpc-a5a7f376.d.ts +121 -0
  48. package/dist/{sendTransaction-54a0d509.d.ts → sendTransaction-e713f90c.d.ts} +3 -3
  49. package/dist/test.d.ts +160 -5
  50. package/dist/test.js +222 -18
  51. package/dist/test.js.map +1 -1
  52. package/dist/test.mjs +233 -29
  53. package/dist/test.mjs.map +1 -1
  54. package/dist/transactionReceipt-2a86c7c7.d.ts +26 -0
  55. package/dist/{transactionRequest-bdf57f7d.d.ts → transactionRequest-c7794f5e.d.ts} +1 -1
  56. package/dist/utils/index.d.ts +224 -20
  57. package/dist/utils/index.js +2 -6
  58. package/dist/utils/index.mjs +3 -7
  59. package/dist/wallet.d.ts +41 -7
  60. package/dist/wallet.js +3 -3
  61. package/dist/wallet.mjs +2 -2
  62. package/dist/watchEvent-c346c12d.d.ts +41 -0
  63. package/dist/window.d.ts +2 -2
  64. package/ens/package.json +4 -0
  65. package/package.json +13 -9
  66. package/src/_test/constants.ts +2 -0
  67. package/src/_test/utils.ts +10 -5
  68. package/src/actions/ens/getEnsAddress.bench.ts +26 -0
  69. package/src/actions/ens/getEnsAddress.test.ts +97 -0
  70. package/src/actions/ens/getEnsAddress.ts +122 -0
  71. package/src/actions/ens/getEnsName.bench.ts +30 -0
  72. package/src/actions/ens/getEnsName.test.ts +101 -0
  73. package/src/actions/ens/getEnsName.ts +106 -0
  74. package/src/actions/ens/index.test.ts +12 -0
  75. package/src/actions/ens/index.ts +3 -0
  76. package/src/actions/index.ts +3 -3
  77. package/src/actions/public/createEventFilter.test.ts +36 -4
  78. package/src/actions/public/createEventFilter.ts +27 -10
  79. package/src/actions/public/getFilterChanges.test.ts +198 -4
  80. package/src/actions/public/getFilterLogs.test.ts +195 -2
  81. package/src/actions/public/getLogs.test.ts +201 -2
  82. package/src/actions/public/index.test.ts +0 -1
  83. package/src/actions/public/index.ts +1 -7
  84. package/src/actions/public/multicall.ts +8 -3
  85. package/src/actions/public/simulateContract.ts +1 -4
  86. package/src/actions/public/watchContractEvent.test.ts +4 -4
  87. package/src/actions/{public → wallet}/deployContract.test.ts +1 -2
  88. package/src/actions/{public → wallet}/deployContract.ts +0 -0
  89. package/src/actions/wallet/index.test.ts +1 -0
  90. package/src/actions/wallet/index.ts +6 -0
  91. package/src/chains.test.ts +44 -1517
  92. package/src/clients/transports/webSocket.test.ts +1 -0
  93. package/src/clients/transports/webSocket.ts +1 -0
  94. package/src/contract.test.ts +31 -0
  95. package/src/contract.ts +68 -0
  96. package/src/ens.test.ts +15 -0
  97. package/src/ens.ts +4 -1
  98. package/src/errors/abi.ts +18 -2
  99. package/src/errors/chain.test.ts +46 -0
  100. package/src/errors/chain.ts +33 -0
  101. package/src/errors/contract.ts +2 -2
  102. package/src/errors/index.ts +3 -0
  103. package/src/index.test.ts +0 -147
  104. package/src/index.ts +0 -257
  105. package/src/public.test.ts +36 -0
  106. package/src/public.ts +2 -6
  107. package/src/test.test.ts +38 -0
  108. package/src/test.ts +1 -0
  109. package/src/types/contract.ts +144 -40
  110. package/src/types/index.ts +2 -1
  111. package/src/types/utils.ts +21 -0
  112. package/src/utils/abi/decodeErrorResult.test.ts +1 -1
  113. package/src/utils/abi/decodeEventLog.test.ts +542 -0
  114. package/src/utils/abi/decodeEventLog.ts +107 -0
  115. package/src/utils/abi/decodeFunctionData.test.ts +1 -2
  116. package/src/utils/abi/decodeFunctionData.ts +5 -2
  117. package/src/utils/abi/encodeFunctionData.ts +1 -4
  118. package/src/utils/abi/index.test.ts +1 -0
  119. package/src/utils/abi/index.ts +6 -0
  120. package/src/utils/ens/index.test.ts +1 -0
  121. package/src/utils/ens/index.ts +2 -0
  122. package/src/utils/ens/packetToBytes.test.ts +11 -0
  123. package/src/utils/ens/packetToBytes.ts +29 -0
  124. package/src/utils/index.test.ts +1 -3
  125. package/src/utils/index.ts +3 -2
  126. package/src/utils/rpc.test.ts +1 -0
  127. package/src/utils/rpc.ts +4 -2
  128. package/src/wallet.test.ts +19 -0
  129. package/wallet/package.json +4 -0
  130. package/clients/package.json +0 -4
  131. package/dist/chunk-3ARWEJ3G.mjs.map +0 -1
  132. package/dist/chunk-4D5XG6XB.js.map +0 -1
  133. package/dist/chunk-6QTEW2BE.mjs +0 -260
  134. package/dist/chunk-6QTEW2BE.mjs.map +0 -1
  135. package/dist/chunk-A2HXAZXC.js.map +0 -1
  136. package/dist/chunk-KRPS5CIB.mjs +0 -256
  137. package/dist/chunk-KRPS5CIB.mjs.map +0 -1
  138. package/dist/chunk-LQVMDX5I.mjs.map +0 -1
  139. package/dist/chunk-N3IOPT3R.js +0 -256
  140. package/dist/chunk-N3IOPT3R.js.map +0 -1
  141. package/dist/chunk-YQUC52RL.mjs.map +0 -1
  142. package/dist/chunk-ZSTVHQ6J.js +0 -260
  143. package/dist/chunk-ZSTVHQ6J.js.map +0 -1
  144. package/dist/chunk-ZYSXBTBB.js.map +0 -1
  145. package/dist/clients/index.d.ts +0 -9
  146. package/dist/clients/index.js +0 -24
  147. package/dist/clients/index.mjs +0 -24
  148. package/dist/normalize-ef9240c0.d.ts +0 -33
  149. package/dist/parseGwei-492ab7dd.d.ts +0 -355
  150. package/dist/rpc-26932bae.d.ts +0 -61
  151. package/dist/stopImpersonatingAccount-c1a4b7e5.d.ts +0 -156
  152. package/dist/watchAsset-d59d6e35.d.ts +0 -38
  153. package/dist/watchPendingTransactions-ea21b31d.d.ts +0 -373
  154. package/dist/webSocket-775b4037.d.ts +0 -83
@@ -17,7 +17,7 @@ import {
17
17
  setIntervalMining,
18
18
  stopImpersonatingAccount,
19
19
  } from '../test'
20
- import { sendTransaction } from '../wallet'
20
+ import { sendTransaction, writeContract } from '../wallet'
21
21
  import type { Log } from '../../types'
22
22
  import { createEventFilter } from './createEventFilter'
23
23
  import { getFilterLogs } from './getFilterLogs'
@@ -27,6 +27,9 @@ beforeAll(async () => {
27
27
  await impersonateAccount(testClient, {
28
28
  address: address.vitalik,
29
29
  })
30
+ await impersonateAccount(testClient, {
31
+ address: address.usdcHolder,
32
+ })
30
33
  })
31
34
 
32
35
  afterAll(async () => {
@@ -34,6 +37,9 @@ afterAll(async () => {
34
37
  await stopImpersonatingAccount(testClient, {
35
38
  address: address.vitalik,
36
39
  })
40
+ await stopImpersonatingAccount(testClient, {
41
+ address: address.usdcHolder,
42
+ })
37
43
  })
38
44
 
39
45
  test('default', async () => {
@@ -84,6 +90,7 @@ describe('events', () => {
84
90
  await mine(testClient, { blocks: 1 })
85
91
 
86
92
  let logs = await getFilterLogs(publicClient, { filter })
93
+ console.log(logs[0])
87
94
  assertType<Log[]>(logs)
88
95
  expect(logs.length).toBe(2)
89
96
  })
@@ -100,5 +107,191 @@ describe('events', () => {
100
107
  expect(logs.length).toBe(1056)
101
108
  })
102
109
 
103
- test.todo('args: args')
110
+ test('args: singular `from`', async () => {
111
+ const namedFilter = await createEventFilter(publicClient, {
112
+ event:
113
+ 'Transfer(address indexed from, address indexed to, uint256 value)',
114
+ args: {
115
+ from: address.vitalik,
116
+ },
117
+ })
118
+ const unnamedFilter = await createEventFilter(publicClient, {
119
+ event: 'Transfer(address indexed, address indexed, uint256)',
120
+ args: [address.vitalik],
121
+ })
122
+
123
+ await writeContract(walletClient, {
124
+ ...usdcContractConfig,
125
+ from: address.usdcHolder,
126
+ functionName: 'transfer',
127
+ args: [accounts[0].address, 1n],
128
+ })
129
+ await writeContract(walletClient, {
130
+ ...usdcContractConfig,
131
+ from: address.vitalik,
132
+ functionName: 'transfer',
133
+ args: [accounts[1].address, 1n],
134
+ })
135
+ await writeContract(walletClient, {
136
+ ...usdcContractConfig,
137
+ from: address.vitalik,
138
+ functionName: 'transfer',
139
+ args: [accounts[1].address, 1n],
140
+ })
141
+ await writeContract(walletClient, {
142
+ ...usdcContractConfig,
143
+ from: address.vitalik,
144
+ functionName: 'approve',
145
+ args: [address.vitalik, 1n],
146
+ })
147
+ await mine(testClient, { blocks: 1 })
148
+
149
+ expect(
150
+ (await getFilterLogs(publicClient, { filter: namedFilter })).length,
151
+ ).toBe(2)
152
+ expect(
153
+ (await getFilterLogs(publicClient, { filter: unnamedFilter })).length,
154
+ ).toBe(2)
155
+ })
156
+
157
+ test('args: multiple `from`', async () => {
158
+ const namedFilter = await createEventFilter(publicClient, {
159
+ event:
160
+ 'Transfer(address indexed from, address indexed to, uint256 value)',
161
+ args: {
162
+ from: [address.usdcHolder, address.vitalik],
163
+ },
164
+ })
165
+ const unnamedFilter = await createEventFilter(publicClient, {
166
+ event: 'Transfer(address indexed, address indexed, uint256)',
167
+ args: [[address.usdcHolder, address.vitalik]],
168
+ })
169
+
170
+ await writeContract(walletClient, {
171
+ ...usdcContractConfig,
172
+ from: address.usdcHolder,
173
+ functionName: 'transfer',
174
+ args: [accounts[0].address, 1n],
175
+ })
176
+ await writeContract(walletClient, {
177
+ ...usdcContractConfig,
178
+ from: address.vitalik,
179
+ functionName: 'transfer',
180
+ args: [accounts[1].address, 1n],
181
+ })
182
+ await writeContract(walletClient, {
183
+ ...usdcContractConfig,
184
+ from: address.vitalik,
185
+ functionName: 'transfer',
186
+ args: [accounts[1].address, 1n],
187
+ })
188
+ await writeContract(walletClient, {
189
+ ...usdcContractConfig,
190
+ from: address.vitalik,
191
+ functionName: 'approve',
192
+ args: [address.vitalik, 1n],
193
+ })
194
+ await mine(testClient, { blocks: 1 })
195
+
196
+ expect(
197
+ (await getFilterLogs(publicClient, { filter: namedFilter })).length,
198
+ ).toBe(3)
199
+ expect(
200
+ (await getFilterLogs(publicClient, { filter: unnamedFilter })).length,
201
+ ).toBe(3)
202
+ })
203
+
204
+ test('args: singular `to`', async () => {
205
+ const namedFilter = await createEventFilter(publicClient, {
206
+ event:
207
+ 'Transfer(address indexed from, address indexed to, uint256 value)',
208
+ args: {
209
+ to: accounts[0].address,
210
+ },
211
+ })
212
+ const unnamedFilter = await createEventFilter(publicClient, {
213
+ event: 'Transfer(address indexed, address indexed, uint256)',
214
+ args: [null, accounts[0].address],
215
+ })
216
+
217
+ await writeContract(walletClient, {
218
+ ...usdcContractConfig,
219
+ from: address.usdcHolder,
220
+ functionName: 'transfer',
221
+ args: [accounts[0].address, 1n],
222
+ })
223
+ await writeContract(walletClient, {
224
+ ...usdcContractConfig,
225
+ from: address.vitalik,
226
+ functionName: 'transfer',
227
+ args: [accounts[1].address, 1n],
228
+ })
229
+ await writeContract(walletClient, {
230
+ ...usdcContractConfig,
231
+ from: address.vitalik,
232
+ functionName: 'transfer',
233
+ args: [accounts[1].address, 1n],
234
+ })
235
+ await writeContract(walletClient, {
236
+ ...usdcContractConfig,
237
+ from: address.vitalik,
238
+ functionName: 'approve',
239
+ args: [address.vitalik, 1n],
240
+ })
241
+ await mine(testClient, { blocks: 1 })
242
+
243
+ expect(
244
+ (await getFilterLogs(publicClient, { filter: namedFilter })).length,
245
+ ).toBe(1)
246
+ expect(
247
+ (await getFilterLogs(publicClient, { filter: unnamedFilter })).length,
248
+ ).toBe(1)
249
+ })
250
+
251
+ test('args: multiple `to`', async () => {
252
+ const namedFilter = await createEventFilter(publicClient, {
253
+ event:
254
+ 'Transfer(address indexed from, address indexed to, uint256 value)',
255
+ args: {
256
+ to: [accounts[0].address, accounts[1].address],
257
+ },
258
+ })
259
+ const unnamedFilter = await createEventFilter(publicClient, {
260
+ event: 'Transfer(address indexed, address indexed, uint256)',
261
+ args: [null, [accounts[0].address, accounts[1].address]],
262
+ })
263
+
264
+ await writeContract(walletClient, {
265
+ ...usdcContractConfig,
266
+ from: address.usdcHolder,
267
+ functionName: 'transfer',
268
+ args: [accounts[0].address, 1n],
269
+ })
270
+ await writeContract(walletClient, {
271
+ ...usdcContractConfig,
272
+ from: address.vitalik,
273
+ functionName: 'transfer',
274
+ args: [accounts[1].address, 1n],
275
+ })
276
+ await writeContract(walletClient, {
277
+ ...usdcContractConfig,
278
+ from: address.vitalik,
279
+ functionName: 'transfer',
280
+ args: [accounts[1].address, 1n],
281
+ })
282
+ await writeContract(walletClient, {
283
+ ...usdcContractConfig,
284
+ from: address.vitalik,
285
+ functionName: 'approve',
286
+ args: [address.vitalik, 1n],
287
+ })
288
+ await mine(testClient, { blocks: 1 })
289
+
290
+ expect(
291
+ (await getFilterLogs(publicClient, { filter: namedFilter })).length,
292
+ ).toBe(3)
293
+ expect(
294
+ (await getFilterLogs(publicClient, { filter: unnamedFilter })).length,
295
+ ).toBe(3)
296
+ })
104
297
  })
@@ -17,7 +17,7 @@ import {
17
17
  setIntervalMining,
18
18
  stopImpersonatingAccount,
19
19
  } from '../test'
20
- import { sendTransaction } from '../wallet'
20
+ import { sendTransaction, writeContract } from '../wallet'
21
21
  import type { Log } from '../../types'
22
22
  import { getLogs } from './getLogs'
23
23
  import { getBlock } from './getBlock'
@@ -27,6 +27,9 @@ beforeAll(async () => {
27
27
  await impersonateAccount(testClient, {
28
28
  address: address.vitalik,
29
29
  })
30
+ await impersonateAccount(testClient, {
31
+ address: address.usdcHolder,
32
+ })
30
33
  })
31
34
 
32
35
  afterAll(async () => {
@@ -34,6 +37,9 @@ afterAll(async () => {
34
37
  await stopImpersonatingAccount(testClient, {
35
38
  address: address.vitalik,
36
39
  })
40
+ await impersonateAccount(testClient, {
41
+ address: address.usdcHolder,
42
+ })
37
43
  })
38
44
 
39
45
  test('default', async () => {
@@ -103,5 +109,198 @@ describe('events', () => {
103
109
  expect(logs.length).toBe(118)
104
110
  })
105
111
 
106
- test.todo('args: args')
112
+ test('args: singular `from`', async () => {
113
+ await writeContract(walletClient, {
114
+ ...usdcContractConfig,
115
+ from: address.usdcHolder,
116
+ functionName: 'transfer',
117
+ args: [accounts[0].address, 1n],
118
+ })
119
+ await writeContract(walletClient, {
120
+ ...usdcContractConfig,
121
+ from: address.vitalik,
122
+ functionName: 'transfer',
123
+ args: [accounts[1].address, 1n],
124
+ })
125
+ await writeContract(walletClient, {
126
+ ...usdcContractConfig,
127
+ from: address.vitalik,
128
+ functionName: 'transfer',
129
+ args: [accounts[1].address, 1n],
130
+ })
131
+ await writeContract(walletClient, {
132
+ ...usdcContractConfig,
133
+ from: address.vitalik,
134
+ functionName: 'approve',
135
+ args: [address.vitalik, 1n],
136
+ })
137
+ await mine(testClient, { blocks: 1 })
138
+
139
+ expect(
140
+ (
141
+ await getLogs(publicClient, {
142
+ event:
143
+ 'Transfer(address indexed from, address indexed to, uint256 value)',
144
+ args: {
145
+ from: address.vitalik,
146
+ },
147
+ })
148
+ ).length,
149
+ ).toBe(2)
150
+ expect(
151
+ (
152
+ await getLogs(publicClient, {
153
+ event: 'Transfer(address indexed, address indexed, uint256)',
154
+ args: [address.vitalik],
155
+ })
156
+ ).length,
157
+ ).toBe(2)
158
+ })
159
+
160
+ test('args: multiple `from`', async () => {
161
+ await writeContract(walletClient, {
162
+ ...usdcContractConfig,
163
+ from: address.usdcHolder,
164
+ functionName: 'transfer',
165
+ args: [accounts[0].address, 1n],
166
+ })
167
+ await writeContract(walletClient, {
168
+ ...usdcContractConfig,
169
+ from: address.vitalik,
170
+ functionName: 'transfer',
171
+ args: [accounts[1].address, 1n],
172
+ })
173
+ await writeContract(walletClient, {
174
+ ...usdcContractConfig,
175
+ from: address.vitalik,
176
+ functionName: 'transfer',
177
+ args: [accounts[1].address, 1n],
178
+ })
179
+ await writeContract(walletClient, {
180
+ ...usdcContractConfig,
181
+ from: address.vitalik,
182
+ functionName: 'approve',
183
+ args: [address.vitalik, 1n],
184
+ })
185
+ await mine(testClient, { blocks: 1 })
186
+
187
+ expect(
188
+ (
189
+ await getLogs(publicClient, {
190
+ event:
191
+ 'Transfer(address indexed from, address indexed to, uint256 value)',
192
+ args: {
193
+ from: [address.usdcHolder, address.vitalik],
194
+ },
195
+ })
196
+ ).length,
197
+ ).toBe(3)
198
+ expect(
199
+ (
200
+ await getLogs(publicClient, {
201
+ event:
202
+ 'Transfer(address indexed from, address indexed to, uint256 value)',
203
+ args: {
204
+ from: [address.usdcHolder, address.vitalik],
205
+ },
206
+ })
207
+ ).length,
208
+ ).toBe(3)
209
+ })
210
+
211
+ test('args: singular `to`', async () => {
212
+ await writeContract(walletClient, {
213
+ ...usdcContractConfig,
214
+ from: address.usdcHolder,
215
+ functionName: 'transfer',
216
+ args: [accounts[0].address, 1n],
217
+ })
218
+ await writeContract(walletClient, {
219
+ ...usdcContractConfig,
220
+ from: address.vitalik,
221
+ functionName: 'transfer',
222
+ args: [accounts[1].address, 1n],
223
+ })
224
+ await writeContract(walletClient, {
225
+ ...usdcContractConfig,
226
+ from: address.vitalik,
227
+ functionName: 'transfer',
228
+ args: [accounts[1].address, 1n],
229
+ })
230
+ await writeContract(walletClient, {
231
+ ...usdcContractConfig,
232
+ from: address.vitalik,
233
+ functionName: 'approve',
234
+ args: [address.vitalik, 1n],
235
+ })
236
+ await mine(testClient, { blocks: 1 })
237
+
238
+ expect(
239
+ (
240
+ await getLogs(publicClient, {
241
+ event:
242
+ 'Transfer(address indexed from, address indexed to, uint256 value)',
243
+ args: {
244
+ to: accounts[0].address,
245
+ },
246
+ })
247
+ ).length,
248
+ ).toBe(1)
249
+ expect(
250
+ (
251
+ await getLogs(publicClient, {
252
+ event: 'Transfer(address indexed, address indexed, uint256)',
253
+ args: [null, accounts[0].address],
254
+ })
255
+ ).length,
256
+ ).toBe(1)
257
+ })
258
+
259
+ test('args: multiple `to`', async () => {
260
+ await writeContract(walletClient, {
261
+ ...usdcContractConfig,
262
+ from: address.usdcHolder,
263
+ functionName: 'transfer',
264
+ args: [accounts[0].address, 1n],
265
+ })
266
+ await writeContract(walletClient, {
267
+ ...usdcContractConfig,
268
+ from: address.vitalik,
269
+ functionName: 'transfer',
270
+ args: [accounts[1].address, 1n],
271
+ })
272
+ await writeContract(walletClient, {
273
+ ...usdcContractConfig,
274
+ from: address.vitalik,
275
+ functionName: 'transfer',
276
+ args: [accounts[1].address, 1n],
277
+ })
278
+ await writeContract(walletClient, {
279
+ ...usdcContractConfig,
280
+ from: address.vitalik,
281
+ functionName: 'approve',
282
+ args: [address.vitalik, 1n],
283
+ })
284
+ await mine(testClient, { blocks: 1 })
285
+
286
+ expect(
287
+ (
288
+ await getLogs(publicClient, {
289
+ event:
290
+ 'Transfer(address indexed from, address indexed to, uint256 value)',
291
+ args: {
292
+ to: [accounts[0].address, accounts[1].address],
293
+ },
294
+ })
295
+ ).length,
296
+ ).toBe(3)
297
+ expect(
298
+ (
299
+ await getLogs(publicClient, {
300
+ event: 'Transfer(address indexed, address indexed, uint256)',
301
+ args: [null, [accounts[0].address, accounts[1].address]],
302
+ })
303
+ ).length,
304
+ ).toBe(3)
305
+ })
107
306
  })
@@ -10,7 +10,6 @@ test('exports actions', () => {
10
10
  "createContractEventFilter": [Function],
11
11
  "createEventFilter": [Function],
12
12
  "createPendingTransactionFilter": [Function],
13
- "deployContract": [Function],
14
13
  "estimateGas": [Function],
15
14
  "getBalance": [Function],
16
15
  "getBlock": [Function],
@@ -25,12 +25,6 @@ export type {
25
25
  CreateContractEventFilterResponse,
26
26
  } from './createContractEventFilter'
27
27
 
28
- export { deployContract } from './deployContract'
29
- export type {
30
- DeployContractArgs,
31
- DeployContractResponse,
32
- } from './deployContract'
33
-
34
28
  export { estimateGas } from './estimateGas'
35
29
  export type { EstimateGasArgs, EstimateGasResponse } from './estimateGas'
36
30
 
@@ -106,7 +100,7 @@ export type {
106
100
  } from './getTransactionReceipt'
107
101
 
108
102
  export { multicall } from './multicall'
109
- export type { MulticallArgs } from './multicall'
103
+ export type { MulticallArgs, MulticallResponse } from './multicall'
110
104
 
111
105
  export { readContract } from './readContract'
112
106
  export type {
@@ -8,16 +8,16 @@ import {
8
8
  import { Address, ContractConfig, Hex, MulticallContracts } from '../../types'
9
9
  import { MulticallResults } from '../../types/multicall'
10
10
  import {
11
+ EncodeFunctionDataArgs,
11
12
  decodeFunctionResult,
12
13
  encodeFunctionData,
13
- EncodeFunctionDataArgs,
14
14
  getContractError,
15
15
  } from '../../utils'
16
16
  import { CallArgs } from './call'
17
17
  import { readContract } from './readContract'
18
18
 
19
19
  export type MulticallArgs<
20
- TContracts extends ContractConfig[],
20
+ TContracts extends ContractConfig[] = ContractConfig[],
21
21
  TAllowFailure extends boolean = true,
22
22
  > = Pick<CallArgs, 'blockNumber' | 'blockTag'> & {
23
23
  allowFailure?: TAllowFailure
@@ -25,13 +25,18 @@ export type MulticallArgs<
25
25
  multicallAddress: Address
26
26
  }
27
27
 
28
+ export type MulticallResponse<
29
+ TContracts extends ContractConfig[] = ContractConfig[],
30
+ TAllowFailure extends boolean = true,
31
+ > = MulticallResults<TContracts, TAllowFailure>
32
+
28
33
  export async function multicall<
29
34
  TContracts extends ContractConfig[],
30
35
  TAllowFailure extends boolean = true,
31
36
  >(
32
37
  client: PublicClient,
33
38
  args: MulticallArgs<TContracts, TAllowFailure>,
34
- ): Promise<MulticallResults<TContracts, TAllowFailure>> {
39
+ ): Promise<MulticallResponse<TContracts, TAllowFailure>> {
35
40
  const {
36
41
  allowFailure = true,
37
42
  blockNumber,
@@ -3,20 +3,17 @@ import { Abi, Narrow } from 'abitype'
3
3
  import type { PublicClient } from '../../clients'
4
4
  import { BaseError } from '../../errors'
5
5
  import type {
6
- Address,
7
6
  Chain,
8
7
  ContractConfig,
9
- ExtractArgsFromAbi,
10
8
  ExtractResultFromAbi,
11
- ExtractFunctionNameFromAbi,
12
9
  GetValue,
13
10
  } from '../../types'
14
11
  import {
12
+ DecodeFunctionResultArgs,
15
13
  EncodeFunctionDataArgs,
16
14
  decodeFunctionResult,
17
15
  encodeFunctionData,
18
16
  getContractError,
19
- DecodeFunctionResultArgs,
20
17
  } from '../../utils'
21
18
  import { WriteContractArgs } from '../wallet'
22
19
  import { call, CallArgs } from './call'
@@ -19,7 +19,7 @@ beforeAll(async () => {
19
19
  address: address.vitalik,
20
20
  })
21
21
  await impersonateAccount(testClient, {
22
- address: '0x5414d89a8bf7e99d732bc52f3e6a3ef461c0c078',
22
+ address: address.usdcHolder,
23
23
  })
24
24
  })
25
25
 
@@ -28,7 +28,7 @@ afterAll(async () => {
28
28
  address: address.vitalik,
29
29
  })
30
30
  await stopImpersonatingAccount(testClient, {
31
- address: '0x5414d89a8bf7e99d732bc52f3e6a3ef461c0c078',
31
+ address: address.usdcHolder,
32
32
  })
33
33
  })
34
34
 
@@ -231,14 +231,14 @@ test('args: args', async () => {
231
231
  ...usdcContractConfig,
232
232
  eventName: 'Transfer',
233
233
  args: {
234
- from: '0x5414d89a8bf7e99d732bc52f3e6a3ef461c0c078',
234
+ from: address.usdcHolder,
235
235
  },
236
236
  onLogs: (logs_) => logs.push(logs_),
237
237
  })
238
238
 
239
239
  await writeContract(walletClient, {
240
240
  ...usdcContractConfig,
241
- from: '0x5414d89a8bf7e99d732bc52f3e6a3ef461c0c078',
241
+ from: address.usdcHolder,
242
242
  functionName: 'transfer',
243
243
  args: [accounts[0].address, 1n],
244
244
  })
@@ -5,8 +5,7 @@ import { parseEther } from '../../utils'
5
5
  import { mine, setBalance } from '../test'
6
6
 
7
7
  import { deployContract } from './deployContract'
8
- import { getTransactionReceipt } from './getTransactionReceipt'
9
- import { simulateContract } from './simulateContract'
8
+ import { getTransactionReceipt } from '../public'
10
9
 
11
10
  test('default', async () => {
12
11
  const hash = await deployContract(walletClient, {
File without changes
@@ -6,6 +6,7 @@ test('exports actions', () => {
6
6
  expect(actions).toMatchInlineSnapshot(`
7
7
  {
8
8
  "addChain": [Function],
9
+ "deployContract": [Function],
9
10
  "getAccounts": [Function],
10
11
  "getPermissions": [Function],
11
12
  "requestAccounts": [Function],
@@ -1,5 +1,11 @@
1
1
  export { addChain } from './addChain'
2
2
 
3
+ export { deployContract } from './deployContract'
4
+ export type {
5
+ DeployContractArgs,
6
+ DeployContractResponse,
7
+ } from './deployContract'
8
+
3
9
  export { getAccounts } from './getAccounts'
4
10
 
5
11
  export { getPermissions } from './getPermissions'