From a3a2e5c319f09c3800fe8ad62432db496c3e1145 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 4 Oct 2022 23:02:21 -0600 Subject: [PATCH 01/33] downloads header --- .../pages/gopher-downloads-front-light.svg | 9 + public/images/pages/linux-penguin.svg | 3 + public/images/pages/macos-logo.svg | 3 + public/images/pages/source-branch.svg | 3 + public/images/pages/windows-logo.svg | 3 + src/components/UI/homepage/DownloadsHero.tsx | 253 ++++++++++++++++++ src/components/UI/homepage/index.ts | 1 + src/pages/downloads.md | 1 - src/pages/downloads.tsx | 33 +++ 9 files changed, 308 insertions(+), 1 deletion(-) create mode 100644 public/images/pages/gopher-downloads-front-light.svg create mode 100644 public/images/pages/linux-penguin.svg create mode 100644 public/images/pages/macos-logo.svg create mode 100644 public/images/pages/source-branch.svg create mode 100644 public/images/pages/windows-logo.svg create mode 100644 src/components/UI/homepage/DownloadsHero.tsx delete mode 100644 src/pages/downloads.md create mode 100644 src/pages/downloads.tsx diff --git a/public/images/pages/gopher-downloads-front-light.svg b/public/images/pages/gopher-downloads-front-light.svg new file mode 100644 index 0000000000..41c2984306 --- /dev/null +++ b/public/images/pages/gopher-downloads-front-light.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/images/pages/linux-penguin.svg b/public/images/pages/linux-penguin.svg new file mode 100644 index 0000000000..f66b859b43 --- /dev/null +++ b/public/images/pages/linux-penguin.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/pages/macos-logo.svg b/public/images/pages/macos-logo.svg new file mode 100644 index 0000000000..6c6180ff5e --- /dev/null +++ b/public/images/pages/macos-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/pages/source-branch.svg b/public/images/pages/source-branch.svg new file mode 100644 index 0000000000..0ae94f6e20 --- /dev/null +++ b/public/images/pages/source-branch.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/pages/windows-logo.svg b/public/images/pages/windows-logo.svg new file mode 100644 index 0000000000..13729fe7ff --- /dev/null +++ b/public/images/pages/windows-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/UI/homepage/DownloadsHero.tsx b/src/components/UI/homepage/DownloadsHero.tsx new file mode 100644 index 0000000000..fc05f60d44 --- /dev/null +++ b/src/components/UI/homepage/DownloadsHero.tsx @@ -0,0 +1,253 @@ +import { Box, Button, Heading, Image, Link, Stack, HStack, Text } from '@chakra-ui/react'; +import { FC } from 'react'; +import NextLink from 'next/link'; + +interface DownloadsHero { + currentBuildName: string + currentBuildVersion: string + linuxBuildURL: string + macOSBuildURL: string + releaseNotesURL: string + sourceCodeURL: string + windowsBuildURL: string +} + +export const DownloadsHero: FC = ({ + currentBuildName, + currentBuildVersion, + linuxBuildURL, + macOSBuildURL, + releaseNotesURL, + sourceCodeURL, + windowsBuildURL +}) => { + return ( + + + Gopher greeting + + + + + Download Go Ethereum + + + + {currentBuildName} ({currentBuildVersion}) + + + + 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're looking to install Geth and/or associated tools via your favorite package manager, please check our installation guide. + + + + + + + + + + + + + + + + + + + + + Release notes for {currentBuildName} {currentBuildVersion} + + + + + ); +}; diff --git a/src/components/UI/homepage/index.ts b/src/components/UI/homepage/index.ts index 861cb5112f..a75a03c2af 100644 --- a/src/components/UI/homepage/index.ts +++ b/src/components/UI/homepage/index.ts @@ -1,3 +1,4 @@ +export * from './DownloadsHero'; export * from './Gopher'; export * from './HomeHero'; export * from './HomeSection'; diff --git a/src/pages/downloads.md b/src/pages/downloads.md deleted file mode 100644 index 0f700ee2a1..0000000000 --- a/src/pages/downloads.md +++ /dev/null @@ -1 +0,0 @@ -beep diff --git a/src/pages/downloads.tsx b/src/pages/downloads.tsx new file mode 100644 index 0000000000..caf41e9eb1 --- /dev/null +++ b/src/pages/downloads.tsx @@ -0,0 +1,33 @@ +import { Stack } from '@chakra-ui/react'; +import type { NextPage } from 'next'; + +import { DownloadsHero } from '../components/UI/homepage'; + +import { + +} from '../constants'; + +const DownloadsPage: NextPage = ({}) => { + return ( + <> + {/* TODO: add PageMetadata */} + +
+ + +

Hello

+
+
+ + ) +} + +export default DownloadsPage \ No newline at end of file From c921c775efa8acb343c3fe2d445e9793de4860af Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 6 Oct 2022 13:38:42 -0600 Subject: [PATCH 02/33] create DownloadsSection component --- .../{homepage => downloads}/DownloadsHero.tsx | 0 .../UI/downloads/DownloadsSection.tsx | 47 +++++++++ src/components/UI/downloads/index.ts | 2 + src/components/UI/homepage/index.ts | 1 - src/pages/downloads.tsx | 97 +++++++++++++++++-- 5 files changed, 140 insertions(+), 7 deletions(-) rename src/components/UI/{homepage => downloads}/DownloadsHero.tsx (100%) create mode 100644 src/components/UI/downloads/DownloadsSection.tsx create mode 100644 src/components/UI/downloads/index.ts diff --git a/src/components/UI/homepage/DownloadsHero.tsx b/src/components/UI/downloads/DownloadsHero.tsx similarity index 100% rename from src/components/UI/homepage/DownloadsHero.tsx rename to src/components/UI/downloads/DownloadsHero.tsx diff --git a/src/components/UI/downloads/DownloadsSection.tsx b/src/components/UI/downloads/DownloadsSection.tsx new file mode 100644 index 0000000000..19cee95f39 --- /dev/null +++ b/src/components/UI/downloads/DownloadsSection.tsx @@ -0,0 +1,47 @@ +import { Heading, Image, Stack } from '@chakra-ui/react'; +import { FC } from 'react'; + +interface Props { + children?: React.ReactNode; + imgSrc?: string; + imgAltText?: string; + sectionTitle: string +} + +export const DownloadsSection: FC = ({ + children, + imgSrc, + imgAltText, + sectionTitle, +}) => { + return ( + + {!!imgSrc && ( + + {/* TODO: use NextImage */} + {imgAltText} + + )} + + + + {sectionTitle} + + + + + {children} + + + ) +} \ No newline at end of file diff --git a/src/components/UI/downloads/index.ts b/src/components/UI/downloads/index.ts new file mode 100644 index 0000000000..3296aa7933 --- /dev/null +++ b/src/components/UI/downloads/index.ts @@ -0,0 +1,2 @@ +export * from './DownloadsHero'; +export * from './DownloadsSection' \ No newline at end of file diff --git a/src/components/UI/homepage/index.ts b/src/components/UI/homepage/index.ts index a75a03c2af..861cb5112f 100644 --- a/src/components/UI/homepage/index.ts +++ b/src/components/UI/homepage/index.ts @@ -1,4 +1,3 @@ -export * from './DownloadsHero'; export * from './Gopher'; export * from './HomeHero'; export * from './HomeSection'; diff --git a/src/pages/downloads.tsx b/src/pages/downloads.tsx index caf41e9eb1..3e1bda1b5c 100644 --- a/src/pages/downloads.tsx +++ b/src/pages/downloads.tsx @@ -1,11 +1,15 @@ -import { Stack } from '@chakra-ui/react'; +import { + Code, + Link, + ListItem, + Stack, + Text, + UnorderedList, +} from '@chakra-ui/react'; import type { NextPage } from 'next'; -import { DownloadsHero } from '../components/UI/homepage'; - -import { +import { DownloadsHero, DownloadsSection } from '../components/UI/downloads'; -} from '../constants'; const DownloadsPage: NextPage = ({}) => { return ( @@ -14,6 +18,7 @@ const DownloadsPage: NextPage = ({}) => {
+ {/* TODO: replace hardcoded strings with build information */} { 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'} /> -

Hello

+ + + + + If you're looking for a specific release, operating system or architecture, below you will find: + + + + + + All stable and develop builds of Geth and tools + + + + + Archives for non-primary processor architectures + + + + + Android library archives and iOS XCode frameworks + + + + + + 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{' '} + + OpenPGP + {' '} + Signatures for details). + + + + + + + + You can import the build server public keys by grabbing the individual keys directly from the keyserver network: + + + gpg --recv-keys F9585DE6 C2FF8BBF 9BA28146 7B9E2481 D2A67EAC + + + + + + Similarly you can import all the developer public keys by grabbing them directly from the keyserver network: + + + + gpg --recv-keys E058A81C 05A5DDF0 1CCB7DD2 + + + + + + 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: + + + + gpg --verify geth-linux-amd64-1.5.0-d0c820ac.tar.gz.asc + + +
From 0ee133cb817e6bd7b165a40d5c2c619e28c43817 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 6 Oct 2022 14:46:06 -0600 Subject: [PATCH 03/33] add skeleton for all sections --- src/pages/downloads.tsx | 150 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 149 insertions(+), 1 deletion(-) diff --git a/src/pages/downloads.tsx b/src/pages/downloads.tsx index 3e1bda1b5c..b2ad5a1212 100644 --- a/src/pages/downloads.tsx +++ b/src/pages/downloads.tsx @@ -1,8 +1,12 @@ import { + Button, Code, Link, ListItem, Stack, + Table, + Th, + Tr, Text, UnorderedList, } from '@chakra-ui/react'; @@ -10,6 +14,10 @@ import type { NextPage } from 'next'; import { DownloadsHero, DownloadsSection } from '../components/UI/downloads'; +import { + GETH_REPO_URL +} from '../constants' + const DownloadsPage: NextPage = ({}) => { return ( @@ -62,7 +70,6 @@ const DownloadsPage: NextPage = ({}) => { { + + + + These are the current and previous stable releases of go-ethereum, updated automatically when a new version is tagged in our{' '} + + GitHub repository. + + + + + + TABLE + + + + + + + + + + + These are the develop snapshots of go-ethereum, updated automatically when a new commit is pushed into our{' '} + + GitHub repository. + + + + + + TABLE + + + + + + + + + + + All the binaries available from this page are signed via our build server PGP keys: + + + + + + + + + + + +
+ + Build Server + + + + UniqueID + + + + OpenPGP Key + + + + Fingerprint + +
+
+
+ From cbfc1a70cd81cd7ab6c25f8eadfbc6aeb0b20086 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 6 Oct 2022 22:15:51 -0600 Subject: [PATCH 04/33] add tabs --- .../UI/downloads/DownloadsTable.tsx | 113 ++++++++++++++++++ src/components/UI/downloads/index.ts | 3 +- src/pages/downloads.tsx | 14 +-- 3 files changed, 122 insertions(+), 8 deletions(-) create mode 100644 src/components/UI/downloads/DownloadsTable.tsx diff --git a/src/components/UI/downloads/DownloadsTable.tsx b/src/components/UI/downloads/DownloadsTable.tsx new file mode 100644 index 0000000000..83ae1ba097 --- /dev/null +++ b/src/components/UI/downloads/DownloadsTable.tsx @@ -0,0 +1,113 @@ +import { + Stack, + Tabs, + TabList, + Tab, + Text, +} from '@chakra-ui/react'; + +export const DownloadsTable = () => { + return ( + + + + + + LINUX + + + + + MACOS + + + + + WINDOWS + + + + + IOS + + + + + ANDROID + + + + + Test + + ) +} \ No newline at end of file diff --git a/src/components/UI/downloads/index.ts b/src/components/UI/downloads/index.ts index 3296aa7933..597af494c8 100644 --- a/src/components/UI/downloads/index.ts +++ b/src/components/UI/downloads/index.ts @@ -1,2 +1,3 @@ export * from './DownloadsHero'; -export * from './DownloadsSection' \ No newline at end of file +export * from './DownloadsSection' +export * from './DownloadsTable' \ No newline at end of file diff --git a/src/pages/downloads.tsx b/src/pages/downloads.tsx index b2ad5a1212..bd44893997 100644 --- a/src/pages/downloads.tsx +++ b/src/pages/downloads.tsx @@ -12,7 +12,11 @@ import { } from '@chakra-ui/react'; import type { NextPage } from 'next'; -import { DownloadsHero, DownloadsSection } from '../components/UI/downloads'; +import { + DownloadsHero, + DownloadsSection, + DownloadsTable, +} from '../components/UI/downloads'; import { GETH_REPO_URL @@ -107,9 +111,7 @@ const DownloadsPage: NextPage = ({}) => { - - TABLE - + + - + These are the develop snapshots of go-ethereum, updated automatically when a new commit is pushed into our{' '} { - + - + All the binaries available from this page are signed via our build server PGP keys: @@ -215,7 +191,7 @@ const DownloadsPage: NextPage = ({}) => { - + You can import the build server public keys by grabbing the individual keys directly from the keyserver network: @@ -226,7 +202,7 @@ const DownloadsPage: NextPage = ({}) => { - + Similarly you can import all the developer public keys by grabbing them directly from the keyserver network: @@ -237,7 +213,7 @@ const DownloadsPage: NextPage = ({}) => { - + 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: diff --git a/src/theme/foundations/index.ts b/src/theme/foundations/index.ts index 06d0f4f4f0..b0e872689b 100644 --- a/src/theme/foundations/index.ts +++ b/src/theme/foundations/index.ts @@ -1,2 +1,3 @@ export * from './colors'; +export * from './shadows'; export * from './sizes'; diff --git a/src/theme/foundations/shadows.ts b/src/theme/foundations/shadows.ts new file mode 100644 index 0000000000..d870a80e6b --- /dev/null +++ b/src/theme/foundations/shadows.ts @@ -0,0 +1,3 @@ +export const shadows = { + linkBoxShadow: '0 0 0 1px #11866f !important' +} \ No newline at end of file diff --git a/src/theme/index.ts b/src/theme/index.ts index ee49f0ac91..69069c2030 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -1,6 +1,6 @@ import { extendTheme } from '@chakra-ui/react'; -import { colors, sizes } from './foundations'; +import { colors, shadows, sizes } from './foundations'; import { Button, Link } from './components'; const overrides = { @@ -9,6 +9,7 @@ const overrides = { Button, Link }, + shadows, sizes, styles: { global: () => ({ @@ -65,6 +66,19 @@ const overrides = { fontSize: '13px', fontFamily: '"Inter", sans-serif' }, + 'downloads-button-label': { + fontFamily:'"JetBrains Mono", monospace', + color:'yellow.50', + fontSize:'xs', + textTransform:'uppercase', + }, + 'download-tab-label': { + fontFamily: '"JetBrains Mono", monospace', + fontWeight: 700, + textTransform: 'uppercase', + textAlign: 'center', + fontSize: 'sm', + }, // TODO: refactor w/ semantic tokens for light/dark mode 'link-light': {}, // TODO: refactor w/ semantic tokens for light/dark mode From b845d710984a02b348941e650c6369d16c2d1212 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Sat, 8 Oct 2022 13:12:57 -0600 Subject: [PATCH 12/33] theme cleanup --- src/components/UI/downloads/DownloadsHero.tsx | 9 +--- .../UI/downloads/DownloadsSection.tsx | 4 +- .../UI/downloads/DownloadsTable.tsx | 6 ++- src/pages/downloads.tsx | 50 ++++++------------- src/theme/components/Link.ts | 16 ++++++ 5 files changed, 39 insertions(+), 46 deletions(-) diff --git a/src/components/UI/downloads/DownloadsHero.tsx b/src/components/UI/downloads/DownloadsHero.tsx index 4b492b5f55..94dc1200f7 100644 --- a/src/components/UI/downloads/DownloadsHero.tsx +++ b/src/components/UI/downloads/DownloadsHero.tsx @@ -148,14 +148,7 @@ export const DownloadsHero: FC = ({ Release notes for {currentBuildName} {currentBuildVersion} diff --git a/src/components/UI/downloads/DownloadsSection.tsx b/src/components/UI/downloads/DownloadsSection.tsx index aea02d3973..b3b647597d 100644 --- a/src/components/UI/downloads/DownloadsSection.tsx +++ b/src/components/UI/downloads/DownloadsSection.tsx @@ -3,6 +3,7 @@ import { FC } from 'react'; interface Props { children?: React.ReactNode; + id: string; imgSrc?: string; imgAltText?: string; sectionTitle: string @@ -13,9 +14,10 @@ export const DownloadsSection: FC = ({ imgSrc, imgAltText, sectionTitle, + id }) => { return ( - + {!!imgSrc && ( {/* TODO: use NextImage */} diff --git a/src/components/UI/downloads/DownloadsTable.tsx b/src/components/UI/downloads/DownloadsTable.tsx index 97b4d4c74e..7caa073009 100644 --- a/src/components/UI/downloads/DownloadsTable.tsx +++ b/src/components/UI/downloads/DownloadsTable.tsx @@ -19,7 +19,11 @@ export const DownloadsTable: FC = ({ data }) => { return ( - + { imgSrc='/images/pages/gopher-home-side-desktop.svg' imgAltText='Gopher facing right' sectionTitle='Specific Versions' + id='specificversions' > @@ -72,16 +72,8 @@ const DownloadsPage: NextPage = ({}) => { 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{' '} OpenPGP {' '} @@ -90,21 +82,14 @@ const DownloadsPage: NextPage = ({}) => { - - + + These are the current and previous stable releases of go-ethereum, updated automatically when a new version is tagged in our{' '} GitHub repository. @@ -130,21 +115,14 @@ const DownloadsPage: NextPage = ({}) => { - - + + These are the develop snapshots of go-ethereum, updated automatically when a new commit is pushed into our{' '} GitHub repository. @@ -170,8 +148,8 @@ const DownloadsPage: NextPage = ({}) => { - - + + All the binaries available from this page are signed via our build server PGP keys: @@ -189,8 +167,8 @@ const DownloadsPage: NextPage = ({}) => { */} - - + + You can import the build server public keys by grabbing the individual keys directly from the keyserver network: @@ -201,7 +179,7 @@ const DownloadsPage: NextPage = ({}) => { - + Similarly you can import all the developer public keys by grabbing them directly from the keyserver network: diff --git a/src/theme/components/Link.ts b/src/theme/components/Link.ts index 2e747c4324..bffc9dd76d 100644 --- a/src/theme/components/Link.ts +++ b/src/theme/components/Link.ts @@ -11,6 +11,22 @@ export const Link = { boxShadow: 'inset 0 0 0 3px #f0f2e2 !important' }, _active: { textDecoration: 'none', bg: 'brand.light.secondary', color: 'yellow.50' } + }, + href: { + color: 'brand.light.primary', + _hover: { + color: 'brand.light.body', + textDecorationColor: 'brand.light.body' + }, + _focus: { + color: 'brand.light.primary', + boxShadow: 'linkBoxShadow', + textDecoration: 'none' + }, + _pressed: { + color: 'brand.light.secondary', + textDecorationColor: 'brand.light.secondary' + } } } }; From 468c17d90b6aac255fc2185cfece769c9b97f723 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Sat, 8 Oct 2022 14:32:07 -0600 Subject: [PATCH 13/33] update test data --- src/components/UI/DataTable.tsx | 1 + .../UI/downloads/DownloadsTable.tsx | 20 ++++++-- src/data/test/download-testdata.ts | 48 ++++++++++++++----- 3 files changed, 52 insertions(+), 17 deletions(-) diff --git a/src/components/UI/DataTable.tsx b/src/components/UI/DataTable.tsx index 6f0e5f3dfd..adad5d0ce9 100644 --- a/src/components/UI/DataTable.tsx +++ b/src/components/UI/DataTable.tsx @@ -75,6 +75,7 @@ export const DataTable: FC = ({ {item[columnHeader.toLowerCase()]} diff --git a/src/components/UI/downloads/DownloadsTable.tsx b/src/components/UI/downloads/DownloadsTable.tsx index 7caa073009..0c317e4bce 100644 --- a/src/components/UI/downloads/DownloadsTable.tsx +++ b/src/components/UI/downloads/DownloadsTable.tsx @@ -113,7 +113,9 @@ export const DownloadsTable: FC = ({ 'Kind', 'Arch', 'Size', - 'Published' + 'Published', + 'Signature', + 'Checksum (MD5)' ]} data={data} /> @@ -126,7 +128,9 @@ export const DownloadsTable: FC = ({ 'Kind', 'Arch', 'Size', - 'Published' + 'Published', + 'Signature', + 'Checksum (MD5)' ]} data={data} /> @@ -139,7 +143,9 @@ export const DownloadsTable: FC = ({ 'Kind', 'Arch', 'Size', - 'Published' + 'Published', + 'Signature', + 'Checksum (MD5)' ]} data={data} /> @@ -152,7 +158,9 @@ export const DownloadsTable: FC = ({ 'Kind', 'Arch', 'Size', - 'Published' + 'Published', + 'Signature', + 'Checksum (MD5)' ]} data={data} /> @@ -165,7 +173,9 @@ export const DownloadsTable: FC = ({ 'Kind', 'Arch', 'Size', - 'Published' + 'Published', + 'Signature', + 'Checksum (MD5)' ]} data={data} /> diff --git a/src/data/test/download-testdata.ts b/src/data/test/download-testdata.ts index 9ea4f97066..910e7c1936 100644 --- a/src/data/test/download-testdata.ts +++ b/src/data/test/download-testdata.ts @@ -5,7 +5,9 @@ export const testDownloadData = [ kind: 'archive', arch: '64-bit', size: '11.71 MB', - published: 'Last Wednesday at 11:11 AM' + published: 'Last Wednesday at 11:11 AM', + signature: 'Signature', + "checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' }, { release: 'Geth 1.10.23', @@ -13,7 +15,9 @@ export const testDownloadData = [ kind: 'archive', arch: '64-bit', size: '11.71 MB', - published: 'Last Wednesday at 11:11 AM' + published: 'Last Wednesday at 11:11 AM', + signature: 'Signature', + "checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' }, { release: 'Geth 1.10.23', @@ -21,7 +25,9 @@ export const testDownloadData = [ kind: 'archive', arch: '64-bit', size: '11.71 MB', - published: 'Last Wednesday at 11:11 AM' + published: 'Last Wednesday at 11:11 AM', + signature: 'Signature', + "checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' }, { release: 'Geth 1.10.23', @@ -29,7 +35,9 @@ export const testDownloadData = [ kind: 'archive', arch: '64-bit', size: '11.71 MB', - published: 'Last Wednesday at 11:11 AM' + published: 'Last Wednesday at 11:11 AM', + signature: 'Signature', + "checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' }, { release: 'Geth 1.10.23', @@ -37,7 +45,9 @@ export const testDownloadData = [ kind: 'archive', arch: '64-bit', size: '11.71 MB', - published: 'Last Wednesday at 11:11 AM' + published: 'Last Wednesday at 11:11 AM', + signature: 'Signature', + "checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' }, { release: 'Geth 1.10.23', @@ -45,7 +55,9 @@ export const testDownloadData = [ kind: 'archive', arch: '64-bit', size: '11.71 MB', - published: 'Last Wednesday at 11:11 AM' + published: 'Last Wednesday at 11:11 AM', + signature: 'Signature', + "checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' }, { release: 'Geth 1.10.23', @@ -53,7 +65,9 @@ export const testDownloadData = [ kind: 'archive', arch: '64-bit', size: '11.71 MB', - published: 'Last Wednesday at 11:11 AM' + published: 'Last Wednesday at 11:11 AM', + signature: 'Signature', + "checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' }, { release: 'Geth 1.10.23', @@ -61,7 +75,9 @@ export const testDownloadData = [ kind: 'archive', arch: '64-bit', size: '11.71 MB', - published: 'Last Wednesday at 11:11 AM' + published: 'Last Wednesday at 11:11 AM', + signature: 'Signature', + "checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' }, { release: 'Geth 1.10.23', @@ -69,7 +85,9 @@ export const testDownloadData = [ kind: 'archive', arch: '64-bit', size: '11.71 MB', - published: 'Last Wednesday at 11:11 AM' + published: 'Last Wednesday at 11:11 AM', + signature: 'Signature', + "checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' }, { release: 'Geth 1.10.23', @@ -77,7 +95,9 @@ export const testDownloadData = [ kind: 'archive', arch: '64-bit', size: '11.71 MB', - published: 'Last Wednesday at 11:11 AM' + published: 'Last Wednesday at 11:11 AM', + signature: 'Signature', + "checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' }, { release: 'Geth 1.10.23', @@ -85,7 +105,9 @@ export const testDownloadData = [ kind: 'archive', arch: '64-bit', size: '11.71 MB', - published: 'Last Wednesday at 11:11 AM' + published: 'Last Wednesday at 11:11 AM', + signature: 'Signature', + "checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' }, { release: 'Geth 1.10.23', @@ -93,6 +115,8 @@ export const testDownloadData = [ kind: 'archive', arch: '64-bit', size: '11.71 MB', - published: 'Last Wednesday at 11:11 AM' + published: 'Last Wednesday at 11:11 AM', + signature: 'Signature', + "checksum (md5)": 'c93b0339413a8f2b95aa4b23b32d64af' }, ] \ No newline at end of file From d4fff5d11d8e4f235861bbf9bcaeab8ecb97f548 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Sat, 8 Oct 2022 14:53:07 -0600 Subject: [PATCH 14/33] add pagination to builds --- src/pages/downloads.tsx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/pages/downloads.tsx b/src/pages/downloads.tsx index db2a47757a..e8eaeaea43 100644 --- a/src/pages/downloads.tsx +++ b/src/pages/downloads.tsx @@ -7,6 +7,7 @@ import { UnorderedList, } from '@chakra-ui/react'; import type { NextPage } from 'next'; +import { useState } from 'react' import { DownloadsHero, @@ -23,6 +24,9 @@ import { testDownloadData } from '../data/test/download-testdata' const DownloadsPage: NextPage = ({}) => { + const [amountStableReleases, updateAmountStables] = useState(10) + const [amountDevelopBuilds, updateAmountDevelopBuilds] = useState(10) + return ( <> {/* TODO: add PageMetadata */} @@ -97,10 +101,12 @@ const DownloadsPage: NextPage = ({}) => { {/* TODO: swap test data for real data */} - + - + { + updateAmountStables(amountStableReleases+10) + }}> { {/* TODO: swap for real data */} - + - + { + updateAmountDevelopBuilds(amountDevelopBuilds+10) + }}> Date: Sat, 8 Oct 2022 16:37:55 -0600 Subject: [PATCH 15/33] test pgp data --- src/data/test/pgpbuild-testdata.ts | 32 ++++++++++++++++++++++++++ src/data/test/pgpdeveloper-testdata.ts | 20 ++++++++++++++++ src/pages/downloads.tsx | 22 +++++++++++++++--- 3 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 src/data/test/pgpbuild-testdata.ts create mode 100644 src/data/test/pgpdeveloper-testdata.ts diff --git a/src/data/test/pgpbuild-testdata.ts b/src/data/test/pgpbuild-testdata.ts new file mode 100644 index 0000000000..a016016edf --- /dev/null +++ b/src/data/test/pgpbuild-testdata.ts @@ -0,0 +1,32 @@ +export const pgpBuildTestData = [ + { + "build server": "Android Builder", + "unique id": "Go Ethereum Android Builder ", + "openpgp key": "F9585DE6", + "fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" + }, + { + "build server": "iOS Builder", + "unique id": "Go Ethereum iOS Builder ", + "openpgp key": "F9585DE6", + "fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" + }, + { + "build server": "Linux Builder", + "unique id": "Go Ethereum Linux Builder ", + "openpgp key": "F9585DE6", + "fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" + }, + { + "build server": "macOS Builder", + "unique id": "Go Ethereum macOS Builder ", + "openpgp key": "F9585DE6", + "fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" + }, + { + "build server": "Windows Builder", + "unique id": "Go Ethereum Windows Builder ", + "openpgp key": "F9585DE6", + "fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" + }, +] \ No newline at end of file diff --git a/src/data/test/pgpdeveloper-testdata.ts b/src/data/test/pgpdeveloper-testdata.ts new file mode 100644 index 0000000000..85d16adfd6 --- /dev/null +++ b/src/data/test/pgpdeveloper-testdata.ts @@ -0,0 +1,20 @@ +export const pgpDeveloperTestData = [ + { + "developer": "Felix Lange", + "unique id": "Felix Lange ", + "openpgp key": "F9585DE6", + "fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" + }, + { + "developer": "Martin Holst Swende", + "unique id": "Martin Holst Swende ", + "openpgp key": "F9585DE6", + "fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" + }, + { + "developer": "Péter Szilágyi", + "unique id": "Péter Szilágyi ", + "openpgp key": "F9585DE6", + "fingerprint": "8272 1824 F4D7 46E0 B5A7 AB95 70AD 154B F958 5DE6" + }, +] \ No newline at end of file diff --git a/src/pages/downloads.tsx b/src/pages/downloads.tsx index e8eaeaea43..aee3751c08 100644 --- a/src/pages/downloads.tsx +++ b/src/pages/downloads.tsx @@ -21,7 +21,8 @@ import { } from '../constants' import { testDownloadData } from '../data/test/download-testdata' - +import { pgpBuildTestData } from '../data/test/pgpbuild-testdata'; +import { pgpDeveloperTestData } from '../data/test/pgpdeveloper-testdata'; const DownloadsPage: NextPage = ({}) => { const [amountStableReleases, updateAmountStables] = useState(10) @@ -163,7 +164,8 @@ const DownloadsPage: NextPage = ({}) => { - {/* + {/* TODO: swap for real data */} + { 'OpenPGP Key', 'Fingerprint' ]} + data={pgpBuildTestData} + /> + + + {/* TODO: swap for real data */} + + - */} + From 075a62720829a30bc0a7ad071ea43060cf5cc75d Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Sun, 9 Oct 2022 08:52:57 -0600 Subject: [PATCH 16/33] fix border on scrollbar --- src/pages/downloads.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/downloads.tsx b/src/pages/downloads.tsx index aee3751c08..3ab4de404b 100644 --- a/src/pages/downloads.tsx +++ b/src/pages/downloads.tsx @@ -165,7 +165,7 @@ const DownloadsPage: NextPage = ({}) => { {/* TODO: swap for real data */} - + Date: Sun, 9 Oct 2022 09:07:01 -0600 Subject: [PATCH 17/33] fix theme issue, and move default amount of builds to show to a constant --- src/constants.ts | 3 +++ src/pages/downloads.tsx | 9 +++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/constants.ts b/src/constants.ts index 92abc34178..6a67470b99 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -9,3 +9,6 @@ export const ETHEREUM_ORG_URL = 'https://ethereum.org'; export const ETHEREUM_ORG_RUN_A_NODE_URL = 'https://ethereum.org/en/run-a-node/'; export const ETHEREUM_FOUNDATION_URL = 'https://ethereum.foundation'; export const GETH_REPO_URL = 'https://github.com/ethereum/go-ethereum'; + +// Downloads +export const DEFAULT_BUILD_AMOUNT_TO_SHOW = 10; diff --git a/src/pages/downloads.tsx b/src/pages/downloads.tsx index 3ab4de404b..3e24ac53f5 100644 --- a/src/pages/downloads.tsx +++ b/src/pages/downloads.tsx @@ -17,6 +17,7 @@ import { import { DataTable } from '../components/UI/DataTable'; import { + DEFAULT_BUILD_AMOUNT_TO_SHOW, GETH_REPO_URL } from '../constants' @@ -25,8 +26,8 @@ import { pgpBuildTestData } from '../data/test/pgpbuild-testdata'; import { pgpDeveloperTestData } from '../data/test/pgpdeveloper-testdata'; const DownloadsPage: NextPage = ({}) => { - const [amountStableReleases, updateAmountStables] = useState(10) - const [amountDevelopBuilds, updateAmountDevelopBuilds] = useState(10) + const [amountStableReleases, updateAmountStables] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW) + const [amountDevelopBuilds, updateAmountDevelopBuilds] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW) return ( <> @@ -105,7 +106,7 @@ const DownloadsPage: NextPage = ({}) => { - { + { updateAmountStables(amountStableReleases+10) }}> { - { + { updateAmountDevelopBuilds(amountDevelopBuilds+10) }}> Date: Sun, 9 Oct 2022 10:28:07 -0600 Subject: [PATCH 18/33] add todo items --- src/components/UI/DataTable.tsx | 10 ++++++++-- src/pages/downloads.tsx | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/components/UI/DataTable.tsx b/src/components/UI/DataTable.tsx index adad5d0ce9..832446f0e3 100644 --- a/src/components/UI/DataTable.tsx +++ b/src/components/UI/DataTable.tsx @@ -21,9 +21,10 @@ export const DataTable: FC = ({ }) => { return ( = ({ return ( { columnHeaders.map((columnHeader, idx) => { + // TODO: Make the font size smaller (refer to design system) return ( {item[columnHeader.toLowerCase()]} diff --git a/src/pages/downloads.tsx b/src/pages/downloads.tsx index 3e24ac53f5..1c10c384d8 100644 --- a/src/pages/downloads.tsx +++ b/src/pages/downloads.tsx @@ -170,7 +170,7 @@ const DownloadsPage: NextPage = ({}) => { Date: Sun, 9 Oct 2022 12:58:42 -0600 Subject: [PATCH 19/33] table hover styles --- src/components/UI/DataTable.tsx | 24 ++++++++++-------------- src/pages/downloads.tsx | 4 +--- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/components/UI/DataTable.tsx b/src/components/UI/DataTable.tsx index 832446f0e3..c1a260293b 100644 --- a/src/components/UI/DataTable.tsx +++ b/src/components/UI/DataTable.tsx @@ -21,8 +21,7 @@ export const DataTable: FC = ({ }) => { return ( = ({ background: "#11866f", }, }} - p={4} + pt={4} + pb={4} > - - +
+ { columnHeaders.map((columnHeader, idx) => { @@ -46,8 +43,8 @@ export const DataTable: FC = ({ { columnHeaders.map((columnHeader, idx) => { @@ -80,8 +76,8 @@ export const DataTable: FC = ({ return ( diff --git a/src/pages/downloads.tsx b/src/pages/downloads.tsx index 1c10c384d8..ca4f53b9de 100644 --- a/src/pages/downloads.tsx +++ b/src/pages/downloads.tsx @@ -111,7 +111,6 @@ const DownloadsPage: NextPage = ({}) => { }}> { }}> { Similarly you can import all the developer public keys by grabbing them directly from the keyserver network: - {/* TODO: Thees are developer keys, do we need to change? */} + {/* TODO: These are developer keys, do we need to change? */} gpg --recv-keys E058A81C 05A5DDF0 1CCB7DD2 From 649d22ba37310748831e1a0a8c9a67c8b7319fa9 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Mon, 10 Oct 2022 06:56:44 -0600 Subject: [PATCH 20/33] change requests --- src/components/UI/downloads/DownloadsHero.tsx | 146 +++++----------- .../UI/downloads/DownloadsSection.tsx | 2 +- .../UI/downloads/DownloadsTable.tsx | 160 ++++-------------- src/constants.ts | 56 +++++- src/pages/downloads.tsx | 26 +-- src/theme/components/Link.ts | 16 -- 6 files changed, 148 insertions(+), 258 deletions(-) diff --git a/src/components/UI/downloads/DownloadsHero.tsx b/src/components/UI/downloads/DownloadsHero.tsx index 94dc1200f7..86c7d605e1 100644 --- a/src/components/UI/downloads/DownloadsHero.tsx +++ b/src/components/UI/downloads/DownloadsHero.tsx @@ -2,6 +2,8 @@ import { Box, Button, Image, Link, Stack, HStack, Text } from '@chakra-ui/react' import { FC } from 'react'; import NextLink from 'next/link'; +import { DOWNLOAD_HEADER_BUTTONS } from '../../../constants' + interface DownloadsHero { currentBuildName: string currentBuildVersion: string @@ -21,11 +23,16 @@ export const DownloadsHero: FC = ({ sourceCodeURL, windowsBuildURL }) => { + DOWNLOAD_HEADER_BUTTONS.linuxBuild.buildURL = linuxBuildURL + DOWNLOAD_HEADER_BUTTONS.macOSBuild.buildURL = macOSBuildURL + DOWNLOAD_HEADER_BUTTONS.windowsBuild.buildURL = windowsBuildURL + DOWNLOAD_HEADER_BUTTONS.sourceCode.buildURL = sourceCodeURL + return ( - - - + + + = ({ 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're looking to install Geth and/or associated tools via your favorite package manager, please check our installation guide. - - - - - - - - - - - - - - - + { + Object.keys(DOWNLOAD_HEADER_BUTTONS).map((key: string, idx) => { + return ( + + + + ) + }) + } Release notes for {currentBuildName} {currentBuildVersion} diff --git a/src/components/UI/downloads/DownloadsSection.tsx b/src/components/UI/downloads/DownloadsSection.tsx index b3b647597d..5e0fdf26a2 100644 --- a/src/components/UI/downloads/DownloadsSection.tsx +++ b/src/components/UI/downloads/DownloadsSection.tsx @@ -2,7 +2,7 @@ import { Box, Image, Stack } from '@chakra-ui/react'; import { FC } from 'react'; interface Props { - children?: React.ReactNode; + children: React.ReactNode; id: string; imgSrc?: string; imgAltText?: string; diff --git a/src/components/UI/downloads/DownloadsTable.tsx b/src/components/UI/downloads/DownloadsTable.tsx index 0c317e4bce..3de100ff3b 100644 --- a/src/components/UI/downloads/DownloadsTable.tsx +++ b/src/components/UI/downloads/DownloadsTable.tsx @@ -9,6 +9,11 @@ import { } from '@chakra-ui/react'; import { FC } from 'react'; +import { + DOWNLOAD_TABS, + DOWNLOAD_TAB_COLUMN_HEADERS +} from '../../../constants' + import { DataTable } from '../DataTable' interface Props { @@ -29,154 +34,61 @@ export const DownloadsTable: FC = ({ color='brand.light.primary' bg='green.50' > - - - LINUX - - - - - MACOS - - - - - WINDOWS - - - - - IOS - - - - - ANDROID - - + { + DOWNLOAD_TABS.map((tab, idx) => { + return ( + + + {tab} + + + ) + }) + } diff --git a/src/constants.ts b/src/constants.ts index 936cb15936..59222639cb 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -13,4 +13,58 @@ export const GO_URL = 'https://go.dev/'; // Downloads export const DEFAULT_BUILD_AMOUNT_TO_SHOW = 10; - +export const DOWNLOAD_HEADER_BUTTONS: {[index: string]: {name: string; image: string; imageAlt: string; buildURL: string;}} = { + linuxBuild: { + name: 'Linux', + image: '/images/pages/linux-penguin.svg', + imageAlt: 'Linux logo', + buildURL: '' + }, + macOSBuild: { + name: 'macOS', + image: '/images/pages/macos-logo.svg', + imageAlt: 'macOS logo', + buildURL: '' + }, + windowsBuild: { + name: 'Windows', + image: '/images/pages/windows-logo.svg', + imageAlt: 'Windows logo', + buildURL: '' + }, + sourceCode: { + name: 'Sources', + image: '/images/pages/source-branch.svg', + imageAlt: 'Source branch logo', + buildURL: '' + } +} +export const DOWNLOAD_TABS = [ + 'Linux', + 'macOS', + 'Windows', + 'iOS', + 'Android' +] +export const DOWNLOAD_TAB_COLUMN_HEADERS = [ + 'Release', + 'Commit', + 'Kind', + 'Arch', + 'Size', + 'Published', + 'Signature', + 'Checksum (MD5)' +] +export const DOWNLOAD_OPENPGP_BUILD_HEADERS = [ + 'Build Server', + 'Unique ID', + 'OpenPGP Key', + 'Fingerprint' +] +export const DOWNLOAD_OPENPGP_DEVELOPER_HEADERS = [ + 'Developer', + 'Unique ID', + 'OpenPGP Key', + 'Fingerprint' +] \ No newline at end of file diff --git a/src/pages/downloads.tsx b/src/pages/downloads.tsx index ca4f53b9de..e073e4d220 100644 --- a/src/pages/downloads.tsx +++ b/src/pages/downloads.tsx @@ -18,6 +18,8 @@ import { DataTable } from '../components/UI/DataTable'; import { DEFAULT_BUILD_AMOUNT_TO_SHOW, + DOWNLOAD_OPENPGP_BUILD_HEADERS, + DOWNLOAD_OPENPGP_DEVELOPER_HEADERS, GETH_REPO_URL } from '../constants' @@ -79,7 +81,7 @@ const DownloadsPage: NextPage = ({}) => { 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{' '} OpenPGP {' '} @@ -95,7 +97,7 @@ const DownloadsPage: NextPage = ({}) => { GitHub repository. @@ -116,7 +118,7 @@ const DownloadsPage: NextPage = ({}) => { textAlign='center' p={4} > - SHOW OLDER RELEASES + Show older releases @@ -129,7 +131,7 @@ const DownloadsPage: NextPage = ({}) => { GitHub repository. @@ -150,7 +152,7 @@ const DownloadsPage: NextPage = ({}) => { textAlign='center' p={4} > - SHOW OLDER RELEASES + Show older releases @@ -166,12 +168,7 @@ const DownloadsPage: NextPage = ({}) => { {/* TODO: swap for real data */} @@ -179,12 +176,7 @@ const DownloadsPage: NextPage = ({}) => { {/* TODO: swap for real data */} diff --git a/src/theme/components/Link.ts b/src/theme/components/Link.ts index d03e7ceb7d..19f891399e 100644 --- a/src/theme/components/Link.ts +++ b/src/theme/components/Link.ts @@ -12,22 +12,6 @@ export const Link = { }, _active: { textDecoration: 'none', bg: 'brand.light.secondary', color: 'yellow.50' } }, - href: { - color: 'brand.light.primary', - _hover: { - color: 'brand.light.body', - textDecorationColor: 'brand.light.body' - }, - _focus: { - color: 'brand.light.primary', - boxShadow: 'linkBoxShadow', - textDecoration: 'none' - }, - _pressed: { - color: 'brand.light.secondary', - textDecorationColor: 'brand.light.secondary' - } - }, light: { textDecoration: 'underline', color: 'brand.light.primary', From 522996db84b4f32580849d5586f338e72ecc4baf Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Wed, 12 Oct 2022 19:45:55 -0500 Subject: [PATCH 21/33] change requests --- src/components/UI/downloads/DownloadsHero.tsx | 4 ++-- src/components/UI/downloads/DownloadsTable.tsx | 2 +- src/pages/downloads.tsx | 18 +++++++++++------- src/theme/components/Link.ts | 2 +- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/components/UI/downloads/DownloadsHero.tsx b/src/components/UI/downloads/DownloadsHero.tsx index 86c7d605e1..67b30355be 100644 --- a/src/components/UI/downloads/DownloadsHero.tsx +++ b/src/components/UI/downloads/DownloadsHero.tsx @@ -56,10 +56,10 @@ export const DownloadsHero: FC = ({ { - Object.keys(DOWNLOAD_HEADER_BUTTONS).map((key: string, idx) => { + Object.keys(DOWNLOAD_HEADER_BUTTONS).map((key: string) => { return ( diff --git a/src/components/UI/downloads/DownloadsTable.tsx b/src/components/UI/downloads/DownloadsTable.tsx index 3de100ff3b..6fc7288b35 100644 --- a/src/components/UI/downloads/DownloadsTable.tsx +++ b/src/components/UI/downloads/DownloadsTable.tsx @@ -38,7 +38,7 @@ export const DownloadsTable: FC = ({ DOWNLOAD_TABS.map((tab, idx) => { return ( { +const DownloadsPage: NextPage = () => { const [amountStableReleases, updateAmountStables] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW) const [amountDevelopBuilds, updateAmountDevelopBuilds] = useState(DEFAULT_BUILD_AMOUNT_TO_SHOW) + const showMoreStableReleases = () => { + updateAmountStables(amountStableReleases+10) + } + + const showMoreDevelopBuilds = () => { + updateAmountDevelopBuilds(amountDevelopBuilds+10) + } + return ( <> {/* TODO: add PageMetadata */} @@ -108,9 +116,7 @@ const DownloadsPage: NextPage = ({}) => { - { - updateAmountStables(amountStableReleases+10) - }}> + { - { - updateAmountDevelopBuilds(amountDevelopBuilds+10) - }}> + Date: Mon, 17 Oct 2022 09:50:35 +0100 Subject: [PATCH 22/33] add devcon AMA to resources --- src/pages/docs/resources.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/docs/resources.md b/src/pages/docs/resources.md index 76fa404a0a..a1a3de5f75 100644 --- a/src/pages/docs/resources.md +++ b/src/pages/docs/resources.md @@ -13,6 +13,8 @@ Here are more resources for a deeper understanding of Geth and related topics. ## Watch +[Geth team AMA at Devcon 6, Bogota](https://youtu.be/Wr_SHOmz4lc?t=10714) + [Péter at ETH Prage 2022: Ethereum in numbers: where TPS meets physics](https://www.youtube.com/watch?v=TdsaVoJiy3g) [Marius at ETH Amsterdam 2022: Deep dive into Geth](https://www.youtube.com/watch?v=c4N79UXZqSc) From 0d41782d64adf093c8fc6f7a614b914ce8295319 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 17 Oct 2022 16:33:22 +0100 Subject: [PATCH 23/33] add landing pages to some docs dirs --- .../developers/dapp-developer/native-bindings.md | 2 +- src/pages/docs/developers/index.md | 16 ++++++++++++++++ src/pages/docs/fundamentals/index.md | 15 +++++++++++++++ src/pages/docs/index.md | 8 ++++---- .../rpc/{server.md => index.md} | 0 5 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 src/pages/docs/developers/index.md create mode 100644 src/pages/docs/fundamentals/index.md rename src/pages/docs/interacting-with-geth/rpc/{server.md => index.md} (100%) diff --git a/src/pages/docs/developers/dapp-developer/native-bindings.md b/src/pages/docs/developers/dapp-developer/native-bindings.md index e56bde9c6c..a682792fa4 100644 --- a/src/pages/docs/developers/dapp-developer/native-bindings.md +++ b/src/pages/docs/developers/dapp-developer/native-bindings.md @@ -1,6 +1,6 @@ --- title: Go Contract Bindings -description: Intriduction to generating bindings for using Geth features in Go native applications +description: Introduction to generating bindings for using Geth features in Go native applications --- This page introduces the concept of server-side native dapps. Geth provides the tools required to generate [Go](https://github.com/golang/go/wiki#getting-started-with-go) language bindings to any Ethereum contract that is compile-time type safe, highly performant and can be generated completely automatically from a compiled contract. diff --git a/src/pages/docs/developers/index.md b/src/pages/docs/developers/index.md new file mode 100644 index 0000000000..8c64ddd20a --- /dev/null +++ b/src/pages/docs/developers/index.md @@ -0,0 +1,16 @@ +--- +title: Developer docs +description: Documentation for Geth developers and dapp developers +--- + +Welcome to the Geth Developer docs! + +This section includes information for builders. If you are building decentralized apps on top of Geth, head to the `dapp-developer` docs. If you are developing Geth itself, explore the `geth-developer` docs. + +## Dapp developers + +Geth has many features that support dapp developers. There are many built-in tracers implemented in Go or Javascript that allow developers to monitor what is happening in Geth from inside an app, and users can build their own custom tracers too. Geth also includes a suite of tools for interacting with Ethereum smart contracts using Geth functions using Go functions inside Go native applications. There is also information for Geth mobile developers. + +## Geth developers + +Geth developers add/remove features and fix bugs in Geth. The `geth-developer` section includes contribution guidelines and documentation relating to testing and disclosing vulnerabilities that willhep you get started with working on Geth. diff --git a/src/pages/docs/fundamentals/index.md b/src/pages/docs/fundamentals/index.md new file mode 100644 index 0000000000..7b9dcb38a5 --- /dev/null +++ b/src/pages/docs/fundamentals/index.md @@ -0,0 +1,15 @@ +--- +title: Geth fundamentals +description: Documentation for foundational Geth topics +--- + +## Geth fundamentals + +This section includes documentation for foundational topics in Geth. The pages here will help you to understand how Geth works from a user perspective and under the hood. + +This is where you will find information about how to manage a Geth node and understand how it functions. + +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. + diff --git a/src/pages/docs/index.md b/src/pages/docs/index.md index b613f1e432..8342de6655 100644 --- a/src/pages/docs/index.md +++ b/src/pages/docs/index.md @@ -10,11 +10,11 @@ These documentation pages are intended to help users download, install and use G ## Where to go from here -First, make sure you have sufficient [hardware](/pages/docs/getting-started/hardware-requirements.md), then [download](/pages/downloads) and [install](/pages/docs/getting-started/installing-geth.md) Geth. Make sure you are familiar with the [security considerations](/pages/docs/fundamentals/security.md) and have your firewall set up. +First, make sure you have sufficient [hardware](/pages/docs/getting-started/hardware-requirements), then [download](/pages/downloads) and [install](/pages/docs/getting-started/installing-geth) Geth. Make sure you are familiar with the [security considerations](/pages/docs/fundamentals/security) and have your firewall set up. -If you are just starting out with Geth, head to the [Getting started](src/pages/docs/getting-started/getting-started.md) page. That page guides a new user through some basic functions of Geth such as creating and securing accounts and making a transaction using Geth's built-in account tools. +If you are just starting out with Geth, head to the [Getting started](src/pages/docs/getting-started/getting-started) page. That page guides a new user through some basic functions of Geth such as creating and securing accounts and making a transaction using Geth's built-in account tools. -A more secure but slightly more advanced setup is to use an external signer instead of Geth's built-in account manager. We have a [getting started](src/pages/docs/getting-started/getting-started-with-clef.md) guide for that too. +A more secure but slightly more advanced setup is to use an external signer instead of Geth's built-in account manager. We have a [getting started](src/pages/docs/getting-started/getting-started-with-clef) guide for that too. Then, it is recommended to read the material in the [Fundamentals](src/pages/docs/fundamentals) section - these pages will help build a foundational understanding of how Geth works from a user perspective and under the hood. @@ -26,4 +26,4 @@ If you want to help develop Geth or build decentralized apps on top of it, head ## More resources -We have a library of videos and articles on our [Resources](/pages/docs/resources.md) page and answers to common questions on the [FAQs](/pages/docs/faq.md) page. +We have a library of videos and articles on our [Resources](/pages/docs/resources) page and answers to common questions on the [FAQs](/pages/docs/faq) page. diff --git a/src/pages/docs/interacting-with-geth/rpc/server.md b/src/pages/docs/interacting-with-geth/rpc/index.md similarity index 100% rename from src/pages/docs/interacting-with-geth/rpc/server.md rename to src/pages/docs/interacting-with-geth/rpc/index.md From 79f9f2a7e0cc1943efdbaebf4b92e8d376bee7fd Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 20 Oct 2022 09:28:38 +0100 Subject: [PATCH 24/33] add some more info to sync-modes --- src/pages/docs/fundamentals/sync-modes.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/pages/docs/fundamentals/sync-modes.md b/src/pages/docs/fundamentals/sync-modes.md index 3fc9b1a47d..5bfe7800c6 100644 --- a/src/pages/docs/fundamentals/sync-modes.md +++ b/src/pages/docs/fundamentals/sync-modes.md @@ -13,7 +13,8 @@ There are two types of full node that use different mechanisms to sync up to the A snap sync'd node holds the most recent 128 block states in memory, so transactions in that range are always quickly accessible. However, snap-sync only starts processing from a relatively recent block (as opposed to genesis for a full node). Between the initial sync block and the 128 most recent blocks, the node stores occasional checkpoints that can be used to rebuild the state on-the-fly. This means transactions can be traced back as far as the block that was used for the initial sync. Tracing a single transaction requires reexecuting all preceding transactions in the same block **and** all preceding blocks until the previous stored snapshot. Snap-sync'd nodes are therefore full nodes, with the only difference being the initial synchronization required a checkpoint block to sync from instead of independently verifying the chain all the way from genesis. Snap sync then only verifies the proof-of-work and ancestor-child block progression and assumes that the state transitions are correct rather than re-executing the transactions in each block to verify the state changes. Snap sync is much faster than block-by-block sync. To start a node with snap sync pass `--syncmode snap` at startup. -Snap sync starts by downloading the headers for a chunk of blocks. Once the headers have been verified, the block bodies and receipts for those blocks are downloaded. In parallel, Geth also sync begins state-sync. In state-sync, Geth first downloads the leaves of the state trie for each block without the intermediate nodes along with a range proof. The state trie is then regenerated locally. The state download is the part of the snap-sync that takes the most time to complete and the progress can be monitored using the ETA values in the log messages. However, the blockchain is also progressing at the same time and invalidating some of the regenerated state data. This means it is also necessary to have a 'healing' phase where errors in the state are fixed. It is not possible to monitor the progress of the state heal because the extent of the errors cannot be known until the current state has already been regenerated. +Snap sync starts by downloading the headers for a chunk of blocks. Once the headers have been verified, the block bodies and receipts for those blocks are downloaded. In parallel, Geth also sync begins state-sync. In state-sync, Geth first downloads the leaves of the state trie for each block without the intermediate nodes along with a range proof. The state trie is then regenerated locally. The state download is the part of the snap-sync that takes the most time to complete and the progress can be monitored using the ETA values in the log messages. However, the blockchain is also progressing at the same time and invalidating some of the regenerated state data. This means it is also necessary to have a 'healing' phase where errors in the state are fixed. It is not possible to monitor the progress of the state heal because the extent of the errors cannot be known until the current state has already been regenerated. Geth regularly reports `Syncing, state heal in progress` regularly during state heal - this informs the user that state heal has not finished. It is also possible to confirm this using `eth.syncing` - if this command returns `false` then the node is in sync. If it returns anything other than `false` then syncing is still in progress. + The healing has to outpace the growth of the blockchain, otherwise the node will never catch up to the current state. There are some hardware factors that determine the speed of the state healing (speed of disk read/write and internet connection) and also the total gas used in each block (more gas means more changes to the state that have to be handled). To summarize, snap sync progresses in the following sequence: @@ -22,8 +23,10 @@ To summarize, snap sync progresses in the following sequence: - download block bodies and receipts. In parallel, download raw state data and build state trie - heal state trie to account for newly arriving data + **Note** Snap sync is the default behaviour, so if the `--syncmode` value is not passed to Geth at startup, Geth will use snap sync. A node that is started using `snap` will switch to block-by-block sync once it has caught up to the head of the chain. + ### Full A full sync generates the current state by executing every block starting from the genesis block. A full sync indendently verifies proof-of-work and block provenance as well as all state transitions by re-executing the transactions in the entire historical sequence of blocks. Only the most recent 128 block states are stored in a full node - older block states are pruned periodically and represented as a series of checkpoints from which any previous state can be regenerated on request. 128 blocks is about 25.6 minutes of history with a block time of 12 seconds. @@ -38,13 +41,13 @@ It is also possible to create a partial/recent archive node where the node was s ## Light nodes -A light node syncs very quickly and stores the bare minimum of blockchain data. Light nodes only process block headers, not entire blocks. This greatly reduces the computation time, storage and bandwidth required relative to a full node. This means light nodes are suitable for resource-constrained devices and can catch up to the head of the chain much faster when they are new or have been offline for a while. The trade-off is that light nodes rely heavily on data served by altruistic full nodes. A light client can be used to query data from Ethereum and submit transactions, acting as a locally-hosted Ethereum wallet. However, because they don't keep local copies of the Ethereum state, light nodes can't validate blocks in the same way as full nodes - they receive a proof from the full node and verify it against their local header chain. To start a node in light mode, pass `--syncmode light`. Be aware that full nodes serving light data are relative scarce so light nodes can struggle to find peers. +A light node syncs very quickly and stores the bare minimum of blockchain data. Light nodes only process block headers, not entire blocks. This greatly reduces the computation time, storage and bandwidth required relative to a full node. This means light nodes are suitable for resource-constrained devices and can catch up to the head of the chain much faster when they are new or have been offline for a while. The trade-off is that light nodes rely heavily on data served by altruistic full nodes. A light client can be used to query data from Ethereum and submit transactions, acting as a locally-hosted Ethereum wallet. However, because they don't keep local copies of the Ethereum state, light nodes can't validate blocks in the same way as full nodes - they receive a proof from the full node and verify it against their local header chain. To start a node in light mode, pass `--syncmode light`. Be aware that full nodes serving light data are relative scarce so light nodes can struggle to find peers. **Light nodes are not currently working on proof-of-stake Ethereum**. Read more about light nodes on our [LES page](/docs/interface/les.md). ## Consensus layer syncing -Now that Ethereum has switched to proof-of-stake, all consensus logic and block propagation is handled by consensus clients. This means that syncing the blockchain is a process shared between the consensus and execution clients. Blocks are downloaded by the consensus client and verified by the execution client. In order for Geth to sync, it requires a header from its connected consensus client. Geth does not import any data until it is instructed to by the consensus client. +Now that Ethereum has switched to proof-of-stake, all consensus logic and block propagation is handled by consensus clients. This means that syncing the blockchain is a process shared between the consensus and execution clients. Blocks are downloaded by the consensus client and verified by the execution client. In order for Geth to sync, it requires a header from its connected consensus client. Geth does not import any data until it is instructed to by the consensus client. **Geth cannot sync without being connected to a consensus client**. This includes block-by-block syncing from genesis. Once a header is available to use as a syncing target, Geth retrieves all headers between that target header and the local header chain in reverse chronological order. These headers show that the sequence of blocks is correct because the parenthashes link one block to the next right up to the target block. Eventually, the sync will reach a block held in the local database, at which point the local data and the target data are considered 'linked' and there is a very high chance the node is syncing the correct chain. The block bodies are then downloaded and then the state data. The consensus client can update the target header - as long as the syncing outpaces the growth of the blockchain then the node will eventually get in sync. From 5f9632236df02e643278698bbb8635be17a12528 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 20 Oct 2022 09:29:39 +0100 Subject: [PATCH 25/33] rm sentence from sync modes page --- src/pages/docs/fundamentals/sync-modes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/docs/fundamentals/sync-modes.md b/src/pages/docs/fundamentals/sync-modes.md index 5bfe7800c6..e787910a2b 100644 --- a/src/pages/docs/fundamentals/sync-modes.md +++ b/src/pages/docs/fundamentals/sync-modes.md @@ -3,7 +3,7 @@ title: Sync modes description: Introduction to Geth's sync modes --- -Syncing is the process by which Geth catches up to the latest Ethereum block and current global state. There are several ways to sync a Geth node that differ in their speed, storage requirements and trust assumptions. This page outlines three sync configurations for full nodes and one for light nodes. +Syncing is the process by which Geth catches up to the latest Ethereum block and current global state. There are several ways to sync a Geth node that differ in their speed, storage requirements and trust assumptions. ## Full nodes From 0630c430f97c9a109fde9a0b9a5d820ce2327921 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 20 Oct 2022 09:31:13 +0100 Subject: [PATCH 26/33] clarify CL client is needed at top of sync-mode pg --- src/pages/docs/fundamentals/sync-modes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/docs/fundamentals/sync-modes.md b/src/pages/docs/fundamentals/sync-modes.md index e787910a2b..e47b3f789e 100644 --- a/src/pages/docs/fundamentals/sync-modes.md +++ b/src/pages/docs/fundamentals/sync-modes.md @@ -3,7 +3,7 @@ title: Sync modes description: Introduction to Geth's sync modes --- -Syncing is the process by which Geth catches up to the latest Ethereum block and current global state. There are several ways to sync a Geth node that differ in their speed, storage requirements and trust assumptions. +Syncing is the process by which Geth catches up to the latest Ethereum block and current global state. There are several ways to sync a Geth node that differ in their speed, storage requirements and trust assumptions. Now that Ethereum uses proof-of-stake based consensus,. a consensus client is required for Geth to sync. ## Full nodes From 028066c0aec7c6d04fffba2511668b4ef8b7d34e Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 20 Oct 2022 09:37:37 +0100 Subject: [PATCH 27/33] update sync modes page --- src/pages/docs/fundamentals/sync-modes.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pages/docs/fundamentals/sync-modes.md b/src/pages/docs/fundamentals/sync-modes.md index e47b3f789e..84a1d12c0d 100644 --- a/src/pages/docs/fundamentals/sync-modes.md +++ b/src/pages/docs/fundamentals/sync-modes.md @@ -3,7 +3,7 @@ title: Sync modes description: Introduction to Geth's sync modes --- -Syncing is the process by which Geth catches up to the latest Ethereum block and current global state. There are several ways to sync a Geth node that differ in their speed, storage requirements and trust assumptions. Now that Ethereum uses proof-of-stake based consensus,. a consensus client is required for Geth to sync. +Syncing is the process by which Geth catches up to the latest Ethereum block and current global state. There are several ways to sync a Geth node that differ in their speed, storage requirements and trust assumptions. Now that Ethereum uses proof-of-stake based consensus, a consensus client is required for Geth to sync. ## Full nodes @@ -63,7 +63,6 @@ Read more in the [optimistic sync specs](https://github.com/ethereum/consensus-s Alternatively, the consensus client can grab a checkpoint from a trusted source which provides a target state to sync up to, before switching to full sync and verifying each block in turn. In this mode, the node trusts that the checkpoint is correct. There are many possible sources for this checkpoint - the gold standard would be to get it out-of-band from another trusted friend, but it could also come from block explorers or public APIs/web apps. -**Note** it is not currently possible to use a Geth light node as an execution client on proof-of-stake Ethereum. ## Summary From a5b2e62fed51b27efd424c0bc993dec815a11868 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 20 Oct 2022 09:55:14 +0100 Subject: [PATCH 28/33] add sentence on state healing to logs page --- src/pages/docs/fundamentals/logs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/docs/fundamentals/logs.md b/src/pages/docs/fundamentals/logs.md index a6c09d122c..0e85ade29c 100644 --- a/src/pages/docs/fundamentals/logs.md +++ b/src/pages/docs/fundamentals/logs.md @@ -128,7 +128,7 @@ INFO [07-28|10:30:18.658] Imported new block headers count=1 el INFO [07-28|10:30:21.665] Imported new state entries ``` -For state sync, Geth reports when the state heal is in progress. This can takea long time. The log message includes values for the number of `accounts`, `slots`, `codes` and `nodes` that were downloaded in the current healing phase, and the pending field is the number of state entires waiting to be downloaded. The `pending` value is not necessarily the number of state entries remaining until the healing is finished. As the blockchain progresses the state trie is updated and therefore the data that needs to be downloaded to heal the trie can increase as well as decrease over time. Ultimately, the state should heal faster than the blockchain progresses so the node can get in sync. When the state healing is finished there is a post-sync snapshot generation phase. The node is not in sync until the state healing phase is over. +For state sync, Geth reports when the state heal is in progress. This can takea long time. The log message includes values for the number of `accounts`, `slots`, `codes` and `nodes` that were downloaded in the current healing phase, and the pending field is the number of state entires waiting to be downloaded. The `pending` value is not necessarily the number of state entries remaining until the healing is finished. As the blockchain progresses the state trie is updated and therefore the data that needs to be downloaded to heal the trie can increase as well as decrease over time. Ultimately, the state should heal faster than the blockchain progresses so the node can get in sync. When the state healing is finished there is a post-sync snapshot generation phase. The node is not in sync until the state healing phase is over. If the node is still regularly reporting `State heal in progress` it is not yet in sync - the state healing is still ongoing. The sync can be confirmed using `eth.syncing` - it will return `false` if the node is in sync. If `eth.syncing` returns anything other than `false` it has not finished syncing. ``` INFO [07-28|10:30:21.965] State heal in progress accounts=169,633@7.48MiB slots=57314@4.17MiB codes=4895@38.14MiB nodes=43,293,196@11.70GiB pending=112,626 From 2e54dccd6d732da4d0a01c2341e40e1cd6e91425 Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 21 Oct 2022 10:56:13 +0100 Subject: [PATCH 29/33] add sina talk to resources --- src/pages/docs/resources.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pages/docs/resources.md b/src/pages/docs/resources.md index a1a3de5f75..adaac2792f 100644 --- a/src/pages/docs/resources.md +++ b/src/pages/docs/resources.md @@ -15,6 +15,8 @@ Here are more resources for a deeper understanding of Geth and related topics. [Geth team AMA at Devcon 6, Bogota](https://youtu.be/Wr_SHOmz4lc?t=10714) +[Sina's EVM tracing workshop at Devcon 6, Bogota](https://youtu.be/b8RdmGsilfU) + [Péter at ETH Prage 2022: Ethereum in numbers: where TPS meets physics](https://www.youtube.com/watch?v=TdsaVoJiy3g) [Marius at ETH Amsterdam 2022: Deep dive into Geth](https://www.youtube.com/watch?v=c4N79UXZqSc) From f9365d929457990e927e46131377a5f84b781235 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 24 Oct 2022 11:55:50 +0100 Subject: [PATCH 30/33] update logs page --- src/pages/docs/fundamentals/logs.md | 32 ++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/pages/docs/fundamentals/logs.md b/src/pages/docs/fundamentals/logs.md index 0e85ade29c..75c9213767 100644 --- a/src/pages/docs/fundamentals/logs.md +++ b/src/pages/docs/fundamentals/logs.md @@ -128,7 +128,7 @@ INFO [07-28|10:30:18.658] Imported new block headers count=1 el INFO [07-28|10:30:21.665] Imported new state entries ``` -For state sync, Geth reports when the state heal is in progress. This can takea long time. The log message includes values for the number of `accounts`, `slots`, `codes` and `nodes` that were downloaded in the current healing phase, and the pending field is the number of state entires waiting to be downloaded. The `pending` value is not necessarily the number of state entries remaining until the healing is finished. As the blockchain progresses the state trie is updated and therefore the data that needs to be downloaded to heal the trie can increase as well as decrease over time. Ultimately, the state should heal faster than the blockchain progresses so the node can get in sync. When the state healing is finished there is a post-sync snapshot generation phase. The node is not in sync until the state healing phase is over. If the node is still regularly reporting `State heal in progress` it is not yet in sync - the state healing is still ongoing. The sync can be confirmed using `eth.syncing` - it will return `false` if the node is in sync. If `eth.syncing` returns anything other than `false` it has not finished syncing. +For state sync, Geth reports when the state heal is in progress. This can takea long time. The log message includes values for the number of `accounts`, `slots`, `codes` and `nodes` that were downloaded in the current healing phase, and the pending field is the number of state entires waiting to be downloaded. The `pending` value is not necessarily the number of state entries remaining until the healing is finished. As the blockchain progresses the state trie is updated and therefore the data that needs to be downloaded to heal the trie can increase as well as decrease over time. Ultimately, the state should heal faster than the blockchain progresses so the node can get in sync. When the state healing is finished there is a post-sync snapshot generation phase. The node is not in sync until the state healing phase is over. If the node is still regularly reporting `State heal in progress` it is not yet in sync - the state healing is still ongoing. ``` INFO [07-28|10:30:21.965] State heal in progress accounts=169,633@7.48MiB slots=57314@4.17MiB codes=4895@38.14MiB nodes=43,293,196@11.70GiB pending=112,626 @@ -136,6 +136,30 @@ INFO [09-06|01:31:59.885] Rebuilding state snapshot INFO [09-06|01:31:59.910] Resuming state snapshot generation root=bc64d4..fc1edd accounts=0 slots=0 storage=0.00B dangling=0 elapsed=18.838ms ``` +The sync can be confirmed using [`eth.syncing`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_syncing) - it will return `false` if the node is in sync. If `eth.syncing` returns anything other than `false` it has not finished syncing. Generally, if syncing is still ongoing, `eth.syncing` will return block info that looks as follows: + +```json +> eth.sycing +{ + currentBlock: 15285946, + healedBytecodeBytes: 991164713, + healedBytecodes: 130880, + healedTrienodeBytes: 489298493475, + healedTrienodes: 1752917331, + healingBytecode: 0, + healingTrienodes: 1745, + highestBlock: 16345003, + startingBlock: 12218525, + syncedAccountBytes: 391561544809, + syncedAccounts: 136498212, + syncedBytecodeBytes: 2414143936, + syncedBytecodes: 420599, + syncedStorage: 496503178, + syncedStorageBytes: 103368240246 +} +``` + + There are other log messages that are commonly seen during syncing. For example: ```sh @@ -183,6 +207,12 @@ WARN [10-03 |13:10:26.499] Beacon client online, but never received consensus up The message above indicates that a consensus client is present but not working correctly. The most likely reason for this is that the client is not yet in sync. Waiting for the consensus client to sync should solve the issue. + +```sh +WARN [10-03 | 13:15:56.543] Dropping unsynced node during sync id = e2fdc0d92d70953 conn = ... +``` +This message indicates that a peer is being dropped because it is not fully synced. This is normal - the necessary data will be requested from an alternative peer instead. + ## Summary There are a wide range of log messages that are emitted while Geth is running. The level of detail in the logs can be configured using the `verbosity` flag at startup. This page has outlined some of the common messages users can expect to see when Geth is run with default verbosity, without attempting to be comprehensive. For more, please see the [Geth Github](https://github.com/ethereum/go-ethereum) and [Discord](https://discord.gg/WHNkYDsAKU). From ad2b6317f6f7a8705d6c62991a0282317844f08b Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 24 Oct 2022 13:30:50 +0100 Subject: [PATCH 31/33] add info on checkpoint sync --- src/pages/docs/fundamentals/sync-modes.md | 4 +++- src/pages/docs/getting-started/consensus-clients.md | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/pages/docs/fundamentals/sync-modes.md b/src/pages/docs/fundamentals/sync-modes.md index 84a1d12c0d..abec82faa6 100644 --- a/src/pages/docs/fundamentals/sync-modes.md +++ b/src/pages/docs/fundamentals/sync-modes.md @@ -61,7 +61,9 @@ Read more in the [optimistic sync specs](https://github.com/ethereum/consensus-s ### Checkpoint sync -Alternatively, the consensus client can grab a checkpoint from a trusted source which provides a target state to sync up to, before switching to full sync and verifying each block in turn. In this mode, the node trusts that the checkpoint is correct. There are many possible sources for this checkpoint - the gold standard would be to get it out-of-band from another trusted friend, but it could also come from block explorers or public APIs/web apps. +Alternatively, the consensus client can grab a checkpoint from a trusted source which provides a target state to sync up to, before switching to full sync and verifying each block in turn. In this mode, the node trusts that the checkpoint is correct. There are many possible sources for this checkpoint - the gold standard would be to get it out-of-band from another trusted friend, but it could also come from block explorers or [public APIs/web apps](https://eth-clients.github.io/checkpoint-sync-endpoints/). + +Please see the pages on [syncing](/docs/interface/sync-modes.md) for more detail. For troubleshooting, please see the `Syncing` section on the [console log messages](/docs/interface/logs.md) page. ## Summary diff --git a/src/pages/docs/getting-started/consensus-clients.md b/src/pages/docs/getting-started/consensus-clients.md index d38e544a93..0b821d2c44 100644 --- a/src/pages/docs/getting-started/consensus-clients.md +++ b/src/pages/docs/getting-started/consensus-clients.md @@ -47,6 +47,12 @@ The consensus clients all expose a [Beacon API](https://ethereum.github.io/beaco Validators are responsible for securing the Ethereum blockchain. Validators have staked at least 32 ETH into a deposit contract and run validator software. Each of the consensus clients have their own validator software that is described in detail in their respective documentation. The easiest way to handle staking and validator key generation is to use the Ethereum Foundation [Staking Launchpad](https://launchpad.ethereum.org/). The Launchpad guides users through the process of generating validator keys and connecting the validator to the consensus client. +## Syncing + +Geth cannot sync until the connected consensus client is synced. This is because Geth needs a target head to sync to. The fastest way to sync a consensus client is using checkpoint sync. To do this, a checkpoint or a url to a checkpoint provider can be provided to the consensus client on startup. There are several sources for these checkpoints. The ideal scenario is to get one from a trusted node operator, organized out-of-band, and verified against a third node or a block explorer or checkpoint provider. Some clients also allow checkpoint syncing by HTTP API access to an existing Beacon node. There are also several [public checkpoint sync endpoints](https://eth-clients.github.io/checkpoint-sync-endpoints/). + +Please see the pages on [syncing](/src/pages/docs/fundamentals/sync-modes.md) for more detail. For troubleshooting, please see the `Syncing` section on the [console log messages](/src/pages/docs/fundamentals/logs.md) page. + ## Using Geth Geth is the portal for users to send transactions to Ethereum. The Geth Javascript console is available for this purpose, and the majority of the [JSON-RPC API](/docs/rpc/server) will remain available via web3js or HTTP requests with commands as json payloads. These options are explained in more detail on the [Javascript Console page](/docs/interface/javascript-console). The Javascript console can be started From fbfccced30f67dbca2dac2df5994ce9ba2f33fab Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 24 Oct 2022 13:35:52 +0100 Subject: [PATCH 32/33] purge deprecated testnets --- .../docs/developers/geth-developer/dns-discovery-setup.md | 2 +- src/pages/docs/developers/geth-developer/private-network.md | 2 +- src/pages/docs/fundamentals/command-line-options.md | 5 +---- src/pages/docs/interacting-with-geth/rpc/ns-eth.md | 1 + src/pages/docs/tools/devp2p.md | 2 +- 5 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/pages/docs/developers/geth-developer/dns-discovery-setup.md b/src/pages/docs/developers/geth-developer/dns-discovery-setup.md index 685b842886..90f7d78645 100644 --- a/src/pages/docs/developers/geth-developer/dns-discovery-setup.md +++ b/src/pages/docs/developers/geth-developer/dns-discovery-setup.md @@ -57,7 +57,7 @@ devp2p nodeset filter all-nodes.json -eth-network mainnet > mainnet.nodes.exampl The following filter flags are available: -- `-eth-network ( mainnet | ropsten | rinkeby | goerli )` selects an Ethereum network. +- `-eth-network ( mainnet | sepolia | goerli )` selects an Ethereum network. - `-les-server` selects LES server nodes. - `-ip ` restricts nodes to the given IP range. - `-min-age ` restricts the result to nodes which have been live for the diff --git a/src/pages/docs/developers/geth-developer/private-network.md b/src/pages/docs/developers/geth-developer/private-network.md index 560c543930..eade1a89d4 100644 --- a/src/pages/docs/developers/geth-developer/private-network.md +++ b/src/pages/docs/developers/geth-developer/private-network.md @@ -23,7 +23,7 @@ geth --networkid 12345 ### Choosing A Consensus Algorithm -While the main network uses proof-of-work (PoW) to secure the blockchain, Geth also supports the the 'Clique' proof-of-authority (PoA) consensus algorithm as an alternative for private networks. Clique is strongly recommended for private testnets because PoA is far less resource-intensive than PoW. Clique is currently used as the consensus algorithm in public testnets such as [Rinkeby](https://www.rinkeby.io) and [Görli](https://goerli.net). The key differences between the consensus algorithms available in Geth are: +While the main network uses proof-of-work (PoW) to secure the blockchain, Geth also supports the the 'Clique' proof-of-authority (PoA) consensus algorithm as an alternative for private networks. Clique is strongly recommended for private testnets because PoA is far less resource-intensive than PoW. The key differences between the consensus algorithms available in Geth are: #### Ethash diff --git a/src/pages/docs/fundamentals/command-line-options.md b/src/pages/docs/fundamentals/command-line-options.md index 57aed02a1e..5dfbcd54d5 100644 --- a/src/pages/docs/fundamentals/command-line-options.md +++ b/src/pages/docs/fundamentals/command-line-options.md @@ -55,7 +55,7 @@ ETHEREUM OPTIONS: --keystore value Directory for the keystore (default = inside the datadir) --usb Enable monitoring and management of USB hardware wallets --pcscdpath value Path to the smartcard daemon (pcscd) socket file - --networkid value Explicitly set network id (integer)(For testnets: use --ropsten, --rinkeby, --goerli instead) (default: 1) + --networkid value Explicitly set network id (integer)(For testnets: use --sepolia, --goerli instead) (default: 1) --syncmode value Blockchain sync mode ("snap", "full" or "light") (default: snap) --exitwhensynced Exits after block synchronisation completes --gcmode value Blockchain garbage collection mode ("full", "archive") (default: "full") @@ -65,11 +65,8 @@ ETHEREUM OPTIONS: --lightkdf Reduce key-derivation RAM & CPU usage at some expense of KDF strength --eth.requiredblocks value Comma separated block number-to-hash mappings to require for peering (=) --mainnet Ethereum mainnet - --ropsten Ropsten network: pre-configured proof-of-stake test network - --rinkeby Rinkeby network: pre-configured proof-of-authority test network --goerli Görli network: pre-configured proof-of-authority test network --sepolia Sepolia network: pre-configured proof-of-work test network - --kiln Kiln network: pre-configured proof-of-work to proof-of-stake test network --datadir value Data directory for the databases and keystore (default: "~/.ethereum") --datadir.ancient value Data directory for ancient chain segments (default = inside chaindata) --remotedb value URL for remote database diff --git a/src/pages/docs/interacting-with-geth/rpc/ns-eth.md b/src/pages/docs/interacting-with-geth/rpc/ns-eth.md index b610e41afb..75446346f0 100644 --- a/src/pages/docs/interacting-with-geth/rpc/ns-eth.md +++ b/src/pages/docs/interacting-with-geth/rpc/ns-eth.md @@ -64,6 +64,7 @@ Example: The method returns a single `Binary` consisting the return value of the executed contract call. #### Simple example +**note that this example uses the Rinkeby network, which is now deprecated** With a synced Rinkeby node with RPC exposed on localhost (`geth --rinkeby --http`) we can make a call against the [CheckpointOracle](https://rinkeby.etherscan.io/address/0xebe8efa441b9302a0d7eaecc277c09d20d684540) to retrieve the list of administrators: diff --git a/src/pages/docs/tools/devp2p.md b/src/pages/docs/tools/devp2p.md index 05623e76fa..f22fa0366d 100644 --- a/src/pages/docs/tools/devp2p.md +++ b/src/pages/docs/tools/devp2p.md @@ -62,7 +62,7 @@ Run `devp2p nodeset filter ` to write a new, filte - `-limit ` limits the output set to N entries, taking the top N nodes by score - `-ip ` filters nodes by IP subnet - `-min-age ` filters nodes by 'first seen' time -- `-eth-network ` filters nodes by "eth" ENR entry +- `-eth-network ` filters nodes by "eth" ENR entry - `-les-server` filters nodes by LES server support - `-snap` filters nodes by snap protocol support From 357825b2f475b17ee7fcbfbe371f77c5658807f0 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 24 Oct 2022 15:23:46 +0100 Subject: [PATCH 33/33] add link to eth api docs to ns_eth --- src/pages/docs/interacting-with-geth/rpc/ns-eth.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/docs/interacting-with-geth/rpc/ns-eth.md b/src/pages/docs/interacting-with-geth/rpc/ns-eth.md index 75446346f0..e10aa1279a 100644 --- a/src/pages/docs/interacting-with-geth/rpc/ns-eth.md +++ b/src/pages/docs/interacting-with-geth/rpc/ns-eth.md @@ -3,7 +3,8 @@ title: eth Namespace description: Documentation for the JSON-RPC API "eth" namespace --- -Geth provides several extensions to the standard "eth" JSON-RPC namespace. + +Documentation for the API methods in the `eth` namespace can be found on [ethereum.org](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_protocolversion). Geth provides several extensions to the standard "eth" JSON-RPC namespace that are defined below. ### eth_subscribe, eth_unsubscribe
= ({ return (
{item[columnHeader.toLowerCase()]}