Merge branch 'master' into footer

pull/26459/head^2
Corwin Smith 2 years ago
commit bfcf91fa31
  1. 14
      public/images/pages/glyph-home-light.svg
  2. 69
      src/components/UI/DataTable.tsx
  3. 113
      src/components/UI/Header.tsx
  4. 66
      src/components/UI/downloads/DownloadsHero.tsx
  5. 18
      src/components/UI/downloads/DownloadsSection.tsx
  6. 83
      src/components/UI/downloads/DownloadsTable.tsx
  7. 4
      src/components/UI/downloads/index.ts
  8. 9
      src/components/UI/homepage/Gopher.tsx
  9. 11
      src/components/UI/homepage/HomeHero.tsx
  10. 3
      src/components/UI/homepage/HomeSection.tsx
  11. 5
      src/components/UI/homepage/QuickLinks.tsx
  12. 67
      src/components/UI/homepage/WhatIsEthereum.tsx
  13. 64
      src/components/UI/homepage/WhyRunANode.tsx
  14. 2
      src/components/UI/homepage/index.ts
  15. 16
      src/components/UI/icons/HamburguerIcon.tsx
  16. 14
      src/components/UI/icons/LensIcon.tsx
  17. 14
      src/components/UI/icons/MoonIcon.tsx
  18. 6
      src/components/UI/icons/index.ts
  19. 3
      src/components/UI/icons/index.tsx
  20. 2
      src/components/UI/index.ts
  21. 2
      src/components/layouts/Footer.tsx
  22. 16
      src/components/layouts/Layout.tsx
  23. 20
      src/constants.ts
  24. 28
      src/data/test/download-testdata.ts
  25. 44
      src/data/test/pgpbuild-testdata.ts
  26. 28
      src/data/test/pgpdeveloper-testdata.ts
  27. 1
      src/pages/docs/fundamentals/index.md
  28. 111
      src/pages/downloads.tsx
  29. 90
      src/pages/index.tsx
  30. 2
      src/theme/foundations/shadows.ts
  31. 9
      src/theme/foundations/textStyles.ts

@ -1,8 +1,8 @@
<svg width="108" height="164" viewBox="0 0 108 164" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="180" height="278" viewBox="0 0 180 278" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M54 162.125V121.846L104.955 92.708L54 162.125Z" stroke="#11866F" stroke-width="3" stroke-linejoin="round"/> <path d="M90.0002 276.5V207.379L2.76453 157.376L90.0002 276.5Z" stroke="#11866F" stroke-width="2" stroke-linejoin="round"/>
<path d="M54 162.125V121.846L3.04493 92.708L54 162.125Z" stroke="#11866F" stroke-width="3" stroke-linejoin="round"/> <path d="M90.0001 276.5V207.379L177.236 157.376L90.0001 276.5Z" stroke="#11866F" stroke-width="2" stroke-linejoin="round"/>
<path d="M53.9998 111.908V60.9531L105.693 83.3225L53.9998 111.908Z" stroke="#11866F" stroke-width="3" stroke-linejoin="round"/> <path d="M89.9999 190.325V102.883L1.5 141.27L89.9999 190.325Z" stroke="#11866F" stroke-width="2" stroke-linejoin="round"/>
<path d="M54 111.908V60.9531L2.30645 83.3225L54 111.908Z" stroke="#11866F" stroke-width="3" stroke-linejoin="round"/> <path d="M90.0001 190.325V102.883L178.5 141.27L90.0001 190.325Z" stroke="#11866F" stroke-width="2" stroke-linejoin="round"/>
<path d="M105.693 83.1077L53.9998 1.875V60.5906L105.693 83.1077Z" stroke="#11866F" stroke-width="3" stroke-linejoin="round"/> <path d="M1.5 140.901L89.9999 1.5V102.26L1.5 140.901Z" stroke="#11866F" stroke-width="2" stroke-linejoin="round"/>
<path d="M2.30645 83.1077L54 1.875V60.5906L2.30645 83.1077Z" stroke="#11866F" stroke-width="3" stroke-linejoin="round"/> <path d="M178.5 140.901L90.0001 1.5V102.26L178.5 140.901Z" stroke="#11866F" stroke-width="2" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 834 B

After

Width:  |  Height:  |  Size: 837 B

