Skip to content

Fix: source outpost identity from sysio.chains - #77

Open
heifner wants to merge 2 commits into
masterfrom
fix/outpost-registry-wiring
Open

Fix: source outpost identity from sysio.chains#77
heifner wants to merge 2 commits into
masterfrom
fix/outpost-registry-wiring

Conversation

@heifner

@heifner heifner commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Matches the wire-sysio change that moves every outpost's identity onto its sysio.chains row. nodeop rejects unknown options, so cluster-managed batch operators and underwriters will not start until this lands with it.

Flags removed

--batch-enabled, --underwriter-enabled (the account is now the enable switch), --batch-outpost, --batch-sol-client-id, and both --underwriter-{eth,sol}-outpost. Nothing about an outpost is declared per node any more.

Client ids are the chain codes

Both daemons look a chain's RPC client up under that chain's sysio.chains code, so eth-default / sol-default would be invisible to them. EthereumClientId and SolanaClientId become aliases of the codenames rather than separate values, and the ETH/SOL client specs are emitted as ETHEREUM,... / SOLANA,....

Addresses are seeded on-chain

regchain carries an empty outpost struct and the addresses are written afterwards by a new seed-outpost-addresses step in OperatorDaemonPrerequisites.

They cannot go inline at registration: RegistrySteps runs before the daemon artifacts are published, so the SOL program id is not resolvable there, and in external-outpost mode it comes from the external config rather than the local keypair. Running setoutpost after the artifact step and before any daemon starts is correct in both modes, and exercises the action an operator will actually use for a remote redeploy. sysio.chains supports register-then-configure for exactly this.

Landing order

Blocked on the regenerated @wireio/sdk-core types — it is a published dependency here, not a workspace link, and the new step calls chains.actions.setoutpost. Order: wire-sysio, then sdk-core publish, then this.

Cross-repo

nodeop no longer accepts any per-node outpost declaration, and rejects unknown options outright, so cluster-managed operators fail to start until this matches. Drops batch-enabled, underwriter-enabled, batch-outpost, batch-sol-client-id and both underwriter-{eth,sol}-outpost; the daemons derive enablement from their account and read every outpost's remote contract addresses off its sysio.chains row.

Outpost RPC client ids are now the chain codes. Both daemons look a chain's client up under that chain's sysio.chains code, so eth-default / sol-default would be invisible to them; EthereumClientId and SolanaClientId become aliases of the codenames rather than separate values.

regchain carries an empty outpost struct and the addresses are written afterwards by a new seed-outpost-addresses step. They cannot go inline: RegistrySteps runs before the daemon artifacts are published, so the SOL program id is not resolvable there, and in external-outpost mode it comes from the external config rather than the local keypair. The step runs in OperatorDaemonPrerequisites, after the artifact step and before any daemon starts, which is correct in both modes and exercises setoutpost the way an operator will use it for a redeploy.

Requires the regenerated @wireio/sdk-core types for the setoutpost action and the widened regchain.
The regchain action data gained a required `outpost` field, so the step test's fixture no longer typechecked. Registered empty here for the same reason RegistrySteps registers chains empty: the addresses are seeded afterwards by the setoutpost step, once the daemon artifacts resolve.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant