@wagmi/core 0.4.0-test.2 → 0.4.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 (72) hide show
  1. package/chains/dist/wagmi-core-chains.cjs.dev.js +1 -1
  2. package/chains/dist/wagmi-core-chains.cjs.prod.js +1 -1
  3. package/chains/dist/wagmi-core-chains.esm.js +1 -1
  4. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.dev.js +5 -5
  5. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.prod.js +5 -5
  6. package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.esm.js +5 -5
  7. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.cjs.dev.js +6 -4
  8. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.cjs.prod.js +6 -4
  9. package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.esm.js +6 -4
  10. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.dev.js +11 -7
  11. package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.prod.js +11 -7
  12. package/connectors/mock/dist/wagmi-core-connectors-mock.esm.js +6 -6
  13. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.dev.js +19 -18
  14. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.prod.js +19 -18
  15. package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.esm.js +19 -18
  16. package/dist/base-33eceda3.esm.js +302 -0
  17. package/dist/base-457b5f55.cjs.prod.js +328 -0
  18. package/dist/base-6f16410c.cjs.dev.js +328 -0
  19. package/dist/{chains-d045862c.cjs.prod.js → chains-1390c48d.cjs.prod.js} +56 -4
  20. package/dist/{chains-7e369752.cjs.dev.js → chains-2ca34f98.cjs.dev.js} +56 -4
  21. package/dist/{chains-fa406563.esm.js → chains-e98fda1e.esm.js} +56 -4
  22. package/dist/{client-60ee0298.esm.js → client-71653c40.esm.js} +21 -44
  23. package/dist/{client-42cf11b7.cjs.dev.js → client-7864fb0c.cjs.prod.js} +21 -44
  24. package/dist/{client-ed3aaa6a.cjs.prod.js → client-b3902dbf.cjs.dev.js} +21 -44
  25. package/dist/declarations/src/actions/accounts/getAccount.d.ts +31 -2
  26. package/dist/declarations/src/actions/accounts/getNetwork.d.ts +1 -2
  27. package/dist/declarations/src/actions/accounts/signTypedData.d.ts +11 -13
  28. package/dist/declarations/src/actions/accounts/watchAccount.d.ts +9 -1
  29. package/dist/declarations/src/actions/accounts/watchNetwork.d.ts +8 -1
  30. package/dist/declarations/src/actions/contracts/index.d.ts +5 -3
  31. package/dist/declarations/src/actions/contracts/multicall.d.ts +21 -0
  32. package/dist/declarations/src/actions/contracts/readContract.d.ts +7 -4
  33. package/dist/declarations/src/actions/contracts/readContracts.d.ts +19 -0
  34. package/dist/declarations/src/actions/contracts/watchContractEvent.d.ts +3 -3
  35. package/dist/declarations/src/actions/contracts/watchReadContract.d.ts +2 -3
  36. package/dist/declarations/src/actions/contracts/watchReadContracts.d.ts +6 -0
  37. package/dist/declarations/src/actions/contracts/writeContract.d.ts +10 -4
  38. package/dist/declarations/src/actions/index.d.ts +1 -1
  39. package/dist/declarations/src/actions/transactions/sendTransaction.d.ts +6 -1
  40. package/dist/declarations/src/client.d.ts +6 -11
  41. package/dist/declarations/src/connectors/base.d.ts +4 -3
  42. package/dist/declarations/src/connectors/mock/connector.d.ts +2 -9
  43. package/dist/declarations/src/connectors/mock/provider.d.ts +2 -1
  44. package/dist/declarations/src/connectors/walletConnect.d.ts +5 -4
  45. package/dist/declarations/src/constants/index.d.ts +1 -0
  46. package/dist/declarations/src/constants/multicall.d.ts +25 -0
  47. package/dist/declarations/src/errors.d.ts +27 -5
  48. package/dist/declarations/src/index.d.ts +4 -4
  49. package/dist/declarations/src/providers/alchemy.d.ts +2 -2
  50. package/dist/declarations/src/providers/infura.d.ts +2 -2
  51. package/dist/declarations/src/providers/jsonRpc.d.ts +2 -2
  52. package/dist/declarations/src/providers/public.d.ts +2 -2
  53. package/dist/declarations/src/types/index.d.ts +17 -5
  54. package/dist/declarations/src/utils/configureChains.d.ts +10 -4
  55. package/dist/wagmi-core.cjs.dev.js +578 -231
  56. package/dist/wagmi-core.cjs.prod.js +578 -231
  57. package/dist/wagmi-core.esm.js +576 -239
  58. package/package.json +15 -3
  59. package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.cjs.dev.js +3 -1
  60. package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.cjs.prod.js +3 -1
  61. package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.esm.js +3 -1
  62. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.d.ts +0 -1
  63. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.dev.js +0 -200
  64. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.js +0 -7
  65. package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.prod.js +0 -200
  66. package/connectors/injected/dist/wagmi-core-connectors-injected.esm.js +0 -196
  67. package/connectors/walletLink/dist/wagmi-core-connectors-walletLink.cjs.d.ts +0 -11
  68. package/connectors/walletLink/dist/wagmi-core-connectors-walletLink.cjs.js +0 -16
  69. package/dist/base-7f682723.cjs.prod.js +0 -623
  70. package/dist/base-ae774f26.cjs.dev.js +0 -623
  71. package/dist/base-c546f171.esm.js +0 -603
  72. package/dist/declarations/src/utils/eventemitter.d.ts +0 -135
