Go implementation of the Ethereum protocol
Find a file
2026-03-22 13:09:42 +02:00
.gitea/workflows .gitea/workflows, build: add release build for keeper (#32632) 2025-10-24 17:19:25 +02:00
.github ci: default ci for build and tests 2026-03-22 10:09:50 +02:00
accounts crypto/keccak: vendor in golang.org/x/crypto/sha3 (#33323) 2026-02-03 14:55:27 -07:00
beacon core/vm: implement eip-7843: SLOTNUM (#33589) 2026-02-26 13:53:46 +01:00
build build: fix signify flag name in doWindowsInstaller (#34006) 2026-03-14 10:22:50 +01:00
cmd cmd: add support for enumerating a single storage trie (#34051) 2026-03-19 09:52:10 +01:00
common crypto/keccak: vendor in golang.org/x/crypto/sha3 (#33323) 2026-02-03 14:55:27 -07:00
consensus miner: add OpenTelemetry spans for block building path (#33773) 2026-03-16 19:24:41 +01:00
console console: fix autocomplete digit range to include 0 (#34003) 2026-03-13 12:39:45 +01:00
core core/state: bypass per-account updateTrie in IntermediateRoot for binary trie (#34022) 2026-03-20 15:40:04 +01:00
crypto crypto/secp256k1: fix coordinate check 2026-02-17 17:09:18 +01:00
docs docs: fix typo (#30740) 2024-11-11 12:14:18 +01:00
eth eth/filters: rangeLogs should error on invalid block range (#33763) 2026-03-18 23:31:40 +01:00
ethclient ethclient/gethclient: callTracer methods (#31510) 2026-02-10 17:54:37 +01:00
ethdb core, ethdb, triedb: add batch close (#33708) 2026-03-04 11:17:47 +01:00
ethstats ethstats: report newPayload processing time to stats server (#33395) 2026-01-05 17:49:30 +01:00
event event: fix typo (#29749) 2024-05-10 19:44:07 +02:00
graphql core/vm: implement eip-7843: SLOTNUM (#33589) 2026-02-26 13:53:46 +01:00
internal internal/ethapi: warn on reaching global gas cap for eth_simulateV1 (#34016) 2026-03-17 13:52:04 +01:00
log log: using testing.B.Loop (#32663) 2025-09-19 17:05:21 -06:00
metrics metrics: allow changing influxdb interval (#33767) 2026-02-23 14:27:25 +01:00
miner miner: add OpenTelemetry spans for block building path (#33773) 2026-03-16 19:24:41 +01:00
node node: disable http2 for auth API (#33922) 2026-03-03 00:02:44 +01:00
p2p p2p: track in-progress inbound node IDs (#33198) 2026-03-20 05:52:15 +01:00
params core: Implement eip-7954 increase Maximum Contract Size (#33832) 2026-03-12 10:23:49 +08:00
rlp rlp: add Size method to EncoderBuffer (#34052) 2026-03-19 18:26:00 +01:00
rpc rpc,internal/telemetry: fix deferred spanEnd to capture errors via pointer (#33772) 2026-02-14 01:00:14 +01:00
signer signer/core: prevent nil pointer panics in keystore operations (#33829) 2026-03-06 21:50:30 +01:00
tests core, miner, tests: introduce codedb and simplify cachingDB (#33816) 2026-03-10 08:29:21 +01:00
trie trie/bintrie: fix NodeIterator Empty node handling and expose tree accessors (#34056) 2026-03-20 13:53:14 -04:00
triedb triedb/pathdb: enhance history index initer (#33640) 2026-03-17 15:29:30 +01:00
version version: begin v1.17.2 release cycle 2026-03-03 13:49:09 +01:00
.dockerignore cmd, internal/build, docker: advertise commit date in unstable build versions (#19522) 2019-05-08 16:44:28 +03:00
.gitattributes .gitattributes: enable solidity highlighting on github (#16425) 2018-04-03 15:21:24 +02:00
.gitignore .gitea/workflows, build: add release build for keeper (#32632) 2025-10-24 17:19:25 +02:00
.gitmodules tests: external evm benchmarks (#24050) 2022-01-28 08:47:19 +01:00
.golangci.yml build: upgrade to golangci-lint v2 (#31530) 2025-04-03 15:18:35 +02:00
.mailmap AUTHORS, .mailmap: update name and email attribution (#31624) 2025-05-15 21:55:38 +02:00
AGENTS.md AGENTS.md: add instruction not to commit binaries (#33921) 2026-03-02 06:42:38 -07:00
appveyor.yml .github: add 32-bit CI targets (#32911) 2025-10-28 13:56:44 +01:00
AUTHORS AUTHORS, .mailmap: update name and email attribution (#31624) 2025-05-15 21:55:38 +02:00
COPYING COYPING: restore the full text text of GPL (#21568) 2020-09-15 08:27:17 +02:00
COPYING.LESSER all: update license information 2015-07-07 14:12:44 +02:00
docker-compose.yml fix: initial docker-compose with dev mode and basic research notes 2026-03-22 13:09:42 +02:00
Dockerfile Dockerfile: upgrade to Go 1.26 (#33899) 2026-02-26 21:18:00 +01:00
Dockerfile.alltools Dockerfile: upgrade to Go 1.26 (#33899) 2026-02-26 21:18:00 +01:00
go.mod go.mod, go.sum: update karalabe/hid to fix broken FreeBSD ports build (#34008) 2026-03-16 14:35:07 +08:00
go.sum go.mod, go.sum: update karalabe/hid to fix broken FreeBSD ports build (#34008) 2026-03-16 14:35:07 +08:00
interfaces.go ethclient: add support for eth_simulateV1 (#32856) 2025-10-16 17:32:55 +02:00
Makefile Makefile: add make evm (#32029) 2025-06-13 16:16:49 +02:00
oss-fuzz.sh build: fix missing '!' in shebang of generated oss-fuzz scripts (#34044) 2026-03-18 13:56:26 +01:00
README.md fix: initial docker-compose with dev mode and basic research notes 2026-03-22 13:09:42 +02:00
README_MAIN.md fix: initial docker-compose with dev mode and basic research notes 2026-03-22 13:09:42 +02:00
SECURITY.md cmd/geth: remove deprecated vulnerability check command (#33498) 2025-12-30 21:04:38 +01:00

Lime Chain DevOps Take Home Task Solution Documentation

Expected initial rough time to finish the task - 1 week.

Sub tasks should take several hours each - but I lack some terminology and must find good/best practices for deployment and understand how the blockchain and the go-ethereum project works.

Original README.md file is README_MAIN.md

Requirements based on research

Running local devnet:

Possible/Similar implementations:

Phase 1 CI/CD GitHub Actions and Container Building

  • Fork the go-ethereumn repo

  • Set up GitHub actions with PR with label CI:Build

    • build new docker image of the given project - so we need a Dockerfile with multi-stage build
    • upload to a container registry
    • libc might not be required in the build for CGO_ENABLED - but we we must check and note this that we can do it.
  • set up docker-compose that runs local devnet with the new image

Readings:

Phase 2

  • Research hardhat
  • Create Sample HardHat Project - following docs - I guess I dont have to learn the whole framework

Go Ethereum

Tasks:

  • Build the image
  • Set up docker compose for the local devnet

One of the tools that we can use based on docs is Kurtosis that has this package: - https://github.com/ethpandaops/ethereum-package but the task requires us to run it in a docker-compose.yaml file.

The requirements to run a devnet based on research:

TODO readings:

MONITORING - https://geth.ethereum.org/docs/monitoring/dashboards

  • Choose a stable release branch - v1.17.1

run a test build with the default provided image:

docker build -t go-etherium:1.17.1 -f Dockerfile .

Security:

# Block:
- 8545 # for the JSON-RPC requests
# Allow:
- TCP 30303
- UDP 30303

Exposing api endpoints require:

  • proxies,
  • WAFs/Firewall
  • App-level filtering
  • rate limits
  • logging
  • tls termination
  • monitoring

All ports:

  • 8545 TCP, used by the HTTP based JSON RPC API
  • 8546 TCP, used by the WebSocket based JSON RPC API
  • 8547 TCP, used by the GraphQL API
  • 30303 TCP and UDP, used by the P2P protocol running the network

New Terms and Tech I need to learn

go-ethereum

The official Go implementation of the Ethereum protocol, also known as geth. It includes a command-line interface and a library for building Ethereum applications in Go.

geth - The Etherium go client implementation clef - signing tool for geth devp2p - utility to interact with nodes on the networking layer without running a whole blockchain abigen - source code generator to convert Ethereium contract definitions into easy-to-use, compile type-safe Go packages. Can also accept Solidity soruce files. evm - developer utility to interact with the Ethereum Virtual Machine (EVM) without running a whole blockchain rlpdump - dev utility tool to convert binary RLP(Recursive Length Prefix) dumps to user friendlier representation.

DApps and Smart Contracts

DApps - decentralized applicaiton - can operate atonomously, typically thoruhg the use of smart contracts, that run on a blockchain or other dustributed legder system.

DApps use Smart contracts which are programs that run on the blockchain and execute operations. Multiple smart contracts can run one one DApp but in order to deploy them they need gas - which is the currency that is used for deploying and executing them.

AN complex smart contract of a DAppp that operats on the Ethereum blockchain may fail to be deployed if it costs too much gas, leading to lower throughput and longer wait times for execution.

Operation:

  • Dapps use consesus mechanisms over the network - proof-of-work(POW) and proof-of-stake(POS). POW - Mining consensus - with computational power POS - consensus mechanism that supports DApps through validatiors that secure the network by having a stake and a percent ownership over the application.

Genesis Block

Clients

  • execution client

  • consensus client

  • validator client

  • Consensus clients - (such as Prysm, Teku, Nimbus, Lighthouse, Lodestar) run Ethereum's proof-of-stake consensus algorithm allowing the network to reach agreement about the head of the Beacon Chain. Consensus clients do not participate in validating/broadcasting transactions or executing state transitions. This is done by execution clients. Consensus clients do not attest to, or propose new blocks. This is done by the validator client which is an optional add-on to the consensus client.

Validator - A node in a proof-of-stake system responsible for storing data, processing transactions, and adding new blocks to the blockchain. To activate validator software, you need to be able to stake 32 ETH. More on staking in Ethereum.