diff --git a/public/nakamoto-mainnet.png b/public/nakamoto-mainnet.png
new file mode 100644
index 000000000..e474c730b
Binary files /dev/null and b/public/nakamoto-mainnet.png differ
diff --git a/src/app/PageClient.tsx b/src/app/PageClient.tsx
index f86feb1d6..afd14d7d4 100644
--- a/src/app/PageClient.tsx
+++ b/src/app/PageClient.tsx
@@ -1,16 +1,13 @@
'use client';
-import { logError } from '@/common/utils/error-utils';
import { NextPage } from 'next';
import dynamic from 'next/dynamic';
-import { DEFAULT_BLOCKS_LIST_LIMIT, DEFAULT_LIST_LIMIT_SMALL } from '../common/constants/constants';
+import { DEFAULT_LIST_LIMIT_SMALL } from '../common/constants/constants';
import { useGlobalContext } from '../common/context/useGlobalContext';
-import { useRenderNewBlockList } from '../common/hooks/useIsNakamoto';
import { TxListTabs } from '../features/txs-list/tabs/TxListTabs';
import { Grid } from '../ui/Grid';
import { HomePageBlockListSkeleton } from './_components/BlockList/Grouped/skeleton';
-import { UpdatedBlocksList } from './_components/BlockList/UpdatedBlockList';
import { PageTitle } from './_components/PageTitle';
import { Stats } from './_components/Stats/Stats';
@@ -25,7 +22,6 @@ const HomePageBlockListDynamic = dynamic(
const Home: NextPage = () => {
const { activeNetwork } = useGlobalContext();
- const renderNewBlockList = useRenderNewBlockList();
return (
<>
@@ -41,11 +37,7 @@ const Home: NextPage = () => {
showFilterButton={false}
showValueMenu={false}
/>
- {renderNewBlockList ? (
-
- ) : (
-
- )}
+
>
);
diff --git a/src/app/_components/BlockList/BlocksPage/BlocksPageHeaders.tsx b/src/app/_components/BlockList/BlocksPage/BlocksPageHeaders.tsx
deleted file mode 100644
index f159cda76..000000000
--- a/src/app/_components/BlockList/BlocksPage/BlocksPageHeaders.tsx
+++ /dev/null
@@ -1,157 +0,0 @@
-'use client';
-
-import { ReactNode, Suspense } from 'react';
-
-import { BurnBlock, NakamotoBlock } from '@stacks/blockchain-api-client';
-
-import { Card } from '../../../../common/components/Card';
-import { useSuspenseInfiniteQueryResult } from '../../../../common/hooks/useInfiniteQueryResult';
-import { useRenderNewBlockList } from '../../../../common/hooks/useIsNakamoto';
-import { useSuspenseBlocksByBurnBlock } from '../../../../common/queries/useBlocksByBurnBlock';
-import { useSuspenseBurnBlocks } from '../../../../common/queries/useBurnBlocksInfinite';
-import { Flex } from '../../../../ui/Flex';
-import { Icon } from '../../../../ui/Icon';
-import { Stack } from '../../../../ui/Stack';
-import { Text } from '../../../../ui/Text';
-import BitcoinIcon from '../../../../ui/icons/BitcoinIcon';
-import { BlockPageHeadersSkeleton } from '../Grouped/skeleton';
-import { useSuspenseAverageBlockTimes } from '../data/useAverageBlockTimes';
-
-function LastBlockCard() {
- const burnBlockResponse = useSuspenseBurnBlocks(1);
- const burnBlocks = useSuspenseInfiniteQueryResult(burnBlockResponse);
- const btcBlock = burnBlocks[0];
- const stxBlockResponse = useSuspenseBlocksByBurnBlock(btcBlock.burn_block_height, 1);
- const stxBlocks = useSuspenseInfiniteQueryResult(stxBlockResponse, 1);
- const lastStxBlock = stxBlocks[0];
- return (
-
-
- LAST BLOCK
-
-
-
- #{lastStxBlock.height}
-
-
-
-
- #{btcBlock.burn_block_height}
-
-
-
-
- {btcBlock.stacks_blocks.length} transactions
-
-
- );
-}
-
-function AverageStacksBlockTimeCard() {
- const {
- data: { last_24h },
- } = useSuspenseAverageBlockTimes();
-
- return (
-
-
- AVERAGE STACKS BLOCK TIME
-
-
- {last_24h} sec.
-
-
- In the last 24hs.
-
-
- );
-}
-
-function LastConfirmedBitcoinBlockCard() {
- const response = useSuspenseBurnBlocks(2);
- const burnBlocks = useSuspenseInfiniteQueryResult(response);
- const btcBlock = burnBlocks[1];
- return (
-
-
- In the previous bitcoin block
-
-
-
-
- {btcBlock.stacks_blocks.length}
-
-
- Stacks blocks
-
-
-
-
- {btcBlock.total_tx_count}
-
-
- Stacks transactions
-
-
-
-
- );
-}
-
-export function BlocksPageHeaderLayout({
- lastBlockCard,
- averageStacksBlockTimeCard,
- lastConfirmedBitcoinBlockCard,
- ...rest
-}: {
- lastBlockCard: ReactNode;
- averageStacksBlockTimeCard: ReactNode;
- lastConfirmedBitcoinBlockCard: ReactNode;
-} & React.ComponentProps) {
- const renderNewBlockList = useRenderNewBlockList();
- if (renderNewBlockList) {
- return null;
- }
- return (
- *:not(:last-of-type)': {
- borderBottom: ['1px solid var(--stacks-colors-borderPrimary)', null, null, 'none'],
- borderRight: [null, null, null, '1px solid var(--stacks-colors-borderPrimary)'],
- },
- '& > *:last-of-type': {
- borderBottom: 'none',
- borderRight: 'none',
- },
- }}
- {...rest}
- >
- {lastBlockCard}
- {averageStacksBlockTimeCard}
- {lastConfirmedBitcoinBlockCard}
-
- );
-}
-
-export function BlocksPageHeaders() {
- return (
- }>
- }
- averageStacksBlockTimeCard={}
- lastConfirmedBitcoinBlockCard={}
- />
-
- );
-}
diff --git a/src/app/_components/BlockList/Grouped/skeleton.tsx b/src/app/_components/BlockList/Grouped/skeleton.tsx
index 69f2b56e4..75956c4ba 100644
--- a/src/app/_components/BlockList/Grouped/skeleton.tsx
+++ b/src/app/_components/BlockList/Grouped/skeleton.tsx
@@ -6,13 +6,10 @@ import { Button } from '../../../../ui/Button';
import { Flex } from '../../../../ui/Flex';
import { SkeletonItem } from '../../../../ui/SkeletonItem';
import { SkeletonText } from '../../../../ui/SkeletonText';
-import { Stack } from '../../../../ui/Stack';
-import { Text } from '../../../../ui/Text';
import {
BlocksPageBlockListLayout,
BlocksPageControlsLayout,
} from '../BlocksPage/BlocksPageBlockList';
-import { BlocksPageHeaderLayout } from '../BlocksPage/BlocksPageHeaders';
import { ControlsLayout } from '../Controls';
import { HomePageBlockListLayout, HomePageControlsLayout } from '../HomePage/HomePageBlockList';
import { BlockListRowSkeleton } from '../Ungrouped/skeleton';
@@ -172,32 +169,6 @@ export function BlocksPageBlockListGroupedSkeleton() {
);
}
-export function BlockPageHeaderSkeleton() {
- return (
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export function BlockPageHeadersSkeleton() {
- return (
- }
- averageStacksBlockTimeCard={}
- lastConfirmedBitcoinBlockCard={}
- />
- );
-}
-
function HomePageControlsSkeleton({ horizontal }: { horizontal?: boolean }) {
return (
diff --git a/src/app/_components/BlockList/LayoutA/Paginated.tsx b/src/app/_components/BlockList/LayoutA/Paginated.tsx
deleted file mode 100644
index 55e650a26..000000000
--- a/src/app/_components/BlockList/LayoutA/Paginated.tsx
+++ /dev/null
@@ -1,125 +0,0 @@
-'use client';
-
-import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
-
-import { Section } from '../../../../common/components/Section';
-import { ExplorerErrorBoundary } from '../../ErrorBoundary';
-import { useBlockListContext } from '../BlockListContext';
-import { BlockListProvider } from '../BlockListProvider';
-import { useBlockListWebSocketUIBlock } from '../Sockets/useBlockListWebSocketUIBlock';
-import { FADE_DURATION } from '../consts';
-import { UISingleBlock } from '../types';
-import { BlockListWithControls } from './BlockListWithControls';
-import { usePaginatedBlockList } from './usePaginatedBlockList';
-
-function PaginatedBlockListLayoutABase() {
- const { setBlockListLoading, liveUpdates } = useBlockListContext();
- const [latestBlocksToShow, setLatestBlocksToShow] = useState([]);
-
- const {
- initialBlockList,
- initialBurnBlocks,
- updateList,
- hasNextPage,
- isFetchingNextPage,
- fetchNextPage,
- } = usePaginatedBlockList();
-
- const initialBlockHashes = useMemo(() => {
- return new Set(initialBlockList.map(block => block.hash));
- }, [initialBlockList]);
-
- const initialBurnBlockHashes = useMemo(() => {
- return new Set(Object.keys(initialBurnBlocks));
- }, [initialBurnBlocks]);
-
- const { latestUIBlocks, latestBlocksCount, clearLatestBlocks } = useBlockListWebSocketUIBlock(
- initialBlockHashes,
- initialBurnBlockHashes
- );
-
- const showLatestBlocks = useCallback(() => {
- setLatestBlocksToShow(prevLatestBlocksToShow => {
- return [...latestUIBlocks, ...prevLatestBlocksToShow];
- });
- clearLatestBlocks();
- }, [clearLatestBlocks, latestUIBlocks]);
-
- const blockList = useMemo(
- () => [...latestBlocksToShow, ...initialBlockList],
- [initialBlockList, latestBlocksToShow]
- );
-
- const showLatestBlocksWithFadeEffect = useCallback(() => {
- setBlockListLoading(true);
- setTimeout(() => {
- showLatestBlocks();
- setBlockListLoading(false);
- }, FADE_DURATION);
- }, [setBlockListLoading, showLatestBlocks]);
-
- const prevLiveUpdatesRef = useRef(liveUpdates);
- const prevLatestBlocksCountRef = useRef(latestBlocksCount);
-
- useEffect(() => {
- const liveUpdatesToggled = prevLiveUpdatesRef.current !== liveUpdates;
-
- const receivedLatestBlockWhileLiveUpdates =
- liveUpdates &&
- latestBlocksCount > 0 &&
- prevLatestBlocksCountRef.current !== latestBlocksCount;
-
- if (liveUpdatesToggled) {
- setBlockListLoading(true);
- setLatestBlocksToShow([]);
- clearLatestBlocks();
- updateList().then(() => {
- setBlockListLoading(false);
- });
- } else if (receivedLatestBlockWhileLiveUpdates) {
- showLatestBlocksWithFadeEffect();
- }
-
- prevLiveUpdatesRef.current = liveUpdates;
- prevLatestBlocksCountRef.current = latestBlocksCount;
- }, [
- liveUpdates,
- latestBlocksCount,
- clearLatestBlocks,
- updateList,
- showLatestBlocksWithFadeEffect,
- setBlockListLoading,
- ]);
-
- return (
-
- );
-}
-
-export function PaginatedBlockListLayoutA() {
- return (
-
-
-
-
-
- );
-}
diff --git a/src/app/_components/BlockList/SkeletonBlockList.tsx b/src/app/_components/BlockList/SkeletonBlockList.tsx
deleted file mode 100644
index fbe564371..000000000
--- a/src/app/_components/BlockList/SkeletonBlockList.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import { Section } from '../../../common/components/Section';
-import { TwoColumnsListItemSkeleton } from '../../../common/components/TwoColumnsListItemSkeleton';
-
-export const SkeletonBlockList = () => {
- return (
-
- {[...Array(10)].map((_, i) => (
-
- ))}
-
- );
-};
diff --git a/src/app/_components/BlockList/UpdatedBlockList.tsx b/src/app/_components/BlockList/UpdatedBlockList.tsx
deleted file mode 100644
index ddfbfd504..000000000
--- a/src/app/_components/BlockList/UpdatedBlockList.tsx
+++ /dev/null
@@ -1,232 +0,0 @@
-'use client';
-
-import { useColorModeValue } from '@chakra-ui/react';
-import { useQueryClient } from '@tanstack/react-query';
-import React, { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';
-
-import { Block, NakamotoBlock } from '@stacks/blockchain-api-client';
-
-import { ListFooter } from '../../../common/components/ListFooter';
-import { Section } from '../../../common/components/Section';
-import { DEFAULT_LIST_LIMIT } from '../../../common/constants/constants';
-import { useInfiniteQueryResult } from '../../../common/hooks/useInfiniteQueryResult';
-import { useBlockListInfinite } from '../../../common/queries/useBlockListInfinite';
-import { Box } from '../../../ui/Box';
-import { Collapse } from '../../../ui/Collapse';
-import { FlexProps } from '../../../ui/Flex';
-import { FormControl } from '../../../ui/FormControl';
-import { FormLabel } from '../../../ui/FormLabel';
-import { Icon } from '../../../ui/Icon';
-import { Stack } from '../../../ui/Stack';
-import { Switch } from '../../../ui/Switch';
-import StxIcon from '../../../ui/icons/StxIcon';
-import { ExplorerErrorBoundary } from '../ErrorBoundary';
-import { BurnBlock } from './LayoutA/BurnBlock';
-import { StxBlock } from './LayoutA/StxBlock';
-import { SkeletonBlockList } from './SkeletonBlockList';
-import { useSubscribeBlocks } from './Sockets/useSubscribeBlocks';
-import { EnhancedBlock } from './types';
-
-export const animationDuration = 0.8;
-
-export const BlockListItem: React.FC<{ block: Block } & FlexProps> = React.memo(
- ({ block, ...rest }) => {
- return (
- <>
- }
- />
-
- >
- );
- }
-);
-
-export const AnimatedBlockAndMicroblocksItem: FC<{
- block: EnhancedBlock;
- onAnimationExit?: () => void;
-}> = ({ block, onAnimationExit }) => {
- const [show, setShow] = useState(!block.animate);
- useEffect(() => {
- if (block.animate) {
- setTimeout(() => {
- setShow(true);
- }, 100);
- }
- }, [block.animate]);
- useEffect(() => {
- if (block.destroy) {
- setShow(false);
- }
- }, [block.destroy]);
-
- return (
- {
- if (state === 'exit') {
- onAnimationExit?.();
- }
- }}
- data-testid={`block-item-${block.hash}`}
- style={{
- overflow: 'unset',
- }}
- >
-
-
- );
-};
-
-export const BlockAndMicroblocksItem: React.FC<{ block: Block }> = ({ block }) => {
- return ;
-};
-
-function UpdatedBlocksListBase({
- limit,
-}: {
- limit?: number;
-} & FlexProps) {
- const [isLive, setIsLive] = useState(false);
- const [initialBlocks, setInitialBlocks] = useState([]);
- const [latestBlocks, setLatestBlocks] = useState([]);
-
- const response = useBlockListInfinite();
- const { isFetchingNextPage, fetchNextPage, hasNextPage } = response;
- const blocks = useInfiniteQueryResult(response, limit);
-
- const queryClient = useQueryClient();
-
- const labelColor = useColorModeValue('slate.600', 'slate.400');
-
- const handleBlock = useCallback((block: Block | NakamotoBlock) => {
- setLatestBlocks(prevLatestBlocks => [
- { ...block, microblock_tx_count: {}, animate: true } as EnhancedBlock,
- ...prevLatestBlocks,
- ]);
- }, []);
- useSubscribeBlocks(isLive, handleBlock);
- useEffect(() => {
- if (!isLive) return;
- setLatestBlocks([]);
- void queryClient.invalidateQueries({ queryKey: ['blockListInfinite'] });
- }, [isLive, queryClient]);
-
- const lastClickTimeRef = useRef(0);
-
- const toggleLiveUpdates = useCallback(() => {
- const now = Date.now();
- if (now - lastClickTimeRef.current > 2000) {
- lastClickTimeRef.current = now;
- setIsLive(!isLive);
- }
- }, [isLive]);
-
- useEffect(() => {
- setInitialBlocks(blocks);
- }, [blocks]);
-
- const allBlocks = useMemo(() => {
- return [...latestBlocks, ...initialBlocks]
- .sort((a, b) => (b.height || 0) - (a.height || 0))
- .reduce((acc: EnhancedBlock[], block, index) => {
- if (!acc.some(b => b.height === block.height)) {
- acc.push({ ...block, destroy: index >= (limit || DEFAULT_LIST_LIMIT) });
- }
- return acc;
- }, []);
- }, [initialBlocks, latestBlocks, limit]);
-
- const removeOldBlock = useCallback((block: EnhancedBlock) => {
- setInitialBlocks(prevBlocks => prevBlocks.filter(b => b.height !== block.height));
- setLatestBlocks(prevBlocks => prevBlocks.filter(b => b.height !== block.height));
- }, []);
-
- if (!allBlocks?.length) return ;
-
- return (
-
-
- live view
-
- toggleLiveUpdates()}
- />
-
- }
- >
-
-
- {allBlocks?.map(block =>
- isLive ? (
- removeOldBlock(block)}
- />
- ) : (
-
- )
- )}
-
-
- {!isLive && (
-
- )}
-
-
-
- );
-}
-
-export function UpdatedBlocksList({ limit }: { limit?: number }) {
- return (
-
-
-
- );
-}
diff --git a/src/app/_components/NavBar/NetworkLabel.tsx b/src/app/_components/NavBar/NetworkLabel.tsx
index e5df5bf3e..049b04229 100644
--- a/src/app/_components/NavBar/NetworkLabel.tsx
+++ b/src/app/_components/NavBar/NetworkLabel.tsx
@@ -2,8 +2,6 @@ import { useColorMode, useColorModeValue } from '@chakra-ui/react';
import { Check, Trash } from '@phosphor-icons/react';
import { FC, useMemo } from 'react';
-import { ChainID } from '@stacks/transactions';
-
import { Badge } from '../../../common/components/Badge';
import { DEFAULT_DEVNET_SERVER } from '../../../common/constants/constants';
import { useGlobalContext } from '../../../common/context/useGlobalContext';
@@ -36,26 +34,16 @@ export const NetworkLabel: FC<{ network: Network }> = ({ network }) => {
const isTestnet = network.url === testnet;
const isDevnet = network.url === DEFAULT_DEVNET_SERVER;
const isDefault = isMainnet || isTestnet;
- let itemNetworkId: ChainID.Mainnet | ChainID.Testnet = isMainnet
- ? ChainID.Mainnet
- : ChainID.Testnet;
- const { data, error, isFetching } = useCustomNetworkApiInfo(network.url, {
+ const { error, isFetching } = useCustomNetworkApiInfo(network.url, {
enabled: !!network.url && !isDefault,
});
const isDisabled = isFetching || !!error;
-
- if (!isDefault && data) {
- itemNetworkId = data?.network_id && parseInt(data.network_id.toString());
- }
-
const isActive = activeNetwork.url === network.url;
const networkHref = buildUrl('/', network);
const purpleBadgeColor = useColorModeValue('purple.600', 'purple.300');
const purpleBadgeBg = useColorModeValue('purple.100', 'purple.900');
- const greenBadgeColor = useColorModeValue('green.600', 'green.300');
- const greenBadgeBg = useColorModeValue('green.100', 'green.900');
const badgeBorder = useColorModeValue('purple.300', 'purple.700');
const isNetworkRemovable = useMemo(
@@ -101,36 +89,6 @@ export const NetworkLabel: FC<{ network: Network }> = ({ network }) => {
subnet
- ) : network.label === 'Stacks Testnet (Primary)' ? (
-
- Nakamoto 3.0
-
- ) : network.label === 'Nakamoto Testnet' ? (
-
- Nakamoto 3.0
-
) : (
= ({ network }) => {
fontWeight={'medium'}
ml="8px"
>
- Nakamoto
+ Nakamoto 3.0
)}
diff --git a/src/app/blocks/PageClient.tsx b/src/app/blocks/PageClient.tsx
index 21adead76..2a084ec12 100644
--- a/src/app/blocks/PageClient.tsx
+++ b/src/app/blocks/PageClient.tsx
@@ -3,25 +3,9 @@
import type { NextPage } from 'next';
import dynamic from 'next/dynamic';
-import { useRenderNewBlockList } from '../../common/hooks/useIsNakamoto';
-import {
- BlockPageHeadersSkeleton,
- BlocksPageBlockListSkeleton,
-} from '../_components/BlockList/Grouped/skeleton';
-import { SkeletonBlockList } from '../_components/BlockList/SkeletonBlockList';
+import { BlocksPageBlockListSkeleton } from '../_components/BlockList/Grouped/skeleton';
import { PageTitle } from '../_components/PageTitle';
-const BlocksPageHeadersDynamic = dynamic(
- () =>
- import('../_components/BlockList/BlocksPage/BlocksPageHeaders').then(
- mod => mod.BlocksPageHeaders
- ),
- {
- loading: () => ,
- ssr: false,
- }
-);
-
const BlocksPageBlockListDynamic = dynamic(
() =>
import('../_components/BlockList/BlocksPage/BlocksPageBlockList').then(
@@ -33,15 +17,6 @@ const BlocksPageBlockListDynamic = dynamic(
}
);
-const PaginatedBlockListLayoutADynamic = dynamic(
- () =>
- import('../_components/BlockList/LayoutA/Paginated').then(mod => mod.PaginatedBlockListLayoutA),
- {
- loading: () => ,
- ssr: false,
- }
-);
-
export function BlocksPageLayout({
title,
blocksPageHeaders,
@@ -61,14 +36,11 @@ export function BlocksPageLayout({
}
const BlocksPage: NextPage = () => {
- const renderNewBlockList = useRenderNewBlockList();
return (
: null}
- blocksList={
- renderNewBlockList ? :
- }
+ title={'Recent blocks'}
+ blocksPageHeaders={null}
+ blocksList={}
/>
);
};
diff --git a/src/app/blocks/skeleton.tsx b/src/app/blocks/skeleton.tsx
index 892ee88a8..163fa730f 100644
--- a/src/app/blocks/skeleton.tsx
+++ b/src/app/blocks/skeleton.tsx
@@ -1,16 +1,13 @@
'use client';
-import {
- BlockPageHeadersSkeleton,
- BlocksPageBlockListSkeleton,
-} from '../_components/BlockList/Grouped/skeleton';
+import { BlocksPageBlockListSkeleton } from '../_components/BlockList/Grouped/skeleton';
import { BlocksPageLayout } from './PageClient';
export default function BlocksPageSkeleton() {
return (
}
+ blocksPageHeaders={null}
blocksList={}
/>
);
diff --git a/src/app/skeleton.tsx b/src/app/skeleton.tsx
index f1d0b79a4..396b9f563 100644
--- a/src/app/skeleton.tsx
+++ b/src/app/skeleton.tsx
@@ -1,18 +1,14 @@
'use client';
import { Section } from '../common/components/Section';
-import { useRenderNewBlockList } from '../common/hooks/useIsNakamoto';
import { SkeletonTxsList } from '../features/txs-list/SkeletonTxsList';
import { Grid } from '../ui/Grid';
import { HomePageBlockListSkeleton } from './_components/BlockList/Grouped/skeleton';
-import { SkeletonBlockList } from './_components/BlockList/SkeletonBlockList';
import { PageTitle } from './_components/PageTitle';
import { SkeletonStatSection } from './_components/Stats/SkeletonStatSection';
import { Wrapper } from './_components/Stats/Wrapper';
export default function HomePageSkeleton() {
- const renderNewBlockList = useRenderNewBlockList();
-
return (
<>
Stacks Explorer
@@ -30,7 +26,7 @@ export default function HomePageSkeleton() {
- {renderNewBlockList ? : }
+
>
);
diff --git a/src/common/components/modals/Nakamoto.tsx b/src/common/components/modals/Nakamoto.tsx
index d7742c2d1..51a8c2122 100644
--- a/src/common/components/modals/Nakamoto.tsx
+++ b/src/common/components/modals/Nakamoto.tsx
@@ -5,10 +5,11 @@ import {
ModalFooter,
ModalOverlay,
} from '@chakra-ui/react';
+import { ArrowUpRight } from '@phosphor-icons/react';
import { useQueryClient } from '@tanstack/react-query';
import { useEffect, useState } from 'react';
-import { Badge } from '../../../ui/Badge';
+import { Icon } from '../../..//ui/Icon';
import { ButtonLink } from '../../../ui/ButtonLink';
import { Flex } from '../../../ui/Flex';
import { Image } from '../../../ui/Image';
@@ -17,10 +18,10 @@ import { Text } from '../../../ui/Text';
import { TextLink } from '../../../ui/TextLink';
export function NakamotoModal() {
- const [isOpen, setIsOpen] = useState(false);
+ const [isOpen, setIsOpen] = useState(true);
useEffect(() => {
- const nakamotoModalShown = localStorage.getItem('nakamoto3PrimaryTestnetModalShown');
+ const nakamotoModalShown = localStorage.getItem('nakamoto3MainnetModalShown');
try {
const dismissQueryParam = new URLSearchParams(window.location.search).get('dismiss');
// to run performance testing without the modal
@@ -34,7 +35,7 @@ export function NakamotoModal() {
}, []);
const handleClose = () => {
- localStorage.setItem('nakamoto3PrimaryTestnetModalShown', 'true');
+ localStorage.setItem('nakamoto3MainnetModalShown', 'true');
setIsOpen(false);
};
@@ -51,43 +52,47 @@ export function NakamotoModal() {
/>
-
- NAKAMOTO UPGRADE
-
- Nakamoto 3.0 is live on Primary Testnet
+ Nakamoto 3.0 is live on Stacks Mainnet
-
+
{
handleClose();
void queryClient.clear();
}}
_hover={{ textDecoration: 'none' }}
+ bg="accent.stacks-500"
>
- Explore Nakamoto 3.0
+ Experience Fast Blocks and Bitcoin Finality
-
- Learn more about Nakamoto 3.0 ↗
-
+
+
+
+ Learn more about Nakamoto on Mainnet
+
+
+
+
+
+ Stacks Foundation Announcement
+
+
+
+
diff --git a/src/common/hooks/useIsNakamoto.ts b/src/common/hooks/useIsNakamoto.ts
deleted file mode 100644
index cc6a2d199..000000000
--- a/src/common/hooks/useIsNakamoto.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { useGlobalContext } from '../context/useGlobalContext';
-
-export function useRenderNewBlockList() {
- const { activeNetworkKey } = useGlobalContext();
-
- const isMainnet = activeNetworkKey === 'https://api.hiro.so';
-
- return !isMainnet;
-}