@@ -1,23 +1,16 @@
1
- import { c as client, g as getClient } from './client-60ee0298.esm.js';
2
- export { C as Client, I as InjectedConnector, a as createClient, b as createStorage, n as noopStorage } from './client-60ee0298.esm.js';
3
- import { C as ConnectorAlreadyConnectedError, a as ConnectorNotFoundError, U as UserRejectedRequestError, S as SwitchChainNotSupportedError } from './base-c546f171.esm.js';
4
- export { A as AddChainError, c as ChainNotConfiguredError, b as Connector, C as ConnectorAlreadyConnectedError, a as ConnectorNotFoundError, P as ProviderRpcError, R as ResourceUnavailableError, d as RpcError, e as SwitchChainError, S as SwitchChainNotSupportedError, U as UserRejectedRequestError, n as normalizeChainId } from './base-c546f171.esm.js';
5
- import { Contract } from 'ethers/lib/ethers';
6
- import { formatUnits, getAddress } from 'ethers/lib/utils';
7
- import { a as allChains } from './chains-fa406563.esm.js';
8
- export { a as allChains, c as chain, b as chainId, d as defaultChains, e as defaultL2Chains, f as etherscanBlockExplorers } from './chains-fa406563.esm.js';
9
- import { providers, Contract as Contract$1 } from 'ethers';
1
+ import { c as client, g as getClient } from './client-71653c40.esm.js';
2
+ export { C as Client, I as InjectedConnector, a as createClient, b as createStorage, n as noopStorage } from './client-71653c40.esm.js';
3
+ import { C as ConnectorAlreadyConnectedError, P as ProviderChainsNotFound, a as ChainDoesNotSupportMulticallError, b as ConnectorNotFoundError, c as ChainMismatchError, U as UserRejectedRequestError, S as SwitchChainNotSupportedError } from './base-33eceda3.esm.js';
4
+ export { A as AddChainError, a as ChainDoesNotSupportMulticallError, c as ChainMismatchError, e as ChainNotConfiguredError, d as Connector, C as ConnectorAlreadyConnectedError, b as ConnectorNotFoundError, P as ProviderChainsNotFound, f as ProviderRpcError, R as ResourceUnavailableError, g as RpcError, h as SwitchChainError, S as SwitchChainNotSupportedError, U as UserRejectedRequestError, n as normalizeChainId } from './base-33eceda3.esm.js';
5
+ import { logger, Contract as Contract$1 } from 'ethers/lib/ethers';
6
+ import { isAddress, Logger, formatUnits, getAddress } from 'ethers/lib/utils';
7
+ import { providers, Contract } from 'ethers';
8
+ import shallow from 'zustand/shallow';
10
9
  export { a as alchemyRpcUrls, i as infuraRpcUrls } from './rpcs-7cfbd91c.esm.js';
10
+ export { a as allChains, c as chain, b as chainId, d as defaultChains, e as defaultL2Chains, f as etherscanBlockExplorers } from './chains-e98fda1e.esm.js';
11
11
  import 'zustand/vanilla';
12
12
  import 'zustand/middleware';
13
-
14
- // https://ethereum.org/en/developers/docs/standards/tokens/erc-20
15
- const erc20ABI = ['event Approval(address indexed _owner, address indexed _spender, uint256 _value)', 'event Transfer(address indexed _from, address indexed _to, uint256 _value)', 'function allowance(address _owner, address _spender) public view returns (uint256 remaining)', 'function approve(address _spender, uint256 _value) public returns (bool success)', 'function balanceOf(address _owner) public view returns (uint256 balance)', 'function decimals() public view returns (uint8)', 'function name() public view returns (string)', 'function symbol() public view returns (string)', 'function totalSupply() public view returns (uint256)', 'function transfer(address _to, uint256 _value) public returns (bool success)', 'function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)']; // https://ethereum.org/en/developers/docs/standards/tokens/erc-721
16
-
17
- const erc721ABI = ['event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId)', 'event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved)', 'event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId)', 'function approve(address _approved, uint256 _tokenId) external payable', 'function balanceOf(address _owner) external view returns (uint256)', 'function getApproved(uint256 _tokenId) external view returns (address)', 'function isApprovedForAll(address _owner, address _operator) external view returns (bool)', 'function name() view returns (string memory)', 'function ownerOf(uint256 _tokenId) external view returns (address)', 'function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable', 'function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable', 'function setApprovalForAll(address _operator, bool _approved) external', 'function symbol() view returns (string memory)', 'function tokenByIndex(uint256 _index) view returns (uint256)', 'function tokenOfOwnerByIndex(address _owner, uint256 _index) view returns (uint256 tokenId)', 'function tokenURI(uint256 _tokenId) view returns (string memory)', 'function totalSupply() view returns (uint256)', 'function transferFrom(address _from, address _to, uint256 _tokenId) external payable'];
18
-
19
- // https://github.com/ethers-io/ethers.js/blob/master/packages/units/src.ts/index.ts#L10-L18
20
- const units = ['wei', 'kwei', 'mwei', 'gwei', 'szabo', 'finney', 'ether'];
13
+ import 'eventemitter3';
21
14
 
