diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 63bb15946..748115b7e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -38,6 +38,8 @@ jobs: - name: Build run: yarn run build + env: + CI: false # TO-DO: Uncomment when tests are ready to be run on CI (such as those in issues #129-#131) # - name: Test diff --git a/e2e/etherlink-postdeploy-banner.spec.ts b/e2e/etherlink-postdeploy-banner.spec.ts index 47c7da473..0fb07a49e 100644 --- a/e2e/etherlink-postdeploy-banner.spec.ts +++ b/e2e/etherlink-postdeploy-banner.spec.ts @@ -2,7 +2,7 @@ import { test, expect } from "@playwright/test" test("shows post-deploy banner with explorer link", async ({ page }) => { const tx = `0x${"a".repeat(64)}` - await page.goto(`/explorer/daos?postDeploy=dao-created&network=etherlink_testnet&tx=${tx}`) + await page.goto(`/explorer/daos?postDeploy=dao-created&network=etherlink_shadownet&tx=${tx}`) await page.waitForLoadState("domcontentloaded") @@ -14,7 +14,7 @@ test("shows post-deploy banner with explorer link", async ({ page }) => { await expect(viewTx).toBeVisible() const href = await viewTx.getAttribute("href") - expect(href).toContain("https://testnet.explorer.etherlink.com") + expect(href).toContain("https://shadownet.explorer.etherlink.com") expect(href).toContain("/tx/") }) diff --git a/e2e/etherlink.spec.ts b/e2e/etherlink.spec.ts index c06ef8a91..3f06fcd36 100644 --- a/e2e/etherlink.spec.ts +++ b/e2e/etherlink.spec.ts @@ -1,6 +1,6 @@ import { test, expect } from "@playwright/test" -test("shows v4 daos on switching to etherlink testnet", async ({ page }) => { +test("shows v4 daos on switching to etherlink shadownet", async ({ page }) => { await page.goto(`/explorer/daos`) await page.waitForLoadState("domcontentloaded") @@ -13,10 +13,10 @@ test("shows v4 daos on switching to etherlink testnet", async ({ page }) => { console.log("Modal Title", modalTitleText) await expect(modalTitleText).toContain("Choose Network") - const etherlinkTestnet = await modalTitle.locator("text=Etherlink Testnet") - await expect(etherlinkTestnet).toBeVisible() + const etherlinkShadownet = await modalTitle.locator("text=Etherlink Shadownet") + await expect(etherlinkShadownet).toBeVisible() - await etherlinkTestnet.click() + await etherlinkShadownet.click() await page.waitForTimeout(10000) await page.reload() diff --git a/src/__tests__/etherlink/batchActions.spec.tsx b/src/__tests__/etherlink/batchActions.spec.tsx index 7338b3772..da03dcc31 100644 --- a/src/__tests__/etherlink/batchActions.spec.tsx +++ b/src/__tests__/etherlink/batchActions.spec.tsx @@ -8,7 +8,7 @@ import { useEvmProposalOps } from "services/contracts/etherlinkDAO/hooks/useEvmP import { EtherlinkContext } from "services/wagmi/context" jest.mock("services/beacon/hooks/useTezos", () => ({ - useTezos: () => ({ etherlink: {}, network: "etherlink_testnet" }) + useTezos: () => ({ etherlink: {}, network: "etherlink_shadownet" }) })) jest.mock("services/wagmi/etherlink/hooks/useProposalUiOverride", () => ({ diff --git a/src/__tests__/etherlink/transferAssets.spec.tsx b/src/__tests__/etherlink/transferAssets.spec.tsx index 34a1f0c91..413129804 100644 --- a/src/__tests__/etherlink/transferAssets.spec.tsx +++ b/src/__tests__/etherlink/transferAssets.spec.tsx @@ -10,7 +10,7 @@ import { ethers } from "ethers" // Mock hooks that require wallet/providers jest.mock("services/beacon/hooks/useTezos", () => ({ - useTezos: () => ({ etherlink: {}, network: "etherlink_testnet" }) + useTezos: () => ({ etherlink: {}, network: "etherlink_shadownet" }) })) jest.mock("services/wagmi/etherlink/hooks/useProposalUiOverride", () => ({ diff --git a/src/modules/etherlink/bridge/components/TxStatus.tsx b/src/modules/etherlink/bridge/components/TxStatus.tsx index 841b98cb1..6d3e966f4 100644 --- a/src/modules/etherlink/bridge/components/TxStatus.tsx +++ b/src/modules/etherlink/bridge/components/TxStatus.tsx @@ -30,7 +30,7 @@ export const TxStatus = ({ {label}:{" "} = ({ onSubmit: _onSubmit const defaultsAppliedRef = React.useRef(false) React.useEffect(() => { - const isEtherlinkTestnet = network === "etherlink_testnet" + const isEtherlinkShadownet = network === "etherlink_shadownet" const isEtherlinkMainnet = network === "etherlink_mainnet" - if (!(isEtherlinkTestnet || isEtherlinkMainnet)) return + if (!(isEtherlinkShadownet || isEtherlinkMainnet)) return if (defaultsAppliedRef.current) return const delayDays = Number(daoData.voting.votingBlocksDay) || 0 diff --git a/src/modules/etherlink/creator/votingDefaults.ts b/src/modules/etherlink/creator/votingDefaults.ts index 376785058..3ef255d2f 100644 --- a/src/modules/etherlink/creator/votingDefaults.ts +++ b/src/modules/etherlink/creator/votingDefaults.ts @@ -19,12 +19,12 @@ export interface VotingDefaults { /** * Get network-specific voting defaults based on the Etherlink network. - * @param network - The network identifier ("etherlink_testnet" | "etherlink_mainnet") + * @param network - The network identifier ("etherlink_shadownet" | "etherlink_mainnet") * @returns VotingDefaults object or undefined for unrecognized networks */ export function getVotingDefaults(network: string): VotingDefaults | undefined { switch (network) { - case "etherlink_testnet": + case "etherlink_shadownet": return { voting: { // Voting Delay: 1 minute diff --git a/src/modules/etherlink/explorer/router.tsx b/src/modules/etherlink/explorer/router.tsx index f3faa8c42..3e2272a4e 100644 --- a/src/modules/etherlink/explorer/router.tsx +++ b/src/modules/etherlink/explorer/router.tsx @@ -116,7 +116,7 @@ const EtherlinkDAOProvider: React.FC<{ daoId: string }> = ({ daoId, children }) // If not found and we have a list, try alternate network once. if (daos.length > 0 && !isLoadingDaos && !attemptedSwitchRef.current) { attemptedSwitchRef.current = true - const alt = network === "etherlink_testnet" ? "etherlink_mainnet" : "etherlink_testnet" + const alt = network === "etherlink_shadownet" ? "etherlink_mainnet" : "etherlink_shadownet" switchToNetwork?.(alt) } }, [daoId, daos, isLoadingDaos, network, selectDao, switchToNetwork, daoSelected?.id]) diff --git a/src/modules/etherlink/utils.ts b/src/modules/etherlink/utils.ts index 1134818b5..c5ebac278 100644 --- a/src/modules/etherlink/utils.ts +++ b/src/modules/etherlink/utils.ts @@ -3,13 +3,13 @@ import { proposalInterfaces } from "./config" import { IContractWriteMethod, IProposalType } from "./types" export const networkConfig = { - etherlink_testnet: { - network: "testnet", - explorerUrl: "https://testnet.explorer.etherlink.com", - explorerApiUrl: "https://testnet.explorer.etherlink.com/api/v2", - firebaseRootCollection: "idaosEtherlink-Testnet", - firebaseRootTokenCollection: "tokensEtherlink-Testnet", - firebaseMemberCollection: "iMembersEtherlink-Testnet" + etherlink_shadownet: { + network: "shadownet", + explorerUrl: "https://shadownet.explorer.etherlink.com", + explorerApiUrl: "https://shadownet.explorer.etherlink.com/api/v2", + firebaseRootCollection: "idaosEtherlink-Shadownet", + firebaseRootTokenCollection: "tokensEtherlink-Shadownet", + firebaseMemberCollection: "iMembersEtherlink-Shadownet" }, etherlink_mainnet: { network: "mainnet", @@ -22,7 +22,7 @@ export const networkConfig = { } export function getFirestoreNetworkName(internalNetwork: string): string { - if (internalNetwork === "etherlink_testnet") return "Etherlink-Testnet" + if (internalNetwork === "etherlink_shadownet") return "Etherlink-Shadownet" if (internalNetwork === "etherlink_mainnet") return "Etherlink" if (internalNetwork === "localhost") return "Localhost" return internalNetwork diff --git a/src/services/beacon/utils.ts b/src/services/beacon/utils.ts index 9fefce4ba..0babd9e7e 100644 --- a/src/services/beacon/utils.ts +++ b/src/services/beacon/utils.ts @@ -5,12 +5,12 @@ import { MichelCodecPacker, TezosToolkit } from "@taquito/taquito" import { Tzip16Module } from "@taquito/tzip16" import { EnvKey, getEnv } from "services/config" -export type Network = "mainnet" | "ghostnet" | "etherlink_testnet" | "etherlink_mainnet" +export type Network = "mainnet" | "ghostnet" | "etherlink_shadownet" | "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", - etherlink_testnet: "https://node.ghostnet.etherlink.com", + etherlink_shadownet: "https://node.shadownet.etherlink.com", etherlink_mainnet: "https://node.mainnet.etherlink.com" } @@ -18,7 +18,7 @@ export const networkDotColorMap: Record = { mainnet: "#9EEE5D", ghostnet: "#291F79", etherlink_mainnet: "#9EEE5D", - etherlink_testnet: "#291F79" + etherlink_shadownet: "#291F79" } // Infer the initial network from URL when no user selection exists yet diff --git a/src/services/wagmi/config.ts b/src/services/wagmi/config.ts index d0cb3511e..847dc4ed8 100644 --- a/src/services/wagmi/config.ts +++ b/src/services/wagmi/config.ts @@ -1,15 +1,39 @@ import { createConfig, http } from "wagmi" -import { etherlink, etherlinkTestnet, hardhat } from "wagmi/chains" +import { etherlink, hardhat } from "wagmi/chains" +import { defineChain } from "viem" import { metaMask, injected, safe } from "wagmi/connectors" import { DeployContract } from "./token" import { getDefaultConfig } from "connectkit" +// Custom chain definition for Etherlink Shadownet +export const etherlinkShadownet = defineChain({ + id: 127823, + name: "Etherlink Shadownet", + nativeCurrency: { + decimals: 18, + name: "XTZ", + symbol: "XTZ" + }, + rpcUrls: { + default: { + http: ["https://node.shadownet.etherlink.com"] + } + }, + blockExplorers: { + default: { + name: "Etherlink Shadownet Explorer", + url: "https://shadownet.explorer.etherlink.com" + } + }, + testnet: true +}) + // Keep Etherlink chains plus local hardhat for dev parity with the last known-good commit -const wagmiChains = [etherlink, etherlinkTestnet, hardhat] as const +const wagmiChains = [etherlink, etherlinkShadownet, hardhat] as const -// Allow overriding Etherlink Testnet RPC via env (optional) -const etherlinkTestnetRpc = process.env.REACT_APP_RPC_ETHERLINK_TESTNET?.trim() +// Allow overriding Etherlink Shadownet RPC via env (optional) +const etherlinkShadownetRpc = process.env.REACT_APP_RPC_ETHERLINK_SHADOWNET?.trim() // WalletConnect Cloud project ID for ConnectKit default config const projectId = "7dd66fecc485693b67e6921c580e7040" @@ -19,7 +43,7 @@ export const config = createConfig( chains: wagmiChains, transports: { [etherlink.id]: http(), - [etherlinkTestnet.id]: etherlinkTestnetRpc ? http(etherlinkTestnetRpc) : http() + [etherlinkShadownet.id]: etherlinkShadownetRpc ? http(etherlinkShadownetRpc) : http() }, walletConnectProjectId: projectId, appName: "Homebase", diff --git a/src/services/wagmi/context.tsx b/src/services/wagmi/context.tsx index c44c98e20..b95809fa0 100644 --- a/src/services/wagmi/context.tsx +++ b/src/services/wagmi/context.tsx @@ -1,8 +1,8 @@ import { useState, createContext, ReactNode, useMemo, useEffect, useCallback, useRef } from "react" import { useSwitchChain, useAccount as useWagmiAccount } from "wagmi" import { disconnect as disconnectEtherlink } from "@wagmi/core" -import { config as wagmiConfig } from "services/wagmi/config" -import { etherlink, etherlinkTestnet } from "wagmi/chains" +import { config as wagmiConfig, etherlinkShadownet } from "services/wagmi/config" +import { etherlink } from "wagmi/chains" import { useModal } from "connectkit" import { useEthersProvider, useEthersSigner } from "./ethers" import { useNetwork } from "services/useNetwork" @@ -43,11 +43,11 @@ export const EtherlinkProvider: React.FC<{ children: ReactNode }> = ({ children if (chain?.id === etherlink.id || chain?.name === "Etherlink") { return "etherlink_mainnet" } - if (chain?.id === etherlinkTestnet.id || chain?.name === "Etherlink Testnet") { - return "etherlink_testnet" + if (chain?.id === etherlinkShadownet.id || chain?.name === "Etherlink Shadownet") { + return "etherlink_shadownet" } - // Default to testnet when no explicit app selection or wallet chain - return "etherlink_testnet" + // Default to shadownet when no explicit app selection or wallet chain + return "etherlink_shadownet" }, [chain?.id, chain?.name, contextNetwork]) // Bind provider/signer to the wallet's active chain to avoid @@ -57,7 +57,7 @@ export const EtherlinkProvider: React.FC<{ children: ReactNode }> = ({ children const switchToNetwork = useCallback( (network: string) => { - const networkId = network === "etherlink_mainnet" ? etherlink.id : etherlinkTestnet.id + const networkId = network === "etherlink_mainnet" ? etherlink.id : etherlinkShadownet.id // Switch wallet chain switchChain({ chainId: networkId }) diff --git a/src/services/wagmi/web3provider.tsx b/src/services/wagmi/web3provider.tsx index 066249ca4..fe4b52793 100644 --- a/src/services/wagmi/web3provider.tsx +++ b/src/services/wagmi/web3provider.tsx @@ -1,9 +1,9 @@ import React, { ReactNode, useMemo } from "react" import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import { WagmiProvider } from "wagmi" -import { config } from "./config" +import { config, etherlinkShadownet } from "./config" import { ConnectKitProvider } from "connectkit" -import { etherlink, etherlinkTestnet } from "wagmi/chains" +import { etherlink } from "wagmi/chains" import { useNetwork } from "services/useNetwork" const queryClient = new QueryClient() @@ -12,9 +12,9 @@ export const Web3Provider = ({ children }: { children: ReactNode }) => { const { network: currentNetwork } = useNetwork() const ethInitialChainId = useMemo(() => { const network = currentNetwork || "etherlink_mainnet" - if (!network?.startsWith("etherlink")) return etherlinkTestnet.id + if (!network?.startsWith("etherlink")) return etherlinkShadownet.id if (network?.includes("mainnet")) return etherlink.id - return etherlinkTestnet.id + return etherlinkShadownet.id }, [currentNetwork]) const connectkitOptions = useMemo(() => ({ initialChainId: ethInitialChainId }), [ethInitialChainId])