diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..1bc52d3
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,10 @@
+{
+ "extends": [
+ "next/core-web-vitals",
+ "prettier"
+ ],
+ "rules": {
+ "react/no-unescaped-entities": "off",
+ "@next/next/no-img-element": "off"
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8c7d905
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,105 @@
+# Dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# Testing
+/coverage
+
+# Next.js
+/.next/
+/out/
+.swc/
+
+# Production
+/build
+/dist
+
+# Misc
+.DS_Store
+*.pem
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+# Debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Local env files
+.env*.local
+
+# Vercel
+.vercel
+
+# TypeScript
+*.tsbuildinfo
+next-env.d.ts
+
+# IDE
+.idea/
+.vscode/
+*.sublime-project
+*.sublime-workspace
+*.code-workspace
+
+# Logs
+logs
+*.log
+
+# Cache
+.cache/
+.npm/
+
+# Optional eslint cache
+.eslintcache
+
+# Optional stylelint cache
+.stylelintcache
+
+# Yarn
+.yarn/*
+!.yarn/patches
+!.yarn/plugins
+!.yarn/releases
+!.yarn/sdks
+!.yarn/versions
+.pnp.*
+
+# macOS
+.DS_Store
+.AppleDouble
+.LSOverride
+Icon
+._*
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Windows
+Thumbs.db
+Thumbs.db:encryptable
+ehthumbs.db
+ehthumbs_vista.db
+*.stackdump
+[Dd]esktop.ini
+$RECYCLE.BIN/
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+*.lnk
+
+# Linux
+*~
+.fuse_hidden*
+.directory
+.Trash-*
+.nfs*
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8ef16f7
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Ethereum Foundation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/src/components/UI/Header.tsx b/src/components/UI/Header.tsx
index 459388a..3434cb7 100644
--- a/src/components/UI/Header.tsx
+++ b/src/components/UI/Header.tsx
@@ -1,4 +1,4 @@
-import { Box, Container, Flex } from '@chakra-ui/react';
+import { Box, Container, Flex, HStack } from '@chakra-ui/react';
import { FC } from 'react';
import { useRouter } from 'next/router';
import Image from 'next/image';
@@ -7,6 +7,7 @@ import EFlogo from '../../../public/images/ef-logo.svg';
import { HOME_URL } from '../../constants';
import { Nav } from '../Nav';
+import { ThemeToggle } from './ThemeToggle';
export const Header: FC = () => {
const router = useRouter();
@@ -19,7 +20,10 @@ export const Header: FC = () => {
-
+
+
+
+
diff --git a/src/components/UI/ThemeToggle.tsx b/src/components/UI/ThemeToggle.tsx
new file mode 100644
index 0000000..28d79e8
--- /dev/null
+++ b/src/components/UI/ThemeToggle.tsx
@@ -0,0 +1,17 @@
+import { IconButton, useColorMode } from '@chakra-ui/react';
+import { MoonIcon, SunIcon } from '@chakra-ui/icons';
+
+export const ThemeToggle = () => {
+ const { colorMode, toggleColorMode } = useColorMode();
+
+ return (
+ : }
+ onClick={toggleColorMode}
+ variant="ghost"
+ color="current"
+ _hover={{ bg: colorMode === 'light' ? 'gray.100' : 'whiteAlpha.200' }}
+ />
+ );
+};
diff --git a/src/components/UI/index.ts b/src/components/UI/index.ts
index d3612da..ce93cbc 100644
--- a/src/components/UI/index.ts
+++ b/src/components/UI/index.ts
@@ -6,3 +6,4 @@ export * from './Footer';
export * from './Header';
export * from './InternalPost';
export * from './PageMetadata';
+export * from './ThemeToggle';
diff --git a/src/constants.ts b/src/constants.ts
index d8f08f4..01d0921 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -4,14 +4,16 @@ export const BLOG_URL = '/blog';
export const TEAM_URL = '/team';
export const EVENTS_URL = '/events';
export const COMPETITIONS_URL = '/competitions';
+export const RESPONSIBILITIES_URL = '/responsibilities';
// nav
export const NAV_LINKS = [
{ href: HOME_URL, text: 'home' },
{ href: BLOG_URL, text: 'blog' },
{ href: TEAM_URL, text: 'team' },
- { href: EVENTS_URL, text: 'events' },
- { href: COMPETITIONS_URL, text: 'competitions' }
+ // { href: EVENTS_URL, text: 'events' },
+ { href: COMPETITIONS_URL, text: 'competitions' },
+ { href: RESPONSIBILITIES_URL, text: 'responsibilities' }
];
// metadata
diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx
index e87b468..c28af9e 100644
--- a/src/pages/_app.tsx
+++ b/src/pages/_app.tsx
@@ -1,4 +1,4 @@
-import { ChakraProvider } from '@chakra-ui/react';
+import { ChakraProvider, ColorModeScript } from '@chakra-ui/react';
import type { AppProps } from 'next/app';
import Head from 'next/head';
@@ -26,6 +26,7 @@ function MyApp({ Component, pageProps }: AppProps) {
+
diff --git a/src/pages/blog/index.tsx b/src/pages/blog/index.tsx
index 9f3a494..541a20a 100644
--- a/src/pages/blog/index.tsx
+++ b/src/pages/blog/index.tsx
@@ -42,10 +42,45 @@ interface Props {
// add here the list of external blog posts, with title, date and link
const externalLinks = [
{
- title: 'Writing Robust C - Best Practices for Finding and Preventing Vulnerabilities',
+ title: 'ETH Rangers Program',
+ date: '2024-12-02',
+ link: 'https://blog.ethereum.org/2024/12/02/ethrangers-public-goods'
+ },
+ {
+ title: 'Ethereum Protocol Attackathon Announcement',
+ date: '2024-11-25',
+ link: 'https://blog.ethereum.org/2024/11/25/ethereum-protocol-attackathon'
+ },
+ {
+ title: 'Secured #6 - Writing Robust C - Best Practices for Finding and Preventing Vulnerabilities',
date: '2023-11-02',
link: 'https://blog.ethereum.org/2023/11/02/writing-robust-c'
- }
+ },
+ {
+ title: 'Secured #5 - Public Vulnerability Disclosures',
+ date: '2023-05-03',
+ link: 'https://blog.ethereum.org/2023/05/03/secured-5-disclosures-update'
+ },
+ {
+ title: 'Secured #4 - Bug Bounty Rewards to $250,000',
+ date: '2022-05-16',
+ link: 'https://blog.ethereum.org/2022/05/16/secured-no-4'
+ },
+ {
+ title: 'Secured #3 - Security Teams',
+ date: '2022-04-22',
+ link: 'https://blog.ethereum.org/2022/04/14/secured-no-3'
+ },
+ {
+ title: 'Secured #2 - Public Vulnerability Disclosures',
+ date: '2022-03-09',
+ link: 'https://blog.ethereum.org/2022/03/09/secured-no-2'
+ },
+ {
+ title: 'Secured #1 - BLS is Everywhere',
+ date: '2021-09-09',
+ link: 'https://blog.ethereum.org/2021/09/09/secured-no-1'
+ },
];
const Blog: NextPage = ({ posts }) => {
diff --git a/src/pages/responsibilities.tsx b/src/pages/responsibilities.tsx
new file mode 100644
index 0000000..bb78d2a
--- /dev/null
+++ b/src/pages/responsibilities.tsx
@@ -0,0 +1,178 @@
+import { Box, Heading, Link, ListItem, Stack, Text, UnorderedList, VStack } from '@chakra-ui/react';
+import type { NextPage } from 'next';
+
+import { PageMetadata } from '../components/UI';
+
+const Responsibilities: NextPage = () => {
+ return (
+ <>
+
+
+
+
+ Our Responsibilities
+
+
+
+
+ Coordination & Collaboration
+
+ We spend time coordinating and collaborating with many parts of the ecosystem in order to further help keep Ethereum safe. Some of the things we do are:
+
+
+ Vulnerability coordination and collaboration with L2s, L1s, critical dependencies and more for security issues
+ Protocol Security call series
+ Coordination and collaboration with external security auditors for protocol related audits
+ Security coordination and collaboration with client teams and critical dependencies
+ Coordination and collaboration with researchers from the Ethereum ecosystem, academia and security
+ Collaboration with teams such as EF Devops and EF Testing
+ Ongoing collaboration and support for grantees
+ Support public good projects related to security
+ Writing the "Secured" series on the EF Blog
+ Host security challenges such as the Ethereum Protocol Attackathon
+
+
+
+
+ Bug Bounty Program
+
+ The Protocol Security Research team manages the Ethereum Foundation Bug Bounty Program.
+ We receive reports, triage, provide input, pay bounty rewards and coordinate public disclosures.
+ The bug bounty program covers Ethereum specifications, Ethereum clients, the Solidity compiler and more.
+
+
+ We also keep a public repository of past results.
+
+
+
+
+ Grants
+
+ We feel that providing resources and funding to security grants is impactful and valuable to the ecosystem.
+ In our opinion, providing funding is often critical, however we also provide our own time as a resource in order to further help projects be successful.
+
+
+ Provide and support Academic Grants through funding and resources
+ We support the Ethereum Protocol Fellowship by providing resources
+ We provide resources for the Devcon(nect) Scholars
+ We provide funding and resources for General Security Grants including:
+
+ The Red Guild
+ Security Alliance
+ Fuzzers created by external contributors like Guido Vranken
+
+
+
+
+
+
+ Fuzzing
+
+ There is a finite amount of time for manual audits, so we build, maintain and use fuzzers to increase the likelihood of finding vulnerabilities.
+ Many severe vulnerabilities have been found by these fuzzers, and then patched by client teams before they could be found and exploited by a malicious actor.
+
+
+
+ Execution Layer
+
+ goevmlab
+ tx-fuzz
+ FuzzyVM
+ merge-fuzz
+ Nosy
+ Various cryptography & EVM fuzzers
+ Private fuzzers
+
+
+
+ Consensus Layer
+
+ Nosy
+ Private fuzzers
+
+
+
+ Full Stack
+
+ Attacknet (built from grant)
+ Antithesis (service provider)
+
+
+
+ Cryptographic Libraries
+
+ kzgfuzz
+ kzg differential fuzzer
+
+
+
+
+
+
+ Manual Reviews
+
+ We spend a lot of time manually reviewing specifications, clients and critical dependencies.
+ Upcoming changes for hardforks are always being continually reviewed and prioritized.
+
+
+
+ Specifications
+
+ Execution Layer
+ Consensus Layer
+
+
+
+ Clients
+
+ Besu
+ Erigon
+ Geth
+ Lighthouse
+ Lodestar
+ Nimbus
+ Nethermind
+ Prysm
+ Teku
+ Reth
+ Grandine
+
+
+
+ Network Libraries
+
+ devp2p
+ libp2p
+
+
+
+
+
+
+ Research
+
+ Many hours are spent on security research related to the Ethereum ecosystem. As some of this research could potentially pose a threat,
+ the specific research results may often not end up as public research, but the outcome of the research is rather used to help further
+ secure the Ethereum ecosystem through improvements.
+
+ Some examples of research topics include:
+
+ Client Diversity
+ /dev/random Diversity
+ ZK security research
+ Threat Analysis
+ Risk Assessments
+ L2s
+ Cryptography
+
+
+
+
+ >
+ );
+};
+
+export default Responsibilities;
diff --git a/src/theme/foundations/colors.ts b/src/theme/foundations/colors.ts
index f22c570..a5b32b5 100644
--- a/src/theme/foundations/colors.ts
+++ b/src/theme/foundations/colors.ts
@@ -3,5 +3,41 @@ export const colors = {
blue: '#667bbe',
lightblue: '#14add2',
orange: '#f38b75'
+ },
+ config: {
+ initialColorMode: 'system',
+ useSystemColorMode: true,
+ },
+ semanticTokens: {
+ colors: {
+ text: {
+ default: 'gray.900',
+ _dark: 'gray.100',
+ },
+ background: {
+ default: 'white',
+ _dark: 'gray.900',
+ },
+ primary: {
+ default: 'brand.lightblue',
+ _dark: 'brand.blue',
+ },
+ secondary: {
+ default: 'brand.orange',
+ _dark: 'brand.orange',
+ },
+ border: {
+ default: 'gray.200',
+ _dark: 'gray.700',
+ },
+ card: {
+ default: 'white',
+ _dark: 'gray.800',
+ },
+ hover: {
+ default: 'gray.100',
+ _dark: 'gray.700',
+ }
+ }
}
};
diff --git a/src/theme/index.ts b/src/theme/index.ts
index 751dcb6..f6c5973 100644
--- a/src/theme/index.ts
+++ b/src/theme/index.ts
@@ -1,11 +1,25 @@
-import { extendTheme } from '@chakra-ui/react';
+import { extendTheme, ThemeConfig } from '@chakra-ui/react';
import { breakpoints, colors, fonts } from './foundations';
+const config: ThemeConfig = {
+ initialColorMode: 'system',
+ useSystemColorMode: true,
+};
+
const overrides = {
+ config,
breakpoints,
colors,
- fonts
+ fonts,
+ styles: {
+ global: (props: { colorMode: string }) => ({
+ body: {
+ bg: props.colorMode === 'dark' ? 'gray.900' : 'white',
+ color: props.colorMode === 'dark' ? 'gray.100' : 'gray.900',
+ },
+ }),
+ },
};
export default extendTheme(overrides);
diff --git a/yarn.lock b/yarn.lock
index 415f48e..5b32c88 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1218,9 +1218,9 @@ callsites@^3.0.0:
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
caniuse-lite@^1.0.30001283:
- version "1.0.30001524"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz#1e14bce4f43c41a7deaeb5ebfe86664fe8dadb80"
- integrity sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==
+ version "1.0.30001692"
+ resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz"
+ integrity sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==
ccount@^2.0.0:
version "2.0.1"