2022-06-07 22:08:40 +00:00
|
|
|
import { AsyncRenderer, Button, Splash } from '@vegaprotocol/ui-toolkit';
|
|
|
|
import {
|
|
|
|
Web3Provider,
|
|
|
|
Web3ConnectDialog,
|
|
|
|
useEthereumConfig,
|
|
|
|
} from '@vegaprotocol/web3';
|
2022-03-25 07:44:10 +00:00
|
|
|
import { useWeb3React } from '@web3-react/core';
|
2022-03-30 09:49:48 +00:00
|
|
|
import type { ReactNode } from 'react';
|
2022-06-13 14:39:17 +00:00
|
|
|
import { useEffect, useState, useMemo } from 'react';
|
Feat/103 deposits (#143)
* add web3 provider using web3-react package
* add env setup, add guard for incorrect chain id
* add lib for web3-provider
* make wallet and ethereum connect dialogs look more consistent
* add setup tests file for jest-dom
* remove chain id config and just use appChainId prop, add disconnect button to invalid chainId state
* switch handling of connect dialog state to the consuming app
* rename web3-provider package to just web3
* envs for each environment so we can specify chainId
* make web3container enforce connection before rendering childen
* add web3 provider using web3-react package
* make web3container enforce connection before rendering childen
* add container for getting network params
* Move ethereum config query to web3 container
* add basic deposit form elements
* add queries required for deposits, add asset default
* add bridge contract and deposit transaction
* break txhash
* restrict etherscan link props, use etherscan link in transaction dialogs
* use smart-contracts-sdk
* split hooks and components into different files, fix find deposit logic, add styles and progress for tx dialogs
* fix text colors for dark mode
* improve tx dialogs, rename deposit query
* position use buttons, fix select validation
* fix type errors after not being in strict mode, add allowance checking
* add deposit-limits component, fix types now that strict mode is enabled
* make contract hooks have a single instance
* split out dialogs into separate files, fix icon alignment
* improve error types for use transaction hook, add number save min and max for the amount input
* add validation for ethereum and vega addresses
* add unit test for deposit form component
* add icons and shared dialog styles so it better matches order transaction dialog
* fix underline class, reset finalized deposit
* fix type imports, use i18n function, regen types
* only pass contract address to token contract hook
* add vega env, refactor so retrieving asset contract address logic isn't duplicated
* add faucet functionality, combine dialogs into single transaction-dialog
* combine rendering logic into single func of transaction dialog, rever contract hooks to just useMemo
* use to field rather than connected key
* fix props and imports in deposit form test
* share faucetable condition, pass it to token contract
* pass contracts in as params to hooks to avoid multiple contract instances
* refetch balance in wallet after deposit, add comments
* use hook state for tracking deposit via partyid, add test for use ethereum transaction hook
* add deposits lib
* add last smart contract sdk package
* fix asset import in test
* tidy up ts-ignores
* pass arg for faucetable token contract
* add provider url to env vars and use in place of infura id, also update web3-connector to only allow the chain permitted by the app
* add type guard for erc20 assets
* fix intent shadow helper function, use arrow function for isEthereumError
* update etherscan link to use env vars for url base
* rename deposit related hooks to indicate read vs write calls
* move ethereum error class and helpers to react-helpers
* add use-ethereum-read-contract hook to contain fetch logic
* remove unused import
* move validation to lib, add hex check for vega public key
* use map for transaction modal states, pass confirmed prop to transaction dialog for deposits
* remove unused import for classnames
2022-04-06 17:34:51 +00:00
|
|
|
import { t } from '@vegaprotocol/react-helpers';
|
2022-06-13 14:39:17 +00:00
|
|
|
import { useEnvironment } from '@vegaprotocol/network-switcher';
|
|
|
|
import { createConnectors } from '../../lib/web3-connectors';
|
Feat/103 deposits (#143)
* add web3 provider using web3-react package
* add env setup, add guard for incorrect chain id
* add lib for web3-provider
* make wallet and ethereum connect dialogs look more consistent
* add setup tests file for jest-dom
* remove chain id config and just use appChainId prop, add disconnect button to invalid chainId state
* switch handling of connect dialog state to the consuming app
* rename web3-provider package to just web3
* envs for each environment so we can specify chainId
* make web3container enforce connection before rendering childen
* add web3 provider using web3-react package
* make web3container enforce connection before rendering childen
* add container for getting network params
* Move ethereum config query to web3 container
* add basic deposit form elements
* add queries required for deposits, add asset default
* add bridge contract and deposit transaction
* break txhash
* restrict etherscan link props, use etherscan link in transaction dialogs
* use smart-contracts-sdk
* split hooks and components into different files, fix find deposit logic, add styles and progress for tx dialogs
* fix text colors for dark mode
* improve tx dialogs, rename deposit query
* position use buttons, fix select validation
* fix type errors after not being in strict mode, add allowance checking
* add deposit-limits component, fix types now that strict mode is enabled
* make contract hooks have a single instance
* split out dialogs into separate files, fix icon alignment
* improve error types for use transaction hook, add number save min and max for the amount input
* add validation for ethereum and vega addresses
* add unit test for deposit form component
* add icons and shared dialog styles so it better matches order transaction dialog
* fix underline class, reset finalized deposit
* fix type imports, use i18n function, regen types
* only pass contract address to token contract hook
* add vega env, refactor so retrieving asset contract address logic isn't duplicated
* add faucet functionality, combine dialogs into single transaction-dialog
* combine rendering logic into single func of transaction dialog, rever contract hooks to just useMemo
* use to field rather than connected key
* fix props and imports in deposit form test
* share faucetable condition, pass it to token contract
* pass contracts in as params to hooks to avoid multiple contract instances
* refetch balance in wallet after deposit, add comments
* use hook state for tracking deposit via partyid, add test for use ethereum transaction hook
* add deposits lib
* add last smart contract sdk package
* fix asset import in test
* tidy up ts-ignores
* pass arg for faucetable token contract
* add provider url to env vars and use in place of infura id, also update web3-connector to only allow the chain permitted by the app
* add type guard for erc20 assets
* fix intent shadow helper function, use arrow function for isEthereumError
* update etherscan link to use env vars for url base
* rename deposit related hooks to indicate read vs write calls
* move ethereum error class and helpers to react-helpers
* add use-ethereum-read-contract hook to contain fetch logic
* remove unused import
* move validation to lib, add hex check for vega public key
* use map for transaction modal states, pass confirmed prop to transaction dialog for deposits
* remove unused import for classnames
2022-04-06 17:34:51 +00:00
|
|
|
|
2022-03-25 07:44:10 +00:00
|
|
|
interface Web3ContainerProps {
|
2022-06-07 22:08:40 +00:00
|
|
|
children: ReactNode;
|
2022-03-25 07:44:10 +00:00
|
|
|
}
|
|
|
|
|
2022-06-07 22:08:40 +00:00
|
|
|
export const Web3Container = ({ children }: Web3ContainerProps) => {
|
2022-03-25 07:44:10 +00:00
|
|
|
const [dialogOpen, setDialogOpen] = useState(false);
|
2022-06-07 22:08:40 +00:00
|
|
|
const { config, loading, error } = useEthereumConfig();
|
2022-06-13 14:39:17 +00:00
|
|
|
const { ETHEREUM_PROVIDER_URL, ETHEREUM_CHAIN_ID } = useEnvironment();
|
|
|
|
const Connectors = useMemo(
|
|
|
|
() => createConnectors(ETHEREUM_PROVIDER_URL, ETHEREUM_CHAIN_ID),
|
|
|
|
[ETHEREUM_CHAIN_ID, ETHEREUM_PROVIDER_URL]
|
|
|
|
);
|
2022-06-07 22:08:40 +00:00
|
|
|
return (
|
|
|
|
<AsyncRenderer data={config} loading={loading} error={error}>
|
|
|
|
{config ? (
|
|
|
|
<Web3Provider connectors={Connectors}>
|
|
|
|
<Web3Content
|
|
|
|
appChainId={Number(config.chain_id)}
|
|
|
|
setDialogOpen={setDialogOpen}
|
|
|
|
>
|
|
|
|
{children}
|
|
|
|
</Web3Content>
|
|
|
|
<Web3ConnectDialog
|
|
|
|
connectors={Connectors}
|
|
|
|
dialogOpen={dialogOpen}
|
|
|
|
setDialogOpen={setDialogOpen}
|
|
|
|
desiredChainId={Number(config.chain_id)}
|
|
|
|
/>
|
|
|
|
</Web3Provider>
|
|
|
|
) : null}
|
|
|
|
</AsyncRenderer>
|
2022-03-25 07:44:10 +00:00
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
interface Web3ContentProps {
|
|
|
|
children: ReactNode;
|
Feat/103 deposits (#143)
* add web3 provider using web3-react package
* add env setup, add guard for incorrect chain id
* add lib for web3-provider
* make wallet and ethereum connect dialogs look more consistent
* add setup tests file for jest-dom
* remove chain id config and just use appChainId prop, add disconnect button to invalid chainId state
* switch handling of connect dialog state to the consuming app
* rename web3-provider package to just web3
* envs for each environment so we can specify chainId
* make web3container enforce connection before rendering childen
* add web3 provider using web3-react package
* make web3container enforce connection before rendering childen
* add container for getting network params
* Move ethereum config query to web3 container
* add basic deposit form elements
* add queries required for deposits, add asset default
* add bridge contract and deposit transaction
* break txhash
* restrict etherscan link props, use etherscan link in transaction dialogs
* use smart-contracts-sdk
* split hooks and components into different files, fix find deposit logic, add styles and progress for tx dialogs
* fix text colors for dark mode
* improve tx dialogs, rename deposit query
* position use buttons, fix select validation
* fix type errors after not being in strict mode, add allowance checking
* add deposit-limits component, fix types now that strict mode is enabled
* make contract hooks have a single instance
* split out dialogs into separate files, fix icon alignment
* improve error types for use transaction hook, add number save min and max for the amount input
* add validation for ethereum and vega addresses
* add unit test for deposit form component
* add icons and shared dialog styles so it better matches order transaction dialog
* fix underline class, reset finalized deposit
* fix type imports, use i18n function, regen types
* only pass contract address to token contract hook
* add vega env, refactor so retrieving asset contract address logic isn't duplicated
* add faucet functionality, combine dialogs into single transaction-dialog
* combine rendering logic into single func of transaction dialog, rever contract hooks to just useMemo
* use to field rather than connected key
* fix props and imports in deposit form test
* share faucetable condition, pass it to token contract
* pass contracts in as params to hooks to avoid multiple contract instances
* refetch balance in wallet after deposit, add comments
* use hook state for tracking deposit via partyid, add test for use ethereum transaction hook
* add deposits lib
* add last smart contract sdk package
* fix asset import in test
* tidy up ts-ignores
* pass arg for faucetable token contract
* add provider url to env vars and use in place of infura id, also update web3-connector to only allow the chain permitted by the app
* add type guard for erc20 assets
* fix intent shadow helper function, use arrow function for isEthereumError
* update etherscan link to use env vars for url base
* rename deposit related hooks to indicate read vs write calls
* move ethereum error class and helpers to react-helpers
* add use-ethereum-read-contract hook to contain fetch logic
* remove unused import
* move validation to lib, add hex check for vega public key
* use map for transaction modal states, pass confirmed prop to transaction dialog for deposits
* remove unused import for classnames
2022-04-06 17:34:51 +00:00
|
|
|
appChainId: number;
|
2022-03-25 07:44:10 +00:00
|
|
|
setDialogOpen: (isOpen: boolean) => void;
|
|
|
|
}
|
|
|
|
|
Feat/103 deposits (#143)
* add web3 provider using web3-react package
* add env setup, add guard for incorrect chain id
* add lib for web3-provider
* make wallet and ethereum connect dialogs look more consistent
* add setup tests file for jest-dom
* remove chain id config and just use appChainId prop, add disconnect button to invalid chainId state
* switch handling of connect dialog state to the consuming app
* rename web3-provider package to just web3
* envs for each environment so we can specify chainId
* make web3container enforce connection before rendering childen
* add web3 provider using web3-react package
* make web3container enforce connection before rendering childen
* add container for getting network params
* Move ethereum config query to web3 container
* add basic deposit form elements
* add queries required for deposits, add asset default
* add bridge contract and deposit transaction
* break txhash
* restrict etherscan link props, use etherscan link in transaction dialogs
* use smart-contracts-sdk
* split hooks and components into different files, fix find deposit logic, add styles and progress for tx dialogs
* fix text colors for dark mode
* improve tx dialogs, rename deposit query
* position use buttons, fix select validation
* fix type errors after not being in strict mode, add allowance checking
* add deposit-limits component, fix types now that strict mode is enabled
* make contract hooks have a single instance
* split out dialogs into separate files, fix icon alignment
* improve error types for use transaction hook, add number save min and max for the amount input
* add validation for ethereum and vega addresses
* add unit test for deposit form component
* add icons and shared dialog styles so it better matches order transaction dialog
* fix underline class, reset finalized deposit
* fix type imports, use i18n function, regen types
* only pass contract address to token contract hook
* add vega env, refactor so retrieving asset contract address logic isn't duplicated
* add faucet functionality, combine dialogs into single transaction-dialog
* combine rendering logic into single func of transaction dialog, rever contract hooks to just useMemo
* use to field rather than connected key
* fix props and imports in deposit form test
* share faucetable condition, pass it to token contract
* pass contracts in as params to hooks to avoid multiple contract instances
* refetch balance in wallet after deposit, add comments
* use hook state for tracking deposit via partyid, add test for use ethereum transaction hook
* add deposits lib
* add last smart contract sdk package
* fix asset import in test
* tidy up ts-ignores
* pass arg for faucetable token contract
* add provider url to env vars and use in place of infura id, also update web3-connector to only allow the chain permitted by the app
* add type guard for erc20 assets
* fix intent shadow helper function, use arrow function for isEthereumError
* update etherscan link to use env vars for url base
* rename deposit related hooks to indicate read vs write calls
* move ethereum error class and helpers to react-helpers
* add use-ethereum-read-contract hook to contain fetch logic
* remove unused import
* move validation to lib, add hex check for vega public key
* use map for transaction modal states, pass confirmed prop to transaction dialog for deposits
* remove unused import for classnames
2022-04-06 17:34:51 +00:00
|
|
|
export const Web3Content = ({
|
|
|
|
children,
|
|
|
|
appChainId,
|
|
|
|
setDialogOpen,
|
|
|
|
}: Web3ContentProps) => {
|
2022-03-25 07:44:10 +00:00
|
|
|
const { isActive, error, connector, chainId } = useWeb3React();
|
|
|
|
|
|
|
|
useEffect(() => {
|
2022-06-10 19:00:02 +00:00
|
|
|
if (connector?.connectEagerly && !('Cypress' in window)) {
|
2022-03-28 19:34:45 +00:00
|
|
|
connector.connectEagerly();
|
|
|
|
}
|
2022-03-25 07:44:10 +00:00
|
|
|
}, [connector]);
|
|
|
|
|
|
|
|
if (error) {
|
|
|
|
return (
|
|
|
|
<SplashWrapper>
|
2022-03-31 01:08:25 +00:00
|
|
|
<p className="mb-12">{t(`Something went wrong: ${error.message}`)}</p>
|
|
|
|
<Button onClick={() => connector.deactivate()}>
|
|
|
|
{t('Disconnect')}
|
|
|
|
</Button>
|
2022-03-25 07:44:10 +00:00
|
|
|
</SplashWrapper>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!isActive) {
|
|
|
|
return (
|
|
|
|
<SplashWrapper>
|
2022-05-10 19:37:09 +00:00
|
|
|
<p data-testid="connect-eth-wallet-msg" className="mb-12">
|
|
|
|
{t('Connect your Ethereum wallet')}
|
|
|
|
</p>
|
|
|
|
<Button
|
|
|
|
onClick={() => setDialogOpen(true)}
|
|
|
|
data-testid="connect-eth-wallet-btn"
|
|
|
|
>
|
|
|
|
{t('Connect')}
|
|
|
|
</Button>
|
2022-03-25 07:44:10 +00:00
|
|
|
</SplashWrapper>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (chainId !== appChainId) {
|
|
|
|
return (
|
|
|
|
<SplashWrapper>
|
2022-03-31 01:08:25 +00:00
|
|
|
<p className="mb-12">
|
|
|
|
{t(`This app only works on chain ID: ${appChainId}`)}
|
|
|
|
</p>
|
|
|
|
<Button onClick={() => connector.deactivate()}>
|
|
|
|
{t('Disconnect')}
|
|
|
|
</Button>
|
2022-03-25 07:44:10 +00:00
|
|
|
</SplashWrapper>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
return <>{children}</>;
|
|
|
|
};
|
|
|
|
|
|
|
|
interface SplashWrapperProps {
|
|
|
|
children: ReactNode;
|
|
|
|
}
|
|
|
|
|
|
|
|
const SplashWrapper = ({ children }: SplashWrapperProps) => {
|
|
|
|
return (
|
|
|
|
<Splash>
|
|
|
|
<div className="text-center">{children}</div>
|
|
|
|
</Splash>
|
|
|
|
);
|
|
|
|
};
|