@wagmi/core 0.4.9 → 0.5.1

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 (77) hide show
  1. package/README.md +6 -6
  2. package/chains/dist/wagmi-core-chains.cjs.dev.js +4 -2
  3. package/chains/dist/wagmi-core-chains.cjs.prod.js +4 -2
  4. package/chains/dist/wagmi-core-chains.esm.js +2 -2
  5. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.dev.js +28 -26
  6. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.prod.js +28 -26
  7. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.esm.js +5 -3
  8. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.cjs.dev.js +22 -23
  9. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.cjs.prod.js +22 -23
  10. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.esm.js +5 -6
  11. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.dev.js +33 -31
  12. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.prod.js +33 -31
  13. package/connectors/mock/dist/wagmi-core-connectors-mock.esm.js +6 -4
  14. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.dev.js +24 -25
  15. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.prod.js +24 -25
  16. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.esm.js +5 -6
  17. package/dist/{chains-b8e32454.cjs.prod.js → chains-acd25777.cjs.prod.js} +68 -9
  18. package/dist/{chains-174cf4b4.esm.js → chains-ce86f5e0.esm.js} +67 -10
  19. package/dist/{chains-ba6218fb.cjs.dev.js → chains-e81629e7.cjs.dev.js} +68 -9
  20. package/dist/declarations/src/actions/accounts/fetchBalance.d.ts +0 -1
  21. package/dist/declarations/src/actions/accounts/fetchSigner.d.ts +3 -3
  22. package/dist/declarations/src/actions/contracts/deprecatedWriteContract.d.ts +16 -0
  23. package/dist/declarations/src/actions/{tokens → contracts}/fetchToken.d.ts +0 -0
  24. package/dist/declarations/src/actions/contracts/index.d.ts +4 -1
  25. package/dist/declarations/src/actions/contracts/prepareWriteContract.d.ts +37 -0
  26. package/dist/declarations/src/actions/contracts/writeContract.d.ts +44 -8
  27. package/dist/declarations/src/actions/ens/fetchEnsAddress.d.ts +2 -1
  28. package/dist/declarations/src/actions/index.d.ts +2 -3
  29. package/dist/declarations/src/actions/transactions/deprecatedSendTransaction.d.ts +12 -0
  30. package/dist/declarations/src/actions/transactions/fetchTransaction.d.ts +21 -0
  31. package/dist/declarations/src/actions/transactions/index.d.ts +4 -1
  32. package/dist/declarations/src/actions/transactions/prepareSendTransaction.d.ts +36 -0
  33. package/dist/declarations/src/actions/transactions/sendTransaction.d.ts +43 -8
  34. package/dist/declarations/src/chains.d.ts +1 -1
  35. package/dist/declarations/src/client.d.ts +2 -2
  36. package/dist/declarations/src/connectors/base.d.ts +1 -2
  37. package/dist/declarations/src/connectors/coinbaseWallet.d.ts +2 -2
  38. package/dist/declarations/src/connectors/injected.d.ts +1 -1
  39. package/dist/declarations/src/connectors/mock/provider.d.ts +3 -2
  40. package/dist/declarations/src/connectors/walletConnect.d.ts +3 -2
  41. package/dist/declarations/src/constants/chains.d.ts +5 -0
  42. package/dist/declarations/src/constants/index.d.ts +1 -1
  43. package/dist/declarations/src/constants/rpcs.d.ts +5 -5
  44. package/dist/declarations/src/errors.d.ts +10 -3
  45. package/dist/declarations/src/index.d.ts +4 -4
  46. package/dist/declarations/src/providers/alchemy.d.ts +2 -3
  47. package/dist/declarations/src/providers/infura.d.ts +2 -3
  48. package/dist/declarations/src/providers/jsonRpc.d.ts +1 -2
  49. package/dist/declarations/src/providers/public.d.ts +2 -4
  50. package/dist/declarations/src/types/index.d.ts +6 -1
  51. package/dist/declarations/src/utils/configureChains.d.ts +3 -1
  52. package/dist/{client-fbdcbdb2.esm.js → getProvider-073f640f.esm.js} +369 -3
  53. package/dist/{client-4983a639.cjs.dev.js → getProvider-5c497ca0.cjs.dev.js} +436 -45
  54. package/dist/{client-dfad744f.cjs.prod.js → getProvider-868752e4.cjs.prod.js} +436 -45
  55. package/dist/{rpcs-1fd0a12f.cjs.prod.js → rpcs-3cf5a783.cjs.dev.js} +18 -12
  56. package/dist/{rpcs-f1d24f0e.cjs.dev.js → rpcs-afd1cc09.cjs.prod.js} +18 -12
  57. package/dist/{rpcs-b73a8f60.esm.js → rpcs-e837abf2.esm.js} +17 -11
  58. package/dist/wagmi-core.cjs.dev.js +586 -308
  59. package/dist/wagmi-core.cjs.prod.js +586 -308
  60. package/dist/wagmi-core.esm.js +493 -222
  61. package/package.json +9 -5
  62. package/providers/alchemy/dist/wagmi-core-providers-alchemy.cjs.dev.js +5 -7
  63. package/providers/alchemy/dist/wagmi-core-providers-alchemy.cjs.prod.js +5 -7
  64. package/providers/alchemy/dist/wagmi-core-providers-alchemy.esm.js +5 -7
  65. package/providers/infura/dist/wagmi-core-providers-infura.cjs.dev.js +5 -7
  66. package/providers/infura/dist/wagmi-core-providers-infura.cjs.prod.js +5 -7
  67. package/providers/infura/dist/wagmi-core-providers-infura.esm.js +5 -7
  68. package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.cjs.dev.js +0 -2
  69. package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.cjs.prod.js +0 -2
  70. package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.esm.js +0 -2
  71. package/providers/public/dist/wagmi-core-providers-public.cjs.dev.js +0 -2
  72. package/providers/public/dist/wagmi-core-providers-public.cjs.prod.js +0 -2
  73. package/providers/public/dist/wagmi-core-providers-public.esm.js +0 -2
  74. package/dist/base-337e6424.cjs.prod.js +0 -343
  75. package/dist/base-bd337280.cjs.dev.js +0 -343
  76. package/dist/base-f1bbf263.esm.js +0 -316
  77. package/dist/declarations/src/actions/tokens/index.d.ts +0 -1
@@ -2,16 +2,15 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var client = require('./client-4983a639.cjs.dev.js');
6
- var base = require('./base-bd337280.cjs.dev.js');
5
+ var getProvider = require('./getProvider-5c497ca0.cjs.dev.js');
6
+ var ethers = require('ethers');
7
7
  var ethers$1 = require('ethers/lib/ethers');
8
8
  var utils = require('ethers/lib/utils');
9
- var ethers = require('ethers');
10
9
  var shallow = require('zustand/shallow');
11
- var rpcs = require('./rpcs-f1d24f0e.cjs.dev.js');
12
- var chains = require('./chains-ba6218fb.cjs.dev.js');
13
- require('zustand/vanilla');
10
+ var rpcs = require('./rpcs-3cf5a783.cjs.dev.js');
11
+ var chains = require('./chains-e81629e7.cjs.dev.js');
14
12
  require('zustand/middleware');
13
+ require('zustand/vanilla');
15
14
  require('eventemitter3');
16
15
 
17
16
  function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
