diff --git a/.gitignore b/.gitignore index 472fcdf..126b232 100644 --- a/.gitignore +++ b/.gitignore @@ -20,9 +20,10 @@ src/data/eips.json .vscode/* !.vscode/extensions.json .idea +.zed .DS_Store *.suo *.ntvs* *.njsproj *.sln -*.sw? \ No newline at end of file +*.sw? \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 7af9767..97a6be5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "@types/react": "^19.1.2", "@types/react-dom": "^19.1.2", "@vitejs/plugin-react": "^4.4.1", + "ajv": "^8.17.1", "autoprefixer": "^10.4.21", "eslint": "^9.25.0", "eslint-plugin-react-hooks": "^5.2.0", @@ -781,6 +782,23 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", @@ -793,6 +811,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, "node_modules/@eslint/js": { "version": "9.28.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz", @@ -1839,15 +1864,16 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -2377,6 +2403,30 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, "node_modules/espree": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", @@ -2473,7 +2523,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -2481,6 +2532,23 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -2853,10 +2921,11 @@ "dev": true }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -3656,6 +3725,7 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3781,6 +3851,16 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -4212,6 +4292,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } diff --git a/package.json b/package.json index d461cdf..cad2199 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "@types/react": "^19.1.2", "@types/react-dom": "^19.1.2", "@vitejs/plugin-react": "^4.4.1", + "ajv": "^8.17.1", "autoprefixer": "^10.4.21", "eslint": "^9.25.0", "eslint-plugin-react-hooks": "^5.2.0", diff --git a/scripts/compile-eips.mjs b/scripts/compile-eips.mjs index 8df0284..f99a652 100644 --- a/scripts/compile-eips.mjs +++ b/scripts/compile-eips.mjs @@ -1,12 +1,19 @@ import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; +import Ajv from 'ajv'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const EIPS_DIR = path.join(__dirname, '../src/data/eips'); const OUTPUT_FILE = path.join(__dirname, '../src/data/eips.json'); +const SCHEMA_FILE = path.join(__dirname, 'eip-schema.json'); + +// Initialize JSON Schema validator +const ajv = new Ajv({ allErrors: true }); +const schema = JSON.parse(fs.readFileSync(SCHEMA_FILE, 'utf8')); +const validate = ajv.compile(schema); /** * Compiles individual EIP JSON files into a single eips.json file @@ -28,13 +35,31 @@ function compileEips() { process.exit(1); } - // Read and parse each EIP file + // Read, parse, and validate each EIP file const eips = []; + const errors = []; + for (const file of files) { const filePath = path.join(EIPS_DIR, file); try { const content = fs.readFileSync(filePath, 'utf8'); const eip = JSON.parse(content); + + // Validate against schema + const valid = validate(eip); + if (!valid) { + const errorMessages = validate.errors + .map(err => { + const path = err.instancePath || '/'; + const extra = err.params?.additionalProperty + ? ` (property: "${err.params.additionalProperty}")` + : ''; + return ` - ${path}: ${err.message}${extra}`; + }) + .join('\n'); + errors.push(`${file}:\n${errorMessages}`); + } + eips.push(eip); } catch (error) { console.error(`Error reading/parsing ${file}:`, error.message); @@ -42,6 +67,14 @@ function compileEips() { } } + // Report validation errors + if (errors.length > 0) { + console.error('\nSchema validation errors:\n'); + console.error(errors.join('\n\n')); + console.error(`\n${errors.length} file(s) failed validation.`); + process.exit(1); + } + // Sort by EIP id eips.sort((a, b) => a.id - b.id); diff --git a/scripts/eip-schema.json b/scripts/eip-schema.json new file mode 100644 index 0000000..afe8ef7 --- /dev/null +++ b/scripts/eip-schema.json @@ -0,0 +1,120 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "EIP", + "type": "object", + "required": ["id", "title", "status", "description", "author", "type", "createdDate", "discussionLink", "forkRelationships"], + "additionalProperties": false, + "properties": { + "id": { "type": "integer" }, + "title": { "type": "string" }, + "status": { "type": "string" }, + "description": { "type": "string" }, + "author": { "type": "string" }, + "type": { "type": "string" }, + "category": { "type": "string" }, + "createdDate": { "type": "string" }, + "discussionLink": { "type": "string" }, + "reviewer": { "type": "string" }, + "collection": { "type": "string" }, + "laymanDescription": { "type": "string" }, + "northStars": { + "type": "array", + "items": { "type": "string" } + }, + "benefits": { + "type": "array", + "items": { "type": "string" } + }, + "tradeoffs": { + "type": "array", + "items": { "type": "string" } + }, + "forkRelationships": { + "type": "array", + "items": { "$ref": "#/$defs/ForkRelationship" } + }, + "northStarAlignment": { "$ref": "#/$defs/NorthStarAlignment" }, + "stakeholderImpacts": { "$ref": "#/$defs/StakeholderImpacts" } + }, + "$defs": { + "ForkRelationship": { + "type": "object", + "required": ["forkName", "statusHistory"], + "additionalProperties": false, + "properties": { + "forkName": { "type": "string" }, + "statusHistory": { + "type": "array", + "items": { "$ref": "#/$defs/StatusHistoryEntry" } + }, + "isHeadliner": { "type": "boolean" }, + "wasHeadlinerCandidate": { "type": "boolean" }, + "headlinerDiscussionLink": { "type": "string" }, + "layer": { "type": "string" }, + "champion": { "$ref": "#/$defs/Champion" } + } + }, + "StatusHistoryEntry": { + "type": "object", + "required": ["status"], + "additionalProperties": false, + "properties": { + "status": { + "type": "string", + "enum": ["Proposed", "Considered", "Scheduled", "Declined", "Included", "Withdrawn"] + }, + "call": { + "type": "string", + "pattern": "^(acdc|acde|acdt)/[0-9]+$" + }, + "date": { + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + } + } + }, + "Champion": { + "type": "object", + "required": ["name"], + "additionalProperties": false, + "properties": { + "name": { "type": "string" }, + "discord": { "type": "string" }, + "telegram": { "type": "string" }, + "email": { "type": "string" } + } + }, + "NorthStarAlignment": { + "type": "object", + "additionalProperties": false, + "properties": { + "scaleL1": { "$ref": "#/$defs/ImpactDescription" }, + "scaleBlobs": { "$ref": "#/$defs/ImpactDescription" }, + "improveUX": { "$ref": "#/$defs/ImpactDescription" } + } + }, + "ImpactDescription": { + "type": "object", + "required": ["description"], + "additionalProperties": false, + "properties": { + "impact": { "type": "string" }, + "description": { "type": "string" } + } + }, + "StakeholderImpacts": { + "type": "object", + "additionalProperties": false, + "properties": { + "endUsers": { "$ref": "#/$defs/ImpactDescription" }, + "appDevs": { "$ref": "#/$defs/ImpactDescription" }, + "walletDevs": { "$ref": "#/$defs/ImpactDescription" }, + "toolingInfra": { "$ref": "#/$defs/ImpactDescription" }, + "layer2s": { "$ref": "#/$defs/ImpactDescription" }, + "stakersNodes": { "$ref": "#/$defs/ImpactDescription" }, + "clClients": { "$ref": "#/$defs/ImpactDescription" }, + "elClients": { "$ref": "#/$defs/ImpactDescription" } + } + } + } +} diff --git a/src/components/PublicNetworkUpgradePage.tsx b/src/components/PublicNetworkUpgradePage.tsx index 8029af8..047b45d 100644 --- a/src/components/PublicNetworkUpgradePage.tsx +++ b/src/components/PublicNetworkUpgradePage.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useState } from 'react'; import { Link, useLocation } from 'react-router-dom'; -import eipsData from '../data/eips.json'; +import { eipsData } from '../data/eips'; import { useMetaTags } from '../hooks/useMetaTags'; import { useAnalytics } from '../hooks/useAnalytics'; import { EIP, ClientTeamPerspective } from '../types'; diff --git a/src/components/RankPage.tsx b/src/components/RankPage.tsx index bfcbf43..a24c15f 100644 --- a/src/components/RankPage.tsx +++ b/src/components/RankPage.tsx @@ -6,9 +6,10 @@ import { getLaymanTitle, getProposalPrefix, getHeadlinerLayer, + getInclusionStage, } from "../utils/eip"; import { useAnalytics } from "../hooks/useAnalytics"; -import eipsData from "../data/eips.json"; +import { eipsData } from "../data/eips"; import ThemeToggle from "./ui/ThemeToggle"; interface TierItem { @@ -165,7 +166,11 @@ const RankPage: React.FC = () => { // Initialize with Glamsterdam headliner EIPs useEffect(() => { const glamsterdamHeadliners = eipsData - .filter((eip) => eip.forkRelationships.some((fork) => fork.forkName.toLowerCase() === "glamsterdam" && (fork.status === "Proposed" || fork.status === "Considered"))) + .filter((eip) => + ["Proposed for Inclusion", "Considered for Inclusion"].includes( + getInclusionStage(eip, "glamsterdam") + ) + ) .filter((eip) => !isHeadliner(eip, "glamsterdam")) .map((eip) => ({ id: `eip-${eip.id}`, diff --git a/src/data/eips.ts b/src/data/eips.ts new file mode 100644 index 0000000..6009d13 --- /dev/null +++ b/src/data/eips.ts @@ -0,0 +1,4 @@ +import { EIP } from '../types/eip'; +import eipsDataRaw from './eips.json'; + +export const eipsData = eipsDataRaw as EIP[]; diff --git a/src/data/eips/2537.json b/src/data/eips/2537.json index 95f3eba..b09ca28 100644 --- a/src/data/eips/2537.json +++ b/src/data/eips/2537.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Pectra", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "A new precompile for the BLS12-381 curve, a native function built in clients that smart contracts can use to verify signatures and perform certain operation more cheaply and securely.", diff --git a/src/data/eips/2780.json b/src/data/eips/2780.json index 3c74894..d1a4edc 100644 --- a/src/data/eips/2780.json +++ b/src/data/eips/2780.json @@ -12,7 +12,16 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Considered", + "statusHistory": [ + { + "status": "Proposed" + }, + { + "status": "Considered", + "call": "acde/226", + "date": "2025-12-18" + } + ], "layer": "EL", "champion": { "name": "Ben Adams", diff --git a/src/data/eips/2926.json b/src/data/eips/2926.json index 2d9f4d9..86cd534 100644 --- a/src/data/eips/2926.json +++ b/src/data/eips/2926.json @@ -12,7 +12,16 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Proposed" + }, + { + "status": "Declined", + "call": "acde/226", + "date": "2025-12-18" + } + ], "layer": "EL", "champion": { "name": "Guillaume Ballet", diff --git a/src/data/eips/2935.json b/src/data/eips/2935.json index 9b7e0bd..4148b6c 100644 --- a/src/data/eips/2935.json +++ b/src/data/eips/2935.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Pectra", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "northStarAlignment": { diff --git a/src/data/eips/3540.json b/src/data/eips/3540.json index 6fc4d20..106ee39 100644 --- a/src/data/eips/3540.json +++ b/src/data/eips/3540.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Pectra", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This introduces EVM Object Format (EOF), a new standardized container for smart contract bytecode that gets validated once when deployed rather than every time it runs. EOF separates code from data, making contracts more structured and analyzable. It enables future EVM improvements like better jump instructions, multibyte opcodes, and function representations. The format is extensible and versioned, allowing gradual introduction of new features. Only new contracts can use EOF - existing contracts remain unchanged. This is the foundation that makes other EOF-related improvements possible." diff --git a/src/data/eips/3670.json b/src/data/eips/3670.json index 4927d18..e0ee5c7 100644 --- a/src/data/eips/3670.json +++ b/src/data/eips/3670.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Pectra", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This adds strict validation rules for EOF smart contracts when they're deployed. It rejects contracts with invalid bytecode, such as incomplete PUSH instructions or undefined opcodes. It also removes deprecated instructions like CALLCODE and SELFDESTRUCT from EOF contracts. This validation only happens once at deployment time and only affects new EOF contracts - existing legacy contracts remain unchanged. The goal is to make bytecode more predictable and easier to reason about, while ensuring all EVM implementations handle code the same way." diff --git a/src/data/eips/4200.json b/src/data/eips/4200.json index d1622af..a455d33 100644 --- a/src/data/eips/4200.json +++ b/src/data/eips/4200.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Pectra", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This introduces three new jump instructions (RJUMP, RJUMPI, and RJUMPV) for EOF contracts that use relative addressing instead of absolute addressing. These instructions are more gas-efficient than traditional JUMP/JUMPI instructions, don't require JUMPDEST markers, and make code analysis easier. RJUMP does unconditional jumps, RJUMPI does conditional jumps, and RJUMPV provides jump tables for switch-case scenarios. The relative addressing means code can be moved around without breaking, and the static nature allows for better optimization and validation at deployment time." diff --git a/src/data/eips/4750.json b/src/data/eips/4750.json index 15b5eaa..b872001 100644 --- a/src/data/eips/4750.json +++ b/src/data/eips/4750.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Pectra", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This introduces proper function support to EOF contracts by allowing multiple code sections, each representing a separate function. It adds two new instructions: CALLF to call functions and RETF to return from them. Functions have defined input/output parameters and their own isolated stack, improving code organization and analysis. Dynamic jumps (JUMP/JUMPI) are completely removed in favor of static function calls, making contracts more predictable and easier to optimize. A return stack tracks function call history, and JUMPDEST becomes a simple NOP instruction since jump analysis is no longer needed." diff --git a/src/data/eips/4844.json b/src/data/eips/4844.json index 0e405a3..c4cc221 100644 --- a/src/data/eips/4844.json +++ b/src/data/eips/4844.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Cancun-Deneb", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ] } diff --git a/src/data/eips/5450.json b/src/data/eips/5450.json index d117c75..09fffbd 100644 --- a/src/data/eips/5450.json +++ b/src/data/eips/5450.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Pectra", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This adds comprehensive stack validation to EOF contracts at deployment time, ensuring that stack underflow and overflow cannot happen during execution. By analyzing all possible code paths and tracking stack heights, it eliminates the need for most runtime stack checks, making execution faster and more predictable. Only CALLF and JUMPF instructions need runtime stack overflow checks. The validation also prevents deployment of unreachable code and ensures proper function termination. This creates guarantees that enable better compiler optimizations and ahead-of-time compilation while maintaining linear validation complexity." diff --git a/src/data/eips/5920.json b/src/data/eips/5920.json index 99e755d..98c00e0 100644 --- a/src/data/eips/5920.json +++ b/src/data/eips/5920.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "layer": "EL", "champion": { "name": "Charles Cooper", diff --git a/src/data/eips/6110.json b/src/data/eips/6110.json index 1091977..f0fd984 100644 --- a/src/data/eips/6110.json +++ b/src/data/eips/6110.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Pectra", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "New way how validator deposits are processed between CL and EL, more simple and native to merged Ethereum enabling better UX and features.", diff --git a/src/data/eips/6206.json b/src/data/eips/6206.json index 1277ca4..5120911 100644 --- a/src/data/eips/6206.json +++ b/src/data/eips/6206.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Pectra", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This introduces the JUMPF instruction for EOF contracts, enabling tail call optimization by jumping to code sections without adding return stack frames. It also introduces non-returning functions - sections that never return control to their caller. This is particularly efficient for error handling helpers that end with REVERT, allowing compilers to generate more optimal code with reduced gas costs and smaller bytecode size. Functions can jump to other functions with fewer outputs, and non-returning functions don't need to clean up extra stack items before terminating." diff --git a/src/data/eips/6404.json b/src/data/eips/6404.json index 75813c2..58bc00d 100644 --- a/src/data/eips/6404.json +++ b/src/data/eips/6404.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "EL", "champion": { "name": "Etan Kissling", diff --git a/src/data/eips/6466.json b/src/data/eips/6466.json index 82ae249..4eab9d9 100644 --- a/src/data/eips/6466.json +++ b/src/data/eips/6466.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "EL", "champion": { "name": "Etan Kissling", diff --git a/src/data/eips/663.json b/src/data/eips/663.json index 6b41fd8..cf5f7f8 100644 --- a/src/data/eips/663.json +++ b/src/data/eips/663.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Pectra", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This adds three new EVM instructions (DUPN, SWAPN, and EXCHANGE) that allow smart contracts to access and manipulate stack items beyond the current 16-item limit, reaching up to 256 items deep. Currently, the EVM stack can hold 1024 items but only the top 16 are easily accessible. These new instructions help compilers write more efficient code for complex functions with many variables by providing better stack management capabilities. The feature only works with the new EOF bytecode format, not legacy contracts." diff --git a/src/data/eips/6800.json b/src/data/eips/6800.json index 54817c2..0035b31 100644 --- a/src/data/eips/6800.json +++ b/src/data/eips/6800.json @@ -51,6 +51,5 @@ "Improves network decentralization through lower barriers", "More efficient cryptographic proofs (smaller size)", "Foundation for future scalability improvements" - ], - "isHeadliner": false + ] } diff --git a/src/data/eips/6873.json b/src/data/eips/6873.json index 5e86d52..88cade4 100644 --- a/src/data/eips/6873.json +++ b/src/data/eips/6873.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Withdrawn", + "statusHistory": [ + { + "status": "Withdrawn" + } + ], "layer": "EL", "champion": { "name": "Guillaume Ballet", diff --git a/src/data/eips/7002.json b/src/data/eips/7002.json index 63e43fa..21fb0bc 100644 --- a/src/data/eips/7002.json +++ b/src/data/eips/7002.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Pectra", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "A new system contract that lets the withdrawal credential owner trigger a validator exit onchain without the need for BLS validator key on CL.", diff --git a/src/data/eips/7069.json b/src/data/eips/7069.json index cccb581..3aa6f45 100644 --- a/src/data/eips/7069.json +++ b/src/data/eips/7069.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This introduces three new call instructions (EXTCALL, EXTDELEGATECALL, EXTSTATICCALL) for EOF contracts that remove gas observability and simplify call semantics. Unlike legacy CALL instructions, these don't allow specifying gas limits - they use the 63/64th rule automatically. They return extensible status codes (0=success, 1=revert, 2=failure) instead of boolean values, remove output buffer complexity in favor of RETURNDATACOPY, and add RETURNDATALOAD for efficient return data access. This makes contracts more resilient to future gas repricing and eliminates many gas-related attack vectors while simplifying the calling mechanism." diff --git a/src/data/eips/7251.json b/src/data/eips/7251.json index b9f634c..dfb31a4 100644 --- a/src/data/eips/7251.json +++ b/src/data/eips/7251.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Pectra", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "Introduces new validator maximum effective balance of 2048 ETH, instead of exactly 32 ETH, allowing compounding into larger individual validators that reward on each extra ETH above 32.", diff --git a/src/data/eips/7480.json b/src/data/eips/7480.json index 3a892f3..e7ab052 100644 --- a/src/data/eips/7480.json +++ b/src/data/eips/7480.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Pectra", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This introduces four new instructions for EOF contracts to access their data section: DATALOAD (loads 32-byte word), DATALOADN (optimized version with compile-time offset), DATASIZE (returns data section size), and DATACOPY (copies data to memory). These replace the deprecated CODECOPY instruction for data access in EOF contracts, enabling proper separation between code and data. The instructions follow the same pattern as existing data access instructions like those for calldata and returndata, with zero-padding for out-of-bounds access and validation to ensure safe operation." diff --git a/src/data/eips/7547.json b/src/data/eips/7547.json index bffeeb4..a24224c 100644 --- a/src/data/eips/7547.json +++ b/src/data/eips/7547.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Pectra", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "Introduces inclusion lists so proposers can require that specific transactions be included promptly, improving censorship resistance.", diff --git a/src/data/eips/7549.json b/src/data/eips/7549.json index 34e6a21..8225200 100644 --- a/src/data/eips/7549.json +++ b/src/data/eips/7549.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Pectra", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "Simplifies the structure of validator attestations by moving the committee index field outside the signed message, making verification and aggregation cheaper.", diff --git a/src/data/eips/7594.json b/src/data/eips/7594.json index a1bcb79..a98d4b9 100644 --- a/src/data/eips/7594.json +++ b/src/data/eips/7594.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Included", + "statusHistory": [ + { + "status": "Included" + } + ], "isHeadliner": true } ], diff --git a/src/data/eips/7610.json b/src/data/eips/7610.json index 11b9e91..6551b7e 100644 --- a/src/data/eips/7610.json +++ b/src/data/eips/7610.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "layer": "EL", "champion": { "name": "Jochem Brouwer", diff --git a/src/data/eips/7619.json b/src/data/eips/7619.json index e89fdb9..c5e58c7 100644 --- a/src/data/eips/7619.json +++ b/src/data/eips/7619.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "EL", "champion": { "name": "Danno Ferrin", diff --git a/src/data/eips/7620.json b/src/data/eips/7620.json index 66045fc..eca27a1 100644 --- a/src/data/eips/7620.json +++ b/src/data/eips/7620.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This introduces new contract creation instructions for EOF contracts: EOFCREATE and RETURNCODE, which replace the legacy CREATE/CREATE2 instructions. Since EOF removes code observability (the ability to inspect and manipulate code), the old creation methods don't work. EOFCREATE creates contracts using pre-validated subcontainers within the factory contract, maintaining security while enabling factory patterns. RETURNCODE allows the initialization code to specify which subcontainer becomes the deployed contract and append additional data. This preserves the factory contract use case while maintaining EOF's code non-observability guarantees." diff --git a/src/data/eips/7623.json b/src/data/eips/7623.json index 733d489..ca418b5 100644 --- a/src/data/eips/7623.json +++ b/src/data/eips/7623.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Pectra", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "Calldata gas costs is increased to limit state growth and incentivize more efficient blobs to store data.", diff --git a/src/data/eips/7642.json b/src/data/eips/7642.json index e1269ca..6bdc24a 100644 --- a/src/data/eips/7642.json +++ b/src/data/eips/7642.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Pectra", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] }, { "forkName": "Fusaka", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "A change to EL networking that changes how receipts are handled and removes old data from node synchronization, saving approximately 530GB of bandwidth during sync.", diff --git a/src/data/eips/7666.json b/src/data/eips/7666.json index 514658c..d375bc2 100644 --- a/src/data/eips/7666.json +++ b/src/data/eips/7666.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This removes the identity precompile (at address 0x04) and replaces it with actual EVM code that does the same thing - simply copying input data to output data. The identity precompile was originally needed because there was no direct way to copy memory, but since the MCOPY opcode was introduced, this precompile is no longer necessary. Removing it reduces maintenance burden and complexity for Ethereum clients, including ZK-EVMs. This serves as a template for potentially removing other underused precompiles in the future, like certain hash functions." diff --git a/src/data/eips/7667.json b/src/data/eips/7667.json index f803e46..a6dd104 100644 --- a/src/data/eips/7667.json +++ b/src/data/eips/7667.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Withdrawn", + "statusHistory": [ + { + "status": "Withdrawn" + } + ], "layer": "EL" } ], diff --git a/src/data/eips/7668.json b/src/data/eips/7668.json index e35b279..c6ed67e 100644 --- a/src/data/eips/7668.json +++ b/src/data/eips/7668.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "layer": "EL", "champion": { "name": "Jochem Brouwer", diff --git a/src/data/eips/7685.json b/src/data/eips/7685.json index 5361ede..706af2d 100644 --- a/src/data/eips/7685.json +++ b/src/data/eips/7685.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Pectra", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "Creates a standard way to communicate messages from EL contracts to CL, providing space to various request types in the future.", diff --git a/src/data/eips/7686.json b/src/data/eips/7686.json index 13495a1..cf9e9be 100644 --- a/src/data/eips/7686.json +++ b/src/data/eips/7686.json @@ -12,7 +12,16 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Proposed" + }, + { + "status": "Declined", + "call": "acde/226", + "date": "2025-12-18" + } + ], "layer": "EL", "champion": { "name": "Carl Beekhuizen", diff --git a/src/data/eips/7688.json b/src/data/eips/7688.json index 99b545b..3d18c34 100644 --- a/src/data/eips/7688.json +++ b/src/data/eips/7688.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Glamsterdam", - "status": "Considered", + "statusHistory": [ + { + "status": "Considered" + } + ], "layer": "CL", "champion": { "name": "Etan Kissling", diff --git a/src/data/eips/7691.json b/src/data/eips/7691.json index a9549dc..254ddb5 100644 --- a/src/data/eips/7691.json +++ b/src/data/eips/7691.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Pectra", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "Doubles the target number of blobs per block (and raises the max) to increase L2 data capacity until future upgrades enable even more blobs.", diff --git a/src/data/eips/7692.json b/src/data/eips/7692.json index 5c568ee..ff4d688 100644 --- a/src/data/eips/7692.json +++ b/src/data/eips/7692.json @@ -12,11 +12,15 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Glamsterdam", - "status": "", + "statusHistory": [], "isHeadliner": false, "wasHeadlinerCandidate": true, "headlinerDiscussionLink": "https://ethereum-magicians.org/t/glamsterdam-headliner-proposal-eof/24464", diff --git a/src/data/eips/7698.json b/src/data/eips/7698.json index d3ce91e..a972562 100644 --- a/src/data/eips/7698.json +++ b/src/data/eips/7698.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This enables deploying EOF contracts using regular creation transactions (transactions with empty 'to' field). Since legacy CREATE and CREATE2 instructions cannot deploy EOF code, creation transactions are the only way to get the first EOF contracts on-chain. The transaction data contains an EOF initcontainer followed by calldata for constructor arguments. This approach allows existing deployment tooling to work without modification - developers can deploy EOF contracts the same way they deploy legacy contracts, just by concatenating constructor arguments with the initcontainer. The execution ends with a RETURNCODE instruction that specifies which subcontainer becomes the deployed contract." diff --git a/src/data/eips/7702.json b/src/data/eips/7702.json index 5c3f19d..32f422f 100644 --- a/src/data/eips/7702.json +++ b/src/data/eips/7702.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Pectra", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "Enables an address to delegate its control to an existing smart contract, creating an account abstracted wallet with new programmable features.", diff --git a/src/data/eips/7708.json b/src/data/eips/7708.json index b06a01a..9d82245 100644 --- a/src/data/eips/7708.json +++ b/src/data/eips/7708.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Considered", + "statusHistory": [ + { + "status": "Considered" + } + ], "layer": "EL", "champion": { "name": "Carl Beekhuizen", diff --git a/src/data/eips/7732.json b/src/data/eips/7732.json index 679fab1..7a81745 100644 --- a/src/data/eips/7732.json +++ b/src/data/eips/7732.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Glamsterdam", - "status": "Scheduled", + "statusHistory": [ + { + "status": "Scheduled" + } + ], "isHeadliner": true, "wasHeadlinerCandidate": true, "headlinerDiscussionLink": "https://ethereum-magicians.org/t/eip-7732-the-case-for-inclusion-in-glamsterdam/24306", diff --git a/src/data/eips/7745.json b/src/data/eips/7745.json index 0066e2e..46e0548 100644 --- a/src/data/eips/7745.json +++ b/src/data/eips/7745.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "layer": "EL", "champion": { "name": "Felföldi Zsolt", diff --git a/src/data/eips/7761.json b/src/data/eips/7761.json index 28806d8..5e34bef 100644 --- a/src/data/eips/7761.json +++ b/src/data/eips/7761.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This adds an EXTCODETYPE instruction to EOF contracts to distinguish between different account types. EOF removes code introspection capabilities like EXTCODESIZE, but this creates problems for ERC-721 and ERC-1155 tokens that need to know whether a recipient is an EOA (externally owned account) or a contract to implement safe transfers correctly. EXTCODETYPE returns 0 for no code (EOA), 1 for legacy contracts, and 2 for EOF contracts. This enables proper implementation of token standards in EOF while also helping proxy contracts verify that their upgrade targets are safe to call with EXTDELEGATECALL." diff --git a/src/data/eips/7762.json b/src/data/eips/7762.json index 0017983..dc659f4 100644 --- a/src/data/eips/7762.json +++ b/src/data/eips/7762.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This increases the minimum blob base fee from 1 wei to 2^25 wei (about 33 million times higher) to speed up blob price discovery. Currently, when blob demand exceeds supply, it takes too long for prices to climb from the extremely low minimum to actual market rates. The new minimum corresponds to about 1 cent at current ETH prices, similar to the cost of a simple transaction when gas fees are low. The change also resets excess blob gas to zero to prevent a sudden price spike when the upgrade activates. This helps blob-based rollups reach appropriate pricing faster during high-demand periods." diff --git a/src/data/eips/7778.json b/src/data/eips/7778.json index ba96bbd..942dddf 100644 --- a/src/data/eips/7778.json +++ b/src/data/eips/7778.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Considered", + "statusHistory": [ + { + "status": "Considered" + } + ], "layer": "EL", "champion": { "name": "Toni Wahrstätter", diff --git a/src/data/eips/7782.json b/src/data/eips/7782.json index 59d202e..6353579 100644 --- a/src/data/eips/7782.json +++ b/src/data/eips/7782.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "isHeadliner": false, "wasHeadlinerCandidate": true, "headlinerDiscussionLink": "https://ethereum-magicians.org/t/eip-7782-the-case-for-2x-shorter-slot-times-in-glamsterdam/24616", diff --git a/src/data/eips/7783.json b/src/data/eips/7783.json index 433bc07..46ce1a7 100644 --- a/src/data/eips/7783.json +++ b/src/data/eips/7783.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This proposes automatic, controlled gas limit increases over time instead of relying on manual adjustments by validators. Currently, gas limits change unpredictably based on individual validator decisions, which can cause network performance issues. The EIP offers three strategies: linear (fixed increase per block), stepwise (increases in steps), and exponential (doubling over intervals). Each includes safeguards like deactivation blocks to prevent indefinite growth. This provides predictable network scaling while giving the ecosystem time to adapt to larger block sizes, and validators retain the ability to halt increases if problems arise." diff --git a/src/data/eips/7791.json b/src/data/eips/7791.json index bacce3b..09df8a7 100644 --- a/src/data/eips/7791.json +++ b/src/data/eips/7791.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "EL", "champion": { "name": "Charles Cooper", diff --git a/src/data/eips/7793.json b/src/data/eips/7793.json index cb2e0bb..3a04133 100644 --- a/src/data/eips/7793.json +++ b/src/data/eips/7793.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "layer": "EL", "champion": { "name": "Marc Harvey-Hill", diff --git a/src/data/eips/7805.json b/src/data/eips/7805.json index 57f5c48..0c0c79f 100644 --- a/src/data/eips/7805.json +++ b/src/data/eips/7805.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "isHeadliner": false, "wasHeadlinerCandidate": true, "headlinerDiscussionLink": "https://ethereum-magicians.org/t/eip-7805-fork-choice-inclusion-lists-focil-as-a-candidate-for-glamsterdam/24342", @@ -28,7 +36,11 @@ }, { "forkName": "Hegota", - "status": "Considered", + "statusHistory": [ + { + "status": "Considered" + } + ], "wasHeadlinerCandidate": true, "headlinerDiscussionLink": "https://ethereum-magicians.org/t/eip-7805-fork-choice-inclusion-lists-focil-as-a-candidate-for-glamsterdam/24342", "layer": "CL", diff --git a/src/data/eips/7819.json b/src/data/eips/7819.json index becd844..c0fed8b 100644 --- a/src/data/eips/7819.json +++ b/src/data/eips/7819.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "EL", "champion": { "name": "Hadrien Croubois", diff --git a/src/data/eips/7823.json b/src/data/eips/7823.json index 99dda56..1c40d17 100644 --- a/src/data/eips/7823.json +++ b/src/data/eips/7823.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "This introduces a 8192-bit (1024 byte) limit on each input to the MODEXP cryptographic precompile. MODEXP has been a source of consensus bugs due to unbounded inputs. By setting practical limits that cover all real-world use cases (like RSA verification), this reduces the testing surface area and paves the way for future replacement with more efficient EVM code.", diff --git a/src/data/eips/7825.json b/src/data/eips/7825.json index 9a15f30..681cc3a 100644 --- a/src/data/eips/7825.json +++ b/src/data/eips/7825.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "This introduces a 16,777,216 gas (2^24) cap for individual transactions, preventing any single transaction from consuming most of a block. The goal is to ensure fairer access to block space and improve network stability.", diff --git a/src/data/eips/7834.json b/src/data/eips/7834.json index 871182b..d00344c 100644 --- a/src/data/eips/7834.json +++ b/src/data/eips/7834.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This adds a dedicated metadata section to EOF contracts that is completely separate from executable code and data. Currently, compilers include metadata (like compiler versions, IPFS hashes of source files) by mixing it with contract data, which creates problems for source code verification and causes different bytecode when metadata changes. The new metadata section solves these issues by being unreachable by contract execution, unchanging after deployment, and clearly separated from functional code. This makes source code verification much easier and ensures that contracts with identical logic but different metadata will have the same executable bytecode." diff --git a/src/data/eips/7840.json b/src/data/eips/7840.json index be12003..4041ffc 100644 --- a/src/data/eips/7840.json +++ b/src/data/eips/7840.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Pectra", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "Adds a new blob related parameters to client config so targets, maximums, and fee adjustments can be easily configured.", diff --git a/src/data/eips/7843.json b/src/data/eips/7843.json index 69a7c60..902ab23 100644 --- a/src/data/eips/7843.json +++ b/src/data/eips/7843.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Glamsterdam", - "status": "Considered", + "statusHistory": [ + { + "status": "Considered" + } + ], "layer": "EL", "champion": { "name": "Marc Harvey-Hill", diff --git a/src/data/eips/7872.json b/src/data/eips/7872.json index ad4a746..4a5db05 100644 --- a/src/data/eips/7872.json +++ b/src/data/eips/7872.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "layer": "EL", "champion": { "name": "Kevaundray Wedderburn", diff --git a/src/data/eips/7873.json b/src/data/eips/7873.json index 453c8c4..829d7ab 100644 --- a/src/data/eips/7873.json +++ b/src/data/eips/7873.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This introduces a new way to deploy EOF contracts by adding a TXCREATE instruction and a special InitcodeTransaction type. The problem it solves is that EOF removes the traditional CREATE and CREATE2 instructions used to deploy contracts. With this EIP, both regular users (EOAs) and smart contracts can deploy EOF contracts by including the contract code directly in transaction data and using TXCREATE to deploy it. This works alongside the existing EOFCREATE instruction, giving developers all the contract creation capabilities they had before EOF. The TXCREATE instruction can also deploy legacy contracts, making it a universal bootstrapping mechanism for getting EOF contracts onto the blockchain." diff --git a/src/data/eips/7880.json b/src/data/eips/7880.json index 32397b7..752f235 100644 --- a/src/data/eips/7880.json +++ b/src/data/eips/7880.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This adds a new EXTCODEADDRESS instruction to EOF contracts that helps them work with EIP-7702 delegation accounts without breaking EOF's no-code-introspection rule. The problem it solves is that EOF removes the ability to read raw contract code, but contracts still need to know when an account is delegating execution to another address. This instruction takes an address and returns the actual address that will execute the code - for regular accounts it returns the same address, but for delegated accounts it returns the address they're delegating to. This enables important use cases like managed proxy contracts ensuring they don't delegate to unsafe addresses, sponsorship contracts verifying delegation hasn't changed during a transaction, and security-conscious contracts that only accept specific delegation targets." diff --git a/src/data/eips/7883.json b/src/data/eips/7883.json index 7c4e33e..ebfe9ab 100644 --- a/src/data/eips/7883.json +++ b/src/data/eips/7883.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "This increases the gas cost of the ModExp cryptographic precompile to address underpriced operations. It raises the minimum cost from 200 to 500 gas and doubles costs for large inputs over 32 bytes.", diff --git a/src/data/eips/7886.json b/src/data/eips/7886.json index 1e3cb54..e63aaea 100644 --- a/src/data/eips/7886.json +++ b/src/data/eips/7886.json @@ -12,7 +12,7 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "", + "statusHistory": [], "isHeadliner": false, "wasHeadlinerCandidate": true, "headlinerDiscussionLink": "https://ethereum-magicians.org/t/eip-7886-delayed-execution-the-case-for-glamsterdam/24500", diff --git a/src/data/eips/7889.json b/src/data/eips/7889.json index d30ddfc..44b650c 100644 --- a/src/data/eips/7889.json +++ b/src/data/eips/7889.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This automatically makes error messages from failed transactions easily accessible by emitting them as logs. Currently, when a transaction fails (reverts), the error message explaining why it failed is hard to get - you need to request expensive transaction tracing to access it. This creates overhead for users who want to understand why their transaction failed and for nodes that have to replay entire transactions just to extract small error messages. This EIP solves the problem by automatically emitting a log containing the revert message whenever the REVERT opcode is called. This makes error messages accessible through standard RPC calls without any tracing, helping wallets, block explorers, and other tools display helpful error messages to users. It's completely backward compatible and doesn't require any new opcodes or RPC methods." diff --git a/src/data/eips/7892.json b/src/data/eips/7892.json index 38b2f78..77f0814 100644 --- a/src/data/eips/7892.json +++ b/src/data/eips/7892.json @@ -11,7 +11,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "This creates a new lightweight process to adjust blob storage parameters. Instead of waiting for a major upgrade, Ethereum can make smaller, more frequent adjustments to blob capacity to accommodate changing demand from Layer 2s.", diff --git a/src/data/eips/7898.json b/src/data/eips/7898.json index b45861a..64de878 100644 --- a/src/data/eips/7898.json +++ b/src/data/eips/7898.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This addresses a fundamental scalability bottleneck by separating transaction data from consensus data in Ethereum blocks. Currently, beacon blocks contain all transaction data embedded within them, but as Ethereum aims to increase block sizes (potentially by 10x), this creates serious networking and processing problems. Larger transaction payloads cause higher latencies for block transmission, increased bandwidth requirements, and longer block processing times that hurt validator performance. This EIP solves these issues by replacing the full transaction data in beacon blocks with just a header, while transmitting the actual transaction data separately. This allows the consensus layer to process blocks quickly while handling much larger transaction payloads independently. Additional benefits include reduced storage requirements for beacon nodes, more efficient proposer-builder separation, and laying groundwork for future innovations like ZK-proof-based execution validation where transaction data could be handled similarly to blobs with data availability sampling." diff --git a/src/data/eips/7903.json b/src/data/eips/7903.json index 7ac3e9f..c8a01d0 100644 --- a/src/data/eips/7903.json +++ b/src/data/eips/7903.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "layer": "EL", "champion": { "name": "Charles Cooper", diff --git a/src/data/eips/7904.json b/src/data/eips/7904.json index 9a6c7fa..3d642d0 100644 --- a/src/data/eips/7904.json +++ b/src/data/eips/7904.json @@ -12,7 +12,16 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Considered", + "statusHistory": [ + { + "status": "Proposed" + }, + { + "status": "Considered", + "call": "acde/226", + "date": "2025-12-18" + } + ], "layer": "EL", "champion": { "name": "Maria Silva", diff --git a/src/data/eips/7907.json b/src/data/eips/7907.json index 16d7de6..ec74245 100644 --- a/src/data/eips/7907.json +++ b/src/data/eips/7907.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "layer": "EL", "champion": { "name": "Charles Cooper", diff --git a/src/data/eips/7910.json b/src/data/eips/7910.json index 3f422d0..8c5344a 100644 --- a/src/data/eips/7910.json +++ b/src/data/eips/7910.json @@ -1,52 +1,56 @@ { - "id": 7910, - "title": "EIP-7910: eth_config JSON-RPC Method", - "status": "Draft", - "description": "This EIP defines a JSON-RPC method, eth_config, that provides node-relevant configuration data for the current, next, and last known forks.", - "author": "Danno Ferrin (@shemnon)", - "type": "Standards Track", - "category": "Core", - "createdDate": "2025-03-18", - "discussionLink": "https://ethereum-magicians.org/t/eth-config-json-rpc-method/23183", - "reviewer": "staff", - "forkRelationships": [ - { - "forkName": "Fusaka", - "status": "Included", - "layer": "EL" - } - ], - "laymanDescription": "Adds an eth_config API on Ethereum nodes so tools can read how clients are configured for current and upcoming forks, helping operators verify settings.", - "stakeholderImpacts": { - "endUsers": { - "description": "End users do not interact with eth_config directly, but benefit from fewer consensus issues when operators confirm client configurations before forks." - }, - "appDevs": { - "description": "eth_config lets application developers who manage nodes inspect fork configuration; otherwise, the EIP does not define direct changes to application behavior." - }, - "walletDevs": { - "description": "Wallet developers are not a primary audience in the EIP; impacts are limited to indirect reliability improvements from correctly configured nodes during fork activations." - }, - "toolingInfra": { - "description": "Monitoring and infrastructure tools can call eth_config to compare configurations across nodes, automate pre-fork validation scripts, and detect configuration mismatches before upgrades." - }, - "layer2s": { - "description": "Layer 2 systems are not explicitly targeted; they inherit any reliability improvements from better configured L1 nodes used for bridging and settlement." - }, - "stakersNodes": { - "description": "Node operators and validator teams are primary users: eth_config lets them inspect current and next fork parameters and confirm clients match published specifications." - }, - "clClients": { - "description": "Consensus layer clients that support eth_config must add code to gather fork configuration, surface it via Engine API, and track future configuration fields." - }, - "elClients": { - "description": "Execution layer clients implement the eth_config JSON-RPC method, assemble current/next/last configuration objects, ensure values stay synchronized with fork parameters, and handle caching or rate-limiting per recommendations." - } + "id": 7910, + "title": "EIP-7910: eth_config JSON-RPC Method", + "status": "Draft", + "description": "This EIP defines a JSON-RPC method, eth_config, that provides node-relevant configuration data for the current, next, and last known forks.", + "author": "Danno Ferrin (@shemnon)", + "type": "Standards Track", + "category": "Core", + "createdDate": "2025-03-18", + "discussionLink": "https://ethereum-magicians.org/t/eth-config-json-rpc-method/23183", + "reviewer": "staff", + "forkRelationships": [ + { + "forkName": "Fusaka", + "statusHistory": [ + { + "status": "Included" + } + ], + "layer": "EL" + } + ], + "laymanDescription": "Adds an eth_config API on Ethereum nodes so tools can read how clients are configured for current and upcoming forks, helping operators verify settings.", + "stakeholderImpacts": { + "endUsers": { + "description": "End users do not interact with eth_config directly, but benefit from fewer consensus issues when operators confirm client configurations before forks." }, - "benefits": [ - "Makes node fork configurations visible through a standardized eth_config JSON-RPC method.", - "Helps operators and monitoring tools confirm clients are correctly configured before scheduled hard forks.", - "Reduces risk of consensus splits caused by misconfigured fork parameters across different clients.", - "Provides a foundation for automated pre-fork validation scripts and cross-node configuration comparisons." - ] - } + "appDevs": { + "description": "eth_config lets application developers who manage nodes inspect fork configuration; otherwise, the EIP does not define direct changes to application behavior." + }, + "walletDevs": { + "description": "Wallet developers are not a primary audience in the EIP; impacts are limited to indirect reliability improvements from correctly configured nodes during fork activations." + }, + "toolingInfra": { + "description": "Monitoring and infrastructure tools can call eth_config to compare configurations across nodes, automate pre-fork validation scripts, and detect configuration mismatches before upgrades." + }, + "layer2s": { + "description": "Layer 2 systems are not explicitly targeted; they inherit any reliability improvements from better configured L1 nodes used for bridging and settlement." + }, + "stakersNodes": { + "description": "Node operators and validator teams are primary users: eth_config lets them inspect current and next fork parameters and confirm clients match published specifications." + }, + "clClients": { + "description": "Consensus layer clients that support eth_config must add code to gather fork configuration, surface it via Engine API, and track future configuration fields." + }, + "elClients": { + "description": "Execution layer clients implement the eth_config JSON-RPC method, assemble current/next/last configuration objects, ensure values stay synchronized with fork parameters, and handle caching or rate-limiting per recommendations." + } + }, + "benefits": [ + "Makes node fork configurations visible through a standardized eth_config JSON-RPC method.", + "Helps operators and monitoring tools confirm clients are correctly configured before scheduled hard forks.", + "Reduces risk of consensus splits caused by misconfigured fork parameters across different clients.", + "Provides a foundation for automated pre-fork validation scripts and cross-node configuration comparisons." + ] +} diff --git a/src/data/eips/7912.json b/src/data/eips/7912.json index 92d075a..e1d63b8 100644 --- a/src/data/eips/7912.json +++ b/src/data/eips/7912.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] } ], "laymanDescription": "This adds practical stack manipulation tools to the EVM without requiring the complex EOF format. It extends the existing SWAP and DUP instructions to reach deeper stack positions (up to 24 positions), adds dynamic SWAPN and DUPN instructions for variable depth access, and introduces an EXCHANGE instruction that can swap any two arbitrary stack positions. These tools help compilers generate more efficient code when dealing with complex functions that have many local variables, reducing gas costs and bytecode size. Unlike previous attempts that required new code formats, this proposal works with existing legacy contracts by requiring specific PUSH instructions before the dynamic operations, making it a pragmatic solution that provides better stack access without breaking backward compatibility." diff --git a/src/data/eips/7917.json b/src/data/eips/7917.json index 4c4e960..f753dcd 100644 --- a/src/data/eips/7917.json +++ b/src/data/eips/7917.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "This makes Ethereum's block proposer schedule completely predictable ahead of time. Currently, validators can't know who will propose blocks in the next epoch until it starts, which creates uncertainty for MEV mitigation and preconfirmation protocols. This change pre-calculates and stores the proposer schedule for future epochs, making it deterministic and accessible to applications.", diff --git a/src/data/eips/7918.json b/src/data/eips/7918.json index c6948a7..f61946e 100644 --- a/src/data/eips/7918.json +++ b/src/data/eips/7918.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "This addresses blob fee market problems by introducing a reserve price tied to execution costs. When Layer 2 execution costs dominate blob costs, this prevents the blob fee market from becoming ineffective at 1 wei. See a storybook-style explanation [here](https://notes.ethereum.org/@anderselowsson/AIG)!", diff --git a/src/data/eips/7919.json b/src/data/eips/7919.json index c058281..dbfdf3a 100644 --- a/src/data/eips/7919.json +++ b/src/data/eips/7919.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "isHeadliner": false, "wasHeadlinerCandidate": true, "headlinerDiscussionLink": "https://ethereum-magicians.org/t/glamsterdam-headliner-proposal-pureth/24459", diff --git a/src/data/eips/7923.json b/src/data/eips/7923.json index 0f1ea97..851c893 100644 --- a/src/data/eips/7923.json +++ b/src/data/eips/7923.json @@ -12,7 +12,16 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Proposed" + }, + { + "status": "Declined", + "call": "acde/226", + "date": "2025-12-18" + } + ], "layer": "EL", "champion": { "name": "Charles Cooper", diff --git a/src/data/eips/7928.json b/src/data/eips/7928.json index 65ebc34..2f5c34d 100644 --- a/src/data/eips/7928.json +++ b/src/data/eips/7928.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Scheduled", + "statusHistory": [ + { + "status": "Scheduled" + } + ], "isHeadliner": true, "wasHeadlinerCandidate": true, "headlinerDiscussionLink": "https://ethereum-magicians.org/t/eip-7928-block-level-access-lists-the-case-for-glamsterdam/24343", diff --git a/src/data/eips/7932.json b/src/data/eips/7932.json index e4510c6..6a29b89 100644 --- a/src/data/eips/7932.json +++ b/src/data/eips/7932.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "EL", "champion": { "name": "SirSpudlington", diff --git a/src/data/eips/7934.json b/src/data/eips/7934.json index f214693..4a5df98 100644 --- a/src/data/eips/7934.json +++ b/src/data/eips/7934.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "This adds a maximum size limit of 10MB to Ethereum blocks to prevent network instability and denial-of-service attacks. Currently, blocks can grow very large, which slows down network propagation and increases the risk of temporary forks. This limit ensures blocks stay within a reasonable size that the network can efficiently process and propagate.", diff --git a/src/data/eips/7935.json b/src/data/eips/7935.json index 08af5c8..0015c08 100644 --- a/src/data/eips/7935.json +++ b/src/data/eips/7935.json @@ -11,7 +11,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "This proposes increasing the gas limit from 36M to 60M to scale L1 execution capacity. While this change does not require a hard fork (gas limit is a validator-chosen parameter), it requires extensive testing to ensure network stability at higher computational loads and so inclusion of the EIP in the hard fork ensures that this work is prioritized and ongoing.", diff --git a/src/data/eips/7937.json b/src/data/eips/7937.json index 92bcfc2..0097b80 100644 --- a/src/data/eips/7937.json +++ b/src/data/eips/7937.json @@ -12,7 +12,7 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "", + "statusHistory": [], "isHeadliner": false, "wasHeadlinerCandidate": true, "headlinerDiscussionLink": "https://ethereum-magicians.org/t/glamsterdam-headliner-proposal-evm64/24311", diff --git a/src/data/eips/7939.json b/src/data/eips/7939.json index b070a21..cc77a83 100644 --- a/src/data/eips/7939.json +++ b/src/data/eips/7939.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "This adds a new CLZ (Count Leading Zeros) opcode to the EVM that efficiently counts the number of zero bits at the start of a 256-bit number. This is a fundamental mathematical operation used in many algorithms, especially for mathematical computations, data compression, and cryptographic operations. Currently, implementing this operation in Solidity requires complex and expensive code - this opcode makes it much cheaper and faster.", diff --git a/src/data/eips/7942.json b/src/data/eips/7942.json index d4a0e96..552ee64 100644 --- a/src/data/eips/7942.json +++ b/src/data/eips/7942.json @@ -12,7 +12,7 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "", + "statusHistory": [], "isHeadliner": false, "wasHeadlinerCandidate": true, "headlinerDiscussionLink": "https://ethereum-magicians.org/t/glamsterdam-headliner-proposal-available-attestation/24377", diff --git a/src/data/eips/7949.json b/src/data/eips/7949.json index 761d8a1..7dc397e 100644 --- a/src/data/eips/7949.json +++ b/src/data/eips/7949.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Fusaka", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "layer": "EL", "champion": { "name": "Justin Florentine", diff --git a/src/data/eips/7951.json b/src/data/eips/7951.json index 94cce29..b2e0b18 100644 --- a/src/data/eips/7951.json +++ b/src/data/eips/7951.json @@ -12,11 +12,19 @@ "forkRelationships": [ { "forkName": "Pectra", - "status": "Declined" + "statusHistory": [ + { + "status": "Declined" + } + ] }, { "forkName": "Fusaka", - "status": "Included" + "statusHistory": [ + { + "status": "Included" + } + ] } ], "laymanDescription": "This adds support for a widely-used cryptographic curve called secp256r1 (also known as P-256) to Ethereum. Currently, Ethereum only supports the secp256k1 curve for signatures, but many devices and systems use secp256r1. This change allows Ethereum to verify signatures from devices like iPhones, Android phones, hardware wallets, and other systems that use this standard curve, making it easier to integrate with existing infrastructure. Note: This EIP supercedes [RIP-7212](https://github.com/ethereum/RIPs/blob/master/RIPS/rip-7212.md).", diff --git a/src/data/eips/7971.json b/src/data/eips/7971.json index 85b29d9..77cccf7 100644 --- a/src/data/eips/7971.json +++ b/src/data/eips/7971.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "layer": "EL", "champion": { "name": "Maria Silva", diff --git a/src/data/eips/7973.json b/src/data/eips/7973.json index 67739e7..acf5d05 100644 --- a/src/data/eips/7973.json +++ b/src/data/eips/7973.json @@ -12,7 +12,16 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Proposed" + }, + { + "status": "Declined", + "call": "acde/226", + "date": "2025-12-18" + } + ], "layer": "EL", "champion": { "name": "Charles Cooper", diff --git a/src/data/eips/7976.json b/src/data/eips/7976.json index 738cd45..d6db4db 100644 --- a/src/data/eips/7976.json +++ b/src/data/eips/7976.json @@ -12,7 +12,16 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Considered", + "statusHistory": [ + { + "status": "Proposed" + }, + { + "status": "Considered", + "call": "acde/226", + "date": "2025-12-18" + } + ], "layer": "EL", "champion": { "name": "Toni Wahrstätter", diff --git a/src/data/eips/7979.json b/src/data/eips/7979.json index 04fd543..dbe589f 100644 --- a/src/data/eips/7979.json +++ b/src/data/eips/7979.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "EL", "champion": { "name": "Greg Colvin", diff --git a/src/data/eips/7981.json b/src/data/eips/7981.json index 7ef3ee3..02196d3 100644 --- a/src/data/eips/7981.json +++ b/src/data/eips/7981.json @@ -12,7 +12,16 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Considered", + "statusHistory": [ + { + "status": "Proposed" + }, + { + "status": "Considered", + "call": "acde/226", + "date": "2025-12-18" + } + ], "layer": "EL", "champion": { "name": "Toni Wahrstätter", diff --git a/src/data/eips/7997.json b/src/data/eips/7997.json index e1ba13c..e6d4fcc 100644 --- a/src/data/eips/7997.json +++ b/src/data/eips/7997.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "layer": "EL", "champion": { "name": "Francisco Giordano", diff --git a/src/data/eips/7999.json b/src/data/eips/7999.json index 8c0d586..5d06dd2 100644 --- a/src/data/eips/7999.json +++ b/src/data/eips/7999.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Withdrawn", + "statusHistory": [ + { + "status": "Withdrawn" + } + ], "layer": "EL", "champion": { "name": "Anders Elowsson", diff --git a/src/data/eips/8011.json b/src/data/eips/8011.json index 1864305..7e4cabd 100644 --- a/src/data/eips/8011.json +++ b/src/data/eips/8011.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "EL", "champion": { "name": "Maria Silva", diff --git a/src/data/eips/8013.json b/src/data/eips/8013.json index 2cbd960..7a9af01 100644 --- a/src/data/eips/8013.json +++ b/src/data/eips/8013.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "EL", "champion": { "name": "Greg Colvin", diff --git a/src/data/eips/8024.json b/src/data/eips/8024.json index d510446..9524462 100644 --- a/src/data/eips/8024.json +++ b/src/data/eips/8024.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Considered", + "statusHistory": [ + { + "status": "Considered" + } + ], "layer": "EL", "champion": { "name": "Francisco Giordano", diff --git a/src/data/eips/8030.json b/src/data/eips/8030.json index bfb105c..a53ce6b 100644 --- a/src/data/eips/8030.json +++ b/src/data/eips/8030.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "EL", "champion": { "name": "SirSpudlington", diff --git a/src/data/eips/8032.json b/src/data/eips/8032.json index 9379e44..333ec90 100644 --- a/src/data/eips/8032.json +++ b/src/data/eips/8032.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "layer": "EL", "champion": { "name": "Guillaume Ballet", diff --git a/src/data/eips/8037.json b/src/data/eips/8037.json index 1e705ad..fa9cf28 100644 --- a/src/data/eips/8037.json +++ b/src/data/eips/8037.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "layer": "EL", "champion": { "name": "Maria Silva", diff --git a/src/data/eips/8038.json b/src/data/eips/8038.json index b5ccbff..a57e52e 100644 --- a/src/data/eips/8038.json +++ b/src/data/eips/8038.json @@ -12,7 +12,16 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Considered", + "statusHistory": [ + { + "status": "Proposed" + }, + { + "status": "Considered", + "call": "acde/226", + "date": "2025-12-18" + } + ], "layer": "EL", "champion": { "name": "Maria Silva", diff --git a/src/data/eips/8045.json b/src/data/eips/8045.json index 486543f..8fc92a5 100644 --- a/src/data/eips/8045.json +++ b/src/data/eips/8045.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Considered", + "statusHistory": [ + { + "status": "Considered" + } + ], "layer": "CL", "champion": { "name": "Barnabas Busa", diff --git a/src/data/eips/8051.json b/src/data/eips/8051.json index 316e737..98d5e96 100644 --- a/src/data/eips/8051.json +++ b/src/data/eips/8051.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "layer": "EL", "champion": { "name": "Danno Ferrin", diff --git a/src/data/eips/8053.json b/src/data/eips/8053.json index 32c9212..36a11e6 100644 --- a/src/data/eips/8053.json +++ b/src/data/eips/8053.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "EL", "champion": { "name": "Maria Silva", diff --git a/src/data/eips/8057.json b/src/data/eips/8057.json index 87a2b42..ba6e9f0 100644 --- a/src/data/eips/8057.json +++ b/src/data/eips/8057.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "EL", "champion": { "name": "Ben Adams", diff --git a/src/data/eips/8058.json b/src/data/eips/8058.json index 221ba26..18e5f8e 100644 --- a/src/data/eips/8058.json +++ b/src/data/eips/8058.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Proposed", + "statusHistory": [ + { + "status": "Proposed" + } + ], "layer": "EL", "champion": { "name": "Carlos Perez", diff --git a/src/data/eips/8059.json b/src/data/eips/8059.json index d3892ee..d17359a 100644 --- a/src/data/eips/8059.json +++ b/src/data/eips/8059.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "EL", "champion": { "name": "Maria Silva", diff --git a/src/data/eips/8061.json b/src/data/eips/8061.json index 7bbc755..2ae2314 100644 --- a/src/data/eips/8061.json +++ b/src/data/eips/8061.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Considered", + "statusHistory": [ + { + "status": "Considered" + } + ], "layer": "CL", "champion": { "name": "Francesco D'Amato", diff --git a/src/data/eips/8062.json b/src/data/eips/8062.json index 12adb43..dec303f 100644 --- a/src/data/eips/8062.json +++ b/src/data/eips/8062.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "CL", "champion": { "name": "Anders Elowsson", diff --git a/src/data/eips/8068.json b/src/data/eips/8068.json index c4ada49..f682b7f 100644 --- a/src/data/eips/8068.json +++ b/src/data/eips/8068.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "CL", "champion": { "name": "Anders Elowsson", diff --git a/src/data/eips/8070.json b/src/data/eips/8070.json index 2e6f981..999fc20 100644 --- a/src/data/eips/8070.json +++ b/src/data/eips/8070.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Considered", + "statusHistory": [ + { + "status": "Considered" + } + ], "layer": "EL", "champion": { "name": "Raúl Kripalani", diff --git a/src/data/eips/8071.json b/src/data/eips/8071.json index e2dd89b..156855a 100644 --- a/src/data/eips/8071.json +++ b/src/data/eips/8071.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Declined", + "statusHistory": [ + { + "status": "Declined" + } + ], "layer": "CL", "champion": { "name": "Francesco D'Amato", diff --git a/src/data/eips/8080.json b/src/data/eips/8080.json index df1c05a..5e4db55 100644 --- a/src/data/eips/8080.json +++ b/src/data/eips/8080.json @@ -12,7 +12,11 @@ "forkRelationships": [ { "forkName": "Glamsterdam", - "status": "Considered", + "statusHistory": [ + { + "status": "Considered" + } + ], "layer": "CL", "champion": { "name": "Francesco D'Amato", diff --git a/src/types/eip.ts b/src/types/eip.ts index 9e67240..5406bcc 100644 --- a/src/types/eip.ts +++ b/src/types/eip.ts @@ -7,7 +7,11 @@ export interface ClientTeamPerspective { export interface ForkRelationship { forkName: string; - status: string; + statusHistory: Array<{ + status: 'Proposed' | 'Considered' | 'Scheduled' | 'Declined' | 'Included' | 'Withdrawn'; + call?: `${'acdc' | 'acde' | 'acdt'}/${number}`; + date?: string; + }>; // Ordered oldest -> newest isHeadliner?: boolean; wasHeadlinerCandidate?: boolean; headlinerDiscussionLink?: string; @@ -62,6 +66,7 @@ export type InclusionStage = | 'Scheduled for Inclusion' | 'Declined for Inclusion' | 'Included' + | 'Withdrawn' | 'Unknown'; export type ProposalType = 'EIP' | 'RIP'; \ No newline at end of file diff --git a/src/utils/eip.ts b/src/utils/eip.ts index 485888b..8a1b85e 100644 --- a/src/utils/eip.ts +++ b/src/utils/eip.ts @@ -10,9 +10,11 @@ export const getInclusionStage = (eip: EIP, forkName?: string): InclusionStage = fork.forkName.toLowerCase() === forkName.toLowerCase() ); - if (!forkRelationship) return 'Unknown'; + if (!forkRelationship || !forkRelationship.statusHistory.length) return 'Unknown'; - switch (forkRelationship.status) { + const status = forkRelationship.statusHistory[forkRelationship.statusHistory.length - 1].status; + + switch (status) { case 'Proposed': return 'Proposed for Inclusion'; case 'Considered': @@ -23,6 +25,8 @@ export const getInclusionStage = (eip: EIP, forkName?: string): InclusionStage = return 'Declined for Inclusion'; case 'Included': return 'Included'; + case 'Withdrawn': + return 'Withdrawn'; default: return 'Unknown'; }