feat(tee)!: bootnode-based devp2p config; --peer→--bootnode, [network]/[node] split - #75
Merged
Merged
Conversation
…]/[node] split Rework the operator/founding CLIs onto reth devp2p bootnodes, matching the tdx-init config schema shipped in SeismicSystems/enclave#221. Config wire format (client side of the enclave change): - `--peer` → `--bootnode` (enode://<128-hex>@host:port). reth dials the bootnodes verbatim; tdx-init derives each node's root-key fetch peers from them (http://<host>:7878, own entry dropped), so there is no second peer list that can skew from the bootnode set. - Sections split by provenance: coordinator-produced `[network]` (manifest_base64, reth_genesis_base64, bootnodes) and this-node-only `[node]` (external_ip, genesis_node, [node.domain]). Replaces the old `[root_key]` + `[domain]`. external_ip feeds reth's `--nat extip` so the advertised enode is dialable. build_config fails fast client-side on an empty external_ip or a bootnode-less joiner, mirroring tdx-init's 400s. Founding-cohort bootstrap (cli/network/bootnodes.py): - Fetch/normalize/persist enodes via the public `seismic_nodeInfo` RPC (admin is disabled on these nodes; RPC added in SeismicSystems/seismic-reth#430). Normalization drops reth's `?discport=` and preserves bracketed IPv6. - Greenfield is two-stage: an enode isn't known until reth is up, so configure genesis first, poll its enode, then bootnode the joiners off it. The founding set is persisted to nodes/bootnodes.json (gitignored runtime state); a later run reuses it and configures the whole cohort in one pass. Also: - Remove `--no-wait` from both `seismic-tee-network configure` and `seismic-tee-node configure`: nothing invoked it, and enode collection needs reth up regardless, so it always watches provisioning through to a ready/failed verdict now. - Persisting the founding set degrades to a warning if enode collection fails, so the cohort report always prints. - Bump the dev stack VHD to the 2026-07-14 image (carries the new tdx-init). Part of the reth devp2p gossip project (analysis in SeismicSystems/seismic-reth#426). BREAKING CHANGE: the POSTed tdx-init config drops `[root_key]`/`[domain]` for `[network]`/`[node]`, and `seismic-tee-node configure` takes `--bootnode` instead of `--peer`. Requires a node image with enclave#221's tdx-init; an old CLI POSTing to a new node (or vice versa) is rejected with a 400.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of the reth devp2p gossip project (analysis in SeismicSystems/seismic-reth#426).
Rework the operator/founding CLIs onto reth devp2p bootnodes, matching the tdx-init config schema shipped in
SeismicSystems/enclave#221.
Config wire format (client side of the enclave change):
--peer→--bootnode(enode://<128-hex>@host:port). reth dials the bootnodes verbatim; tdx-init derives each node's root-key fetch peers from them (http://:7878, own entry dropped), so there is no second peer list that can skew from the bootnode set.[network](manifest_base64, reth_genesis_base64, bootnodes) and this-node-only[node](external_ip, genesis_node, [node.domain]). Replaces the old[root_key]+[domain]. external_ip feeds reth's--nat extipso the advertised enode is dialable. build_config fails fast client-side on an empty external_ip or a bootnode-less joiner, mirroring tdx-init's 400s.Founding-cohort bootstrap (cli/network/bootnodes.py):
seismic_nodeInfoRPC (admin is disabled on these nodes; RPC added in feat(rpc): expose enode on seismic_ namespace for devp2p bootstrap seismic-reth#430). Normalization drops reth's?discport=and preserves bracketed IPv6.Also:
--no-waitfrom bothseismic-tee-network configureandseismic-tee-node configure: nothing invoked it, and enode collection needs reth up regardless, so it always watches provisioning through to a ready/failed verdict now.BREAKING CHANGE: the POSTed tdx-init config drops
[root_key]/[domain]for[network]/[node], andseismic-tee-node configuretakes--bootnodeinstead of--peer. Requires a node image with enclave#221's tdx-init; an old CLI POSTing to a new node (or vice versa) is rejected with a 400.