@wagmi/core 0.4.7 → 0.5.0-prepare-hooks.0

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 (76) hide show
  1. package/README.md +4 -4
  2. package/chains/dist/wagmi-core-chains.cjs.dev.js +1 -1
  3. package/chains/dist/wagmi-core-chains.cjs.prod.js +1 -1
  4. package/chains/dist/wagmi-core-chains.esm.js +1 -1
  5. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.dev.js +29 -26
  6. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.prod.js +29 -26
  7. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.esm.js +6 -3
  8. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.d.ts +1 -0
  9. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.dev.js +200 -0
  10. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.js +7 -0
  11. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.prod.js +200 -0
  12. package/connectors/injected/dist/wagmi-core-connectors-injected.esm.js +196 -0
  13. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.cjs.dev.js +21 -22
  14. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.cjs.prod.js +21 -22
  15. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.esm.js +6 -7
  16. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.dev.js +31 -29
  17. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.prod.js +31 -29
  18. package/connectors/mock/dist/wagmi-core-connectors-mock.esm.js +4 -2
  19. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.dev.js +23 -24
  20. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.prod.js +23 -24
  21. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.esm.js +4 -5
  22. package/connectors/walletLink/dist/wagmi-core-connectors-walletLink.cjs.d.ts +11 -0
  23. package/connectors/walletLink/dist/wagmi-core-connectors-walletLink.cjs.js +16 -0
  24. package/dist/{chains-fd2c546c.esm.js → chains-174cf4b4.esm.js} +3 -3
  25. package/dist/{chains-f7bb3211.cjs.prod.js → chains-b8e32454.cjs.prod.js} +3 -3
  26. package/dist/{chains-7e6dc59c.cjs.dev.js → chains-ba6218fb.cjs.dev.js} +3 -3
  27. package/dist/declarations/src/actions/accounts/fetchSigner.d.ts +3 -3
  28. package/dist/declarations/src/actions/contracts/index.d.ts +2 -1
  29. package/dist/declarations/src/actions/contracts/prepareWriteContract.d.ts +37 -0
  30. package/dist/declarations/src/actions/contracts/writeContract.d.ts +44 -8
  31. package/dist/declarations/src/actions/ens/fetchEnsAddress.d.ts +2 -1
  32. package/dist/declarations/src/actions/index.d.ts +2 -2
  33. package/dist/declarations/src/actions/tokens/fetchToken.d.ts +1 -0
  34. package/dist/declarations/src/actions/transactions/index.d.ts +2 -1
  35. package/dist/declarations/src/actions/transactions/prepareSendTransaction.d.ts +36 -0
  36. package/dist/declarations/src/actions/transactions/sendTransaction.d.ts +43 -8
  37. package/dist/declarations/src/client.d.ts +3 -3
  38. package/dist/declarations/src/connectors/base.d.ts +1 -2
  39. package/dist/declarations/src/connectors/coinbaseWallet.d.ts +1 -1
  40. package/dist/declarations/src/connectors/index.d.ts +1 -1
  41. package/dist/declarations/src/connectors/injected.d.ts +4 -4
  42. package/dist/declarations/src/connectors/metaMask.d.ts +1 -1
  43. package/dist/declarations/src/connectors/mock/connector.d.ts +1 -1
  44. package/dist/declarations/src/connectors/mock/provider.d.ts +3 -3
  45. package/dist/declarations/src/connectors/walletConnect.d.ts +2 -1
  46. package/dist/declarations/src/errors.d.ts +10 -3
  47. package/dist/declarations/src/index.d.ts +5 -5
  48. package/dist/declarations/src/providers/alchemy.d.ts +1 -2
  49. package/dist/declarations/src/providers/infura.d.ts +1 -2
  50. package/dist/declarations/src/providers/jsonRpc.d.ts +1 -2
  51. package/dist/declarations/src/providers/public.d.ts +2 -4
  52. package/dist/declarations/src/types/index.d.ts +132 -129
  53. package/dist/declarations/src/utils/configureChains.d.ts +3 -1
  54. package/dist/declarations/src/utils/getInjectedName.d.ts +2 -1
  55. package/dist/{client-a05fd511.esm.js → getProvider-048a69c4.esm.js} +380 -13
  56. package/dist/{client-a6e61429.cjs.prod.js → getProvider-27edfd38.cjs.prod.js} +446 -55
  57. package/dist/{client-71ece661.cjs.dev.js → getProvider-ec251513.cjs.dev.js} +446 -55
  58. package/dist/wagmi-core.cjs.dev.js +462 -286
  59. package/dist/wagmi-core.cjs.prod.js +462 -286
  60. package/dist/wagmi-core.esm.js +377 -205
  61. package/package.json +2 -2
  62. package/providers/alchemy/dist/wagmi-core-providers-alchemy.cjs.dev.js +0 -2
  63. package/providers/alchemy/dist/wagmi-core-providers-alchemy.cjs.prod.js +0 -2
  64. package/providers/alchemy/dist/wagmi-core-providers-alchemy.esm.js +0 -2
  65. package/providers/infura/dist/wagmi-core-providers-infura.cjs.dev.js +0 -2
  66. package/providers/infura/dist/wagmi-core-providers-infura.cjs.prod.js +0 -2
  67. package/providers/infura/dist/wagmi-core-providers-infura.esm.js +0 -2
  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-797ad073.cjs.prod.js +0 -343
  75. package/dist/base-90b7f3e4.cjs.dev.js +0 -343
  76. package/dist/base-b565d5d4.esm.js +0 -316
@@ -2,14 +2,13 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var client = require('./client-71ece661.cjs.dev.js');
6
- var base = require('./base-90b7f3e4.cjs.dev.js');
5
+ var getProvider = require('./getProvider-ec251513.cjs.dev.js');
7
6
  var ethers$1 = require('ethers/lib/ethers');