@ -1,35 +1,23 @@
import { import { Table, Thead, Tr, Th, TableContainer, Text, Tbody, Td } from '@chakra-ui/react';
Table,
Thead,
Tr,
Th,
TableContainer,
Text,
Tbody,
Td,
} from '@chakra-ui/react';
import { FC } from 'react'; import { FC } from 'react';
interface Props { interface Props {
columnHeaders: string[] columnHeaders: string[];
data: any data: any;
} }
export const DataTable: FC<Props> = ({ export const DataTable: FC<Props> = ({ columnHeaders, data }) => {
columnHeaders,
data,
}) => {
return ( return (
<TableContainer <TableContainer
// Note: This wont work on firefox, we are ok with this. // Note: This wont work on firefox, we are ok with this.
css={{ css={{
"&::-webkit-scrollbar": { '&::-webkit-scrollbar': {
borderTop: '2px solid #11866f', borderTop: '2px solid #11866f',
height: 18 height: 18
}, },
"&::-webkit-scrollbar-thumb": { '&::-webkit-scrollbar-thumb': {
background: "#11866f", background: '#11866f'
}, }
}} }}
pt={4} pt={4}
pb={4} pb={4}
@ -37,15 +25,9 @@ export const DataTable: FC<Props> = ({
<Table variant='unstyled'> <Table variant='unstyled'>
<Thead> <Thead>
<Tr> <Tr>
{ {columnHeaders.map((columnHeader, idx) => {
columnHeaders.map((columnHeader, idx) => {
return ( return (
<Th <Th key={idx} textTransform='none' minW={'130.5px'} px={4}>
key={idx}
textTransform='none'
minW={'130.5px'}
px={4}
>
<Text <Text
fontFamily='"JetBrains Mono", monospace' fontFamily='"JetBrains Mono", monospace'
fontWeight={700} fontWeight={700}
@ -55,14 +37,12 @@ export const DataTable: FC<Props> = ({
{columnHeader} {columnHeader}
</Text> </Text>
</Th> </Th>
) );
}) })}
}
</Tr> </Tr>
</Thead> </Thead>
<Tbody> <Tbody>
{ {data.map((item: any, idx: number) => {
data.map((item: any, idx: number) => {
return ( return (
<Tr <Tr
key={idx} key={idx}
@ -70,26 +50,19 @@ export const DataTable: FC<Props> = ({
transition={'all 0.5s'} transition={'all 0.5s'}
_hover={{ background: 'green.50', transition: 'all 0.5s' }} _hover={{ background: 'green.50', transition: 'all 0.5s' }}
> >
{ {columnHeaders.map((columnHeader, idx) => {
columnHeaders.map((columnHeader, idx) => {
// TODO: Make the font size smaller (refer to design system) // TODO: Make the font size smaller (refer to design system)
return ( return (
<Td <Td key={idx} px={4} fontSize='13px'>
key={idx}
px={4}
fontSize='13px'
>
{item[columnHeader.toLowerCase()]} {item[columnHeader.toLowerCase()]}
</Td> </Td>
) );
}) })}
}
</Tr> </Tr>
) );
}) })}
}
</Tbody> </Tbody>
</Table> </Table>
</TableContainer> </TableContainer>
) );
} };

@ -0,0 +1,113 @@
import { Box, Flex, Input, InputGroup, Link, Stack, Text } from '@chakra-ui/react';
import { FC } from 'react';
import NextLink from 'next/link';
import { HamburguerIcon, LensIcon, MoonIcon } from '../UI/icons';
import { DOCS_PAGE, DOWNLOADS_PAGE } from '../../constants';
export const Header: FC = () => {
return (
<Flex
mb={4}
border='2px solid'
borderColor='brand.light.primary'
justifyContent='space-between'
>
<Stack
p={4}
justifyContent='center'
alignItems='flex-start'
borderRight={{ base: 'none', sm: '2px solid' }}
borderColor='brand.light.primary'
flexGrow={2}
>
<Text textStyle='header-font'>
go-ethereum
</Text>
</Stack>
<Flex>
{/* DOWNLOADS */}
<Stack
p={4}
justifyContent='center'
borderRight='2px solid'
borderColor='brand.light.primary'
display={{ base: 'none', md: 'block' }}
color='brand.light.primary'
_hover={{
textDecoration: 'none',
bg: 'brand.light.primary',
color: 'yellow.50 !important'
}}
>
<NextLink href={DOWNLOADS_PAGE} passHref>
<Link _hover={{ textDecoration: 'none' }}>
<Text textStyle='header-font' textTransform='uppercase'>
downloads
</Text>
</Link>
</NextLink>
</Stack>
{/* DOCUMENTATION */}
<Stack
p={4}
justifyContent='center'
borderRight={{ base: 'none', md: '2px solid' }}
borderColor='brand.light.primary'
display={{ base: 'none', md: 'block' }}
color='brand.light.primary'
_hover={{
textDecoration: 'none',
bg: 'brand.light.primary',
color: 'yellow.50 !important'
}}
>
<NextLink href={DOCS_PAGE} passHref>
<Link _hover={{ textDecoration: 'none' }}>
<Text textStyle='header-font' textTransform='uppercase'>
documentation
</Text>
</Link>
</NextLink>
</Stack>
{/* SEARCH */}
<Stack
p={4}
display={{ base: 'none', md: 'block' }}
borderRight={{ base: 'none', md: '2px solid' }}
borderColor='brand.light.primary'
>
<InputGroup>
<Input
variant='unstyled'
placeholder='search'
size='md'
_placeholder={{ color: 'brand.light.primary', fontStyle: 'italic' }}
/>
<Stack pl={4} justifyContent='center' alignItems='center'>
<LensIcon />
</Stack>
</InputGroup>
</Stack>
{/* DARK MODE SWITCH */}
<Box
p={4}
borderRight={{ base: '2px solid', lg: 'none' }}
borderColor='brand.light.primary'
>
<MoonIcon />
</Box>
{/* HAMBURGUER MENU */}
<Box p={4} display={{ base: 'block', md: 'none' }}>
<HamburguerIcon />
</Box>
</Flex>
</Flex>
);
};

@ -2,16 +2,16 @@ import { Box, Button, Image, Link, Stack, HStack, Text } from '@chakra-ui/react'
import { FC } from 'react'; import { FC } from 'react';
import NextLink from 'next/link'; import NextLink from 'next/link';
import { DOWNLOAD_HEADER_BUTTONS } from '../../../constants' import { DOWNLOAD_HEADER_BUTTONS } from '../../../constants';
interface DownloadsHero { interface DownloadsHero {
currentBuildName: string currentBuildName: string;
currentBuildVersion: string currentBuildVersion: string;
linuxBuildURL: string linuxBuildURL: string;
macOSBuildURL: string macOSBuildURL: string;
releaseNotesURL: string releaseNotesURL: string;
sourceCodeURL: string sourceCodeURL: string;
windowsBuildURL: string windowsBuildURL: string;
} }
export const DownloadsHero: FC<DownloadsHero> = ({ export const DownloadsHero: FC<DownloadsHero> = ({
@ -23,10 +23,10 @@ export const DownloadsHero: FC<DownloadsHero> = ({
sourceCodeURL, sourceCodeURL,
windowsBuildURL windowsBuildURL
}) => { }) => {
DOWNLOAD_HEADER_BUTTONS.linuxBuild.buildURL = linuxBuildURL DOWNLOAD_HEADER_BUTTONS.linuxBuild.buildURL = linuxBuildURL;
DOWNLOAD_HEADER_BUTTONS.macOSBuild.buildURL = macOSBuildURL DOWNLOAD_HEADER_BUTTONS.macOSBuild.buildURL = macOSBuildURL;
DOWNLOAD_HEADER_BUTTONS.windowsBuild.buildURL = windowsBuildURL DOWNLOAD_HEADER_BUTTONS.windowsBuild.buildURL = windowsBuildURL;
DOWNLOAD_HEADER_BUTTONS.sourceCode.buildURL = sourceCodeURL DOWNLOAD_HEADER_BUTTONS.sourceCode.buildURL = sourceCodeURL;
return ( return (
<Stack border='3px solid' borderColor='brand.light.primary' py={4} px={4}> <Stack border='3px solid' borderColor='brand.light.primary' py={4} px={4}>
@ -35,10 +35,7 @@ export const DownloadsHero: FC<DownloadsHero> = ({
</Stack> </Stack>
<Box mb={4}> <Box mb={4}>
<Box <Box as='h1' textStyle='h1'>
as='h1'
textStyle='h1'
>
Download go-ethereum Download go-ethereum
</Box> </Box>
@ -52,24 +49,16 @@ export const DownloadsHero: FC<DownloadsHero> = ({
</Text> </Text>
<Text mb={4}> <Text mb={4}>
You can download the latest 64-bit stable release of Geth for our primary platforms below. Packages for all supported platforms, as well as develop builds, can be found further down the page. If you&apos;re looking to install Geth and/or associated tools via your favorite package manager, please check our installation guide. You can download the latest 64-bit stable release of Geth for our primary platforms below.
Packages for all supported platforms, as well as develop builds, can be found further down
the page. If you&apos;re looking to install Geth and/or associated tools via your favorite
package manager, please check our installation guide.
</Text> </Text>
{ {Object.keys(DOWNLOAD_HEADER_BUTTONS).map((key: string) => {
Object.keys(DOWNLOAD_HEADER_BUTTONS).map((key: string) => {
return ( return (
<NextLink <NextLink key={key} href={DOWNLOAD_HEADER_BUTTONS[key].buildURL} passHref>
key={key} <Button as='a' variant='primary' width={{ base: '100%' }} p={8} mb={4}>
href={DOWNLOAD_HEADER_BUTTONS[key].buildURL}
passHref
>
<Button
as='a'
variant='primary'
width={{ base: '100%' }}
p={8}
mb={4}
>
<HStack spacing={4}> <HStack spacing={4}>
<Stack alignItems='center'> <Stack alignItems='center'>
<Image <Image
@ -81,23 +70,16 @@ export const DownloadsHero: FC<DownloadsHero> = ({
<Text textStyle='downloads-button-label'> <Text textStyle='downloads-button-label'>
For {DOWNLOAD_HEADER_BUTTONS[key].name} For {DOWNLOAD_HEADER_BUTTONS[key].name}
</Text> </Text>
<Text textStyle='downloads-button-label'> <Text textStyle='downloads-button-label'>geth {currentBuildName}</Text>
geth {currentBuildName}
</Text>
</Box> </Box>
</HStack> </HStack>
</Button> </Button>
</NextLink> </NextLink>
) );
}) })}
}
<Box textAlign={'center'}> <Box textAlign={'center'}>
<Link <Link href={releaseNotesURL} isExternal variant='light'>
href={releaseNotesURL}
isExternal
variant='light'
>
Release notes for {currentBuildName} {currentBuildVersion} Release notes for {currentBuildName} {currentBuildVersion}
</Link> </Link>
</Box> </Box>

@ -6,16 +6,10 @@ interface Props {
id: string; id: string;
imgSrc?: string; imgSrc?: string;
imgAltText?: string; imgAltText?: string;
sectionTitle: string sectionTitle: string;
} }
export const DownloadsSection: FC<Props> = ({ export const DownloadsSection: FC<Props> = ({ children, imgSrc, imgAltText, sectionTitle, id }) => {
children,
imgSrc,
imgAltText,
sectionTitle,
id
}) => {
return ( return (
<Stack border='2px solid' borderColor='brand.light.primary' id={id}> <Stack border='2px solid' borderColor='brand.light.primary' id={id}>
{!!imgSrc && ( {!!imgSrc && (
@ -36,9 +30,7 @@ export const DownloadsSection: FC<Props> = ({
</Box> </Box>
</Stack> </Stack>
<Stack spacing={4}> <Stack spacing={4}>{children}</Stack>
{children}
</Stack> </Stack>
</Stack> );
) };
}

@ -1,41 +1,20 @@
import { import { Stack, Tabs, TabList, Tab, Text, TabPanel, TabPanels } from '@chakra-ui/react';
Stack,
Tabs,
TabList,
Tab,
Text,
TabPanel,
TabPanels,
} from '@chakra-ui/react';
import { FC } from 'react'; import { FC } from 'react';
import { import { DOWNLOAD_TABS, DOWNLOAD_TAB_COLUMN_HEADERS } from '../../../constants';
DOWNLOAD_TABS,
DOWNLOAD_TAB_COLUMN_HEADERS
} from '../../../constants'
import { DataTable } from '../DataTable' import { DataTable } from '../../UI';
interface Props { interface Props {
data: any data: any;
} }
export const DownloadsTable: FC<Props> = ({ export const DownloadsTable: FC<Props> = ({ data }) => {
data
}) => {
return ( return (
<Stack <Stack sx={{ mt: '0 !important' }} borderBottom='2px solid' borderColor='brand.light.primary'>
sx={{ mt: '0 !important' }}
borderBottom='2px solid'
borderColor='brand.light.primary'
>
<Tabs variant='unstyled'> <Tabs variant='unstyled'>
<TabList <TabList color='brand.light.primary' bg='green.50'>
color='brand.light.primary' {DOWNLOAD_TABS.map((tab, idx) => {
bg='green.50'
>
{
DOWNLOAD_TABS.map((tab, idx) => {
return ( return (
<Tab <Tab
key={tab} key={tab}
@ -43,57 +22,35 @@ export const DownloadsTable: FC<Props> = ({
p={4} p={4}
_selected={{ _selected={{
bg: 'brand.light.primary', bg: 'brand.light.primary',
color: 'yellow.50', color: 'yellow.50'
}} }}
borderBottom='2px solid' borderBottom='2px solid'
borderRight={ borderRight={idx === DOWNLOAD_TABS.length - 1 ? 'none' : '2px solid'}
idx === (DOWNLOAD_TABS.length - 1)
?'none'
:'2px solid'
}
borderColor='brand.light.primary' borderColor='brand.light.primary'
> >
<Text textStyle='download-tab-label'> <Text textStyle='download-tab-label'>{tab}</Text>
{tab}
</Text>
</Tab> </Tab>
) );
}) })}
}
</TabList> </TabList>
<TabPanels> <TabPanels>
<TabPanel p={0}> <TabPanel p={0}>
<DataTable <DataTable columnHeaders={DOWNLOAD_TAB_COLUMN_HEADERS} data={data} />
columnHeaders={DOWNLOAD_TAB_COLUMN_HEADERS}
data={data}
/>
</TabPanel> </TabPanel>
<TabPanel p={0}> <TabPanel p={0}>
<DataTable <DataTable columnHeaders={DOWNLOAD_TAB_COLUMN_HEADERS} data={data} />
columnHeaders={DOWNLOAD_TAB_COLUMN_HEADERS}
data={data}
/>
</TabPanel> </TabPanel>
<TabPanel p={0}> <TabPanel p={0}>
<DataTable <DataTable columnHeaders={DOWNLOAD_TAB_COLUMN_HEADERS} data={data} />
columnHeaders={DOWNLOAD_TAB_COLUMN_HEADERS}
data={data}
/>
</TabPanel> </TabPanel>
<TabPanel p={0}> <TabPanel p={0}>
<DataTable <DataTable columnHeaders={DOWNLOAD_TAB_COLUMN_HEADERS} data={data} />
columnHeaders={DOWNLOAD_TAB_COLUMN_HEADERS}
data={data}
/>
</TabPanel> </TabPanel>
<TabPanel p={0}> <TabPanel p={0}>
<DataTable <DataTable columnHeaders={DOWNLOAD_TAB_COLUMN_HEADERS} data={data} />
columnHeaders={DOWNLOAD_TAB_COLUMN_HEADERS}
data={data}
/>
</TabPanel> </TabPanel>
</TabPanels> </TabPanels>
</Tabs> </Tabs>
</Stack> </Stack>
) );
} };

@ -1,3 +1,3 @@
export * from './DownloadsHero'; export * from './DownloadsHero';
export * from './DownloadsSection' export * from './DownloadsSection';
export * from './DownloadsTable' export * from './DownloadsTable';

@ -3,7 +3,14 @@ import { FC } from 'react';
export const Gopher: FC = () => { export const Gopher: FC = () => {
return ( return (
<Stack alignItems='center' p={4} border='2px solid' borderColor='brand.light.primary'> <Stack
justifyContent='center'
alignItems='center'
p={4}
border='2px solid'
borderColor='brand.light.primary'
h='100%'
>
<Image src='/images/pages/gopher-home-side-mobile.svg' alt='Gopher greeting' /> <Image src='/images/pages/gopher-home-side-mobile.svg' alt='Gopher greeting' />
</Stack> </Stack>
); );

@ -6,13 +6,22 @@ import { DOCS_PAGE, DOWNLOADS_PAGE } from '../../../constants';
export const HomeHero: FC = () => { export const HomeHero: FC = () => {
return ( return (
<Stack border='2px solid' borderColor='brand.light.primary' px={4} py={{ base: 8, md: 5 }}> <Stack
border='2px solid'
borderColor='brand.light.primary'
px={4}
py={{ base: 8, md: 24, lg: 48 }}
flexGrow={1}
>
<Box mb={4}> <Box mb={4}>
<Box <Box
as='h1' as='h1'
textStyle='h1' textStyle='h1'
mb={{ base: 2, md: 4 }} mb={{ base: 2, md: 4 }}
textAlign={{ base: 'center', md: 'left' }} textAlign={{ base: 'center', md: 'left' }}
fontSize={{ base: '3rem', md: '6rem'}}
lineHeight={{ md: '6rem' }}
fontWeight='500'
> >
go-ethereum go-ethereum
</Box> </Box>

@ -20,7 +20,7 @@ export const HomeSection: FC<Props> = ({
children children
}) => { }) => {
return ( return (
<Stack border='2px solid' borderColor='brand.light.primary'> <Stack border='2px solid' borderColor='brand.light.primary' h='100%'>
{!!imgSrc && ( {!!imgSrc && (
<Stack alignItems='center' p={4} borderBottom='2px solid' borderColor='brand.light.primary'> <Stack alignItems='center' p={4} borderBottom='2px solid' borderColor='brand.light.primary'>
{/* TODO: use NextImage */} {/* TODO: use NextImage */}
@ -45,6 +45,7 @@ export const HomeSection: FC<Props> = ({
borderBottom='2px solid' borderBottom='2px solid'
borderColor='brand.light.primary' borderColor='brand.light.primary'
sx={{ mt: '0 !important' }} sx={{ mt: '0 !important' }}
h='100%'
> >
{children} {children}
</Stack> </Stack>

@ -13,7 +13,10 @@ export const QuickLinks: FC = () => {
</Box> </Box>
</Stack> </Stack>
<Grid templateColumns='repeat(2, 1fr)' sx={{ mt: '0 !important' }}> <Grid
templateColumns={{ base: 'repeat(2, 1fr)', md: '1fr auto' }}
sx={{ mt: '0 !important' }}
>
{/* get started */} {/* get started */}
<GridItem <GridItem
borderRight='2px solid' borderRight='2px solid'

@ -0,0 +1,67 @@
import { Box, Grid, GridItem, Image, Link, Stack, Text } from '@chakra-ui/react';
import { FC } from 'react';
import NextLink from 'next/link';
import { ETHEREUM_ORG_URL } from '../../../constants';
interface Props {
children: React.ReactNode;
}
export const WhatIsEthereum: FC<Props> = ({ children }) => {
return (
<Stack border='2px solid' borderColor='brand.light.primary'>
<Grid
templateColumns={{ base: 'repeat(1, 1fr)', md: 'repeat(2, 1fr)' }}
borderBottom={{ base: 'none', md: '2px solid #11866f' }}
>
<GridItem
borderRight={{ base: 'none', md: '2px solid #11866f' }}
order={{ base: 2, md: 1 }}
>
<Stack
p={4}
borderBottom='2px solid'
borderColor='brand.light.primary'
sx={{ mt: '0 !important' }}
>
<Box as='h2' textStyle='h2'>
What is Ethereum
</Box>
</Stack>
<Stack
p={4}
borderBottom={{ base: '2px solid', md: 'none' }}
borderColor='brand.light.primary'
sx={{ mt: '0 !important' }}
>
{children}
</Stack>
</GridItem>
<GridItem order={{ base: 1, md: 2 }}>
<Stack
justifyContent='center'
alignItems='center'
p={4}
borderBottom={{ base: '2px solid', md: 'none' }}
borderColor='brand.light.primary'
h='100%'
>
{/* TODO: use NextImage */}
<Image src='/images/pages/glyph-home-light.svg' alt='Ethereum glyph' />
</Stack>
</GridItem>
</Grid>
<Stack sx={{ mt: '0 !important' }}>
<NextLink href={ETHEREUM_ORG_URL} passHref>
<Link variant='button-link-secondary' isExternal>
<Text textStyle='home-section-link-label'>Learn more on Ethereum.org</Text>
</Link>
</NextLink>
</Stack>
</Stack>
);
};

@ -0,0 +1,64 @@
import { Box, Grid, GridItem, Image, Link, Stack, Text } from '@chakra-ui/react';
import { FC } from 'react';
import NextLink from 'next/link';
import { ETHEREUM_ORG_RUN_A_NODE_URL } from '../../../constants';
interface Props {
children: React.ReactNode;
}
export const WhyRunANode: FC<Props> = ({ children }) => {
return (
<Stack border='2px solid' borderColor='brand.light.primary'>
<Grid
templateColumns={{ base: 'repeat(1, 1fr)', md: 'repeat(2, 1fr)' }}
borderBottom={{ base: 'none', md: '2px solid #11866f' }}
>
<GridItem order={{ base: 1, md: 2 }}>
<Stack
p={4}
borderBottom='2px solid'
borderColor='brand.light.primary'
sx={{ mt: '0 !important' }}
>
<Box as='h2' textStyle='h2'>
Why run a node?
</Box>
</Stack>
<Stack
p={4}
borderBottom={{ base: '2px solid', md: 'none' }}
borderColor='brand.light.primary'
sx={{ mt: '0 !important' }}
>
{children}
</Stack>
</GridItem>
<GridItem rowSpan={2}>
<Stack
justifyContent='center'
alignItems='center'
p={4}
borderBottom={{ base: '2px solid #11866f', md: 'none' }}
borderRight={{ base: 'none', md: '2px solid #11866f' }}
h='100%'
>
{/* TODO: use NextImage */}
<Image src='/images/pages/gopher-home-nodes.svg' alt='Gopher staring at nodes' />
</Stack>
</GridItem>
</Grid>
<Stack sx={{ mt: '0 !important' }}>
<NextLink href={ETHEREUM_ORG_RUN_A_NODE_URL} passHref>
<Link variant='button-link-secondary' isExternal>
<Text textStyle='home-section-link-label'>Read more about running a node</Text>
</Link>
</NextLink>
</Stack>
</Stack>
);
};

@ -1,4 +1,6 @@
export * from './Gopher'; export * from './Gopher';
export * from './HomeHero'; export * from './HomeHero';
export * from './HomeSection'; export * from './HomeSection';
export * from './WhatIsEthereum';
export * from './WhyRunANode';
export * from './QuickLinks'; export * from './QuickLinks';

@ -0,0 +1,16 @@
import { createIcon } from '@chakra-ui/icons';
export const HamburguerIcon = createIcon({
displayName: 'HamburguerIcon',
viewBox: '0 0 22 14',
path: (
<svg width={22} height={14} fill='none' xmlns='http://www.w3.org/2000/svg'>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M0 .5h22v.97H0V.5Zm0 6.017h22v.97H0v-.97Zm22 6.013H0v.97h22v-.97Z'
fill='#11866F'
/>
</svg>
)
});

@ -0,0 +1,14 @@
import { createIcon } from '@chakra-ui/icons';
export const LensIcon = createIcon({
displayName: 'LensIcon',
viewBox: '0 0 17 18',
path: (
<svg width={17} height={18} fill='none' xmlns='http://www.w3.org/2000/svg'>
<path
d='M12.15 11.192h-.768l-.272-.263a6.29 6.29 0 0 0 1.526-4.111 6.317 6.317 0 1 0-6.318 6.318 6.29 6.29 0 0 0 4.111-1.526l.263.272v.768l4.86 4.85L17 16.052l-4.85-4.86Zm-5.832 0a4.368 4.368 0 0 1-4.374-4.374 4.368 4.368 0 0 1 4.374-4.374 4.368 4.368 0 0 1 4.374 4.374 4.368 4.368 0 0 1-4.374 4.374Z'
fill='#11866F'
/>
</svg>
)
});

@ -0,0 +1,14 @@
import { createIcon } from '@chakra-ui/icons';
export const MoonIcon = createIcon({
displayName: 'MoonIcon',
viewBox: '0 0 22 22',
path: (
<svg width={22} height={22} fill='none' xmlns='http://www.w3.org/2000/svg'>
<path
d='M8.333.334C6.392.334 4.568.867 3 1.774c3.19 1.845 5.333 5.28 5.333 9.227 0 3.946-2.144 7.381-5.333 9.226a10.638 10.638 0 0 0 5.333 1.44C14.221 21.667 19 16.89 19 11.001 19 5.113 14.221.334 8.333.334Z'
fill='#11866F'
/>
</svg>
)
});

@ -0,0 +1,6 @@
export * from './DiscordIcon'
export * from './GitHubIcon'
export * from './HamburguerIcon';
export * from './LensIcon';
export * from './MoonIcon';
export * from './TwitterIcon'

@ -1,3 +0,0 @@
export * from './DiscordIcon'
export * from './GitHubIcon'
export * from './TwitterIcon'

@ -0,0 +1,2 @@
export * from './DataTable';
export * from './Header';

@ -1,4 +1,4 @@
import { Box, Flex, Link, Stack, Text } from '@chakra-ui/react'; import { Flex, Link, Stack, Text } from '@chakra-ui/react';
import { FC } from 'react'; import { FC } from 'react';
import NextLink from 'next/link'; import NextLink from 'next/link';

@ -1,24 +1,20 @@
// Libraries
import { Container } from '@chakra-ui/react'; import { Container } from '@chakra-ui/react';
import { FC } from 'react'; import { FC } from 'react';
// Components
import { Header } from '../UI';
import { Footer } from './Footer' import { Footer } from './Footer'
interface Props { interface Props {
children?: React.ReactNode; children?: React.ReactNode;
} }
// TODO: if mobile, getMobileLayout, else getDesktopLayout
export const Layout: FC<Props> = ({ children }) => { export const Layout: FC<Props> = ({ children }) => {
return ( return (
<Container <Container maxW={{ base: 'container.sm', md: 'container.2xl' }} my={7}>
maxW={{ <Header />
sm: 'container.sm',
md: 'container.md',
lg: 'container.lg',
xl: 'container.xl'
}}
my={7}
>
{children} {children}
<Footer /> <Footer />

@ -15,7 +15,9 @@ export const GO_URL = 'https://go.dev/';
// Downloads // Downloads
export const DEFAULT_BUILD_AMOUNT_TO_SHOW = 10; export const DEFAULT_BUILD_AMOUNT_TO_SHOW = 10;
export const DOWNLOAD_HEADER_BUTTONS: {[index: string]: {name: string; image: string; imageAlt: string; buildURL: string;}} = { export const DOWNLOAD_HEADER_BUTTONS: {
[index: string]: { name: string; image: string; imageAlt: string; buildURL: string };
} = {
linuxBuild: { linuxBuild: {
name: 'Linux', name: 'Linux',
image: '/images/pages/linux-penguin.svg', image: '/images/pages/linux-penguin.svg',
@ -40,14 +42,8 @@ export const DOWNLOAD_HEADER_BUTTONS: {[index: string]: {name: string; image: st
imageAlt: 'Source branch logo', imageAlt: 'Source branch logo',
buildURL: '' buildURL: ''
} }
} };
export const DOWNLOAD_TABS = [ export const DOWNLOAD_TABS = ['Linux', 'macOS', 'Windows', 'iOS', 'Android'];
'Linux',
'macOS',
'Windows',
'iOS',
'Android'
]
export const DOWNLOAD_TAB_COLUMN_HEADERS = [ export const DOWNLOAD_TAB_COLUMN_HEADERS = [
'Release', 'Release',
'Commit', 'Commit',
@ -57,16 +53,16 @@ export const DOWNLOAD_TAB_COLUMN_HEADERS = [
'Published', 'Published',
'Signature', 'Signature',
'Checksum (MD5)' 'Checksum (MD5)'
] ];
export const DOWNLOAD_OPENPGP_BUILD_HEADERS = [ export const DOWNLOAD_OPENPGP_BUILD_HEADERS = [
'Build Server', 'Build Server',
'Unique ID', 'Unique ID',
'OpenPGP Key', 'OpenPGP Key',
'Fingerprint' 'Fingerprint'
] ];
export const DOWNLOAD_OPENPGP_DEVELOPER_HEADERS = [ export const DOWNLOAD_OPENPGP_DEVELOPER_HEADERS = [
'Developer', 'Developer',
'Unique ID', 'Unique ID',
'OpenPGP Key', 'OpenPGP Key',
'Fingerprint' 'Fingerprint'
] ];

@ -7,7 +7,7 @@ export const testDownloadData = [
size: '11.71 MB', size: '11.71 MB',
published: 'Last Wednesday at 11:11 AM', published: 'Last Wednesday at 11:11 AM',
signature: 'Signature', signature: 'Signature',
"checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' 'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
}, },
{ {
release: 'Geth 1.10.23', release: 'Geth 1.10.23',
@ -17,7 +17,7 @@ export const testDownloadData = [
size: '11.71 MB', size: '11.71 MB',
published: 'Last Wednesday at 11:11 AM', published: 'Last Wednesday at 11:11 AM',
signature: 'Signature', signature: 'Signature',
"checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' 'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
}, },
{ {
release: 'Geth 1.10.23', release: 'Geth 1.10.23',
@ -27,7 +27,7 @@ export const testDownloadData = [
size: '11.71 MB', size: '11.71 MB',
published: 'Last Wednesday at 11:11 AM', published: 'Last Wednesday at 11:11 AM',
signature: 'Signature', signature: 'Signature',
"checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' 'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
}, },
{ {
release: 'Geth 1.10.23', release: 'Geth 1.10.23',
@ -37,7 +37,7 @@ export const testDownloadData = [
size: '11.71 MB', size: '11.71 MB',
published: 'Last Wednesday at 11:11 AM', published: 'Last Wednesday at 11:11 AM',
signature: 'Signature', signature: 'Signature',
"checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' 'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
}, },
{ {
release: 'Geth 1.10.23', release: 'Geth 1.10.23',
@ -47,7 +47,7 @@ export const testDownloadData = [
size: '11.71 MB', size: '11.71 MB',
published: 'Last Wednesday at 11:11 AM', published: 'Last Wednesday at 11:11 AM',
signature: 'Signature', signature: 'Signature',
"checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' 'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
}, },
{ {
release: 'Geth 1.10.23', release: 'Geth 1.10.23',
@ -57,7 +57,7 @@ export const testDownloadData = [
size: '11.71 MB', size: '11.71 MB',
published: 'Last Wednesday at 11:11 AM', published: 'Last Wednesday at 11:11 AM',
signature: 'Signature', signature: 'Signature',
"checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' 'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
}, },
{ {
release: 'Geth 1.10.23', release: 'Geth 1.10.23',
@ -67,7 +67,7 @@ export const testDownloadData = [
size: '11.71 MB', size: '11.71 MB',
published: 'Last Wednesday at 11:11 AM', published: 'Last Wednesday at 11:11 AM',
signature: 'Signature', signature: 'Signature',
"checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' 'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
}, },
{ {
release: 'Geth 1.10.23', release: 'Geth 1.10.23',
@ -77,7 +77,7 @@ export const testDownloadData = [
size: '11.71 MB', size: '11.71 MB',
published: 'Last Wednesday at 11:11 AM', published: 'Last Wednesday at 11:11 AM',
signature: 'Signature', signature: 'Signature',
"checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' 'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
}, },
{ {
release: 'Geth 1.10.23', release: 'Geth 1.10.23',
@ -87,7 +87,7 @@ export const testDownloadData = [
size: '11.71 MB', size: '11.71 MB',
published: 'Last Wednesday at 11:11 AM', published: 'Last Wednesday at 11:11 AM',
signature: 'Signature', signature: 'Signature',
"checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' 'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
}, },
{ {
release: 'Geth 1.10.23', release: 'Geth 1.10.23',
@ -97,7 +97,7 @@ export const testDownloadData = [
size: '11.71 MB', size: '11.71 MB',
published: 'Last Wednesday at 11:11 AM', published: 'Last Wednesday at 11:11 AM',
signature: 'Signature', signature: 'Signature',
"checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' 'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
}, },
{ {
release: 'Geth 1.10.23', release: 'Geth 1.10.23',
@ -107,7 +107,7 @@ export const testDownloadData = [
size: '11.71 MB', size: '11.71 MB',
published: 'Last Wednesday at 11:11 AM', published: 'Last Wednesday at 11:11 AM',
signature: 'Signature', signature: 'Signature',
"checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' 'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
}, },
{ {
release: 'Geth 1.10.23', release: 'Geth 1.10.23',
@ -117,6 +117,6 @@ export const testDownloadData = [
size: '11.71 MB', size: '11.71 MB',
published: 'Last Wednesday at 11:11 AM', published: 'Last Wednesday at 11:11 AM',
signature: 'Signature', signature: 'Signature',
"checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' 'checksum (md5)': 'c93b0339413a8f2b95aa4b23b32d64af'
}, }
] ];

@ -1,32 +1,32 @@
export const pgpBuildTestData = [ export const pgpBuildTestData = [
{ {
"build server": "Android Builder", 'build server': 'Android Builder',
"unique id": "Go Ethereum Android Builder <geth-ci@ethereum.org>", 'unique id': 'Go Ethereum Android Builder <geth-ci@ethereum.org>',
"openpgp key": "F9585DE6", 'openpgp key': 'F9585DE6',
"fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6'
}, },
{ {
"build server": "iOS Builder", 'build server': 'iOS Builder',
"unique id": "Go Ethereum iOS Builder <geth-ci@ethereum.org>", 'unique id': 'Go Ethereum iOS Builder <geth-ci@ethereum.org>',
"openpgp key": "F9585DE6", 'openpgp key': 'F9585DE6',
"fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6'
}, },
{ {
"build server": "Linux Builder", 'build server': 'Linux Builder',
"unique id": "Go Ethereum Linux Builder <geth-ci@ethereum.org>", 'unique id': 'Go Ethereum Linux Builder <geth-ci@ethereum.org>',
"openpgp key": "F9585DE6", 'openpgp key': 'F9585DE6',
"fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6'
}, },
{ {
"build server": "macOS Builder", 'build server': 'macOS Builder',
"unique id": "Go Ethereum macOS Builder <geth-ci@ethereum.org>", 'unique id': 'Go Ethereum macOS Builder <geth-ci@ethereum.org>',
"openpgp key": "F9585DE6", 'openpgp key': 'F9585DE6',
"fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6'
}, },
{ {
"build server": "Windows Builder", 'build server': 'Windows Builder',
"unique id": "Go Ethereum Windows Builder <geth-ci@ethereum.org>", 'unique id': 'Go Ethereum Windows Builder <geth-ci@ethereum.org>',
"openpgp key": "F9585DE6", 'openpgp key': 'F9585DE6',
"fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6'
}, }
] ];

@ -1,20 +1,20 @@
export const pgpDeveloperTestData = [ export const pgpDeveloperTestData = [
{ {
"developer": "Felix Lange", developer: 'Felix Lange',
"unique id": "Felix Lange <fjl@ethereum.org>", 'unique id': 'Felix Lange <fjl@ethereum.org>',
"openpgp key": "F9585DE6", 'openpgp key': 'F9585DE6',
"fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6'
}, },
{ {
"developer": "Martin Holst Swende", developer: 'Martin Holst Swende',
"unique id": "Martin Holst Swende <martin.swende@ethereum.org>", 'unique id': 'Martin Holst Swende <martin.swende@ethereum.org>',
"openpgp key": "F9585DE6", 'openpgp key': 'F9585DE6',
"fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6'
}, },
{ {
"developer": "Péter Szilágyi", developer: 'Péter Szilágyi',
"unique id": "Péter Szilágyi <peter@ethereum.org>", 'unique id': 'Péter Szilágyi <peter@ethereum.org>',
"openpgp key": "F9585DE6", 'openpgp key': 'F9585DE6',
"fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" fingerprint: '8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6'
}, }
] ];

@ -12,4 +12,3 @@ This is where you will find information about how to manage a Geth node and unde
For example, the pages here will help you to understand the underlying architecture of your Geth node, how to start it in different configurations using command line options, how to sync the blockchain and how to manage accounts. There is a page on security practices that will help you to keep your Geth node safe from adversaries. For example, the pages here will help you to understand the underlying architecture of your Geth node, how to start it in different configurations using command line options, how to sync the blockchain and how to manage accounts. There is a page on security practices that will help you to keep your Geth node safe from adversaries.
Note also that there is a page explaining common log messages that are often queried on the Geth discord and Github - this will help users to interpret the messages displayed to the console and know what actions to take. Note also that there is a page explaining common log messages that are often queried on the Geth discord and Github - this will help users to interpret the messages displayed to the console and know what actions to take.

@ -1,43 +1,32 @@
import { import { Code, Link, ListItem, Stack, Text, UnorderedList } from '@chakra-ui/react';
Code,
Link,
ListItem,
Stack,
Text,
UnorderedList,
} from '@chakra-ui/react';
import type { NextPage } from 'next'; import type { NextPage } from 'next';
import { useState } from 'react' import { useState } from 'react';
import { import { DownloadsHero, DownloadsSection, DownloadsTable } from '../components/UI/downloads';
DownloadsHero, import { DataTable } from '../components/UI';
DownloadsSection,
DownloadsTable,
} from '../components/UI/downloads';
import { DataTable } from '../components/UI/DataTable';
import { import {
DEFAULT_BUILD_AMOUNT_TO_SHOW, DEFAULT_BUILD_AMOUNT_TO_SHOW,
DOWNLOAD_OPENPGP_BUILD_HEADERS, DOWNLOAD_OPENPGP_BUILD_HEADERS,
DOWNLOAD_OPENPGP_DEVELOPER_HEADERS, DOWNLOAD_OPENPGP_DEVELOPER_HEADERS,
GETH_REPO_URL GETH_REPO_URL
} from '../constants' } from '../constants';
import { testDownloadData } from '../data/test/download-testdata' import { testDownloadData } from '../data/test/download-testdata';
import { pgpBuildTestData } from '../data/test/pgpbuild-testdata'; import { pgpBuildTestData } from '../data/test/pgpbuild-testdata';
import { pgpDeveloperTestData } from '../data/test/pgpdeveloper-testdata'; import { pgpDeveloperTestData } from '../data/test/pgpdeveloper-testdata';
const DownloadsPage: NextPage = () => { const DownloadsPage: NextPage = () => {
const [amountStableReleases, updateAmountStables] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW) const [amountStableReleases, updateAmountStables] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW);
const [amountDevelopBuilds, updateAmountDevelopBuilds] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW) const [amountDevelopBuilds, updateAmountDevelopBuilds] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW);
const showMoreStableReleases = () => { const showMoreStableReleases = () => {
updateAmountStables(amountStableReleases+10) updateAmountStables(amountStableReleases + 10);
} };
const showMoreDevelopBuilds = () => { const showMoreDevelopBuilds = () => {
updateAmountDevelopBuilds(amountDevelopBuilds+10) updateAmountDevelopBuilds(amountDevelopBuilds + 10);
} };
return ( return (
<> <>
@ -49,11 +38,17 @@ const DownloadsPage: NextPage = () => {
<DownloadsHero <DownloadsHero
currentBuildName={'Sentry Omega'} currentBuildName={'Sentry Omega'}
currentBuildVersion={'v1.10.23'} currentBuildVersion={'v1.10.23'}
linuxBuildURL={'https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.25-69568c55.tar.gz'} linuxBuildURL={
macOSBuildURL={'https://gethstore.blob.core.windows.net/builds/geth-darwin-amd64-1.10.25-69568c55.tar.gz'} 'https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.25-69568c55.tar.gz'
}
macOSBuildURL={
'https://gethstore.blob.core.windows.net/builds/geth-darwin-amd64-1.10.25-69568c55.tar.gz'
}
releaseNotesURL={''} releaseNotesURL={''}
sourceCodeURL={'https://github.com/ethereum/go-ethereum/archive/v1.10.25.tar.gz'} sourceCodeURL={'https://github.com/ethereum/go-ethereum/archive/v1.10.25.tar.gz'}
windowsBuildURL={'https://gethstore.blob.core.windows.net/builds/geth-windows-amd64-1.10.25-69568c55.exe'} windowsBuildURL={
'https://gethstore.blob.core.windows.net/builds/geth-windows-amd64-1.10.25-69568c55.exe'
}
/> />
<DownloadsSection <DownloadsSection
@ -64,7 +59,8 @@ const DownloadsPage: NextPage = () => {
> >
<Stack p={4}> <Stack p={4}>
<Text textStyle='quick-link-text'> <Text textStyle='quick-link-text'>
If you&apos;re looking for a specific release, operating system or architecture, below you will find: If you&apos;re looking for a specific release, operating system or architecture,
below you will find:
</Text> </Text>
<UnorderedList px={4}> <UnorderedList px={4}>
@ -86,11 +82,11 @@ const DownloadsPage: NextPage = () => {
</UnorderedList> </UnorderedList>
<Text textStyle='quick-link-text'> <Text textStyle='quick-link-text'>
Please select your desired platform from the lists below and download your bundle of choice. Please be aware that the MD5 checksums are provided by our binary hosting platform (Azure Blobstore) to help check for download errors. For security guarantees please verify any downloads via the attached PGP signature files (see{' '} Please select your desired platform from the lists below and download your bundle of
<Link choice. Please be aware that the MD5 checksums are provided by our binary hosting
href={'#pgpsignatures'} platform (Azure Blobstore) to help check for download errors. For security
variant='light' guarantees please verify any downloads via the attached PGP signature files (see{' '}
> <Link href={'#pgpsignatures'} variant='light'>
OpenPGP OpenPGP
</Link>{' '} </Link>{' '}
Signatures for details). Signatures for details).
@ -101,12 +97,9 @@ const DownloadsPage: NextPage = () => {
<DownloadsSection sectionTitle='Stable releases' id='stablereleases'> <DownloadsSection sectionTitle='Stable releases' id='stablereleases'>
<Stack p={4} borderBottom='2px solid' borderColor='brand.light.primary'> <Stack p={4} borderBottom='2px solid' borderColor='brand.light.primary'>
<Text textStyle='quick-link-text'> <Text textStyle='quick-link-text'>
These are the current and previous stable releases of go-ethereum, updated automatically when a new version is tagged in our{' '} These are the current and previous stable releases of go-ethereum, updated
<Link automatically when a new version is tagged in our{' '}
href={GETH_REPO_URL} <Link href={GETH_REPO_URL} isExternal variant='light'>
isExternal
variant='light'
>
GitHub repository. GitHub repository.
</Link> </Link>
</Text> </Text>
@ -133,12 +126,9 @@ const DownloadsPage: NextPage = () => {
<DownloadsSection sectionTitle='Develop builds' id='developbuilds'> <DownloadsSection sectionTitle='Develop builds' id='developbuilds'>
<Stack p={4} borderBottom='2px solid' borderColor='brand.light.primary'> <Stack p={4} borderBottom='2px solid' borderColor='brand.light.primary'>
<Text textStyle='quick-link-text'> <Text textStyle='quick-link-text'>
These are the develop snapshots of go-ethereum, updated automatically when a new commit is pushed into our{' '} These are the develop snapshots of go-ethereum, updated automatically when a new
<Link commit is pushed into our{' '}
href={GETH_REPO_URL} <Link href={GETH_REPO_URL} isExternal variant='light'>
isExternal
variant='light'
>
GitHub repository. GitHub repository.
</Link> </Link>
</Text> </Text>
@ -171,10 +161,7 @@ const DownloadsPage: NextPage = () => {
{/* TODO: swap for real data */} {/* TODO: swap for real data */}
<Stack borderBottom='2px solid' borderColor='brand.light.primary'> <Stack borderBottom='2px solid' borderColor='brand.light.primary'>
<DataTable <DataTable columnHeaders={DOWNLOAD_OPENPGP_BUILD_HEADERS} data={pgpBuildTestData} />
columnHeaders={DOWNLOAD_OPENPGP_BUILD_HEADERS}
data={pgpBuildTestData}
/>
</Stack> </Stack>
{/* TODO: swap for real data */} {/* TODO: swap for real data */}
@ -189,41 +176,39 @@ const DownloadsPage: NextPage = () => {
<DownloadsSection sectionTitle='Importing keys and verifying builds' id='importingkeys'> <DownloadsSection sectionTitle='Importing keys and verifying builds' id='importingkeys'>
<Stack p={4} borderBottom='2px solid' borderColor='brand.light.primary'> <Stack p={4} borderBottom='2px solid' borderColor='brand.light.primary'>
<Text textStyle='quick-link-text'> <Text textStyle='quick-link-text'>
You can import the build server public keys by grabbing the individual keys directly from the keyserver network: You can import the build server public keys by grabbing the individual keys directly
from the keyserver network:
</Text> </Text>
{/* TODO: These keys depends on the binary */} {/* TODO: These keys depends on the binary */}
<Code p={4}> <Code p={4}>gpg --recv-keys F9585DE6 C2FF8BBF 9BA28146 7B9E2481 D2A67EAC</Code>
gpg --recv-keys F9585DE6 C2FF8BBF 9BA28146 7B9E2481 D2A67EAC
</Code>
</Stack> </Stack>
<Stack p={4} borderBottom='2px solid' borderColor='brand.light.primary'> <Stack p={4} borderBottom='2px solid' borderColor='brand.light.primary'>
<Text textStyle='quick-link-text'> <Text textStyle='quick-link-text'>
Similarly you can import all the developer public keys by grabbing them directly from the keyserver network: Similarly you can import all the developer public keys by grabbing them directly
from the keyserver network:
</Text> </Text>
{/* TODO: These are developer keys, do we need to change? */} {/* TODO: These are developer keys, do we need to change? */}
<Code p={4}> <Code p={4}>gpg --recv-keys E058A81C 05A5DDF0 1CCB7DD2</Code>
gpg --recv-keys E058A81C 05A5DDF0 1CCB7DD2
</Code>
</Stack> </Stack>
<Stack p={4}> <Stack p={4}>
<Text textStyle='quick-link-text'> <Text textStyle='quick-link-text'>
From the download listings above you should see a link both to the downloadable archives as well as detached signature files. To verify the authenticity of any downloaded data, grab both files and then run: From the download listings above you should see a link both to the downloadable
archives as well as detached signature files. To verify the authenticity of any
downloaded data, grab both files and then run:
</Text> </Text>
{/* TODO: These keys depends on the binary */} {/* TODO: These keys depends on the binary */}
<Code p={4}> <Code p={4}>gpg --verify geth-linux-amd64-1.5.0-d0c820ac.tar.gz.asc</Code>
gpg --verify geth-linux-amd64-1.5.0-d0c820ac.tar.gz.asc
</Code>
</Stack> </Stack>
</DownloadsSection> </DownloadsSection>
</Stack> </Stack>
</main> </main>
</> </>
) );
} };
export default DownloadsPage export default DownloadsPage;

@ -1,16 +1,22 @@
import { Link, Stack, Text } from '@chakra-ui/react'; import { Box, Grid, GridItem, Link, Stack, Text } from '@chakra-ui/react';
import type { NextPage } from 'next'; import type { NextPage } from 'next';
import { Gopher, HomeHero, HomeSection, QuickLinks } from '../components/UI/homepage'; import {
Gopher,
HomeHero,
HomeSection,
QuickLinks,
WhatIsEthereum,
WhyRunANode
} from '../components/UI/homepage';
import { import {
CONTRIBUTING_PAGE, CONTRIBUTING_PAGE,
DOCS_PAGE, DOCS_PAGE,
ETHEREUM_FOUNDATION_URL, ETHEREUM_FOUNDATION_URL,
ETHEREUM_ORG_RUN_A_NODE_URL,
ETHEREUM_ORG_URL, ETHEREUM_ORG_URL,
GETH_REPO_URL, GETH_REPO_URL,
GO_URL, GO_URL
} from '../constants'; } from '../constants';
const HomePage: NextPage = ({}) => { const HomePage: NextPage = ({}) => {
@ -22,6 +28,8 @@ const HomePage: NextPage = ({}) => {
<Stack spacing={4}> <Stack spacing={4}>
<HomeHero /> <HomeHero />
<Grid templateColumns={{ base: 'repeat(1, 1fr)', lg: 'repeat(2, 1fr)' }} gap={4}>
<GridItem rowSpan={2}>
{/* SECTION: What is Geth */} {/* SECTION: What is Geth */}
<HomeSection <HomeSection
imgSrc='/images/pages/gopher-home-front.svg' imgSrc='/images/pages/gopher-home-front.svg'
@ -43,9 +51,9 @@ const HomePage: NextPage = ({}) => {
</Text> </Text>
<Text fontFamily='"Inter", sans-serif' lineHeight='26px'> <Text fontFamily='"Inter", sans-serif' lineHeight='26px'>
Geth has been a core part of Etheruem since the very beginning. Geth was one of the Geth has been a core part of Etheruem since the very beginning. Geth was one of
original Ethereum implementations making it the most battle-hardened and tested the original Ethereum implementations making it the most battle-hardened and
client. tested client.
</Text> </Text>
<Text fontFamily='"Inter", sans-serif' lineHeight='26px'> <Text fontFamily='"Inter", sans-serif' lineHeight='26px'>
@ -65,41 +73,37 @@ const HomePage: NextPage = ({}) => {
Running Geth alongside a consensus client turns a computer into an Ethereum node. Running Geth alongside a consensus client turns a computer into an Ethereum node.
</Text> </Text>
</HomeSection> </HomeSection>
</GridItem>
{/* SECTION: What is Ethereum */} <GridItem>
<HomeSection {/* SECTION: What is Ethereum (has different styles than the other sections so it uses a different component) */}
imgSrc='/images/pages/glyph-home-light.svg' <WhatIsEthereum>
imgAltText='Ethereum glyph'
sectionTitle='What is Ethereum'
linkLabel='Learn more on Ethereum.org'
buttonHref={ETHEREUM_ORG_URL}
>
<Text fontFamily='"Inter", sans-serif' lineHeight='26px'> <Text fontFamily='"Inter", sans-serif' lineHeight='26px'>
Ethereum is a technology for building apps and organizations, holding assets, Ethereum is a technology for building apps and organizations, holding assets,
transacting and communicating without being controlled by a central authority. It is transacting and communicating without being controlled by a central authority. It
the base of a new, decentralized internet. is the base of a new, decentralized internet.
</Text> </Text>
</HomeSection> </WhatIsEthereum>
</GridItem>
{/* SECTION: Why run a Node */} <GridItem>
<HomeSection {/* SECTION: Why run a node (has different styles than the other sections so it uses a different component) */}
imgSrc='/images/pages/gopher-home-nodes.svg' <WhyRunANode>
imgAltText='Gopher staring at nodes'
sectionTitle='Why run a node?'
linkLabel='Read more about running a node'
buttonHref={ETHEREUM_ORG_RUN_A_NODE_URL}
>
<Text fontFamily='"Inter", sans-serif' lineHeight='26px'> <Text fontFamily='"Inter", sans-serif' lineHeight='26px'>
Running your own node enables you to use Ethereum in a truly private, self-sufficient Running your own node enables you to use Ethereum in a truly private,
and trustless manner. You don&apos;t need to trust information you receive because you self-sufficient and trustless manner. You don&apos;t need to trust information you
can verify the data yourself using your Geth instance. receive because you can verify the data yourself using your Geth instance.
</Text> </Text>
<Text fontFamily='"Inter", sans-serif' lineHeight='26px' fontWeight={700}> <Text fontFamily='"Inter", sans-serif' lineHeight='26px' fontWeight={700}>
&ldquo;Don&apos;t trust, verify&rdquo; &ldquo;Don&apos;t trust, verify&rdquo;
</Text> </Text>
</HomeSection> </WhyRunANode>
</GridItem>
</Grid>
<Grid templateColumns={{ base: 'repeat(1, 1fr)', md: 'repeat(2, 1fr)' }} gap={4}>
<GridItem>
{/* SECTION: Contribute to Geth */} {/* SECTION: Contribute to Geth */}
<HomeSection <HomeSection
sectionTitle='Contribute to Geth' sectionTitle='Contribute to Geth'
@ -107,17 +111,19 @@ const HomePage: NextPage = ({}) => {
buttonHref={CONTRIBUTING_PAGE} buttonHref={CONTRIBUTING_PAGE}
> >
<Text fontFamily='"Inter", sans-serif' lineHeight='26px'> <Text fontFamily='"Inter", sans-serif' lineHeight='26px'>
We welcome contributions from anyone on the internet, and are grateful for even the We welcome contributions from anyone on the internet, and are grateful for even
smallest of fixes! If you&apos;d like to contribute to the Geth source code, please the smallest of fixes! If you&apos;d like to contribute to the Geth source code,
fork the{' '} please fork the{' '}
<Link href={GETH_REPO_URL} isExternal variant='light'> <Link href={GETH_REPO_URL} isExternal variant='light'>
Github repository Github repository
</Link> </Link>
, fix, commit and send a pull request for the maintainers to review and merge into the , fix, commit and send a pull request for the maintainers to review and merge into
main code base. the main code base.
</Text> </Text>
</HomeSection> </HomeSection>
</GridItem>
<GridItem>
{/* SECTION: About the Team */} {/* SECTION: About the Team */}
<HomeSection <HomeSection
sectionTitle='About the Team' sectionTitle='About the Team'
@ -125,15 +131,25 @@ const HomePage: NextPage = ({}) => {
buttonHref={ETHEREUM_FOUNDATION_URL} buttonHref={ETHEREUM_FOUNDATION_URL}
> >
<Text fontFamily='"Inter", sans-serif' lineHeight='26px'> <Text fontFamily='"Inter", sans-serif' lineHeight='26px'>
The Geth team comprises 10 developers distributed across the world. The Geth team is The Geth team comprises 10 developers distributed across the world. The Geth team
funded directly by The Ethereum Foundation. is funded directly by The Ethereum Foundation.
</Text> </Text>
</HomeSection> </HomeSection>
</GridItem>
</Grid>
<Grid templateColumns={{ base: 'repeat(1, 1fr)', md: '300px 1fr' }} gap={4}>
<GridItem w='auto'>
<Box h='100%'>
{/* TODO: replace with animated/video version */} {/* TODO: replace with animated/video version */}
<Gopher /> <Gopher />
</Box>
</GridItem>
<GridItem>
<QuickLinks /> <QuickLinks />
</GridItem>
</Grid>
</Stack> </Stack>
</main> </main>
</> </>

@ -1,3 +1,3 @@
export const shadows = { export const shadows = {
linkBoxShadow: '0 0 0 1px #11866f !important' linkBoxShadow: '0 0 0 1px #11866f !important'
} };

@ -15,6 +15,11 @@ export const textStyles = {
letterSpacing: '4%', letterSpacing: '4%',
color: 'brand.light.body' color: 'brand.light.body'
}, },
'header-font': {
fontFamily: '"JetBrains Mono", monospace',
fontWeight: 700,
fontSize: { base: '0.86rem', sm: '1rem' }
},
'homepage-description': { 'homepage-description': {
fontFamily: '"JetBrains Mono", monospace', fontFamily: '"JetBrains Mono", monospace',
fontWeight: 700, fontWeight: 700,
@ -63,14 +68,14 @@ export const textStyles = {
fontFamily: '"JetBrains Mono", monospace', fontFamily: '"JetBrains Mono", monospace',
color: 'yellow.50', color: 'yellow.50',
fontSize: 'xs', fontSize: 'xs',
textTransform:'uppercase', textTransform: 'uppercase'
}, },
'download-tab-label': { 'download-tab-label': {
fontFamily: '"JetBrains Mono", monospace', fontFamily: '"JetBrains Mono", monospace',
fontWeight: 700, fontWeight: 700,
textTransform: 'uppercase', textTransform: 'uppercase',
textAlign: 'center', textAlign: 'center',
fontSize: 'sm', fontSize: 'sm'
}, },
// TODO: refactor w/ semantic tokens for light/dark mode // TODO: refactor w/ semantic tokens for light/dark mode
'link-light': {}, 'link-light': {},

Loading…
Cancel
Save