Showing preview only (2,088K chars total). Download the full file or copy to clipboard to get everything.
Repository: eth-protocol-fellows/protocol-studies
Branch: main
Commit: f6b806a9b5b1
Files: 152
Total size: 2.0 MB
Directory structure:
gitextract_igib6qx0/
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ └── wiki-content-request.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ ├── md-lint.yaml
│ └── spell-check.yml
├── .gitignore
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── check_typos.sh
├── docs/
│ ├── .nojekyll
│ ├── CNAME
│ ├── _footer.md
│ ├── _navbar.md
│ ├── _sidebar.md
│ ├── assets/
│ │ ├── css/
│ │ │ ├── custom.css
│ │ │ ├── editor.css
│ │ │ ├── theme.css
│ │ │ └── toc.css
│ │ └── ics/
│ │ └── eps25townhall.ics
│ ├── contributing.md
│ ├── epf.md
│ ├── eps/
│ │ ├── archive.md
│ │ ├── day16.md
│ │ ├── day17.md
│ │ ├── day18.md
│ │ ├── day19.md
│ │ ├── day20.md
│ │ ├── day21.md
│ │ ├── day22.md
│ │ ├── day23.md
│ │ ├── day24.md
│ │ ├── intro.md
│ │ ├── nodes_workshop.md
│ │ ├── presentations/
│ │ │ └── week2_notes.md
│ │ ├── week0.md
│ │ ├── week1.md
│ │ ├── week10-dev.md
│ │ ├── week10-research.md
│ │ ├── week2.md
│ │ ├── week3.md
│ │ ├── week4.md
│ │ ├── week5.md
│ │ ├── week6-dev.md
│ │ ├── week6-research.md
│ │ ├── week7-dev.md
│ │ ├── week7-research.md
│ │ ├── week8-dev.md
│ │ ├── week8-research.md
│ │ ├── week9-dev.md
│ │ └── week9-research.md
│ ├── images/
│ │ ├── el-architecture/
│ │ │ └── excalidraw/
│ │ │ ├── architecture-overview.excalidraw
│ │ │ ├── forkchoice-updated.excalidraw
│ │ │ ├── payload-building-routine.excalidraw
│ │ │ ├── payload-validation-routine.excalidraw
│ │ │ └── reth-architecture-overview.excalidraw
│ │ └── el-specs/
│ │ └── excalidraw/
│ │ ├── gas-header.excalidraw
│ │ ├── state.excalidraw
│ │ └── stf_eels.excalidraw
│ ├── index.html
│ ├── readme.md
│ ├── resources.md
│ ├── topics.md
│ └── wiki/
│ ├── CL/
│ │ ├── SSZ.md
│ │ ├── beacon-api.md
│ │ ├── cl-architecture.md
│ │ ├── cl-clients.md
│ │ ├── cl-networking.md
│ │ ├── cl-specs.md
│ │ ├── gasper.md
│ │ ├── merkleization.md
│ │ ├── overview.md
│ │ └── syncing.md
│ ├── Cryptography/
│ │ ├── KZG.md
│ │ ├── bls.md
│ │ ├── ecdsa.md
│ │ ├── intro.md
│ │ ├── keccak256.md
│ │ └── post-quantum-cryptography.md
│ ├── EL/
│ │ ├── JSON-RPC.md
│ │ ├── RLP.md
│ │ ├── block-production.md
│ │ ├── clients/
│ │ │ ├── besu.md
│ │ │ └── reth.md
│ │ ├── data-structures.md
│ │ ├── devp2p.md
│ │ ├── el-architecture.md
│ │ ├── el-clients.md
│ │ ├── el-data-structures-summary.md
│ │ ├── el-specs.md
│ │ ├── engine-api.md
│ │ ├── eof.md
│ │ ├── evm.md
│ │ ├── precompiled-contracts.md
│ │ └── transaction.md
│ ├── dev/
│ │ ├── core-development.md
│ │ ├── cs-resources.md
│ │ └── pm.md
│ ├── epf.md
│ ├── pectra-faq.md
│ ├── protocol/
│ │ ├── architecture.md
│ │ ├── design-rationale.md
│ │ ├── history.md
│ │ ├── img/
│ │ │ └── history/
│ │ │ └── ethereum-nodes.excalidraw
│ │ └── prehistory.md
│ ├── research/
│ │ ├── FCR/
│ │ │ └── FCR.md
│ │ ├── PBS/
│ │ │ ├── ET.md
│ │ │ ├── PEPC.md
│ │ │ ├── PTC.md
│ │ │ ├── TBHL.md
│ │ │ ├── ePBS-Specs.md
│ │ │ ├── ePBS.md
│ │ │ ├── mev-boost.md
│ │ │ ├── mev.md
│ │ │ └── pbs.md
│ │ ├── Preconfirmations/
│ │ │ ├── BasedSequencingPreconfs.md
│ │ │ └── Preconfirmations.md
│ │ ├── SSF.md
│ │ ├── account-abstraction/
│ │ │ └── eip-7702.md
│ │ ├── cl-upgrades.md
│ │ ├── eODS.md
│ │ ├── history-expiry/
│ │ │ └── history-expiry.md
│ │ ├── img/
│ │ │ └── scaling/
│ │ │ ├── layer-1-scaling.excalidraw
│ │ │ └── layer-2-scaling.excalidraw
│ │ ├── light-clients.md
│ │ ├── peerdas.md
│ │ ├── roadmap.md
│ │ └── scaling/
│ │ ├── core-changes/
│ │ │ ├── core-changes.md
│ │ │ └── eip-4844.md
│ │ ├── data-availability.md
│ │ └── scaling.md
│ ├── testing/
│ │ ├── consensus-spec-tests.md
│ │ ├── formal-verification.md
│ │ ├── hive.md
│ │ ├── incidents.md
│ │ ├── kurtosis.md
│ │ └── overview.md
│ └── wiki-intro.md
├── notes/
│ ├── Chloe_notes.md
│ ├── gorondan.md
│ ├── gorondan_MVEls_notes.md
│ ├── mario.md
│ ├── steven_notes/
│ │ ├── PBS.md
│ │ ├── weekly_updates_1.md
│ │ └── weekly_updates_2.md
│ ├── wiki_contributors_meeting/
│ │ ├── 2024-04-18-meeting-1.md
│ │ ├── 2024-05-02-meeting-2.md
│ │ ├── 2024-05-16-meeting-3.md
│ │ ├── 2024-06-20-meeting-4.md
│ │ ├── 2024-07-25-meeting-5.md
│ │ └── 2025-01-23-meeting-6.md
│ └── your-name notes.md
└── wordlist.txt
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/ISSUE_TEMPLATE/wiki-content-request.md
================================================
---
name: Wiki content
about: Request a new content missing in the wiki
title: ''
labels: 'feature'
assignees: ''
---
## What content is missing?
## Related content in the wiki
## Other relevant resources
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## Wiki PR Checklist
Thank you for contributing to the Protocol Wiki! Before you open a PR, make sure to read [information for contributors](https://epf.wiki/#/contributing) and take a look at following checklist:
- [ ] Describe your changes, substitute this text with the information
- [ ] If you are touching an existing piece of content, ask the [relevant maintainer](https://github.com/eth-protocol-fellows/protocol-studies/blob/maintainers/README.md#wiki-maintainers) for review
- [ ] If you need feedback for your content from wider community, share the PR in our Discord
- [ ] Review changes to ensure there are no typos, see instructions bellow
<!--
ℹ️ Checking for typos locally
1. Install [aspell](https://www.gnu.org/software/aspell/) for your platform.
2. Navigate to the project root and run the script:
```
./check_typos.sh
```
ℹ️ Fixing typos
1. Fix typos: Open the relevant files and fix any identified typos.
2. Update wordlist: If a flagged word is actually a project-specific term add it to `wordlist.txt` in the project root.
Each word should be listed on a separate line.
* 🚧 Remember:
* When adding new words it must NOT have any spaces or special characters within or around it.
* \`wordlist\` is NOT case sensitive.
* Use backticks to quote code variables so as to not bloat the \`wordlist\`.
* Use the HTML tag <name> to surround proper names. <name>John Doe</name>
-->
================================================
FILE: .github/workflows/md-lint.yaml
================================================
name: Markdown linter
on:
pull_request:
branches:
- main
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: DavidAnson/markdownlint-cli2-action@v15
continue-on-error: true
with:
globs: |
docs/wiki/*.md
================================================
FILE: .github/workflows/spell-check.yml
================================================
name: 🥢 Spell check
on:
pull_request_target:
branches:
- main
jobs:
typo_check:
name: 🥢 Spell check
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
# ⚠️ [Security Warning] Usage of `pull_request_target` along with fork ref checkout is a SECURITY RISK. ⚠️
# > Generally speaking, when the PR contents are treated as passive data,
# > i.e. not in a position of influence over the build/testing process, it is safe.
# > But the repository owners must be extra careful not to trigger any script that may operate
# > on PR controlled contents like in the case of npm install.
# for more information, see: https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
fetch-depth: 2
- name: Install aspell
run: sudo apt-get update && sudo apt-get install -y aspell
- name: Find and check typos in Markdown files
id: find_typos
run: |
echo "Checking for typos..."
IFS=$'\n'
set -f
for file in $(find . -name "*.md" ); do
if [ ! -s "$file" ]; then
continue
fi
echo "Checking $file..."
# Get typos with line numbers using grep
output="$(aspell --lang=en_US --mode=markdown --home-dir=. --personal=wordlist.txt --ignore-case=true --camel-case --add-sgml-skip name list <"$file")"
if [ $? -eq 0 ]; then
if [[ -n "$output" ]]; then
while IFS= read -r word; do
# Find line numbers for each typo
line_nums=$(grep -n "$word" "$file" | cut -d: -f1 | tr '\n' ',' | sed 's/,$//')
TYPOS+="- 📄 $file (line(s) $line_nums):"
TYPOS+=$'\n'
TYPOS+=" 1. ❌ $word"
TYPOS+=$'\n'
done <<< "$output"
fi
else
echo "::error::aspell failed on $file"
exit 1
fi
done
{
echo 'TYPOS<<EOF'
echo "$TYPOS"
echo EOF
} >> "$GITHUB_ENV"
- name: Comment on pull request
if: env.TYPOS != ''
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const author = '${{github.event.pull_request.user.login}}';
const typos = `${{ env.TYPOS }}`;
const body = `
Hi @${author},
⚠️ Potential typos found in your pull request:
${typos}
## ℹ️ How to fix this error:
1. **If these are actual typos:**
- Open the files at the specified line numbers and fix them
2. **If these are names or one-off nouns:**
- Wrap them in \`<name>\` tags
- Example: \`<name>Alex Pereira</name>\`
- Use this for people's names or unique terms that appear rarely
3. **If these are valid terms:**
- Add them to \`wordlist.txt\` (one word per line)
- Terms must be plain text without spaces/special chars
- The list is case-insensitive
4. **If these are code terms:**
- Wrap them in backticks (\`) in your markdown
## ℹ️ Checking for typos locally
1. Install [aspell](https://www.gnu.org/software/aspell/) for your platform
2. Navigate to project root and run:
\`\`\`bash
for f in **/*.md ; do echo $f ; aspell --lang=en_US --mode=markdown --home-dir=. --personal=wordlist.txt --ignore-case=true --camel-case --add-sgml-skip nospellcheck list < $f | sort | uniq -c ; done
\`\`\`
[Learn more about wordlist format](http://aspell.net/man-html/Format-of-the-Personal-and-Replacement-Dictionaries.html)
`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: body
});
core.setFailed('🥢 Spell check found potential typos. See PR comment for details.');
================================================
FILE: .gitignore
================================================
**/.DS_Store
**/.DS_Store?
**/.vscode
**/.vscode?
**/.obsidian
**/.obsidian?
**/.idea
**/.idea?
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant]([https://www.contributor-covenant.org),
version 2.0, available at
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
at [https://www.contributor-covenant.org/translations][translations].
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
================================================
FILE: LICENSE
================================================
Creative Commons Attribution-ShareAlike 4.0 International Public
License
By exercising the Licensed Rights (defined below), You accept and agree
to be bound by the terms and conditions of this Creative Commons
Attribution-ShareAlike 4.0 International Public License ("Public
License"). To the extent this Public License may be interpreted as a
contract, You are granted the Licensed Rights in consideration of Your
acceptance of these terms and conditions, and the Licensor grants You
such rights in consideration of benefits the Licensor receives from
making the Licensed Material available under these terms and
conditions.
Section 1 -- Definitions.
a. Adapted Material means material subject to Copyright and Similar
Rights that is derived from or based upon the Licensed Material
and in which the Licensed Material is translated, altered,
arranged, transformed, or otherwise modified in a manner requiring
permission under the Copyright and Similar Rights held by the
Licensor. For purposes of this Public License, where the Licensed
Material is a musical work, performance, or sound recording,
Adapted Material is always produced where the Licensed Material is
synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright
and Similar Rights in Your contributions to Adapted Material in
accordance with the terms and conditions of this Public License.
c. BY-SA Compatible License means a license listed at
creativecommons.org/compatiblelicenses, approved by Creative
Commons as essentially the equivalent of this Public License.
d. Copyright and Similar Rights means copyright and/or similar rights
closely related to copyright including, without limitation,
performance, broadcast, sound recording, and Sui Generis Database
Rights, without regard to how the rights are labeled or
categorized. For purposes of this Public License, the rights
specified in Section 2(b)(1)-(2) are not Copyright and Similar
Rights.
e. Effective Technological Measures means those measures that, in the
absence of proper authority, may not be circumvented under laws
fulfilling obligations under Article 11 of the WIPO Copyright
Treaty adopted on December 20, 1996, and/or similar international
agreements.
f. Exceptions and Limitations means fair use, fair dealing, and/or
any other exception or limitation to Copyright and Similar Rights
that applies to Your use of the Licensed Material.
g. License Elements means the license attributes listed in the name
of a Creative Commons Public License. The License Elements of this
Public License are Attribution and ShareAlike.
h. Licensed Material means the artistic or literary work, database,
or other material to which the Licensor applied this Public
License.
i. Licensed Rights means the rights granted to You subject to the
terms and conditions of this Public License, which are limited to
all Copyright and Similar Rights that apply to Your use of the
Licensed Material and that the Licensor has authority to license.
j. Licensor means the individual(s) or entity(ies) granting rights
under this Public License.
k. Share means to provide material to the public by any means or
process that requires permission under the Licensed Rights, such
as reproduction, public display, public performance, distribution,
dissemination, communication, or importation, and to make material
available to the public including in ways that members of the
public may access the material from a place and at a time
individually chosen by them.
l. Sui Generis Database Rights means rights other than copyright
resulting from Directive 96/9/EC of the European Parliament and of
the Council of 11 March 1996 on the legal protection of databases,
as amended and/or succeeded, as well as other essentially
equivalent rights anywhere in the world.
m. You means the individual or entity exercising the Licensed Rights
under this Public License. Your has a corresponding meaning.
Section 2 -- Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License,
the Licensor hereby grants You a worldwide, royalty-free,
non-sublicensable, non-exclusive, irrevocable license to
exercise the Licensed Rights in the Licensed Material to:
a. reproduce and Share the Licensed Material, in whole or
in part; and
b. produce, reproduce, and Share Adapted Material.
2. Exceptions and Limitations. For the avoidance of doubt, where
Exceptions and Limitations apply to Your use, this Public
License does not apply, and You do not need to comply with
its terms and conditions.
3. Term. The term of this Public License is specified in Section
6(a).
4. Media and formats; technical modifications allowed. The
Licensor authorizes You to exercise the Licensed Rights in
all media and formats whether now known or hereafter created,
and to make technical modifications necessary to do so. The
Licensor waives and/or agrees not to assert any right or
authority to forbid You from making technical modifications
necessary to exercise the Licensed Rights, including
technical modifications necessary to circumvent Effective
Technological Measures. For purposes of this Public License,
simply making modifications authorized by this Section 2(a)
(4) never produces Adapted Material.
5. Downstream recipients.
a. Offer from the Licensor -- Licensed Material. Every
recipient of the Licensed Material automatically
receives an offer from the Licensor to exercise the
Licensed Rights under the terms and conditions of this
Public License.
b. Additional offer from the Licensor -- Adapted Material.
Every recipient of Adapted Material from You
automatically receives an offer from the Licensor to
exercise the Licensed Rights in the Adapted Material
under the conditions of the Adapter's License You apply.
c. No downstream restrictions. You may not offer or impose
any additional or different terms or conditions on, or
apply any Effective Technological Measures to, the
Licensed Material if doing so restricts exercise of the
Licensed Rights by any recipient of the Licensed
Material.
6. No endorsement. Nothing in this Public License constitutes or
may be construed as permission to assert or imply that You
are, or that Your use of the Licensed Material is, connected
with, or sponsored, endorsed, or granted official status by,
the Licensor or others designated to receive attribution as
provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not
licensed under this Public License, nor are publicity,
privacy, and/or other similar personality rights; however, to
the extent possible, the Licensor waives and/or agrees not to
assert any such rights held by the Licensor to the limited
extent necessary to allow You to exercise the Licensed
Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this
Public License.
3. To the extent possible, the Licensor waives any right to
collect royalties from You for the exercise of the Licensed
Rights, whether directly or through a collecting society
under any voluntary or waivable statutory or compulsory
licensing scheme. In all other cases the Licensor expressly
reserves any right to collect such royalties.
Section 3 -- License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the
following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified
form), You must:
a. retain the following if it is supplied by the Licensor
with the Licensed Material:
i. identification of the creator(s) of the Licensed
Material and any others designated to receive
attribution, in any reasonable manner requested by
the Licensor (including by pseudonym if
designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of
warranties;
v. a URI or hyperlink to the Licensed Material to the
extent reasonably practicable;
b. indicate if You modified the Licensed Material and
retain an indication of any previous modifications; and
c. indicate the Licensed Material is licensed under this
Public License, and include the text of, or the URI or
hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any
reasonable manner based on the medium, means, and context in
which You Share the Licensed Material. For example, it may be
reasonable to satisfy the conditions by providing a URI or
hyperlink to a resource that includes the required
information.
3. If requested by the Licensor, You must remove any of the
information required by Section 3(a)(1)(A) to the extent
reasonably practicable.
b. ShareAlike.
In addition to the conditions in Section 3(a), if You Share
Adapted Material You produce, the following conditions also apply.
1. The Adapter's License You apply must be a Creative Commons
license with the same License Elements, this version or
later, or a BY-SA Compatible License.
2. You must include the text of, or the URI or hyperlink to, the
Adapter's License You apply. You may satisfy this condition
in any reasonable manner based on the medium, means, and
context in which You Share Adapted Material.
3. You may not offer or impose any additional or different terms
or conditions on, or apply any Effective Technological
Measures to, Adapted Material that restrict exercise of the
rights granted under the Adapter's License You apply.
Section 4 -- Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that
apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
to extract, reuse, reproduce, and Share all or a substantial
portion of the contents of the database;
b. if You include all or a substantial portion of the database
contents in a database in which You have Sui Generis Database
Rights, then the database in which You have Sui Generis Database
Rights (but not its individual contents) is Adapted Material,
including for purposes of Section 3(b); and
c. You must comply with the conditions in Section 3(a) if You Share
all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not
replace Your obligations under this Public License where the Licensed
Rights include other Copyright and Similar Rights.
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
c. The disclaimer of warranties and limitation of liability provided
above shall be interpreted in a manner that, to the extent
possible, most closely approximates an absolute disclaimer and
waiver of all liability.
Section 6 -- Term and Termination.
a. This Public License applies for the term of the Copyright and
Similar Rights licensed here. However, if You fail to comply with
this Public License, then Your rights under this Public License
terminate automatically.
b. Where Your right to use the Licensed Material has terminated under
Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided
it is cured within 30 days of Your discovery of the
violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any
right the Licensor may have to seek remedies for Your violations
of this Public License.
c. For the avoidance of doubt, the Licensor may also offer the
Licensed Material under separate terms or conditions or stop
distributing the Licensed Material at any time; however, doing so
will not terminate this Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
License.
Section 7 -- Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different
terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the
Licensed Material not stated herein are separate from and
independent of the terms and conditions of this Public License.
Section 8 -- Interpretation.
a. For the avoidance of doubt, this Public License does not, and
shall not be interpreted to, reduce, limit, restrict, or impose
conditions on any use of the Licensed Material that could lawfully
be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is
deemed unenforceable, it shall be automatically reformed to the
minimum extent necessary to make it enforceable. If the provision
cannot be reformed, it shall be severed from this Public License
without affecting the enforceability of the remaining terms and
conditions.
c. No term or condition of this Public License will be waived and no
failure to comply consented to unless expressly agreed to by the
Licensor.
d. Nothing in this Public License constitutes or may be interpreted
as a limitation upon, or waiver of, any privileges and immunities
that apply to the Licensor or You, including from the legal
processes of any jurisdiction or authority.
=======================================================================
Creative Commons is not a party to its public
licenses. Notwithstanding, Creative Commons may elect to apply one of
its public licenses to material it publishes and in those instances
will be considered the “Licensor.” The text of the Creative Commons
public licenses is dedicated to the public domain under the CC0 Public
Domain Dedication. Except for the limited purpose of indicating that
material is shared under a Creative Commons public license or as
otherwise permitted by the Creative Commons policies published at
creativecommons.org/policies, Creative Commons does not authorize the
use of the trademark "Creative Commons" or any other trademark or logo
of Creative Commons without its prior written consent including,
without limitation, in connection with any unauthorized modifications
to any of its public licenses or any other arrangements,
understandings, or agreements concerning use of licensed material. For
the avoidance of doubt, this paragraph does not form part of the
public licenses.
Creative Commons may be contacted at creativecommons.org.
================================================
FILE: README.md
================================================
# Ethereum Protocol Fellowship Study Group (EPFsg)
This repository is dedicated to coordination and developing a knowledge base for the EPFsg. It hosts the Protocol Wiki, a community effort to build a technical knowledge base about the Ethereum core protocol.
[Learn more about the EPF study group](https://epf.wiki/#/eps/intro) and dive into the [wiki content](https://epf.wiki/#/README?id=protocol-wiki) to study the protocol.
## Protocol Studies Wiki
You can visit the wiki at https://epf.wiki or head to `/docs` for the source.
[Join us](https://discord.com/invite/addwpQbhpq) to learn about the protocol and start [contributing](/docs/contributing.md).

================================================
FILE: check_typos.sh
================================================
#!/bin/bash
# Ensure TYPOS variable is empty to start
TYPOS=""
echo "🔍 Checking for typos..."
# Use -v to ensure aspell is installed before running
if ! command -v aspell &>/dev/null; then
echo "❌ Error: 'aspell' is not installed. (Hint: brew install aspell / apt install aspell)"
exit 1
fi
# Set Internal Field Separator to handle filenames with spaces
IFS=$'\n'
set -f
for file in $(find . -name "*.md"); do
if [ ! -s "$file" ]; then
continue
fi
echo "Reading: $file"
# Get typos list from aspell
output="$(aspell list --lang=en_US --mode=markdown --home-dir=. --personal=./wordlist.txt --ignore-case=true --camel-case --add-sgml-skip name list <"$file")"
if [ $? -eq 0 ]; then
if [[ -n "$output" ]]; then
# Use sort -u to avoid repeating the same word multiple times
unique_typos=$(echo "$output" | sort -u)
while read -r word; do
# Find line numbers
line_nums=$(grep -nwi "$word" "$file" | cut -d: -f1 | tr '\n' ',' | sed 's/,$//')
TYPOS+="- 📄 $file (line(s) $line_nums):"$'\n'
TYPOS+=" ❌ $word"$'\n'
done <<<"$unique_typos"
fi
else
echo "::error::aspell failed on $file"
exit 1
fi
done
# Output the results to the terminal
if [[ -z "$TYPOS" ]]; then
echo "✅ No typos found!"
else
echo -e "\n--- Spelling Report ---\n"
echo "$TYPOS"
fi
================================================
FILE: docs/.nojekyll
================================================
================================================
FILE: docs/CNAME
================================================
epf.wiki
================================================
FILE: docs/_footer.md
================================================
---
EPF Wiki initiated by EF Protocol Support and maintained by EPFsg community. <a rel="license" href="https://github.com/eth-protocol-fellows/protocol-studies/blob/main/LICENSE"><img alt="CC License" style="border-width:0" src="https://licensebuttons.net/l/by-sa/4.0/88x31.png" /></a><br/> This work is licensed under a <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International.</a>.
================================================
FILE: docs/_navbar.md
================================================
* [Home](readme.md)
* [Study Group](/eps/intro.md)
* [Protocol Wiki](/wiki/wiki-intro.md)
* [Contribute](contributing.md)
================================================
FILE: docs/_sidebar.md
================================================
- [Home](readme.md)
- [Contributing](contributing.md)
- **Study Group**
- [Join the studies](/eps/intro.md)
- [Study Group archive](/eps/archive.md)
- **Protocol Wiki**
- The Protocol
- [Prehistory](/wiki/protocol/prehistory.md)
- [Architecture](/wiki/protocol/architecture.md)
- [Design rationale](/wiki/protocol/design-rationale.md)
- [Evolution](/wiki/protocol/history.md)
- Execution Layer
- [EL Specs](/wiki/EL/el-specs.md)
- [Client architecture](/wiki/EL/el-architecture.md)
- [Engine API](/wiki/EL/engine-api.md)
- [EL Clients](/wiki/EL/el-clients.md)
- [Besu](/wiki/EL/clients/besu.md)
- [Reth](/wiki/EL/clients/reth.md)
- [EVM](/wiki/EL/evm.md)
- [Precompiled Contracts](/wiki/EL/precompiled-contracts.md)
- [Block Building](/wiki/EL/block-production.md)
- [Data Structures](/wiki/EL/data-structures.md)
- [Summary](/wiki/EL/el-data-structures-summary.md)
- [Transaction anatomy](/wiki/EL/transaction.md)
- [JSON-RPC](/wiki/EL/JSON-RPC.md)
- [DevP2P](/wiki/EL/devp2p.md)
- [RLP Serialization](/wiki/EL/RLP.md)
- [EOF](/wiki/EL/eof.md)
- Consensus Layer
- [Overview](/wiki/CL/overview.md)
- [Client architecture](/wiki/CL/cl-architecture.md)
- [CL Networking](/wiki/CL/cl-networking.md)
- [CL Specs](/wiki/CL/cl-specs.md)
- [Beacon API](/wiki/CL/beacon-api.md)
- [CL Clients](/wiki/CL/cl-clients.md)
- [SSZ Serialization](/wiki/CL/SSZ.md)
- [Merkleization](/wiki/CL/merkleization.md)
- [Weak Subjectivity](/wiki/CL/syncing.md)
- Development
- [Core development](/wiki/dev/core-development.md)
- [Coordination](/wiki/dev/pm.md)
- [Dev Resources](/wiki/dev/cs-resources.md)
- Testing and security
- [Testing overview](/wiki/testing/overview.md)
- [Incidents](/wiki/testing/incidents.md)
- [Hive](/wiki/testing/hive.md)
- [Kurtosis](/wiki/testing/kurtosis.md)
- [Formal verification](/wiki/testing/formal-verification.md)
- Research
- [Roadmap overview](/wiki/research/roadmap.md)
- [Scaling](/wiki/research/scaling/scaling.md)
- [Core Changes](/wiki/research/scaling/core-changes/core-changes.md)
- [EIP-4844](/wiki/research/scaling/core-changes/eip-4844.md)
- [MEV](/wiki/research/PBS/mev.md)
- [MEV-boost](/wiki/research/PBS/mev-boost.md)
- [PBS](/wiki/research/PBS/pbs.md)
- [ePBS](/wiki/research/PBS/ePBS.md)
- [ePBS Design Specs](/wiki/research/PBS/ePBS-Specs.md)
- [PTC](/wiki/research/PBS/PTC.md)
- [PEPC](/wiki/research/PBS/PEPC.md)
- [TBHL](/wiki/research/PBS/TBHL.md)
- [ET](/wiki/research/PBS/ET.md)
- [eODS](/wiki/research/eODS.md)
- [PeerDAS](/wiki/research/peerdas.md)
- [FCR](/wiki/research/FCR/FCR.md)
- [History Expiry](/wiki/research/history-expiry/history-expiry.md)
- Preconfirmations
- [Preconfirmations](/wiki/research/Preconfirmations/Preconfirmations.md)
- [Based Sequencing with Preconfs](/wiki/research/Preconfirmations/BasedSequencingPreconfs.md)
- [Light clients](/wiki/research/light-clients.md)
- Account abstraction
- [EIP-7702](/wiki/research/account-abstraction/eip-7702.md)
- [Cryptography](/wiki/Cryptography/intro.md)
- [ECDSA](/wiki/Cryptography/ecdsa.md)
- [BLS](/wiki/Cryptography/bls.md)
- [Keccak256](/wiki/Cryptography/keccak256.md)
- Commitments
- [KZG](/wiki/Cryptography/KZG.md)
- [Post-Quantum Cryptography](/wiki/Cryptography/post-quantum-cryptography.md)
- [Protocol Fellowship](/wiki/epf.md)
- [Pectra FAQ](/wiki/pectra-faq.md)
- **Wiki Info**
- [GitHub Repository](https://github.com/eth-protocol-fellows/protocol-studies)
<form action="https://epf.wiki/#/eps/intro" target="_blank">
<input type="submit" value="Join the protocol" class="btn-primary" />
</form>
================================================
FILE: docs/assets/css/custom.css
================================================
/* File for custom CSS
/* CSS to better visually match Docsify pages within Canvas LMS (uncomment to use) */
/*
@import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,400;0,700;1,400;1,700&display=swap');
body .markdown-section {
font-family: "Lato Extended","Lato","Helvetica Neue",Arial,sans-serif;
line-height: 1.4;
font-size: 16px;
}
*/
/* Link colors to match SFU branding visual styling (uncomment to use) */
/*
:root {
--link-color: #CC0633!important;
--link-text-decoration: none!important;
--link-text-decoration--hover: underline!important;
--sidebar-name-color: #CC0633!important;
--sidebar-nav-link-color: #757575!important;
--sidebar-nav-link-color--active: #CC0633!important;
--sidebar-nav-link-border-color--active: #CC0633!important;
--sidebar-nav-pagelink-background--active:
no-repeat 0px center / 5px 6px
linear-gradient(225deg, transparent 2.75px, #CC0633 2.75px 4.25px, transparent 4.25px),
no-repeat 5px center / 5px 6px
linear-gradient(135deg, transparent 2.75px, #CC0633 2.75px 4.25px, transparent 4.25px)!important;
--sidebar-nav-pagelink-background--collapse:
no-repeat 2px calc(50% - 2.5px) / 6px 5px
linear-gradient(45deg, transparent 2.75px, #CC0633 2.75px 4.25px, transparent 4px),
no-repeat 2px calc(50% + 2.5px) / 6px 5px
linear-gradient(135deg, transparent 2.75px, #CC0633 2.75px 4.25px, transparent 4px)!important;
--sidebar-nav-pagelink-background--loaded:
no-repeat 0px center / 5px 6px
linear-gradient(225deg, transparent 2.75px, #CC0633 2.75px 4.25px, transparent 4.25px),
no-repeat 5px center / 5px 6px
linear-gradient(135deg, transparent 2.75px, #CC0633 2.75px 4.25px, transparent 4.25px)!important;
--navbar-root-color: #757575!important;
--navbar-root-color--active: #CC0633!important;
--blockquote-border-color: #757b7f!important;
--pagination-title-color: #CC0633!important;
}
*/
/* Dark mode colours to match SFU branding visual styling for use with light + dark theme (uncomment to use) */
/*
@media (prefers-color-scheme: dark) {
:root {
--link-color: #EA7688!important;
--link-text-decoration: none!important;
--link-text-decoration--hover: underline!important;
--sidebar-name-color: #EA7688!important;
--sidebar-nav-link-color: #B2B4B4!important;
--sidebar-nav-link-color--active: #EA7688!important;
--sidebar-nav-link-border-color--active: #EA7688!important;
--sidebar-nav-pagelink-background--active:
no-repeat 0px center / 5px 6px linear-gradient(225deg, transparent 2.75px, #EA7688 2.75px 4.25px, transparent 4.25px), no-repeat 5px center / 5px 6px linear-gradient(135deg, transparent 2.75px, #EA7688 2.75px 4.25px, transparent 4.25px)!important;
--sidebar-nav-pagelink-background--collapse:
no-repeat 2px calc(50% - 2.5px) / 6px 5px linear-gradient(45deg, transparent 2.75px, #EA7688 2.75px 4.25px, transparent 4px), no-repeat 2px calc(50% + 2.5px) / 6px 5px linear-gradient(135deg, transparent 2.75px, #EA7688 2.75px 4.25px, transparent 4px)!important;
--sidebar-nav-pagelink-background--loaded:
no-repeat 0px center / 5px 6px linear-gradient(225deg, transparent 2.75px, #EA7688 2.75px 4.25px, transparent 4.25px), no-repeat 5px center / 5px 6px linear-gradient(135deg, transparent 2.75px, #EA7688 2.75px 4.25px, transparent 4.25px)!important;
--navbar-root-color: #B2B4B4!important;
--navbar-root-color--active: #EA7688!important;
--blockquote-border-color: #757B7F!important;
--pagination-title-color: #EA7688!important;
}
}
*/
/* Link colors to match visual styling of Moodle LMS (uncomment to use) */
/*
:root {
--link-color: #0F6CBF!important;
--sidebar-name-color: #0F6CBF!important;
--sidebar-nav-link-color--active: #0F6CBF!important;
--sidebar-nav-link-border-color--active: #0F6CBF!important;
--sidebar-nav-pagelink-background--active:
no-repeat 0px center / 5px 6px
linear-gradient(225deg, transparent 2.75px, #0F6CBF 2.75px 4.25px, transparent 4.25px),
no-repeat 5px center / 5px 6px
linear-gradient(135deg, transparent 2.75px, #0F6CBF 2.75px 4.25px, transparent 4.25px)!important;
--sidebar-nav-pagelink-background--collapse:
no-repeat 2px calc(50% - 2.5px) / 6px 5px
linear-gradient(45deg, transparent 2.75px, #0F6CBF 2.75px 4.25px, transparent 4px),
no-repeat 2px calc(50% + 2.5px) / 6px 5px
linear-gradient(135deg, transparent 2.75px, #0F6CBF 2.75px 4.25px, transparent 4px)!important;
--sidebar-nav-pagelink-background--loaded:
no-repeat 0px center / 5px 6px
linear-gradient(225deg, transparent 2.75px, #0F6CBF 2.75px 4.25px, transparent 4.25px),
no-repeat 5px center / 5px 6px
linear-gradient(135deg, transparent 2.75px, #0F6CBF 2.75px 4.25px, transparent 4.25px)!important;
--navbar-root-color--active: #0F6CBF!important;
--blockquote-border-color: #0F6CBF!important;
--pagination-title-color: #0F6CBF!important;
}
*/
/* Link colors to match visual styling of Sakai LMS (uncomment to use) */
/*
:root {
--link-color: #0B1660!important;
--sidebar-name-color: #0B1660!important;
--sidebar-nav-link-color--active: #0B1660!important;
--sidebar-nav-link-border-color--active: #0B1660!important;
--sidebar-nav-pagelink-background--active:
no-repeat 0px center / 5px 6px
linear-gradient(225deg, transparent 2.75px, #0B1660 2.75px 4.25px, transparent 4.25px),
no-repeat 5px center / 5px 6px
linear-gradient(135deg, transparent 2.75px, #0B1660 2.75px 4.25px, transparent 4.25px)!important;
--sidebar-nav-pagelink-background--collapse:
no-repeat 2px calc(50% - 2.5px) / 6px 5px
linear-gradient(45deg, transparent 2.75px, #0B1660 2.75px 4.25px, transparent 4px),
no-repeat 2px calc(50% + 2.5px) / 6px 5px
linear-gradient(135deg, transparent 2.75px, #0B1660 2.75px 4.25px, transparent 4px)!important;
--sidebar-nav-pagelink-background--loaded:
no-repeat 0px center / 5px 6px
linear-gradient(225deg, transparent 2.75px, #0B1660 2.75px 4.25px, transparent 4.25px),
no-repeat 5px center / 5px 6px
linear-gradient(135deg, transparent 2.75px, #0B1660 2.75px 4.25px, transparent 4.25px)!important;
--navbar-root-color--active: #0B1660!important;
--navbar-root-color--active: #0B1660!important;
--blockquote-border-color: #0B1660!important;
--pagination-title-color: #0B1660!important;
}
*/
/* CSS to better visually match Docsify pages within Sakai LMS (uncomment to use) */
/*
@import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,600;0,700;1,400;1,600;1,700&display=swap');
body .markdown-section {
font-family: "Open Sans",sans-serif;
line-height: 1.3;
font-size: 14px;
}
*/
/*
################################
|| ||
|| 🎨 EPF.WIKI Theme ||
|| ||
################################
*/
:root {
--base-background-color: #1c153b;
--sidebar-name-color: #ba9afd;
--sidebar-background: #190c39;
--sidebar-toggle-background: #190c39;
--navbar-root-color--active: #ba9afd;
--search-input-background-color: #2d1763;
--table-row-odd-background: #2d1763;
--base-color: #fff;
--heading-color: #fff;
--primary-text-color: #d3d3d3;
/* blockquote*/
--blockquote-background: #2d1763;
--blockquote-color: var(--primary-text-color);
--blockquote-border-color: #ba9afd;
/* link */
--link-color: #ba9afd;
/* text */
}
body {
color: #fff;
}
section.content , .markdown-section code{
color: var(--primary-text-color);
}
/* sidebar */
li.file,
li.folder {
padding: 8px 15px;
margin-bottom: 4px;
}
li.file p,
li.folder p {
margin: 0;
}
li.folder.active,
li.folder:hover,
li.folder.open,
li.file.active,
li.file:hover,
li.file.open {
border-radius: 5px;
background: #2d1763;
}
.app-sub-sidebar li.file,
.app-sub-sidebar li.folder {
padding: 0;
margin: 0;
animation: tabFade 0.5s;
}
li.folder strong,
li.file strong {
padding: 10px 0;
display: block;
border-bottom: 1px dashed #a278ff;
}
li.folder > ul > li.file {
padding: 0;
}
.sidebar-nav ul.app-sub-sidebar a {
border: none;
border-left: 4px solid #fff;
padding-left: 8px;
}
.sidebar-nav ul.app-sub-sidebar li.active > a,
.sidebar-nav ul.app-sub-sidebar li a:hover {
border-color: #ba9afd;
text-decoration: none;
color: #ba9afd;
border-left: 4px solid #ba9afd;
}
.sidebar .search .input-wrap {
padding: 8px 15px;
margin: 0;
border-radius: 50px;
border: 2px solid #6660b9;
}
.sidebar .search input[type="search"],
.sidebar .search input[type="search"]:focus {
background-color: #2d1763;
outline: none;
box-shadow: none;
}
.sidebar-nav a:hover {
text-decoration: none;
}
@keyframes tabFade {
0% {
opacity: 0;
}
to {
opacity: 1;
}
}
/* content */
.markdown-section img {
border-radius: 8px;
}
.markdown-section h2 a::before,
.markdown-section h3 a::before,
.markdown-section h4 a::before,
.markdown-section h5 a::before,
.markdown-section h6 a::before {
color: #ba9afd;
margin-right: 5px;
}
.app-nav li a {
color: #fff;
font-weight: bold;
}
.sidebar-toggle .sidebar-toggle-button {
padding: 20px;
border-radius: 5px;
--sidebar-toggle-icon-height: 8px;
--sidebar-toggle-icon-stroke-width: 2px;
background: #6e52a9;
}
@media only screen and (min-width: 768px) {
.sidebar-toggle .sidebar-toggle-button {
padding: 20px;
border-radius: 5px;
--sidebar-toggle-icon-height: 8px;
--sidebar-toggle-icon-stroke-width: 5px;
background: #6e52a9;
}
.sidebar-toggle span:nth-child(1) {
transform: rotate(-45deg);
}
.sidebar-toggle span:nth-child(2) {
display: none;
}
.sidebar-toggle span:nth-child(3) {
transform: rotate(45deg);
}
.ready-fix.close .sidebar-toggle span:nth-child(1) {
transform: rotate(45deg);
}
.ready-fix.close .sidebar-toggle span:nth-child(3) {
transform: rotate(135deg);
}
}
.sidebar-toggle span {
transition: transform 0.5s ease-in-out;
}
.btn-primary,
.markdown-section a.btn-primary {
border: none;
outline: none;
cursor: pointer;
text-align: center;
border-radius: 3rem;
background: #ba9afd;
padding: 0.75rem 1.5rem 0.85rem;
font-size: 1.13rem;
font-weight: 500;
line-height: 1;
color: #190c39;
margin: 10px 0;
display: inline-block;
text-decoration: none;
}
.btn-primary::after {
display: inline-block;
margin-left: 4px;
font-size: 22px;
content: "➡";
}
body .pagination-item-title,
body .pagination-item-label {
font-weight: bold;
color: #fff;
opacity: 1;
}
.app-name-link {
display: flex;
align-items: center; /* Vertical align */
justify-content: center;
font-weight: bold;
font-size: 25px;
}
.logo {
display: inline;
width: 40px;
margin-right: 5px;
}
.markdown-section table {
overflow-x:scroll;
width: 100%;
display:block;
}
.sidebar-nav li,
.sidebar-nav li * {
white-space: normal !important;
overflow: visible !important;
text-overflow: clip !important;
word-break: break-word !important;
}
================================================
FILE: docs/assets/css/editor.css
================================================
/*
===============================================================================================================================
CSS for better Markdown previews within a text editor.
===============================================================================================================================
*/
.badge {
color: #fff;
background-color: #6c757d;
display: inline-block;
padding: .25em .4em .25em .4em;
font-size: 75%;
font-weight: 700;
line-height: 1;
text-align: center;
white-space: nowrap;
vertical-align: middle;
margin-top: -0.4em;
border-radius: .25rem;
transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
text-decoration: none;
}
.badge a {
color: white;
text-decoration: none !important;
}
ul {
list-style: square outside none;
}
.alert {
overflow: visible;
margin: 2em 0;
padding: 1.5em;
background: #f7f7f7;
}
.alert ul {
list-style: none;
margin-top: .8em;
}
.alert ul li {
margin: 2px 0;
}
.alert ul li:before {
position: absolute;
content: '\2B29';
margin-left: -18px;
}
.blockquote ul {
list-style: none;
margin-top: .8em;
}
.blockquote ul li {
margin: 2px 0;
}
.blockquote ul li:before {
position: absolute;
content: '\2B29';
margin-left: -18px;
}
.video-container-4by3 {
position: relative;
padding-bottom: 75%;
height: 0;
overflow: hidden;
max-width: 100%;
}
.video-container-16by9 {
position: relative;
padding-bottom: 56.25%;
height: 0;
overflow: hidden;
max-width: 100%;
}
.video-container-16by9 iframe, .video-container-4by3 iframe, .embed-container object, .embed-container embed {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 93%;
}
================================================
FILE: docs/assets/css/theme.css
================================================
.app-nav:not(:empty)~main .markdown-section {
padding-top: 5.0rem;
}
.pagination-item, .pagination-item-title {
opacity: .9 !important;
}
.pagination-item:not(:last-child) a .pagination-item-label, .pagination-item:not(:last-child) a .pagination-item-subtitle, .pagination-item:not(:last-child) a .pagination-item-title {
opacity: .9 !important;
transition: all .2s;
}
.markdown-section {
padding: 1rem 40px;
}
.markdown-section .alert, .markdown-section blockquote {
overflow: visible;
margin: 1em 0;
padding: 1em;
border-width: var(--blockquote-border-width, 0);
border-style: var(--blockquote-border-style);
border-color: var(--blockquote-border-color);
border-radius: var(--blockquote-border-radius);
background: var(--blockquote-background);
color: var(--blockquote-color);
font-family: var(--blockquote-font-family);
font-size: var(--blockquote-font-size);
font-style: var(--blockquote-font-style);
font-weight: var(--blockquote-font-weight);
quotes: "“""”""‘""’";
}
.markdown-section ul {
list-style: square outside none;
}
.markdown-section .alert ul, .markdown-section blockquote ul {
list-style: none;
margin-top: .8em;
}
.markdown-section .alert ul li, .markdown-section blockquote ul li {
margin: 2px 0;
}
.markdown-section .alert ul li:before, .markdown-section blockquote ul li:before {
position: absolute;
content: '\2B29';
margin-left: -18px;
}
.markdown-section .button {
cursor: pointer;
color: var(--base-background-color);
height: auto;
display: inline-block;
margin-top: 4px;
padding: 10px;
font-family: -apple-system, "Segoe UI", "Helvetica Neue", sans-serif;
line-height: 1.2rem;
background-color: var(--link-color);
text-decoration: none;
border-radius: .25rem;
}
.markdown-section a.button {
cursor: pointer;
color: var(--base-background-color);
text-decoration: none !important;
}
.markdown-section .button-rounded {
cursor: pointer;
color: var(--base-background-color);
height: auto;
display: inline-block;
padding: 10px min(20px, 5%) 10px min(20px, 5%);
font-family: -apple-system, "Segoe UI", "Helvetica Neue", sans-serif;
line-height: 1.2rem;
background-color: var(--link-color);
text-decoration: none;
border-radius: 1.2rem;
}
.markdown-section a.button-rounded {
cursor: pointer;
color: var(--base-background-color);
text-decoration: none !important;
}
.markdown-section .navpill {
cursor: pointer;
color: var(--base-color);
height: auto;
display: inline-block;
border: 1px solid var(--base-color);
border-radius: 4rem;
padding: 4px 14px 4px 14px;
margin-bottom: 4px;
margin-right: 6px;
font-size: .8rem;
line-height: .9rem;
background-color: --base-background-color;
font-family: -apple-system, "Segoe UI", "Helvetica Neue", sans-serif;
font-weight: bold;
text-decoration: none;
}
.markdown-section a.navpill {
cursor: pointer;
color: var(--base-color);
border: 1px solid var(--base-color);
text-decoration: none !important;
}
.markdown-section .badge {
color: var(--base-background-color);
background-color: color-mix(in srgb, var(--base-color) 70%, transparent);
display: inline-block;
padding: .25em .4em .25em .4em;
font-family: -apple-system, "Segoe UI", "Helvetica Neue", sans-serif;
font-size: 75%;
font-weight: 700;
line-height: 1;
text-align: center;
white-space: nowrap;
vertical-align: middle;
margin-top: -0.4em;
border-radius: .25rem;
transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
text-decoration: none;
}
.markdown-section .badge a {
color: var(--base-background-color)!important;
text-decoration: none !important;
}
.markdown-section a[href$="?id=a"], .markdown-section a[href$='?id=b'], .markdown-section a[href$="?id=c"], .markdown-section a[href$="?id=d"], .markdown-section a[href$="?id=e"], .markdown-section a[href$="?id=f"], .markdown-section a[href$="?id=g"], .markdown-section a[href$="?id=h"], .markdown-section a[href$="?id=i"], .markdown-section a[href$="?id=j"], .markdown-section a[href$="?id=k"], .markdown-section a[href$="?id=l"], .markdown-section a[href$="?id=m"], .markdown-section a[href$="?id=n"], .markdown-section a[href$="?id=o"], .markdown-section a[href$="?id=p"], .markdown-section a[href$="?id=q"], .markdown-section a[href$="?id=r"], .markdown-section a[href$="?id=s"], .markdown-section a[href$="?id=t"], .markdown-section a[href$="?id=u"], .markdown-section a[href$="?id=v"], .markdown-section a[href$="?id=w"], .markdown-section a[href$="?id=x"], .markdown-section a[href$="?id=y"], .markdown-section a[href$="?id=z"] {
display: inline-flex;
padding-top: 0px;
padding-right: 6px;
padding-bottom: 0px;
padding-left: 6px;
line-height: 1.2em;
}
.markdown-section #a, .markdown-section #b, .markdown-section #c, .markdown-section #d, .markdown-section #e, .markdown-section #f, .markdown-section #g, .markdown-section #h, .markdown-section #i, .markdown-section #j, .markdown-section #k, .markdown-section #l, .markdown-section #m, .markdown-section #n, .markdown-section #o, .markdown-section #p, .markdown-section #q, .markdown-section #r, .markdown-section #s, .markdown-section #t, .markdown-section #u, .markdown-section #v, .markdown-section #w, .markdown-section #x, .markdown-section #y, .markdown-section #z {
width: 2em;
color: var(--base-background-color);
font-weight: 700;
margin-top: 1.00rem;
padding-left: 0.25rem;
background: color-mix(in srgb, var(--base-color) 70%, transparent);
}
.markdown-section .accordion {
margin-top: 1.05rem;
position: relative;
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
min-width: 0;
word-wrap: break-word;
background-clip: border-box;
border: 1px solid #CCCCCC;
border-radius: .15rem;
}
.markdown-section details {
padding: .75rem 1.25rem;
margin-bottom: 0;
border-bottom: 1px solid #CCCCCC;
}
.markdown-section summary {
cursor: pointer;
color: var(--link-color);
padding: 0;
h1, h2, h3 {
margin: 0;
display: inline-block;
}
}
.markdown-section code {
white-space: pre-wrap!important;
}
.markdown-section pre code {
word-break: break-all!important;
}
.markdown-section .fa-fw {
text-align: left;
}
.markdown-section .video-container-4by3 {
position: relative;
padding-bottom: 75%;
height: 100%;
overflow: hidden;
max-width: 100%;
}
.markdown-section .video-container-16by9 {
position: relative;
padding-bottom: 56.25%;
height: 100%;
overflow: hidden;
max-width: 100%;
}
.video-container-16by9 iframe, .video-container-4by3 iframe, .embed-container object, .embed-container embed {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.markdown-section .responsive-container iframe {
max-width: 100%;
}
.markdown-section .banner-image {
width: 100%;
height: 125px;
object-fit: cover;
object-position: 50% 50%;
}
@media (min-width: 576px) {
.markdown-section .banner-image {
height: 250px;
}
}
.markdown-section .banner-tall-image {
width: 100%;
height: 175px;
object-fit: cover;
object-position: 50% 50%;
}
@media (min-width: 576px) {
.markdown-section .banner-tall-image {
height: 350px;
}
}
.markdown-section .header-image-fade {
width: 100%;
margin: 0px auto;
position: absolute;
top: 0px;
left: 0;
-webkit-mask-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,1)), to(rgba(0,0,0,0)));
mask-image: linear-gradient(to bottom, rgba(0,0,0,1), rgba(0,0,0,0));
opacity: 0.4;
z-index: -1;
}
@media screen and (max-width: 980px) {
.markdown-section .header-image-fade {
top: -20px;
}
}
/* CSS currently only works with sidebar and standalone pages */
.markdown-section .header-image-full-width {
margin-top: -2rem;
left: 50%;
margin-left: -50vw;
margin-right: -50vw;
max-width: 100vw;
position: relative;
right: 50%;
width: 100vw;
height: 30dvh;
object-fit: cover;
object-position: center 50%;
}
.markdown-section .header-tall-image-full-width {
margin-top: -2rem;
left: 50%;
margin-left: -50vw;
margin-right: -50vw;
max-width: 100vw;
position: relative;
right: 50%;
width: 100vw;
height: 40dvh;
object-fit: cover;
object-position: center 50%;
}
.markdown-section .image-75 {
width: 75%;
height: auto;
}
.markdown-section .image-50 {
width: 75%;
height: auto;
}
.markdown-section .image-25 {
width: 75%;
height: auto;
}
.markdown-section .image-75-border {
width: 75%;
height: auto;
border: 1px solid #dfdfdf;
}
.markdown-section .image-50-border {
width: 75%;
height: auto;
border: 1px solid #dfdfdf;
}
.markdown-section .image-25-border {
width: 75%;
height: auto;
border: 1px solid #dfdfdf;
}
.markdown-section .image-border {
border: 1px solid #dfdfdf;
}
.markdown-section .image-border-rounded {
border-radius: 0.35em;
border: 1px solid #dfdfdf;
}
.markdown-section .column {
float: left;
padding-right: 1rem;
width: 50%;
}
.markdown-section .column img {
padding-top: .35rem;
}
.markdown-section .reverse-columns .column {
float: right;
}
.markdown-section .row:after {
content: "";
display: table;
clear: both;
}
@media screen and (max-width:800px) {
.markdown-section .column {
width: 100%;
}
.markdown-section .image-75, .markdown-section .image-50, .markdown-section .image-25, .markdown-section .image-75-border, .markdown-section .image-50-border, .markdown-section .image-25-border {
width: 100%;
height: auto;
}
}
.markdown-section figure, .markdown-section p, .markdown-section ol, .markdown-section ul {
margin: 1em 0em .5em 0em;
}
.markdown-section h1 {
line-height: 1.75rem;
}
.markdown-section h2 {
line-height: 1.55rem;
}
.markdown-section .h3 {
line-height: 1.35rem;
}
.markdown-section h4 {
line-height: 1.3rem;
}
.markdown-section h5 {
line-height: 1.25rem;
}
.markdown-section h6 {
line-height: 1.2rem;
}
.markdown-section .alert hr, .markdown-section blockquote hr {
margin: 1em 0;
}
.markdown-section .alert h1, .markdown-section blockquote h1 {
font-size: 1.5rem;
line-height: 1.6rem;
}
.markdown-section .alert h2, .markdown-section blockquote h2 {
font-size: 1.35rem;
line-height: 1.45rem;
}
.markdown-section .alert h3, .markdown-section blockquote h3 {
font-size: 1.2rem;
line-height: 1.3rem;
}
.markdown-section .alert h4, .markdown-section blockquote h4 {
font-size: 1.15rem;
line-height: 1.25rem;
}
.markdown-section .alert h5, .markdown-section blockquote h5 {
font-size: 1.1rem;
line-height: 1.2rem;
}
.markdown-section .alert h6, .markdown-section blockquote h6 {
font-size: 1rem;
line-height: 1.1rem;
}
body .app-nav {
margin-right: -10px;
}
body .docsify-pagination-container {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
overflow: hidden;
margin: 3em 0 1em;
border-top: 0px solid rgba(0, 0, 0, .07);
}
.progress {
background-color: var(--blockquote-border-color);
}
@media only screen and (max-width: 480px) {
.markdown-section h1 {
font-size: 1.45rem;
line-height: 1.5rem;
}
.markdown-section h2 {
font-size: 1.35rem;
line-height: 1.4rem;
}
.markdown-section h3 {
font-size: 1.25rem;
line-height: 1.3rem;
}
.markdown-section h4 {
font-size: 1.15rem;
line-height: 1.2rem;
}
.markdown-section h5 {
font-size: 1.1rem;
line-height: 1.15rem;
}
.markdown-section h6 {
font-size: 1rem;
line-height: 1.05rem;
}
.markdown-section .alert h1, .markdown-section blockquote h1 {
font-size: 1.3rem;
line-height: 1.4rem;
}
.markdown-section .alert h2, .markdown-section blockquote h2 {
font-size: 1.2rem;
line-height: 1.3rem;
}
.markdown-section .alert h3, .markdown-section blockquote h3 {
font-size: 1.15rem;
line-height: 1.25rem;
}
.markdown-section .alert h4, .markdown-section blockquote h4 {
font-size: 1.1rem;
line-height: 1.2rem;
}
.markdown-section .alert h5, .markdown-section blockquote h5 {
font-size: 1.05rem;
line-height: 1.1rem;
}
.markdown-section .alert h6, .markdown-section blockquote h6 {
font-size: 1rem;
line-height: 1.05rem;
}
}
/* Dark mode colours for use with Simple light + dark theme (uncomment to use) */
/* @media (prefers-color-scheme: dark) { */
/*
:root {
--link-color: #1BA1EE!important;
--sidebar-name-color: #1BA1EE!important;
--sidebar-nav-link-color--active: #1BA1EE!important;
--sidebar-nav-link-border-color--active: #1BA1EE!important;
--sidebar-nav-pagelink-background--active:
no-repeat 0px center / 5px 6px
linear-gradient(225deg, transparent 2.75px, #1BA1EE 2.75px 4.25px, transparent 4.25px),
no-repeat 5px center / 5px 6px
linear-gradient(135deg, transparent 2.75px, #1BA1EE 2.75px 4.25px, transparent 4.25px)!important;
--sidebar-nav-pagelink-background--collapse:
no-repeat 2px calc(50% - 2.5px) / 6px 5px
linear-gradient(45deg, transparent 2.75px, #1BA1EE 2.75px 4.25px, transparent 4px),
no-repeat 2px calc(50% + 2.5px) / 6px 5px
linear-gradient(135deg, transparent 2.75px, #1BA1EE 2.75px 4.25px, transparent 4px)!important;
--sidebar-nav-pagelink-background--loaded:
no-repeat 0px center / 5px 6px
linear-gradient(225deg, transparent 2.75px, #1BA1EE 2.75px 4.25px, transparent 4.25px),
no-repeat 5px center / 5px 6px
linear-gradient(135deg, transparent 2.75px, #1BA1EE 2.75px 4.25px, transparent 4.25px)!important;
--navbar-root-color--active: #1BA1EE!important;
--navbar-root-color--active: #1BA1EE!important;
--blockquote-border-color: #1BA1EE!important;
--pagination-title-color: #1BA1EE!important;
}
}
*/
================================================
FILE: docs/assets/css/toc.css
================================================
.content *::-webkit-scrollbar {
background-color: transparent;
width: 12px;
}
.content *::-webkit-scrollbar-track {
background-color: transparent;
}
.content *::-webkit-scrollbar-thumb {
border-radius: 20px;
border: 3px solid transparent;
background-color: rgba(0,0,0,0.3);
background-clip: content-box;
}
.content {
display: flex;
flex-direction: row-reverse;
justify-content: center;
}
.markdown-section {
flex: 1 1 0%;
margin: 0 48px;
}
.nav {
width: var(--toc-width, 280px);
min-width: 200px;
align-self: flex-start;
flex: 0 0 auto;
}
aside.nav.nothing {
width: 0;
}
.page_toc {
border-left-style: solid;
border-left-width: 1px;
border-left-color: rgba(0, 0, 0, 0.07);
border-image-slice: 1;
padding-left: 5px;
position: -webkit-sticky;
position: fixed;
overflow-y: scroll;
max-height: 100vh;
top: 0;
bottom: auto;
margin-right: 10px;
scrollbar-width: thin !important;
scrollbar-color: grey transparent;
}
.page_toc a > * {
pointer-events: none;
}
.page_toc code {
background-color: #f8f8f8;
border-radius: 2px;
color: #e96900;
font-family: 'Roboto Mono', Monaco, courier, monospace;
font-size: 0.8rem;
margin: 0 2px;
padding: 3px 5px;
}
.page_toc p.title {
margin: 0px 0 0px 9px;
padding-top: 15px;
padding-bottom: 5px;
font-weight: 400;
font-size: 1.2em;
}
.page_toc .anchor:hover:after {
content: "";
}
.page_toc ul {
list-style-type: none;
margin-top: 0px;
padding-left: 10px;
color: var(--base-color, black);
text-decoration: none;
font-weight: 400;
line-height: 1.2em;
}
.page_toc ul a:hover span {
border-bottom: none !important;
text-decoration:underline !important;
}
.page_toc ul a {
color: var(--base-color, black);
text-decoration: none;
font-weight: 400;
line-height: 1.2em;
}
.page_toc ul li {
padding-top: 7px;
}
@media screen and (max-width: 900px) {
.page_toc {
position: relative;
top: -20px;
padding: 10px 0;
border: none;
border-bottom: 1px solid #ddd;
font-size: 1.0em;
}
.nav {
margin: 0 auto;
width: 900px;
}
.page_toc p.title {
font-weight: 400;
font-size: 1.2em;
}
.content {
display: block;
}
.markdown-section {
margin: 0 auto;
}
}
/*
.page_toc .active {
border-left: 5px solid;
color: var(--theme-color, #42b983);
padding-left: 10px;
}
*/
================================================
FILE: docs/assets/ics/eps25townhall.ics
================================================
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//ical.marudot.com//iCal Event Maker
CALSCALE:GREGORIAN
BEGIN:VEVENT
DTSTAMP:20250206T151639Z
UID:1738854242598-64367@ical.marudot.com
DTSTART:20250212T150000Z
DTEND:20250212T160000Z
SUMMARY:Town Hall - Ethereum Protocol Studies
DESCRIPTION:An information session and Q&A about the 2025 Ethereum Protocol Studies group.
LOCATION:https://meet.ethereum.org/eps-town-hall-25
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:Town Hall - Ethereum Protocol Studies
TRIGGER:-PT15M
END:VALARM
END:VEVENT
END:VCALENDAR
================================================
FILE: docs/contributing.md
================================================
# Contribute to the Protocol Wiki
The Protocol Wiki is an open and collaborative project. Whether you are part of the [Study Group](/eps/intro.md) or not, we welcome your contributions! Help us to build the documentation and improve availability of learning resources on Ethereum core R&D.
*We are not aiming to rewrite other existing Ethereum documentation* but rather create a cohesive collection of technical resources for aspiring core developers and researchers.
When creating contributions, consider whether it doesn't exist in another form elsewhere. Use it and reference it in your text but do not copy its content. Focus on adding it into a big picture, connecting it with related topics.
Write contributions based on what you learned about the protocol along the way, what experience you gathered and missing pieces that slowed you down. Consider it as explaining to your peers, reflect on your own journey as a core developer/researcher.
## Contributing
Before you start with editing, please read the code of conduct, following guide and make yourself familiar with the overall wiki structure.
The wiki source is hosted in Github repository at [github.com/eth-protocol-fellows/protocol-studies](https://github.com/eth-protocol-fellows/protocol-studies). Github repo is the main coordination and hosting platform but wiki source is also mirrored on [radicle](https://app.radicle.xyz/nodes/seed.radicle.garden/rad:zkV49UANVb2w2g5eE4Le197Wuasz) and [independent centralized host](https://git.ethquokkaops.io/eth-protocol-fellows/protocol-studies).
> The wiki is served from `wiki-pages` branch which is regularly updated from `main`. When contributing, open a PR to a branch related to the change or `main` for smaller quick fixes. PRs from other branches are reviewed before merging to `main` and collected updates are then pushed to update the `wiki-pages`.
Explore existing issues or open a new one for missing content, suggest improving existing content or wiki frontend features. If you identify missing or unfinished content, feel free to open a PR. First, check existing PRs or branches to make sure your work is not redundant.
We are not aiming to recreate other existing wikis. If the same content is well explained elsewhere, just link it and provide additional context.
### What does(n't) belong here
The scope of this wiki is limited to technical resources of the Ethereum core protocol infrastructure. This means its specifications, implementations, testing, research or related tooling.
It **does not** cover onchain protocols/dapps, layer 2s/rollups or any other tools which are not dependencies of core infrastructure. In other words, stuff which would be covered by EIPs, not ERCs.
### Structure and collaboration
The wiki is supposed to cover all important parts of Ethereum core protocol and its development. The protocol architecture and related topics is reflected in the wiki format. The whole wiki lives under `/docs/wiki` and the `/docs/_sidebar.md` defines the main documentation structure.
High level areas are abstracted to directories which include all subtopics. Focus your contributions to wiki itself. Week pages in `eps` directory are meant for weekly presentations information, not main place for resources.
For contributors, we recommend focusing on specific topics contained in corresponding documents. It's best to own a single topic and work out all the details. Create a new document and add the topic to the sidebar if it's not there yet. Join the [discord server](https://discord.gg/8RPnPGEQtJ), let others know what you are working on in the group channel and collaborate with other contributors writing about related topics. If you are working with multiple people on a significant piece of content, you can have a dedicated branch in the repo for easier coordination.
## Editing wiki
The wiki is a collection of regular markdown files which can be edited directly using github interface or your favorite markdown editor. When making commits and opening PRs, please provide a commentary explaining your contribution.
The web docs version is generated by [Docsify](https://docsify.js.org/). Learn about its [config](https://docsify.js.org/#/configuration) and [features](https://docsify.js.org/#/plugins) options. The configuration and web design is also open to improvements or suggestions.
For more extensive edits or changes to configuration, use Docsify to preview the web locally. You just need git and node.js.
Install docsify, clone the repository and host it locally.
```
npm i docsify-cli -g
git clone https://github.com/eth-protocol-fellows/protocol-studies.git
cd protocol-studies
docsify serve ./docs
```
## Fixing typos locally
The aspell typo checker is run on every PR and checks all files, it's advised to run it locally prior to submitting a pull request to resolve flagged words in your changes.
To check for typos locally:
1. Install [aspell](https://www.gnu.org/software/aspell/) for your platform.
2. Navigate to the project root and run the script:
```
bash check_typos.sh
```
To fix the typos:
1. Open the relevant files and fix any identified typos.
2. Update wordlist: If a flagged word is actually a project-specific term add it to `wordlist.txt` in the project root.
Each word should be listed on a separate line.
* Remember:
* When adding new words it must NOT have any spaces or special characters within or around it.
* \`wordlist\` is NOT case sensitive.
* Use backticks to quote code variables so as to not bloat the \`wordlist\`.
* Use the HTML tag <name> to surround proper names. <name>John Doe</name>
## Style guide
Wiki pages follow standard Markdown which can be rendered by Github or Docsify. For details on using it, look into the Markdown [guide](https://www.markdownguide.org/).
The audience of this wiki is technical and the content should reflect that. There are many guides on technical and documentation writing you can learn from, for example you can check [this lecture](https://www.youtube.com/watch?v=vtIzMaLkCaM) to get started.
Here are main guidelines to follow when writing this wiki:
- Write in an objective, clear and explanatory tone
- Avoid unnecessary simplifications, describe the technical reality
- Avoid using too long and complex sentences or paragraphs
- Use concise and clear statements
- Break down your text using blockquotes, bullet points or images
- Always link your resources and verify them
- Use bullet points or tables for topics which require enumerating
- Highlight keywords to support scanning and skimming through the article
- Provide visualizations to explain the topic better
- When adding pictures, add them to a directory for images and use their relative path
- When using acronyms or a technical jargon, make sure to introduce it first
- Ethereum is changing fast, write the content to be as much future proof as possible
- Don't use LLMs to generate the text
- We don't accept texts fully generated by AI, however we recommend using it to fix grammar or phrasing
- Consider creating tutorials and hands-on guides documenting technical steps
- Add recommended reading at the top, point to topics which are dependencies of yours
- For mathematical notations, you can use Katex
- You can use mermaid diagrams for visualizations
Goal is to produce a credible neutral text which is formal, well-structured, and maintains a clear progression of ideas. The content should be purely technical and shouldn't waste space on introducing high level/well known concepts. Introductory topics are necessary and can use comparisons, historical anecdotes, and concrete examples to make complex concepts more accessible.
### Content standardization
The wiki uses American English over British spelling. Terminology, capitalization and nomenclature should match across all pages. Use [Ethereum.org guide](https://ethereum.org/contributing/style-guide/content-standardization) for the reference.
Usage of images and visualizations is encouraged. If you are using an image created by a third party, make sure its license allows it and provide link to the original. For creating your own visualizations, we suggest [excalidraw.com](https://github.com/excalidraw/excalidraw).
Feel free to use [emojis](https://docsify.js.org/#/emoji?id=emoji) or [icons](https://icongr.am/fontawesome) where it fits, for example in blockquotes.
### Linking resources
When adding an external link, you can use it directly in the text or on the bottom of the page in "Resources" section.
When linking resources use descriptive names, such as [inevitableeth.com](https://inevitableeth.com/) instead of generic phrases like [this wiki](https://inevitableeth.com/).
Don't overwhelm reader with too many resources within the text.
When linking a page within this wiki, use a relative path and if it references specific topic within the page, use a link to heading IDs.
For other important links, add a section on the bottom of the page with list of resources. Resources should have a name or short description with a link and alternative link to its archived mirror. We strongly suggest adding a link to the latest snapshot from archive.org. Example of a link in a resource section:
[JSON-RPC API reference](https://ethereum.org/en/developers/docs/apis/json-rpc), [archived](https://web.archive.org/web/20240117035335/https://ethereum.org/en/developers/docs/apis/json-rpc)
### In-page notices
We use blockquote notices at the top of the page to provide readers with appropriate context regarding the content of the page.
#### Active research
Wiki pages that are subject to future updates, i.e. pages covering active research topics require a notice to be added on top of the pages:
```
* Warning message artifact using the following format:
> [!WARNING]
> This document covers an active area of research, may be outdated at time of reading and subject to future updates, as the design space around evolves.
```
#### Roadmap tracker
To help user navigate across research topics, we are using a roadmap tracker with the following format:
```
| Upgrade | URGE | Track | Topic | Cross-references |
|:-------:|:-----------:|:---------:|:---------------------------------:|:-----------------------------------------------------------------------------------------:|
| ePBS | the Scourge | MEV track | Endgame block production pipeline | intersection with: [ET](/wiki/research/ET.md), [PEPC](), [IL]() |
```
Ideally, references point to a local wiki pages.
#### Incomplete pages
Pages with minimal content which need more work to cover the topic need to include a notice:
```
> :warning: This article is a [stub](https://en.wikipedia.org/wiki/Wikipedia:Stub), help the wiki by [contributing](/contributing.md) and expanding it.
```
## Anything else?
This page is also opened for contributors! Suggest improvements to our style and guidelines in the github repo.
================================================
FILE: docs/epf.md
================================================
# Ethereum Protocol Fellowship (EPF)
The Ethereum Protocol Fellowship (EPF) is a program designed to provide developers and researchers with a
structured environment to contribute directly to Ethereum core protocol. The fellowship offers participants
mentorship, learning opportunities, and hands-on experience working on some of the most pressing technical
challenges in Ethereum.
## Why EPF?
Ethereum’s core protocol development is a highly specialized and rapidly evolving field. EPF helps onboard
and support the next generation of protocol contributors by providing:
- **Access to core development community** – Work alongside Ethereum’s top researchers and engineers.
- **Real-world experience** – Contribute to open issues in Ethereum’s execution and consensus layers.
- **Choose your project** – No fixed curriculum, just deep technical engagement.
- **Permissionless participation** – The door is wide open.
- **Funding support** – Some fellows receive stipends to focus on the program.
## Past Cohorts & Resources
Each EPF cohort has produced meaningful contributions to Ethereum’s roadmap. You can explore past work and
discussions here:
- [EPF5 GitHub Repository](https://github.com/eth-protocol-fellows/cohort-five)
- [EPF4 GitHub Repository](https://github.com/eth-protocol-fellows/cohort-four)
- [EPF3 GitHub Repository](https://github.com/eth-protocol-fellows/cohort-three)
- [CDAP1 GitHub Repository](https://github.com/eth-protocol-fellows/cohort-one)
- [CDAP0 GitHub Repository](https://github.com/eth-protocol-fellows/cohort-zero)
## How to Get Involved
The best way to get involved is to start contributing to Ethereum’s protocol discussions and codebase. Follow these steps:
1. **Join the Ethereum R&D Discord** – Engage with the community and ask questions. [Discord Invite](https://discord.gg/ethereum)
2. **Follow Ethereum Improvement Proposals (EIPs)** – Read and discuss active proposals on [EthMagicians](https://ethereum-magicians.org/) and [ethresear.ch](https://ethresear.ch/).
3. **Explore good first issues** – Make your first contributions via [Good First Issues](https://gfi.bordel.wtf).
4. **Apply for the next EPF cohort** – Keep an eye out for announcements on the [Ethereum Foundation Blog](https://blog.ethereum.org).
EPF isn’t just about writing code—it’s about becoming a core part of Ethereum’s long-term development. If you’re passionate about advancing Ethereum’s protocol, this is the best way to get started.
================================================
FILE: docs/eps/archive.md
================================================
- **Introduction**
- [Prepare for studies](/eps/week0.md)
- [Protocol intro and overview](/eps/week1.md)
- [CL intro](/eps/week3.md)
- [EL intro](/eps/week2.md)
- [Using clients](/eps/nodes_workshop.md)
- [CL/EL specs](/eps/week6-dev.md)
- [Testing and security](/eps/week4.md)
- [Local prototyping](/eps/week9-dev.md)
- [Research overview](/eps/week5.md)
- **Consensus Layer**
- [Gasper](/eps/day16.md)
- [CL client architecture](/eps/week8-dev.md)
- [CL Data structures](/eps/day22.md)
- [libp2p](/eps/day19.md)
- [Validator Client](/eps/day20.md)
- **Execution Layer**
- [EL client architecture](/eps/week7-dev.md)
- [EVM](/eps/day17.md)
- [EL Data](/eps/day23.md)
- [devp2p](/eps/day18.md)
- [Engine API](/eps/day21.md)
- [EL precompiles](/eps/week10-dev.md)
- **Research**
- [Upcoming upgrades](/eps/day24.md)
- [Sharding and DAS](/eps/week6-research.md)
- [Verkle trees](/eps/week7-research.md)
- [MEV and censorship](/eps/week8-research.md)
- [Purge and Portal Network](/eps/week9-research.md)
- [SSF and PoS Upgrades](/eps/week10-research.md)
The study group was originally run as a 10-week study program with 16 sessions in total. The original sessions are divided into 3 areas, each covering one part of the Ethereum protocol curriculum.
Watch each lecture sequentially, study supplied materials and exercises. We recommend making notes and in case of any extra information, explanation needed, come to ask to Office Hours or a discord channel.
## Schedule
Each session is created by a core developer or researcher, comes with reading materials to get you familiar with the topic context and some also include exercises to strengthen and practice your understanding. More resources on each topic can be found in the wiki section and if they are any missing, contribute to add them.
During first 2 weeks, participants watch previous videos and study existing materials for the given day in their own time. Every day at _3PM UTC we will hold a daily office hours running for 2 hours_ where everyone can discuss their learnings, ask questions, exchange knowledge, etc. Join at the [Office Hours call link](https://meet.ethereum.org/eps-office-hours).
#### Protocol introduction
The first part of the Study Group is an introduction to the protocol, overview of its parts and development process.
| Topic | Speaker |
| --------------------------------------------------- | -------------------------------------------------------------------------------------- |
| [Intro to EPS and Ethereum protocol](/eps/week1.md) | [Mario Havel](https://github.com/taxmeifyoucan) |
| [Consensus layer intro](/eps/week3.md) | [Alex Stokes](https://github.com/ralexstokes) |
| [Execution layer intro](/eps/week2.md) | [Lightclient](https://github.com/lightclient) |
| [Using clients, nodes](/eps/nodes_workshop.md) | [Mario](https://github.com/taxmeifyoucan) |
| [Consensus and Execution specs](/eps/week6-dev.md) | [Hsiao-Wei Wang](https://github.com/hwwhww), [Sam Wilson](https://github.com/SamWilsn) |
| [Testing and security](/eps/week4.md) | [Mario Vega](https://github.com/marioevz) |
| [Local prototyping](/eps/week9-dev.md) | [Parithosh](https://github.com/parithosh) |
| [Roadmap and research overview](/eps/week5.md) | [Domothy](https://github.com/domothyb) |
#### Consensus layer
The consensus layer track covers all parts of the CL, including overview of the proof-of-stake implementation, networking and data.
| Topic | Speaker |
| -------------------------------------------------- | ----------------------------------------------- |
| [Gasper](/eps/day16.md) | [Ben Edgington](https://github.com/benjaminion) |
| [Consensus client architecture](/eps/week8-dev.md) | [Paul Harris](https://github.com/rolfyone) |
| [CL Data structures](/eps/day22.md) | [Michael](https://github.com/michaelsproul/) |
| [libp2p](/eps/day19.md) | [DappLion](https://github.com/dapplion) |
| [Validator Client](/eps/day20.md) | [James](https://github.com/james-prysm) |
### Execution layer
Every part of the execution layer, the original Ethereum itself.
| Topic | Speaker |
| -------------------------------------------------- | ------------------------------------------------------------------------- |
| [Execution client architecture](/eps/week7-dev.md) | [Dragan Pilipovic](https://github.com/dragan2234) |
| [EVM](/eps/day17.md) | [Pawel Bylica](https://github.com/chfast) |
| [EL Data](/eps/day23.md) | [Gary](https://github.com/garyschulte), [Karim](https://github.com/matkt) |
| [devp2p](/eps/day18.md) | [Felix Lange](https://github.com/fjl) |
| [Engine API](/eps/day21.md) | [Mikhail](https://github.com/mkalinin) |
| [EL precompiles](/eps/week10-dev.md) | [Danno Ferrin](https://github.com/shemnon) |
### Research
The research track provides a technical explanation of active area of research, covering major important items from most [Ethereum roadmap](https://epf.wiki/#/wiki/research/roadmap) tracks.
| Topic | Speaker |
| -------------------------------------------------- | -------------------------------------------------- |
| [Upcoming upgrades overview](/eps/day24.md) | [Marius](https://github.com/MariusVanDerWijden) |
| [Sharding and DAS](/eps/week6-research.md) | [Dankrad Feist](https://github.com/dankrad) |
| [Verkle trees](/eps/week7-research.md) | [Josh Rudolf](https://github.com/jrudolf) |
| [MEV and censorship](/eps/week8-research.md) | [Barnabe Monnot](https://github.com/barnabemonnot) |
| [Purge and Portal Network](/eps/week9-research.md) | [Piper Merriam](https://github.com/pipermerriam) |
| [SSF and PoS Upgrades](/eps/week10-research.md) | [Francesco D'Amato](https://github.com/fradamt) |
### Streams and recordings
Talks and calls are announced week in advance based on the schedule above. Recordings of all talks can be found on [Youtube](https://www.youtube.com/@ethprotocolfellows) or [StreamEth](https://streameth.org/archive?organization=ethereum_protocol_fellowship) archive.
Apart from weekly lectures, there are less regular, ad-hoc hangout calls for informal chats and calls for wiki contributors working the content. Join the Discord group to get notified about all of these events.
================================================
FILE: docs/eps/day16.md
================================================
# Study Group Lecture 16 | Consensus and Gasper
The introductory part of the study group is now over and we are now starting the deeper dive with live sessions from core developers.
For the first session of this week, we are diving into the consensus mechanism of Ethereum with [Ben Edgington](https://x.com/benjaminion_xyz). Ben is a seasoned core contributor who worked on Teku consensus client, Optimism and is author of Eth2 Book, the annotated specification.
Watch the presentation recording by [Ben Edgington](https://x.com/benjaminion_xyz) on Youtube. Slides are [available here](https://docs.google.com/presentation/d/1mSn8JUfY88HvcCauLBkKRuy3f6YFlV9VcJptav0Ef24/edit#slide=id.p).
<iframe width="560" height="315" src="https://www.youtube.com/embed/cOivWPEBEMo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the Day 16 content, make yourself familiar with resources in previous weeks, especially day 2 on CL and day 6 on specs (at least the CL part). You should have general understanding of Beacon Chain and different mechanism in Ethereum consensus layer.
Additionally, you can get ready by studying the following resources.
- Vitalik's [Beacon Chain Fork Choice](https://github.com/ethereum/annotated-spec/blob/master/phase0/fork-choice.md) - outdated, but still excellent
- [Consensus chapter](https://eth2book.info/latest/part2/consensus/) in the Upgrading Ethereum book
- [Annotated spec on fork choice](https://eth2book.info/latest/part3/forkchoice/phase0/)
## Outline
- Introduction to Fork Choice
- LMD GHOST
- Casper FFG
- Gasper
- Q&A
## Additional reading and exercises
- Original Casper FFG paper: [Casper the Friendly Finality Gadget](https://arxiv.org/abs/1710.09437)
- Gasper: [Combining GHOST and Casper (Gasper paper)](https://arxiv.org/abs/2003.03052)
- [The blue eyes puzzle](https://xkcd.com/blue_eyes.html) - think hard! Don't give in and look up the solution too soon.
================================================
FILE: docs/eps/day17.md
================================================
# Study Group Lecture 17 | EVM
The introductory part of the study group is now over and we are now starting the deeper dive with live sessions from core developers.
The second session of this week is diving into Ethereum Virtual Machine (EVM) with a lecture by [<name>Paweł</name> Bylica](https://github.com/chfast) from Ipsilon team.
Watch the lecture recording on [Youtube](https://www.youtube.com/watch?v=gYnx_YQS8cM). [Slides](https://github.com/eth-protocol-fellows/protocol-studies/blob/main/docs/eps/presentations/day17_evm.pdf).
<iframe width="560" height="315" src="https://www.youtube.com/embed/gYnx_YQS8cM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the Day 17 content, make yourself familiar with resources in previous weeks, especially day 3 on EL and day 12 on EL client. You should have general understanding of what is EVM and different parts of execution layer.
Some familiarity with virtual machines, assemblers or interpreters may be handy, but is not required.
Additionally, you can get ready by browsing the following concepts related to Ethereum execution:
- [Transactions](https://ethereum.org/yo/developers/docs/transactions/)
- [Accounts](https://ethereum.org/yo/developers/docs/accounts/)
- [Ethereum Virtual Machine](https://ethereum.org/yo/developers/docs/evm/)
- [Interactive EVM opcodes](https://www.evm.codes)
## Outline
- Ethereum State Transition
- Process Virtual Machines
- Ethereum Virtual Machine
- Internal calls
- Gas metering
- Introduction to EVM Object Format (EOF)
- Control Flow in EVM
## Additional reading and exercises
- [EOF - History and motivation by Danno Ferrin](https://www.youtube.com/watch?v=X2mlptWzphc)
- [History and Future of EVM Jumps](https://www.youtube.com/watch?v=8Cp8IsmIJl4)
================================================
FILE: docs/eps/day18.md
================================================
# Study Group Lecture 18 | EL Networking, Devp2p
The introductory part of the study group is now over and we are now starting the deeper dive with live sessions from core developers. The second week of the main phase of the study group is dedicated to networking.
The first live session this week is dedicated to execution layer networking stack, diving into devp2p. [Felix Lange](https://github.com/fjl) is a long term core developer from go-ethereum team and the maintainer of devp2p specification.
https://www.youtube.com/watch?v=kYJ7Rj0OGv4
Watch the lecture on [Youtube](https://www.youtube.com/watch?v=44-ddRK2aBc) and follow the [Devp2p spec](https://github.com/ethereum/devp2p) as demonstrated in the lecture
<iframe width="560" height="315" src="https://www.youtube.com/embed/44-ddRK2aBc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the Day 18 content, make yourself familiar with resources in previous weeks, especially day 3 on EL and day 7 on EL client. You should have general understanding of the execution layer and basic overview of its networking capabilities.
Additionally, you can get ready by studying the following resources.
- [Devp2p spec](https://github.com/ethereum/devp2p)
## Outline
- EL networking
- devp2p specs
- ENR
- Discv5
- Subprotocols
## Additional reading and exercises
- [Demo of devp2p Wireshark Dissector](https://www.youtube.com/watch?v=AhE4KbV-f1w)
- [devp2p development update by Felix Lange (Devcon4)](https://www.youtube.com/watch?v=N2VTqUZRxjY)
- [Hive devp2p test simulator](https://github.com/ethereum/hive/tree/master/simulators/devp2p)
================================================
FILE: docs/eps/day19.md
================================================
# Study Group Lecture 19 | CL Networking, libp2p
The introductory part of the study group is now over and we are now starting the deeper dive with live sessions from core developers. The second week of the main phase of the study group is dedicated to networking.
The second live session the week is focused on consensus layer networking which is based on libp2p. The lecture is given by [DappLion](https://github.com/dapplion), a seasoned consensus layer contributor, part SigP Lighthouse team, previously lead of Lodestar client, his main focus is currently PeerDAS.
Watch the lecture on [Youtube](https://www.youtube.com/watch?v=kYJ7Rj0OGv4) and follow the [libp2p spec](https://github.com/libp2p/specs) as shown in the talk
<iframe width="560" height="315" src="https://www.youtube.com/embed/kYJ7Rj0OGv4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the Day 19 content, make yourself familiar with resources in previous weeks, especially day 2 on CL and day 16 on consensus mechanism. You should have general understanding of Beacon Chain, its networking features and different mechanism in Ethereum consensus layer.
Additionally, you can get ready by studying the following resources.
- [Introduction to libp2p - David Dias](https://www.youtube.com/watch?v=CRe_oDtfRLw)
- libp2p [docs](https://docs.libp2p.io/) and [specs](https://github.com/libp2p/specs)
## Outline
- CL networking protocol
- libp2p
- <name>Yamux</name>
- Noise
- GossipSub
## Additional reading and exercises
- [Demystifying libp2p Gossipsub: A Scalable and Extensible p2p Gossip Protocol by <name>Raúl Kripalani</name>](https://www.youtube.com/watch?v=BUc4xta7Mfk)
- [libp2p in Ethereum from block diffusion to PeerDAS and FullDAS - <name>Csaba Kiraly</name>](https://www.youtube.com/watch?v=sI_Qr1vHUk4)
================================================
FILE: docs/eps/day20.md
================================================
# Study Group Lecture 20 | Validator client
The introductory part of the study group is now over and we are now starting the deeper dive with live sessions from core developers.
This lecture is focused on the validator client implementation in the consensus layer. The talk is given by [James](https://github.com/james-prysm), developer from Prysm, go implementation of Beacon Chain.
[Slides](https://github.com/eth-protocol-fellows/protocol-studies/blob/main/docs/eps/presentations/day20_validator.pdf).
Watch the lecture on [Youtube](https://www.youtube.com/watch?v=rgrNMbYrOmM) and follow the [slides](https://github.com/eth-protocol-fellows/protocol-studies/blob/main/docs/eps/presentations/day20_validator.pdf) and code examples from Prysm.
<iframe width="560" height="315" src="https://www.youtube.com/embed/rgrNMbYrOmM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the Day 20 content, make yourself familiar with resources in previous weeks, especially day 2 on CL, day 6 on specs (at least the CL part) and day 16 on the consensus mechanism. You should have general understanding of Beacon Chain, different mechanism in Ethereum consensus layer and validator duties.
Additionally, you can get ready by studying the following resources.
- [Annotated spec on validator incentives](https://eth2book.info/capella/part2/incentives/)
- [The evolution of Prysm with Preston Van Loon](https://www.youtube.com/watch?v=Lvlit-nIRfM)
- [Key manager APIs](https://ethereum.github.io/keymanager-APIs/)
- [Remote Signer API](https://github.com/ethereum/remote-signing-api)
- [Validator Lifecycle](https://docs.prylabs.network/docs/how-prysm-works/validator-lifecycle)
## Outline
- Validator Client
- Validator Service Initialization
- Keystore Management
- Performing Validator Duties
## Additional reading and exercises
- Run a node with a validator client on Hoodi or Ephemery, follow logs to see its behavior and functions
- [Spin up your own Ethereum validator on testnet | Devcon Bogotá](https://www.youtube.com/watch?v=dWCck2IniNc)
- Test your validator client out on local devnet through https://github.com/ethpandaops/ethereum-package
================================================
FILE: docs/eps/day21.md
================================================
# Study Group Lecture 21 | Engine API
This lecture dives into Engine API, the connection between consensus and execution layer. The lecture is given by [Mikhail](https://github.com/mkalinin).
Watch the lecture on [Youtube](https://www.youtube.com/watch?v=rgrNMbYrOmM). [Slides are available](https://docs.google.com/presentation/d/1L2OW2_jeu7xxogFb1BjbXJZgxBzbqImU7lhLwz50o8o/edit?usp=sharing).
<iframe width="560" height="315" src="https://www.youtube.com/embed/fR7LBXAMH7g" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the Day 21 content, make yourself familiar with resources in previous weeks, especially day 2 on CL, day 3 on EL and node workshop. You should have general understanding of roles of Beacon Chain and execution layer, how they interact to create an Ethereum node and build blocks.
Additionally, you can get ready by studying the following resources.
- [Engine API: Visual Guide](https://hackmd.io/@danielrachi/engine_api)
## Outline
- Engine API design space and history
- EL client behavior when importing blocks
## Additional reading and exercises
- [Paris spec section on Engine API](https://github.com/ethereum/execution-apis/blob/main/src/engine/paris.md#routines)
================================================
FILE: docs/eps/day22.md
================================================
# Study Group Lecture 22 | CL Data Structures
This lecture dives into data structures of the consensus layer, how Beacon state, blobs and other data is stored. The lecture is given by [Michael](https://github.com/michaelsproul/) from Lighthouse team.
Watch the lecture on [Youtube](https://youtu.be/1CWqDDZauoU). [Slides are available](https://docs.google.com/presentation/d/1pp5AQ4DXmIXZ20JrI3eI9S3RyKckfhgPYqglmFXqobo/edit?usp=sharing).
<iframe width="560" height="315" src="https://www.youtube.com/embed/1CWqDDZauoU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the Day 22 content, make yourself familiar with resources in previous weeks, especially day 2 on CL and day 16 on Gasper. You should have general understanding of Beacon Chain, its features and different mechanism in Ethereum consensus layer.
Additionally, you can get ready by studying the following resources.
- [Lighthouse tree-states ELI5 part 1](https://blog.sigmaprime.io/tree-states-part1.html)
- [SSZ](https://epf.wiki/#/wiki/CL/SSZ)
## Outline
- Beacon State
## Additional reading and exercises
- [Lighthouse Consensus Client architecture](https://www.youtube.com/watch?v=pLHhTh_vGZ0)
================================================
FILE: docs/eps/day23.md
================================================
# Study Group Lecture 23 | EL Data Structures
This lecture dives into data structures of the Execution layer, the Merkle Patricia Tree and how different clients implement it. The lecture is given by [Gary](https://github.com/garyschulte) and [<name>Karim</name>](https://github.com/matkt) from Besu team.
Watch the lecture on [Youtube](https://youtu.be/EY_pVZTXS1w). [Slides are available here](https://docs.google.com/presentation/d/1YJbrZpgxjTHy7QlgXFRG5OjSK-G5uPrExBPu3Hiefvk/edit?usp=sharing).
<iframe width="560" height="315" src="https://www.youtube.com/embed/EY_pVZTXS1w" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the Day 23 content, make yourself familiar with resources in previous weeks, especially day 3 on EL and day 7 on EL client architecture.
Additionally, you can get ready by studying the following resources.
- [<name>Merkling</name> in Ethereum](https://blog.ethereum.org/2015/11/15/merkling-in-ethereum)
- [MPT on ethereum.org ](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/)
- https://en.wikipedia.org/wiki/Trie#Patricia_trees
## Outline
1. Overview of Ethereum State
2. Merkle Patricia Trie (MPT)
- The structure and the concept of a trie-within-a-trie account storage
- What is the state root and what purpose does it serve
- Challenges with the state size and performance over time
3. Evolution of State Solutions: From Hash Based to Path Based
- Describe the forest model
- The size and performance constraints
- Bonsai
- path based trie
- flat database
- Other storage models
- half-path, nethermind
- erigon/reth flat db model
- bonsai archive
## Additional reading and exercises
- [Bonsai Trees guide](https://consensys.io/blog/bonsai-tries-guide)
- [Nethermind half-path](https://github.com/NethermindEth/nethermind/pull/6331)
- [Nethermind paprika](https://github.com/NethermindEth/Paprika/blob/main/docs/design.md)
- [Erigon schema](https://github.com/erigontech/erigon/blob/main/erigon-lib/kv/tables.go)
- [Implementing MPT](https://medium.com/coinmonks/implementing-merkle-tree-and-patricia-trie-b8badd6d9591)
- [Ethereum Data Structures paper](https://www.researchgate.net/publication/353863430_Ethereum_Data_Structures)
================================================
FILE: docs/eps/day24.md
================================================
# Study Group Lecture 24 | Upcoming upgrades
The last lecture of the Study Group is looking forward to the future, covering upcoming protocol hard forks. The lecture by [<name>Marius Van Der Wijden</name>](https://github.com/MariusVanDerWijden) will dive into EIPs in upcoming upgrades, Pectra and Fusaka.
Watch the lecture on [Youtube](https://youtu.be/QvZKdWZqL04do). [Slides are available here](https://docs.google.com/presentation/d/10wwANwKcdTLWwBu9NbTG6GtIEAoXQLqox6LIS03oHMo/edit?usp=sharing).
<iframe width="560" height="315" src="https://www.youtube.com/embed/QvZKdWZqL04do" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the Day 23 content, make yourself familiar with resources in previous weeks, especially day 5 on Roadmap.
- https://ethereum.org/en/roadmap/pectra/
- https://epf.wiki/#/wiki/pectra-faq
## Outline
- EIPs in Pectra
- EIPs considered for Fusaka
## Additional reading and exercises
- https://github.com/ethereum/pm/tree/master/Pectra
- https://github.com/ethereum/pm/tree/master/Fusaka
- [PeerDAS in Pectra and beyond](https://www.youtube.com/watch?v=WOdpO1tH_Us)
================================================
FILE: docs/eps/intro.md
================================================
# Ethereum Protocol Studies
[Ethereum Protocol Studies group (EPS)](https://blog.ethereum.org/2025/02/05/ethereum-protocol-studies) is a community formed to gather knowledge, learn, and educate the public about the Ethereum protocol.
The protocol evolves and grows quickly, it's an always-changing infinite garden. To sustain its credible neutrality, this pace should be reflected in growing and educating the core community. Everyone using, building or living on Ethereum should be able to learn and become involved in the core protocol. The complexity of the architecture, codebases and dynamic development paired with scattered resources can discourage many talented people from participating.
Originally started in 2024, the study group is a participatory educational program that aims to improve core protocol education by introducing a curriculum focused on all parts of the Ethereum stack, building a wiki knowledge base and creating a community focused on learning about the protocol.
> The Study Group is active for 2 months starting February 23rd 2026, meeting live and creating new content. Join our [community chat](https://discord.gg/8RPnPGEQtJ) and start your studies journey

## Learn and participate
The study group content is structured into 3 modules. Introduction with high level overview of the protocol, development process and research. Then it dives deeper into each part of the protocol in consensus and execution layer.
### Study Group Curriculum
**The study group curriculum is available at https://study.epf.wiki**
This is a learning platform that contains interactive sessions, exercises, quizzes and more resources to get you started learning about the protocol in depth.
The original study group content that was present here is still available under [archive.md].
### New Study Group Content in 2026
This year, we will be hosting 2 new modules - the cryptography of Ethereum and zkEVM/Lean Ethereum.
#### Cryptography
| Date | Session | Teacher |
|------------|----------------------------|---------|
| 2026-03-09 | Finite Groups & Fields | <name>Matan Prasma</name> |
| 2026-03-16 | Discrete Fourier Transform | <name>Matan Prasma</name> |
| 2026-03-23 | Elliptic Curves & Pairings | <name>Matan Prasma</name> |
| 2026-03-30 | BLS Signatures | <name>Matan Prasma</name> |
| 2026-04-07 | Proof Systems | <name>Matan Prasma</name> |
---
#### zkEVM/Lean Ethereum
| Date | Session | Teacher |
|------------|----------------------------|---------|
| 2026-03-11 | Lean Consensus Overview | Emile |
| 2026-03-24 | Lean Client Architecture | <name>Kolby</name> |
| 2026-03-25 | zkEVM Fundamentals | <name>Cody Gunton</name> & <name>Ignacio Hagiopan</name> |
| 2026-04-01 | leanSpec and tooling | O |
| 2026-04-09 | Post-Quantum Cryptography | Justin Drake |
### Program structure
The study group is an open and permissionless, and it is up to each participant as to how they want to approach it. Whether you want to learn as much as possible, focus only on certain topics or share your knowledge with others, you are welcomed.
> Join our community in [Discord server](https://discord.gg/8RPnPGEQtJ). We use it for the easiest community engagement but we are aware that Discord is proprietary and doesn't respect user privacy. Consider using alternative FOSS clients like [Dissent](https://github.com/diamondburned/dissent) or [WebCord](https://github.com/SpacingBat3/WebCord). For enhancing the regular client, check [BetterDiscord](https://github.com/BetterDiscord/BetterDiscord/) project.
Study group participants collaboratively develop the [Protocol wiki](/wiki/wiki-intro.md), serving as an evolving knowledge base for current and future core developers. This can provide students with practical experience in contributing to open source resources, while gaining invaluable experience in documentation and community-driven development.
While this program is designed to act as a precursor to the Ethereum Protocol Fellowship, the study group is for anyone that is interested in learning more about the inner workings of the Ethereum Protocol. Those that have some general knowledge or use of Ethereum and/or blockchains as well as those that have some computer science, technical, or developer experience will get the most from this program.
## Important links
- [Office Hours call link](https://meet.ethereum.org/eps-office-hours)
- [Discord server](https://discord.gg/8RPnPGEQtJ)
- [Weekly talks on StreamEth](https://streameth.org/65cf97e702e803dbd57d823f/epf_study_group)
- [Youtube](https://www.youtube.com/@ethprotocolfellows)
- [Sessions calendar](https://calendar.google.com/calendar/u/0?cid=Y18xY2RhMjMxNzc5NmI4NDgzZTliMjBhMGVjZTFkMDFhZWFkN2U1ZTY3N2IxNjVhOGUzZTJlMjQ3ZTQ0M2UwODhkQGdyb3VwLmNhbGVuZGFyLmdvb2dsZS5jb20)
- [EPF mailing list](https://groups.google.com/a/ethereum.org/g/protocol-fellowship-group)
- [EF Blog](https://blog.ethereum.org)
## Calls troubleshooting
For our weekly meetings, we are using a self-hosted FOSS platform Jitsi. Even though we are doing our best, some people might experience problems during these calls, here are a few tips on troubleshooting:
- Restart your browser and rejoin
- Try a different browser (especially if you are using a Chromium based, try Firefox and vice versa)
- Use the [mobile Jitsi app](https://jitsi.org/downloads/) instead of desktop (you just need to point it to our domain meet.ethereum.org)
- Check your network and firewall settings, make sure your browser allows WebRTC
- Visit Jitsi [community forum](https://community.jitsi.org/) to search for specific issue or report your problem
## FAQ
- **Will I learn to develop applications on the Ethereum blockchain?**
- No. This program is not focused on Solidity or development of decentralized applications.
- **When does it start and is the duration?**
- The program runs from February 17 and continues for 8 weeks, concluding in April.
- **Am I automatically accepted to EPF after attending EPFsg**
- No. The study group is a great way to prepare for EPF, but it doesn't guarantee anything. However, EPF is a permissionless program, so you can always participate.
- **Where is the study group located?**
- As all core Ethereum teams, EPFsg is distributed around the globe. We will do our best to accommodate call times for the program participants.
- **Do I need to apply and be accepted?**
- The program is fully open, anyone can participate. We only ask you to submit a [form](https://forms.gle/G5V95qyGV8uMjKGcA) survey to let us know about your preferences, but it doesn't have any effect on your participation.
================================================
FILE: docs/eps/nodes_workshop.md
================================================
# Study Group Lecture | Using Ethereum clients
During Day 3, apart of [the regular presentation](https://epf.wiki/#/eps/week3), [Mario](https://twitter.com/TMIYChao) prepared a workshop to give you a hands-on experience of using Ethereum clients. We will learn how to spin up an Ethereum node by running execution and consensus client.
You can [join us for the live workshop](https://meet.ethereum.org/eps-office-hours) on Wednesday after regular Office Hours at 3PM UTC or watch the recording of the workshop from last year.
[recording](https://www.youtube.com/embed/KxXowOZ2DLs?si=yLpNoczrUmxj4kE4 ':include :type=iframe width=100% height=560 frameborder="0" allow="fullscreen" allowfullscreen encrypted-media gyroscope picture-in-picture web-share')
Make sure to prepare your environment and learn basics necessary to understand the process:
## Prerequisites
Get yourself familiar with Ethereum client architecture as described in Day 1 and you can check Day 2 and 3 for even better understanding of what workshop executes. The workshop will default to geth+lighthouse but if you have other preferred client to try, make yourself familiar with its documentation.
- https://ethereum.org/en/developers/docs/nodes-and-clients/node-architecture/
- https://ethereum.org/en/developers/docs/nodes-and-clients/run-a-node/
- Client documentation of your preferred client pair
- Basic bash/cli shell skills
- https://btholt.github.io/complete-intro-to-linux-and-the-cli/, https://ubuntu.com/tutorials/command-line-for-beginners
- Make yourself familiar with [Ephemery testnet](https://ephemery.dev)
### Prepare your environment
To follow the workshop, make sure to prepare your environment.
- Update the system and install dependencies so it doesn't block you during the workshop.
- Install basic utils we will need like curl, git, gpg, docker
- Install compilers for languages of clients you'd like to try to compile (we default to using prebuilt binaries)
- The workshop environment will be a fresh Debian 12 instance but you can use any preferred distro, Mac or WSL. Process might be very similar on other unix based systems and you can always setup a VM to replicate the same environment.
We will only run a client on testnet so the hardware requirements are minimal - the goal of the workshop is not to sync the tip of the chain but only demonstrate how the node works. Default client pair will be geth+lighthouse but if there is enough time we can demonstrate switching the pair.
## Outline
- Introduction to running nodes
- Choosing a client pair and environment
- Obtaining clients
- Downloading and verifying binary
- Compiling a client?
- Docker setup?
- Client pair setup
- Run EL+CL client on Holesky
- Running on Ephemery using custom genesis
- Switching CL or EL client
- Nimbus?
- Erigon?
- Using the client
- Accessing the RPC
- http, console, wallet
- Adding validators
- Additional exercise if there is time
- Systemd service
- Monitoring node
- Join the [Office Hours call](https://meet.ethereum.org/eps-office-hours) to follow the workshop, ask questions and get help with troubleshooting.
## Additional reading and exercises
There are bunch of things we are not going to demonstrate during the workshop so you can try them yourself afterwards.
- Setup monitoring with Grafana dashboard which shows detailed information on various client parameters and functions
- Enable higher logs verbosity, read client debug logs to learn about its low level processes
- Connect to your node using a wallet, development tooling, web3.py or JS console
- Connect your node to the [crawler](https://www.ethernets.io/help/) and check what details it learns about it, discover new peers
- https://github.com/eth-educators/ethstaker-guides/blob/main/docs/holesky-node.md
- https://notes.ethereum.org/@launchpad/node-faq-merge
- https://www.coincashew.com/coins/overview-eth/guide-or-how-to-setup-a-validator-on-eth2-mainnet/part-i-installation/monitoring-your-validator-with-grafana-and-prometheus
================================================
FILE: docs/eps/presentations/week2_notes.md
================================================
# Week 2 Lecture
## Overview
### Block Validation
go
func stf(parent types.Block, block types.Block, state state.StateDB) (state.StateDB, error) {
if err := core.VerifyHeaders(parent, block); err != nil {
// header error detected
return nil, err
}
for , tx := range block.Transactions() {
res, err := vm.Run(block.Header(), tx, state)
if err != nil {
// transaction invalid, block is invalid
return nil, err
}
state = res
}
return state, nil
}
func newPayload(execPayload engine.ExecutionPayload) bool {
if , err := stf(..); err != nil {
return false
}
return true
}
https://github.com/ethereum/go-ethereum/blob/63aaac81007ad46b208570c17cae78b7f60931d4/consensus/beacon/consensus.go#L229C23-L229C35
### Block Building
go
func build(env Environment, pool txpool.Pool, state state.StateDB) (types.Block, state.StateDB, error) {
var (
gasUsed = 0
txs []types.Transactions
)
for ; gasUsed < env.GasLimit || !pool.Empty(); {
tx := pool.Pop()
res, gas, err := vm.Run(env, tx, state)
if err != nil {
// tx invalid
continue
}
gasUsed += gas
txs = append(txs, tx)
state = res
}
return core.Finalize(env, txs, state)
}
### State Transition Function
* walkthrough go-ethereum
### EVM
* arithmetic
* bitwise
* environment
* control flow
* stack ops
* push, pop, swap
* system
* call, create, return, sstore
* memory
* mload, mstore, mstore8
### p2p
* execution layer operates on devp2p
* devp2p => sub-capability eth/68, eth/69, snap, whisper, les, wit
* eth/1 -> eth/2 -> eth/6.1 -> eth/6.2
#### Responsibility
* historical data
* GetBlockHeader
* GetBlockBodies
* GetReceipts
* pending transactions
* Transactions
* NewPooledTransactionHashes
* GetPooledTransactions
* state
snap
R1 ->
/ \
x x
/ \ / \
a b c d
R200 ->
/ \
1 2
/ \ / \
r a c d
^^^ contiguous state retrieval
R200
a b c d
"healing phase"
* get R200 -> (1, 2)
* get 1 -> (r, a)
r a c d
* get 2 -> (c, d)
"healing done"
#### Start snap
* start weak subjectivity-checkpoint -> block hash
* get block associated with hash
* start snap against block's state
================================================
FILE: docs/eps/week0.md
================================================
# Study Group Week 0
Week 0 marks all the time before the program begins. Use this time to prepare yourself and get a head start.
First, please check out the [announcement blog post](https://blog.ethereum.org/2025/02/05/ethereum-protocol-studies) and fill the [initial survey](https://forms.gle/BVQZDYoV6siALtHs7).
## Town Hall
The call discussed the program details, schedule and answered your questions. Recording can be found at https://www.youtube.com/watch?v=7L1270CWjXw
[recording](https://www.youtube.com/embed/7L1270CWjXw?si=fVXN913ZOJytR8Rv ':include :type=iframe width=100% height=560 frameborder="0" allow="fullscreen" allowfullscreen encrypted-media gyroscope picture-in-picture web-share')
## Pre-reading
Before the program, you should be familiar with some general concepts from Ethereum and computer science. If you are not familiar with basics of using Ethereum or have non experience with software development, we recommend gaining at least some understanding of following:
- Cryptography
- Hashing
- Public key cryptography
- Data structures
- Merkle trees
- Networking, p2p and distributed systems
- Software development basics
- Programming languages, compilers
- Ethereum as a platform
- From a user perspective
- As a dapp developer
These are just general suggestions of domain knowledge you will need. More introductory learning resources can be found in [week 1](/eps/week1.md).
### Helpful resources to get you started
- [Intro to Cryptography](https://summerofprotocols.com/wp-content/uploads/2023/12/53-BEIKO-001-2023-12-13.pdf)
- [Introduction to Modern Cryptography](https://www.cs.umd.edu/~jkatz/imc.html)
- [Merkle trees](https://youtu.be/V6gLY-1G4Mc?si=W1ncsNYUSHjm5U4y), [in Bitcoin](https://www.youtube.com/watch?v=bBC-nXj3Ng4)
- [Networking & p2p](https://youtu.be/ie-qRQIQT4I?si=eYKzMbn7PGk-Il9M), [in Bittorrent](https://www.youtube.com/watch?v=xH00ikD1oDo)
================================================
FILE: docs/eps/week1.md
================================================
# Study Group Lecture 1 | Protocol Intro
The first day of the study group is dedicated to a general introduction to the protocol and R&D ecosystem.
## Recording
Watch **Ethereum Protocol 101** talk by Mario Havel [on StreamEth](https://streameth.org/watch?event=&session=65d77e4f437a5c85775fef9d). [Slides](https://github.com/eth-protocol-fellows/protocol-studies/tree/main/docs/eps/presentations/week1_protocol_intro.pdf)
[recording](https://streameth.org/embed/?playbackId=9bc1ekw2jk5sz6c7&vod=true&streamId=&playerName=Intro+to+Ethereum+%7C+Mario+Havel+%7C+Week+1 ':include :type=iframe width=100% height=520 frameborder="0" allow="fullscreen" allowfullscreen')
For archive of the discussion during the talk, check the corresponding thread in `#study-group` channel of [Discord server](https://discord.gg/epfsg).
## Pre-reading
This is an introductory talk which doesn't assume a lot of prior knowledge. Check some general requirements in [week 0](/eps/week0.md). Here are few more introductory materials to get you started:
- [Inevitable Ethereum - World Computer](https://inevitableeth.com/home/ethereum/world-computer)
- [Ethereum in 30 minutes](https://www.youtube.com/watch?v=UihMqcj-cqc)
- [Ethereum.org docs](https://ethereum.org/en/what-is-ethereum/)
Check out resources within the following text and additional reading. All resources will be explained in the week 1 presentation.
## Prehistory and Philosophy
To understand Ethereum design, we need to learn about predecessors and the culture it builds upon. The modern cryptocurrency ecosystem stands on decades of work by computer scientists, cryptographers and activists.
Starting all the way back in the 1960s, UNIX is an operating system and philosophy that redefined the entire paradigm of computation. This is the paradigm we have been using for over 50 years and has never really changed. Its fundamental concept of modularity is important to Ethereum design and open collaborative environment of Bell Labs is similar to Ethereum core development today.
> Check this documentary with Dennis Ritchie and Ken Thompson, which perfectly captures spirit and ideas behind UNIX: https://www.youtube.com/watch?v=tc4ROCJYbm0
The Free Software movement is fundamental to Ethereum and all cryptocurrencies. The open, independent and collaborative development culture of Ethereum is strongly rooted in FOSS (Free and Open Source Software). Ethereum needs to be transparently implemented in software that gives full freedom to its users. Using any FOSS can empower every user and developer, but it's necessary for security, neutrality and trustless nature of Ethereum.
> To understand its importance, watch this talk by Richard Stallman, the founder of Free Software and GNU project:
>
> - https://www.youtube.com/watch?v=Ag1AKIl_2GM
> - More reading: https://www.gnu.org/philosophy/free-sw.html, _The Cathedral and the Bazaar_ book: http://www.catb.org/~esr/writings/cathedral-bazaar/
The invention of [asymmetric cryptography](https://www-ee.stanford.edu/~hellman/publications/24.pdf) marks the birth of a new paradigm for cryptography applications. Later, the rise of cryptography in computation for general public enabled everyone to utilize tools for digital privacy, secure communication and fundamentally transformed cybersecurity. While nation states did not have a framework for these new concepts, [Crypto Wars](https://en.wikipedia.org/wiki/Crypto_Wars) resulted in activist movements advocating and building cryptography tools. Ultimately, these were people inventing tools and ideas which became fundamental building blocks of modern cryptocurrencies.
> Get inspiration from early Cypherpunks who envisioned an independent digital realm built on trustless and borderless technologies:
>
> - https://activism.net/cypherpunk/manifesto.html
> - https://activism.net/cypherpunk/crypto-anarchy.html
> - https://www.eff.org/cyberspace-independence
[Read more in the EPF wiki page on Prehistory of Ethereum.](https://epf.wiki/#/wiki/protocol/prehistory)
## Ethereum Protocol Design
The actual prehistory of the protocol, early ideas and inspiration for technical decisions in Ethereum are well documented in [V's blog](https://vitalik.eth.limo/general/2017/09/14/prehistory.html).
Originally outlined in its [Whitepaper](https://ethereum.org/whitepaper#ethereum-whitepaper), Ethereum draws inspiration from Bitcoin and its background (explained above) to create a general blockchain based computation platform. The design was technically specified in [Yellowpaper](https://ethereum.github.io/yellowpaper/paper.pdf) and evolved over time. Changes are tracked in the community process of [EIPs](https://eips.ethereum.org) and current specification is implemented in Python as:
- [Execution specs](https://github.com/ethereum/execution-specs)
- [Consensus specs](https://github.com/ethereum/consensus-specs)
The specification is purely technical and doesn't provide any context or explanation for the reader. For learning about the consensus, check the annotated version [by Ben](https://eth2book.info/capella/annotated-spec/) and [by V](https://github.com/ethereum/annotated-spec).
The protocol changes over time, with each network upgrade bringing new improvements. Despite its constant changes, the architecture evolution reflects certain fundamental principles. These can be summarized as follows:
- Simplicity, Universality, Modularity, Non-discrimination, Agility
These core tenets have always led the Ethereum development and should be considered with every decision on design change. In addition to this, it manages growing complexity by encapsulating it and/or sandwiching it. The current network architecture is the result of many iterations of [network upgrade history](https://ethereum.org/history).
> Read more about Ethereum design principles in [the archive](https://web.archive.org/web/20220815014507mp_/https://ethereumbuilders.gitbooks.io/guide/content/en/design_philosophy.html) and also in [this wiki](/wiki/protocol/design-rationale.md)
The Ethereum network leverages decentralization to become permissionless, credibly neutral, and censorship resistant. It continues evolving to address the latest research, news, and always-present challenges. To maintain security and decentralization, blockchain technology has certain limits, mainly its scalability. Because Ethereum needs to always adhere to its principles, it motivates us to find clever solutions for these problems rather than accepting trade-offs.
The current research and development is summarized by the [roadmap](https://twitter.com/VitalikButerin/status/1741190491578810445/photo/1) overview, however cannot be fully accurate. There is no single path for Ethereum R&D, the [roadmap](https://ethroadmap.com/) only sums up its current landscape. The core ecosystem is an always growing [infinite garden](https://ethereum.foundation/infinitegarden). However, with more and more progress, Ethereum might slowly approach its ossification.
> Simplified overview of the current Ethereum design can be found documentation on [node architecture](https://ethereum.org/developers/docs/nodes-and-clients/node-architecture) and in the week 1 presentation
As hinted above, the main high level components of Ethereum are execution and consensus layer. These are 2 networks which are connected and dependent on each other. Execution layer provides the execution engine, handles user transaction and all state (address, contract data) while consensus implements the proof-of-stake mechanism ensuring security and [fault tolerance](https://inevitableeth.com/home/concepts/bft).
## Implementations and Development
Everything mentioned above - the ideas, design and specifications comes down to the actual application here, in its implementation. An implementation of the execution layer (EL) or consensus layer (CL) is called a _client_. A computer running this client and connecting to the network is called a _node_. A node is therefore a pair of EL and CL clients actively participating in the network.
Since Ethereum is formally specified, it can be implemented in different ways in any language. This results in a variety of implementations throughout the years with some already deprecated and some just being developed. The current list of production ready implementations can be found in the [docs on Nodes and clients](https://ethereum.org/en/developers/docs/nodes-and-clients#execution-clients) and week 1 presentation.
> This strategy is called [client diversity](https://ethereum.org/developers/docs/nodes-and-clients/client-diversity). Ethereum does not rely on a single 'official' implementation but users can choose any client and be sure it does the job. If an issue occurs within a single client implementation, it doesn't affect the rest of the network.
### Testing
With regular changes and multiple client implementations, testing is fundamental to the network security. There are a variety of testing tools and scenarios which are all heavily utilized before any network upgrade.
Tests are generated based on specifications and create various scenarios. Some are testing clients individually, some are simulating a testnet with all client pairs. There are different testing tools used for different parts of development cycles and parts of clients. This includes state transition testing, fuzzing, shadow forks, RPC tests, client unit tests and CI/CD, etc.
> Here is a short list of repositories dedicated to testing:
>
> - https://github.com/ethereum/tests
> - https://github.com/ethereum/retesteth
> - https://github.com/ethereum/execution-spec-tests
> - https://github.com/ethereum/hive
> - https://github.com/kurtosis-tech/kurtosis
> - https://github.com/MariusVanDerWijden/FuzzyVM
> - https://github.com/lightclient/rpctestgen
### Coordination
The Ethereum development is very different to a traditional, corporate kind of, projects. First of all, it's all open and public, anybody can review it or contribute. And second, there are many different teams working on different parts. All together, there are around 20 different teams from various organizations working on Ethereum.
Unlike in proprietary tech, Ethereum developers are not competing but rather working together. With the complexity always growing, there are basically no people who would be experts in all of Ethereum. Instead, people develop expertise in specific domains and collaborate with others. This is possible thanks to the modularity of Ethereum and allows developers to focus on challenges they personally prefer.
> The traditional development cycle for new features or changes is `Idea - Research - Development - Testing - Adoption`. However, problems might arise at any moment of this cycle resulting in iterating again from the beginning.
To be able to ship network upgrades and agree on the current development focus, there needs to be a certain coordination. All of it is also public and can be followed by anyone interested in learning about the core protocol. The coordination mainly happens via regular calls which are scheduled in the [PM repo](https://github.com/ethereum/pm). There are different kinds of developer calls with the biggest one being All Core Devs (ACD). This is where representatives of all involved teams come to discuss the current development of the consensus or execution layer.
The ideas and proposed changes from the community are coordinated using [EIP process](https://eips.ethereum.org/EIPS/eip-1). Additionally, there are a few discussion forums. The biggest one discussing core upgrades is https://ethresear.ch. Another forum which is connected to the EIP process and serves for discussion about specific proposals is [Ethereum Magicians](https://ethereum-magicians.org/).
Lots of important discussion is also happening on the R&D Discord server (ping us in EPFsg discord to get an invite) and in client team groups. There are also offsites or workshops where many core developers meet in person to speed up the process face to face.
## Additional reading and exercises
To test your knowledge about the very basics of Ethereum, try a quiz:
https://ethereum.org/quizzes
Learn more about the roadmap:
https://ethereum.org/roadmap
To explore various parts of the Ethereum protocol, check out what people have been working on within EPF:
https://github.com/eth-protocol-fellows/cohort-three/tree/master/projects
https://github.com/eth-protocol-fellows/cohort-four/tree/master/projects
[Devcon archive](https://archive.devcon.org/archive/) is full of incredible talks diving into various technical and non-technical aspects of Ethereum.
A [retrospective document](https://notes.ethereum.org/@mikeneuder/rcr2vmsvftv) on recent roadmap by Alex and Mike comes with great insights into Ethereum development, values and goals.
Read more about history of Unix and Bell Labs:
https://www.theregister.com/2024/02/16/what_is_unix/
https://www.deusinmachina.net/p/history-of-unix
Few more books I recommend:
If you are interested in early days of Ethereum, the story of its founders and creation, check out book [The Infinite Machine](https://www.camirusso.com/book). Another similar one is [Out of the Ether](https://www.goodreads.com/book/show/55360267-out-of-the-ether). (ping me for epubs)
A very recent publication providing a comprehensive insight is [Absolute Essentials of Ethereum](https://www.routledge.com/Absolute-Essentials-of-Ethereum/Dylan-Ennis/p/book/9781032334189). It covers a [variety of topics](https://www.coindesk.com/consensus-magazine/2024/02/07/absolute-essentials-of-ethereum-by-paul-dylan-ennis-an-excerpt/) and I can strongly recommend it.
[Mastering Ethereum](https://github.com/ethereumbook/ethereumbook) is one of the great blockchain books by aantop covering everything from basics to technical details. It's few years old and already outdated but still can be a good inspiration.
================================================
FILE: docs/eps/week10-dev.md
================================================
# Study Group Day 10 | Precompiles
Day 10 dev talk is diving into EVM precompiles and their integration in execution clients.
Watch the presentation by [Danno Ferrin](https://twitter.com/shemnon), on [StreamEth](https://streameth.org/65cf97e702e803dbd57d823f/epf_study_group) and [Youtube](https://www.youtube.com/watch?v=daiMhkt0XTw)
- [Presentation from the talk.](https://hackmd.io/@shemnon/precompiles)
- [Discussion thread on Discord: Week 10D: Precompiles](https://discord.com/channels/1205546645496795137/1231990093506678785).
<iframe width="560" height="315" src="https://www.youtube.com/embed/daiMhkt0XTw?si=6c4EJRi-g1G5udJH" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the week 10 development content, make yourself familiar with resources in previous weeks, especially Day 2 on EL and Day 7 on EL client. You should have understanding of the execution client architecture and EVM.
The talk will use examples from Besu, a Java implementation of execution client. At least a basic understanding of Java syntax is recommended.
Additionally, you can get ready by studying the following resources:
- [Exploring Precompiled Contracts on Ethereum: A Deep Dive](https://lucasmartincalderon.medium.com/exploring-precompiled-contracts-on-ethereum-a-deep-dive-4e9f9682e0aa)
- [Precompiles documentation by evm.codes](https://www.evm.codes/precompiled)
## Outline
- EVM Precompiles
- How they are integrated
- Which precompiles exist
- How L2s and L1s use them
- Challenges of creating precompiles
## Additional reading and exercises
- [EVM Precompiled and System Contract Catalog](https://github.com/shemnon/precompiles/)
- [RollCall breakout on precompiles](https://www.youtube.com/watch?v=tg01COfxi_M)
- [Custom RPCs and Precompiles for Hyperledger Besu](https://www.youtube.com/watch?v=djL5nczlYFw)
================================================
FILE: docs/eps/week10-research.md
================================================
# Study Group Lecture 15 | The Ethereum fork-choice
Last talk of the original study group covers a variety of topics related to the fork-choice of Ethereum, its evolution and its role in future upgrades.
Watch the presentation by [Francesco](https://twitter.com/fradamt) on [StreamEth](https://streameth.org/65cf97e702e803dbd57d823f/epf_study_group) or [Youtube](https://www.youtube.com/watch?v=x-_2gAVFlw8). Presentation is [available here](https://github.com/eth-protocol-fellows/protocol-studies/blob/main/docs/eps/presentations/week10-research.pdf).
<iframe width="560" height="315" src="https://www.youtube.com/embed/x-_2gAVFlw8?si=xqMDpqrBabgiDYPb" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the Day 15 content, make yourself familiar with resources in previous weeks, especially day 2 on CL and day 5 on roadmap. You should have understanding of Beacon Chain and current consensus research topics.
Additionally, you can get ready by studying the following resources.
- All in one resource: [PoS evolution](https://github.com/ethereum/pos-evolution/blob/master/pos-evolution.md)
- Gasper: [Combining GHOST and Casper (Gasper paper)](https://arxiv.org/abs/2003.03052)
- Problems with Gasper:
- [Three attacks on PoS Ethereum](https://eprint.iacr.org/2021/1413)
- [View-merge](https://ethresear.ch/t/view-merge-as-a-replacement-for-proposer-boost/13739)
- Improving Gasper with Single Slot Finality:
- [Path towards Single Slot Finality](https://notes.ethereum.org/@vbuterin/single_slot_finality)
- [A simple single slot finality](https://ethresear.ch/t/a-simple-single-slot-finality-protocol/14920)
## Outline
- Gasper recap
- Problems with Gasper and fixes
- Single Slot Finality (SSF)
- How fork-choice affects other Ethereum upgrades: PeerDAS and ePBS case studies
## Additional reading and exercises
- [Notes on SSF, Lincoln Murr](https://publish.obsidian.md/single-slot-finality/Welcome+to+My+Research!)
- [Increase the MAX_EFFECTIVE_BALANCE – a modest proposal](https://ethresear.ch/t/increase-the-max-effective-balance-a-modest-proposal/15801)
- [Reorg resilience and security in post-SSF LMD-GHOST](https://ethresear.ch/t/reorg-resilience-and-security-in-post-ssf-lmd-ghost/14164/3)
================================================
FILE: docs/eps/week2.md
================================================
# Study Group Lecture 3 | Execution Layer
During the third day, we will dive into the Execution layer of Ethereum.
Watch the presentation diving into EL internals with Lightclient on [StreamEth](https://streameth.org/watch?event=&session=65dcdef0a6d370a1ab326de1) or [Youtube](https://www.youtube.com/watch?v=pniTkWo70OY).
The overview document created in the presentation is [available here](https://github.com/eth-protocol-fellows/protocol-studies/blob/main/docs/eps/presentations/week2_notes.md?plain=1).
[recording](https://streameth.org/embed/?playbackId=70f6rq6un48dy74q&vod=true&streamId=&playerName=Execution+Layer+Overview+%7C+lightclient+%7C+Week+2 ':include :type=iframe width=100% height=520 frameborder="0" allow="fullscreen" allowfullscreen')
For written summary of week 2 presentation, check the [notes](https://ab9jvcjkej.feishu.cn/docx/BRDdd8kP9o00a2x6F4scRo0fnJh)
For archive of the discussion during the talk, check [this thread](https://discord.com/channels/1205546645496795137/1210292746817110027/1210292751158222848) in our [Discord server](https://discord.gg/epfsg).
## Pre-reading
Before starting with week 2 content, make yourself familiar with resources in [week 1](/eps/week1.md).
Additionally, you should read through the following documents to prepare for the presentation:
* [Nodes and clients](https://ethereum.org/developers/docs/nodes-and-clients)
* [Ethereum: mechanics](https://cs251.stanford.edu/lectures/lecture7.pdf) (a lecture based on these slides is also available on YouTube: [An Overview of the Ethereum Execution Layer - Dan Boneh](https://www.youtube.com/watch?v=7sxBjSfmROc))
## Outline
### Overview of the execution layer node
* Block validation
* in overly simplistic terms, ELs process the state transition
* each transaction is validated by the client, executed, and its result accumulated into the state trie
* there are additional mechanisms which also must be updated each block, such as the EIP-1559 base fee, the EIP-4844 excess blob gas, the EIP-4844 beacon root ring buffer, beacon chain withdrawals, etc.
* new nodes must also be able to join the network without too much friction, so ELs provide efficient syncing mechanism to bootstrap others
* Block building
* ELs also build blocks based on transactions they see around the network
* this requires a tx pool system over p2p
### State transition function
* header validation
* verify merkle roots
* verify gas limit
* verify timestamp
* block validation
* walkthrough [`Process(..)`](https://github.com/ethereum/go-ethereum/blob/master/core/state_processor.go#L60) in `state_processor.go`
### EVM high-level
* stack machine intro
* look at simple programs
* review different classes of opcodes: stack/mem manipulators, env getters, ethereum system operations, etc.
### p2p high-level
* p2p serves three main things
* historical data
* pending txs
* state
* discuss snap sync
* phase 1: downloading snap tiles
* phase 2: healing
### JSON-RPC
* the "interface" to ethereum
* the vision is that all clients provide the exact same API and users can run any client they choose and have perfect integration with all tooling
* not quite there, but we are fairly close
* review main RPC methods
## Additional reading and exercises
- https://www.evm.codes/
- https://ethervm.io/
- https://github.com/ethereum/go-ethereum
- https://github.com/ethereum/consensus-specs
- https://github.com/ethereum/execution-specs
- https://github.com/ethereum/devp2p
- https://github.com/ethereum/execution-apis
- https://blog.ethereum.org/2022/01/24/the-great-eth2-renaming
- https://blog.ethereum.org/2021/11/29/how-the-merge-impacts-app-layer
- [Engine API: A Visual Guide](https://hackmd.io/@danielrachi/engine_api) by [Daniel Ramirez](https://hackmd.io/@danielrachi)
- [Understanding Ethereum by studying its source code](https://gisli.hamstur.is/2020/08/understanding-ethereum-by-studying-the-source-code/)
Lightclient's vim and shell setup https://github.com/lightclient/dotfiles
================================================
FILE: docs/eps/week3.md
================================================
# Study Group Lecture 2 | Consensus Layer
The second day of EPFsg dives into the Consensus layer of Ethereum.
Watch the presentation on overview of the CL with Alex Stokes on [StreamEth](https://streameth.org/watch?event=&session=65e9f54579935301489a01eb) or [Youtube](https://www.youtube.com/watch?v=FqKjWYt6yWk). Presentations slides are [available here](https://github.com/eth-protocol-fellows/protocol-studies/tree/main/docs/eps/presentations/week3_presentation.pdf).
[recording](https://streameth.org/embed/?playbackId=66a30awapcuiok0z&vod=true&streamId=&playerName=Consensus+Layer+Overview+%7C+Alex+Stokes+%7C+Week+3 ':include :type=iframe width=100% height=520 frameborder="0" allow="fullscreen" allowfullscreen')
For written summary of week 3 presentation, check the [notes](https://github.com/eth-protocol-fellows/protocol-studies/files/14850973/Week.3.EPFsg.Consensus.Layer.Overview.pdf)
For archive of the discussion during the talk, check [this thread](https://discord.com/channels/1205546645496795137/1214219045205835776/1214219052969492541) in our Discord server.
## Pre-reading
Before starting with the week 3 content, make yourself familiar with resources in [week 2](/eps/week2.md).
Additionally, you can read and get ready by studying the following resources:
- [Ethereum.org docs on Proof-of-stake](https://ethereum.org/developers/docs/consensus-mechanisms/pos) and its subtopics
- [Beacon Chain explainer](https://ethos.dev/beacon-chain)
- [PoS and Solar Punk Future, Danny Ryan 2022](https://www.youtube.com/watch?v=8N10a1EBhBc), a talk before the Merge, great insight into the Merge and Beacon Chain development and testing
## Outline
- Blockchain enables creating a digital scarcity but it needs security which ensures its integrity
- Distributed networks deal with Byzantine fault tolerance (BFT)
- Bitcoin first solved the BFT with PoW
- Ethereum moves to proof-of-stake, switching from exogenous signal for Sybil protection to endogenous in the system
- Uses BFT majority to determine the state of the chain
- Byzantine faults can be observed by the protocol and stake can be `slashed`
- The fork choice rule summarized in LMD-GHOST
- It ensures liveness thanks to Casper
- Provides more cryptoeconomic security
## Additional reading and exercises
- [Gasper paper](https://arxiv.org/pdf/2003.03052.pdf)
- [Bitwise LMD GHOST: An efficient CBC Casper fork choice rule](https://medium.com/@aditya.asgaonkar/bitwise-lmd-ghost-an-efficient-cbc-casper-fork-choice-rule-6db924e57d1f)
- [Eth2book, annotated spec](https://eth2book.info/)
- [Stuff you should know about PoS by Domothy](https://web.archive.org/web/20240803111840/https://domothy.com/proof-of-stake/)
- [Slashing scenario explanation by Dankrad Feist](https://dankradfeist.de/ethereum/2022/03/24/run-the-majority-client-at-your-own-peril.html)
- [Beacon Chain design mistakes by Justin Drake](https://www.youtube.com/watch?v=10Ym34y3Eoo)
- [Casper and Consensus from Devcon 3](https://www.youtube.com/watch?v=2r2k6awEJr8)
- [Anatomy of a slot](https://www.youtube.com/watch?v=EswDO0kL_O0)
After learning about both EL and CL, run a client pair. Spin a pair of one execution and consensus client, read their logs to learn how they operate.
================================================
FILE: docs/eps/week4.md
================================================
# Study Group Lecture 4 | Testing and Security
Lecture 4 is diving into the testing tools and practices necessary to keep the network secure.
Watch the presentation on Ethereum core testing infrastructure on [Youtube](https://www.youtube.com/watch?v=PQVW5dJ8J0c). Presentations slides are [available here](https://github.com/eth-protocol-fellows/protocol-studies/tree/main/docs/eps/presentations/week4.pdf).
[recording](https://www.youtube.com/embed/PQVW5dJ8J0c?si=fv5ww4_6zInGXpjO ':include :type=iframe width=100% height=560 frameborder="0" allow="fullscreen" allowfullscreen encrypted-media gyroscope picture-in-picture web-share')
For written summary of lecture 4 presentation, check the [notes](https://github.com/eth-protocol-fellows/protocol-studies/files/14850974/Week.4.EPFsg.Test.Security.Overview.pdf)
For archive of the discussion during the talk, check [this thread](https://discord.com/channels/1205546645496795137/1216771776810455160/1216771782040621118) in our Discord server.
## Pre-reading
Before starting with the lecture 4 content, make yourself familiar with resources in [lecture 3](/eps/week3.md) and before.
Additionally, you can read and get ready by studying the following resources:
- https://ethereum-tests.readthedocs.io/en/latest/
- https://ethereum.github.io/execution-spec-tests
## Outline
- https://github.com/ethereum/execution-spec-tests
- https://github.com/ethereum/hive
- https://github.com/ethereum/tests
- https://github.com/ethereum/retesteth
- https://github.com/lightclient/rpctestgen
- https://github.com/marioevz/eth_tools
- https://github.com/kurtosis-tech/kurtosis
- https://github.com/MariusVanDerWijden/FuzzyVM
- https://github.com/MariusVanDerWijden/tx-fuzz
## Additional reading and exercises
- [Quest for the Best Tests, a Retrospective on #TestingTheMerge by Pari](https://archive.devcon.org/archive/watch/6/quest-for-the-best-tests-a-retrospective-on-testingthemerge/?tab=YouTube)
- [Killing ETH - Finding Consensus Issues on Layer 1 by Marius](https://archive.devcon.org/archive/watch/6/killing-eth-finding-consensus-issues-on-layer-1/?tab=YouTube)
- [Dencun testing](https://www.youtube.com/watch?v=88tZticGbTo)
================================================
FILE: docs/eps/week5.md
================================================
# Study Group Lecture 5 | Research and Roadmap
Lecture 5 provided an overview of current research ecosystem and updated roadmap.
Watch the presentation by [Domothy](https://twitter.com/domothy) on StreamEth or Youtube. Slides are [available here](https://github.com/eth-protocol-fellows/protocol-studies/blob/main/docs/eps/presentations/week5.pdf).
[recording](https://www.youtube.com/embed/UClaoL12W00?si=F-H6YMD7hgjjP2AM ':include :type=iframe width=100% height=560 frameborder="0" allow="fullscreen" allowfullscreen encrypted-media gyroscope picture-in-picture web-share')
## Pre-reading
Before starting with the lecture 5 content, make yourself familiar with resources in previous weeks.
Additionally, you can read and get ready by studying the following resources:
- https://ethereum.org/en/roadmap/
- https://domothy.com/roadmap/
- https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum
- https://ethereum.org/en/community/research/#active-areas-of-ethereum-research
- https://domothy.com/blobspace/
- https://vitalik.eth.limo/general/2021/12/06/endgame.html
## Outline
- Merge
- Altair / light client protocol
- Merge / Withdrawals
- Single Slot Finality
- Secret Leader Election
- Surge
- zk/op rollups
- KZG Ceremony
- EIP-4844
- Data Availability Sampling
- Cross-rollup interop
- Scourge
- (very) brief overview of MEV
- ePBS / Inclusion Lists / MEV Burn
- Max EB, Stake capping
- Verge
- Verkle Trees
- SNARKify everything:
- Beacon fast sync
- Beacon state transition
- Verkle proofs
- EVM
- Purge
- EIP-4444
- Protocol simplifications
- Splurge
- EIP-1559 endgame
- Account Abstraction
- Deep cryptography
## Additional reading and exercises
- [AltExplainer - Ethereum Proof of Stake explained](https://www.youtube.com/watch?v=5gfNUVmX3Es)
- https://a16zcrypto.com/posts/article/building-helios-ethereum-light-client/
- https://ethroadmap.com/
- https://notes.ethereum.org/@domothy/roadmap
- https://vitalik.eth.limo/general/2021/06/18/verkle.html
- https://scroll.io/blog/kzg
- [Ethereum data structures](https://arxiv.org/pdf/2108.05513.pdf)
- https://ethresear.ch/t/execution-tickets/17944
- https://notes.ethereum.org/@ipsilon/evm-object-format-overview
### V's overview of the roadmap tracks
- [Merge](https://vitalik.eth.limo/general/2024/10/14/futures1.html)
- [Surge](https://vitalik.eth.limo/general/2024/10/17/futures2.html)
- [Scourge](https://vitalik.eth.limo/general/2024/10/20/futures3.html)
- [Verge](https://vitalik.eth.limo/general/2024/10/23/futures4.html)
- [Purge](https://vitalik.eth.limo/general/2024/10/26/futures5.html)
- [Splurge](https://vitalik.eth.limo/general/2024/10/29/futures6.html)
================================================
FILE: docs/eps/week6-dev.md
================================================
# Study Group Lecture 6 | Consensus and Execution spec
EPS lecture 6 provides a deeper insight into consensus and execution layer specification.
Watch presentations from [Hsiao-Wei](https://twitter.com/icebearhww) and [Sam](https://twitter.com/_SamWilsn_) on StreamEth or Youtube. Slides are available for both [consensus specs](https://github.com/eth-protocol-fellows/protocol-studies/blob/main/docs/eps/presentations/week6_cl_specs.pdf) and [execution specs](https://github.com/eth-protocol-fellows/protocol-studies/blob/main/docs/eps/presentations/week6_el_specs.pdf) talks.
<iframe width="560" height="315" src="https://www.youtube.com/embed/_mb0LFJY8t0?si=M74zgvUuewCrUtJF" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the lecture 6 content, make yourself familiar with resources in previous days, especially 1-3.
Additionally, you can read and get ready by studying the following resources:
- Consensus specs:
- Index: https://github.com/ethereum/consensus-specs
- Pyspec tutorial: https://github.com/ethereum/consensus-specs/blob/dev/tests/README.md
- Execution specs:
- https://blog.ethereum.org/2023/08/29/eel-spec
- https://github.com/ethereum/execution-specs
## Outline
- Hsiao-Wei Wang on Consensus specs
- Sam Wilson on EELS
## Additional reading and exercises
- Following instructions from Hsiao-Wei's talk, write and run your own pyspec program
- As an exercise for EL specs, follow Sam's demo on adding an opcode and add your own
- https://ethereum.org/en/developers/tutorials/yellow-paper-evm/
- Vitalik Buterin’s Annotated spec: https://github.com/ethereum/annotated-spec
- Ben Edgington’s Upgrading Ethereum Book: https://eth2book.info
================================================
FILE: docs/eps/week6-research.md
================================================
# Study Group Lecture 11 | Sharding and DAS
Lecture 11 is going to be a dive into data availability sampling and danksharding.
Watch the presentation by [Dankrad](https://twitter.com/dankrad) on StreamEth or Youtube. Slides are [available here](https://github.com/eth-protocol-fellows/protocol-studies/blob/main/docs/eps/presentations/week6_research.pdf).
<iframe width="560" height="315" src="https://www.youtube.com/embed/ro2AGRkLC2s?si=IaNwL7OXl5tQvqOM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the lecture 11 content, make yourself familiar with resources in the introductory week.
Additionally, you can read and get ready by studying the following resources:
- [Data availability problem](https://www.youtube.com/watch?v=OJT_fR7wexw)
- [Sharding and DAS proposal](https://hackmd.io/@vbuterin/sharding_proposal)
## Outline
- Ethereum scalability
- History of sharding and path forward
- Data availability
## Additional reading and exercises
- [Foundations of Data Availability Sampling](https://www.youtube.com/watch?v=KUNE3kR1kwU)
- [Design choices in DAS](https://www.youtube.com/watch?v=Al7Jns8bCO4)
- [Danksharding workshop, Devcon Bogota](https://www.youtube.com/watch?v=8L2C6RDMV9Q)
- [Fraud and DA proofs paper](https://arxiv.org/abs/1809.09044)
- [WIP DAS proposal](https://hackmd.io/@vbuterin/das)
- [PeerDAS](https://epf.wiki/#/wiki/research/peerdas)
================================================
FILE: docs/eps/week7-dev.md
================================================
# Study Group Lecture 7 | Execution client architecture
Day 7 development track is an insight into Ethereum execution layer client codebase, explaining its architecture and highlighting novel approaches.
Watch the presentation recording by [Dragan](https://twitter.com/rakitadragan) on StreamEth or Youtube. Slides are [available here](https://github.com/eth-protocol-fellows/protocol-studies/blob/main/docs/eps/presentations/week7-dev.pdf).
<iframe width="560" height="315" src="https://www.youtube.com/embed/ibcsc5cv-vc?si=mTR7ReFUZo3vFtJD" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the lecture 7 development content, make yourself familiar with resources in previous days, especially Day 3 on EL. The execution client intro provided an important knowledge about execution client and its main features with examples from geth codebase. This talk will be diving into reth client design which is written in rust and developed with a modern design approach to EL clients.
Additionally, you can read and get ready by studying the following resources:
- Reth docs https://paradigmxyz.github.io/reth/
- Intro to Reth by Georgios https://www.youtube.com/watch?v=zntRpCKHyDc
- Deeper insight by Dragan https://www.youtube.com/watch?v=pxhq7YrySRM
## Outline
- Reth client
- Design and architecture
- Codebase overview, examples
- Features and highlights
## Additional reading and exercises
- Erigon is a fork of geth which pioneered the design approached implemented by reth. Kind of a middle ground between geth and reth, it's a great source of resources about novel execution client designs
- As an exercise, run reth and set different `DEBUG` options to explore how various client components operate on lower level
================================================
FILE: docs/eps/week7-research.md
================================================
# Study Group Lecture 12 | Verkle Trees
Lecture 12 is a research talk focused on verkle trees, an important domain of current research and development aiming to replace the MPT and enable statelessness.
Watch the talk by [Guillaume](https://twitter.com/gballet/), [Ignacio](https://twitter.com/ignaciohagopian) and [Josh](https://twitter.com/rudolf6_) on StreamEth or Youtube. Slides are [available here](https://github.com/eth-protocol-fellows/protocol-studies/blob/main/docs/eps/presentations/week7-research.pdf).
<iframe width="560" height="315" src="https://www.youtube.com/embed/H_M9bjwtMhU?si=9OurujpFiwUEuNdA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the content, make yourself familiar with resources in previous weeks, especially Day 3 and other content focused on execution layer. You should have at least understanding of merkle trees and current data structures in Ethereum.
Additionally, you can read and get ready by studying the following resources:
- [Data structures in Ethereum](/wiki/EL/data-structures.md)
- [Guillaume Ballet - The Verge](https://www.youtube.com/watch?v=F1Ne19Vew6w)
## Outline
- The Verge, motivation and benefits
- Verkle cryptography
- Data structures
- Gas pricing
- Transitioning the state tree to verkle
- Current state and challenges
- Questions from audience
## Additional reading and exercises
- [Stateless book](https://stateless.fyi)
- [Anatomy of a verkle proof](https://ihagopian.com/posts/anatomy-of-a-verkle-proof)
- Overview of many various resources https://verkle.info
- Checkout [verkle implementers calls](https://github.com/ethereum/pm/issues/977)
================================================
FILE: docs/eps/week8-dev.md
================================================
# Study Group Lecture 8 | Consensus client architecture
The lecture 8 development track provides a look into Ethereum consensus layer client codebase, explaining its architecture and functions.
Watch the presentation recording by [Paul Harris](https://twitter.com/rolfyone) on StreamEth or Youtube. Slides are [available here](https://github.com/eth-protocol-fellows/protocol-studies/blob/main/docs/eps/presentations/week8-dev.pdf).
<iframe width="560" height="315" src="https://www.youtube.com/embed/cZ33bfGXzOc?si=qnZ8xJF74oRlkHqF" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the week 8 development content, make yourself familiar with resources in previous weeks, especially day 2 resources on consensus layer.
Paul dives into Teku, consensus client implementation in Java and explains an example on how an EIP gets implemented. You should have at least basic knowledge of the language syntax to follow properly.
[Consensus-specs](https://github.com/ethereum/consensus-specs/) is executable, and a passing knowledge of python may be beneficial, but it's a fairly easy language to reason about at the level the specs are written.
Additionally, you can get ready by studying the following resources:
- [Post-Merge Ethereum Client Architecture by Adrian Sutton](https://www.youtube.com/watch?v=6d4pkhL37Ao)
- [Teku Architecture, 2020](https://www.youtube.com/watch?v=1PHZHpVPLk4)
- [Teku docs](https://docs.teku.consensys.io/)
## Outline
- Teku CL client
- Brief introduction into our rest api's, declarative framework
- A look at development process EIP -> spec -> code
- Examples of EIP-7251 (maxEB)
## Additional reading and exercises
- [Teku github](https://github.com/Consensys/teku)
- [Teku code conventions for contributors](https://wiki.hyperledger.org/display/BESU/Coding+Conventions)
- [Teku and the Merge, PEEPanEIP#83](https://www.youtube.com/watch?v=YTWaZ-NBpbM)
- [EIP 7251 - Max EB](https://github.com/ethereum/consensus-specs/tree/dev/specs/_features/eip7251)
- [Beacon-api](https://github.com/ethereum/beacon-APIs)
- [Lighthouse Consensus Client architecture](https://www.youtube.com/watch?v=pLHhTh_vGZ0) - A similar talk on CL client architecture in Rust client Lighthouse
================================================
FILE: docs/eps/week8-research.md
================================================
# Study Group Lecture 13 | Protocol services
This research talk is dedicated to MEV and censorship resistance, discusses the current state and proposals being worked on.
Watch the presentation by [Barnabé Monnot](https://twitter.com/barnabemonnot) on StreamETH channel or Youtube. Slides are [available here](https://github.com/eth-protocol-fellows/protocol-studies/blob/main/docs/eps/presentations/week8-research.pdf).
<iframe width="560" height="315" src="https://www.youtube.com/embed/hhYTtQ-GU1s?si=569qf27XN7l4ZL1Q" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the content, make yourself familiar with resources in previous weeks, especially Day 5 on roadmap. It's important to understand the current architecture of the protocol, existence of MEV and implications of PBS.
Additionally, you can get ready by studying the following resources:
- [MEV basics](https://ethereum.org/en/developers/docs/mev/)
- [RIG projects](https://rig.ethereum.org/)
- [Wiki on MEV and PBS](https://epf.wiki/#/wiki/research/PBS/pbs)
## Outline
- Protocol services and impact of MEV, cryptoeconomics
- PBS and related proposals
- ePBS flavors
- MEV burn
- Rainbow staking
## Additional reading and exercises
- [Rig Open Problems](https://efdn.notion.site/RIG-Open-Problems-ROPs-c11382c213f949a4b89927ef4e962adf)
- [Censorship stats](https://dotpics.info/)
- [Rainbow staking](https://ethresear.ch/t/unbundling-staking-towards-rainbow-staking/)
- [Notes on PBS](https://barnabe.substack.com/p/pbs)
================================================
FILE: docs/eps/week9-dev.md
================================================
# Study Group Lecture 9 | Local testing and prototyping
This development talk is dedicated to testing and prototyping forks locally, it discusses the current state and ideas being worked on.
Watch the presentation by [Parithosh](https://twitter.com/parithosh_j) on StreamETH channel or Youtube. Slides are [available here](https://github.com/eth-protocol-fellows/protocol-studies/blob/main/docs/eps/presentations/week9-dev.pdf).
<iframe width="560" height="315" src="https://www.youtube.com/embed/Enf8006zKLI?si=hJe4xFqiY81C0DwQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with the day 9 content, make yourself familiar with resources in previous weeks, especially day 4 presentation on testing and the node workshop. It's important to understand the current architecture of the protocol and its basic tooling.
Additionally, you can get ready by studying the following resources:
- [Quest for the Best Tests, a Retrospective on #TestingTheMerge by Pari](https://archive.devcon.org/archive/watch/6/quest-for-the-best-tests-a-retrospective-on-testingthemerge/?tab=YouTube)
- [Dencun testing](https://www.youtube.com/watch?v=88tZticGbTo)
## Preparation
- [Install kurtosis and docker on your system](https://docs.kurtosis.com/quickstart/)
## Outline
- What do we test and why?
- Importance of Local testing
- How can I prototype a tool or change?
- What are devnets? How do we spin them up?
- Shadow forks
- Handy devops tools
- Kurtosis
- Template-devnets
- Assertoor
- Forky
- Tracoor
- Dora
- Goomy-blob
- Xatu
- Run your own local devnet and shadowfork!
## Additional reading and exercises
- [Attacknet: Chaos engineering on Ethereum](https://ethpandaops.io/posts/attacknet-introduction/)
- [Verkle devnets](https://github.com/ethpandaops/verkle-devnets)
- [Kurtosis](https://github.com/kurtosis-tech/kurtosis)
- Follow exercises proposed by Pari in the talk
- Modify a client with a custom log message and run it using Kurtosis
- Deploy some of the tolling, connect to your own node on any network
================================================
FILE: docs/eps/week9-research.md
================================================
# Study Group Lecture 14 | Purge and Portal Network
This talk is focused on history expiry and dives into Portal Network, an overlay network for light clients enabling alternative access to current and historical data.
Watch the presentation by [Piper Merriam](https://twitter.com/parithosh_j), on [StreamEth](https://streameth.org/65cf97e702e803dbd57d823f/epf_study_group) and [Youtube](https://www.youtube.com/@ethprotocolfellows/streams).
<iframe width="560" height="315" src="https://www.youtube.com/embed/GxNrGyQB-3Q?si=gRPhA35dNYPEGDeZ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Pre-reading
Before starting with this research content, make yourself familiar with resources in previous weeks, especially day 5 presentation on roadmap. You should understand the execution client database structure, the difference between ancient and current data.
Additionally, you can get ready by studying the following resources:
- [Decentralizing access to Ethereum utilizing Ethereum's Portal Networks](https://www.youtube.com/watch?v=LZ_yWmm7ISg)
- [Statelessness and history expiry, Ethereum.org](https://ethereum.org/en/roadmap/statelessness/)
- [Portal Network web](https://www.ethportal.net/)
- [EL Data structure](https://epf.wiki/#/wiki/EL/data-structures)
## Outline
- History expiry in Ethereum execution clients
- Portal Network
## Additional reading and exercises
- EIP-4444
- https://eips.ethereum.org/EIPS/eip-4444
- SELFDESTRUCT Removal EIPS (many are stale)
- https://eips.ethereum.org/EIPS/eip-6049
- https://eips.ethereum.org/EIPS/eip-6780
- https://eips.ethereum.org/EIPS/eip-2936
- https://eips.ethereum.org/EIPS/eip-4758
- https://eips.ethereum.org/EIPS/eip-4760
- https://eips.ethereum.org/EIPS/eip-6046
- https://eips.ethereum.org/EIPS/eip-6190
- EOF things: https://hackmd.io/@shemnon/mega-eof-scoping
- LOG reform
- https://eips.ethereum.org/EIPS/eip-7668
- https://github.com/ethereum/EIPs/pull/8368
- Address Space Extension
- https://github.com/ethereum/EIPs/pull/8385
- https://ethereum-magicians.org/t/thoughts-on-address-space-extension-ase/6779
- https://ethereum-magicians.org/t/increasing-address-size-from-20-to-32-bytes/5485
- https://notes.ethereum.org/@ipsilon/address-space-extension-exploration
- State Expiry
- https://notes.ethereum.org/@vbuterin/verkle_and_state_expiry_proposal
- https://medium.com/@chaisomsri96/statelessness-series-part1-state-expiry-history-expiry-2bbd5835b329 (did not fully vet this article)
- https://notes.ethereum.org/@vbuterin/state_expiry_eip
- https://hackmd.io/@vbuterin/state_expiry_paths
- General Stateless Roadmap Things
- https://ethereum.org/en/roadmap/statelessness/
- [The Portal Network, EthZurich 2023](https://www.youtube.com/watch?v=8MUii5W2sMc)
================================================
FILE: docs/images/el-architecture/excalidraw/architecture-overview.excalidraw
================================================
{
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
"elements": [
{
"type": "rectangle",
"version": 797,
"versionNonce": 60131825,
"index": "a0",
"isDeleted": false,
"id": "FgnJAxXImgOttHQte_VsE",
"fillStyle": "cross-hatch",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": -79.51630360553872,
"y": -1303.754307345403,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"width": 1841.0260942760947,
"height": 1316.284511784512,
"seed": 682175889,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 3
},
"boundElements": [
{
"id": "ahJ_cggX7F0YHMM_pbJGW",
"type": "arrow"
},
{
"id": "sdfMrpyc0u1fhYG6O2TT8",
"type": "arrow"
}
],
"updated": 1713651115654,
"link": null,
"locked": false
},
{
"type": "text",
"version": 448,
"versionNonce": 125171815,
"index": "a1",
"isDeleted": false,
"id": "Ep55d2Cf-CSI4chXklNiC",
"fillStyle": "cross-hatch",
"strokeWidth": 2,
"strokeStyle": "dotted",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": -15.123205962440807,
"y": -1235.2963948874904,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"width": 413.9333190917969,
"height": 131.5151515151518,
"seed": 77882257,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1713645887681,
"link": null,
"locked": false,
"fontSize": 52.60606060606073,
"fontFamily": 1,
"text": "Execution Layer\nClient",
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Execution Layer\nClient",
"lineHeight": 1.25
},
{
"type": "rectangle",
"version": 703,
"versionNonce": 625709323,
"index": "a2",
"isDeleted": false,
"id": "-_n9K0bgJ-oFtpjnnaeuP",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 737.0383746531147,
"y": -1478.8204535313052,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 710.5591601287589,
"height": 242.53752665728297,
"seed": 934851487,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 3
},
"boundElements": [
{
"id": "yWvcQG8ffdBZzyiM_qK_P",
"type": "arrow"
},
{
"id": "cgedGQ2MpgS37v5sDsFEt",
"type": "arrow"
},
{
"id": "oyy3j29cSLay83iHEhw17",
"type": "arrow"
},
{
"id": "7USdFW4_bZpzRgVlW3g8j",
"type": "arrow"
},
{
"id": "wfy94yFqMcaX4bwE-QRva",
"type": "arrow"
}
],
"updated": 1713692334657,
"link": null,
"locked": false
},
{
"type": "text",
"version": 572,
"versionNonce": 433685545,
"index": "a3",
"isDeleted": false,
"id": "fwUQ5JxGxHDp1vWBsJtIY",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 998.5241455804984,
"y": -1384.0792321808042,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 198.48333740234375,
"height": 47.37061067525058,
"seed": 1960518911,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1713645360732,
"link": null,
"locked": false,
"fontSize": 37.896488540200465,
"fontFamily": 1,
"text": "Engine API",
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Engine API",
"lineHeight": 1.25
},
{
"type": "rectangle",
"version": 458,
"versionNonce": 1145423083,
"index": "a4",
"isDeleted": false,
"id": "RumOeXmWSLBfwsZcLG0Ib",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 622.7553886558729,
"y": -1887.3709956440623,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 656.8329403134411,
"height": 206.8698640352651,
"seed": 1266240017,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 3
},
"boundElements": [
{
"type": "text",
"id": "Zf4mRJJoTDzwpc0yfrPdJ"
},
{
"id": "yWvcQG8ffdBZzyiM_qK_P",
"type": "arrow"
},
{
"id": "cgedGQ2MpgS37v5sDsFEt",
"type": "arrow"
},
{
"id": "wfy94yFqMcaX4bwE-QRva",
"type": "arrow"
},
{
"id": "UP-MOsA8gwhg1R_pdOqQA",
"type": "arrow"
}
],
"updated": 1713692590649,
"link": null,
"locked": false
},
{
"type": "text",
"version": 655,
"versionNonce": 1018425227,
"index": "a5",
"isDeleted": false,
"id": "Zf4mRJJoTDzwpc0yfrPdJ",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 816.771864916109,
"y": -1804.706425587743,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 268.79998779296875,
"height": 41.54072392262643,
"seed": 1537561009,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1713692590649,
"link": null,
"locked": false,
"fontSize": 33.232579138101144,
"fontFamily": 1,
"text": "Consensus Layer",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "RumOeXmWSLBfwsZcLG0Ib",
"originalText": "Consensus Layer",
"lineHeight": 1.25
},
{
"type": "arrow",
"version": 1399,
"versionNonce": 1254796075,
"index": "a6",
"isDeleted": false,
"id": "yWvcQG8ffdBZzyiM_qK_P",
"fillStyle": "solid",
"strokeWidth": 4,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 688.3267411620876,
"y": -1661.6333514274675,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 67.95254061145954,
"height": 180.50855145652986,
"seed": 1656084337,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1713692590801,
"link": null,
"locked": false,
"startBinding": {
"elementId": "RumOeXmWSLBfwsZcLG0Ib",
"gap": 18.86778018132975,
"focus": 0.8408891754451592
},
"endBinding": {
"elementId": "-_n9K0bgJ-oFtpjnnaeuP",
"gap": 2.3043464396322406,
"focus": -0.7221175569428874
},
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow",
"points": [
[
0,
0
],
[
67.95254061145954,
180.50855145652986
]
]
},
{
"type": "text",
"version": 441,
"versionNonce": 2058471429,
"index": "a7",
"isDeleted": false,
"id": "5vMkLSuRPwUEVKTPUe0my",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 139.85743376819846,
"y": -1601.5655462184927,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 488.54998779296875,
"height": 60.2886094333353,
"seed": 997404593,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1713692601618,
"link": null,
"locked": false,
"fontSize": 48.23088754666824,
"fontFamily": 1,
"text": "Fork Choice Updated",
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Fork Choice Updated",
"lineHeight": 1.25
},
{
"type": "arrow",
"version": 1628,
"versionNonce": 18260261,
"index": "a8",
"isDeleted": false,
"id": "wfy94yFqMcaX4bwE-QRva",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 1278.39677039075,
"y": -1657.3022780622487,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 54.14162647342914,
"height": 171.15506728415016,
"seed": 640989535,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1713692611453,
"link": null,
"locked": false,
"startBinding": {
"elementId": "RumOeXmWSLBfwsZcLG0Ib",
"focus": -0.7951758806729825,
"gap": 23.19885354654832
},
"endBinding": {
"elementId": "-_n9K0bgJ-oFtpjnnaeuP",
"focus": 0.7135929321504012,
"gap": 7.326757246793136
},
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow",
"points": [
[
0,
0
],
[
54.14162647342914,
171.15506728415016
]
]
},
{
"type": "text",
"version": 481,
"versionNonce": 1284498655,
"index": "a9",
"isDeleted": false,
"id": "eoIolPKii-W42lyrCVYJq",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 1374.0812249377786,
"y": -1615.928160485641,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 332.8166809082031,
"height": 67.65203610256302,
"seed": 1530148223,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1713651011383,
"link": null,
"locked": false,
"fontSize": 54.121628882050416,
"fontFamily": 1,
"text": "New Payload",
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "New Payload",
"lineHeight": 1.25
},
{
"type": "rectangle",
"version": 943,
"versionNonce": 310655761,
"index": "aB",
"isDeleted": false,
"id": "9WftG63CbFTg3zXGmE1gj",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 982.9070970678624,
"y": -388.8797282208235,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 311.2525252525253,
"height": 150.5117845117845,
"seed": 1055281215,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 3
},
"boundElements": [
{
"type": "text",
"id": "k85HAs2-fRVZEpNaMr_HV"
}
],
"updated": 1713649560134,
"link": null,
"locked": false
},
{
"type": "text",
"version": 1106,
"versionNonce": 546001365,
"index": "aC",
"isDeleted": false,
"id": "k85HAs2-fRVZEpNaMr_HV",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 1088.0833589311856,
"y": -331.88982923092453,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 100.9000015258789,
"height": 36.531986531986526,
"seed": 222591857,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1713645299689,
"link": null,
"locked": false,
"fontSize": 29.22558922558922,
"fontFamily": 1,
"text": "State ",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "9WftG63CbFTg3zXGmE1gj",
"originalText": "State ",
"lineHeight": 1.25
},
{
"type": "rectangle",
"version": 579,
"versionNonce": 1100293099,
"index": "aF",
"isDeleted": false,
"id": "siyDzSseEQqfwuq3Ld5-8",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 1144.418039828805,
"y": -924.2231625642576,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 338.71380471380485,
"height": 178.5117845117845,
"seed": 1542700204,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 3
},
"boundElements": [
{
"type": "text",
"id": "fQFs3BHcETUS_5GsrhIOW"
},
{
"id": "rKrBxlo7-js0XwcTZ3yMG",
"type": "arrow"
},
{
"id": "vNTiR5kjltlr0bU8DX0Yy",
"type": "arrow"
},
{
"id": "rSKoByNvrhoMVNZ9RyW-Q",
"type": "arrow"
},
{
"id": "7USdFW4_bZpzRgVlW3g8j",
"type": "arrow"
}
],
"updated": 1713692210101,
"link": null,
"locked": false
},
{
"type": "text",
"version": 680,
"versionNonce": 2082176159,
"index": "aG",
"isDeleted": false,
"id": "fQFs3BHcETUS_5GsrhIOW",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 1285.166608598061,
"y": -853.2332635743586,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 57.21666717529297,
"height": 36.531986531986526,
"seed": 1210097964,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1713650983949,
"link": null,
"locked": false,
"fontSize": 29.22558922558922,
"fontFamily": 1,
"text": "EVM",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "siyDzSseEQqfwuq3Ld5-8",
"originalText": "EVM",
"lineHeight": 1.25
},
{
"type": "rectangle",
"version": 338,
"versionNonce": 2127463275,
"index": "aH",
"isDeleted": false,
"id": "LZV38R3EJgoGZG019rwHk",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 337.8456492564144,
"y": -937.9133982544932,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 344.86195286195283,
"height": 140.2828282828283,
"seed": 96817812,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 3
},
"boundElements": [
{
"type": "text",
"id": "DmJWi8FyJpsvevqYvrVm8"
},
{
"id": "XGVWIZ6pHUIj7ulOBYe4A",
"type": "arrow"
},
{
"id": "loU3AR_BS_RxH89duKDtv",
"type": "arrow"
}
],
"updated": 1713692643944,
"link": null,
"locked": false
},
{
"type": "text",
"version": 472,
"versionNonce": 2019820817,
"index": "aI",
"isDeleted": false,
"id": "DmJWi8FyJpsvevqYvrVm8",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 344.2682943885627,
"y": -886.0379773790723,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 332.01666259765625,
"height": 36.531986531986526,
"seed": 1790106796,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1713649448607,
"link": null,
"locked": false,
"fontSize": 29.22558922558922,
"fontFamily": 1,
"text": "Transactions (mempool)",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "LZV38R3EJgoGZG019rwHk",
"originalText": "Transactions (mempool)",
"lineHeight": 1.25
},
{
"type": "arrow",
"version": 1549,
"versionNonce": 1969692213,
"index": "aJ",
"isDeleted": false,
"id": "XGVWIZ6pHUIj7ulOBYe4A",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 146.13773735681042,
"y": -377.16255650365173,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 332.9662081995817,
"height": 394.01010101010064,
"seed": 1103704340,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1714326038458,
"link": null,
"locked": false,
"startBinding": {
"elementId": "ZuasuskvUFGU2ZdFZUvPC",
"focus": -0.023530779804662776,
"gap": 1.0000000000000284
},
"endBinding": {
"elementId": "LZV38R3EJgoGZG019rwHk",
"focus": 0.029267874339474285,
"gap": 26.45791245791264
},
"lastCommittedPoint": null,
"startArrowhead": "arrow",
"endArrowhead": "arrow",
"points": [
[
0,
0
],
[
262.7516829433754,
-128.87878787878805
],
[
332.9662081995817,
-394.01010101010064
]
]
},
{
"type": "arrow",
"version": 2489,
"versionNonce": 635474111,
"index": "aK",
"isDeleted": false,
"id": "rKrBxlo7-js0XwcTZ3yMG",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 1086.071305053363,
"y": -397.6474049885003,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 121.22452715889426,
"height": 340.3737373737372,
"seed": 1925180692,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1713650983949,
"link": null,
"locked": false,
"startBinding": null,
"endBinding": {
"elementId": "siyDzSseEQqfwuq3Ld5-8",
"focus": 0.3577093555894991,
"gap": 7.690235690235681
},
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow",
"points": [
[
0,
0
],
[
121.22452715889426,
-340.3737373737372
]
]
},
{
"type": "arrow",
"version": 2488,
"versionNonce": 1512972511,
"index": "aL",
"isDeleted": false,
"id": "vNTiR5kjltlr0bU8DX0Yy",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 1311.780417882047,
"y": -743.8662602073551,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 128.05919426723335,
"height": 341.8350168350165,
"seed": 1032799072,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1713650983949,
"link": null,
"locked": false,
"startBinding": {
"elementId": "siyDzSseEQqfwuq3Ld5-8",
"focus": -0.1584561724991774,
"gap": 1.8451178451178976
},
"endBinding": null,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow",
"points": [
[
0,
0
],
[
-128.05919426723335,
341.8350168350165
]
]
},
{
"type": "rectangle",
"version": 577,
"versionNonce": 1760790335,
"index": "aN",
"isDeleted": false,
"id": "jndv3wQ06fQYQtwacZJxs",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 2217.5392519500174,
"y": -1107.456327547423,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 317.0976430976431,
"height": 173.89225589225586,
"seed": 2105684640,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 3
},
"boundElements": [
{
"type": "text",
"id": "zzftImsqwKd5mau51GjTp"
},
{
"id": "ahJ_cggX7F0YHMM_pbJGW",
"type": "arrow"
},
{
"id": "sdfMrpyc0u1fhYG6O2TT8",
"type": "arrow"
}
],
"updated": 1713650901831,
"link": null,
"locked": false
},
{
"type": "text",
"version": 746,
"versionNonce": 1553876831,
"index": "aO",
"isDeleted": false,
"id": "zzftImsqwKd5mau51GjTp",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 2301.8714063235457,
"y": -1038.7761928672883,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 148.43333435058594,
"height": 36.531986531986526,
"seed": 1556900704,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1713650901831,
"link": null,
"locked": false,
"fontSize": 29.22558922558922,
"fontFamily": 1,
"text": "User/web3",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "jndv3wQ06fQYQtwacZJxs",
"originalText": "User/web3",
"lineHeight": 1.25
},
{
"type": "arrow",
"version": 2210,
"versionNonce": 868123057,
"index": "aP",
"isDeleted": false,
"id": "ahJ_cggX7F0YHMM_pbJGW",
"fillStyle": "solid",
"strokeWidth": 4,
"strokeStyle": "dashed",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 1777.5838647446299,
"y": -1048.098014139116,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 438.95538720538707,
"height": 1.119699798925467,
"seed": 1418290848,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1713651115655,
"link": null,
"locked": false,
"startBinding": {
"elementId": "FgnJAxXImgOttHQte_VsE",
"focus": -0.6053760677593353,
"gap": 16.074074074073906
},
"endBinding": {
"elementId": "jndv3wQ06fQYQtwacZJxs",
"focus": 0.3333063507641485,
"gap": 1
},
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow",
"points": [
[
0,
0
],
[
438.95538720538707,
-1.119699798925467
]
]
},
{
"type": "arrow",
"version": 2069,
"versionNonce": 1549568369,
"index": "aQ",
"isDeleted": false,
"id": "sdfMrpyc0u1fhYG6O2TT8",
"fillStyle": "solid",
"strokeWidth": 4,
"strokeStyle": "dashed",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 2216.539251950017,
"y": -957.5147603326811,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 436.86784511784435,
"height": 7.548628141068548,
"seed": 1036659360,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1713651115655,
"link": null,
"locked": false,
"startBinding": {
"elementId": "jndv3wQ06fQYQtwacZJxs",
"focus": -0.6744593720748839,
"gap": 1
},
"endBinding": {
"elementId": "FgnJAxXImgOttHQte_VsE",
"focus": -0.42746932116609937,
"gap": 18.161616161616394
},
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow",
"points": [
[
0,
0
],
[
-436.86784511784435,
7.548628141068548
]
]
},
{
"type": "ellipse",
"version": 441,
"versionNonce": 1291598965,
"index": "aQV",
"isDeleted": false,
"id": "jvMQXbQZG3ErjC616pYO3",
"fillStyle": "hachure",
"strokeWidth": 4,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": -208.27892986816528,
"y": -337.2332635743587,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 68.68013468013469,
"height": 70.14141414141417,
"seed": 1567195808,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 2
},
"boundElements": [
{
"id": "yTHLUCYwtFkDM98RX9Tx0",
"type": "arrow"
},
{
"id": "kofqDTcbmGMFtvTWA-kFY",
"type": "arrow"
},
{
"id": "dtRi2_WvVx9qE1iqfIBOh",
"type": "arrow"
}
],
"updated": 1714326038457,
"link": null,
"locked": false
},
{
"type": "text",
"version": 324,
"versionNonce": 1782731911,
"index": "aR",
"isDeleted": false,
"id": "SsGFuKAkHHuDpn9yglxHA",
"fillStyle": "solid",
"strokeWidth": 4,
"strokeStyle": "dashed",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": 1903.0914405022054,
"y": -1165.4908393319347,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 146.3333282470703,
"height": 73.06397306397305,
"seed": 409693856,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1713712613620,
"link": null,
"locked": false,
"fontSize": 29.22558922558922,
"fontFamily": 1,
"text": "JSON-RPC\nAPI",
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "JSON-RPC\nAPI",
"lineHeight": 1.25
},
{
"type": "rectangle",
"version": 521,
"versionNonce": 1099429728,
"index": "aW",
"isDeleted": false,
"id": "WZ1OySPIFvJslAPB2le4-",
"fillStyle": "hachure",
"strokeWidth": 4,
"strokeStyle": "solid",
"roughness": 2,
"opacity": 100,
"angle": 0,
"x": -835.0085232545506,
"y": -525.7436050847006,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"width": 203.00000000000003,
"height": 181.00000000000003,
"seed": 2022512480,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 3
},
"boundElements": [],
gitextract_igib6qx0/ ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ └── wiki-content-request.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── md-lint.yaml │ └── spell-check.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── check_typos.sh ├── docs/ │ ├── .nojekyll │ ├── CNAME │ ├── _footer.md │ ├── _navbar.md │ ├── _sidebar.md │ ├── assets/ │ │ ├── css/ │ │ │ ├── custom.css │ │ │ ├── editor.css │ │ │ ├── theme.css │ │ │ └── toc.css │ │ └── ics/ │ │ └── eps25townhall.ics │ ├── contributing.md │ ├── epf.md │ ├── eps/ │ │ ├── archive.md │ │ ├── day16.md │ │ ├── day17.md │ │ ├── day18.md │ │ ├── day19.md │ │ ├── day20.md │ │ ├── day21.md │ │ ├── day22.md │ │ ├── day23.md │ │ ├── day24.md │ │ ├── intro.md │ │ ├── nodes_workshop.md │ │ ├── presentations/ │ │ │ └── week2_notes.md │ │ ├── week0.md │ │ ├── week1.md │ │ ├── week10-dev.md │ │ ├── week10-research.md │ │ ├── week2.md │ │ ├── week3.md │ │ ├── week4.md │ │ ├── week5.md │ │ ├── week6-dev.md │ │ ├── week6-research.md │ │ ├── week7-dev.md │ │ ├── week7-research.md │ │ ├── week8-dev.md │ │ ├── week8-research.md │ │ ├── week9-dev.md │ │ └── week9-research.md │ ├── images/ │ │ ├── el-architecture/ │ │ │ └── excalidraw/ │ │ │ ├── architecture-overview.excalidraw │ │ │ ├── forkchoice-updated.excalidraw │ │ │ ├── payload-building-routine.excalidraw │ │ │ ├── payload-validation-routine.excalidraw │ │ │ └── reth-architecture-overview.excalidraw │ │ └── el-specs/ │ │ └── excalidraw/ │ │ ├── gas-header.excalidraw │ │ ├── state.excalidraw │ │ └── stf_eels.excalidraw │ ├── index.html │ ├── readme.md │ ├── resources.md │ ├── topics.md │ └── wiki/ │ ├── CL/ │ │ ├── SSZ.md │ │ ├── beacon-api.md │ │ ├── cl-architecture.md │ │ ├── cl-clients.md │ │ ├── cl-networking.md │ │ ├── cl-specs.md │ │ ├── gasper.md │ │ ├── merkleization.md │ │ ├── overview.md │ │ └── syncing.md │ ├── Cryptography/ │ │ ├── KZG.md │ │ ├── bls.md │ │ ├── ecdsa.md │ │ ├── intro.md │ │ ├── keccak256.md │ │ └── post-quantum-cryptography.md │ ├── EL/ │ │ ├── JSON-RPC.md │ │ ├── RLP.md │ │ ├── block-production.md │ │ ├── clients/ │ │ │ ├── besu.md │ │ │ └── reth.md │ │ ├── data-structures.md │ │ ├── devp2p.md │ │ ├── el-architecture.md │ │ ├── el-clients.md │ │ ├── el-data-structures-summary.md │ │ ├── el-specs.md │ │ ├── engine-api.md │ │ ├── eof.md │ │ ├── evm.md │ │ ├── precompiled-contracts.md │ │ └── transaction.md │ ├── dev/ │ │ ├── core-development.md │ │ ├── cs-resources.md │ │ └── pm.md │ ├── epf.md │ ├── pectra-faq.md │ ├── protocol/ │ │ ├── architecture.md │ │ ├── design-rationale.md │ │ ├── history.md │ │ ├── img/ │ │ │ └── history/ │ │ │ └── ethereum-nodes.excalidraw │ │ └── prehistory.md │ ├── research/ │ │ ├── FCR/ │ │ │ └── FCR.md │ │ ├── PBS/ │ │ │ ├── ET.md │ │ │ ├── PEPC.md │ │ │ ├── PTC.md │ │ │ ├── TBHL.md │ │ │ ├── ePBS-Specs.md │ │ │ ├── ePBS.md │ │ │ ├── mev-boost.md │ │ │ ├── mev.md │ │ │ └── pbs.md │ │ ├── Preconfirmations/ │ │ │ ├── BasedSequencingPreconfs.md │ │ │ └── Preconfirmations.md │ │ ├── SSF.md │ │ ├── account-abstraction/ │ │ │ └── eip-7702.md │ │ ├── cl-upgrades.md │ │ ├── eODS.md │ │ ├── history-expiry/ │ │ │ └── history-expiry.md │ │ ├── img/ │ │ │ └── scaling/ │ │ │ ├── layer-1-scaling.excalidraw │ │ │ └── layer-2-scaling.excalidraw │ │ ├── light-clients.md │ │ ├── peerdas.md │ │ ├── roadmap.md │ │ └── scaling/ │ │ ├── core-changes/ │ │ │ ├── core-changes.md │ │ │ └── eip-4844.md │ │ ├── data-availability.md │ │ └── scaling.md │ ├── testing/ │ │ ├── consensus-spec-tests.md │ │ ├── formal-verification.md │ │ ├── hive.md │ │ ├── incidents.md │ │ ├── kurtosis.md │ │ └── overview.md │ └── wiki-intro.md ├── notes/ │ ├── Chloe_notes.md │ ├── gorondan.md │ ├── gorondan_MVEls_notes.md │ ├── mario.md │ ├── steven_notes/ │ │ ├── PBS.md │ │ ├── weekly_updates_1.md │ │ └── weekly_updates_2.md │ ├── wiki_contributors_meeting/ │ │ ├── 2024-04-18-meeting-1.md │ │ ├── 2024-05-02-meeting-2.md │ │ ├── 2024-05-16-meeting-3.md │ │ ├── 2024-06-20-meeting-4.md │ │ ├── 2024-07-25-meeting-5.md │ │ └── 2025-01-23-meeting-6.md │ └── your-name notes.md └── wordlist.txt
Condensed preview — 152 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,183K chars).
[
{
"path": ".github/ISSUE_TEMPLATE/wiki-content-request.md",
"chars": 212,
"preview": "---\nname: Wiki content \nabout: Request a new content missing in the wiki \ntitle: ''\nlabels: 'feature'\nassignees: ''\n---\n"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1419,
"preview": "## Wiki PR Checklist\n\nThank you for contributing to the Protocol Wiki! Before you open a PR, make sure to read [informat"
},
{
"path": ".github/workflows/md-lint.yaml",
"chars": 290,
"preview": "name: Markdown linter\n\non:\n pull_request:\n branches:\n - main\njobs:\n lint:\n runs-on: ubuntu-latest\n steps"
},
{
"path": ".github/workflows/spell-check.yml",
"chars": 4481,
"preview": "name: 🥢 Spell check\n\non:\n pull_request_target:\n branches:\n - main\n\njobs:\n typo_check:\n name: 🥢 Spell check\n"
},
{
"path": ".gitignore",
"chars": 95,
"preview": "**/.DS_Store\n**/.DS_Store?\n**/.vscode\n**/.vscode?\n**/.obsidian\n**/.obsidian?\n**/.idea\n**/.idea?"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 5428,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
},
{
"path": "LICENSE",
"chars": 17141,
"preview": "Creative Commons Attribution-ShareAlike 4.0 International Public\nLicense\n\nBy exercising the Licensed Rights (defined bel"
},
{
"path": "README.md",
"chars": 710,
"preview": "# Ethereum Protocol Fellowship Study Group (EPFsg)\r\n\r\nThis repository is dedicated to coordination and developing a know"
},
{
"path": "check_typos.sh",
"chars": 1356,
"preview": "#!/bin/bash\n\n# Ensure TYPOS variable is empty to start\nTYPOS=\"\"\n\necho \"🔍 Checking for typos...\"\n\n# Use -v to ensure aspe"
},
{
"path": "docs/.nojekyll",
"chars": 0,
"preview": ""
},
{
"path": "docs/CNAME",
"chars": 8,
"preview": "epf.wiki"
},
{
"path": "docs/_footer.md",
"chars": 458,
"preview": "---\nEPF Wiki initiated by EF Protocol Support and maintained by EPFsg community. <a rel=\"license\" href=\"https://github.c"
},
{
"path": "docs/_navbar.md",
"chars": 122,
"preview": "* [Home](readme.md)\n* [Study Group](/eps/intro.md)\n* [Protocol Wiki](/wiki/wiki-intro.md)\n* [Contribute](contributing.md"
},
{
"path": "docs/_sidebar.md",
"chars": 3695,
"preview": "- [Home](readme.md)\n- [Contributing](contributing.md)\n- **Study Group**\n- [Join the studies](/eps/intro.md)\n- [Study Gro"
},
{
"path": "docs/assets/css/custom.css",
"chars": 11286,
"preview": "/* File for custom CSS\n\n/* CSS to better visually match Docsify pages within Canvas LMS (uncomment to use) */\n/*\n@import"
},
{
"path": "docs/assets/css/editor.css",
"chars": 1776,
"preview": "/*\n====================================================================================================================="
},
{
"path": "docs/assets/css/theme.css",
"chars": 13893,
"preview": ".app-nav:not(:empty)~main .markdown-section {\n padding-top: 5.0rem;\n}\n\n.pagination-item, .pagination-item-title {\n opa"
},
{
"path": "docs/assets/css/toc.css",
"chars": 2373,
"preview": ".content *::-webkit-scrollbar {\n background-color: transparent;\n width: 12px;\n}\n.content *::-webkit-scrollbar-track {\n"
},
{
"path": "docs/assets/ics/eps25townhall.ics",
"chars": 536,
"preview": "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//ical.marudot.com//iCal Event Maker\nCALSCALE:GREGORIAN\nBEGIN:VEVENT\nDTSTAMP:2025020"
},
{
"path": "docs/contributing.md",
"chars": 11077,
"preview": "# Contribute to the Protocol Wiki\n\nThe Protocol Wiki is an open and collaborative project. Whether you are part of the ["
},
{
"path": "docs/epf.md",
"chars": 2471,
"preview": "# Ethereum Protocol Fellowship (EPF)\n\nThe Ethereum Protocol Fellowship (EPF) is a program designed to provide developers"
},
{
"path": "docs/eps/archive.md",
"chars": 7439,
"preview": "\n - **Introduction**\n - [Prepare for studies](/eps/week0.md)\n - [Protocol intro and overview](/eps/week1.md)\n - [CL "
},
{
"path": "docs/eps/day16.md",
"chars": 2134,
"preview": "# Study Group Lecture 16 | Consensus and Gasper\n\nThe introductory part of the study group is now over and we are now sta"
},
{
"path": "docs/eps/day17.md",
"chars": 1974,
"preview": "# Study Group Lecture 17 | EVM\n\nThe introductory part of the study group is now over and we are now starting the deeper "
},
{
"path": "docs/eps/day18.md",
"chars": 1822,
"preview": "# Study Group Lecture 18 | EL Networking, Devp2p\n\nThe introductory part of the study group is now over and we are now st"
},
{
"path": "docs/eps/day19.md",
"chars": 2011,
"preview": "# Study Group Lecture 19 | CL Networking, libp2p\n\nThe introductory part of the study group is now over and we are now st"
},
{
"path": "docs/eps/day20.md",
"chars": 2370,
"preview": "# Study Group Lecture 20 | Validator client\n\nThe introductory part of the study group is now over and we are now startin"
},
{
"path": "docs/eps/day21.md",
"chars": 1419,
"preview": "# Study Group Lecture 21 | Engine API\n\nThis lecture dives into Engine API, the connection between consensus and executio"
},
{
"path": "docs/eps/day22.md",
"chars": 1389,
"preview": "# Study Group Lecture 22 | CL Data Structures\n\nThis lecture dives into data structures of the consensus layer, how Beaco"
},
{
"path": "docs/eps/day23.md",
"chars": 2469,
"preview": "# Study Group Lecture 23 | EL Data Structures\n\nThis lecture dives into data structures of the Execution layer, the Merkl"
},
{
"path": "docs/eps/day24.md",
"chars": 1319,
"preview": "# Study Group Lecture 24 | Upcoming upgrades\n\nThe last lecture of the Study Group is looking forward to the future, cove"
},
{
"path": "docs/eps/intro.md",
"chars": 6919,
"preview": "# Ethereum Protocol Studies\n\n[Ethereum Protocol Studies group (EPS)](https://blog.ethereum.org/2025/02/05/ethereum-proto"
},
{
"path": "docs/eps/nodes_workshop.md",
"chars": 4114,
"preview": "# Study Group Lecture | Using Ethereum clients \n\nDuring Day 3, apart of [the regular presentation](https://epf.wiki/#/e"
},
{
"path": "docs/eps/presentations/week2_notes.md",
"chars": 2362,
"preview": "# Week 2 Lecture\n\n## Overview\n\n### Block Validation\n\ngo\nfunc stf(parent types.Block, block types.Block, state state.Stat"
},
{
"path": "docs/eps/week0.md",
"chars": 1931,
"preview": "# Study Group Week 0\n\nWeek 0 marks all the time before the program begins. Use this time to prepare yourself and get a h"
},
{
"path": "docs/eps/week1.md",
"chars": 13916,
"preview": "# Study Group Lecture 1 | Protocol Intro\n\nThe first day of the study group is dedicated to a general introduction to the"
},
{
"path": "docs/eps/week10-dev.md",
"chars": 2037,
"preview": "# Study Group Day 10 | Precompiles \n\nDay 10 dev talk is diving into EVM precompiles and their integration in execution c"
},
{
"path": "docs/eps/week10-research.md",
"chars": 2436,
"preview": "# Study Group Lecture 15 | The Ethereum fork-choice\n\nLast talk of the original study group covers a variety of topics re"
},
{
"path": "docs/eps/week2.md",
"chars": 4063,
"preview": "# Study Group Lecture 3 | Execution Layer\n\nDuring the third day, we will dive into the Execution layer of Ethereum. \n\nWa"
},
{
"path": "docs/eps/week3.md",
"chars": 3241,
"preview": "# Study Group Lecture 2 | Consensus Layer\n\nThe second day of EPFsg dives into the Consensus layer of Ethereum.\n\nWatch th"
},
{
"path": "docs/eps/week4.md",
"chars": 2185,
"preview": "# Study Group Lecture 4 | Testing and Security\n\nLecture 4 is diving into the testing tools and practices necessary to ke"
},
{
"path": "docs/eps/week5.md",
"chars": 2772,
"preview": "# Study Group Lecture 5 | Research and Roadmap\n\nLecture 5 provided an overview of current research ecosystem and updated"
},
{
"path": "docs/eps/week6-dev.md",
"chars": 1904,
"preview": "# Study Group Lecture 6 | Consensus and Execution spec\n\nEPS lecture 6 provides a deeper insight into consensus and execu"
},
{
"path": "docs/eps/week6-research.md",
"chars": 1603,
"preview": "# Study Group Lecture 11 | Sharding and DAS\n\nLecture 11 is going to be a dive into data availability sampling and danksh"
},
{
"path": "docs/eps/week7-dev.md",
"chars": 1950,
"preview": "# Study Group Lecture 7 | Execution client architecture\n\nDay 7 development track is an insight into Ethereum execution l"
},
{
"path": "docs/eps/week7-research.md",
"chars": 1845,
"preview": "# Study Group Lecture 12 | Verkle Trees\n\nLecture 12 is a research talk focused on verkle trees, an important domain of c"
},
{
"path": "docs/eps/week8-dev.md",
"chars": 2433,
"preview": "# Study Group Lecture 8 | Consensus client architecture\n\nThe lecture 8 development track provides a look into Ethereum c"
},
{
"path": "docs/eps/week8-research.md",
"chars": 1718,
"preview": "# Study Group Lecture 13 | Protocol services\n\nThis research talk is dedicated to MEV and censorship resistance, discusse"
},
{
"path": "docs/eps/week9-dev.md",
"chars": 2253,
"preview": "# Study Group Lecture 9 | Local testing and prototyping \n\nThis development talk is dedicated to testing and prototyping "
},
{
"path": "docs/eps/week9-research.md",
"chars": 2964,
"preview": "# Study Group Lecture 14 | Purge and Portal Network\n\nThis talk is focused on history expiry and dives into Portal Networ"
},
{
"path": "docs/images/el-architecture/excalidraw/architecture-overview.excalidraw",
"chars": 81650,
"preview": "{\n \"type\": \"excalidraw\",\n \"version\": 2,\n \"source\": \"https://excalidraw.com\",\n \"elements\": [\n {\n \"type\": \"rec"
},
{
"path": "docs/images/el-architecture/excalidraw/forkchoice-updated.excalidraw",
"chars": 103284,
"preview": "{\n \"type\": \"excalidraw\",\n \"version\": 2,\n \"source\": \"https://excalidraw.com\",\n \"elements\": [\n {\n \"type\": \"rec"
},
{
"path": "docs/images/el-architecture/excalidraw/payload-building-routine.excalidraw",
"chars": 59887,
"preview": "{\n \"type\": \"excalidraw\",\n \"version\": 2,\n \"source\": \"https://excalidraw.com\",\n \"elements\": [\n {\n \"id\": \"jWb2T"
},
{
"path": "docs/images/el-architecture/excalidraw/payload-validation-routine.excalidraw",
"chars": 56823,
"preview": "{\n \"type\": \"excalidraw\",\n \"version\": 2,\n \"source\": \"https://excalidraw.com\",\n \"elements\": [\n {\n \"id\": \"hyKAP"
},
{
"path": "docs/images/el-architecture/excalidraw/reth-architecture-overview.excalidraw",
"chars": 52641,
"preview": "{\n \"type\": \"excalidraw\",\n \"version\": 2,\n \"source\": \"https://excalidraw.com\",\n \"elements\": [\n {\n \"id\": \"ugEhf"
},
{
"path": "docs/images/el-specs/excalidraw/gas-header.excalidraw",
"chars": 95228,
"preview": "{\n \"type\": \"excalidraw\",\n \"version\": 2,\n \"source\": \"https://excalidraw.com\",\n \"elements\": [\n {\n \"type\": \"rec"
},
{
"path": "docs/images/el-specs/excalidraw/state.excalidraw",
"chars": 166341,
"preview": "{\n \"type\": \"excalidraw\",\n \"version\": 2,\n \"source\": \"https://excalidraw.com\",\n \"elements\": [\n {\n \"type\": \"rec"
},
{
"path": "docs/images/el-specs/excalidraw/stf_eels.excalidraw",
"chars": 31564,
"preview": "{\n \"type\": \"excalidraw\",\n \"version\": 2,\n \"source\": \"https://excalidraw.com\",\n \"elements\": [\n {\n \"type\": \"rec"
},
{
"path": "docs/index.html",
"chars": 19029,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n <meta charset=\"UTF-8\">\n <title>Protocol Wiki</title>\n <meta http-equiv=\"X-U"
},
{
"path": "docs/readme.md",
"chars": 2294,
"preview": "# **Welcome to the Protocol!**\n\nThe EPF Wiki is a collection of technical resources about the Ethereum protocol. It's ho"
},
{
"path": "docs/resources.md",
"chars": 205,
"preview": "# Resources\n\nThis wiki should not copy other existing materials, only collect them in the right context. Use this page t"
},
{
"path": "docs/topics.md",
"chars": 803,
"preview": "# Topics\n\n### #(##) [A](#a)|[B](#b)|[C](#c)|[D](#d)|[E](#e)|[F](#f)|[G](#g)|[H](#h)|[I](#i)|[J](#j)|[K](#k)|[L](#l)|[M]("
},
{
"path": "docs/wiki/CL/SSZ.md",
"chars": 34404,
"preview": "# Simple Serialize (SSZ)\n\n## Overview\n\n\nSimple Serialize (SSZ) is a serialization and [Merkleization](/wiki/CL/merkleiza"
},
{
"path": "docs/wiki/CL/beacon-api.md",
"chars": 4401,
"preview": "# Beacon Chain Spec and APIs\n\nAt the core of Ethereum Proof-of-Stake is a system chain called the \"Beacon Chain\". The be"
},
{
"path": "docs/wiki/CL/cl-architecture.md",
"chars": 17164,
"preview": "# Consensus Layer (CL) architecture\n\n> Many blockchain consensus protocols are _forkful_. Forkful chains use a fork choi"
},
{
"path": "docs/wiki/CL/cl-clients.md",
"chars": 9142,
"preview": "# Consensus Client\n\n> **Consensus clients**, formerly known as *eth2 clients*, run Ethereum's proof-of-stake consensus a"
},
{
"path": "docs/wiki/CL/cl-networking.md",
"chars": 23105,
"preview": "# Networking\n\nThe Consensus clients use [libp2p][libp2p-docs] as the peer-to-peer protocol, [libp2p-noise][libp2p-noise]"
},
{
"path": "docs/wiki/CL/cl-specs.md",
"chars": 893,
"preview": "# Consensus layer specification \n\n> :warning: This article is a [stub](https://en.wikipedia.org/wiki/Wikipedia:Stub), he"
},
{
"path": "docs/wiki/CL/gasper.md",
"chars": 1241,
"preview": "# Gasper\n\n## LMD GHOST (Latest Message Driven -- Greediest Heaviest Observed SubTree)\n\n<!-- \n- What is lmd-ghost\n- How s"
},
{
"path": "docs/wiki/CL/merkleization.md",
"chars": 23291,
"preview": "# Merkleization and Hash Tree Roots \n\n\nIn Ethereum consensus mechanism, it's critical for all participating nodes to agr"
},
{
"path": "docs/wiki/CL/overview.md",
"chars": 29406,
"preview": "# Consensus Layer Overview\n\nThe main challenge a consensus protocol aims to solve is building a reliable distributed sys"
},
{
"path": "docs/wiki/CL/syncing.md",
"chars": 6305,
"preview": "> [Subjective](https://dictionary.cambridge.org/dictionary/english/subjective): influenced by or based on personal belie"
},
{
"path": "docs/wiki/Cryptography/KZG.md",
"chars": 47587,
"preview": "# KZG Polynomial Commitment Scheme\n\n## [TLDR](#tldr)\nThe KZG (Kate, Zaverucha, and Goldwasser) commitment scheme is like"
},
{
"path": "docs/wiki/Cryptography/bls.md",
"chars": 16457,
"preview": "# Boneh-Lynn-Shacham (BLS) signature\n\n### TLDR;\n\n- Proof-of-stake protocols use digital signatures to identify their par"
},
{
"path": "docs/wiki/Cryptography/ecdsa.md",
"chars": 14343,
"preview": "# A Brief Introduction to ECDSA\n\nIt is impossible to overstate how modern cryptography redefines trust for all our digit"
},
{
"path": "docs/wiki/Cryptography/intro.md",
"chars": 4204,
"preview": "# Cryptography\n\n> :warning: This article is a [stub](https://en.wikipedia.org/wiki/Wikipedia:Stub), help the wiki by [co"
},
{
"path": "docs/wiki/Cryptography/keccak256.md",
"chars": 4033,
"preview": "# Keccak256\n\nKeccak256 is a cryptographic hash function prominently used in the Ethereum blockchain. \n\n## Brief History\n"
},
{
"path": "docs/wiki/Cryptography/post-quantum-cryptography.md",
"chars": 13595,
"preview": "# Post-Quantum Cryptography\n\nClassical cryptography safeguards information by leveraging the inherent difficulty of cert"
},
{
"path": "docs/wiki/EL/JSON-RPC.md",
"chars": 14776,
"preview": "# JSON-RPC\n\nThe JSON-RPC specification is a remote procedure call protocol encoded in JSON based on [OpenRPC](https://ww"
},
{
"path": "docs/wiki/EL/RLP.md",
"chars": 12220,
"preview": "# Recursive-Length Prefix (RLP) Serialization\n\nRecursive Length Prefix (RLP) is a core serialization protocol used withi"
},
{
"path": "docs/wiki/EL/block-production.md",
"chars": 10900,
"preview": "# Block building, processing, and applying transaction to state:\n\n## Intro\n\nBlock building is a crucial task for the Eth"
},
{
"path": "docs/wiki/EL/clients/besu.md",
"chars": 5814,
"preview": "# Besu Execution Client\n\nThis is a brief summary of important information you need to know when starting to contribute t"
},
{
"path": "docs/wiki/EL/clients/reth.md",
"chars": 22394,
"preview": "# Reth's architecture\n\n## Overview\n\nThe image represents a rough component flow of Reth's architecture:\n\n<img src=\"image"
},
{
"path": "docs/wiki/EL/data-structures.md",
"chars": 25626,
"preview": "# Data Structures in Execution Layer\n\nThe execution client stores the current state and historical blockchain data. In p"
},
{
"path": "docs/wiki/EL/devp2p.md",
"chars": 23921,
"preview": "# DevP2P\n\nThis section will cover the networking protocol used by the Execution Layer (EL).\nFirst, as it is referred in "
},
{
"path": "docs/wiki/EL/el-architecture.md",
"chars": 60940,
"preview": "# Client Architecture\n\n## Overview\n\nBeyond execution layer's fundamental role of transaction execution, the execution la"
},
{
"path": "docs/wiki/EL/el-clients.md",
"chars": 7890,
"preview": "# Execution Client\n\n> **Execution clients**, formerly known as *eth1 clients*, are implementing Ethereum [execution laye"
},
{
"path": "docs/wiki/EL/el-data-structures-summary.md",
"chars": 7334,
"preview": "# Ethereum Execution Layer Data Structures\n\n# Block Header\n\n| name | description| EIP / Fork |\n|------- | ------- | ----"
},
{
"path": "docs/wiki/EL/el-specs.md",
"chars": 102832,
"preview": "# Execution Layer Specification\n\nThe execution layer was originally specified in the yellow paper as it encompassed the "
},
{
"path": "docs/wiki/EL/engine-api.md",
"chars": 17064,
"preview": "# Engine API\n\n> [!WARNING]\n> The Glamsterdam section of this page covers active areas of research (EIP-7732 ePBS and EIP"
},
{
"path": "docs/wiki/EL/eof.md",
"chars": 7714,
"preview": "# EVM Object Format (EOF)\n\nThe EVM Object Format (EOF) is an extensible and versioned container format for EVM bytecode "
},
{
"path": "docs/wiki/EL/evm.md",
"chars": 29426,
"preview": "# The Ethereum Virtual Machine (EVM)\n\nThe Ethereum Virtual Machine (EVM) is the heart of the Ethereum World Computer. It"
},
{
"path": "docs/wiki/EL/precompiled-contracts.md",
"chars": 11296,
"preview": "# Precompiled contracts\n\nPrecompiled contracts are a set of special accounts, each containing a built-in function with a"
},
{
"path": "docs/wiki/EL/transaction.md",
"chars": 24530,
"preview": "# Transaction\n\nA **transaction** is a cryptographically-signed instruction issued by **an external account**, submitted "
},
{
"path": "docs/wiki/dev/core-development.md",
"chars": 2891,
"preview": "# Core development \n\n> :warning: This article is a [stub](https://en.wikipedia.org/wiki/Wikipedia:Stub), help the wiki b"
},
{
"path": "docs/wiki/dev/cs-resources.md",
"chars": 9098,
"preview": "# Computer Science Resources\n\n## Introduction / fundamentals\n\n- 🎥 [Map of Computer Science](https://www.youtube.com/watc"
},
{
"path": "docs/wiki/dev/pm.md",
"chars": 1393,
"preview": "# Core development coordination \n\n> :warning: This article is a [stub](https://en.wikipedia.org/wiki/Wikipedia:Stub), he"
},
{
"path": "docs/wiki/epf.md",
"chars": 2231,
"preview": "# Ethereum Protocol Fellowship Cohort 7 \n\nEPF opens its doors once again with new cohort 7 in 2026! Learn more about the"
},
{
"path": "docs/wiki/pectra-faq.md",
"chars": 20682,
"preview": "<!-- markdownlint-disable MD013 -->\n\n# Pectra FAQ\n\n**What is Pectra?**\nPectra, (Prague - Electra), is an Ethereum networ"
},
{
"path": "docs/wiki/protocol/architecture.md",
"chars": 986,
"preview": "# Protocol Architecture Overview\n\n> :warning: This article is a [stub](https://en.wikipedia.org/wiki/Wikipedia:Stub), he"
},
{
"path": "docs/wiki/protocol/design-rationale.md",
"chars": 22729,
"preview": "# [Protocol Design Philosophy](#protocol-design-philosophy)\n\nThese are the core tenets that sparked the work on Ethereum"
},
{
"path": "docs/wiki/protocol/history.md",
"chars": 7349,
"preview": "# Protocol history and evolution\n\n> :warning: This article is a [stub](https://en.wikipedia.org/wiki/Wikipedia:Stub), he"
},
{
"path": "docs/wiki/protocol/img/history/ethereum-nodes.excalidraw",
"chars": 41679,
"preview": "{\n \"type\": \"excalidraw\",\n \"version\": 2,\n \"source\": \"https://excalidraw.com\",\n \"elements\": [\n {\n \"id\": \"Nb67f"
},
{
"path": "docs/wiki/protocol/prehistory.md",
"chars": 30506,
"preview": "# Prehistory of Ethereum\n\n> “Heroes are heroes because they are heroic in behavior, not because they won or lost.”\\\n> — "
},
{
"path": "docs/wiki/research/FCR/FCR.md",
"chars": 8425,
"preview": "# Fast Confirmation Rule (FCR)\n\n# Overview\n\n**Fast Confirmation Rule (FCR)** is an algorithm that allows Ethereum nodes "
},
{
"path": "docs/wiki/research/PBS/ET.md",
"chars": 11790,
"preview": "# Execution Tickets (ET)\n> [!WARNING]\n> This document covers an active area of research, may be outdated at time of read"
},
{
"path": "docs/wiki/research/PBS/PEPC.md",
"chars": 13138,
"preview": "# Protocol-Enforced Proposer Commitments (PEPC)\n\nProtocol-Enforced Proposer Commitments (PEPC), a conceptual extension a"
},
{
"path": "docs/wiki/research/PBS/PTC.md",
"chars": 5790,
"preview": "# Payload-Timeliness Committee (PTC) for EPBS\n\nThe Payload-Timeliness Committee (PTC) proposal is a design for enshrinin"
},
{
"path": "docs/wiki/research/PBS/TBHL.md",
"chars": 8595,
"preview": "# The Two-Block HeadLock (TBHL) proposal for ePBS\n\nThe Two-Block HeadLock (TBHL) design represents an innovative approac"
},
{
"path": "docs/wiki/research/PBS/ePBS-Specs.md",
"chars": 41679,
"preview": "# ePBS Design Specifications\n\nThe [current ePBS specification](https://hackmd.io/@potuz/rJ9GCnT1C) and the [GitHub repo]"
},
{
"path": "docs/wiki/research/PBS/ePBS.md",
"chars": 21122,
"preview": "# Enshrined Proposer-Builder Separation (ePBS)\n\n## Roadmap tracker\n\n| Upgrade | URGE | Track | "
},
{
"path": "docs/wiki/research/PBS/mev-boost.md",
"chars": 5557,
"preview": "# Mev-boost: A popular PBS Implementation\n\n[Mev-boost](https://github.com/flashbots/mev-boost) is a widely recognized, o"
},
{
"path": "docs/wiki/research/PBS/mev.md",
"chars": 3301,
"preview": "# Maximal Extractable Value (previously Miner Extractable Value)\n\nMaximal Extractable Value (MEV) refers to the the maxi"
},
{
"path": "docs/wiki/research/PBS/pbs.md",
"chars": 18740,
"preview": "# Proposer Builder Separation (PBS)\n\nIn Ethereum's current system, validators both create and broadcast blocks. They bun"
},
{
"path": "docs/wiki/research/Preconfirmations/BasedSequencingPreconfs.md",
"chars": 19281,
"preview": "# Ethereum Based Sequencing with Preconfirmations\n\n## [Overview](#overview)\n\nEthereum's evolving ecosystem is set to int"
},
{
"path": "docs/wiki/research/Preconfirmations/Preconfirmations.md",
"chars": 11943,
"preview": "\n# Ethereum Based Preconfirmations\n\n## [Overview](#overview)\n\nBased preconfirmations (preconfs) represent a significant "
},
{
"path": "docs/wiki/research/SSF.md",
"chars": 5877,
"preview": "# Single slot finality (SSF)\n\n## Roadmap tracker\n\n| Upgrade | URGE | Track | Topic | "
},
{
"path": "docs/wiki/research/account-abstraction/eip-7702.md",
"chars": 2395,
"preview": "# EIP-7702: Set EOA code\n\n> :warning: This article is a [stub](https://en.wikipedia.org/wiki/Wikipedia:Stub), help the w"
},
{
"path": "docs/wiki/research/cl-upgrades.md",
"chars": 565,
"preview": "# Beacon Chain upgrades\n\n### Inclusion Lists\n### Preconfirmations\n### Raise MAX_EFFECTIVE_BALANCE\n### Staking pools solu"
},
{
"path": "docs/wiki/research/eODS.md",
"chars": 25358,
"preview": "# Enshrined Operator-delegator separation (eODS)\n\n> [!WARNING]\n> This document covers an active area of research, may be"
},
{
"path": "docs/wiki/research/history-expiry/history-expiry.md",
"chars": 26171,
"preview": "# History Expiry In Ethereum\n\n> **Recommended pre-reading**\n> - [Ethereum Node Architecture](/wiki/EL/el-specs.md)\n> - ["
},
{
"path": "docs/wiki/research/img/scaling/layer-1-scaling.excalidraw",
"chars": 22520,
"preview": "{\n \"type\": \"excalidraw\",\n \"version\": 2,\n \"source\": \"https://excalidraw.com\",\n \"elements\": [\n {\n \"type\": \"lin"
},
{
"path": "docs/wiki/research/img/scaling/layer-2-scaling.excalidraw",
"chars": 15479,
"preview": "{\n \"type\": \"excalidraw\",\n \"version\": 2,\n \"source\": \"https://excalidraw.com\",\n \"elements\": [\n {\n \"type\": \"lin"
},
{
"path": "docs/wiki/research/light-clients.md",
"chars": 3250,
"preview": "# Light Clients\n\n> :warning: This article is a [stub](https://en.wikipedia.org/wiki/Wikipedia:Stub), help the wiki by [c"
},
{
"path": "docs/wiki/research/peerdas.md",
"chars": 7777,
"preview": "# Introduction to Ethereum PeerDAS\n\n> :warning: This article is a [stub](https://en.wikipedia.org/wiki/Wikipedia:Stub), "
},
{
"path": "docs/wiki/research/roadmap.md",
"chars": 36442,
"preview": "# Ethereum Protocol Roadmap \n\nThe development philosophy of Ethereum is open to protocol evolution and certain risk aver"
},
{
"path": "docs/wiki/research/scaling/core-changes/core-changes.md",
"chars": 2738,
"preview": "# Changes to Ethereum Core to Achieve Scalability\n\nWith the [Rollup-Centric Roadmap](https://ethereum-magicians.org/t/a-"
},
{
"path": "docs/wiki/research/scaling/core-changes/eip-4844.md",
"chars": 15860,
"preview": "# EIP-4844\n\n## Overview\n\nL2 Rollups must allow the permissionless reconstruction of the L2 state. To achieve this, they "
},
{
"path": "docs/wiki/research/scaling/data-availability.md",
"chars": 6503,
"preview": "# Data Availability\n\nA core responsibility of any layer-1 blockchain is to guarantee _data availability_.\n\nData availabi"
},
{
"path": "docs/wiki/research/scaling/scaling.md",
"chars": 16049,
"preview": "# Scaling\n\nIn computer systems, scalability refers to the ability of a system to perform well under increased or expandi"
},
{
"path": "docs/wiki/testing/consensus-spec-tests.md",
"chars": 2254,
"preview": "# Consensus-spec tests\n\n> :warning: This article is a [stub](https://en.wikipedia.org/wiki/Wikipedia:Stub), help the wik"
},
{
"path": "docs/wiki/testing/formal-verification.md",
"chars": 13810,
"preview": "# A brief introduction to formal verification\n\n## Overview\n\nFormal methods are techniques used for mathematical analysis"
},
{
"path": "docs/wiki/testing/hive.md",
"chars": 1161,
"preview": "# Hive testing\n\n> :warning: This article is a [stub](https://en.wikipedia.org/wiki/Wikipedia:Stub), help the wiki by [co"
},
{
"path": "docs/wiki/testing/incidents.md",
"chars": 4271,
"preview": "# Notable mainnet incidents\n\n> :warning: This article is a [stub](https://en.wikipedia.org/wiki/Wikipedia:Stub), help th"
},
{
"path": "docs/wiki/testing/kurtosis.md",
"chars": 7459,
"preview": "# Kurtosis for Local Devnets\n\n## Overview \n[**Kurtosis**](https://docs.kurtosis.com/) is a development and testing platf"
},
{
"path": "docs/wiki/testing/overview.md",
"chars": 2230,
"preview": "# Testing\n\nEthereum client implementations undergo constant testing on different levels which ensures security and stabi"
},
{
"path": "docs/wiki/wiki-intro.md",
"chars": 1363,
"preview": "<!-- markdownlint-disable MD013 -->\n\n# Welcome to Protocol Wiki\n\nProtocol Wiki is a learning resource for anyone diving "
},
{
"path": "notes/Chloe_notes.md",
"chars": 1313,
"preview": "Guest hangout session and lots of interesting topics were discussion with bunch of links. So I briefly summarized the li"
},
{
"path": "notes/gorondan.md",
"chars": 4008,
"preview": "# Goron Dan Notes\n\n## Objectives\n\nThe purpose to joining this program is to get a deeper understanding of the infrastruc"
},
{
"path": "notes/gorondan_MVEls_notes.md",
"chars": 3457,
"preview": "# MINIMUM VIABLE ENSHRINEMENT OF LIQUID STAKING (MVE-LS)\n\n## What is MVE-LS?\nMVE-LS is the minimum set of measures that "
},
{
"path": "notes/mario.md",
"chars": 355,
"preview": "# Hangout call #1\n\nOn Thursday, March 7 we are having our first EPFsg hangout. Looking forward to finally speak to folks"
},
{
"path": "notes/steven_notes/PBS.md",
"chars": 4904,
"preview": "# Proposer-builder separation(PBS)\n\n## Introduction\nBrief overview of PBS, emphasizing its importance for Ethereum's sca"
},
{
"path": "notes/steven_notes/weekly_updates_1.md",
"chars": 5339,
"preview": "# Weekly Update #1\n\n> Discover more about [Steven's EPF journey](https://hackmd.io/@qz8qnEAKSzCXkPyX1NRrAg)\n\n## Objectiv"
},
{
"path": "notes/steven_notes/weekly_updates_2.md",
"chars": 2457,
"preview": "# Weekly Update #2\n\n> Discover more about [Steven's EPF journey](https://hackmd.io/@qz8qnEAKSzCXkPyX1NRrAg)\n\n## Objectiv"
},
{
"path": "notes/wiki_contributors_meeting/2024-04-18-meeting-1.md",
"chars": 5099,
"preview": "# Wiki Contributors Meeting #1 - April 18, 2024 (5PM UTC)\n\n## Agenda\n\n- Current state of the wiki, issues, PRs\n- Feedbac"
},
{
"path": "notes/wiki_contributors_meeting/2024-05-02-meeting-2.md",
"chars": 5765,
"preview": "# Wiki Contributors Meeting #2 - May 02, 2024 (4PM UTC)\n\n## Agenda\n\n- Progress since last call, reflecting on the curren"
},
{
"path": "notes/wiki_contributors_meeting/2024-05-16-meeting-3.md",
"chars": 3340,
"preview": "# Wiki Contributors Meeting #3 - May 16, 2024 (4PM UTC)\n\n## Agenda\n\n- Progress since last call, reflecting on the curren"
},
{
"path": "notes/wiki_contributors_meeting/2024-06-20-meeting-4.md",
"chars": 6256,
"preview": "### **Meeting Minutes:**\n\n**Attendance**\nMario\nRory\nDanGoron\nSid\nHopinheimer\nKira\nGlory Agatevure (gconnect)\nZarathustra"
},
{
"path": "notes/wiki_contributors_meeting/2024-07-25-meeting-5.md",
"chars": 4286,
"preview": "# Wiki Contributors Meeting #5 - Jul 25, 2024 (3 PM UTC)\n\n## Agenda\n\n- State of the wiki; items in progress since the la"
},
{
"path": "notes/wiki_contributors_meeting/2025-01-23-meeting-6.md",
"chars": 4890,
"preview": "# Wiki Contributors Meeting #6 - Jan 23, 2025 (5 PM UTC)\n\n## Agenda\n\n### Intro \nMario drops some alpha about the new SG "
},
{
"path": "notes/your-name notes.md",
"chars": 0,
"preview": ""
},
{
"path": "wordlist.txt",
"chars": 8555,
"preview": "personal_ws-1.1 en 10000 utf-8\naantop\nABI\naccelerometer\naccesedAccountAddresses\naccesedStorageKeys\naccesslistAddress\nacc"
}
]
About this extraction
This page contains the full source code of the eth-protocol-fellows/protocol-studies GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 152 files (2.0 MB), approximately 547.5k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.