@wagmi/core 0.4.9 → 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.
- package/README.md +4 -4
- package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.dev.js +26 -24
- package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.cjs.prod.js +26 -24
- package/connectors/coinbaseWallet/dist/wagmi-core-connectors-coinbaseWallet.esm.js +3 -1
- package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.d.ts +1 -0
- package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.dev.js +200 -0
- package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.js +7 -0
- package/connectors/injected/dist/wagmi-core-connectors-injected.cjs.prod.js +200 -0
- package/connectors/injected/dist/wagmi-core-connectors-injected.esm.js +196 -0
- package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.cjs.dev.js +21 -22
- package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.cjs.prod.js +21 -22
- package/connectors/metaMask/dist/wagmi-core-connectors-metaMask.esm.js +4 -5
- package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.dev.js +30 -28
- package/connectors/mock/dist/wagmi-core-connectors-mock.cjs.prod.js +30 -28
- package/connectors/mock/dist/wagmi-core-connectors-mock.esm.js +3 -1
- package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.dev.js +22 -23
- package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.cjs.prod.js +22 -23
- package/connectors/walletConnect/dist/wagmi-core-connectors-walletConnect.esm.js +3 -4
- package/connectors/walletLink/dist/wagmi-core-connectors-walletLink.cjs.d.ts +11 -0
- package/connectors/walletLink/dist/wagmi-core-connectors-walletLink.cjs.js +16 -0
- package/dist/declarations/src/actions/accounts/fetchSigner.d.ts +3 -3
- package/dist/declarations/src/actions/contracts/index.d.ts +2 -1
- package/dist/declarations/src/actions/contracts/prepareWriteContract.d.ts +37 -0
- package/dist/declarations/src/actions/contracts/writeContract.d.ts +44 -8
- package/dist/declarations/src/actions/ens/fetchEnsAddress.d.ts +2 -1
- package/dist/declarations/src/actions/index.d.ts +2 -2
- package/dist/declarations/src/actions/transactions/index.d.ts +2 -1
- package/dist/declarations/src/actions/transactions/prepareSendTransaction.d.ts +36 -0
- package/dist/declarations/src/actions/transactions/sendTransaction.d.ts +43 -8
- package/dist/declarations/src/client.d.ts +2 -2
- package/dist/declarations/src/connectors/base.d.ts +1 -2
- package/dist/declarations/src/connectors/coinbaseWallet.d.ts +1 -1
- package/dist/declarations/src/connectors/injected.d.ts +1 -1
- package/dist/declarations/src/connectors/mock/connector.d.ts +1 -1
- package/dist/declarations/src/connectors/mock/provider.d.ts +3 -3
- package/dist/declarations/src/connectors/walletConnect.d.ts +2 -1
- package/dist/declarations/src/errors.d.ts +10 -3
- package/dist/declarations/src/index.d.ts +4 -4
- package/dist/declarations/src/providers/alchemy.d.ts +1 -2
- package/dist/declarations/src/providers/infura.d.ts +1 -2
- package/dist/declarations/src/providers/jsonRpc.d.ts +1 -2
- package/dist/declarations/src/providers/public.d.ts +2 -4
- package/dist/declarations/src/types/index.d.ts +3 -1
- package/dist/declarations/src/utils/configureChains.d.ts +3 -1
- package/dist/{client-fbdcbdb2.esm.js → getProvider-048a69c4.esm.js} +365 -2
- package/dist/{client-4983a639.cjs.dev.js → getProvider-27edfd38.cjs.prod.js} +432 -44
- package/dist/{client-dfad744f.cjs.prod.js → getProvider-ec251513.cjs.dev.js} +432 -44
- package/dist/wagmi-core.cjs.dev.js +439 -278
- package/dist/wagmi-core.cjs.prod.js +439 -278
- package/dist/wagmi-core.esm.js +353 -196
- package/package.json +2 -2
- package/providers/alchemy/dist/wagmi-core-providers-alchemy.cjs.dev.js +0 -2
- package/providers/alchemy/dist/wagmi-core-providers-alchemy.cjs.prod.js +0 -2
- package/providers/alchemy/dist/wagmi-core-providers-alchemy.esm.js +0 -2
- package/providers/infura/dist/wagmi-core-providers-infura.cjs.dev.js +0 -2
- package/providers/infura/dist/wagmi-core-providers-infura.cjs.prod.js +0 -2
- package/providers/infura/dist/wagmi-core-providers-infura.esm.js +0 -2
- package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.cjs.dev.js +0 -2
- package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.cjs.prod.js +0 -2
- package/providers/jsonRpc/dist/wagmi-core-providers-jsonRpc.esm.js +0 -2
- package/providers/public/dist/wagmi-core-providers-public.cjs.dev.js +0 -2
- package/providers/public/dist/wagmi-core-providers-public.cjs.prod.js +0 -2
- package/providers/public/dist/wagmi-core-providers-public.esm.js +0 -2
- package/dist/base-337e6424.cjs.prod.js +0 -343
- package/dist/base-bd337280.cjs.dev.js +0 -343
- package/dist/base-f1bbf263.esm.js +0 -316
package/dist/wagmi-core.esm.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { g as getClient } from './
|
|
2
|
-
export {
|
|
3
|
-
import { C as ConnectorAlreadyConnectedError, P as ProviderChainsNotFound, a as ChainDoesNotSupportMulticallError, b as ContractMethodNoResultError, c as ConnectorNotFoundError, d as ChainMismatchError, U as UserRejectedRequestError, n as normalizeChainId, S as SwitchChainNotSupportedError } from './base-f1bbf263.esm.js';
|
|
4
|
-
export { A as AddChainError, a as ChainDoesNotSupportMulticallError, d as ChainMismatchError, f as ChainNotConfiguredError, e as Connector, C as ConnectorAlreadyConnectedError, c as ConnectorNotFoundError, b as ContractMethodNoResultError, P as ProviderChainsNotFound, g as ProviderRpcError, R as ResourceUnavailableError, h as RpcError, i as SwitchChainError, S as SwitchChainNotSupportedError, U as UserRejectedRequestError, n as normalizeChainId } from './base-f1bbf263.esm.js';
|
|
1
|
+
import { g as getClient, C as ConnectorAlreadyConnectedError, a as ConnectorNotFoundError, b as ContractMethodDoesNotExistError, c as getProvider, P as ProviderChainsNotFound, d as ChainDoesNotSupportMulticallError, e as ContractMethodNoResultError, f as ChainMismatchError, U as UserRejectedRequestError, n as normalizeChainId, S as SwitchChainNotSupportedError } from './getProvider-048a69c4.esm.js';
|
|
2
|
+
export { A as AddChainError, d as ChainDoesNotSupportMulticallError, f as ChainMismatchError, k as ChainNotConfiguredError, i as Client, j as Connector, C as ConnectorAlreadyConnectedError, a as ConnectorNotFoundError, b as ContractMethodDoesNotExistError, e as ContractMethodNoResultError, I as InjectedConnector, P as ProviderChainsNotFound, l as ProviderRpcError, R as ResourceUnavailableError, m as RpcError, o as SwitchChainError, S as SwitchChainNotSupportedError, U as UserRejectedRequestError, h as createClient, p as createStorage, c as getProvider, q as noopStorage, n as normalizeChainId } from './getProvider-048a69c4.esm.js';
|
|
5
3
|
import { Contract, logger } from 'ethers/lib/ethers';
|
|
6
|
-
import { isAddress, Logger, formatUnits
|
|
4
|
+
import { getAddress, isAddress, Logger, formatUnits } from 'ethers/lib/utils';
|
|
7
5
|
import { providers, Contract as Contract$1 } from 'ethers';
|
|
8
6
|
import shallow from 'zustand/shallow';
|
|
9
7
|
export { a as alchemyRpcUrls, i as infuraRpcUrls, p as publicRpcUrls } from './rpcs-b73a8f60.esm.js';
|
|
@@ -15,6 +13,7 @@ import 'eventemitter3';
|
|
|
15
13
|
function configureChains(defaultChains, providers) {
|
|
16
14
|
let {
|
|
17
15
|
minQuorum = 1,
|
|
16
|
+
pollingInterval = 4000,
|
|
18
17
|
targetQuorum = 1,
|
|
19
18
|
stallTimeout
|
|
20
19
|
} = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
@@ -60,21 +59,27 @@ function configureChains(defaultChains, providers) {
|
|
|
60
59
|
return {
|
|
61
60
|
chains,
|
|
62
61
|
provider: _ref2 => {
|
|
63
|
-
var _defaultChains
|
|
62
|
+
var _defaultChains$;
|
|
64
63
|
|
|
65
64
|
let {
|
|
66
65
|
chainId
|
|
67
66
|
} = _ref2;
|
|
68
67
|
const activeChainId = chainId && chains.some(x => x.id === chainId) ? chainId : (_defaultChains$ = defaultChains[0]) === null || _defaultChains$ === void 0 ? void 0 : _defaultChains$.id;
|
|
69
68
|
const chainProviders = providers_[activeChainId];
|
|
70
|
-
if (!chainProviders) throw new Error("No providers configured for chain \"".concat(activeChainId, "\""));
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
69
|
+
if (!chainProviders || !chainProviders[0]) throw new Error("No providers configured for chain \"".concat(activeChainId, "\""));
|
|
70
|
+
|
|
71
|
+
if (chainProviders.length === 1) {
|
|
72
|
+
return Object.assign(chainProviders[0](), {
|
|
73
|
+
chains,
|
|
74
|
+
pollingInterval
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
74
78
|
return Object.assign(fallbackProvider(targetQuorum, minQuorum, chainProviders, {
|
|
75
79
|
stallTimeout
|
|
76
80
|
}), {
|
|
77
|
-
chains
|
|
81
|
+
chains,
|
|
82
|
+
pollingInterval
|
|
78
83
|
});
|
|
79
84
|
},
|
|
80
85
|
webSocketProvider: _ref3 => {
|
|
@@ -290,15 +295,64 @@ function getContract(_ref) {
|
|
|
290
295
|
return new Contract$1(addressOrName, contractInterface, signerOrProvider);
|
|
291
296
|
}
|
|
292
297
|
|
|
293
|
-
|
|
298
|
+
/**
|
|
299
|
+
* @description Prepares the parameters required for a contract write transaction.
|
|
300
|
+
*
|
|
301
|
+
* Returns config to be passed through to `writeContract`.
|
|
302
|
+
*
|
|
303
|
+
* @example
|
|
304
|
+
* import { prepareWriteContract, writeContract } from '@wagmi/core'
|
|
305
|
+
*
|
|
306
|
+
* const config = await prepareWriteContract({
|
|
307
|
+
* addressOrName: '0x...',
|
|
308
|
+
* contractInterface: wagmiAbi,
|
|
309
|
+
* functionName: 'mint',
|
|
310
|
+
* })
|
|
311
|
+
* const result = await writeContract(config)
|
|
312
|
+
*/
|
|
313
|
+
async function prepareWriteContract(_ref) {
|
|
294
314
|
let {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
315
|
+
addressOrName,
|
|
316
|
+
args,
|
|
317
|
+
chainId,
|
|
318
|
+
contractInterface,
|
|
319
|
+
functionName,
|
|
320
|
+
overrides,
|
|
321
|
+
signer: signer_
|
|
322
|
+
} = _ref;
|
|
323
|
+
const signer = signer_ !== null && signer_ !== void 0 ? signer_ : await fetchSigner();
|
|
324
|
+
if (!signer) throw new ConnectorNotFoundError();
|
|
325
|
+
const contract = getContract({
|
|
326
|
+
addressOrName,
|
|
327
|
+
contractInterface,
|
|
328
|
+
signerOrProvider: signer
|
|
300
329
|
});
|
|
301
|
-
|
|
330
|
+
const populateTransactionFn = contract.populateTransaction[functionName];
|
|
331
|
+
|
|
332
|
+
if (!populateTransactionFn) {
|
|
333
|
+
throw new ContractMethodDoesNotExistError({
|
|
334
|
+
addressOrName,
|
|
335
|
+
functionName
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
|
|
340
|
+
const unsignedTransaction = await populateTransactionFn(...params);
|
|
341
|
+
const gasLimit = unsignedTransaction.gasLimit || (await signer.estimateGas(unsignedTransaction));
|
|
342
|
+
return {
|
|
343
|
+
addressOrName,
|
|
344
|
+
args,
|
|
345
|
+
...(chainId ? {
|
|
346
|
+
chainId
|
|
347
|
+
} : {}),
|
|
348
|
+
contractInterface,
|
|
349
|
+
functionName,
|
|
350
|
+
overrides,
|
|
351
|
+
request: { ...unsignedTransaction,
|
|
352
|
+
gasLimit
|
|
353
|
+
},
|
|
354
|
+
mode: 'prepared'
|
|
355
|
+
};
|
|
302
356
|
}
|
|
303
357
|
|
|
304
358
|
function getWebSocketProvider() {
|
|
@@ -427,11 +481,9 @@ async function multicall(_ref) {
|
|
|
427
481
|
} = contracts[i];
|
|
428
482
|
|
|
429
483
|
if (returnData === '0x') {
|
|
430
|
-
var _chain$blockExplorers;
|
|
431
|
-
|
|
432
484
|
const err = new ContractMethodNoResultError({
|
|
433
485
|
addressOrName,
|
|
434
|
-
|
|
486
|
+
chainId: chain.id,
|
|
435
487
|
functionName
|
|
436
488
|
});
|
|
437
489
|
if (!allowFailure) throw err;
|
|
@@ -660,6 +712,221 @@ function watchReadContracts(config, callback) {
|
|
|
660
712
|
};
|
|
661
713
|
}
|
|
662
714
|
|
|
715
|
+
async function fetchEnsAddress(_ref) {
|
|
716
|
+
let {
|
|
717
|
+
chainId,
|
|
718
|
+
name
|
|
719
|
+
} = _ref;
|
|
720
|
+
const provider = getProvider({
|
|
721
|
+
chainId
|
|
722
|
+
});
|
|
723
|
+
const address = await provider.resolveName(name);
|
|
724
|
+
|
|
725
|
+
try {
|
|
726
|
+
return address ? getAddress(address) : null;
|
|
727
|
+
} catch (_error) {
|
|
728
|
+
return null;
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
async function fetchEnsAvatar(_ref) {
|
|
733
|
+
let {
|
|
734
|
+
addressOrName,
|
|
735
|
+
chainId
|
|
736
|
+
} = _ref;
|
|
737
|
+
const provider = getProvider({
|
|
738
|
+
chainId
|
|
739
|
+
}); // TODO: Update with more advanced logic
|
|
740
|
+
// https://github.com/ensdomains/ens-avatar
|
|
741
|
+
|
|
742
|
+
const avatar = await provider.getAvatar(addressOrName);
|
|
743
|
+
return avatar;
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
async function fetchEnsName(_ref) {
|
|
747
|
+
let {
|
|
748
|
+
address,
|
|
749
|
+
chainId
|
|
750
|
+
} = _ref;
|
|
751
|
+
const provider = getProvider({
|
|
752
|
+
chainId
|
|
753
|
+
});
|
|
754
|
+
return await provider.lookupAddress(address);
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
async function fetchEnsResolver(_ref) {
|
|
758
|
+
let {
|
|
759
|
+
chainId,
|
|
760
|
+
name
|
|
761
|
+
} = _ref;
|
|
762
|
+
const provider = getProvider({
|
|
763
|
+
chainId
|
|
764
|
+
});
|
|
765
|
+
const resolver = await provider.getResolver(name);
|
|
766
|
+
return resolver;
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
/**
|
|
770
|
+
* @description Prepares the parameters required for sending a transaction.
|
|
771
|
+
*
|
|
772
|
+
* Returns config to be passed through to `sendTransaction`.
|
|
773
|
+
*
|
|
774
|
+
* @example
|
|
775
|
+
* import { prepareSendTransaction, sendTransaction } from '@wagmi/core'
|
|
776
|
+
*
|
|
777
|
+
* const config = await prepareSendTransaction({
|
|
778
|
+
* request: {
|
|
779
|
+
* to: 'moxey.eth',
|
|
780
|
+
* value: parseEther('1'),
|
|
781
|
+
* }
|
|
782
|
+
* })
|
|
783
|
+
* const result = await sendTransaction(config)
|
|
784
|
+
*/
|
|
785
|
+
async function prepareSendTransaction(_ref) {
|
|
786
|
+
let {
|
|
787
|
+
chainId,
|
|
788
|
+
request,
|
|
789
|
+
signerOrProvider = getProvider()
|
|
790
|
+
} = _ref;
|
|
791
|
+
const [to, gasLimit] = await Promise.all([isAddress(request.to) ? Promise.resolve(request.to) : fetchEnsAddress({
|
|
792
|
+
name: request.to
|
|
793
|
+
}), request.gasLimit ? Promise.resolve(request.gasLimit) : signerOrProvider.estimateGas(request)]);
|
|
794
|
+
if (!to) throw new Error('Could not resolve ENS name');
|
|
795
|
+
return { ...(chainId ? {
|
|
796
|
+
chainId
|
|
797
|
+
} : {}),
|
|
798
|
+
request: { ...request,
|
|
799
|
+
gasLimit,
|
|
800
|
+
to
|
|
801
|
+
},
|
|
802
|
+
mode: 'prepared'
|
|
803
|
+
};
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
/**
|
|
807
|
+
* @description Function to send a transaction.
|
|
808
|
+
*
|
|
809
|
+
* It is recommended to pair this with the `prepareSendTransaction` function to avoid
|
|
810
|
+
* [UX pitfalls](https://wagmi.sh/docs/prepare-hooks/intro#ux-pitfalls-without-prepare-hooks).
|
|
811
|
+
*
|
|
812
|
+
* @example
|
|
813
|
+
* import { prepareSendTransaction, sendTransaction } from '@wagmi/core'
|
|
814
|
+
*
|
|
815
|
+
* const config = await prepareSendTransaction({
|
|
816
|
+
* to: 'moxey.eth',
|
|
817
|
+
* value: parseEther('1'),
|
|
818
|
+
* })
|
|
819
|
+
* const result = await sendTransaction(config)
|
|
820
|
+
*/
|
|
821
|
+
async function sendTransaction(_ref) {
|
|
822
|
+
let {
|
|
823
|
+
chainId,
|
|
824
|
+
mode,
|
|
825
|
+
request
|
|
826
|
+
} = _ref;
|
|
827
|
+
|
|
828
|
+
/********************************************************************/
|
|
829
|
+
|
|
830
|
+
/** START: iOS App Link cautious code. */
|
|
831
|
+
|
|
832
|
+
/** Do not perform any async operations in this block. */
|
|
833
|
+
|
|
834
|
+
/** Ref: wagmi.sh/docs/prepare-hooks/intro#ios-app-link-constraints */
|
|
835
|
+
|
|
836
|
+
/********************************************************************/
|
|
837
|
+
// `fetchSigner` isn't really "asynchronous" as we have already
|
|
838
|
+
// initialized the provider upon user connection, so it will return
|
|
839
|
+
// immediately.
|
|
840
|
+
const signer = await fetchSigner();
|
|
841
|
+
if (!signer) throw new ConnectorNotFoundError();
|
|
842
|
+
|
|
843
|
+
if (mode === 'prepared') {
|
|
844
|
+
if (!request.gasLimit) throw new Error('`gasLimit` is required');
|
|
845
|
+
if (!request.to) throw new Error('`to` is required');
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
const {
|
|
849
|
+
chain: activeChain,
|
|
850
|
+
chains
|
|
851
|
+
} = getNetwork();
|
|
852
|
+
const activeChainId = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id;
|
|
853
|
+
|
|
854
|
+
if (chainId && chainId !== (activeChain === null || activeChain === void 0 ? void 0 : activeChain.id)) {
|
|
855
|
+
var _chains$find$name, _chains$find, _chains$find$name2, _chains$find2;
|
|
856
|
+
|
|
857
|
+
throw new ChainMismatchError({
|
|
858
|
+
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),
|
|
859
|
+
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)
|
|
860
|
+
});
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
try {
|
|
864
|
+
// Why don't we just use `signer.sendTransaction`?
|
|
865
|
+
// The `signer.sendTransaction` method performs async
|
|
866
|
+
// heavy operations (such as fetching block number)
|
|
867
|
+
// which is not really needed for our case.
|
|
868
|
+
// Having async heavy operations has side effects
|
|
869
|
+
// when using it in a click handler (iOS deep linking issues,
|
|
870
|
+
// delay to open wallet, etc).
|
|
871
|
+
const uncheckedSigner = signer.connectUnchecked();
|
|
872
|
+
const {
|
|
873
|
+
hash,
|
|
874
|
+
wait
|
|
875
|
+
} = await uncheckedSigner.sendTransaction(request);
|
|
876
|
+
/********************************************************************/
|
|
877
|
+
|
|
878
|
+
/** END: iOS App Link cautious code. */
|
|
879
|
+
|
|
880
|
+
/** Go nuts! */
|
|
881
|
+
|
|
882
|
+
/********************************************************************/
|
|
883
|
+
|
|
884
|
+
return {
|
|
885
|
+
hash,
|
|
886
|
+
wait
|
|
887
|
+
};
|
|
888
|
+
} catch (error) {
|
|
889
|
+
if (error.code === 4001) throw new UserRejectedRequestError(error);
|
|
890
|
+
throw error;
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
async function waitForTransaction(_ref) {
|
|
895
|
+
let {
|
|
896
|
+
chainId,
|
|
897
|
+
confirmations,
|
|
898
|
+
hash,
|
|
899
|
+
timeout,
|
|
900
|
+
wait: wait_
|
|
901
|
+
} = _ref;
|
|
902
|
+
let promise;
|
|
903
|
+
|
|
904
|
+
if (hash) {
|
|
905
|
+
const provider = getProvider({
|
|
906
|
+
chainId
|
|
907
|
+
});
|
|
908
|
+
promise = provider.waitForTransaction(hash, confirmations, timeout);
|
|
909
|
+
} else if (wait_) promise = wait_(confirmations);else throw new Error('hash or wait is required');
|
|
910
|
+
|
|
911
|
+
return await promise;
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
/**
|
|
915
|
+
* @description Function to call a contract write method.
|
|
916
|
+
*
|
|
917
|
+
* It is recommended to pair this with the {@link prepareWriteContract} function
|
|
918
|
+
* to avoid [UX pitfalls](https://wagmi.sh/docs/prepare-hooks/intro#ux-pitfalls-without-prepare-hooks).
|
|
919
|
+
*
|
|
920
|
+
* @example
|
|
921
|
+
* import { prepareWriteContract, writeContract } from '@wagmi/core'
|
|
922
|
+
*
|
|
923
|
+
* const config = await prepareWriteContract({
|
|
924
|
+
* addressOrName: '0x...',
|
|
925
|
+
* contractInterface: wagmiAbi,
|
|
926
|
+
* functionName: 'mint',
|
|
927
|
+
* })
|
|
928
|
+
* const result = await writeContract(config)
|
|
929
|
+
*/
|
|
663
930
|
async function writeContract(_ref) {
|
|
664
931
|
let {
|
|
665
932
|
addressOrName,
|
|
@@ -667,49 +934,61 @@ async function writeContract(_ref) {
|
|
|
667
934
|
chainId,
|
|
668
935
|
contractInterface,
|
|
669
936
|
functionName,
|
|
937
|
+
mode,
|
|
670
938
|
overrides,
|
|
671
|
-
|
|
939
|
+
request: request_
|
|
672
940
|
} = _ref;
|
|
673
|
-
const {
|
|
674
|
-
connector
|
|
675
|
-
} = getClient();
|
|
676
|
-
if (!connector) throw new ConnectorNotFoundError();
|
|
677
|
-
const params = [...(Array.isArray(args) ? args : args ? [args] : []), ...(overrides ? [overrides] : [])];
|
|
678
941
|
|
|
679
|
-
|
|
680
|
-
var _chain;
|
|
942
|
+
/********************************************************************/
|
|
681
943
|
|
|
682
|
-
|
|
944
|
+
/** START: iOS App Link cautious code. */
|
|
683
945
|
|
|
684
|
-
|
|
685
|
-
const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
|
|
946
|
+
/** Do not perform any async operations in this block. */
|
|
686
947
|
|
|
687
|
-
|
|
688
|
-
var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
|
|
948
|
+
/** Ref: wagmi.sh/docs/prepare-hooks/intro#ios-app-link-constraints */
|
|
689
949
|
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
950
|
+
/********************************************************************/
|
|
951
|
+
const signer = await fetchSigner();
|
|
952
|
+
if (!signer) throw new ConnectorNotFoundError();
|
|
953
|
+
const {
|
|
954
|
+
chain: activeChain,
|
|
955
|
+
chains
|
|
956
|
+
} = getNetwork();
|
|
957
|
+
const activeChainId = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id;
|
|
696
958
|
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
signerOrProvider
|
|
959
|
+
if (chainId && chainId !== activeChainId) {
|
|
960
|
+
var _chains$find$name, _chains$find, _chains$find$name2, _chains$find2;
|
|
961
|
+
|
|
962
|
+
throw new ChainMismatchError({
|
|
963
|
+
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),
|
|
964
|
+
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)
|
|
704
965
|
});
|
|
705
|
-
const contractWithSigner = contract.connect(signer);
|
|
706
|
-
const contractFunction = contractWithSigner[functionName];
|
|
707
|
-
if (!contractFunction) console.warn("\"".concat(functionName, "\" does not exist in interface for contract \"").concat(addressOrName, "\""));
|
|
708
|
-
return await contractFunction(...params);
|
|
709
|
-
} catch (error) {
|
|
710
|
-
if (error.code === 4001) throw new UserRejectedRequestError(error);
|
|
711
|
-
throw error;
|
|
712
966
|
}
|
|
967
|
+
|
|
968
|
+
if (mode === 'prepared') {
|
|
969
|
+
if (!request_) throw new Error('`request` is required');
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
const request = mode === 'dangerouslyUnprepared' ? (await prepareWriteContract({
|
|
973
|
+
addressOrName,
|
|
974
|
+
args,
|
|
975
|
+
contractInterface,
|
|
976
|
+
functionName,
|
|
977
|
+
overrides
|
|
978
|
+
})).request : request_;
|
|
979
|
+
const transaction = await sendTransaction({
|
|
980
|
+
request,
|
|
981
|
+
mode: 'prepared'
|
|
982
|
+
});
|
|
983
|
+
/********************************************************************/
|
|
984
|
+
|
|
985
|
+
/** END: iOS App Link cautious code. */
|
|
986
|
+
|
|
987
|
+
/** Go nuts! */
|
|
988
|
+
|
|
989
|
+
/********************************************************************/
|
|
990
|
+
|
|
991
|
+
return transaction;
|
|
713
992
|
}
|
|
714
993
|
|
|
715
994
|
async function fetchBalance(_ref) {
|
|
@@ -876,42 +1155,32 @@ async function signTypedData(_ref) {
|
|
|
876
1155
|
types,
|
|
877
1156
|
value
|
|
878
1157
|
} = _ref;
|
|
1158
|
+
const signer = await fetchSigner();
|
|
1159
|
+
if (!signer) throw new ConnectorNotFoundError();
|
|
879
1160
|
const {
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
const {
|
|
888
|
-
chainId
|
|
889
|
-
} = domain;
|
|
890
|
-
let chain;
|
|
1161
|
+
chain: activeChain,
|
|
1162
|
+
chains
|
|
1163
|
+
} = getNetwork();
|
|
1164
|
+
const {
|
|
1165
|
+
chainId: chainId_
|
|
1166
|
+
} = domain;
|
|
891
1167
|
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
1168
|
+
if (chainId_) {
|
|
1169
|
+
const chainId = normalizeChainId(chainId_);
|
|
1170
|
+
const activeChainId = activeChain === null || activeChain === void 0 ? void 0 : activeChain.id;
|
|
895
1171
|
|
|
896
|
-
|
|
897
|
-
|
|
1172
|
+
if (chainId !== (activeChain === null || activeChain === void 0 ? void 0 : activeChain.id)) {
|
|
1173
|
+
var _chains$find$name, _chains$find, _chains$find$name2, _chains$find2;
|
|
898
1174
|
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
}
|
|
1175
|
+
throw new ChainMismatchError({
|
|
1176
|
+
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),
|
|
1177
|
+
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)
|
|
1178
|
+
});
|
|
904
1179
|
}
|
|
1180
|
+
} // Method name may be changed in the future, see https://docs.ethers.io/v5/api/signer/#Signer-signTypedData
|
|
905
1181
|
|
|
906
|
-
const signer = await connector.getSigner({
|
|
907
|
-
chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
|
|
908
|
-
}); // Method name may be changed in the future, see https://docs.ethers.io/v5/api/signer/#Signer-signTypedData
|
|
909
1182
|
|
|
910
|
-
|
|
911
|
-
} catch (error) {
|
|
912
|
-
if (error.code === 4001) throw new UserRejectedRequestError(error);
|
|
913
|
-
throw error;
|
|
914
|
-
}
|
|
1183
|
+
return await signer._signTypedData(domain, types, value);
|
|
915
1184
|
}
|
|
916
1185
|
|
|
917
1186
|
async function switchNetwork(_ref) {
|
|
@@ -1001,60 +1270,6 @@ function watchSigner(callback) {
|
|
|
1001
1270
|
return unsubscribe;
|
|
1002
1271
|
}
|
|
1003
1272
|
|
|
1004
|
-
async function fetchEnsAddress(_ref) {
|
|
1005
|
-
let {
|
|
1006
|
-
chainId,
|
|
1007
|
-
name
|
|
1008
|
-
} = _ref;
|
|
1009
|
-
const provider = getProvider({
|
|
1010
|
-
chainId
|
|
1011
|
-
});
|
|
1012
|
-
const address = await provider.resolveName(name);
|
|
1013
|
-
|
|
1014
|
-
try {
|
|
1015
|
-
return address ? getAddress(address) : null;
|
|
1016
|
-
} catch (_error) {
|
|
1017
|
-
return null;
|
|
1018
|
-
}
|
|
1019
|
-
}
|
|
1020
|
-
|
|
1021
|
-
async function fetchEnsAvatar(_ref) {
|
|
1022
|
-
let {
|
|
1023
|
-
addressOrName,
|
|
1024
|
-
chainId
|
|
1025
|
-
} = _ref;
|
|
1026
|
-
const provider = getProvider({
|
|
1027
|
-
chainId
|
|
1028
|
-
}); // TODO: Update with more advanced logic
|
|
1029
|
-
// https://github.com/ensdomains/ens-avatar
|
|
1030
|
-
|
|
1031
|
-
const avatar = await provider.getAvatar(addressOrName);
|
|
1032
|
-
return avatar;
|
|
1033
|
-
}
|
|
1034
|
-
|
|
1035
|
-
async function fetchEnsName(_ref) {
|
|
1036
|
-
let {
|
|
1037
|
-
address,
|
|
1038
|
-
chainId
|
|
1039
|
-
} = _ref;
|
|
1040
|
-
const provider = getProvider({
|
|
1041
|
-
chainId
|
|
1042
|
-
});
|
|
1043
|
-
return await provider.lookupAddress(address);
|
|
1044
|
-
}
|
|
1045
|
-
|
|
1046
|
-
async function fetchEnsResolver(_ref) {
|
|
1047
|
-
let {
|
|
1048
|
-
chainId,
|
|
1049
|
-
name
|
|
1050
|
-
} = _ref;
|
|
1051
|
-
const provider = getProvider({
|
|
1052
|
-
chainId
|
|
1053
|
-
});
|
|
1054
|
-
const resolver = await provider.getResolver(name);
|
|
1055
|
-
return resolver;
|
|
1056
|
-
}
|
|
1057
|
-
|
|
1058
1273
|
async function fetchFeeData() {
|
|
1059
1274
|
let {
|
|
1060
1275
|
chainId,
|
|
@@ -1109,62 +1324,4 @@ async function fetchToken(_ref) {
|
|
|
1109
1324
|
};
|
|
1110
1325
|
}
|
|
1111
1326
|
|
|
1112
|
-
|
|
1113
|
-
let {
|
|
1114
|
-
chainId,
|
|
1115
|
-
request
|
|
1116
|
-
} = _ref;
|
|
1117
|
-
const {
|
|
1118
|
-
connector
|
|
1119
|
-
} = getClient();
|
|
1120
|
-
if (!connector) throw new ConnectorNotFoundError();
|
|
1121
|
-
|
|
1122
|
-
try {
|
|
1123
|
-
var _chain;
|
|
1124
|
-
|
|
1125
|
-
let chain;
|
|
1126
|
-
|
|
1127
|
-
if (chainId) {
|
|
1128
|
-
const activeChainId = await connector.getChainId(); // Try to switch chain to provided `chainId`
|
|
1129
|
-
|
|
1130
|
-
if (chainId !== activeChainId) {
|
|
1131
|
-
var _connector$chains$fin, _connector$chains$fin2, _connector$chains$fin3, _connector$chains$fin4;
|
|
1132
|
-
|
|
1133
|
-
if (connector.switchChain) chain = await connector.switchChain(chainId);else throw new ChainMismatchError({
|
|
1134
|
-
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),
|
|
1135
|
-
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)
|
|
1136
|
-
});
|
|
1137
|
-
}
|
|
1138
|
-
}
|
|
1139
|
-
|
|
1140
|
-
const signer = await connector.getSigner({
|
|
1141
|
-
chainId: (_chain = chain) === null || _chain === void 0 ? void 0 : _chain.id
|
|
1142
|
-
});
|
|
1143
|
-
return await signer.sendTransaction(request);
|
|
1144
|
-
} catch (error) {
|
|
1145
|
-
if (error.code === 4001) throw new UserRejectedRequestError(error);
|
|
1146
|
-
throw error;
|
|
1147
|
-
}
|
|
1148
|
-
}
|
|
1149
|
-
|
|
1150
|
-
async function waitForTransaction(_ref) {
|
|
1151
|
-
let {
|
|
1152
|
-
chainId,
|
|
1153
|
-
confirmations,
|
|
1154
|
-
hash,
|
|
1155
|
-
timeout,
|
|
1156
|
-
wait: wait_
|
|
1157
|
-
} = _ref;
|
|
1158
|
-
let promise;
|
|
1159
|
-
|
|
1160
|
-
if (hash) {
|
|
1161
|
-
const provider = getProvider({
|
|
1162
|
-
chainId
|
|
1163
|
-
});
|
|
1164
|
-
promise = provider.waitForTransaction(hash, confirmations, timeout);
|
|
1165
|
-
} else if (wait_) promise = wait_(confirmations);else throw new Error('hash or wait is required');
|
|
1166
|
-
|
|
1167
|
-
return await promise;
|
|
1168
|
-
}
|
|
1169
|
-
|
|
1170
|
-
export { configureChains, connect, deepEqual, disconnect, erc20ABI, erc721ABI, fetchBalance, fetchBlockNumber, fetchEnsAddress, fetchEnsAvatar, fetchEnsName, fetchEnsResolver, fetchFeeData, fetchSigner, fetchToken, getAccount, getContract, getNetwork, getProvider, getWebSocketProvider, parseContractResult, readContract, readContracts, sendTransaction, signMessage, signTypedData, switchNetwork, units, waitForTransaction, watchAccount, watchBlockNumber, watchContractEvent, watchNetwork, watchProvider, watchReadContract, watchReadContracts, watchSigner, watchWebSocketProvider, writeContract };
|
|
1327
|
+
export { configureChains, connect, deepEqual, disconnect, erc20ABI, erc721ABI, fetchBalance, fetchBlockNumber, fetchEnsAddress, fetchEnsAvatar, fetchEnsName, fetchEnsResolver, fetchFeeData, fetchSigner, fetchToken, getAccount, getContract, getNetwork, getWebSocketProvider, parseContractResult, prepareSendTransaction, prepareWriteContract, readContract, readContracts, sendTransaction, signMessage, signTypedData, switchNetwork, units, waitForTransaction, watchAccount, watchBlockNumber, watchContractEvent, watchNetwork, watchProvider, watchReadContract, watchReadContracts, watchSigner, watchWebSocketProvider, writeContract };
|
package/package.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"name": "@wagmi/core",
|
|
3
3
|
"description": "Vanilla JS library for Ethereum",
|
|
4
4
|
"license": "WAGMIT",
|
|
5
|
-
"version": "0.
|
|
6
|
-
"repository": "
|
|
5
|
+
"version": "0.5.0-prepare-hooks.0",
|
|
6
|
+
"repository": "wagmi-dev/wagmi",
|
|
7
7
|
"author": "awkweb.eth",
|
|
8
8
|
"ethereum": "awkweb.eth",
|
|
9
9
|
"funding": [
|
|
@@ -8,7 +8,6 @@ var rpcs = require('../../../dist/rpcs-f1d24f0e.cjs.dev.js');
|
|
|
8
8
|
function alchemyProvider() {
|
|
9
9
|
let {
|
|
10
10
|
alchemyId = rpcs.defaultAlchemyId,
|
|
11
|
-
pollingInterval,
|
|
12
11
|
priority,
|
|
13
12
|
stallTimeout,
|
|
14
13
|
weight
|
|
@@ -23,7 +22,6 @@ function alchemyProvider() {
|
|
|
23
22
|
},
|
|
24
23
|
provider: () => {
|
|
25
24
|
const provider = new ethers.providers.AlchemyProvider(chain.id, alchemyId);
|
|
26
|
-
if (pollingInterval) provider.pollingInterval = pollingInterval;
|
|
27
25
|
return Object.assign(provider, {
|
|
28
26
|
priority,
|
|
29
27
|
stallTimeout,
|
|
@@ -8,7 +8,6 @@ var rpcs = require('../../../dist/rpcs-1fd0a12f.cjs.prod.js');
|
|
|
8
8
|
function alchemyProvider() {
|
|
9
9
|
let {
|
|
10
10
|
alchemyId = rpcs.defaultAlchemyId,
|
|
11
|
-
pollingInterval,
|
|
12
11
|
priority,
|
|
13
12
|
stallTimeout,
|
|
14
13
|
weight
|
|
@@ -23,7 +22,6 @@ function alchemyProvider() {
|
|
|
23
22
|
},
|
|
24
23
|
provider: () => {
|
|
25
24
|
const provider = new ethers.providers.AlchemyProvider(chain.id, alchemyId);
|
|
26
|
-
if (pollingInterval) provider.pollingInterval = pollingInterval;
|
|
27
25
|
return Object.assign(provider, {
|
|
28
26
|
priority,
|
|
29
27
|
stallTimeout,
|