1
1
import { StaticJsonRpcProvider } from '@ethersproject/providers' ;
2
2
import input from 'antd/lib/input' ;
3
3
import { TCreateEthersModalConnector , TEthersAdaptor , TEthersProvider , TNetworkInfo } from 'eth-hooks/models' ;
4
- import { useCallback , useEffect , useMemo , useState } from 'react' ;
4
+ import { useCallback , useEffect , useMemo , useRef , useState } from 'react' ;
5
5
import { ICoreOptions } from 'web3modal' ;
6
- import { EthersModalConnector , useEthersContext } from 'eth-hooks/context' ;
6
+ import { EthersModalConnector , TEthersModalConnector , useEthersContext } from 'eth-hooks/context' ;
7
7
import { useThemeSwitcher } from 'react-css-theme-switcher' ;
8
- import { mainnetProvider , localProvider , targetNetworkInfo } from '~~/config/providersConfig' ;
8
+ import {
9
+ mainnetProvider ,
10
+ localProvider ,
11
+ targetNetworkInfo ,
12
+ const_ConnectToBurnerOnFirstLoad ,
13
+ } from '~~/config/providersConfig' ;
9
14
import { useEthersAdaptorFromProviderOrSigners } from 'eth-hooks' ;
15
+ import { web3ModalConfigKeys } from '~~/config/web3ModalConfig' ;
16
+ import invariant from 'ts-invariant' ;
10
17
11
18
export interface IScaffoldAppProviders {
12
19
currentProvider : TEthersProvider | undefined ;
@@ -22,6 +29,8 @@ export const useScaffoldProviders = (): IScaffoldAppProviders => {
22
29
const [ mainnetAdaptor ] = useEthersAdaptorFromProviderOrSigners ( mainnetProvider ) ;
23
30
const [ localAdaptor ] = useEthersAdaptorFromProviderOrSigners ( localProvider ) ;
24
31
32
+ const firstLoadRef = useRef ( true ) ;
33
+
25
34
useEffect ( ( ) => {
26
35
// import async to split bundles
27
36
const importedConfig = import ( '../../../config/web3ModalConfig' ) ;
@@ -38,7 +47,7 @@ export const useScaffoldProviders = (): IScaffoldAppProviders => {
38
47
const createLoginConnector : TCreateEthersModalConnector = useCallback (
39
48
( id ?: string ) => {
40
49
if ( web3Config ) {
41
- const connector = new EthersModalConnector (
50
+ let connector = new EthersModalConnector (
42
51
{ ...web3Config , theme : currentTheme } ,
43
52
{ reloadOnNetworkChange : false , immutableProvider : false } ,
44
53
id
@@ -50,8 +59,29 @@ export const useScaffoldProviders = (): IScaffoldAppProviders => {
50
59
) ;
51
60
52
61
useEffect ( ( ) => {
62
+ /**
63
+ * This is for to auto connect to the burner wallet when there is no cached provier
64
+ * you can turn it off by settting {@link const_ConnectToBurnerOnFirstLoad} to false
65
+ * @param connector
66
+ * @returns
67
+ */
68
+ const autoConnectToBurner = ( connector : TEthersModalConnector | undefined ) => {
69
+ if ( const_ConnectToBurnerOnFirstLoad && connector ) {
70
+ ( connector as EthersModalConnector ) . loadCore ( ) ;
71
+ if ( connector != null && ! connector . hasCachedProvider ( ) ) {
72
+ connector = new EthersModalConnector (
73
+ { ...web3Config , theme : currentTheme } ,
74
+ { reloadOnNetworkChange : false , immutableProvider : false } ,
75
+ web3ModalConfigKeys . localhostKey
76
+ ) ;
77
+ }
78
+ }
79
+ return connector ;
80
+ } ;
81
+
53
82
if ( ! ethersContext . active && createLoginConnector ) {
54
- const connector = createLoginConnector ( ) ;
83
+ let connector = createLoginConnector ( undefined ) ;
84
+ connector = autoConnectToBurner ( connector ) ;
55
85
if ( connector ) ethersContext . activate ( connector ) ;
56
86
}
57
87
} , [ web3Config ] ) ;
0 commit comments