Skip to content
This repository was archived by the owner on Jun 7, 2024. It is now read-only.

Commit 8004b81

Browse files
committed
#46 fixes and autconnect to burner with an option
1 parent 85ec7db commit 8004b81

File tree

8 files changed

+54
-17
lines changed

8 files changed

+54
-17
lines changed

packages/vite-app-ts/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
"stream-browserify": "^3.0.0",
6767
"tailwindcss": "^2.2.17",
6868
"timers-browserify": "^2.0.12",
69-
"tiny-invariant": "^1.1.0",
69+
"ts-invariant": "^0.9.4",
7070
"use-debounce": "^7.0.0",
7171
"walletlink": "^2.1.11",
7272
"web3modal": "^1.9.1"

packages/vite-app-ts/src/MainPage.tsx

+2-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { useBurnerFallback } from '~~/components/main/hooks/useBurnerFallback';
1515
import { useScaffoldHooksExamples as useScaffoldHooksExamples } from './components/main/hooks/useScaffoldHooksExamples';
1616
import { useEthersContext } from 'eth-hooks/context';
1717
import { NETWORKS } from '~~/models/constants/networks';
18-
import { mainnetProvider } from '~~/config/providersConfig';
18+
import { const_UseBurnerWalletAsFallback, mainnetProvider } from '~~/config/providersConfig';
1919
import {
2020
useAppContracts,
2121
useAppContractsActions,
@@ -25,8 +25,6 @@ import {
2525
import { asEthersAdaptor } from 'eth-hooks/functions';
2626
import { subgraphUri } from '~~/config/subgraphConfig';
2727

28-
const DEBUG = false;
29-
3028
export const Main: FC = () => {
3129
// -----------------------------
3230
// Providers, signers & wallets
@@ -39,7 +37,7 @@ export const Main: FC = () => {
3937
const ethersContext = useEthersContext();
4038

4139
// if no user is found use a burner wallet on localhost as fallback if enabled
42-
useBurnerFallback(scaffoldAppProviders, true);
40+
useBurnerFallback(scaffoldAppProviders, const_UseBurnerWalletAsFallback);
4341

4442
// -----------------------------
4543
// Load Contracts

packages/vite-app-ts/src/components/main/hooks/useScaffoldAppProviders.ts

+35-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
import { StaticJsonRpcProvider } from '@ethersproject/providers';
22
import input from 'antd/lib/input';
33
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';
55
import { ICoreOptions } from 'web3modal';
6-
import { EthersModalConnector, useEthersContext } from 'eth-hooks/context';
6+
import { EthersModalConnector, TEthersModalConnector, useEthersContext } from 'eth-hooks/context';
77
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';
914
import { useEthersAdaptorFromProviderOrSigners } from 'eth-hooks';
15+
import { web3ModalConfigKeys } from '~~/config/web3ModalConfig';
16+
import invariant from 'ts-invariant';
1017

1118
export interface IScaffoldAppProviders {
1219
currentProvider: TEthersProvider | undefined;
@@ -22,6 +29,8 @@ export const useScaffoldProviders = (): IScaffoldAppProviders => {
2229
const [mainnetAdaptor] = useEthersAdaptorFromProviderOrSigners(mainnetProvider);
2330
const [localAdaptor] = useEthersAdaptorFromProviderOrSigners(localProvider);
2431

32+
const firstLoadRef = useRef(true);
33+
2534
useEffect(() => {
2635
// import async to split bundles
2736
const importedConfig = import('../../../config/web3ModalConfig');
@@ -38,7 +47,7 @@ export const useScaffoldProviders = (): IScaffoldAppProviders => {
3847
const createLoginConnector: TCreateEthersModalConnector = useCallback(
3948
(id?: string) => {
4049
if (web3Config) {
41-
const connector = new EthersModalConnector(
50+
let connector = new EthersModalConnector(
4251
{ ...web3Config, theme: currentTheme },
4352
{ reloadOnNetworkChange: false, immutableProvider: false },
4453
id
@@ -50,8 +59,29 @@ export const useScaffoldProviders = (): IScaffoldAppProviders => {
5059
);
5160

5261
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+
5382
if (!ethersContext.active && createLoginConnector) {
54-
const connector = createLoginConnector();
83+
let connector = createLoginConnector(undefined);
84+
connector = autoConnectToBurner(connector);
5585
if (connector) ethersContext.activate(connector);
5686
}
5787
}, [web3Config]);

packages/vite-app-ts/src/components/main/hooks/useScaffoldHooksExamples.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import { useContext, useEffect } from 'react';
22
import { ethers } from 'ethers';
33
import { IScaffoldAppProviders } from '~~/components/main/hooks/useScaffoldAppProviders';
4-
import { DEBUG } from '../../../MainPage';
54
import { useBalance, useBlockNumber, useContractReader, useGasPrice, useSignerAddress } from 'eth-hooks';
65

76
import { useEthersContext } from 'eth-hooks/context';
8-
import { getNetworkInfo } from '~~/helpers';
97
import { transactor } from 'eth-components/functions';
108
import { EthComponentsSettingsContext } from 'eth-components/models';
119
import { parseEther } from '@ethersproject/units';
1210
import { config } from 'process';
1311
import { NETWORKS } from '~~/models/constants/networks';
1412
import { useAppContracts } from '~~/config/contractContext';
13+
import { getNetworkInfo } from '~~/functions';
14+
import { DEBUG } from '~~/config/debug';
1515

1616
/**
1717
* Logs to console current app state. Shows you examples on how to use hooks!
@@ -51,7 +51,7 @@ export const useScaffoldHooksExamples = (scaffoldAppProviders: IScaffoldAppProvi
5151
// ---------------------
5252
// 📛 call ens
5353
// ---------------------
54-
// const addressFromENS = useEnsResolveName(scaffoldAppProviders.mainnetProvider, 'austingriffith.eth');
54+
// const [addressFromENS] = useEnsResolveName(scaffoldAppProviders.mainnetProvider, 'austingriffith.eth');
5555
// console.log('🏷 Resolved austingriffith.eth as:', addressFromENS);
5656

5757
// ---------------------
+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const DEBUG = false;

packages/vite-app-ts/src/config/providersConfig.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import { StaticJsonRpcProvider } from '@ethersproject/providers';
22
import { TEthersProvider, TNetworkInfo } from 'eth-hooks/models';
3+
import { DEBUG } from '~~/config/debug';
34
import { INFURA_ID } from '~~/models/constants/constants';
45
import { NETWORKS } from '~~/models/constants/networks';
56

7+
export const const_UseBurnerWalletAsFallback = true;
8+
export const const_ConnectToBurnerOnFirstLoad = true;
9+
610
// 😬 Sorry for all the console logging
7-
const DEBUG = true;
811
// -------------------
912
// useful overview: https://docs.ethers.io/v5/api-keys/
1013
// -------------------

packages/vite-app-ts/src/config/web3ModalConfig.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ import Web3Modal, { ICoreOptions } from 'web3modal';
22
import { INFURA_ID } from '~~/models/constants/constants';
33
import { localNetworkInfo } from '~~/config/providersConfig';
44

5+
export const web3ModalConfigKeys = {
6+
coinbaseKey: 'custom-walletlink',
7+
localhostKey: 'custom-localhost',
8+
} as const;
9+
510
export const getWeb3ModalConfig = async (): Promise<Partial<ICoreOptions>> => {
611
const Portis = (await import('@portis/web3')).default;
712
const Fortmatic = (await import('fortmatic')).default;
@@ -105,13 +110,13 @@ export const getWeb3ModalConfig = async (): Promise<Partial<ICoreOptions>> => {
105110
cacheProvider: true,
106111
theme: 'light',
107112
providerOptions: {
108-
'custom-localhost': localhostStaticConnector,
113+
[web3ModalConfigKeys.localhostKey]: localhostStaticConnector,
109114
walletconnect: walletConnectEthereum,
110115
portis: portis,
111116
fortmatic: formatic,
112117
//torus: torus,
113118
authereum: authereum,
114-
'custom-walletlink': coinbaseWalletLink,
119+
[web3ModalConfigKeys.coinbaseKey]: coinbaseWalletLink,
115120
},
116121
};
117122
};

yarn.lock

+1-1
Original file line numberDiff line numberDiff line change
@@ -2363,7 +2363,7 @@ __metadata:
23632363
tailwindcss: ^2.2.17
23642364
tailwindcss-elevation: ^1.0.1
23652365
timers-browserify: ^2.0.12
2366-
tiny-invariant: ^1.1.0
2366+
ts-invariant: ^0.9.4
23672367
ts-node: ^10.3.0
23682368
twin.macro: ^2.8.0
23692369
typescript: ^4.3.4

0 commit comments

Comments
 (0)