Thank you for your interest in contributing to ETH2030! We welcome contributions from anyone and are grateful for even the smallest improvements.
# Clone the repository
git clone https://github.com/jiayaoqijia/eth2030.git
cd eth2030
# Build all packages
cd pkg && go build ./...
# Run all tests (49 packages, 18,000+ tests)
go test ./...
# Run tests for a specific package
go test ./core/types/...
go test ./consensus/...
# Run with verbose output
go test -v ./core/vm/...
# Run fuzz tests
go test -fuzz=FuzzDecode ./rlp/ -fuzztime=30sETH2030 implements 58+ EIPs across the L1 Strawmap. To add or improve an EIP implementation:
- Check
docs/EIP_SPEC_IMPL.mdfor current implementation status - Reference the spec in
refs/EIPs/EIPS/eip-XXXX.md - Implement in the appropriate package (see package structure in README)
- Add comprehensive tests (table-driven preferred)
- Update
docs/EIP_SPEC_IMPL.mdwith your implementation details
- Run the EF state test suite:
go test ./core/eftest/ -run TestGethCategorySummary - Check
docs/GAP_ANALYSIS.mdfor known gaps and PARTIAL items - Write a regression test before fixing the bug
When creating a new package:
- Place it under
pkg/following existing naming conventions - Keep files under ~500 LOC
- Include
*_test.gofiles matching each source file - Export only what other packages need
docs/EIP_SPEC_IMPL.md— EIP traceability (specs, implementations, tests)docs/GAP_ANALYSIS.md— Roadmap coverage audit (65 items)docs/PROGRESS.md— Package completion and statisticsdocs/DESIGN.md— Architecture and implementation design
- Code must use
gofmtformatting - Code must be documented following Go commentary guidelines
- Prefer strict typing; avoid loose types
- Add brief comments for tricky or non-obvious logic
- Keep files concise; aim for under ~500 LOC
- Pull requests must be based on and opened against the
masterbranch - Commit messages should be prefixed with the package they modify:
core/vm: add EOF DATALOAD opcodeconsensus: fix attestation aggregationdocs: update EIP traceability
- Fork the repository and create your branch from
master - Make your changes following the coding guidelines above
- Add or update tests as needed
- Ensure all tests pass:
cd pkg && go test ./... - Ensure code is formatted:
gofmt -l .(should produce no output) - Submit your PR with a clear description of the changes
All contributions must:
- Pass the full test suite (
go test ./...) - Include tests for new functionality
- Not decrease test coverage for modified packages
- Not introduce any
go vetwarnings
The Go module root is pkg/ (not the project root). This avoids conflicts with
the refs/ submodules which contain their own go.mod files.
# All Go commands should run from pkg/
cd pkg
go build ./...
go test ./...Open an issue with the question label or reach out to the maintainers.