Part of #402 — follow-up to the app-wiring PR. Prerequisite for the setFeeRecipient slot subscriber.
Scope
Add a submit_proposal_preparations client method to EthBeaconNodeApiClient (POST /eth/v1/validator/prepare_beacon_proposer). Today only the VC-facing router handler exists (crates/core/src/validatorapi/router.rs), so a Pluto node has no way to send proposal preparations to its own beacon node — the client half is entirely missing from crates/eth2api.
Include a matching endpoint in the pluto-testutil beaconmock that records submitted preparations, so the app-level subscriber (follow-up issue) can be tested against it.
Charon reference: the eth2 client call used by setFeeRecipient (app/app.go:1145-1193 at v1.7.1, SubmitProposalPreparations).
Dependencies
None — independent of all other app-wiring follow-ups.
Acceptance
EthBeaconNodeApiClient::submit_proposal_preparations posts [{validator_index, fee_recipient}] per the beacon API spec.
- beaconmock mounts the endpoint and exposes recorded submissions to tests.
- Unit test covering serialization and the success/error paths.
cargo clippy --workspace --all-targets --all-features -- -D warnings clean.
Part of #402 — follow-up to the app-wiring PR. Prerequisite for the
setFeeRecipientslot subscriber.Scope
Add a
submit_proposal_preparationsclient method toEthBeaconNodeApiClient(POST /eth/v1/validator/prepare_beacon_proposer). Today only the VC-facing router handler exists (crates/core/src/validatorapi/router.rs), so a Pluto node has no way to send proposal preparations to its own beacon node — the client half is entirely missing fromcrates/eth2api.Include a matching endpoint in the
pluto-testutilbeaconmock that records submitted preparations, so the app-level subscriber (follow-up issue) can be tested against it.Charon reference: the eth2 client call used by
setFeeRecipient(app/app.go:1145-1193at v1.7.1,SubmitProposalPreparations).Dependencies
None — independent of all other app-wiring follow-ups.
Acceptance
EthBeaconNodeApiClient::submit_proposal_preparationsposts[{validator_index, fee_recipient}]per the beacon API spec.cargo clippy --workspace --all-targets --all-features -- -D warningsclean.