Convert Figma logo to code with AI

ethereum logoEIPs

The Ethereum Improvement Proposal repository

12,875
5,270
12,875
55

Top Related Projects

Optimism is Ethereum, scaled.

Go implementation of the Ethereum protocol

23,191

Solidity, the Smart Contract Programming Language

Ethereum Proof-of-Stake Consensus Specifications

Substrate: The platform for blockchain innovators

Quick Overview

The ethereum/EIPs repository is the central hub for Ethereum Improvement Proposals (EIPs). EIPs describe standards for the Ethereum platform, including core protocol specifications, client APIs, and contract standards. This repository serves as a collaborative space for the Ethereum community to propose, discuss, and document improvements to the Ethereum ecosystem.

Pros

  • Provides a structured process for proposing and implementing changes to Ethereum
  • Encourages community participation and transparency in Ethereum's development
  • Serves as a comprehensive historical record of Ethereum's evolution
  • Facilitates standardization across the Ethereum ecosystem

Cons

  • The process can be slow, potentially delaying important improvements
  • May be intimidating for newcomers to contribute due to its formal nature
  • Some proposals may become outdated or abandoned over time
  • Potential for contentious debates on controversial proposals

Note: As this is not a code library, the code examples and getting started instructions sections have been omitted.

Competitor Comparisons

Optimism is Ethereum, scaled.

Pros of Optimism

  • Focuses on Layer 2 scaling solutions for Ethereum
  • Implements Optimistic Rollups for faster and cheaper transactions
  • Actively developed with frequent updates and improvements

Cons of Optimism

  • More complex implementation compared to EIPs
  • Narrower scope, specifically targeting Optimistic Rollups
  • Potentially less community involvement due to specialized focus

Code Comparison

EIPs:

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
}

Optimism:

contract OVM_L1CrossDomainMessenger is iOVM_L1CrossDomainMessenger {
    function sendMessage(
        address _target,
        bytes memory _message,
        uint32 _gasLimit
    ) public {
        // Implementation details
    }
}

Summary

EIPs serves as a central repository for Ethereum Improvement Proposals, covering a wide range of topics and standards. Optimism, on the other hand, is a specific implementation of Layer 2 scaling solutions using Optimistic Rollups. While EIPs provides a broader platform for community-driven improvements, Optimism offers a more focused approach to addressing Ethereum's scalability challenges. The code examples highlight the difference in scope, with EIPs showcasing a standard interface and Optimism demonstrating a specific cross-domain messaging implementation.

Go implementation of the Ethereum protocol

Pros of go-ethereum

  • Implements the full Ethereum protocol, allowing users to run a node and interact with the network
  • Provides a comprehensive suite of tools for developers, including a JavaScript console and a mining interface
  • Actively maintained with frequent updates and improvements

Cons of go-ethereum

  • Larger codebase and more complex, requiring more resources to run and maintain
  • Steeper learning curve for new developers compared to understanding EIPs
  • May be overkill for those only interested in protocol specifications or improvements

Code Comparison

EIPs (Example of an EIP template):

## Simple Summary
A brief description of the EIP.

## Abstract
A short (~200 word) description of the technical issue being addressed.

## Motivation
The motivation behind the EIP and why it's necessary.

go-ethereum (Example of Ethereum client implementation):

func (eth *Ethereum) Start() error {
    // Start the various components of the Ethereum protocol
    if err := eth.startEthServices(); err != nil {
        return err
    }
    return nil
}

The EIPs repository focuses on protocol specifications and improvements, while go-ethereum implements these specifications in a functional Ethereum client. EIPs provide a standardized format for proposing changes, whereas go-ethereum offers a practical implementation of the Ethereum protocol.

23,191

Solidity, the Smart Contract Programming Language

Pros of Solidity

  • Contains the actual implementation of the Solidity programming language
  • Provides a comprehensive test suite and documentation for Solidity developers
  • Actively maintained with frequent updates and bug fixes

Cons of Solidity

  • Focuses solely on the Solidity language, not broader Ethereum ecosystem improvements
  • May have a steeper learning curve for contributors due to its complexity
  • Changes to the language can potentially introduce breaking changes for existing smart contracts

Code Comparison

Solidity (example of a simple smart contract):

pragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 private storedData;

    function set(uint256 x) public {
        storedData = x;
    }

    function get() public view returns (uint256) {
        return storedData;
    }
}

EIPs (example of an EIP header):

---
eip: 1234
title: Example EIP
description: A brief description of the EIP
author: John Doe (@johndoe)
discussions-to: https://ethereum-magicians.org/t/example-eip/1234
status: Draft
type: Standards Track
category: Core
created: 2023-04-01
---

Summary

While Solidity focuses on the implementation and development of the Solidity programming language, EIPs serves as a repository for proposing and discussing improvements to the Ethereum ecosystem as a whole. Solidity is more technical and code-centric, while EIPs is more focused on governance and protocol-level changes.

Ethereum Proof-of-Stake Consensus Specifications

Pros of consensus-specs

  • More focused on technical specifications for Ethereum consensus layer
  • Provides detailed implementation guidelines for client developers
  • Includes comprehensive test vectors for validation

Cons of consensus-specs

  • Narrower scope, primarily addressing consensus-related topics
  • May be less accessible to non-technical stakeholders
  • Updates less frequently compared to EIPs

Code comparison

EIPs:

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
}

consensus-specs:

