From a4ea2af9e0eaf68a1d69152c518806f4c30da5bb Mon Sep 17 00:00:00 2001 From: Nikolay Vlasov Date: Mon, 17 Aug 2026 21:43:17 +1000 Subject: [PATCH 1/2] feat(solana): bump Frankendancer to v0.1105.40200 Update the Frankendancer client from 0.1006.40100 to the latest Frankendancer mainnet release, 0.1105.40200 (bundled Agave submodule -> v4.2.0, plus minor improvements and security fixes). This stays on the Frankendancer 0.xxxx line (Firedancer networking + Agave runtime subprocess), which is what this blueprint builds via 'make fdctl solana'. The full-Firedancer 1.x line (e.g. v1.1.3/1.1.4) is a separate client with a different runtime and is not used here. The Agave v4.2.0 bump requires a larger validator dynamic port range, so the generated fdctl TOML dynamic_port_range was widened 8004-8029 -> 8004-8040 and the Solana security-group range 8001-8029 -> 8001-8040 to match; the gossip port-range test was updated accordingly. Smoke-tested on Solana mainnet-beta (dev account): builds from source at v0.1105.40200, fdctl accepts the generated TOML, the validator starts and stays up (0 restarts), instance-store set up correctly, gossip connects to ~3800 nodes, and it downloads a snapshot to catch up. Build (tsc) and jest (473 tests) pass. --- CHANGELOG.md | 1 + ...rpc-base.sh => frankendancer-0.1105.40200-rpc-base.sh} | 2 +- ...nded.sh => frankendancer-0.1105.40200-rpc-extended.sh} | 2 +- blueprints/solana/package.json | 8 ++++---- .../samples/.env-mainnet-beta-frankendancer-rpc-base | 2 +- .../samples/.env-mainnet-beta-frankendancer-rpc-base-ha | 2 +- .../samples/.env-mainnet-beta-frankendancer-rpc-extended | 2 +- .../solana/samples/.env-testnet-frankendancer-rpc-base | 2 +- blueprints/solana/user-data/node.sh | 2 +- test/integration/solana-configuration.test.ts | 8 ++++---- 10 files changed, 16 insertions(+), 15 deletions(-) rename blueprints/solana/configurations/{frankendancer-0.1006.40100-rpc-base.sh => frankendancer-0.1105.40200-rpc-base.sh} (99%) rename blueprints/solana/configurations/{frankendancer-0.1006.40100-rpc-extended.sh => frankendancer-0.1105.40200-rpc-extended.sh} (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9da2f71..99845be5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ ### Changed - **BNB Chain**: bumped BSC Geth `v1.7.3` → `v1.7.7` for the BSC mainnet **Pasteur hardfork** (activates 2026-08-25 02:30 UTC; mandatory for all mainnet nodes before then). No blueprint CLI-flag changes are needed: the flags removed/deprecated in the Pasteur line (`--multidatabase`, `--fake-beacon*`) and the load-breaking `[Eth] EnableBAL` config.toml field are not used by the blueprint, and `config.toml` is fetched fresh from the release. Requires a fresh deploy per the replace-the-instance upgrade model. +- **Solana**: bumped Frankendancer `0.1006.40100` → `0.1105.40200` (latest Frankendancer mainnet release; updates the bundled Agave submodule to `v4.2.0` plus minor improvements and security fixes). This stays on the **Frankendancer `0.xxxx` line** — the hybrid client (Firedancer networking/block-production frontend running the Agave runtime as a subprocess) that this blueprint builds via `make fdctl solana`. The full-Firedancer `1.x` line is a separate client with a different runtime (native `diag` tile, no Agave subprocess) and is intentionally not used here. This release bumps the bundled Agave submodule to `v4.2.0`, which requires a slightly larger validator dynamic port range, so the generated `fdctl` TOML `dynamic_port_range` was widened `8004-8029` → `8004-8040` and the Solana security-group range `8001-8029` → `8001-8040` to match. - **Ethereum**: bumped patch versions — Nethermind `1.39.2` → `1.39.3`, Erigon `3.5.3` → `3.5.4`, and Prysm `7.1.7` → `7.1.8`. All three are drop-in upgrades within the same release series with no blueprint CLI flag changes; configuration file names and matching `samples/` were updated accordingly. - **Ethereum**: bumped client versions — Geth `1.17.3` → `1.17.4`, Erigon `3.4.3` → `3.5.3`, Prysm `7.1.5` → `7.1.7`, and Besu `26.6.1` → `26.7.0`. Configuration file names and matching `samples/` were updated accordingly. (Nethermind and Teku are covered under Security above.) - **Ethereum**: upgraded the Reth archive configuration to Reth `1.10.2` → `2.4.1` and Lighthouse `8.1.3` → `8.2.1` (`reth-2.4.1-lighthouse-8.2.1-archive.yml`). Reth 2.x makes **Storage V2** the default; there is no in-place upgrade for an existing Reth v1 datadir, so upgrading requires deploying a new node and resyncing (consistent with the blueprint's replace-the-instance upgrade model). Reth 2.2 also enables Discv5 discovery by default. No blueprint CLI flags changed. diff --git a/blueprints/solana/configurations/frankendancer-0.1006.40100-rpc-base.sh b/blueprints/solana/configurations/frankendancer-0.1105.40200-rpc-base.sh similarity index 99% rename from blueprints/solana/configurations/frankendancer-0.1006.40100-rpc-base.sh rename to blueprints/solana/configurations/frankendancer-0.1105.40200-rpc-base.sh index 58708e49..f266742c 100644 --- a/blueprints/solana/configurations/frankendancer-0.1006.40100-rpc-base.sh +++ b/blueprints/solana/configurations/frankendancer-0.1105.40200-rpc-base.sh @@ -96,7 +96,7 @@ cat > "$CONFIG_FILE" < "$CONFIG_FILE" < "3.1.14" # "agave-4.0.3-rpc-extended.sh" -> "4.0.3" # "agave-4.1.2-rpc-base.sh" -> "4.1.2" -# "frankendancer-0.1006.40100-rpc-base.sh" -> "0.1006.40100" +# "frankendancer-0.1105.40200-rpc-base.sh" -> "0.1105.40200" BUILD_VERSION=$(echo "$CLIENT_CONFIG" | sed -E 's/^[a-z]+-(.+)-rpc-(base|extended)\.sh$/\1/') if [ -z "$BUILD_VERSION" ] || [ "$BUILD_VERSION" = "$CLIENT_CONFIG" ]; then echo "ERROR: Could not parse client version from CLIENT_CONFIG: $CLIENT_CONFIG" diff --git a/test/integration/solana-configuration.test.ts b/test/integration/solana-configuration.test.ts index cbcff9dd..c0acc7a7 100644 --- a/test/integration/solana-configuration.test.ts +++ b/test/integration/solana-configuration.test.ts @@ -74,12 +74,12 @@ describe('Solana Protocol Configuration', () => { expect(agave412Extended).toBeDefined(); const fdBase = protocolConfig.availableConfigurations.find( - c => c.name === 'frankendancer-0.1006.40100-rpc-base.sh' + c => c.name === 'frankendancer-0.1105.40200-rpc-base.sh' ); expect(fdBase).toBeDefined(); const fdExtended = protocolConfig.availableConfigurations.find( - c => c.name === 'frankendancer-0.1006.40100-rpc-extended.sh' + c => c.name === 'frankendancer-0.1105.40200-rpc-extended.sh' ); expect(fdExtended).toBeDefined(); }); @@ -112,14 +112,14 @@ describe('Solana Protocol Configuration', () => { p => p.portRange?.from === 8001 && p.protocol === 'tcp' ); expect(gossipTcp).toBeDefined(); - expect(gossipTcp?.portRange?.to).toBe(8029); + expect(gossipTcp?.portRange?.to).toBe(8040); expect(gossipTcp?.public).toBe(true); const gossipUdp = protocolConfig.requiredPorts.find( p => p.portRange?.from === 8001 && p.protocol === 'udp' ); expect(gossipUdp).toBeDefined(); - expect(gossipUdp?.portRange?.to).toBe(8029); + expect(gossipUdp?.portRange?.to).toBe(8040); expect(gossipUdp?.public).toBe(true); }); From 5988dc830a1527510a7f2a4ce750536fbf0432da Mon Sep 17 00:00:00 2001 From: Nikolay Vlasov Date: Mon, 17 Aug 2026 22:07:12 +1000 Subject: [PATCH 2/2] feat(ethereum): bump Besu to 26.7.1 and Geth to 1.17.5 Besu 26.7.0 -> 26.7.1: security release closing unbounded-memory-growth paths in JSON-RPC filters/subscriptions. The new --rpc-max-active-filters, --rpc-filter-timeout-seconds, and --rpc-ws-max-active-subscriptions options are defaults-only and not set by the blueprint, so no flag changes are needed. Geth 1.17.4 -> 1.17.5: maintenance release. Pebble v2 is used only for from-scratch datadirs and falls back to Pebble v1 for a pre-existing database, so --db.engine=pebble is unchanged and there is no forced migration. Note the upstream default GOGC change 20 -> 50 raises the memory peak. Both are docker-image tag bumps; config file names, samples, the default config reference, and the ethereum config test were updated to match. Smoke-tested on Ethereum mainnet (dev account): both start with the correct images (besu/v26.7.1, Geth/v1.17.5), execution+consensus peer over the engine API, RPC serves, and snap sync begins (Besu worldstate download; Geth beacon-header sync). Teku and Lighthouse checkpoint-sync. Build (tsc) and jest (473 tests) pass. --- CHANGELOG.md | 1 + ...eku-26.7.1-full.yml => besu-26.7.1-teku-26.7.1-full.yml} | 2 +- ...8.2.1-full.yml => geth-1.17.5-lighthouse-8.2.1-full.yml} | 2 +- blueprints/ethereum/package.json | 6 +++--- blueprints/ethereum/samples/.env-mainnet-besu-teku-full | 2 +- .../ethereum/samples/.env-mainnet-geth-lighthouse-full | 2 +- .../ethereum/samples/.env-mainnet-geth-lighthouse-full-ha | 2 +- .../ethereum/samples/.env-sepolia-geth-lighthouse-full | 2 +- lib/interfaces/protocol-config.ts | 2 +- test/integration/ethereum-configuration.test.ts | 4 ++-- 10 files changed, 13 insertions(+), 12 deletions(-) rename blueprints/ethereum/configurations/{besu-26.7.0-teku-26.7.1-full.yml => besu-26.7.1-teku-26.7.1-full.yml} (98%) rename blueprints/ethereum/configurations/{geth-1.17.4-lighthouse-8.2.1-full.yml => geth-1.17.5-lighthouse-8.2.1-full.yml} (98%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 99845be5..c92b9776 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ ### Changed - **BNB Chain**: bumped BSC Geth `v1.7.3` → `v1.7.7` for the BSC mainnet **Pasteur hardfork** (activates 2026-08-25 02:30 UTC; mandatory for all mainnet nodes before then). No blueprint CLI-flag changes are needed: the flags removed/deprecated in the Pasteur line (`--multidatabase`, `--fake-beacon*`) and the load-breaking `[Eth] EnableBAL` config.toml field are not used by the blueprint, and `config.toml` is fetched fresh from the release. Requires a fresh deploy per the replace-the-instance upgrade model. +- **Ethereum**: bumped Besu `26.7.0` → `26.7.1` (security release closing unbounded-memory-growth paths in JSON-RPC filters/subscriptions; the new `--rpc-max-active-filters`, `--rpc-filter-timeout-seconds`, and `--rpc-ws-max-active-subscriptions` options ship as defaults only and are not set by the blueprint, so no flag changes) and Geth `1.17.4` → `1.17.5` (maintenance release; Pebble v2 is used only for from-scratch datadirs and falls back to Pebble v1 for a pre-existing database, so there is no forced migration — `--db.engine=pebble` is unchanged; note the upstream default GOGC change 20 → 50 raises the memory peak). Configuration file names and matching `samples/` were updated accordingly. - **Solana**: bumped Frankendancer `0.1006.40100` → `0.1105.40200` (latest Frankendancer mainnet release; updates the bundled Agave submodule to `v4.2.0` plus minor improvements and security fixes). This stays on the **Frankendancer `0.xxxx` line** — the hybrid client (Firedancer networking/block-production frontend running the Agave runtime as a subprocess) that this blueprint builds via `make fdctl solana`. The full-Firedancer `1.x` line is a separate client with a different runtime (native `diag` tile, no Agave subprocess) and is intentionally not used here. This release bumps the bundled Agave submodule to `v4.2.0`, which requires a slightly larger validator dynamic port range, so the generated `fdctl` TOML `dynamic_port_range` was widened `8004-8029` → `8004-8040` and the Solana security-group range `8001-8029` → `8001-8040` to match. - **Ethereum**: bumped patch versions — Nethermind `1.39.2` → `1.39.3`, Erigon `3.5.3` → `3.5.4`, and Prysm `7.1.7` → `7.1.8`. All three are drop-in upgrades within the same release series with no blueprint CLI flag changes; configuration file names and matching `samples/` were updated accordingly. - **Ethereum**: bumped client versions — Geth `1.17.3` → `1.17.4`, Erigon `3.4.3` → `3.5.3`, Prysm `7.1.5` → `7.1.7`, and Besu `26.6.1` → `26.7.0`. Configuration file names and matching `samples/` were updated accordingly. (Nethermind and Teku are covered under Security above.) diff --git a/blueprints/ethereum/configurations/besu-26.7.0-teku-26.7.1-full.yml b/blueprints/ethereum/configurations/besu-26.7.1-teku-26.7.1-full.yml similarity index 98% rename from blueprints/ethereum/configurations/besu-26.7.0-teku-26.7.1-full.yml rename to blueprints/ethereum/configurations/besu-26.7.1-teku-26.7.1-full.yml index 3bfffa8a..96dbfba3 100644 --- a/blueprints/ethereum/configurations/besu-26.7.0-teku-26.7.1-full.yml +++ b/blueprints/ethereum/configurations/besu-26.7.1-teku-26.7.1-full.yml @@ -5,7 +5,7 @@ version: "3" services: execution: - image: hyperledger/besu:26.7.0 + image: hyperledger/besu:26.7.1 container_name: execution restart: always command: diff --git a/blueprints/ethereum/configurations/geth-1.17.4-lighthouse-8.2.1-full.yml b/blueprints/ethereum/configurations/geth-1.17.5-lighthouse-8.2.1-full.yml similarity index 98% rename from blueprints/ethereum/configurations/geth-1.17.4-lighthouse-8.2.1-full.yml rename to blueprints/ethereum/configurations/geth-1.17.5-lighthouse-8.2.1-full.yml index 5ea3e288..6163a4ca 100644 --- a/blueprints/ethereum/configurations/geth-1.17.4-lighthouse-8.2.1-full.yml +++ b/blueprints/ethereum/configurations/geth-1.17.5-lighthouse-8.2.1-full.yml @@ -5,7 +5,7 @@ version: "3" services: execution: - image: ethereum/client-go:v1.17.4 + image: ethereum/client-go:v1.17.5 container_name: execution restart: always command: diff --git a/blueprints/ethereum/package.json b/blueprints/ethereum/package.json index ba728876..3875c068 100644 --- a/blueprints/ethereum/package.json +++ b/blueprints/ethereum/package.json @@ -11,10 +11,10 @@ "single-node", "ha-nodes" ], - "defaultConfiguration": "geth-1.17.4-lighthouse-8.2.1-full.yml", + "defaultConfiguration": "geth-1.17.5-lighthouse-8.2.1-full.yml", "availableConfigurations": [ { - "name": "geth-1.17.4-lighthouse-8.2.1-full.yml" + "name": "geth-1.17.5-lighthouse-8.2.1-full.yml" }, { "name": "reth-2.4.1-lighthouse-8.2.1-archive.yml" @@ -26,7 +26,7 @@ "name": "erigon-3.5.4-prysm-7.1.8-archive.yml" }, { - "name": "besu-26.7.0-teku-26.7.1-full.yml" + "name": "besu-26.7.1-teku-26.7.1-full.yml" }, { "name": "nethermind-1.39.3-teku-26.7.1-full.yml" diff --git a/blueprints/ethereum/samples/.env-mainnet-besu-teku-full b/blueprints/ethereum/samples/.env-mainnet-besu-teku-full index 5dae8f1f..753d9a2f 100644 --- a/blueprints/ethereum/samples/.env-mainnet-besu-teku-full +++ b/blueprints/ethereum/samples/.env-mainnet-besu-teku-full @@ -16,7 +16,7 @@ AWS_REGION="us-east-1" BLOCKCHAIN_PROTOCOL="ethereum" DEPLOYMENT_MODE="single-node" BC_NETWORK="mainnet" -CLIENT_CONFIG="besu-26.7.0-teku-26.7.1-full.yml" +CLIENT_CONFIG="besu-26.7.1-teku-26.7.1-full.yml" # Instance Configuration INSTANCE_TYPE="r7g.2xlarge" diff --git a/blueprints/ethereum/samples/.env-mainnet-geth-lighthouse-full b/blueprints/ethereum/samples/.env-mainnet-geth-lighthouse-full index a73d42f9..15a39ce8 100644 --- a/blueprints/ethereum/samples/.env-mainnet-geth-lighthouse-full +++ b/blueprints/ethereum/samples/.env-mainnet-geth-lighthouse-full @@ -16,7 +16,7 @@ AWS_REGION="us-east-1" BLOCKCHAIN_PROTOCOL="ethereum" DEPLOYMENT_MODE="single-node" BC_NETWORK="mainnet" -CLIENT_CONFIG="geth-1.17.4-lighthouse-8.2.1-full.yml" +CLIENT_CONFIG="geth-1.17.5-lighthouse-8.2.1-full.yml" # Instance Configuration INSTANCE_TYPE="r7g.2xlarge" diff --git a/blueprints/ethereum/samples/.env-mainnet-geth-lighthouse-full-ha b/blueprints/ethereum/samples/.env-mainnet-geth-lighthouse-full-ha index 5e491e5b..dc154fe0 100644 --- a/blueprints/ethereum/samples/.env-mainnet-geth-lighthouse-full-ha +++ b/blueprints/ethereum/samples/.env-mainnet-geth-lighthouse-full-ha @@ -17,7 +17,7 @@ AWS_REGION="us-east-1" BLOCKCHAIN_PROTOCOL="ethereum" DEPLOYMENT_MODE="ha-nodes" BC_NETWORK="mainnet" -CLIENT_CONFIG="geth-1.17.4-lighthouse-8.2.1-full.yml" +CLIENT_CONFIG="geth-1.17.5-lighthouse-8.2.1-full.yml" # Instance Configuration INSTANCE_TYPE="r7g.2xlarge" diff --git a/blueprints/ethereum/samples/.env-sepolia-geth-lighthouse-full b/blueprints/ethereum/samples/.env-sepolia-geth-lighthouse-full index 0258d9f3..b9d634e2 100644 --- a/blueprints/ethereum/samples/.env-sepolia-geth-lighthouse-full +++ b/blueprints/ethereum/samples/.env-sepolia-geth-lighthouse-full @@ -16,7 +16,7 @@ AWS_REGION="us-east-1" BLOCKCHAIN_PROTOCOL="ethereum" DEPLOYMENT_MODE="single-node" BC_NETWORK="sepolia" -CLIENT_CONFIG="geth-1.17.4-lighthouse-8.2.1-full.yml" +CLIENT_CONFIG="geth-1.17.5-lighthouse-8.2.1-full.yml" # Instance Configuration # Smaller instance for testnet diff --git a/lib/interfaces/protocol-config.ts b/lib/interfaces/protocol-config.ts index 5e097144..d559ab64 100644 --- a/lib/interfaces/protocol-config.ts +++ b/lib/interfaces/protocol-config.ts @@ -11,7 +11,7 @@ import { DeploymentMode, CpuType } from './enums'; * Configuration for a specific blockchain client/version combination. * * The client version is encoded in the configuration file name (e.g. - * `geth-1.17.4-lighthouse-8.2.1-full.yml`), which is the single source of + * `geth-1.17.5-lighthouse-8.2.1-full.yml`), which is the single source of * truth. There is intentionally no separate `version` field to avoid * duplicating the version string. */ diff --git a/test/integration/ethereum-configuration.test.ts b/test/integration/ethereum-configuration.test.ts index 036e6b1c..33159476 100644 --- a/test/integration/ethereum-configuration.test.ts +++ b/test/integration/ethereum-configuration.test.ts @@ -35,7 +35,7 @@ describe('Ethereum Protocol Configuration', () => { expect(protocolConfig.availableConfigurations.length).toBeGreaterThan(0); const gethLighthouse = protocolConfig.availableConfigurations.find( - c => c.name === 'geth-1.17.4-lighthouse-8.2.1-full.yml' + c => c.name === 'geth-1.17.5-lighthouse-8.2.1-full.yml' ); expect(gethLighthouse).toBeDefined(); }); @@ -78,7 +78,7 @@ describe('Ethereum Protocol Configuration', () => { expect(envConfig.BLOCKCHAIN_PROTOCOL).toBe('ethereum'); expect(envConfig.DEPLOYMENT_MODE).toBe(DeploymentMode.SINGLE_NODE); expect(envConfig.BC_NETWORK).toBe('mainnet'); - expect(envConfig.CLIENT_CONFIG).toBe('geth-1.17.4-lighthouse-8.2.1-full.yml'); + expect(envConfig.CLIENT_CONFIG).toBe('geth-1.17.5-lighthouse-8.2.1-full.yml'); }); it('should have custom ETH variables', () => {