22
15
  function configureChains(defaultChains, providers) {
23
16
  let {
@@ -75,9 +68,13 @@ function configureChains(defaultChains, providers) {
75
68
  const activeChainId = chainId && chains.some(x => x.id === chainId) ? chainId : (_defaultChains$ = defaultChains[0]) === null || _defaultChains$ === void 0 ? void 0 : _defaultChains$.id;
76
69
  const chainProviders = providers_[activeChainId];
77
70
  if (!chainProviders) throw new Error("No providers configured for chain \"".concat(activeChainId, "\""));
78
- if (chainProviders.length === 1) return (_chainProviders$ = chainProviders[0]) === null || _chainProviders$ === void 0 ? void 0 : _chainProviders$.call(chainProviders);
79
- return fallbackProvider(targetQuorum, minQuorum, chainProviders, {
71
+ if (chainProviders.length === 1) return Object.assign(((_chainProviders$ = chainProviders[0]) === null || _chainProviders$ === void 0 ? void 0 : _chainProviders$.call(chainProviders)) || {}, {
72
+ chains
73
+ });
74
+ return Object.assign(fallbackProvider(targetQuorum, minQuorum, chainProviders, {
80
75
  stallTimeout
76
+ }), {
77
+ chains
81
78
  });
82
79
  },
83
80
  webSocketProvider: _ref3 => {
@@ -89,10 +86,14 @@ function configureChains(defaultChains, providers) {
89
86
  const activeChainId = chainId && chains.some(x => x.id === chainId) ? chainId : (_defaultChains$2 = defaultChains[0]) === null || _defaultChains$2 === void 0 ? void 0 : _defaultChains$2.id;
90
87
  const chainWebSocketProviders = webSocketProviders_[activeChainId];
91
88
  if (!chainWebSocketProviders) return undefined;
92
- if (chainWebSocketProviders.length === 1) return (_chainWebSocketProvid = chainWebSocketProviders[0]) === null || _chainWebSocketProvid === void 0 ? void 0 : _chainWebSocketProvid.call(chainWebSocketProviders); // WebSockets do not work with `fallbackProvider`
89
+ if (chainWebSocketProviders.length === 1) return Object.assign(((_chainWebSocketProvid = chainWebSocketProviders[0]) === null || _chainWebSocketProvid === void 0 ? void 0 : _chainWebSocketProvid.call(chainWebSocketProviders)) || {}, {
90
+ chains
91
+ }); // WebSockets do not work with `fallbackProvider`
93
92
  // Default to first available
94
93
 
95
- return (_chainWebSocketProvid2 = chainWebSocketProviders[0]) === null || _chainWebSocketProvid2 === void 0 ? void 0 : _chainWebSocketProvid2.call(chainWebSocketProviders);
94
+ return Object.assign(((_chainWebSocketProvid2 = chainWebSocketProviders[0]) === null || _chainWebSocketProvid2 === void 0 ? void 0 : _chainWebSocketProvid2.call(chainWebSocketProviders)) || {}, {
95
+ chains
96
+ });
96
97
  }
97
98
  };
98
99
  }
@@ -128,6 +129,52 @@ function fallbackProvider(targetQuorum, minQuorum, providers_, _ref4) {
128
129
  }
129
130
  }
130
131
 
132
+ // https://ethereum.org/en/developers/docs/standards/tokens/erc-20
133
+ const erc20ABI = ['event Approval(address indexed _owner, address indexed _spender, uint256 _value)', 'event Transfer(address indexed _from, address indexed _to, uint256 _value)', 'function allowance(address _owner, address _spender) public view returns (uint256 remaining)', 'function approve(address _spender, uint256 _value) public returns (bool success)', 'function balanceOf(address _owner) public view returns (uint256 balance)', 'function decimals() public view returns (uint8)', 'function name() public view returns (string)', 'function symbol() public view returns (string)', 'function totalSupply() public view returns (uint256)', 'function transfer(address _to, uint256 _value) public returns (bool success)', 'function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)']; // https://ethereum.org/en/developers/docs/standards/tokens/erc-721
134
+
135
+ const erc721ABI = ['event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId)', 'event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved)', 'event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId)', 'function approve(address _approved, uint256 _tokenId) external payable', 'function balanceOf(address _owner) external view returns (uint256)', 'function getApproved(uint256 _tokenId) external view returns (address)', 'function isApprovedForAll(address _owner, address _operator) external view returns (bool)', 'function name() view returns (string memory)', 'function ownerOf(uint256 _tokenId) external view returns (address)', 'function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable', 'function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable', 'function setApprovalForAll(address _operator, bool _approved) external', 'function symbol() view returns (string memory)', 'function tokenByIndex(uint256 _index) view returns (uint256)', 'function tokenOfOwnerByIndex(address _owner, uint256 _index) view returns (uint256 tokenId)', 'function tokenURI(uint256 _tokenId) view returns (string memory)', 'function totalSupply() view returns (uint256)', 'function transferFrom(address _from, address _to, uint256 _tokenId) external payable'];
136
+
137
+ const multicallInterface = [{
138
+ inputs: [{
139
+ components: [{
140
+ internalType: 'address',
141
+ name: 'target',
142
+ type: 'address'
143
+ }, {
144
+ internalType: 'bool',
145
+ name: 'allowFailure',
146
+ type: 'bool'
147
+ }, {
148
+ internalType: 'bytes',
149
+ name: 'callData',
150
+ type: 'bytes'
151
+ }],
152
+ internalType: 'struct Multicall3.Call3[]',
153
+ name: 'calls',
154
+ type: 'tuple[]'
155
+ }],
156
+ name: 'aggregate3',
157
+ outputs: [{
158
+ components: [{
159
+ internalType: 'bool',
160
+ name: 'success',
161
+ type: 'bool'
162
+ }, {
163
+ internalType: 'bytes',
164
+ name: 'returnData',
165
+ type: 'bytes'
166
+ }],
167
+ internalType: 'struct Multicall3.Result[]',
168
+ name: 'returnData',
169
+ type: 'tuple[]'
170
+ }],
171
+ stateMutability: 'view',
172
+ type: 'function'
173
+ }];
174
+
175
+ // https://github.com/ethers-io/ethers.js/blob/master/packages/units/src.ts/index.ts#L10-L18
176
+ const units = ['wei', 'kwei', 'mwei', 'gwei', 'szabo', 'finney', 'ether'];
177
+
131
178
  async function connect(_ref) {
132
179
  let {
133
180
  chainId,
@@ -135,19 +182,31 @@ async function connect(_ref) {
135
182
  } = _ref;
136
183
  const activeConnector = client.connector;
137
184
  if (connector.id === (activeConnector === null || activeConnector === void 0 ? void 0 : activeConnector.id)) throw new ConnectorAlreadyConnectedError();
138
- const data = await connector.connect({
139
- chainId
140
- });
141
- client.setLastUsedConnector(connector.id);
142
- client.setState(x => ({ ...x,
143
- connector,
144
- chains: connector === null || connector === void 0 ? void 0 : connector.chains,
145
- data
146
- }));
147
- client.storage.setItem('connected', true);
148
- return { ...data,
149
- connector
150
- };
185
+
186
+ try {
187
+ client.setState(x => ({ ...x,
188
+ status: 'connecting'
189
+ }));
190
+ const data = await connector.connect({
191
+ chainId
192
+ });
193
+ client.setLastUsedConnector(connector.id);
194
+ client.setState(x => ({ ...x,
195
+ connector,
196
+ chains: connector === null || connector === void 0 ? void 0 : connector.chains,
197
+ data,
198
+ status: 'connected'
199
+ }));
200
+ client.storage.setItem('connected', true);
201
+ return { ...data,
202
+ connector
203
+ };
204
+ } catch (err) {
205
+ client.setState(x => ({ ...x,
206
+ status: 'disconnected'
207
+ }));
208
+ throw err;
209
+ }
151
210
  }
152
211
 
153
212
  async function disconnect() {
@@ -157,6 +216,15 @@ async function disconnect() {
157
216
  client.storage.removeItem('connected');
158
217
  }
159
218
 
219
+ function getContract(_ref) {
220
+ let {
221
+ addressOrName,
222
+ contractInterface,
223
+ signerOrProvider
224
+ } = _ref;
225
+ return new Contract(addressOrName, contractInterface, signerOrProvider);
226
+ }
227
+
160
228
  function getProvider() {
161
229
  let {
162
230
  chainId
@@ -207,213 +275,152 @@ function watchWebSocketProvider(args, callback) {
207
275
  return unsubscribe;
208
276
  }
209
277
 
210
- async function fetchBalance(_ref) {
211
- var _client$connector$cha, _client$connector, _chain$nativeCurrency, _chain$nativeCurrency2, _chain$nativeCurrency3, _chain$nativeCurrency4;
212
-
278
+ async function readContract(_ref) {
213
279
  let {
214
280
  addressOrName,
281
+ args,
215
282
  chainId,
216
- formatUnits: unit = 'ether',
217
- token
283
+ contractInterface,
284
+ functionName,
285
+ overrides
218
286
  } = _ref;
219
- const client = getClient();
220
287
  const provider = getProvider({
221
288
  chainId
222
289
  });
223
-
224
- if (token) {
225
- const contract = new Contract(token, erc20ABI, provider);
226
- const [value, decimals, symbol] = await Promise.all([contract.balanceOf(addressOrName), contract.decimals(), contract.symbol()]);
227
- return {
228
- decimals,
229
- formatted: formatUnits(value, unit),
230
- symbol,
231
- unit,
232
- value
233
- };
234
- }
235
-
236
- const chains = [...((_client$connector$cha = (_client$connector = client.connector) === null || _client$connector === void 0 ? void 0 : _client$connector.chains) !== null && _client$connector$cha !== void 0 ? _client$connector$cha : []), ...allChains];
237
- const value = await provider.getBalance(addressOrName);
238
- const chain = chains.find(x => x.id === provider.network.chainId);
239
- return {
240
- 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,
241
- formatted: formatUnits(value, unit),
242
- 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',
243
- unit,
244
- value
245
- };
246
- }
247
-
248
- async function fetchSigner() {
249
- var _client$connector, _client$connector$get;
250
-
251
- const client = getClient();
252
- 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;
253
- return signer;
254
- }
255
-
256
- function getAccount() {
257
- const {
258
- data,
259
- connector
260
- } = getClient();
261
- return {
262
- address: data === null || data === void 0 ? void 0 : data.account,
263
- connector
264
- };
265
- }
266
-
267
- function getNetwork() {
268
- var _client$data, _client$data$chain, _client$chains, _find, _client$data2;
269
-
270
- const client = getClient();
271
- 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;
272
- const activeChains = (_client$chains = client.chains) !== null && _client$chains !== void 0 ? _client$chains : [];
273
- const activeChain = (_find = [...activeChains, ...allChains].find(x => x.id === chainId)) !== null && _find !== void 0 ? _find : {
274
- id: chainId,
275
- name: "Chain ".concat(chainId),
276
- network: "".concat(chainId),
277
- rpcUrls: {
278
- default: ''
279
- }
280
- };
281
- return {
282
- chain: chainId ? { ...activeChain,
283
- ...((_client$data2 = client.data) === null || _client$data2 === void 0 ? void 0 : _client$data2.chain),
284
- id: chainId
285
- } : undefined,
286
- chains: activeChains
287
- };
288
- }
289
-
290
- async function signMessage(args) {
291
- try {
292
- const signer = await fetchSigner();
293
- if (!signer) throw new ConnectorNotFoundError();
294
- return await signer.signMessage(args.message);
295
- } catch (error) {
296
- if (error.code === 4001) throw new UserRejectedRequestError(error);
297
- throw error;
298
- }
299
- }
300
-
301
- async function signTypedData(args) {
302
- try {
303
- const signer = await fetchSigner();
304
- if (!signer) throw new ConnectorNotFoundError(); // Method name may be changed in the future, see https://docs.ethers.io/v5/api/signer/#Signer-signTypedData
305
-
306
- return await signer._signTypedData(args.domain, args.types, args.value);
307
- } catch (error) {
308
- if (error.code === 4001) throw new UserRejectedRequestError(error);
309
- throw error;
310
- }
290
+ const contract = getContract({
291
+ addressOrName,
292
+ contractInterface,
293
+ signerOrProvider: provider
294
+ });
295
+ const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
296
+ const contractFunction = contract[functionName];
297
+ if (!contractFunction) console.warn("\"".concat(functionName, "\" is not in the interface for contract \"").concat(addressOrName, "\""));
298
+ const response = await (contractFunction === null || contractFunction === void 0 ? void 0 : contractFunction(...params));
299
+ return response;
311
300
  }
312
301
 
313
- async function switchNetwork(_ref) {
314
- var _client$connector;
315
-
302
+ async function multicall(_ref) {
316
303
  let {
317
- chainId
304
+ allowFailure = true,
305
+ chainId,
306
+ contracts,
307
+ overrides
318
308
  } = _ref;
319
- const client = getClient();
320
- if (!((_client$connector = client.connector) !== null && _client$connector !== void 0 && _client$connector.switchChain)) throw new SwitchChainNotSupportedError();
321
- const chain = await client.connector.switchChain(chainId);
322
- return chain;
323
- }
324
-
325
- function watchAccount(callback) {
326
- const client = getClient();
327
-
328
- const handleChange = () => callback(getAccount());
329
-
330
- const unsubscribe = client.subscribe(_ref => {
309
+ const provider = getProvider({
310
+ chainId
311
+ });
312
+ if (!provider.chains) throw new ProviderChainsNotFound();
313
+ const chain = provider.chains.find(chain => chain.id === chainId) || provider.chains[0];
314
+ if (!chain) throw new ProviderChainsNotFound();
315
+ if (!(chain !== null && chain !== void 0 && chain.multicall)) throw new ChainDoesNotSupportMulticallError({
316
+ chain
317
+ });
318
+ 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 ChainDoesNotSupportMulticallError({
319
+ blockNumber: overrides === null || overrides === void 0 ? void 0 : overrides.blockTag,
320
+ chain
321
+ });
322
+ const multicallContract = getContract({
323
+ addressOrName: chain.multicall.address,
324
+ contractInterface: multicallInterface,
325
+ signerOrProvider: provider
326
+ });
327
+ const calls = contracts.map(_ref2 => {
331
328
  let {
332
- data,
333
- connector
334
- } = _ref;
329
+ addressOrName,
330
+ contractInterface,
331
+ functionName,
332
+ ...config
333
+ } = _ref2;
334
+ const {
335
+ args
336
+ } = config || {};
337
+ const contract = getContract({
338
+ addressOrName,
339
+ contractInterface
340
+ });
341
+ const params = Array.isArray(args) ? args : args ? [args] : [];
342
+ const callData = contract.interface.encodeFunctionData(functionName, params);
343
+ if (!contract[functionName]) console.warn("\"".concat(functionName, "\" is not in the interface for contract \"").concat(addressOrName, "\""));
335
344
  return {
336
- account: data === null || data === void 0 ? void 0 : data.account,
337
- connector
345
+ target: addressOrName,
346
+ allowFailure: allowFailure,
347
+ callData
338
348
  };
339
- }, handleChange, {
340
- equalityFn: (selected, previous) => selected.account === previous.account && selected.connector === previous.connector
341
349
  });
342
- return unsubscribe;
350
+ const params = [...[calls], ...(overrides ? [overrides] : [])];
351
+ const results = await multicallContract.aggregate3(...params);
352
+ return results.map((_ref3, i) => {
353
+ let {
354
+ returnData,
355
+ success
356
+ } = _ref3;
357
+ if (!success) return undefined;
358
+ const {
359
+ addressOrName,
360
+ contractInterface,
361
+ functionName
362
+ } = contracts[i];
363
+ const contract = getContract({
364
+ addressOrName,
365
+ contractInterface
366
+ });
367
+ const result = contract.interface.decodeFunctionResult(functionName, returnData);
368
+ return Array.isArray(result) && result.length === 1 ? result[0] : result;
369
+ });
343
370
  }
344
371
 
345
- function watchNetwork(callback) {
346
- const client = getClient();
347
-
348
- const handleChange = () => callback(getNetwork());
372
+ async function readContracts(_ref) {
373
+ let {
374
+ allowFailure = true,
375
+ contracts,
376
+ overrides
377
+ } = _ref;
349
378
 
350
- const unsubscribe = client.subscribe(_ref => {
351
- var _data$chain;
379
+ try {
380
+ const provider = getProvider();
381
+ const contractsByChainId = contracts.reduce((contracts, contract) => {
382
+ var _contract$chainId;
352
383
 
353
- let {
354
- data,
355
- chains
356
- } = _ref;
357
- return {
358
- chainId: data === null || data === void 0 ? void 0 : (_data$chain = data.chain) === null || _data$chain === void 0 ? void 0 : _data$chain.id,
359
- chains
360
- };
361
- }, handleChange, {
362
- equalityFn: (selected, previous) => selected.chainId === previous.chainId && selected.chains === previous.chains
363
- });
364
- return unsubscribe;
365
- }
384
+ const chainId = (_contract$chainId = contract.chainId) !== null && _contract$chainId !== void 0 ? _contract$chainId : provider.network.chainId;
385
+ return { ...contracts,
386
+ [chainId]: [...(contracts[chainId] || []), contract]
387
+ };
388
+ }, {});
389
+ const promises = Object.entries(contractsByChainId).map(_ref2 => {
390
+ let [chainId, contracts] = _ref2;
391
+ return multicall({
392
+ allowFailure,
393
+ chainId: parseInt(chainId),
394
+ contracts,
395
+ overrides
396
+ });
397
+ });
366
398
 
367
- function watchSigner(callback) {
368
- const client = getClient();
399
+ if (allowFailure) {
400
+ return (await Promise.allSettled(promises)).map(result => {
401
+ if (result.status === 'fulfilled') return result.value;
369
402
 
370
- const handleChange = async () => callback(await fetchSigner());
403
+ if (result.reason instanceof ChainDoesNotSupportMulticallError) {
404
+ console.warn(result.reason.message);
405
+ throw result.reason;
406
+ }
371
407
 
372
- const unsubscribe = client.subscribe(_ref => {
373
- var _data$chain;
408
+ return null;
409
+ }).flat();
410
+ }
374
411
 
375
- let {
376
- data,
377
- connector
378
- } = _ref;
379
- return {
380
- account: data === null || data === void 0 ? void 0 : data.account,
381
- chainId: data === null || data === void 0 ? void 0 : (_data$chain = data.chain) === null || _data$chain === void 0 ? void 0 : _data$chain.id,
382
- connector
383
- };
384
- }, handleChange, {
385
- equalityFn: (selected, previous) => selected.account === previous.account && selected.chainId === previous.chainId && selected.connector === previous.connector
386
- });
387
- return unsubscribe;
388
- }
412
+ return (await Promise.all(promises)).flat();
413
+ } catch (err) {
414
+ const promises = contracts.map(contract => readContract({ ...contract,
415
+ overrides
416
+ }));
389
417
 
390
- function getContract(_ref) {
391
- let {
392
- addressOrName,
393
- contractInterface,
394
- signerOrProvider
395
- } = _ref;
396
- return new Contract$1(addressOrName, contractInterface, signerOrProvider);
397
- }
418
+ if (allowFailure) {
419
+ return (await Promise.allSettled(promises)).map(result => result.status === 'fulfilled' ? result.value : null);
420
+ }
398
421
 
399
- async function readContract(contractConfig, functionName) {
400
- let {
401
- args,
402
- chainId,
403
- overrides
404
- } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
405
- const provider = getProvider({
406
- chainId
407
- });
408
- const contract = getContract({
409
- signerOrProvider: provider,
410
- ...contractConfig
411
- });
412
- const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
413
- const contractFunction = contract[functionName];
414
- if (!contractFunction) console.warn("\"".concat(functionName, "\" does not exist in interface for contract \"").concat(contractConfig.addressOrName, "\""));
415
- const response = await (contractFunction === null || contractFunction === void 0 ? void 0 : contractFunction(...params));
416
- return response;
422
+ return Promise.all(promises);
423
+ }
417
424
  }
418
425
 
419
426
  function watchContractEvent(
@@ -457,7 +464,7 @@ eventName, callback) {
457
464
  webSocketProvider
458
465
  };
459
466
  }, watchEvent, {
460
- equalityFn: (selected, previous) => selected.provider === previous.provider && selected.webSocketProvider === previous.webSocketProvider
467
+ equalityFn: shallow
461
468
  });
462
469
  return () => {
463
470
  var _contract2;
@@ -519,7 +526,7 @@ function watchBlockNumber(args, callback) {
519
526
 
520
527
  callback(await fetchBlockNumber());
521
528
  }, {
522
- equalityFn: (selected, previous) => selected.provider === previous.provider && selected.webSocketProvider === previous.webSocketProvider
529
+ equalityFn: shallow
523
530
  });
524
531
  return () => {
525
532
  unsubscribe();
@@ -527,12 +534,10 @@ function watchBlockNumber(args, callback) {
527
534
  };
528
535
  }
529
536
 
530
- function watchReadContract(contractConfig, functionName) {
531
- let config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
532
- let callback = arguments.length > 3 ? arguments[3] : undefined;
537
+ function watchReadContract(config, callback) {
533
538
  const client = getClient();
534
539
 
535
- const handleChange = async () => callback(await readContract(contractConfig, functionName, config));
540
+ const handleChange = async () => callback(await readContract(config));
536
541
 
537
542
  const unwatch = config.listenToBlock ? watchBlockNumber({
538
543
  listen: true
@@ -549,29 +554,335 @@ function watchReadContract(contractConfig, functionName) {
549
554
  };
550
555
  }
551
556
 
552
- async function writeContract(contractConfig, functionName) {
557
+ function watchReadContracts(config, callback) {
558
+ const client = getClient();
559
+
560
+ const handleChange = async () => callback(await readContracts(config));
561
+
562
+ const unwatch = config.listenToBlock ? watchBlockNumber({
563
+ listen: true
564
+ }, handleChange) : undefined;
565
+ const unsubscribe = client.subscribe(_ref => {
566
+ let {
567
+ provider
568
+ } = _ref;
569
+ return provider;
570
+ }, handleChange);
571
+ return () => {
572
+ unsubscribe();
573
+ unwatch === null || unwatch === void 0 ? void 0 : unwatch();
574
+ };
575
+ }
576
+
577
+ async function writeContract(_ref) {
553
578
  let {
579
+ addressOrName,
554
580
  args,
555
- overrides
556
- } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
557
- const client = getClient();
558
- if (!client.connector) throw new ConnectorNotFoundError();
581
+ chainId,
582
+ contractInterface,
583
+ functionName,
584
+ overrides,
585
+ signerOrProvider
586
+ } = _ref;
587
+ const {
588
+ connector
589
+ } = getClient();
590
+ if (!connector) throw new ConnectorNotFoundError();
559
591
  const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
560
592
 
561
593
  try {
562
- const signer = await client.connector.getSigner();
563
- const contract = getContract(contractConfig);
594
+ var _chain;
595
+
596
+ let chain;
597
+
598
+ if (chainId) {
599
+ const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
600
+
601
+ if (chainId !== activeChainId) {
602
+ var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
603
+
604
+ if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new ChainMismatchError({
605
+ 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),
606
+ 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)
607
+ });
608
+ }
609
+ }
610
+
611
+ const signer = await connector.getSigner({
612
+ chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
613
+ });
614
+ const contract = getContract({
615
+ addressOrName,
616
+ contractInterface,
617
+ signerOrProvider
618
+ });
564
619
  const contractWithSigner = contract.connect(signer);
565
620
  const contractFunction = contractWithSigner[functionName];
566
- if (!contractFunction) console.warn("\"".concat(functionName, "\" does not exist in interface for contract \"").concat(contractConfig.addressOrName, "\""));
567
- const response = await contractFunction(...params);
568
- return response;
621
+ if (!contractFunction) console.warn("\"".concat(functionName, "\" does not exist in interface for contract \"").concat(addressOrName, "\""));
622
+ return await contractFunction(...params);
623
+ } catch (error) {
624
+ if (error.code === 4001) throw new UserRejectedRequestError(error);
625
+ throw error;
626
+ }
627
+ }
628
+
629
+ async function fetchBalance(_ref) {
630
+ var _client$chains, _chain$nativeCurrency, _chain$nativeCurrency2, _chain$nativeCurrency3, _chain$nativeCurrency4;
631
+
632
+ let {
633
+ addressOrName,
634
+ chainId,
635
+ formatUnits: unit = 'ether',
636
+ token
637
+ } = _ref;
638
+ const client = getClient();
639
+ const provider = getProvider({
640
+ chainId
641
+ });
642
+
643
+ if (token) {
644
+ const erc20Config = {
645
+ addressOrName: token,
646
+ contractInterface: erc20ABI,
647
+ chainId
648
+ }; // Convert ENS name to address if required
649
+
650
+ let resolvedAddress;
651
+ if (isAddress(addressOrName)) resolvedAddress = addressOrName;else {
652
+ const address = await provider.resolveName(addressOrName); // Same error `provider.getBalance` throws for invalid ENS name
653
+
654
+ if (!address) logger.throwError('ENS name not configured', Logger.errors.UNSUPPORTED_OPERATION, {
655
+ operation: "resolveName(".concat(JSON.stringify(addressOrName), ")")
656
+ });
657
+ resolvedAddress = address;
658
+ }
659
+ const [value, decimals, symbol] = await readContracts({
660
+ allowFailure: false,
661
+ contracts: [{ ...erc20Config,
662
+ functionName: 'balanceOf',
663
+ args: resolvedAddress
664
+ }, { ...erc20Config,
665
+ functionName: 'decimals'
666
+ }, { ...erc20Config,
667
+ functionName: 'symbol'
668
+ }]
669
+ });
670
+ return {
671
+ decimals,
672
+ formatted: formatUnits(value !== null && value !== void 0 ? value : '0', unit),
673
+ symbol,
674
+ unit,
675
+ value
676
+ };
677
+ }
678
+
679
+ const chains = [...(client.provider.chains || []), ...((_client$chains = client.chains) !== null && _client$chains !== void 0 ? _client$chains : [])];
680
+ const value = await provider.getBalance(addressOrName);
681
+ const chain = chains.find(x => x.id === provider.network.chainId);
682
+ return {
683
+ 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,
684
+ formatted: formatUnits(value !== null && value !== void 0 ? value : '0', unit),
685
+ 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',
686
+ unit,
687
+ value
688
+ };
689
+ }
690
+
691
+ async function fetchSigner() {
692
+ var _client$connector, _client$connector$get;
693
+
694
+ const client = getClient();
695
+ 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;
696
+ return signer;
697
+ }
698
+
699
+ function getAccount() {
700
+ const {
701
+ data,
702
+ connector,
703
+ status
704
+ } = getClient();
705
+
706
+ switch (status) {
707
+ case 'connected':
708
+ return {
709
+ address: data === null || data === void 0 ? void 0 : data.account,
710
+ connector: connector,
711
+ isConnected: true,
712
+ isConnecting: false,
713
+ isDisconnected: false,
714
+ isReconnecting: false,
715
+ status
716
+ };
717
+
718
+ case 'reconnecting':
719
+ return {
720
+ address: data === null || data === void 0 ? void 0 : data.account,
721
+ connector,
722
+ isConnected: !!(data !== null && data !== void 0 && data.account),
723
+ isConnecting: false,
724
+ isDisconnected: false,
725
+ isReconnecting: true,
726
+ status
727
+ };
728
+
729
+ case 'connecting':
730
+ return {
731
+ address: undefined,
732
+ connector: undefined,
733
+ isConnected: false,
734
+ isConnecting: true,
735
+ isDisconnected: false,
736
+ isReconnecting: false,
737
+ status
738
+ };
739
+
740
+ case 'disconnected':
741
+ return {
742
+ address: undefined,
743
+ connector: undefined,
744
+ isConnected: false,
745
+ isConnecting: false,
746
+ isDisconnected: true,
747
+ isReconnecting: false,
748
+ status
749
+ };
750
+ }
751
+ }
752
+
753
+ function getNetwork() {
754
+ var _client$data, _client$data$chain, _client$chains, _find, _client$data2;
755
+
756
+ const client = getClient();
757
+ 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;
758
+ const activeChains = (_client$chains = client.chains) !== null && _client$chains !== void 0 ? _client$chains : [];
759
+ const activeChain = (_find = [...(client.provider.chains || []), ...activeChains].find(x => x.id === chainId)) !== null && _find !== void 0 ? _find : {
760
+ id: chainId,
761
+ name: "Chain ".concat(chainId),
762
+ network: "".concat(chainId),
763
+ rpcUrls: {
764
+ default: ''
765
+ }
766
+ };
767
+ return {
768
+ chain: chainId ? { ...activeChain,
769
+ ...((_client$data2 = client.data) === null || _client$data2 === void 0 ? void 0 : _client$data2.chain),
770
+ id: chainId
771
+ } : undefined,
772
+ chains: activeChains
773
+ };
774
+ }
775
+
776
+ async function signMessage(args) {
777
+ try {
778
+ const signer = await fetchSigner();
779
+ if (!signer) throw new ConnectorNotFoundError();
780
+ return await signer.signMessage(args.message);
569
781
  } catch (error) {
570
782
  if (error.code === 4001) throw new UserRejectedRequestError(error);
571
783
  throw error;
572
784
  }
573
785
  }
574
786
 
787
+ async function signTypedData(args) {
788
+ try {
789
+ const signer = await fetchSigner();
790
+ if (!signer) throw new ConnectorNotFoundError(); // Method name may be changed in the future, see https://docs.ethers.io/v5/api/signer/#Signer-signTypedData
791
+
792
+ return await signer._signTypedData(args.domain, args.types, args.value);
793
+ } catch (error) {
794
+ if (error.code === 4001) throw new UserRejectedRequestError(error);
795
+ throw error;
796
+ }
797
+ }
798
+
799
+ async function switchNetwork(_ref) {
800
+ let {
801
+ chainId
802
+ } = _ref;
803
+ const {
804
+ connector
805
+ } = getClient();
806
+ if (!connector) throw new ConnectorNotFoundError();
807
+ if (!connector.switchChain) throw new SwitchChainNotSupportedError({
808
+ connector
809
+ });
810
+ return await connector.switchChain(chainId);
811
+ }
812
+
813
+ function watchAccount(callback) {
814
+ let {
815
+ selector = x => x
816
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
817
+ const client = getClient();
818
+
819
+ const handleChange = () => callback(getAccount());
820
+
821
+ const unsubscribe = client.subscribe(_ref => {
822
+ let {
823
+ data,
824
+ connector,
825
+ status
826
+ } = _ref;
827
+ return selector({
828
+ address: data === null || data === void 0 ? void 0 : data.account,
829
+ connector,
830
+ status
831
+ });
832
+ }, handleChange, {
833
+ equalityFn: shallow
834
+ });
835
+ return unsubscribe;
836
+ }
837
+
838
+ function watchNetwork(callback) {
839
+ let {
840
+ selector = x => x
841
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
842
+ const client = getClient();
843
+
844
+ const handleChange = () => callback(getNetwork());
845
+
846
+ const unsubscribe = client.subscribe(_ref => {
847
+ var _data$chain;
848
+
849
+ let {
850
+ data,
851
+ chains
852
+ } = _ref;
853
+ return selector({
854
+ chainId: data === null || data === void 0 ? void 0 : (_data$chain = data.chain) === null || _data$chain === void 0 ? void 0 : _data$chain.id,
855
+ chains
856
+ });
857
+ }, handleChange, {
858
+ equalityFn: shallow
859
+ });
860
+ return unsubscribe;
861
+ }
862
+
863
+ function watchSigner(callback) {
864
+ const client = getClient();
865
+
866
+ const handleChange = async () => callback(await fetchSigner());
867
+
868
+ const unsubscribe = client.subscribe(_ref => {
869
+ var _data$chain;
870
+
871
+ let {
872
+ data,
873
+ connector
874
+ } = _ref;
875
+ return {
876
+ account: data === null || data === void 0 ? void 0 : data.account,
877
+ chainId: data === null || data === void 0 ? void 0 : (_data$chain = data.chain) === null || _data$chain === void 0 ? void 0 : _data$chain.id,
878
+ connector
879
+ };
880
+ }, handleChange, {
881
+ equalityFn: shallow
882
+ });
883
+ return unsubscribe;
884
+ }
885
+
575
886
  async function fetchEnsAddress(_ref) {
576
887
  let {
577
888
  chainId,
@@ -654,7 +965,7 @@ async function fetchToken(_ref) {
654
965
  const provider = getProvider({
655
966
  chainId
656
967
  });
657
- const contract = new Contract(address, erc20ABI, provider);
968
+ const contract = new Contract$1(address, erc20ABI, provider);
658
969
  const [symbol, decimals, totalSupply] = await Promise.all([contract.symbol(), contract.decimals(), contract.totalSupply()]);
659
970
  const token = {
660
971
  address,
@@ -668,12 +979,38 @@ async function fetchToken(_ref) {
668
979
  return token;
669
980
  }
670
981
 
671
- async function sendTransaction(args) {
982
+ async function sendTransaction(_ref) {
983
+ let {
984
+ chainId,
985
+ request
986
+ } = _ref;
987
+ const {
988
+ connector
989
+ } = getClient();
990
+ if (!connector) throw new ConnectorNotFoundError();
991
+
672
992
  try {
673
- const signer = await fetchSigner();
674
- if (!signer) throw new ConnectorNotFoundError();
675
- const transaction = await signer.sendTransaction(args.request);
676
- return transaction;
993
+ var _chain;
994
+
995
+ let chain;
996
+
997
+ if (chainId) {
998
+ const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
999
+
1000
+ if (chainId !== activeChainId) {
1001
+ var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
1002
+
1003
+ if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new ChainMismatchError({
1004
+ 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),
1005
+ 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)
1006
+ });
1007
+ }
1008
+ }
1009
+
1010
+ const signer = await connector.getSigner({
1011
+ chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
1012
+ });
1013
+ return await signer.sendTransaction(request);
677
1014
  } catch (error) {
678
1015
  if (error.code === 4001) throw new UserRejectedRequestError(error);
679
1016
  throw error;
@@ -700,4 +1037,4 @@ async function waitForTransaction(_ref) {
700
1037
  return await promise;
701
1038
  }
702
1039
 
703
- export { configureChains, connect, disconnect, erc20ABI, erc721ABI, fetchBalance, fetchBlockNumber, fetchEnsAddress, fetchEnsAvatar, fetchEnsName, fetchEnsResolver, fetchFeeData, fetchSigner, fetchToken, getAccount, getContract, getNetwork, getProvider, getWebSocketProvider, readContract, sendTransaction, signMessage, signTypedData, switchNetwork, units, waitForTransaction, watchAccount, watchBlockNumber, watchContractEvent, watchNetwork, watchProvider, watchReadContract, watchSigner, watchWebSocketProvider, writeContract };
1040
+ export { configureChains, connect, disconnect, erc20ABI, erc721ABI, fetchBalance, fetchBlockNumber, fetchEnsAddress, fetchEnsAvatar, fetchEnsName, fetchEnsResolver, fetchFeeData, fetchSigner, fetchToken, getAccount, getContract, getNetwork, getProvider, getWebSocketProvider, readContract, readContracts, sendTransaction, signMessage, signTypedData, switchNetwork, units, waitForTransaction, watchAccount, watchBlockNumber, watchContractEvent, watchNetwork, watchProvider, watchReadContract, watchReadContracts, watchSigner, watchWebSocketProvider, writeContract };