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()
+ }
+})