From 012f1ac54fe4448e1ab0230219c62c080f7f96b1 Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 13:38:45 -0300 Subject: [PATCH 01/19] Update README --- README.md | 175 +++++++++++++----------------------------------------- 1 file changed, 40 insertions(+), 135 deletions(-) diff --git a/README.md b/README.md index 4e5f7a56..df633834 100644 --- a/README.md +++ b/README.md @@ -1,146 +1,51 @@ -# :crab: RUST PROJECT TEMPLATE - TODO(template) PUT PROJECT NAME HERE - -[![Docs](https://github.com/NethermindEth/rust-template/actions/workflows/docs.yml/badge.svg)](https://github.com/NethermindEth/rust-template/actions/workflows/docs.yml) -[![Lint](https://github.com/NethermindEth/rust-template/actions/workflows/linter.yml/badge.svg)](https://github.com/NethermindEth/rust-template/actions/workflows/linter.yml) -[![Build](https://github.com/NethermindEth/rust-template/actions/workflows/build-and-test.yml/badge.svg)](https://github.com/NethermindEth/rust-template/actions/workflows/build-and-test.yml) -[![Dependencies](https://github.com/NethermindEth/rust-template/actions/workflows/dependency-audit.yml/badge.svg)](https://github.com/NethermindEth/rust-template/actions/workflows/dependency-audit.yml) -[![UB](https://github.com/NethermindEth/rust-template/actions/workflows/ub-detection.yml/badge.svg)](https://github.com/NethermindEth/rust-template/actions/workflows/ub-detection.yml) -[![Coverage](https://github.com/NethermindEth/rust-template/actions/workflows/coverage.yml/badge.svg)](https://github.com/NethermindEth/rust-template/actions/workflows/coverage.yml) - - -![Rust](https://img.shields.io/badge/rust-stable-orange.svg) - +# Pluto +[![Docs](https://github.com/NethermindEth/charon-rs/actions/workflows/docs.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/docs.yml) +[![Lint](https://github.com/NethermindEth/charon-rs/actions/workflows/linter.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/linter.yml) +[![Build](https://github.com/NethermindEth/charon-rs/actions/workflows/test.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/test.yml) +[![Dependencies](https://github.com/NethermindEth/charon-rs/actions/workflows/dependency-audit.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/dependency-audit.yml) +[![Coverage](coverage.svg) +![Rust](https://img.shields.io/badge/rust-1.89-orange.svg) [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) - -[![Crates.io](https://img.shields.io/crates/v/{{CRATE_NAME}}.svg)](https://crates.io/crates/{{CRATE_NAME}}) -[![Documentation](https://docs.rs/{{CRATE_NAME}}/badge.svg)](https://docs.rs/{{CRATE_NAME}}) - -TODO(template) describe the project - -## TODO(template) - rust template usage (remove this section after setup) - -This is a rust template from ZKE team :rocket: (a focus on cryptographic libs in sync Rust). - -:bike: To use it - find `TODO(template)` over the repository and set appropriate values. - -- [ ] Settings -> Collaborators and teams - add your team group as admins for the repo (e.g. [zk-engineering](https://github.com/orgs/NethermindEth/teams/zk-engineering)) -- [ ] Settings -> General -> Pull Requests - allow only `Allow squash merging`, also tick `Automatically delete head branches` -- [ ] Settings -> Pages -> Build and deployment -> Source Github Actions -- [ ] Update the description of the repo at the repo's page, add tag topics -- [ ] Introduce necessary sections at the repo's page (releases, deployments etc) -- [ ] Add a website url (if applicable) or a docs page (see [docs](./.github/workflows/docs.yml) flow for public repos) -- [ ] Add [all contributors](https://allcontributors.org/docs/en/cli/installation) -- [ ] Import protection rulesets (see below) in the repo settings (Settings -> Rules -> Rulesets -> Import a ruleset) -- [ ] For binary crates with specific requirements to Rust features consider also [pinning](https://rust-lang.github.io/rustup/overrides.html#the-toolchain-file) the rust toolchain version - -Main branch protection - -```json -{ - "id": 4981961, - "name": "Main protection", - "target": "branch", - "source_type": "Repository", - "source": "NethermindEth/rust-template", - "enforcement": "active", - "conditions": { - "ref_name": { - "exclude": [], - "include": [ - "~DEFAULT_BRANCH" - ] - } - }, - "rules": [ - { - "type": "deletion" - }, - { - "type": "non_fast_forward" - }, - { - "type": "required_deployments", - "parameters": { - "required_deployment_environments": [] - } - }, - { - "type": "required_signatures" - }, - { - "type": "pull_request", - "parameters": { - "required_approving_review_count": 1, - "dismiss_stale_reviews_on_push": false, - "require_code_owner_review": false, - "require_last_push_approval": false, - "required_review_thread_resolution": true, - "automatic_copilot_code_review_enabled": false, - "allowed_merge_methods": [ - "merge", - "squash", - "rebase" - ] - } - } - ], - "bypass_actors": [] -} -``` - -Signed commits - -```json -{ - "id": 4982030, - "name": "Signed commits", - "target": "branch", - "source_type": "Repository", - "source": "NethermindEth/rust-template", - "enforcement": "active", - "conditions": { - "ref_name": { - "exclude": [], - "include": [ - "~ALL" - ] - } - }, - "rules": [ - { - "type": "required_signatures" - } - ], - "bypass_actors": [] -} -``` - -## How to use - -To generate a new project from this template, you need to install [cargo-generate](https://github.com/cargo-generate/cargo-generate) and run: - -```sh -cargo install cargo-generate - -cargo generate --git https://github.com/NethermindEth/rust-template -``` + +Pluto is an alternative implementation of [Charon](https://github.com/ObolNetwork/charon/), a distributed validator middleware client for Ethereum Staking. It enables a group of independent operators to safely run a single validator by coordinating duties across multiple nodes. + +Pluto, like Charon, is used by stakers to distribute the responsibility of running Ethereum Validators across a number of different instances and client implementations. + +See the official docs at https://docs.obol.tech for introductions and key concepts. + +## Documentation + +The [Obol Docs](https://docs.obol.tech/) website is the best place to get started. +The important sections are [intro](https://docs.obol.org/learn/charon), +[key concepts](https://docs.obol.tech/docs/int/key-concepts) and [charon](https://docs.obol.tech/docs/charon/intro). + +## Version compatibility + +Considering [semver](https://semver.org) as the project's versioning scheme, two given versions of Charon are: + - **compatible** if their `MAJOR` number is the same, `MINOR` and `PATCH` numbers differ + - **incompatible** if their `MAJOR` number differs + +There are several reasons to justify a new `MAJOR` release, for example: + - a new Ethereum hardfork + - an old Ethereum hardfork is removed due to network inactivity + - modifications to the internal P2P network or consensus mechanism requiring deep changes to the codebase + +The `charon dkg` subcommand **is more restrictive** than this general compatibility promise; all peers should use matching`MAJOR` and`MINOR` versions of Charon for the DKG process, patch versions may differ though it is recommended to use the latest patch of any version. ## Examples -See [examples](./examples/). +Examples are located in crate-specific example folders: -## License +- [Cluster](crates/charon-cluster/src/examples/) +- [P2P](crates/charon-p2p/examples/) +- [Peerinfo](crates/peerinfo/examples) +- [Relay Server](crates/relay-server/examples) +- [Tracing](crates/tracing/examples) -TODO(template) - update [license](https://www.notion.so/nethermind/Open-Source-Software-Usage-and-Licensing-Policy-1c3360fc38d080fd9e61c29b35d1d5af) if needed. -For commercial licenses it is required to get an approve from Legal. +## License Apache 2.0 ## Would like to contribute? -see [Contributing](./CONTRIBUTING.md). +See [Contributing](./CONTRIBUTING.md). From 0b7284c5bc7b087253749c5710a9be7b2740b22c Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 13:39:01 -0300 Subject: [PATCH 02/19] Remove commit signing --- CONTRIBUTING.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9db1fc7f..399c24a6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,13 +1,5 @@ # Contributor's guide -## Commit signing - -Enable [commit signing](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits) - -```sh -git config commit.gpgsign true -``` - ## Prerequisites * [Rust](https://www.rust-lang.org/tools/install) From 7f0a5549788723f60cca6b584fe4345eb408ec18 Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 13:39:32 -0300 Subject: [PATCH 03/19] Update docs command --- CONTRIBUTING.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 399c24a6..581ef8f7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,13 +19,7 @@ git config core.hooksPath .githooks After cloning the repository, follow the instructions below to run the documentation locally: ```sh -cargo doc -``` - -Docs for `TODO(template) template_crate`: - -```sh -RUSTDOCFLAGS="--html-in-header katex-header.html" cargo doc --no-deps -p template_crate --open +cargo doc --locked --no-deps --workspace --all-features ``` ## Performance From a8dac5dee5373cc47e3baf123b226d9a9facc821 Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 13:42:24 -0300 Subject: [PATCH 04/19] Remove CODEOWNERS - Not needed --- CODEOWNERS | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 CODEOWNERS diff --git a/CODEOWNERS b/CODEOWNERS deleted file mode 100644 index b9f504c7..00000000 --- a/CODEOWNERS +++ /dev/null @@ -1,24 +0,0 @@ -# CODEOWNERS TODO(template) -# -# This file defines code ownership for this repository. -# Code owners are automatically requested for review when someone opens a pull request. -# -# 📖 Learn more: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners - -# ============================================================================= -# GLOBAL OWNERS -# ============================================================================= -# These owners will be requested for review on ALL pull requests -# Uncomment and customize the line below: - -* @NethermindEth/zk-engineering -# * @username1 @username2 - -# ============================================================================= -# PATH-BASED OWNERSHIP -# ============================================================================= -# Define owners for specific files or directories -# Examples: - -# *.md @username -# /docs/ @username1 @username2 From 8eb1315abb29e99a36ce183829bedde196024ffd Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 13:47:40 -0300 Subject: [PATCH 05/19] Update build/test/docs instructions --- CONTRIBUTING.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 581ef8f7..8e572876 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,11 +15,25 @@ Install a pre-push git hook: git config core.hooksPath .githooks ``` +## Building +To build the project with all its crates, run: + +```sh +cargo build --workspace --all-features +``` + +## Run Unit and Integration Test +To run all tests - unit and integration - run: + +```sh +cargo test --workspace --all-features +``` + ## Running the Rust Documentation Locally -After cloning the repository, follow the instructions below to run the documentation locally: +To build the documentation locally: ```sh -cargo doc --locked --no-deps --workspace --all-features +cargo doc -workspace --all-features --no-deps ``` ## Performance From aca3cf21b53960e777b01d0e8091cf2ca460db64 Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 14:09:37 -0300 Subject: [PATCH 06/19] Update Dockerfile - Include build dependencies - Remove unused port - Use ENTRYPOINT instead of CMD --- Dockerfile | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 55d334fc..cdee3d7e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,15 @@ FROM rust:1.89 AS builder +RUN apt-get update && apt-get install -y protobuf-compiler=3.21.12-11 +RUN cargo install oas3-gen@0.24.0 + WORKDIR /build COPY . . RUN cargo build --release --package charon-cli --locked FROM debian:bookworm-slim AS app -COPY --from=builder /build/target/release/charon-cli /app/bin/charon-cli +COPY --from=builder /build/target/release/pluto /app/bin/pluto + EXPOSE 3000 -CMD ["/app/bin/charon-cli"] +ENTRYPOINT ["/app/bin/pluto"] From b24c99587d36a392774c55f62ebe6e03b58d46d7 Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 15:08:47 -0300 Subject: [PATCH 07/19] Fix formatting issues in README and CONTRIBUTING files --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8e572876..dc5b353d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -33,7 +33,7 @@ cargo test --workspace --all-features To build the documentation locally: ```sh -cargo doc -workspace --all-features --no-deps +cargo doc --workspace --all-features --no-deps ``` ## Performance diff --git a/README.md b/README.md index df633834..4b65df8b 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Lint](https://github.com/NethermindEth/charon-rs/actions/workflows/linter.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/linter.yml) [![Build](https://github.com/NethermindEth/charon-rs/actions/workflows/test.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/test.yml) [![Dependencies](https://github.com/NethermindEth/charon-rs/actions/workflows/dependency-audit.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/dependency-audit.yml) -[![Coverage](coverage.svg) +![Coverage](coverage.svg) ![Rust](https://img.shields.io/badge/rust-1.89-orange.svg) [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) @@ -15,9 +15,9 @@ See the official docs at https://docs.obol.tech for introductions and key concep ## Documentation -The [Obol Docs](https://docs.obol.tech/) website is the best place to get started. +The [Obol Docs](https://docs.obol.org/) website is the best place to get started. The important sections are [intro](https://docs.obol.org/learn/charon), -[key concepts](https://docs.obol.tech/docs/int/key-concepts) and [charon](https://docs.obol.tech/docs/charon/intro). +[key concepts](https://docs.obol.org/docs/int/key-concepts) and [charon](https://docs.obol.org/docs/charon/intro). ## Version compatibility @@ -30,7 +30,7 @@ There are several reasons to justify a new `MAJOR` release, for example: - an old Ethereum hardfork is removed due to network inactivity - modifications to the internal P2P network or consensus mechanism requiring deep changes to the codebase -The `charon dkg` subcommand **is more restrictive** than this general compatibility promise; all peers should use matching`MAJOR` and`MINOR` versions of Charon for the DKG process, patch versions may differ though it is recommended to use the latest patch of any version. +The `charon dkg` subcommand **is more restrictive** than this general compatibility promise; all peers should use matching `MAJOR` and `MINOR` versions of Charon for the DKG process, patch versions may differ though it is recommended to use the latest patch of any version. ## Examples From f3611da88c8bb40aaac4e95199c6f95f815468eb Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 17:19:46 -0300 Subject: [PATCH 08/19] Fix links --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4b65df8b..bf7f6e1b 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,16 @@ # Pluto [![Docs](https://github.com/NethermindEth/charon-rs/actions/workflows/docs.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/docs.yml) + [![Lint](https://github.com/NethermindEth/charon-rs/actions/workflows/linter.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/linter.yml) + [![Build](https://github.com/NethermindEth/charon-rs/actions/workflows/test.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/test.yml) + [![Dependencies](https://github.com/NethermindEth/charon-rs/actions/workflows/dependency-audit.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/dependency-audit.yml) -![Coverage](coverage.svg) + +![Coverage](https://github.com/NethermindEth/charon-rs/wiki/coverage.svg) + ![Rust](https://img.shields.io/badge/rust-1.89-orange.svg) + [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) Pluto is an alternative implementation of [Charon](https://github.com/ObolNetwork/charon/), a distributed validator middleware client for Ethereum Staking. It enables a group of independent operators to safely run a single validator by coordinating duties across multiple nodes. From 8d8b31f6319d96b9d9e440028078fdec6e468256 Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 17:21:54 -0300 Subject: [PATCH 09/19] Test custom label --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bf7f6e1b..f6d785ac 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Pluto -[![Docs](https://github.com/NethermindEth/charon-rs/actions/workflows/docs.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/docs.yml) +[![Docs](https://github.com/NethermindEth/charon-rs/actions/workflows/docs.yml/badge.svg?label=Docs)](https://github.com/NethermindEth/charon-rs/actions/workflows/docs.yml) [![Lint](https://github.com/NethermindEth/charon-rs/actions/workflows/linter.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/linter.yml) From 6942aada9da653fb8a67bca82a2394889a7f57d1 Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 17:23:09 -0300 Subject: [PATCH 10/19] Revert label change - Does not work --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f6d785ac..bf7f6e1b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Pluto -[![Docs](https://github.com/NethermindEth/charon-rs/actions/workflows/docs.yml/badge.svg?label=Docs)](https://github.com/NethermindEth/charon-rs/actions/workflows/docs.yml) +[![Docs](https://github.com/NethermindEth/charon-rs/actions/workflows/docs.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/docs.yml) [![Lint](https://github.com/NethermindEth/charon-rs/actions/workflows/linter.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/linter.yml) From d3d5f467a85877b960f8281ce75cdbbfd14f7edd Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 17:23:58 -0300 Subject: [PATCH 11/19] Update workflow names - Required for proper badges --- .github/workflows/coverage.yml | 2 +- .github/workflows/dependency-audit.yml | 2 +- .github/workflows/docs.yml | 2 +- .github/workflows/linter.yml | 2 +- .github/workflows/semver.yml | 2 +- .github/workflows/test.yml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 733f9f6b..d7b21fb8 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -1,4 +1,4 @@ -name: Update code coverage +name: Code Coverage on: push: diff --git a/.github/workflows/dependency-audit.yml b/.github/workflows/dependency-audit.yml index 93b95890..05147b4a 100644 --- a/.github/workflows/dependency-audit.yml +++ b/.github/workflows/dependency-audit.yml @@ -1,4 +1,4 @@ -name: Dependency security audit +name: Dependency Audit on: push: diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a5f2c622..a9712670 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,4 +1,4 @@ -name: Build and deploy documentation +name: Documentation on: workflow_dispatch: # Run manually from Actions tab diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index e123e406..74a7bc96 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -1,4 +1,4 @@ -name: Linter check +name: Linter on: push: diff --git a/.github/workflows/semver.yml b/.github/workflows/semver.yml index 6f67be99..8200b5ed 100644 --- a/.github/workflows/semver.yml +++ b/.github/workflows/semver.yml @@ -1,4 +1,4 @@ -name: Semver checks +name: Semver on: pull_request: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4599829b..c3dab9a7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,4 +1,4 @@ -name: Build and test code +name: Test on: push: From 7df2aedf87447e602a0d37d876222affe648c5f1 Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 17:24:41 -0300 Subject: [PATCH 12/19] Fix formatting --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index bf7f6e1b..879a5a5d 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,11 @@ # Pluto [![Docs](https://github.com/NethermindEth/charon-rs/actions/workflows/docs.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/docs.yml) - [![Lint](https://github.com/NethermindEth/charon-rs/actions/workflows/linter.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/linter.yml) - [![Build](https://github.com/NethermindEth/charon-rs/actions/workflows/test.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/test.yml) - [![Dependencies](https://github.com/NethermindEth/charon-rs/actions/workflows/dependency-audit.yml/badge.svg)](https://github.com/NethermindEth/charon-rs/actions/workflows/dependency-audit.yml) - ![Coverage](https://github.com/NethermindEth/charon-rs/wiki/coverage.svg) ![Rust](https://img.shields.io/badge/rust-1.89-orange.svg) - [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) Pluto is an alternative implementation of [Charon](https://github.com/ObolNetwork/charon/), a distributed validator middleware client for Ethereum Staking. It enables a group of independent operators to safely run a single validator by coordinating duties across multiple nodes. From 0329e23ff022ed8d18611488f4752d2428a2925e Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 17:26:15 -0300 Subject: [PATCH 13/19] Fix URL --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 879a5a5d..45a56d0c 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Pluto is an alternative implementation of [Charon](https://github.com/ObolNetwor Pluto, like Charon, is used by stakers to distribute the responsibility of running Ethereum Validators across a number of different instances and client implementations. -See the official docs at https://docs.obol.tech for introductions and key concepts. +See the official docs at https://docs.obol.org/ for introductions and key concepts. ## Documentation From a3142ee6858dd4b1384d7ad54fad96b912e662d1 Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 17:45:07 -0300 Subject: [PATCH 14/19] Revert Docker changes - For a different PR --- Dockerfile | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index cdee3d7e..55d334fc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,11 @@ FROM rust:1.89 AS builder -RUN apt-get update && apt-get install -y protobuf-compiler=3.21.12-11 -RUN cargo install oas3-gen@0.24.0 - WORKDIR /build COPY . . RUN cargo build --release --package charon-cli --locked FROM debian:bookworm-slim AS app -COPY --from=builder /build/target/release/pluto /app/bin/pluto - +COPY --from=builder /build/target/release/charon-cli /app/bin/charon-cli EXPOSE 3000 -ENTRYPOINT ["/app/bin/pluto"] +CMD ["/app/bin/charon-cli"] From c7a5641f7c3a8321b939d0c253970346067d04b6 Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 17:45:59 -0300 Subject: [PATCH 15/19] Fix typo in section header for running unit and integration tests --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dc5b353d..4e5f9b2d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -22,7 +22,7 @@ To build the project with all its crates, run: cargo build --workspace --all-features ``` -## Run Unit and Integration Test +## Run Unit and Integration Tests To run all tests - unit and integration - run: ```sh From 5b5fc3af397062f228c769c8242699cd54e2d9ac Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 17:46:43 -0300 Subject: [PATCH 16/19] Consistent `/` --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 45a56d0c..870b8b48 100644 --- a/README.md +++ b/README.md @@ -37,8 +37,8 @@ The `charon dkg` subcommand **is more restrictive** than this general compatibil Examples are located in crate-specific example folders: -- [Cluster](crates/charon-cluster/src/examples/) -- [P2P](crates/charon-p2p/examples/) +- [Cluster](crates/charon-cluster/src/examples) +- [P2P](crates/charon-p2p/examples) - [Peerinfo](crates/peerinfo/examples) - [Relay Server](crates/relay-server/examples) - [Tracing](crates/tracing/examples) From ae745371dcb11635b238403635ca05acc751ac18 Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 17:47:47 -0300 Subject: [PATCH 17/19] Revert workflow name changes --- .github/workflows/coverage.yml | 2 +- .github/workflows/dependency-audit.yml | 2 +- .github/workflows/docs.yml | 2 +- .github/workflows/linter.yml | 2 +- .github/workflows/semver.yml | 2 +- .github/workflows/test.yml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index d305ca78..9c8f5f48 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -1,4 +1,4 @@ -name: Code Coverage +name: Update code coverage permissions: contents: write diff --git a/.github/workflows/dependency-audit.yml b/.github/workflows/dependency-audit.yml index 05147b4a..93b95890 100644 --- a/.github/workflows/dependency-audit.yml +++ b/.github/workflows/dependency-audit.yml @@ -1,4 +1,4 @@ -name: Dependency Audit +name: Dependency security audit on: push: diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a9712670..a5f2c622 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,4 +1,4 @@ -name: Documentation +name: Build and deploy documentation on: workflow_dispatch: # Run manually from Actions tab diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 74a7bc96..e123e406 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -1,4 +1,4 @@ -name: Linter +name: Linter check on: push: diff --git a/.github/workflows/semver.yml b/.github/workflows/semver.yml index 8200b5ed..6f67be99 100644 --- a/.github/workflows/semver.yml +++ b/.github/workflows/semver.yml @@ -1,4 +1,4 @@ -name: Semver +name: Semver checks on: pull_request: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c3dab9a7..4599829b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,4 +1,4 @@ -name: Test +name: Build and test code on: push: From b2a732170014b452b6702c33bc38ba03cec316eb Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Mon, 26 Jan 2026 18:04:38 -0300 Subject: [PATCH 18/19] Update examples URLs - Point to Rust files when appropriate - Remove Cluster examples --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 870b8b48..f19e0252 100644 --- a/README.md +++ b/README.md @@ -37,11 +37,10 @@ The `charon dkg` subcommand **is more restrictive** than this general compatibil Examples are located in crate-specific example folders: -- [Cluster](crates/charon-cluster/src/examples) -- [P2P](crates/charon-p2p/examples) -- [Peerinfo](crates/peerinfo/examples) -- [Relay Server](crates/relay-server/examples) -- [Tracing](crates/tracing/examples) +- [P2P](crates/charon-p2p/examples/metrics.rs) +- [Peerinfo](crates/peerinfo/examples/peerinfo.rs) +- [Relay Server](crates/relay-server/examples/relay_server.rs) +- [Tracing](crates/tracing/examples/basic.rs) ## License From e53aa289267c57648de9f32bce0e097dbe004e77 Mon Sep 17 00:00:00 2001 From: Lautaro Emanuel Date: Tue, 27 Jan 2026 09:04:43 -0300 Subject: [PATCH 19/19] Add `docker` as a requirement --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4e5f9b2d..a74d5b96 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,6 +4,7 @@ * [Rust](https://www.rust-lang.org/tools/install) * [Protobuf](https://protobuf.dev/installation/) +* [Docker](https://www.docker.com/) * [cargo deny](https://github.com/EmbarkStudios/cargo-deny) * [oas3-gen](https://github.com/eklipse2k8/oas3-gen)