@@ -21,6 +20,7 @@ var shallow__default = /*#__PURE__*/_interopDefault(shallow);
21
20
  function configureChains(defaultChains, providers) {
22
21
  let {
23
22
  minQuorum = 1,
23
+ pollingInterval = 4000,
24
24
  targetQuorum = 1,
25
25
  stallTimeout
26
26
  } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
@@ -66,21 +66,27 @@ function configureChains(defaultChains, providers) {
66
66
  return {
67
67
  chains,
68
68
  provider: _ref2 => {
69
- var _defaultChains$, _chainProviders$;
69
+ var _defaultChains$;
70
70
 
71
71
  let {
72
72
  chainId
73
73
  } = _ref2;
74
74
  const activeChainId = chainId && chains.some(x => x.id === chainId) ? chainId : (_defaultChains$ = defaultChains[0]) === null || _defaultChains$ === void 0 ? void 0 : _defaultChains$.id;
75
75
  const chainProviders = providers_[activeChainId];
76
- if (!chainProviders) throw new Error("No providers configured for chain \"".concat(activeChainId, "\""));
77
- if (chainProviders.length === 1) return Object.assign(((_chainProviders$ = chainProviders[0]) === null || _chainProviders$ === void 0 ? void 0 : _chainProviders$.call(chainProviders)) || {}, {
78
- chains
79
- });
76
+ if (!chainProviders || !chainProviders[0]) throw new Error("No providers configured for chain \"".concat(activeChainId, "\""));
77
+
78
+ if (chainProviders.length === 1) {
79
+ return Object.assign(chainProviders[0](), {
80
+ chains,
81
+ pollingInterval
82
+ });
83
+ }
84
+
80
85
  return Object.assign(fallbackProvider(targetQuorum, minQuorum, chainProviders, {
81
86
  stallTimeout
82
87
  }), {
83
- chains
88
+ chains,
89
+ pollingInterval
84
90
  });
85
91
  },
86
92
  webSocketProvider: _ref3 => {
@@ -247,30 +253,30 @@ async function connect(_ref) {
247
253
  chainId,
248
254
  connector
249
255
  } = _ref;
250
- const client$1 = client.getClient();
251
- const activeConnector = client$1.connector;
252
- if (connector.id === (activeConnector === null || activeConnector === void 0 ? void 0 : activeConnector.id)) throw new base.ConnectorAlreadyConnectedError();
256
+ const client = getProvider.getClient();
257
+ const activeConnector = client.connector;
258
+ if (connector.id === (activeConnector === null || activeConnector === void 0 ? void 0 : activeConnector.id)) throw new getProvider.ConnectorAlreadyConnectedError();
253
259
 
254
260
  try {
255
- client$1.setState(x => ({ ...x,
261
+ client.setState(x => ({ ...x,
256
262
  status: 'connecting'
257
263
  }));
258
264
  const data = await connector.connect({
259
265
  chainId
260
266
  });
261
- client$1.setLastUsedConnector(connector.id);
262
- client$1.setState(x => ({ ...x,
267
+ client.setLastUsedConnector(connector.id);
268
+ client.setState(x => ({ ...x,
263
269
  connector,
264
270
  chains: connector === null || connector === void 0 ? void 0 : connector.chains,
265
271
  data,
266
272
  status: 'connected'
267
273
  }));
268
- client$1.storage.setItem('connected', true);
274
+ client.storage.setItem('connected', true);
269
275
  return { ...data,
270
276
  connector
271
277
  };
272
278
  } catch (err) {
273
- client$1.setState(x => {
279
+ client.setState(x => {
274
280
  return { ...x,
275
281
  // Keep existing connector connected in case of error
276
282
  status: x.connector ? 'connected' : 'disconnected'
@@ -281,10 +287,10 @@ async function connect(_ref) {
281
287
  }
282
288
 
283
289
  async function disconnect() {
284
- const client$1 = client.getClient();
285
- if (client$1.connector) await client$1.connector.disconnect();
286
- client$1.clearState();
287
- client$1.storage.removeItem('connected');
290
+ const client = getProvider.getClient();
291
+ if (client.connector) await client.connector.disconnect();
292
+ client.clearState();
293
+ client.storage.removeItem('connected');
288
294
  }
289
295
 
290
296
  function getContract(_ref) {
@@ -296,34 +302,170 @@ function getContract(_ref) {
296
302
  return new ethers.Contract(addressOrName, contractInterface, signerOrProvider);
297
303
  }
298
304
 
299
- function getProvider() {
305
+ async function deprecatedWriteContract(_ref) {
300
306
  let {
307
+ addressOrName,
308
+ args,
309
+ chainId,
310
+ contractInterface,
311
+ functionName,
312
+ overrides,
313
+ signerOrProvider
314
+ } = _ref;
315
+ const {
316
+ connector
317
+ } = getProvider.getClient();
318
+ if (!connector) throw new getProvider.ConnectorNotFoundError();
319
+ const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
320
+
321
+ try {
322
+ var _chain;
323
+
324
+ let chain;
325
+
326
+ if (chainId) {
327
+ const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
328
+
329
+ if (chainId !== activeChainId) {
330
+ var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
331
+
332
+ if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new getProvider.ChainMismatchError({
333
+ activeChain: (_connector$chains$fin = (_connector$chains$fin2 = connector.chains.find(x => x.id === activeChainId)) === null || _connector$chains$fin2 === void 0 ? void 0 : _connector$chains$fin2.name) !== null && _connector$chains$fin !== void 0 ? _connector$chains$fin : "Chain ".concat(activeChainId),
334
+ targetChain: (_connector$chains$fin3 = (_connector$chains$fin4 = connector.chains.find(x => x.id === chainId)) === null || _connector$chains$fin4 === void 0 ? void 0 : _connector$chains$fin4.name) !== null && _connector$chains$fin3 !== void 0 ? _connector$chains$fin3 : "Chain ".concat(chainId)
335
+ });
336
+ }
337
+ }
338
+
339
+ const signer = await connector.getSigner({
340
+ chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
341
+ });
342
+ const contract = getContract({
343
+ addressOrName,
344
+ contractInterface,
345
+ signerOrProvider
346
+ });
347
+ const contractWithSigner = contract.connect(signer);
348
+ const contractFunction = contractWithSigner[functionName];
349
+ if (!contractFunction) console.warn("\"".concat(functionName, "\" does not exist in interface for contract \"").concat(addressOrName, "\""));
350
+ return await contractFunction(...params);
351
+ } catch (error) {
352
+ if (error.code === 4001) throw new getProvider.UserRejectedRequestError(error);
353
+ throw error;
354
+ }
355
+ }
356
+
357
+ async function fetchToken(_ref) {
358
+ let {
359
+ address,
360
+ chainId,
361
+ formatUnits: units = 'ether'
362
+ } = _ref;
363
+ const erc20Config = {
364
+ addressOrName: address,
365
+ contractInterface: erc20ABI,
301
366
  chainId
302
- } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
303
- const client$1 = client.getClient();
304
- if (chainId && typeof client$1.config.provider === 'function') return client$1.config.provider({
305
- chainId
367
+ };
368
+ const [decimals, name, symbol, totalSupply] = await readContracts({
369
+ allowFailure: false,
370
+ contracts: [{ ...erc20Config,
371
+ functionName: 'decimals'
372
+ }, { ...erc20Config,
373
+ functionName: 'name'
374
+ }, { ...erc20Config,
375
+ functionName: 'symbol'
376
+ }, { ...erc20Config,
377
+ functionName: 'totalSupply'
378
+ }]
306
379
  });
307
- return client$1.provider;
380
+ return {
381
+ address,
382
+ decimals,
383
+ name,
384
+ symbol,
385
+ totalSupply: {
386
+ formatted: utils.formatUnits(totalSupply, units),
387
+ value: totalSupply
388
+ }
389
+ };
390
+ }
391
+
392
+ /**
393
+ * @description Prepares the parameters required for a contract write transaction.
394
+ *
395
+ * Returns config to be passed through to `writeContract`.
396
+ *
397
+ * @example
398
+ * import { prepareWriteContract, writeContract } from '@wagmi/core'
399
+ *
400
+ * const config = await prepareWriteContract({
401
+ * addressOrName: '0x...',
402
+ * contractInterface: wagmiAbi,
403
+ * functionName: 'mint',
404
+ * })
405
+ * const result = await writeContract(config)
406
+ */
407
+ async function prepareWriteContract(_ref) {
408
+ let {
409
+ addressOrName,
410
+ args,
411
+ chainId,
412
+ contractInterface,
413
+ functionName,
414
+ overrides,
415
+ signer: signer_
416
+ } = _ref;
417
+ const signer = signer_ !== null && signer_ !== void 0 ? signer_ : await fetchSigner();
418
+ if (!signer) throw new getProvider.ConnectorNotFoundError();
419
+ const contract = getContract({
420
+ addressOrName,
421
+ contractInterface,
422
+ signerOrProvider: signer
423
+ });
424
+ const populateTransactionFn = contract.populateTransaction[functionName];
425
+
426
+ if (!populateTransactionFn) {
427
+ throw new getProvider.ContractMethodDoesNotExistError({
428
+ addressOrName,
429
+ functionName
430
+ });
431
+ }
432
+
433
+ const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
434
+ const unsignedTransaction = await populateTransactionFn(...params);
435
+ const gasLimit = unsignedTransaction.gasLimit || (await signer.estimateGas(unsignedTransaction));
436
+ return {
437
+ addressOrName,
438
+ args,
439
+ ...(chainId ? {
440
+ chainId
441
+ } : {}),
442
+ contractInterface,
443
+ functionName,
444
+ overrides,
445
+ request: { ...unsignedTransaction,
446
+ gasLimit
447
+ },
448
+ mode: 'prepared'
449
+ };
308
450
  }
309
451
 
310
452
  function getWebSocketProvider() {
311
453
  let {
312
454
  chainId
313
455
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
314
- const client$1 = client.getClient();
315
- if (chainId && typeof client$1.config.webSocketProvider === 'function') return client$1.config.webSocketProvider({
456
+ const client = getProvider.getClient();
457
+ if (chainId && typeof client.config.webSocketProvider === 'function') return client.config.webSocketProvider({
316
458
  chainId
317
459
  });
318
- return client$1.webSocketProvider;
460
+ return client.webSocketProvider;
319
461
  }
320
462
 
321
463
  function watchProvider(args, callback) {
322
- const client$1 = client.getClient();
464
+ const client = getProvider.getClient();
323
465
 
324
- const handleChange = async () => callback(getProvider(args));
466
+ const handleChange = async () => callback(getProvider.getProvider(args));
325
467
 
326
- const unsubscribe = client$1.subscribe(_ref => {
468
+ const unsubscribe = client.subscribe(_ref => {
327
469
  let {
328
470
  provider
329
471
  } = _ref;
@@ -333,11 +475,11 @@ function watchProvider(args, callback) {
333
475
  }
334
476
 
335
477
  function watchWebSocketProvider(args, callback) {
336
- const client$1 = client.getClient();
478
+ const client = getProvider.getClient();
337
479
 
338
480
  const handleChange = async () => callback(getWebSocketProvider(args));
339
481
 
340
- const unsubscribe = client$1.subscribe(_ref => {
482
+ const unsubscribe = client.subscribe(_ref => {
341
483
  let {
342
484
  webSocketProvider
343
485
  } = _ref;
@@ -355,7 +497,7 @@ async function readContract(_ref) {
355
497
  functionName,
356
498
  overrides
357
499
  } = _ref;
358
- const provider = getProvider({
500
+ const provider = getProvider.getProvider({
359
501
  chainId
360
502
  });
361
503
  const contract = getContract({
@@ -377,16 +519,16 @@ async function multicall(_ref) {
377
519
  contracts,
378
520
  overrides
379
521
  } = _ref;
380
- const provider = getProvider({
522
+ const provider = getProvider.getProvider({
381
523
  chainId
382
524
  });
383
- if (!provider.chains) throw new base.ProviderChainsNotFound();
525
+ if (!provider.chains) throw new getProvider.ProviderChainsNotFound();
384
526
  const chain = provider.chains.find(chain => chain.id === chainId) || provider.chains[0];
385
- if (!chain) throw new base.ProviderChainsNotFound();
386
- if (!(chain !== null && chain !== void 0 && chain.multicall)) throw new base.ChainDoesNotSupportMulticallError({
527
+ if (!chain) throw new getProvider.ProviderChainsNotFound();
528
+ if (!(chain !== null && chain !== void 0 && chain.multicall)) throw new getProvider.ChainDoesNotSupportMulticallError({
387
529
  chain
388
530
  });
389
- if (typeof (overrides === null || overrides === void 0 ? void 0 : overrides.blockTag) === 'number' && (overrides === null || overrides === void 0 ? void 0 : overrides.blockTag) < chain.multicall.blockCreated) throw new base.ChainDoesNotSupportMulticallError({
531
+ if (typeof (overrides === null || overrides === void 0 ? void 0 : overrides.blockTag) === 'number' && (overrides === null || overrides === void 0 ? void 0 : overrides.blockTag) < chain.multicall.blockCreated) throw new getProvider.ChainDoesNotSupportMulticallError({
390
532
  blockNumber: overrides === null || overrides === void 0 ? void 0 : overrides.blockTag,
391
533
  chain
392
534
  });
@@ -433,11 +575,9 @@ async function multicall(_ref) {
433
575
  } = contracts[i];
434
576
 
435
577
  if (returnData === '0x') {
436
- var _chain$blockExplorers;
437
-
438
- const err = new base.ContractMethodNoResultError({
578
+ const err = new getProvider.ContractMethodNoResultError({
439
579
  addressOrName,
440
- blockExplorer: (_chain$blockExplorers = chain.blockExplorers) === null || _chain$blockExplorers === void 0 ? void 0 : _chain$blockExplorers.default,
580
+ chainId: chain.id,
441
581
  functionName
442
582
  });
443
583
  if (!allowFailure) throw err;
@@ -468,7 +608,7 @@ async function readContracts(_ref) {
468
608
  } = _ref;
469
609
 
470
610
  try {
471
- const provider = getProvider();
611
+ const provider = getProvider.getProvider();
472
612
  const contractsByChainId = contracts.reduce((contracts, contract) => {
473
613
  var _contract$chainId;
474
614
 
@@ -491,7 +631,7 @@ async function readContracts(_ref) {
491
631
  return (await Promise.allSettled(promises)).map(result => {
492
632
  if (result.status === 'fulfilled') return result.value;
493
633
 
494
- if (result.reason instanceof base.ChainDoesNotSupportMulticallError) {
634
+ if (result.reason instanceof getProvider.ChainDoesNotSupportMulticallError) {
495
635
  console.warn(result.reason.message);
496
636
  throw result.reason;
497
637
  }
@@ -502,7 +642,7 @@ async function readContracts(_ref) {
502
642
 
503
643
  return (await Promise.all(promises)).flat();
504
644
  } catch (err) {
505
- if (err instanceof base.ContractMethodNoResultError) throw err;
645
+ if (err instanceof getProvider.ContractMethodNoResultError) throw err;
506
646
  const promises = contracts.map(contract => readContract({ ...contract,
507
647
  overrides
508
648
  }));
@@ -536,7 +676,7 @@ eventName, callback) {
536
676
  contract = getContract({
537
677
  signerOrProvider: getWebSocketProvider({
538
678
  chainId
539
- }) || getProvider({
679
+ }) || getProvider.getProvider({
540
680
  chainId
541
681
  }),
542
682
  ...contractArgs
@@ -545,8 +685,8 @@ eventName, callback) {
545
685
  };
546
686
 
547
687
  watchEvent();
548
- const client$1 = client.getClient();
549
- const unsubscribe = client$1.subscribe(_ref => {
688
+ const client = getProvider.getClient();
689
+ const unsubscribe = client.subscribe(_ref => {
550
690
  let {
551
691
  provider,
552
692
  webSocketProvider
@@ -570,7 +710,7 @@ async function fetchBlockNumber() {
570
710
  let {
571
711
  chainId
572
712
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
573
- const provider = getProvider({
713
+ const provider = getProvider.getProvider({
574
714
  chainId
575
715
  });
576
716
  const blockNumber = await provider.getBlockNumber();
@@ -593,10 +733,10 @@ function watchBlockNumber(args, callback) {
593
733
  previousProvider = provider;
594
734
  };
595
735
 
596
- const client$1 = client.getClient();
597
- const provider_ = (_client$webSocketProv = client$1.webSocketProvider) !== null && _client$webSocketProv !== void 0 ? _client$webSocketProv : client$1.provider;
736
+ const client = getProvider.getClient();
737
+ const provider_ = (_client$webSocketProv = client.webSocketProvider) !== null && _client$webSocketProv !== void 0 ? _client$webSocketProv : client.provider;
598
738
  if (args.listen) createListener(provider_);
599
- const unsubscribe = client$1.subscribe(_ref => {
739
+ const unsubscribe = client.subscribe(_ref => {
600
740
  let {
601
741
  provider,
602
742
  webSocketProvider
@@ -627,14 +767,14 @@ function watchBlockNumber(args, callback) {
627
767
  }
628
768
 
629
769
  function watchReadContract(config, callback) {
630
- const client$1 = client.getClient();
770
+ const client = getProvider.getClient();
631
771
 
632
772
  const handleChange = async () => callback(await readContract(config));
633
773
 
634
774
  const unwatch = config.listenToBlock ? watchBlockNumber({
635
775
  listen: true
636
776
  }, handleChange) : undefined;
637
- const unsubscribe = client$1.subscribe(_ref => {
777
+ const unsubscribe = client.subscribe(_ref => {
638
778
  let {
639
779
  provider
640
780
  } = _ref;
@@ -647,14 +787,14 @@ function watchReadContract(config, callback) {
647
787
  }
648
788
 
649
789
  function watchReadContracts(config, callback) {
650
- const client$1 = client.getClient();
790
+ const client = getProvider.getClient();
651
791
 
652
792
  const handleChange = async () => callback(await readContracts(config));
653
793
 
654
794
  const unwatch = config.listenToBlock ? watchBlockNumber({
655
795
  listen: true
656
796
  }, handleChange) : undefined;
657
- const unsubscribe = client$1.subscribe(_ref => {
797
+ const unsubscribe = client.subscribe(_ref => {
658
798
  let {
659
799
  provider
660
800
  } = _ref;
@@ -666,21 +806,15 @@ function watchReadContracts(config, callback) {
666
806
  };
667
807
  }
668
808
 
669
- async function writeContract(_ref) {
809
+ async function deprecatedSendTransaction(_ref) {
670
810
  let {
671
- addressOrName,
672
- args,
673
811
  chainId,
674
- contractInterface,
675
- functionName,
676
- overrides,
677
- signerOrProvider
812
+ request
678
813
  } = _ref;
679
814
  const {
680
815
  connector
681
- } = client.getClient();
682
- if (!connector) throw new base.ConnectorNotFoundError();
683
- const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
816
+ } = getProvider.getClient();
817
+ if (!connector) throw new getProvider.ConnectorNotFoundError();
684
818
 
685
819
  try {
686
820
  var _chain;
@@ -693,7 +827,7 @@ async function writeContract(_ref) {
693
827
  if (chainId !== activeChainId) {
694
828
  var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
695
829
 
696
- if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new base.ChainMismatchError({
830
+ if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new getProvider.ChainMismatchError({
697
831
  activeChain: (_connector$chains$fin = (_connector$chains$fin2 = connector.chains.find(x => x.id === activeChainId)) === null || _connector$chains$fin2 === void 0 ? void 0 : _connector$chains$fin2.name) !== null && _connector$chains$fin !== void 0 ? _connector$chains$fin : "Chain ".concat(activeChainId),
698
832
  targetChain: (_connector$chains$fin3 = (_connector$chains$fin4 = connector.chains.find(x => x.id === chainId)) === null || _connector$chains$fin4 === void 0 ? void 0 : _connector$chains$fin4.name) !== null && _connector$chains$fin3 !== void 0 ? _connector$chains$fin3 : "Chain ".concat(chainId)
699
833
  });
@@ -703,32 +837,329 @@ async function writeContract(_ref) {
703
837
  const signer = await connector.getSigner({
704
838
  chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
705
839
  });
706
- const contract = getContract({
707
- addressOrName,
708
- contractInterface,
709
- signerOrProvider
840
+ return await signer.sendTransaction(request);
841
+ } catch (error) {
842
+ if (error.code === 4001) throw new getProvider.UserRejectedRequestError(error);
843
+ throw error;
844
+ }
845
+ }
846
+
847
+ /**
848
+ * @description Fetches transaction for hash
849
+ *
850
+ * @example
851
+ * import { fetchTransaction } from '@wagmi/core'
852
+ *
853
+ * const transaction = await fetchTransaction({
854
+ * chainId: 1,
855
+ * hash: '0x...',
856
+ * })
857
+ */
858
+ async function fetchTransaction(_ref) {
859
+ let {
860
+ chainId,
861
+ hash
862
+ } = _ref;
863
+ const provider = getProvider.getProvider({
864
+ chainId
865
+ });
866
+ return await provider.getTransaction(hash);
867
+ }
868
+
869
+ async function fetchEnsAddress(_ref) {
870
+ let {
871
+ chainId,
872
+ name
873
+ } = _ref;
874
+ const provider = getProvider.getProvider({
875
+ chainId
876
+ });
877
+ const address = await provider.resolveName(name);
878
+
879
+ try {
880
+ return address ? utils.getAddress(address) : null;
881
+ } catch (_error) {
882
+ return null;
883
+ }
884
+ }
885
+
886
+ async function fetchEnsAvatar(_ref) {
887
+ let {
888
+ addressOrName,
889
+ chainId
890
+ } = _ref;
891
+ const provider = getProvider.getProvider({
892
+ chainId
893
+ }); // TODO: Update with more advanced logic
894
+ // https://github.com/ensdomains/ens-avatar
895
+
896
+ const avatar = await provider.getAvatar(addressOrName);
897
+ return avatar;
898
+ }
899
+
900
+ async function fetchEnsName(_ref) {
901
+ let {
902
+ address,
903
+ chainId
904
+ } = _ref;
905
+ const provider = getProvider.getProvider({
906
+ chainId
907
+ });
908
+ return await provider.lookupAddress(address);
909
+ }
910
+
911
+ async function fetchEnsResolver(_ref) {
912
+ let {
913
+ chainId,
914
+ name
915
+ } = _ref;
916
+ const provider = getProvider.getProvider({
917
+ chainId
918
+ });
919
+ const resolver = await provider.getResolver(name);
920
+ return resolver;
921
+ }
922
+
923
+ /**
924
+ * @description Prepares the parameters required for sending a transaction.
925
+ *
926
+ * Returns config to be passed through to `sendTransaction`.
927
+ *
928
+ * @example
929
+ * import { prepareSendTransaction, sendTransaction } from '@wagmi/core'
930
+ *
931
+ * const config = await prepareSendTransaction({
932
+ * request: {
933
+ * to: 'moxey.eth',
934
+ * value: parseEther('1'),
935
+ * }
936
+ * })
937
+ * const result = await sendTransaction(config)
938
+ */
939
+ async function prepareSendTransaction(_ref) {
940
+ let {
941
+ chainId,
942
+ request,
943
+ signerOrProvider = getProvider.getProvider({
944
+ chainId
945
+ })
946
+ } = _ref;
947
+ const [to, gasLimit] = await Promise.all([utils.isAddress(request.to) ? Promise.resolve(request.to) : fetchEnsAddress({
948
+ name: request.to
949
+ }), request.gasLimit ? Promise.resolve(request.gasLimit) : signerOrProvider.estimateGas(request)]);
950
+ if (!to) throw new Error('Could not resolve ENS name');
951
+ return { ...(chainId ? {
952
+ chainId
953
+ } : {}),
954
+ request: { ...request,
955
+ gasLimit,
956
+ to
957
+ },
958
+ mode: 'prepared'
959
+ };
960
+ }
961
+
962
+ /**
963
+ * @description Function to send a transaction.
964
+ *
965
+ * It is recommended to pair this with the `prepareSendTransaction` function to avoid
966
+ * [UX pitfalls](https://wagmi.sh/docs/prepare-hooks/intro#ux-pitfalls-without-prepare-hooks).
967
+ *
968
+ * @example
969
+ * import { prepareSendTransaction, sendTransaction } from '@wagmi/core'
970
+ *
971
+ * const config = await prepareSendTransaction({
972
+ * to: 'moxey.eth',
973
+ * value: parseEther('1'),
974
+ * })
975
+ * const result = await sendTransaction(config)
976
+ */
977
+ async function sendTransaction(_ref) {
978
+ let {
979
+ chainId,
980
+ mode,
981
+ request
982
+ } = _ref;
983
+
984
+ /********************************************************************/
985
+
986
+ /** START: iOS App Link cautious code. */
987
+
988
+ /** Do not perform any async operations in this block. */
989
+
990
+ /** Ref: wagmi.sh/docs/prepare-hooks/intro#ios-app-link-constraints */
991
+
992
+ /********************************************************************/
993
+ // `fetchSigner` isn't really "asynchronous" as we have already
994
+ // initialized the provider upon user connection, so it will return
995
+ // immediately.
996
+ const signer = await fetchSigner();
997
+ if (!signer) throw new getProvider.ConnectorNotFoundError();
998
+
999
+ if (mode === 'prepared') {
1000
+ if (!request.gasLimit) throw new Error('`gasLimit` is required');
1001
+ if (!request.to) throw new Error('`to` is required');
1002
+ }
1003
+
1004
+ const {
1005
+ chain: activeChain,
1006
+ chains
1007
+ } = getNetwork();
1008
+ const activeChainId = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id;
1009
+
1010
+ if (chainId && chainId !== (activeChain === null || activeChain === void 0 ? void 0 : activeChain.id)) {
1011
+ var _chains$find$name, _chains$find, _chains$find$name2, _chains$find2;
1012
+
1013
+ throw new getProvider.ChainMismatchError({
1014
+ activeChain: (_chains$find$name = (_chains$find = chains.find(x => x.id === activeChainId)) === null || _chains$find === void 0 ? void 0 : _chains$find.name) !== null && _chains$find$name !== void 0 ? _chains$find$name : "Chain ".concat(activeChainId),
1015
+ targetChain: (_chains$find$name2 = (_chains$find2 = chains.find(x => x.id === chainId)) === null || _chains$find2 === void 0 ? void 0 : _chains$find2.name) !== null && _chains$find$name2 !== void 0 ? _chains$find$name2 : "Chain ".concat(chainId)
710
1016
  });
711
- const contractWithSigner = contract.connect(signer);
712
- const contractFunction = contractWithSigner[functionName];
713
- if (!contractFunction) console.warn("\"".concat(functionName, "\" does not exist in interface for contract \"").concat(addressOrName, "\""));
714
- return await contractFunction(...params);
1017
+ }
1018
+
1019
+ try {
1020
+ var _connectUnchecked, _ref2;
1021
+
1022
+ // Why don't we just use `signer.sendTransaction`?
1023
+ // The `signer.sendTransaction` method performs async
1024
+ // heavy operations (such as fetching block number)
1025
+ // which is not really needed for our case.
1026
+ // Having async heavy operations has side effects
1027
+ // when using it in a click handler (iOS deep linking issues,
1028
+ // delay to open wallet, etc).
1029
+ const uncheckedSigner = (_connectUnchecked = (_ref2 = signer).connectUnchecked) === null || _connectUnchecked === void 0 ? void 0 : _connectUnchecked.call(_ref2);
1030
+ const {
1031
+ hash,
1032
+ wait
1033
+ } = await (uncheckedSigner !== null && uncheckedSigner !== void 0 ? uncheckedSigner : signer).sendTransaction(request);
1034
+ /********************************************************************/
1035
+
1036
+ /** END: iOS App Link cautious code. */
1037
+
1038
+ /** Go nuts! */
1039
+
1040
+ /********************************************************************/
1041
+
1042
+ return {
1043
+ hash,
1044
+ wait
1045
+ };
715
1046
  } catch (error) {
716
- if (error.code === 4001) throw new base.UserRejectedRequestError(error);
1047
+ if (error.code === 4001) throw new getProvider.UserRejectedRequestError(error);
717
1048
  throw error;
718
1049
  }
719
1050
  }
720
1051
 
1052
+ async function waitForTransaction(_ref) {
1053
+ let {
1054
+ chainId,
1055
+ confirmations,
1056
+ hash,
1057
+ timeout,
1058
+ wait: wait_
1059
+ } = _ref;
1060
+ let promise;
1061
+
1062
+ if (hash) {
1063
+ const provider = getProvider.getProvider({
1064
+ chainId
1065
+ });
1066
+ promise = provider.waitForTransaction(hash, confirmations, timeout);
1067
+ } else if (wait_) promise = wait_(confirmations);else throw new Error('hash or wait is required');
1068
+
1069
+ return await promise;
1070
+ }
1071
+
1072
+ /**
1073
+ * @description Function to call a contract write method.
1074
+ *
1075
+ * It is recommended to pair this with the {@link prepareWriteContract} function
1076
+ * to avoid [UX pitfalls](https://wagmi.sh/docs/prepare-hooks/intro#ux-pitfalls-without-prepare-hooks).
1077
+ *
1078
+ * @example
1079
+ * import { prepareWriteContract, writeContract } from '@wagmi/core'
1080
+ *
1081
+ * const config = await prepareWriteContract({
1082
+ * addressOrName: '0x...',
1083
+ * contractInterface: wagmiAbi,
1084
+ * functionName: 'mint',
1085
+ * })
1086
+ * const result = await writeContract(config)
1087
+ */
1088
+ async function writeContract(_ref) {
1089
+ let {
1090
+ addressOrName,
1091
+ args,
1092
+ chainId,
1093
+ contractInterface,
1094
+ functionName,
1095
+ mode,
1096
+ overrides,
1097
+ request: request_
1098
+ } = _ref;
1099
+
1100
+ /********************************************************************/
1101
+
1102
+ /** START: iOS App Link cautious code. */
1103
+
1104
+ /** Do not perform any async operations in this block. */
1105
+
1106
+ /** Ref: wagmi.sh/docs/prepare-hooks/intro#ios-app-link-constraints */
1107
+
1108
+ /********************************************************************/
1109
+ const signer = await fetchSigner();
1110
+ if (!signer) throw new getProvider.ConnectorNotFoundError();
1111
+ const {
1112
+ chain: activeChain,
1113
+ chains
1114
+ } = getNetwork();
1115
+ const activeChainId = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id;
1116
+
1117
+ if (chainId && chainId !== activeChainId) {
1118
+ var _chains$find$name, _chains$find, _chains$find$name2, _chains$find2;
1119
+
1120
+ throw new getProvider.ChainMismatchError({
1121
+ activeChain: (_chains$find$name = (_chains$find = chains.find(x => x.id === activeChainId)) === null || _chains$find === void 0 ? void 0 : _chains$find.name) !== null && _chains$find$name !== void 0 ? _chains$find$name : "Chain ".concat(activeChainId),
1122
+ targetChain: (_chains$find$name2 = (_chains$find2 = chains.find(x => x.id === chainId)) === null || _chains$find2 === void 0 ? void 0 : _chains$find2.name) !== null && _chains$find$name2 !== void 0 ? _chains$find$name2 : "Chain ".concat(chainId)
1123
+ });
1124
+ }
1125
+
1126
+ if (mode === 'prepared') {
1127
+ if (!request_) throw new Error('`request` is required');
1128
+ }
1129
+
1130
+ const request = mode === 'recklesslyUnprepared' ? (await prepareWriteContract({
1131
+ addressOrName,
1132
+ args,
1133
+ contractInterface,
1134
+ functionName,
1135
+ overrides
1136
+ })).request : request_;
1137
+ const transaction = await sendTransaction({
1138
+ request,
1139
+ mode: 'prepared'
1140
+ });
1141
+ /********************************************************************/
1142
+
1143
+ /** END: iOS App Link cautious code. */
1144
+
1145
+ /** Go nuts! */
1146
+
1147
+ /********************************************************************/
1148
+
1149
+ return transaction;
1150
+ }
1151
+
721
1152
  async function fetchBalance(_ref) {
722
1153
  var _client$chains, _chain$nativeCurrency, _chain$nativeCurrency2, _chain$nativeCurrency3, _chain$nativeCurrency4;
723
1154
 
724
1155
  let {
725
1156
  addressOrName,
726
1157
  chainId,
727
- formatUnits: unit = 'ether',
1158
+ formatUnits: unit,
728
1159
  token
729
1160
  } = _ref;
730
- const client$1 = client.getClient();
731
- const provider = getProvider({
1161
+ const client = getProvider.getClient();
1162
+ const provider = getProvider.getProvider({
732
1163
  chainId
733
1164
  });
734
1165
 
@@ -761,21 +1192,19 @@ async function fetchBalance(_ref) {
761
1192
  });
762
1193
  return {
763
1194
  decimals,
764
- formatted: utils.formatUnits(value !== null && value !== void 0 ? value : '0', unit),
1195
+ formatted: utils.formatUnits(value !== null && value !== void 0 ? value : '0', unit !== null && unit !== void 0 ? unit : decimals),
765
1196
  symbol,
766
- unit,
767
1197
  value
768
1198
  };
769
1199
  }
770
1200
 
771
- const chains = [...(client$1.provider.chains || []), ...((_client$chains = client$1.chains) !== null && _client$chains !== void 0 ? _client$chains : [])];
1201
+ const chains = [...(client.provider.chains || []), ...((_client$chains = client.chains) !== null && _client$chains !== void 0 ? _client$chains : [])];
772
1202
  const value = await provider.getBalance(addressOrName);
773
1203
  const chain = chains.find(x => x.id === provider.network.chainId);
774
1204
  return {
775
1205
  decimals: (_chain$nativeCurrency = chain === null || chain === void 0 ? void 0 : (_chain$nativeCurrency2 = chain.nativeCurrency) === null || _chain$nativeCurrency2 === void 0 ? void 0 : _chain$nativeCurrency2.decimals) !== null && _chain$nativeCurrency !== void 0 ? _chain$nativeCurrency : 18,
776
- formatted: utils.formatUnits(value !== null && value !== void 0 ? value : '0', unit),
1206
+ formatted: utils.formatUnits(value !== null && value !== void 0 ? value : '0', unit !== null && unit !== void 0 ? unit : 'ether'),
777
1207
  symbol: (_chain$nativeCurrency3 = chain === null || chain === void 0 ? void 0 : (_chain$nativeCurrency4 = chain.nativeCurrency) === null || _chain$nativeCurrency4 === void 0 ? void 0 : _chain$nativeCurrency4.symbol) !== null && _chain$nativeCurrency3 !== void 0 ? _chain$nativeCurrency3 : 'ETH',
778
- unit,
779
1208
  value
780
1209
  };
781
1210
  }
@@ -783,8 +1212,8 @@ async function fetchBalance(_ref) {
783
1212
  async function fetchSigner() {
784
1213
  var _client$connector, _client$connector$get;
785
1214
 
786
- const client$1 = client.getClient();
787
- const signer = (await ((_client$connector = client$1.connector) === null || _client$connector === void 0 ? void 0 : (_client$connector$get = _client$connector.getSigner) === null || _client$connector$get === void 0 ? void 0 : _client$connector$get.call(_client$connector))) || null;
1215
+ const client = getProvider.getClient();
1216
+ const signer = (await ((_client$connector = client.connector) === null || _client$connector === void 0 ? void 0 : (_client$connector$get = _client$connector.getSigner) === null || _client$connector$get === void 0 ? void 0 : _client$connector$get.call(_client$connector))) || null;
788
1217
  return signer;
789
1218
  }
790
1219
 
@@ -793,7 +1222,7 @@ function getAccount() {
793
1222
  data,
794
1223
  connector,
795
1224
  status
796
- } = client.getClient();
1225
+ } = getProvider.getClient();
797
1226
 
798
1227
  switch (status) {
799
1228
  case 'connected':
@@ -845,10 +1274,10 @@ function getAccount() {
845
1274
  function getNetwork() {
846
1275
  var _client$data, _client$data$chain, _client$chains, _find, _client$data2;
847
1276
 
848
- const client$1 = client.getClient();
849
- const chainId = (_client$data = client$1.data) === null || _client$data === void 0 ? void 0 : (_client$data$chain = _client$data.chain) === null || _client$data$chain === void 0 ? void 0 : _client$data$chain.id;
850
- const activeChains = (_client$chains = client$1.chains) !== null && _client$chains !== void 0 ? _client$chains : [];
851
- const activeChain = (_find = [...(client$1.provider.chains || []), ...activeChains].find(x => x.id === chainId)) !== null && _find !== void 0 ? _find : {
1277
+ const client = getProvider.getClient();
1278
+ const chainId = (_client$data = client.data) === null || _client$data === void 0 ? void 0 : (_client$data$chain = _client$data.chain) === null || _client$data$chain === void 0 ? void 0 : _client$data$chain.id;
1279
+ const activeChains = (_client$chains = client.chains) !== null && _client$chains !== void 0 ? _client$chains : [];
1280
+ const activeChain = (_find = [...(client.provider.chains || []), ...activeChains].find(x => x.id === chainId)) !== null && _find !== void 0 ? _find : {
852
1281
  id: chainId,
853
1282
  name: "Chain ".concat(chainId),
854
1283
  network: "".concat(chainId),
@@ -858,7 +1287,7 @@ function getNetwork() {
858
1287
  };
859
1288
  return {
860
1289
  chain: chainId ? { ...activeChain,
861
- ...((_client$data2 = client$1.data) === null || _client$data2 === void 0 ? void 0 : _client$data2.chain),
1290
+ ...((_client$data2 = client.data) === null || _client$data2 === void 0 ? void 0 : _client$data2.chain),
862
1291
  id: chainId
863
1292
  } : undefined,
864
1293
  chains: activeChains
@@ -868,10 +1297,10 @@ function getNetwork() {
868
1297
  async function signMessage(args) {
869
1298
  try {
870
1299
  const signer = await fetchSigner();
871
- if (!signer) throw new base.ConnectorNotFoundError();
1300
+ if (!signer) throw new getProvider.ConnectorNotFoundError();
872
1301
  return await signer.signMessage(args.message);
873
1302
  } catch (error) {
874
- if (error.code === 4001) throw new base.UserRejectedRequestError(error);
1303
+ if (error.code === 4001) throw new getProvider.UserRejectedRequestError(error);
875
1304
  throw error;
876
1305
  }
877
1306
  }
@@ -882,42 +1311,32 @@ async function signTypedData(_ref) {
882
1311
  types,
883
1312
  value
884
1313
  } = _ref;
1314
+ const signer = await fetchSigner();
1315
+ if (!signer) throw new getProvider.ConnectorNotFoundError();
885
1316
  const {
886
- connector
887
- } = client.getClient();
888
- if (!connector) throw new base.ConnectorNotFoundError();
889
-
890
- try {
891
- var _chain;
892
-
893
- const {
894
- chainId
895
- } = domain;
896
- let chain;
1317
+ chain: activeChain,
1318
+ chains
1319
+ } = getNetwork();
1320
+ const {
1321
+ chainId: chainId_
1322
+ } = domain;
897
1323
 
898
- if (chainId) {
899
- const chainId_ = base.normalizeChainId(chainId);
900
- const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
1324
+ if (chainId_) {
1325
+ const chainId = getProvider.normalizeChainId(chainId_);
1326
+ const activeChainId = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id;
901
1327
 
902
- if (chainId !== activeChainId) {
903
- var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
1328
+ if (chainId !== (activeChain === null || activeChain === void 0 ? void 0 : activeChain.id)) {
1329
+ var _chains$find$name, _chains$find, _chains$find$name2, _chains$find2;
904
1330
 
905
- if (connector.switchChain) chain = await connector.switchChain(chainId_);else throw new base.ChainMismatchError({
906
- activeChain: (_connector$chains$fin = (_connector$chains$fin2 = connector.chains.find(x => x.id === activeChainId)) === null || _connector$chains$fin2 === void 0 ? void 0 : _connector$chains$fin2.name) !== null && _connector$chains$fin !== void 0 ? _connector$chains$fin : "Chain ".concat(activeChainId),
907
- targetChain: (_connector$chains$fin3 = (_connector$chains$fin4 = connector.chains.find(x => x.id === chainId_)) === null || _connector$chains$fin4 === void 0 ? void 0 : _connector$chains$fin4.name) !== null && _connector$chains$fin3 !== void 0 ? _connector$chains$fin3 : "Chain ".concat(chainId_)
908
- });
909
- }
1331
+ throw new getProvider.ChainMismatchError({
1332
+ activeChain: (_chains$find$name = (_chains$find = chains.find(x => x.id === activeChainId)) === null || _chains$find === void 0 ? void 0 : _chains$find.name) !== null && _chains$find$name !== void 0 ? _chains$find$name : "Chain ".concat(activeChainId),
1333
+ targetChain: (_chains$find$name2 = (_chains$find2 = chains.find(x => x.id === chainId)) === null || _chains$find2 === void 0 ? void 0 : _chains$find2.name) !== null && _chains$find$name2 !== void 0 ? _chains$find$name2 : "Chain ".concat(chainId)
1334
+ });
910
1335
  }
1336
+ } // Method name may be changed in the future, see https://docs.ethers.io/v5/api/signer/#Signer-signTypedData
911
1337
 
912
- const signer = await connector.getSigner({
913
- chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
914
- }); // Method name may be changed in the future, see https://docs.ethers.io/v5/api/signer/#Signer-signTypedData
915
1338
 
916
- return await signer._signTypedData(domain, types, value);
917
- } catch (error) {
918
- if (error.code === 4001) throw new base.UserRejectedRequestError(error);
919
- throw error;
920
- }
1339
+ return await signer._signTypedData(domain, types, value);
921
1340
  }
922
1341
 
923
1342
  async function switchNetwork(_ref) {
@@ -926,9 +1345,9 @@ async function switchNetwork(_ref) {
926
1345
  } = _ref;
927
1346
  const {
928
1347
  connector
929
- } = client.getClient();
930
- if (!connector) throw new base.ConnectorNotFoundError();
931
- if (!connector.switchChain) throw new base.SwitchChainNotSupportedError({
1348
+ } = getProvider.getClient();
1349
+ if (!connector) throw new getProvider.ConnectorNotFoundError();
1350
+ if (!connector.switchChain) throw new getProvider.SwitchChainNotSupportedError({
932
1351
  connector
933
1352
  });
934
1353
  return await connector.switchChain(chainId);
@@ -938,11 +1357,11 @@ function watchAccount(callback) {
938
1357
  let {
939
1358
  selector = x => x
940
1359
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
941
- const client$1 = client.getClient();
1360
+ const client = getProvider.getClient();
942
1361
 
943
1362
  const handleChange = () => callback(getAccount());
944
1363
 
945
- const unsubscribe = client$1.subscribe(_ref => {
1364
+ const unsubscribe = client.subscribe(_ref => {
946
1365
  let {
947
1366
  data,
948
1367
  connector,
@@ -963,11 +1382,11 @@ function watchNetwork(callback) {
963
1382
  let {
964
1383
  selector = x => x
965
1384
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
966
- const client$1 = client.getClient();
1385
+ const client = getProvider.getClient();
967
1386
 
968
1387
  const handleChange = () => callback(getNetwork());
969
1388
 
970
- const unsubscribe = client$1.subscribe(_ref => {
1389
+ const unsubscribe = client.subscribe(_ref => {
971
1390
  var _data$chain;
972
1391
 
973
1392
  let {
@@ -985,11 +1404,11 @@ function watchNetwork(callback) {
985
1404
  }
986
1405
 
987
1406
  function watchSigner(callback) {
988
- const client$1 = client.getClient();
1407
+ const client = getProvider.getClient();
989
1408
 
990
1409
  const handleChange = async () => callback(await fetchSigner());
991
1410
 
992
- const unsubscribe = client$1.subscribe(_ref => {
1411
+ const unsubscribe = client.subscribe(_ref => {
993
1412
  var _data$chain;
994
1413
 
995
1414
  let {
@@ -1007,66 +1426,12 @@ function watchSigner(callback) {
1007
1426
  return unsubscribe;
1008
1427
  }
1009
1428
 
1010
- async function fetchEnsAddress(_ref) {
1011
- let {
1012
- chainId,
1013
- name
1014
- } = _ref;
1015
- const provider = getProvider({
1016
- chainId
1017
- });
1018
- const address = await provider.resolveName(name);
1019
-
1020
- try {
1021
- return address ? utils.getAddress(address) : null;
1022
- } catch (_error) {
1023
- return null;
1024
- }
1025
- }
1026
-
1027
- async function fetchEnsAvatar(_ref) {
1028
- let {
1029
- addressOrName,
1030
- chainId
1031
- } = _ref;
1032
- const provider = getProvider({
1033
- chainId
1034
- }); // TODO: Update with more advanced logic
1035
- // https://github.com/ensdomains/ens-avatar
1036
-
1037
- const avatar = await provider.getAvatar(addressOrName);
1038
- return avatar;
1039
- }
1040
-
1041
- async function fetchEnsName(_ref) {
1042
- let {
1043
- address,
1044
- chainId
1045
- } = _ref;
1046
- const provider = getProvider({
1047
- chainId
1048
- });
1049
- return await provider.lookupAddress(address);
1050
- }
1051
-
1052
- async function fetchEnsResolver(_ref) {
1053
- let {
1054
- chainId,
1055
- name
1056
- } = _ref;
1057
- const provider = getProvider({
1058
- chainId
1059
- });
1060
- const resolver = await provider.getResolver(name);
1061
- return resolver;
1062
- }
1063
-
1064
1429
  async function fetchFeeData() {
1065
1430
  let {
1066
1431
  chainId,
1067
1432
  formatUnits: units = 'wei'
1068
1433
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1069
- const provider = getProvider({
1434
+ const provider = getProvider.getProvider({
1070
1435
  chainId
1071
1436
  });
1072
1437
  const feeData = await provider.getFeeData();
@@ -1080,120 +1445,29 @@ async function fetchFeeData() {
1080
1445
  };
1081
1446
  }
1082
1447
 
1083
- async function fetchToken(_ref) {
1084
- let {
1085
- address,
1086
- chainId,
1087
- formatUnits: units = 'ether'
1088
- } = _ref;
1089
- const erc20Config = {
1090
- addressOrName: address,
1091
- contractInterface: erc20ABI,
1092
- chainId
1093
- };
1094
- const [decimals, name, symbol, totalSupply] = await readContracts({
1095
- allowFailure: false,
1096
- contracts: [{ ...erc20Config,
1097
- functionName: 'decimals'
1098
- }, { ...erc20Config,
1099
- functionName: 'name'
1100
- }, { ...erc20Config,
1101
- functionName: 'symbol'
1102
- }, { ...erc20Config,
1103
- functionName: 'totalSupply'
1104
- }]
1105
- });
1106
- return {
1107
- address,
1108
- decimals,
1109
- name,
1110
- symbol,
1111
- totalSupply: {
1112
- formatted: utils.formatUnits(totalSupply, units),
1113
- value: totalSupply
1114
- }
1115
- };
1116
- }
1117
-
1118
- async function sendTransaction(_ref) {
1119
- let {
1120
- chainId,
1121
- request
1122
- } = _ref;
1123
- const {
1124
- connector
1125
- } = client.getClient();
1126
- if (!connector) throw new base.ConnectorNotFoundError();
1127
-
1128
- try {
1129
- var _chain;
1130
-
1131
- let chain;
1132
-
1133
- if (chainId) {
1134
- const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
1135
-
1136
- if (chainId !== activeChainId) {
1137
- var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
1138
-
1139
- if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new base.ChainMismatchError({
1140
- activeChain: (_connector$chains$fin = (_connector$chains$fin2 = connector.chains.find(x => x.id === activeChainId)) === null || _connector$chains$fin2 === void 0 ? void 0 : _connector$chains$fin2.name) !== null && _connector$chains$fin !== void 0 ? _connector$chains$fin : "Chain ".concat(activeChainId),
1141
- targetChain: (_connector$chains$fin3 = (_connector$chains$fin4 = connector.chains.find(x => x.id === chainId)) === null || _connector$chains$fin4 === void 0 ? void 0 : _connector$chains$fin4.name) !== null && _connector$chains$fin3 !== void 0 ? _connector$chains$fin3 : "Chain ".concat(chainId)
1142
- });
1143
- }
1144
- }
1145
-
1146
- const signer = await connector.getSigner({
1147
- chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
1148
- });
1149
- return await signer.sendTransaction(request);
1150
- } catch (error) {
1151
- if (error.code === 4001) throw new base.UserRejectedRequestError(error);
1152
- throw error;
1153
- }
1154
- }
1155
-
1156
- async function waitForTransaction(_ref) {
1157
- let {
1158
- chainId,
1159
- confirmations,
1160
- hash,
1161
- timeout,
1162
- wait: wait_
1163
- } = _ref;
1164
- let promise;
1165
-
1166
- if (hash) {
1167
- const provider = getProvider({
1168
- chainId
1169
- });
1170
- promise = provider.waitForTransaction(hash, confirmations, timeout);
1171
- } else if (wait_) promise = wait_(confirmations);else throw new Error('hash or wait is required');
1172
-
1173
- return await promise;
1174
- }
1175
-
1176
- exports.Client = client.Client;
1177
- exports.InjectedConnector = client.InjectedConnector;
1178
- exports.createClient = client.createClient;
1179
- exports.createStorage = client.createStorage;
1180
- exports.noopStorage = client.noopStorage;
1181
- exports.AddChainError = base.AddChainError;
1182
- exports.ChainDoesNotSupportMulticallError = base.ChainDoesNotSupportMulticallError;
1183
- exports.ChainMismatchError = base.ChainMismatchError;
1184
- exports.ChainNotConfiguredError = base.ChainNotConfiguredError;
1185
- exports.Connector = base.Connector;
1186
- exports.ConnectorAlreadyConnectedError = base.ConnectorAlreadyConnectedError;
1187
- exports.ConnectorNotFoundError = base.ConnectorNotFoundError;
1188
- exports.ContractMethodNoResultError = base.ContractMethodNoResultError;
1189
- exports.ProviderChainsNotFound = base.ProviderChainsNotFound;
1190
- exports.ProviderRpcError = base.ProviderRpcError;
1191
- exports.ResourceUnavailableError = base.ResourceUnavailableError;
1192
- exports.RpcError = base.RpcError;
1193
- exports.SwitchChainError = base.SwitchChainError;
1194
- exports.SwitchChainNotSupportedError = base.SwitchChainNotSupportedError;
1195
- exports.UserRejectedRequestError = base.UserRejectedRequestError;
1196
- exports.normalizeChainId = base.normalizeChainId;
1448
+ exports.AddChainError = getProvider.AddChainError;
1449
+ exports.ChainDoesNotSupportMulticallError = getProvider.ChainDoesNotSupportMulticallError;
1450
+ exports.ChainMismatchError = getProvider.ChainMismatchError;
1451
+ exports.ChainNotConfiguredError = getProvider.ChainNotConfiguredError;
1452
+ exports.Client = getProvider.Client;
1453
+ exports.Connector = getProvider.Connector;
1454
+ exports.ConnectorAlreadyConnectedError = getProvider.ConnectorAlreadyConnectedError;
1455
+ exports.ConnectorNotFoundError = getProvider.ConnectorNotFoundError;
1456
+ exports.ContractMethodDoesNotExistError = getProvider.ContractMethodDoesNotExistError;
1457
+ exports.ContractMethodNoResultError = getProvider.ContractMethodNoResultError;
1458
+ exports.InjectedConnector = getProvider.InjectedConnector;
1459
+ exports.ProviderChainsNotFound = getProvider.ProviderChainsNotFound;
1460
+ exports.ProviderRpcError = getProvider.ProviderRpcError;
1461
+ exports.ResourceUnavailableError = getProvider.ResourceUnavailableError;
1462
+ exports.RpcError = getProvider.RpcError;
1463
+ exports.SwitchChainError = getProvider.SwitchChainError;
1464
+ exports.SwitchChainNotSupportedError = getProvider.SwitchChainNotSupportedError;
1465
+ exports.UserRejectedRequestError = getProvider.UserRejectedRequestError;
1466
+ exports.createClient = getProvider.createClient;
1467
+ exports.createStorage = getProvider.createStorage;
1468
+ exports.getProvider = getProvider.getProvider;
1469
+ exports.noopStorage = getProvider.noopStorage;
1470
+ exports.normalizeChainId = getProvider.normalizeChainId;
1197
1471
  exports.alchemyRpcUrls = rpcs.alchemyRpcUrls;
1198
1472
  exports.infuraRpcUrls = rpcs.infuraRpcUrls;
1199
1473
  exports.publicRpcUrls = rpcs.publicRpcUrls;
@@ -1206,6 +1480,8 @@ exports.etherscanBlockExplorers = chains.etherscanBlockExplorers;
1206
1480
  exports.configureChains = configureChains;
1207
1481
  exports.connect = connect;
1208
1482
  exports.deepEqual = deepEqual;
1483
+ exports.deprecatedSendTransaction = deprecatedSendTransaction;
1484
+ exports.deprecatedWriteContract = deprecatedWriteContract;
1209
1485
  exports.disconnect = disconnect;
1210
1486
  exports.erc20ABI = erc20ABI;
1211
1487
  exports.erc721ABI = erc721ABI;
@@ -1218,12 +1494,14 @@ exports.fetchEnsResolver = fetchEnsResolver;
1218
1494
  exports.fetchFeeData = fetchFeeData;
1219
1495
  exports.fetchSigner = fetchSigner;
1220
1496
  exports.fetchToken = fetchToken;
1497
+ exports.fetchTransaction = fetchTransaction;
1221
1498
  exports.getAccount = getAccount;
1222
1499
  exports.getContract = getContract;
1223
1500
  exports.getNetwork = getNetwork;
1224
- exports.getProvider = getProvider;
1225
1501
  exports.getWebSocketProvider = getWebSocketProvider;
1226
1502
  exports.parseContractResult = parseContractResult;
1503
+ exports.prepareSendTransaction = prepareSendTransaction;
1504
+ exports.prepareWriteContract = prepareWriteContract;
1227
1505
  exports.readContract = readContract;
1228
1506
  exports.readContracts = readContracts;
1229
1507
  exports.sendTransaction = sendTransaction;