8
7
  var utils = require('ethers/lib/utils');
9
8
  var ethers = require('ethers');
10
9
  var shallow = require('zustand/shallow');
11
10
  var rpcs = require('./rpcs-f1d24f0e.cjs.dev.js');
12
- var chains = require('./chains-7e6dc59c.cjs.dev.js');
11
+ var chains = require('./chains-ba6218fb.cjs.dev.js');
13
12
  require('zustand/vanilla');
14
13
  require('zustand/middleware');
15
14
  require('eventemitter3');
@@ -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,41 +253,44 @@ 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 => ({ ...x,
274
- status: 'disconnected'
275
- }));
279
+ client.setState(x => {
280
+ return { ...x,
281
+ // Keep existing connector connected in case of error
282
+ status: x.connector ? 'connected' : 'disconnected'
283
+ };
284
+ });
276
285
  throw err;
277
286
  }
278
287
  }
279
288
 
280
289
  async function disconnect() {
281
- const client$1 = client.getClient();
282
- if (client$1.connector) await client$1.connector.disconnect();
283
- client$1.clearState();
284
- 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');
285
294
  }
286
295
 
287
296
  function getContract(_ref) {
@@ -293,34 +302,83 @@ function getContract(_ref) {
293
302
  return new ethers.Contract(addressOrName, contractInterface, signerOrProvider);
294
303
  }
295
304
 
296
- function getProvider() {
305
+ /**
306
+ * @description Prepares the parameters required for a contract write transaction.
307
+ *
308
+ * Returns config to be passed through to `writeContract`.
309
+ *
310
+ * @example
311
+ * import { prepareWriteContract, writeContract } from '@wagmi/core'
312
+ *
313
+ * const config = await prepareWriteContract({
314
+ * addressOrName: '0x...',
315
+ * contractInterface: wagmiAbi,
316
+ * functionName: 'mint',
317
+ * })
318
+ * const result = await writeContract(config)
319
+ */
320
+ async function prepareWriteContract(_ref) {
297
321
  let {
298
- chainId
299
- } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
300
- const client$1 = client.getClient();
301
- if (chainId && typeof client$1.config.provider === 'function') return client$1.config.provider({
302
- chainId
322
+ addressOrName,
323
+ args,
324
+ chainId,
325
+ contractInterface,
326
+ functionName,
327
+ overrides,
328
+ signer: signer_
329
+ } = _ref;
330
+ const signer = signer_ !== null && signer_ !== void 0 ? signer_ : await fetchSigner();
331
+ if (!signer) throw new getProvider.ConnectorNotFoundError();
332
+ const contract = getContract({
333
+ addressOrName,
334
+ contractInterface,
335
+ signerOrProvider: signer
303
336
  });
304
- return client$1.provider;
337
+ const populateTransactionFn = contract.populateTransaction[functionName];
338
+
339
+ if (!populateTransactionFn) {
340
+ throw new getProvider.ContractMethodDoesNotExistError({
341
+ addressOrName,
342
+ functionName
343
+ });
344
+ }
345
+
346
+ const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
347
+ const unsignedTransaction = await populateTransactionFn(...params);
348
+ const gasLimit = unsignedTransaction.gasLimit || (await signer.estimateGas(unsignedTransaction));
349
+ return {
350
+ addressOrName,
351
+ args,
352
+ ...(chainId ? {
353
+ chainId
354
+ } : {}),
355
+ contractInterface,
356
+ functionName,
357
+ overrides,
358
+ request: { ...unsignedTransaction,
359
+ gasLimit
360
+ },
361
+ mode: 'prepared'
362
+ };
305
363
  }
306
364
 
307
365
  function getWebSocketProvider() {
308
366
  let {
309
367
  chainId
310
368
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
311
- const client$1 = client.getClient();
312
- if (chainId && typeof client$1.config.webSocketProvider === 'function') return client$1.config.webSocketProvider({
369
+ const client = getProvider.getClient();
370
+ if (chainId && typeof client.config.webSocketProvider === 'function') return client.config.webSocketProvider({
313
371
  chainId
314
372
  });
315
- return client$1.webSocketProvider;
373
+ return client.webSocketProvider;
316
374
  }
317
375
 
318
376
  function watchProvider(args, callback) {
319
- const client$1 = client.getClient();
377
+ const client = getProvider.getClient();
320
378
 
321
- const handleChange = async () => callback(getProvider(args));
379
+ const handleChange = async () => callback(getProvider.getProvider(args));
322
380
 
323
- const unsubscribe = client$1.subscribe(_ref => {
381
+ const unsubscribe = client.subscribe(_ref => {
324
382
  let {
325
383
  provider
326
384
  } = _ref;
@@ -330,11 +388,11 @@ function watchProvider(args, callback) {
330
388
  }
331
389
 
332
390
  function watchWebSocketProvider(args, callback) {
333
- const client$1 = client.getClient();
391
+ const client = getProvider.getClient();
334
392
 
335
393
  const handleChange = async () => callback(getWebSocketProvider(args));
336
394
 
337
- const unsubscribe = client$1.subscribe(_ref => {
395
+ const unsubscribe = client.subscribe(_ref => {
338
396
  let {
339
397
  webSocketProvider
340
398
  } = _ref;
@@ -352,7 +410,7 @@ async function readContract(_ref) {
352
410
  functionName,
353
411
  overrides
354
412
  } = _ref;
355
- const provider = getProvider({
413
+ const provider = getProvider.getProvider({
356
414
  chainId
357
415
  });
358
416
  const contract = getContract({
@@ -374,16 +432,16 @@ async function multicall(_ref) {
374
432
  contracts,
375
433
  overrides
376
434
  } = _ref;
377
- const provider = getProvider({
435
+ const provider = getProvider.getProvider({
378
436
  chainId
379
437
  });
380
- if (!provider.chains) throw new base.ProviderChainsNotFound();
438
+ if (!provider.chains) throw new getProvider.ProviderChainsNotFound();
381
439
  const chain = provider.chains.find(chain => chain.id === chainId) || provider.chains[0];
382
- if (!chain) throw new base.ProviderChainsNotFound();
383
- if (!(chain !== null && chain !== void 0 && chain.multicall)) throw new base.ChainDoesNotSupportMulticallError({
440
+ if (!chain) throw new getProvider.ProviderChainsNotFound();
441
+ if (!(chain !== null && chain !== void 0 && chain.multicall)) throw new getProvider.ChainDoesNotSupportMulticallError({
384
442
  chain
385
443
  });
386
- 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({
444
+ 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({
387
445
  blockNumber: overrides === null || overrides === void 0 ? void 0 : overrides.blockTag,
388
446
  chain
389
447
  });
@@ -430,11 +488,9 @@ async function multicall(_ref) {
430
488
  } = contracts[i];
431
489
 
432
490
  if (returnData === '0x') {
433
- var _chain$blockExplorers;
434
-
435
- const err = new base.ContractMethodNoResultError({
491
+ const err = new getProvider.ContractMethodNoResultError({
436
492
  addressOrName,
437
- blockExplorer: (_chain$blockExplorers = chain.blockExplorers) === null || _chain$blockExplorers === void 0 ? void 0 : _chain$blockExplorers.default,
493
+ chainId: chain.id,
438
494
  functionName
439
495
  });
440
496
  if (!allowFailure) throw err;
@@ -465,7 +521,7 @@ async function readContracts(_ref) {
465
521
  } = _ref;
466
522
 
467
523
  try {
468
- const provider = getProvider();
524
+ const provider = getProvider.getProvider();
469
525
  const contractsByChainId = contracts.reduce((contracts, contract) => {
470
526
  var _contract$chainId;
471
527
 
@@ -488,7 +544,7 @@ async function readContracts(_ref) {
488
544
  return (await Promise.allSettled(promises)).map(result => {
489
545
  if (result.status === 'fulfilled') return result.value;
490
546
 
491
- if (result.reason instanceof base.ChainDoesNotSupportMulticallError) {
547
+ if (result.reason instanceof getProvider.ChainDoesNotSupportMulticallError) {
492
548
  console.warn(result.reason.message);
493
549
  throw result.reason;
494
550
  }
@@ -499,7 +555,7 @@ async function readContracts(_ref) {
499
555
 
500
556
  return (await Promise.all(promises)).flat();
501
557
  } catch (err) {
502
- if (err instanceof base.ContractMethodNoResultError) throw err;
558
+ if (err instanceof getProvider.ContractMethodNoResultError) throw err;
503
559
  const promises = contracts.map(contract => readContract({ ...contract,
504
560
  overrides
505
561
  }));
@@ -533,7 +589,7 @@ eventName, callback) {
533
589
  contract = getContract({
534
590
  signerOrProvider: getWebSocketProvider({
535
591
  chainId
536
- }) || getProvider({
592
+ }) || getProvider.getProvider({
537
593
  chainId
538
594
  }),
539
595
  ...contractArgs
@@ -542,8 +598,8 @@ eventName, callback) {
542
598
  };
543
599
 
544
600
  watchEvent();
545
- const client$1 = client.getClient();
546
- const unsubscribe = client$1.subscribe(_ref => {
601
+ const client = getProvider.getClient();
602
+ const unsubscribe = client.subscribe(_ref => {
547
603
  let {
548
604
  provider,
549
605
  webSocketProvider
@@ -567,7 +623,7 @@ async function fetchBlockNumber() {
567
623
  let {
568
624
  chainId
569
625
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
570
- const provider = getProvider({
626
+ const provider = getProvider.getProvider({
571
627
  chainId
572
628
  });
573
629
  const blockNumber = await provider.getBlockNumber();
@@ -590,10 +646,10 @@ function watchBlockNumber(args, callback) {
590
646
  previousProvider = provider;
591
647
  };
592
648
 
593
- const client$1 = client.getClient();
594
- const provider_ = (_client$webSocketProv = client$1.webSocketProvider) !== null && _client$webSocketProv !== void 0 ? _client$webSocketProv : client$1.provider;
649
+ const client = getProvider.getClient();
650
+ const provider_ = (_client$webSocketProv = client.webSocketProvider) !== null && _client$webSocketProv !== void 0 ? _client$webSocketProv : client.provider;
595
651
  if (args.listen) createListener(provider_);
596
- const unsubscribe = client$1.subscribe(_ref => {
652
+ const unsubscribe = client.subscribe(_ref => {
597
653
  let {
598
654
  provider,
599
655
  webSocketProvider
@@ -624,14 +680,14 @@ function watchBlockNumber(args, callback) {
624
680
  }
625
681
 
626
682
  function watchReadContract(config, callback) {
627
- const client$1 = client.getClient();
683
+ const client = getProvider.getClient();
628
684
 
629
685
  const handleChange = async () => callback(await readContract(config));
630
686
 
631
687
  const unwatch = config.listenToBlock ? watchBlockNumber({
632
688
  listen: true
633
689
  }, handleChange) : undefined;
634
- const unsubscribe = client$1.subscribe(_ref => {
690
+ const unsubscribe = client.subscribe(_ref => {
635
691
  let {
636
692
  provider
637
693
  } = _ref;
@@ -644,14 +700,14 @@ function watchReadContract(config, callback) {
644
700
  }
645
701
 
646
702
  function watchReadContracts(config, callback) {
647
- const client$1 = client.getClient();
703
+ const client = getProvider.getClient();
648
704
 
649
705
  const handleChange = async () => callback(await readContracts(config));
650
706
 
651
707
  const unwatch = config.listenToBlock ? watchBlockNumber({
652
708
  listen: true
653
709
  }, handleChange) : undefined;
654
- const unsubscribe = client$1.subscribe(_ref => {
710
+ const unsubscribe = client.subscribe(_ref => {
655
711
  let {
656
712
  provider
657
713
  } = _ref;
@@ -663,6 +719,221 @@ function watchReadContracts(config, callback) {
663
719
  };
664
720
  }
665
721
 
722
+ async function fetchEnsAddress(_ref) {
723
+ let {
724
+ chainId,
725
+ name
726
+ } = _ref;
727
+ const provider = getProvider.getProvider({
728
+ chainId
729
+ });
730
+ const address = await provider.resolveName(name);
731
+
732
+ try {
733
+ return address ? utils.getAddress(address) : null;
734
+ } catch (_error) {
735
+ return null;
736
+ }
737
+ }
738
+
739
+ async function fetchEnsAvatar(_ref) {
740
+ let {
741
+ addressOrName,
742
+ chainId
743
+ } = _ref;
744
+ const provider = getProvider.getProvider({
745
+ chainId
746
+ }); // TODO: Update with more advanced logic
747
+ // https://github.com/ensdomains/ens-avatar
748
+
749
+ const avatar = await provider.getAvatar(addressOrName);
750
+ return avatar;
751
+ }
752
+
753
+ async function fetchEnsName(_ref) {
754
+ let {
755
+ address,
756
+ chainId
757
+ } = _ref;
758
+ const provider = getProvider.getProvider({
759
+ chainId
760
+ });
761
+ return await provider.lookupAddress(address);
762
+ }
763
+
764
+ async function fetchEnsResolver(_ref) {
765
+ let {
766
+ chainId,
767
+ name
768
+ } = _ref;
769
+ const provider = getProvider.getProvider({
770
+ chainId
771
+ });
772
+ const resolver = await provider.getResolver(name);
773
+ return resolver;
774
+ }
775
+
776
+ /**
777
+ * @description Prepares the parameters required for sending a transaction.
778
+ *
779
+ * Returns config to be passed through to `sendTransaction`.
780
+ *
781
+ * @example
782
+ * import { prepareSendTransaction, sendTransaction } from '@wagmi/core'
783
+ *
784
+ * const config = await prepareSendTransaction({
785
+ * request: {
786
+ * to: 'moxey.eth',
787
+ * value: parseEther('1'),
788
+ * }
789
+ * })
790
+ * const result = await sendTransaction(config)
791
+ */
792
+ async function prepareSendTransaction(_ref) {
793
+ let {
794
+ chainId,
795
+ request,
796
+ signerOrProvider = getProvider.getProvider()
797
+ } = _ref;
798
+ const [to, gasLimit] = await Promise.all([utils.isAddress(request.to) ? Promise.resolve(request.to) : fetchEnsAddress({
799
+ name: request.to
800
+ }), request.gasLimit ? Promise.resolve(request.gasLimit) : signerOrProvider.estimateGas(request)]);
801
+ if (!to) throw new Error('Could not resolve ENS name');
802
+ return { ...(chainId ? {
803
+ chainId
804
+ } : {}),
805
+ request: { ...request,
806
+ gasLimit,
807
+ to
808
+ },
809
+ mode: 'prepared'
810
+ };
811
+ }
812
+
813
+ /**
814
+ * @description Function to send a transaction.
815
+ *
816
+ * It is recommended to pair this with the `prepareSendTransaction` function to avoid
817
+ * [UX pitfalls](https://wagmi.sh/docs/prepare-hooks/intro#ux-pitfalls-without-prepare-hooks).
818
+ *
819
+ * @example
820
+ * import { prepareSendTransaction, sendTransaction } from '@wagmi/core'
821
+ *
822
+ * const config = await prepareSendTransaction({
823
+ * to: 'moxey.eth',
824
+ * value: parseEther('1'),
825
+ * })
826
+ * const result = await sendTransaction(config)
827
+ */
828
+ async function sendTransaction(_ref) {
829
+ let {
830
+ chainId,
831
+ mode,
832
+ request
833
+ } = _ref;
834
+
835
+ /********************************************************************/
836
+
837
+ /** START: iOS App Link cautious code. */
838
+
839
+ /** Do not perform any async operations in this block. */
840
+
841
+ /** Ref: wagmi.sh/docs/prepare-hooks/intro#ios-app-link-constraints */
842
+
843
+ /********************************************************************/
844
+ // `fetchSigner` isn't really "asynchronous" as we have already
845
+ // initialized the provider upon user connection, so it will return
846
+ // immediately.
847
+ const signer = await fetchSigner();
848
+ if (!signer) throw new getProvider.ConnectorNotFoundError();
849
+
850
+ if (mode === 'prepared') {
851
+ if (!request.gasLimit) throw new Error('`gasLimit` is required');
852
+ if (!request.to) throw new Error('`to` is required');
853
+ }
854
+
855
+ const {
856
+ chain: activeChain,
857
+ chains
858
+ } = getNetwork();
859
+ const activeChainId = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id;
860
+
861
+ if (chainId && chainId !== (activeChain === null || activeChain === void 0 ? void 0 : activeChain.id)) {
862
+ var _chains$find$name, _chains$find, _chains$find$name2, _chains$find2;
863
+
864
+ throw new getProvider.ChainMismatchError({
865
+ 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),
866
+ 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)
867
+ });
868
+ }
869
+
870
+ try {
871
+ // Why don't we just use `signer.sendTransaction`?
872
+ // The `signer.sendTransaction` method performs async
873
+ // heavy operations (such as fetching block number)
874
+ // which is not really needed for our case.
875
+ // Having async heavy operations has side effects
876
+ // when using it in a click handler (iOS deep linking issues,
877
+ // delay to open wallet, etc).
878
+ const uncheckedSigner = signer.connectUnchecked();
879
+ const {
880
+ hash,
881
+ wait
882
+ } = await uncheckedSigner.sendTransaction(request);
883
+ /********************************************************************/
884
+
885
+ /** END: iOS App Link cautious code. */
886
+
887
+ /** Go nuts! */
888
+
889
+ /********************************************************************/
890
+
891
+ return {
892
+ hash,
893
+ wait
894
+ };
895
+ } catch (error) {
896
+ if (error.code === 4001) throw new getProvider.UserRejectedRequestError(error);
897
+ throw error;
898
+ }
899
+ }
900
+
901
+ async function waitForTransaction(_ref) {
902
+ let {
903
+ chainId,
904
+ confirmations,
905
+ hash,
906
+ timeout,
907
+ wait: wait_
908
+ } = _ref;
909
+ let promise;
910
+
911
+ if (hash) {
912
+ const provider = getProvider.getProvider({
913
+ chainId
914
+ });
915
+ promise = provider.waitForTransaction(hash, confirmations, timeout);
916
+ } else if (wait_) promise = wait_(confirmations);else throw new Error('hash or wait is required');
917
+
918
+ return await promise;
919
+ }
920
+
921
+ /**
922
+ * @description Function to call a contract write method.
923
+ *
924
+ * It is recommended to pair this with the {@link prepareWriteContract} function
925
+ * to avoid [UX pitfalls](https://wagmi.sh/docs/prepare-hooks/intro#ux-pitfalls-without-prepare-hooks).
926
+ *
927
+ * @example
928
+ * import { prepareWriteContract, writeContract } from '@wagmi/core'
929
+ *
930
+ * const config = await prepareWriteContract({
931
+ * addressOrName: '0x...',
932
+ * contractInterface: wagmiAbi,
933
+ * functionName: 'mint',
934
+ * })
935
+ * const result = await writeContract(config)
936
+ */
666
937
  async function writeContract(_ref) {
667
938
  let {
668
939
  addressOrName,
@@ -670,49 +941,61 @@ async function writeContract(_ref) {
670
941
  chainId,
671
942
  contractInterface,
672
943
  functionName,
944
+ mode,
673
945
  overrides,
674
- signerOrProvider
946
+ request: request_
675
947
  } = _ref;
676
- const {
677
- connector
678
- } = client.getClient();
679
- if (!connector) throw new base.ConnectorNotFoundError();
680
- const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
681
948
 
682
- try {
683
- var _chain;
949
+ /********************************************************************/
684
950
 
685
- let chain;
951
+ /** START: iOS App Link cautious code. */
686
952
 
687
- if (chainId) {
688
- const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
953
+ /** Do not perform any async operations in this block. */
689
954
 
690
- if (chainId !== activeChainId) {
691
- var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
955
+ /** Ref: wagmi.sh/docs/prepare-hooks/intro#ios-app-link-constraints */
692
956
 
693
- if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new base.ChainMismatchError({
694
- 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),
695
- 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)
696
- });
697
- }
698
- }
957
+ /********************************************************************/
958
+ const signer = await fetchSigner();
959
+ if (!signer) throw new getProvider.ConnectorNotFoundError();
960
+ const {
961
+ chain: activeChain,
962
+ chains
963
+ } = getNetwork();
964
+ const activeChainId = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id;
699
965
 
700
- const signer = await connector.getSigner({
701
- chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
702
- });
703
- const contract = getContract({
704
- addressOrName,
705
- contractInterface,
706
- signerOrProvider
966
+ if (chainId && chainId !== activeChainId) {
967
+ var _chains$find$name, _chains$find, _chains$find$name2, _chains$find2;
968
+
969
+ throw new getProvider.ChainMismatchError({
970
+ 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),
971
+ 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)
707
972
  });
708
- const contractWithSigner = contract.connect(signer);
709
- const contractFunction = contractWithSigner[functionName];
710
- if (!contractFunction) console.warn("\"".concat(functionName, "\" does not exist in interface for contract \"").concat(addressOrName, "\""));
711
- return await contractFunction(...params);
712
- } catch (error) {
713
- if (error.code === 4001) throw new base.UserRejectedRequestError(error);
714
- throw error;
715
973
  }
974
+
975
+ if (mode === 'prepared') {
976
+ if (!request_) throw new Error('`request` is required');
977
+ }
978
+
979
+ const request = mode === 'dangerouslyUnprepared' ? (await prepareWriteContract({
980
+ addressOrName,
981
+ args,
982
+ contractInterface,
983
+ functionName,
984
+ overrides
985
+ })).request : request_;
986
+ const transaction = await sendTransaction({
987
+ request,
988
+ mode: 'prepared'
989
+ });
990
+ /********************************************************************/
991
+
992
+ /** END: iOS App Link cautious code. */
993
+
994
+ /** Go nuts! */
995
+
996
+ /********************************************************************/
997
+
998
+ return transaction;
716
999
  }
717
1000
 
718
1001
  async function fetchBalance(_ref) {
@@ -724,8 +1007,8 @@ async function fetchBalance(_ref) {
724
1007
  formatUnits: unit = 'ether',
725
1008
  token
726
1009
  } = _ref;
727
- const client$1 = client.getClient();
728
- const provider = getProvider({
1010
+ const client = getProvider.getClient();
1011
+ const provider = getProvider.getProvider({
729
1012
  chainId
730
1013
  });
731
1014
 
@@ -765,7 +1048,7 @@ async function fetchBalance(_ref) {
765
1048
  };
766
1049
  }
767
1050
 
768
- const chains = [...(client$1.provider.chains || []), ...((_client$chains = client$1.chains) !== null && _client$chains !== void 0 ? _client$chains : [])];
1051
+ const chains = [...(client.provider.chains || []), ...((_client$chains = client.chains) !== null && _client$chains !== void 0 ? _client$chains : [])];
769
1052
  const value = await provider.getBalance(addressOrName);
770
1053
  const chain = chains.find(x => x.id === provider.network.chainId);
771
1054
  return {
@@ -780,8 +1063,8 @@ async function fetchBalance(_ref) {
780
1063
  async function fetchSigner() {
781
1064
  var _client$connector, _client$connector$get;
782
1065
 
783
- const client$1 = client.getClient();
784
- 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;
1066
+ const client = getProvider.getClient();
1067
+ 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;
785
1068
  return signer;
786
1069
  }
787
1070
 
@@ -790,7 +1073,7 @@ function getAccount() {
790
1073
  data,
791
1074
  connector,
792
1075
  status
793
- } = client.getClient();
1076
+ } = getProvider.getClient();
794
1077
 
795
1078
  switch (status) {
796
1079
  case 'connected':
@@ -842,10 +1125,10 @@ function getAccount() {
842
1125
  function getNetwork() {
843
1126
  var _client$data, _client$data$chain, _client$chains, _find, _client$data2;
844
1127
 
845
- const client$1 = client.getClient();
846
- 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;
847
- const activeChains = (_client$chains = client$1.chains) !== null && _client$chains !== void 0 ? _client$chains : [];
848
- const activeChain = (_find = [...(client$1.provider.chains || []), ...activeChains].find(x => x.id === chainId)) !== null && _find !== void 0 ? _find : {
1128
+ const client = getProvider.getClient();
1129
+ 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;
1130
+ const activeChains = (_client$chains = client.chains) !== null && _client$chains !== void 0 ? _client$chains : [];
1131
+ const activeChain = (_find = [...(client.provider.chains || []), ...activeChains].find(x => x.id === chainId)) !== null && _find !== void 0 ? _find : {
849
1132
  id: chainId,
850
1133
  name: "Chain ".concat(chainId),
851
1134
  network: "".concat(chainId),
@@ -855,7 +1138,7 @@ function getNetwork() {
855
1138
  };
856
1139
  return {
857
1140
  chain: chainId ? { ...activeChain,
858
- ...((_client$data2 = client$1.data) === null || _client$data2 === void 0 ? void 0 : _client$data2.chain),
1141
+ ...((_client$data2 = client.data) === null || _client$data2 === void 0 ? void 0 : _client$data2.chain),
859
1142
  id: chainId
860
1143
  } : undefined,
861
1144
  chains: activeChains
@@ -865,10 +1148,10 @@ function getNetwork() {
865
1148
  async function signMessage(args) {
866
1149
  try {
867
1150
  const signer = await fetchSigner();
868
- if (!signer) throw new base.ConnectorNotFoundError();
1151
+ if (!signer) throw new getProvider.ConnectorNotFoundError();
869
1152
  return await signer.signMessage(args.message);
870
1153
  } catch (error) {
871
- if (error.code === 4001) throw new base.UserRejectedRequestError(error);
1154
+ if (error.code === 4001) throw new getProvider.UserRejectedRequestError(error);
872
1155
  throw error;
873
1156
  }
874
1157
  }
@@ -879,42 +1162,32 @@ async function signTypedData(_ref) {
879
1162
  types,
880
1163
  value
881
1164
  } = _ref;
1165
+ const signer = await fetchSigner();
1166
+ if (!signer) throw new getProvider.ConnectorNotFoundError();
882
1167
  const {
883
- connector
884
- } = client.getClient();
885
- if (!connector) throw new base.ConnectorNotFoundError();
886
-
887
- try {
888
- var _chain;
889
-
890
- const {
891
- chainId
892
- } = domain;
893
- let chain;
1168
+ chain: activeChain,
1169
+ chains
1170
+ } = getNetwork();
1171
+ const {
1172
+ chainId: chainId_
1173
+ } = domain;
894
1174
 
895
- if (chainId) {
896
- const chainId_ = base.normalizeChainId(chainId);
897
- const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
1175
+ if (chainId_) {
1176
+ const chainId = getProvider.normalizeChainId(chainId_);
1177
+ const activeChainId = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id;
898
1178
 
899
- if (chainId !== activeChainId) {
900
- var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
1179
+ if (chainId !== (activeChain === null || activeChain === void 0 ? void 0 : activeChain.id)) {
1180
+ var _chains$find$name, _chains$find, _chains$find$name2, _chains$find2;
901
1181
 
902
- if (connector.switchChain) chain = await connector.switchChain(chainId_);else throw new base.ChainMismatchError({
903
- 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),
904
- 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_)
905
- });
906
- }
1182
+ throw new getProvider.ChainMismatchError({
1183
+ 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),
1184
+ 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)
1185
+ });
907
1186
  }
1187
+ } // Method name may be changed in the future, see https://docs.ethers.io/v5/api/signer/#Signer-signTypedData
908
1188
 
909
- const signer = await connector.getSigner({
910
- chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
911
- }); // Method name may be changed in the future, see https://docs.ethers.io/v5/api/signer/#Signer-signTypedData
912
1189
 
913
- return await signer._signTypedData(domain, types, value);
914
- } catch (error) {
915
- if (error.code === 4001) throw new base.UserRejectedRequestError(error);
916
- throw error;
917
- }
1190
+ return await signer._signTypedData(domain, types, value);
918
1191
  }
919
1192
 
920
1193
  async function switchNetwork(_ref) {
@@ -923,9 +1196,9 @@ async function switchNetwork(_ref) {
923
1196
  } = _ref;
924
1197
  const {
925
1198
  connector
926
- } = client.getClient();
927
- if (!connector) throw new base.ConnectorNotFoundError();
928
- if (!connector.switchChain) throw new base.SwitchChainNotSupportedError({
1199
+ } = getProvider.getClient();
1200
+ if (!connector) throw new getProvider.ConnectorNotFoundError();
1201
+ if (!connector.switchChain) throw new getProvider.SwitchChainNotSupportedError({
929
1202
  connector
930
1203
  });
931
1204
  return await connector.switchChain(chainId);
@@ -935,11 +1208,11 @@ function watchAccount(callback) {
935
1208
  let {
936
1209
  selector = x => x
937
1210
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
938
- const client$1 = client.getClient();
1211
+ const client = getProvider.getClient();
939
1212
 
940
1213
  const handleChange = () => callback(getAccount());
941
1214
 
942
- const unsubscribe = client$1.subscribe(_ref => {
1215
+ const unsubscribe = client.subscribe(_ref => {
943
1216
  let {
944
1217
  data,
945
1218
  connector,
@@ -960,11 +1233,11 @@ function watchNetwork(callback) {
960
1233
  let {
961
1234
  selector = x => x
962
1235
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
963
- const client$1 = client.getClient();
1236
+ const client = getProvider.getClient();
964
1237
 
965
1238
  const handleChange = () => callback(getNetwork());
966
1239
 
967
- const unsubscribe = client$1.subscribe(_ref => {
1240
+ const unsubscribe = client.subscribe(_ref => {
968
1241
  var _data$chain;
969
1242
 
970
1243
  let {
@@ -982,11 +1255,11 @@ function watchNetwork(callback) {
982
1255
  }
983
1256
 
984
1257
  function watchSigner(callback) {
985
- const client$1 = client.getClient();
1258
+ const client = getProvider.getClient();
986
1259
 
987
1260
  const handleChange = async () => callback(await fetchSigner());
988
1261
 
989
- const unsubscribe = client$1.subscribe(_ref => {
1262
+ const unsubscribe = client.subscribe(_ref => {
990
1263
  var _data$chain;
991
1264
 
992
1265
  let {
@@ -1004,66 +1277,12 @@ function watchSigner(callback) {
1004
1277
  return unsubscribe;
1005
1278
  }
1006
1279
 
1007
- async function fetchEnsAddress(_ref) {
1008
- let {
1009
- chainId,
1010
- name
1011
- } = _ref;
1012
- const provider = getProvider({
1013
- chainId
1014
- });
1015
- const address = await provider.resolveName(name);
1016
-
1017
- try {
1018
- return address ? utils.getAddress(address) : null;
1019
- } catch (_error) {
1020
- return null;
1021
- }
1022
- }
1023
-
1024
- async function fetchEnsAvatar(_ref) {
1025
- let {
1026
- addressOrName,
1027
- chainId
1028
- } = _ref;
1029
- const provider = getProvider({
1030
- chainId
1031
- }); // TODO: Update with more advanced logic
1032
- // https://github.com/ensdomains/ens-avatar
1033
-
1034
- const avatar = await provider.getAvatar(addressOrName);
1035
- return avatar;
1036
- }
1037
-
1038
- async function fetchEnsName(_ref) {
1039
- let {
1040
- address,
1041
- chainId
1042
- } = _ref;
1043
- const provider = getProvider({
1044
- chainId
1045
- });
1046
- return await provider.lookupAddress(address);
1047
- }
1048
-
1049
- async function fetchEnsResolver(_ref) {
1050
- let {
1051
- chainId,
1052
- name
1053
- } = _ref;
1054
- const provider = getProvider({
1055
- chainId
1056
- });
1057
- const resolver = await provider.getResolver(name);
1058
- return resolver;
1059
- }
1060
-
1061
1280
  async function fetchFeeData() {
1062
1281
  let {
1063
1282
  chainId,
1064
1283
  formatUnits: units = 'wei'
1065
1284
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1066
- const provider = getProvider({
1285
+ const provider = getProvider.getProvider({
1067
1286
  chainId
1068
1287
  });
1069
1288
  const feeData = await provider.getFeeData();
@@ -1083,102 +1302,58 @@ async function fetchToken(_ref) {
1083
1302
  chainId,
1084
1303
  formatUnits: units = 'ether'
1085
1304
  } = _ref;
1086
- const provider = getProvider({
1305
+ const erc20Config = {
1306
+ addressOrName: address,
1307
+ contractInterface: erc20ABI,
1087
1308
  chainId
1309
+ };
1310
+ const [decimals, name, symbol, totalSupply] = await readContracts({
1311
+ allowFailure: false,
1312
+ contracts: [{ ...erc20Config,
1313
+ functionName: 'decimals'
1314
+ }, { ...erc20Config,
1315
+ functionName: 'name'
1316
+ }, { ...erc20Config,
1317
+ functionName: 'symbol'
1318
+ }, { ...erc20Config,
1319
+ functionName: 'totalSupply'
1320
+ }]
1088
1321
  });
1089
- const contract = new ethers$1.Contract(address, erc20ABI, provider);
1090
- const [symbol, decimals, totalSupply] = await Promise.all([contract.symbol(), contract.decimals(), contract.totalSupply()]);
1091
- const token = {
1322
+ return {
1092
1323
  address,
1093
1324
  decimals,
1325
+ name,
1094
1326
  symbol,
1095
1327
  totalSupply: {
1096
1328
  formatted: utils.formatUnits(totalSupply, units),
1097
1329
  value: totalSupply
1098
1330
  }
1099
1331
  };
1100
- return token;
1101
- }
1102
-
1103
- async function sendTransaction(_ref) {
1104
- let {
1105
- chainId,
1106
- request
1107
- } = _ref;
1108
- const {
1109
- connector
1110
- } = client.getClient();
1111
- if (!connector) throw new base.ConnectorNotFoundError();
1112
-
1113
- try {
1114
- var _chain;
1115
-
1116
- let chain;
1117
-
1118
- if (chainId) {
1119
- const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
1120
-
1121
- if (chainId !== activeChainId) {
1122
- var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
1123
-
1124
- if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new base.ChainMismatchError({
1125
- 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),
1126
- 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)
1127
- });
1128
- }
1129
- }
1130
-
1131
- const signer = await connector.getSigner({
1132
- chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
1133
- });
1134
- return await signer.sendTransaction(request);
1135
- } catch (error) {
1136
- if (error.code === 4001) throw new base.UserRejectedRequestError(error);
1137
- throw error;
1138
- }
1139
- }
1140
-
1141
- async function waitForTransaction(_ref) {
1142
- let {
1143
- chainId,
1144
- confirmations,
1145
- hash,
1146
- timeout,
1147
- wait: wait_
1148
- } = _ref;
1149
- let promise;
1150
-
1151
- if (hash) {
1152
- const provider = getProvider({
1153
- chainId
1154
- });
1155
- promise = provider.waitForTransaction(hash, confirmations, timeout);
1156
- } else if (wait_) promise = wait_(confirmations);else throw new Error('hash or wait is required');
1157
-
1158
- return await promise;
1159
1332
  }
1160
1333
 
1161
- exports.Client = client.Client;
1162
- exports.InjectedConnector = client.InjectedConnector;
1163
- exports.createClient = client.createClient;
1164
- exports.createStorage = client.createStorage;
1165
- exports.noopStorage = client.noopStorage;
1166
- exports.AddChainError = base.AddChainError;
1167
- exports.ChainDoesNotSupportMulticallError = base.ChainDoesNotSupportMulticallError;
1168
- exports.ChainMismatchError = base.ChainMismatchError;
1169
- exports.ChainNotConfiguredError = base.ChainNotConfiguredError;
1170
- exports.Connector = base.Connector;
1171
- exports.ConnectorAlreadyConnectedError = base.ConnectorAlreadyConnectedError;
1172
- exports.ConnectorNotFoundError = base.ConnectorNotFoundError;
1173
- exports.ContractMethodNoResultError = base.ContractMethodNoResultError;
1174
- exports.ProviderChainsNotFound = base.ProviderChainsNotFound;
1175
- exports.ProviderRpcError = base.ProviderRpcError;
1176
- exports.ResourceUnavailableError = base.ResourceUnavailableError;
1177
- exports.RpcError = base.RpcError;
1178
- exports.SwitchChainError = base.SwitchChainError;
1179
- exports.SwitchChainNotSupportedError = base.SwitchChainNotSupportedError;
1180
- exports.UserRejectedRequestError = base.UserRejectedRequestError;
1181
- exports.normalizeChainId = base.normalizeChainId;
1334
+ exports.AddChainError = getProvider.AddChainError;
1335
+ exports.ChainDoesNotSupportMulticallError = getProvider.ChainDoesNotSupportMulticallError;
1336
+ exports.ChainMismatchError = getProvider.ChainMismatchError;
1337
+ exports.ChainNotConfiguredError = getProvider.ChainNotConfiguredError;
1338
+ exports.Client = getProvider.Client;
1339
+ exports.Connector = getProvider.Connector;
1340
+ exports.ConnectorAlreadyConnectedError = getProvider.ConnectorAlreadyConnectedError;
1341
+ exports.ConnectorNotFoundError = getProvider.ConnectorNotFoundError;
1342
+ exports.ContractMethodDoesNotExistError = getProvider.ContractMethodDoesNotExistError;
1343
+ exports.ContractMethodNoResultError = getProvider.ContractMethodNoResultError;
1344
+ exports.InjectedConnector = getProvider.InjectedConnector;
1345
+ exports.ProviderChainsNotFound = getProvider.ProviderChainsNotFound;
1346
+ exports.ProviderRpcError = getProvider.ProviderRpcError;
1347
+ exports.ResourceUnavailableError = getProvider.ResourceUnavailableError;
1348
+ exports.RpcError = getProvider.RpcError;
1349
+ exports.SwitchChainError = getProvider.SwitchChainError;
1350
+ exports.SwitchChainNotSupportedError = getProvider.SwitchChainNotSupportedError;
1351
+ exports.UserRejectedRequestError = getProvider.UserRejectedRequestError;
1352
+ exports.createClient = getProvider.createClient;
1353
+ exports.createStorage = getProvider.createStorage;
1354
+ exports.getProvider = getProvider.getProvider;
1355
+ exports.noopStorage = getProvider.noopStorage;
1356
+ exports.normalizeChainId = getProvider.normalizeChainId;
1182
1357
  exports.alchemyRpcUrls = rpcs.alchemyRpcUrls;
1183
1358
  exports.infuraRpcUrls = rpcs.infuraRpcUrls;
1184
1359
  exports.publicRpcUrls = rpcs.publicRpcUrls;
@@ -1206,9 +1381,10 @@ exports.fetchToken = fetchToken;
1206
1381
  exports.getAccount = getAccount;
1207
1382
  exports.getContract = getContract;
1208
1383
  exports.getNetwork = getNetwork;
1209
- exports.getProvider = getProvider;
1210
1384
  exports.getWebSocketProvider = getWebSocketProvider;
1211
1385
  exports.parseContractResult = parseContractResult;
1386
+ exports.prepareSendTransaction = prepareSendTransaction;
1387
+ exports.prepareWriteContract = prepareWriteContract;
1212
1388
  exports.readContract = readContract;
1213
1389
  exports.readContracts = readContracts;
1214
1390
  exports.sendTransaction = sendTransaction;