diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 00000000..8cc4c015 Binary files /dev/null and b/bun.lockb differ diff --git a/package.json b/package.json index 44752b5f..a56f4471 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "@mui/icons-material": "^5.14.14", "@mui/material": "^5.14.14", "@mui/x-date-pickers": "^5.0.2", + "@tanstack/react-query": "^5.51.1", "@taquito/beacon-wallet": "^20.0.0", "@taquito/signer": "^20.0.0", "@taquito/taquito": "^20.0.0", @@ -39,11 +40,14 @@ "@types/react-paginate": "^7.1.2", "@types/react-router-hash-link": "^2.4.5", "@types/valid-url": "^1.0.4", + "@web3modal/wagmi": "^5.0.6", "assert": "^2.0.0", "bignumber.js": "^9.0.1", "blockies-ts": "^1.0.0", + "connectkit": "^1.8.2", "crypto-browserify": "^3.12.0", "dayjs": "^1.11.11", + "ethers": "^6.13.1", "export-to-csv": "^1.2.4", "formik": "^2.2.6", "formik-material-ui": "^3.0.1", @@ -84,6 +88,8 @@ "url": "^0.11.0", "util": "^0.12.5", "valid-url": "^1.0.9", + "viem": "^2.17.4", + "wagmi": "^2.10.10", "yup": "^0.32.9" }, "devDependencies": { diff --git a/src/App.tsx b/src/App.tsx index 90d1c948..3303c828 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,20 +1,25 @@ import React from "react" +import "App.css" import { withLDProvider } from "launchdarkly-react-client-sdk" import { BrowserRouter as Router, Redirect, Route, Switch } from "react-router-dom" import mixpanel from "mixpanel-browser" import { QueryClient, QueryClientProvider } from "react-query" +import { + QueryClient as TanStackQueryClient, + QueryClientProvider as TanStackQueryClientProvider +} from "@tanstack/react-query" + import { Box, makeStyles, ThemeProvider } from "@material-ui/core" import { SnackbarProvider } from "notistack" import { DAOExplorerRouter } from "modules/explorer/router" -import { DAOCreate } from "modules/creator" import { CreatorProvider } from "modules/creator/state" import ScrollToTop from "modules/common/ScrollToTop" import { theme } from "theme" +import { WagmiProvider } from "wagmi" +import { config as wagmiConfig } from "services/wagmi/config" -import "App.css" import { TZKTSubscriptionsProvider } from "services/bakingBad/context/TZKTSubscriptions" -import { Landing } from "modules/home/Landing" import { WarningFooter } from "modules/common/WarningFooter" import { ActionSheetProvider } from "modules/explorer/context/ActionSheets" import { legacyTheme } from "theme/legacy" @@ -25,7 +30,8 @@ import { DAOCreatorRouter } from "modules/creator/router" import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider" import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs" import { CommunityCreator } from "modules/lite/creator" -import { hexStringToBytes } from "services/utils/utils" + +const tsQueryClient = new TanStackQueryClient() const queryClient = new QueryClient({ defaultOptions: { @@ -96,57 +102,61 @@ const App: React.FC = () => { variantInfo: classes.info }} > - - - - - - - - - - - - - - {/* + + + + + + + + + + + + + + + {/* */} - - - - - - - - - - + + + + + + + + + + - {window.location.href.indexOf(HUMANITEZ_DAO) !== -1 ? ( - <> - {/* Special case for this DAO which was created before FA1.2 fix was created for the smart contract */} - - - ) : null} - - - - - - - - - - - - + {window.location.href.indexOf(HUMANITEZ_DAO) !== -1 ? ( + <> + {/* Special case for this DAO which was created before FA1.2 fix was created for the smart contract */} + + + ) : null} + + + + + + + + + + + + + + ) diff --git a/src/modules/common/ChangeNetworkButton.tsx b/src/modules/common/ChangeNetworkButton.tsx index d1ef4b11..65f35f40 100644 --- a/src/modules/common/ChangeNetworkButton.tsx +++ b/src/modules/common/ChangeNetworkButton.tsx @@ -1,8 +1,8 @@ -import { Box, capitalize, Grid, styled, Typography, Theme } from "@material-ui/core" -import { ActionSheet, useActionSheet } from "modules/explorer/context/ActionSheets" import React from "react" +import { Box, Grid, styled, Typography, Theme } from "@material-ui/core" +import { ActionSheet, useActionSheet } from "modules/explorer/context/ActionSheets" import { useLocation } from "react-router-dom" -import { Network } from "services/beacon" +import { getNetworkDisplayName, networkDotColorMap } from "services/beacon" import { useTezos } from "services/beacon/hooks/useTezos" const StyledConnectedButton = styled(Box)(({ theme }: { theme: Theme }) => ({ @@ -26,11 +26,6 @@ const StyledConnectedButton = styled(Box)(({ theme }: { theme: Theme }) => ({ } })) -export const networkDotColorMap: Record = { - mainnet: "#9EEE5D", - ghostnet: "#291F79" -} - export const ColorDot = styled(Box)({ height: 6, width: 6, @@ -56,7 +51,7 @@ export const ChangeNetworkButton = () => { - {capitalize(network)} + {getNetworkDisplayName(network)} diff --git a/src/modules/creator/steps/Governance.tsx b/src/modules/creator/steps/Governance.tsx index 4c380c03..88d0cc87 100644 --- a/src/modules/creator/steps/Governance.tsx +++ b/src/modules/creator/steps/Governance.tsx @@ -7,7 +7,6 @@ import { useRouteMatch } from "react-router-dom" import { CreatorContext, ActionTypes, VotingSettings } from "modules/creator/state" import { InfoRounded } from "@material-ui/icons" -import { getNetworkStats } from "services/bakingBad/stats" import { useTezos } from "services/beacon/hooks/useTezos" import { EstimatedBlocks } from "modules/explorer/components/EstimatedTime" import dayjs from "dayjs" @@ -15,6 +14,7 @@ import { TitleBlock } from "modules/common/TitleBlock" import BigNumber from "bignumber.js" import { mutezToXtz, parseUnits } from "services/contracts/utils" import { FieldChange, handleChange } from "../utils" +import { useBlockchainInfo } from "services/contracts/baseDAO/hooks/useBlockchainInfo" const TimeBox = styled(Grid)(({ theme }) => ({ background: theme.palette.primary.dark, @@ -370,21 +370,20 @@ const GovernanceForm = ({ submitForm, values, setFieldValue, errors, touched, se blockTimeAverage }) + const { data: blockchainInfo } = useBlockchainInfo() + + useEffect(() => { + if (blockchainInfo) { + setBlockTimeAverage(blockchainInfo.constants.timeBetweenBlocks) + } + }, [blockchainInfo]) + useEffect(() => { setFieldValue("votingBlocks", periodBlocks) setFieldValue("proposalFlushBlocks", flushBlocks) setFieldValue("proposalExpiryBlocks", expiryBlocks) }, [values, periodBlocks, flushBlocks, expiryBlocks, setFieldValue]) - useEffect(() => { - ;(async () => { - const blockchainInfo = await getNetworkStats(network) - if (blockchainInfo) { - setBlockTimeAverage(blockchainInfo.constants.timeBetweenBlocks) - } - })() - }, [network]) - const formatDate = (timeInfo: any) => { const values = [] for (const property in timeInfo) { diff --git a/src/modules/explorer/components/ChangeNetworkButton.tsx b/src/modules/explorer/components/ChangeNetworkButton.tsx index a564b7bb..e05e56c8 100644 --- a/src/modules/explorer/components/ChangeNetworkButton.tsx +++ b/src/modules/explorer/components/ChangeNetworkButton.tsx @@ -1,9 +1,9 @@ -import { Box, capitalize, Grid, styled, Typography, Theme } from "@material-ui/core" -import React, { useEffect } from "react" -import { Network } from "services/beacon" +import React from "react" +import { Box, Grid, styled, Typography, Theme } from "@material-ui/core" import { useTezos } from "services/beacon/hooks/useTezos" import { ActionSheet, useActionSheet } from "../context/ActionSheets" import { useLocation } from "react-router-dom" +import { getNetworkDisplayName, networkDotColorMap } from "services/beacon" const StyledConnectedButton = styled(Box)(({ theme }: { theme: Theme }) => ({ "& > *": { @@ -25,11 +25,6 @@ const StyledConnectedButton = styled(Box)(({ theme }: { theme: Theme }) => ({ } })) -export const networkDotColorMap: Record = { - mainnet: "#9EEE5D", - ghostnet: "#291F79" -} - export const ColorDot = styled(Box)({ height: 6, width: 6, @@ -55,7 +50,7 @@ export const ChangeNetworkButton = () => { - {capitalize(network)} + {getNetworkDisplayName(network)} diff --git a/src/modules/explorer/components/NetworkSheet.tsx b/src/modules/explorer/components/NetworkSheet.tsx index 5dce70b2..ef4584dc 100644 --- a/src/modules/explorer/components/NetworkSheet.tsx +++ b/src/modules/explorer/components/NetworkSheet.tsx @@ -1,11 +1,10 @@ import { styled, Grid, Typography, capitalize } from "@material-ui/core" import React, { useContext, useMemo } from "react" import { useTezos } from "services/beacon/hooks/useTezos" -import { Network } from "services/beacon" +import { Network, getNetworkDisplayName, networkDotColorMap, rpcNodes } from "services/beacon" import { ResponsiveDialog } from "./ResponsiveDialog" -import { ColorDot, networkDotColorMap } from "./ChangeNetworkButton" +import { ColorDot } from "./ChangeNetworkButton" import { ContentContainer } from "./ContentContainer" -import { EnvKey, getEnv } from "services/config" import { ActionTypes, CreatorContext } from "modules/creator/state" const SheetItem = styled(ContentContainer)({ @@ -21,7 +20,7 @@ interface Props { onClose: () => void } -const SUPPORTED_NETWORKS: Network[] = ["mainnet", "ghostnet"] +const SUPPORTED_NETWORKS = Object.keys(rpcNodes) as Network[] export const NetworkSheet: React.FC = props => { const { network, changeNetwork } = useTezos() @@ -50,7 +49,7 @@ export const NetworkSheet: React.FC = props => { - {capitalize(networkOption)} + {getNetworkDisplayName(networkOption)} diff --git a/src/modules/explorer/components/Toolbar.tsx b/src/modules/explorer/components/Toolbar.tsx index 934e27ba..2cffe7b7 100644 --- a/src/modules/explorer/components/Toolbar.tsx +++ b/src/modules/explorer/components/Toolbar.tsx @@ -98,12 +98,12 @@ const ToolbarContainer = styled(Grid)(({ theme }) => ({ })) export const Navbar: React.FC<{ disableMobileMenu?: boolean }> = ({ disableMobileMenu, children }) => { - const { connect, account } = useTezos() + const { connect, account: tzAccountAddress, etherlink, network } = useTezos() const theme = useTheme() const isMobileExtraSmall = useMediaQuery(theme.breakpoints.down("mobile")) const { open: openUserMenuSheet } = useActionSheet(ActionSheet.UserMenu) - + const walletAddress = network.startsWith("etherlink") ? etherlink.account?.address : tzAccountAddress return ( @@ -125,7 +125,7 @@ export const Navbar: React.FC<{ disableMobileMenu?: boolean }> = ({ disableMobil - {account ? ( + {walletAddress && etherlink?.isConnected ? ( = ({ disableMobil style={{ gap: 16 }} > - + - + @@ -169,7 +169,9 @@ export const Navbar: React.FC<{ disableMobileMenu?: boolean }> = ({ disableMobil color="secondary" variant="contained" style={{ fontSize: "14px" }} - onClick={() => connect()} + onClick={() => { + connect() + }} > Connect Wallet diff --git a/src/modules/explorer/components/VotersProgress.tsx b/src/modules/explorer/components/VotersProgress.tsx index 6dc83233..157cd6b5 100644 --- a/src/modules/explorer/components/VotersProgress.tsx +++ b/src/modules/explorer/components/VotersProgress.tsx @@ -10,7 +10,6 @@ import numbro from "numbro" import { SmallButton } from "modules/common/SmallButton" import { ReactComponent as DownloadCSVIcon } from "assets/img/download_csv.svg" import { mkConfig, generateCsv, download, asString } from "export-to-csv" -import { writeFile } from "node:fs" import { useNotification } from "modules/common/hooks/useNotification" interface VotersData { @@ -64,7 +63,12 @@ export const VotersProgress: React.FC = ({ showButton, daoId, propos title: "Voting Details", showTitle: false }) - const votesData = proposal ? proposal?.voters : [] + const votesData = proposal + ? proposal?.voters.map(voter => ({ + ...voter, + value: voter.value.toString() // Convert BigNumber to string + })) + : [] try { const csv = generateCsv(csvConfig)(votesData) download(csvConfig)(csv) diff --git a/src/modules/lite/creator/index.tsx b/src/modules/lite/creator/index.tsx index 63db9626..0dd31d64 100644 --- a/src/modules/lite/creator/index.tsx +++ b/src/modules/lite/creator/index.tsx @@ -33,6 +33,7 @@ import CodeOffIcon from "@mui/icons-material/CodeOff" import { ProposalCodeEditorInput } from "modules/explorer/components/ProposalFormInput" import Prism, { highlight } from "prismjs" import "prism-themes/themes/prism-night-owl.css" +import { Network } from "services/beacon" const CodeButton = styled(CodeIcon)(({ theme }) => ({ background: theme.palette.primary.dark, @@ -198,7 +199,12 @@ const CheckboxContainer = styled(Grid)(({ theme }) => ({ flexBasis: "5%" })) -const validateForm = (values: Community) => { +const validateTokenAddress = (network: Network, tokenAddress: string) => { + if (!network.startsWith("etherlink")) return validateContractAddress(tokenAddress) + return true +} + +const validateForm = (network: Network, values: Community) => { const errors: FormikErrors = {} if (!values.name) { @@ -209,7 +215,7 @@ const validateForm = (values: Community) => { errors.tokenAddress = "Required" } - if (values.tokenAddress && validateContractAddress(values.tokenAddress) !== 3) { + if (values.tokenAddress && validateTokenAddress(network, values.tokenAddress) !== 3) { errors.tokenAddress = "Invalid address" } @@ -537,7 +543,7 @@ export const CommunityCreator: React.FC = () => { enableReinitialize={true} validateOnChange={true} validateOnBlur={false} - validate={validateForm} + validate={(formValues: Community) => validateForm(network, formValues)} onSubmit={saveCommunity} initialValues={initialState} > diff --git a/src/modules/lite/explorer/components/ChangeNetworkButton.tsx b/src/modules/lite/explorer/components/ChangeNetworkButton.tsx index 78a0f883..9819a079 100644 --- a/src/modules/lite/explorer/components/ChangeNetworkButton.tsx +++ b/src/modules/lite/explorer/components/ChangeNetworkButton.tsx @@ -1,9 +1,9 @@ import { Box, capitalize, Grid, styled, Typography, Theme } from "@material-ui/core" import React from "react" -import { Network } from "services/beacon" import { useTezos } from "services/beacon/hooks/useTezos" import { ActionSheet, useActionSheet } from "../context/ActionSheets" import { useLocation } from "react-router-dom" +import { getNetworkDisplayName, networkDotColorMap } from "services/beacon" const StyledConnectedButton = styled(Box)(({ theme }: { theme: Theme }) => ({ "& > *": { @@ -21,11 +21,6 @@ const StyledConnectedButton = styled(Box)(({ theme }: { theme: Theme }) => ({ } })) -export const networkDotColorMap: Record = { - mainnet: "#9EEE5D", - ghostnet: "#291F79" -} - export const ColorDot = styled(Box)({ height: 6, width: 6, @@ -55,7 +50,7 @@ export const ChangeNetworkButton = () => { - {capitalize(network)} + {getNetworkDisplayName(network)} diff --git a/src/services/bakingBad/context/TZKTSubscriptions.tsx b/src/services/bakingBad/context/TZKTSubscriptions.tsx index 7f002b88..bc768eab 100644 --- a/src/services/bakingBad/context/TZKTSubscriptions.tsx +++ b/src/services/bakingBad/context/TZKTSubscriptions.tsx @@ -29,6 +29,7 @@ const TZKTSubscriptionsProvider: React.FC = ({ children }) => { const { network } = useTezos() useEffect(() => { + if (network.startsWith("etherlink")) return ;(async () => { socketRef.current = new HubConnectionBuilder().withUrl(getUrl(network)).build() diff --git a/src/services/bakingBad/index.ts b/src/services/bakingBad/index.ts index 502e1bf8..722151c1 100644 --- a/src/services/bakingBad/index.ts +++ b/src/services/bakingBad/index.ts @@ -1,6 +1,6 @@ -import { Network } from "services/beacon" +import { Network, rpcNodes } from "services/beacon" -export const networkNameMap: Record = { - mainnet: "mainnet", - ghostnet: "ghostnet" -} +export const networkNameMap: Record = Object.keys(rpcNodes).reduce((acc, network) => { + acc[network as Network] = network + return acc +}, {} as Record) diff --git a/src/services/bakingBad/stats/index.ts b/src/services/bakingBad/stats/index.ts index c77cb6c5..edeea0fe 100644 --- a/src/services/bakingBad/stats/index.ts +++ b/src/services/bakingBad/stats/index.ts @@ -3,6 +3,25 @@ import { BlockchainStats } from "./types" import { networkNameMap } from ".." export const getNetworkStats = async (network: Network): Promise => { + if (network.startsWith("etherlink")) { + const [_, etherlinkNetwork] = network.split("_") + + const reqUrl = `https://${ + etherlinkNetwork === "mainnet" ? "" : "testnet-" + }explorer.etherlink.com/api/v2/blocks?type=block` + + const etherlinkData = await fetch(reqUrl).then(x => x.json()) + const firstTwoBlocks = [etherlinkData.items[0], etherlinkData.items[1]] + const timeDifference = Math.ceil( + (new Date(firstTwoBlocks[0].timestamp).getTime() - new Date(firstTwoBlocks[1].timestamp).getTime()) / 1000 + ) + + return { + constants: { + timeBetweenBlocks: timeDifference + } + } + } const url = `https://api.${networkNameMap[network]}.tzkt.io/v1/protocols/current` const response = await fetch(url) @@ -16,6 +35,15 @@ export const getNetworkStats = async (network: Network): Promise => { + if (network.startsWith("etherlink")) { + const [_, etherlinkNetwork] = network.split("_") + const reqUrl = `https://${ + etherlinkNetwork === "mainnet" ? "" : "testnet-" + }explorer.etherlink.com/api/v2/blocks?type=block` + + const etherlinkData = await fetch(reqUrl).then(x => x.json()) + return etherlinkData.items[0].height || 0 + } const url = `https://api.${networkNameMap[network]}.tzkt.io/v1/blocks/count` const response = await fetch(url) diff --git a/src/services/bakingBad/tokenBalances/index.ts b/src/services/bakingBad/tokenBalances/index.ts index d595754f..17099638 100644 --- a/src/services/bakingBad/tokenBalances/index.ts +++ b/src/services/bakingBad/tokenBalances/index.ts @@ -10,7 +10,7 @@ const isNFTDTO = (value: DAOToken): value is NFTDTO => value.hasOwnProperty("art const isBalanceTzktNFT = (value: BalanceTZKT): boolean => Boolean(value.token.metadata?.artifactUri) -const isTokenTzktNFT = (value: TokenDataTZKT): boolean => Boolean(value.metadata?.artifactUri) +const isTokenTzktNFT = (value: TokenDataTZKT): boolean => Boolean(value?.metadata?.artifactUri) export interface DAOHolding { balance: BigNumber diff --git a/src/services/beacon/hooks/useTezos.ts b/src/services/beacon/hooks/useTezos.ts index 4c50e130..0abebe17 100644 --- a/src/services/beacon/hooks/useTezos.ts +++ b/src/services/beacon/hooks/useTezos.ts @@ -1,11 +1,12 @@ import { useQueryClient } from "react-query" import { useCallback, useContext } from "react" -import { MichelCodecPacker, TezosToolkit } from "@taquito/taquito" +import { TezosToolkit } from "@taquito/taquito" import { connectWithBeacon, createTezos, Network, rpcNodes, TezosActionType } from "services/beacon" import { TezosContext } from "services/beacon/context" -import { Tzip16Module } from "@taquito/tzip16" +import { useWeb3Modal } from "@web3modal/wagmi/react" import mixpanel from "mixpanel-browser" import { BeaconWallet } from "@taquito/beacon-wallet" +import { useChainId, useAccount as useWagmiAccount, useConnect as useWagmiConnect } from "wagmi" type WalletConnectReturn = { tezos: TezosToolkit @@ -15,6 +16,12 @@ type WalletConnectReturn = { account: string network: Network wallet: BeaconWallet | undefined + etherlink: any +} + +function formatEthAddress(address?: string) { + if (!address) return null + return `${address.slice(0, 6)}…${address.slice(38, 42)}` } export const useTezos = (): WalletConnectReturn => { @@ -23,10 +30,22 @@ export const useTezos = (): WalletConnectReturn => { dispatch } = useContext(TezosContext) + const chainId = useChainId() + const { address: ethAddress, isConnected } = useWagmiAccount() + const { connect: wagmiConnect, connectors } = useWagmiConnect() + // eslint-disable-next-line react-hooks/exhaustive-deps + const openEthWallet = () => { + wagmiConnect({ connector: connectors[0], chainId }) + } + const queryClient = useQueryClient() const connect = useCallback( async (newNetwork?: Network) => { + if ((newNetwork || network).startsWith("etherlink")) { + openEthWallet() + return + } const { wallet } = await connectWithBeacon(network) const newTezos: TezosToolkit = createTezos(network || newNetwork) @@ -47,12 +66,18 @@ export const useTezos = (): WalletConnectReturn => { return newTezos }, - [dispatch, network] + [dispatch, network, openEthWallet] ) return { tezos, - connect, + connect: async () => { + const result = await connect() + if (!result) { + throw new Error("Failed to connect") + } + return result + }, reset: useCallback(async () => { if (!wallet) { throw new Error("No Wallet Connected") @@ -98,6 +123,13 @@ export const useTezos = (): WalletConnectReturn => { }, account, network, - wallet + wallet, + etherlink: { + isConnected, + account: { + address: ethAddress + }, + network: "" + } } } diff --git a/src/services/beacon/utils.ts b/src/services/beacon/utils.ts index 3f1c3c26..5a52a3c7 100644 --- a/src/services/beacon/utils.ts +++ b/src/services/beacon/utils.ts @@ -1,16 +1,24 @@ import { NetworkType } from "@airgap/beacon-types" +import { capitalize } from "@material-ui/core" import { BeaconWallet } from "@taquito/beacon-wallet" import { MichelCodecPacker, TezosToolkit } from "@taquito/taquito" import { Tzip16Module } from "@taquito/tzip16" import { EnvKey, getEnv } from "services/config" -export type Network = "mainnet" | "ghostnet" - -export const ALICE_PRIV_KEY = "edsk3QoqBuvdamxouPhin7swCvkQNgq4jP5KZPbwWNnwdZpSpJiEbq" +export type Network = "mainnet" | "ghostnet" | "etherlink_testnet" | "etherlink_mainnet" export const rpcNodes: Record = { mainnet: getEnv(EnvKey.REACT_APP_RPC_NETWORK_MAINNET) || "https://mainnet.api.tez.ie", - ghostnet: getEnv(EnvKey.REACT_APP_RPC_NETWORK_GHOSTNET) || "https://ghostnet.smartpy.io" + ghostnet: getEnv(EnvKey.REACT_APP_RPC_NETWORK_GHOSTNET) || "https://ghostnet.smartpy.io", + etherlink_testnet: "https://node.ghostnet.etherlink.com", + etherlink_mainnet: "https://node.mainnet.etherlink.com" +} + +export const networkDotColorMap: Record = { + mainnet: "#9EEE5D", + ghostnet: "#291F79", + etherlink_mainnet: "#9EEE5D", + etherlink_testnet: "#291F79" } export const getTezosNetwork = (): Network => { @@ -86,3 +94,13 @@ export const connectWithBeacon = async ( wallet } } + +export function getNetworkDisplayName(networkSlug: string) { + if (networkSlug.includes("_")) { + return networkSlug + .split("_") + .map(x => capitalize(x)) + .join(" ") + } + return capitalize(networkSlug) +} diff --git a/src/services/contracts/baseDAO/hooks/useOriginate.ts b/src/services/contracts/baseDAO/hooks/useOriginate.ts index 0e3f92b7..0c2ae116 100644 --- a/src/services/contracts/baseDAO/hooks/useOriginate.ts +++ b/src/services/contracts/baseDAO/hooks/useOriginate.ts @@ -10,7 +10,6 @@ import { BaseDAO, replacer } from ".." import { getDAO } from "services/services/dao/services" import mixpanel from "mixpanel-browser" import { InMemorySigner } from "@taquito/signer" -import { ALICE_PRIV_KEY } from "services/beacon" import { getSignature } from "services/lite/utils" import { saveLiteCommunity } from "services/services/lite/lite-services" import { Community } from "models/Community" diff --git a/src/services/services/dao/hooks/useDAO.ts b/src/services/services/dao/hooks/useDAO.ts index a6bd9e55..87526016 100644 --- a/src/services/services/dao/hooks/useDAO.ts +++ b/src/services/services/dao/hooks/useDAO.ts @@ -11,9 +11,7 @@ import { LambdaDAO } from "services/contracts/baseDAO/lambdaDAO" import { parseUnits } from "services/contracts/utils" import { getDAO } from "services/services/dao/services" import { useBlockchainInfo } from "../../../contracts/baseDAO/hooks/useBlockchainInfo" -import { useCommunityForContract } from "modules/lite/explorer/hooks/useCommunityForContract" import { fetchLiteData } from "services/services/lite/lite-services" -import { Community } from "services/services/types" export const useDAO = (address: string) => { const [cycleInfo, setCycleInfo] = useState() diff --git a/src/services/wagmi/config.ts b/src/services/wagmi/config.ts new file mode 100644 index 00000000..82454695 --- /dev/null +++ b/src/services/wagmi/config.ts @@ -0,0 +1,42 @@ +import { createConfig, http } from "wagmi" +import { etherlink, etherlinkTestnet } from "wagmi/chains" +import { metaMask, injected, safe } from "wagmi/connectors" +import { createWeb3Modal } from "@web3modal/wagmi/react" +import { defaultWagmiConfig } from "@web3modal/wagmi/react/config" +import { walletConnect } from "wagmi/connectors" + +const wagmiChains = [etherlink, etherlinkTestnet] as const + +// 1. Your WalletConnect Cloud project ID +const projectId = "7dd66fecc485693b67e6921c580e7040" + +// 2. Create wagmiConfig +const metadata = { + name: "Homebase", + description: "AppKit Example", + url: "https://web3modal.com", // origin must match your domain & subdomain + icons: ["https://avatars.githubusercontent.com/u/37784886"] +} + +const web3ModalConfig = defaultWagmiConfig({ + chains: wagmiChains, + projectId, + metadata +}) + +// 3. Create modal +createWeb3Modal({ + wagmiConfig: web3ModalConfig, + projectId, + enableAnalytics: true, // Optional - defaults to your Cloud configuration + enableOnramp: true // Optional - false as default +}) + +export const config = createConfig({ + chains: wagmiChains, + connectors: [metaMask(), walletConnect({ projectId })], + transports: { + [etherlink.id]: http(), + [etherlinkTestnet.id]: http() + } +})