def get_attestation_participation_flag_indices(state: BeaconState,
                                               data: AttestationData,
                                               inclusion_delay: uint64) -> Sequence[int]:
    # ...

The EIPs repository contains Ethereum Improvement Proposals covering various aspects of the Ethereum ecosystem, including token standards, wallet interfaces, and protocol upgrades. It serves as a central hub for discussing and documenting changes to the Ethereum platform.

In contrast, the consensus-specs repository focuses specifically on the consensus layer of Ethereum, providing detailed technical specifications and implementation guidelines for client developers. It includes formal specifications, state transition functions, and test vectors for ensuring consistency across different client implementations.

While EIPs cater to a broader audience and cover a wide range of topics, consensus-specs offers more in-depth technical information for those working directly on Ethereum's consensus mechanisms.

Substrate: The platform for blockchain innovators

Pros of Substrate

  • More flexible and customizable blockchain framework
  • Faster development and deployment of blockchain networks
  • Built-in support for various consensus mechanisms and runtime modules

Cons of Substrate

  • Steeper learning curve due to its complexity
  • Smaller community and ecosystem compared to Ethereum
  • Less battle-tested in production environments

Code Comparison

EIPs (Ethereum Improvement Proposals):

contract SimpleStorage {
    uint storedData;
    function set(uint x) public {
        storedData = x;
    }
}

Substrate:

#[pallet::storage]
#[pallet::getter(fn stored_data)]
pub type StoredData<T> = StorageValue<_, u32>;

#[pallet::call]
impl<T: Config> Pallet<T> {
    #[pallet::weight(10_000)]
    pub fn set(origin: OriginFor<T>, value: u32) -> DispatchResult {
        ensure_signed(origin)?;
        StoredData::<T>::put(value);
        Ok(())
    }
}

The code comparison shows a simple storage contract in Solidity for Ethereum and a similar implementation using Substrate's FRAME system. Substrate's code is more verbose but offers greater flexibility and type safety.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Ethereum Improvement Proposals (EIPs)

ATTENTION: The EIPs repository has recently undergone a separation of ERCs and EIPs. ERCs are now accessible at https://github.com/ethereum/ercs. All new ERCs and updates to existing ones must be directed at this new repository. The editors apologize for this inconvenience.

The goal of the EIP project is to standardize and provide high-quality documentation for Ethereum itself and conventions built upon it. This repository tracks past and ongoing improvements to Ethereum in the form of Ethereum Improvement Proposals (EIPs). EIP-1 governs how EIPs are published.

The status page tracks and lists EIPs, which can be divided into the following categories:

  • Core EIPs are improvements to the Ethereum consensus protocol.
  • Networking EIPs specify the peer-to-peer networking layer of Ethereum.
  • Interface EIPs standardize interfaces to Ethereum, which determine how users and applications interact with the blockchain.
  • ERCs specify application layer standards, which determine how applications running on Ethereum can interact with each other.
  • Meta EIPs are miscellaneous improvements that nonetheless require some sort of consensus.
  • Informational EIPs are non-standard improvements that do not require any form of consensus.

Before you write an EIP, ideas MUST be thoroughly discussed on Ethereum Magicians or Ethereum Research. Once consensus is reached, thoroughly read and review EIP-1, which describes the EIP process.

Please note that this repository is for documenting standards and not for help implementing them. These types of inquiries should be directed to the Ethereum Stack Exchange. For specific questions and concerns regarding EIPs, it's best to comment on the relevant discussion thread of the EIP denoted by the discussions-to tag in the EIP's preamble.

If you would like to become an EIP Editor, please read EIP-5069.

Preferred Citation Format

The canonical URL for an EIP that has achieved draft status at any point is at https://eips.ethereum.org/. For example, the canonical URL for EIP-1 is https://eips.ethereum.org/EIPS/eip-1.

Consider any document not published at https://eips.ethereum.org/ as a working paper. Additionally, consider published EIPs with a status of "draft", "review", or "last call" to be incomplete drafts, and note that their specification is likely to be subject to change.

Validation and Automerging

All pull requests in this repository must pass automated checks before they can be automatically merged:

  • eip-review-bot determines when PRs can be automatically merged 1
  • EIP-1 rules are enforced using eipw2
  • HTML formatting and broken links are enforced using HTMLProofer2
  • Spelling is enforced with CodeSpell2
    • False positives sometimes occur. When this happens, please submit a PR editing .codespell-whitelist and ONLY .codespell-whitelist
  • Markdown best practices are checked using markdownlint2

It is possible to run the EIP validator locally:

cargo install eipv
eipv <INPUT FILE / DIRECTORY>

Build the status page locally

Install prerequisites

  1. Open Terminal.

  2. Check whether you have Ruby 3.1.4 installed. Later versions are not supported.

    ruby --version
    
  3. If you don't have Ruby installed, install Ruby 3.1.4.

  4. Install Bundler:

    gem install bundler
    
  5. Install dependencies:

    bundle install
    

Build your local Jekyll site

  1. Bundle assets and start the server:

    bundle exec jekyll serve
    
  2. Preview your local Jekyll site in your web browser at http://localhost:4000.

More information on Jekyll and GitHub Pages here.

Footnotes

  1. https://github.com/ethereum/EIPs/blob/master/.github/workflows/auto-review-bot.yml

  2. https://github.com/ethereum/EIPs/blob/master/.github/workflows/ci.yml 2 3 4