| 14 | |
| 15 | #[async_trait] |
| 16 | pub trait BuilderApi<S: BuilderApiState>: 'static { |
| 17 | /// Use to extend the BuilderApi |
| 18 | fn extra_routes() -> Option<Router<PbsStateGuard<S>>> { |
| 19 | None |
| 20 | } |
| 21 | |
| 22 | /// https://ethereum.github.io/builder-specs/#/Builder/getHeader |
| 23 | async fn get_header( |
| 24 | params: GetHeaderParams, |
| 25 | req_headers: HeaderMap, |
| 26 | state: PbsState<S>, |
| 27 | ) -> eyre::Result<Option<GetHeaderResponse>> { |
| 28 | mev_boost::get_header(params, req_headers, state).await |
| 29 | } |
| 30 | |
| 31 | /// https://ethereum.github.io/builder-specs/#/Builder/status |
| 32 | async fn get_status(req_headers: HeaderMap, state: PbsState<S>) -> eyre::Result<()> { |
| 33 | mev_boost::get_status(req_headers, state).await |
| 34 | } |
| 35 | |
| 36 | /// https://ethereum.github.io/builder-specs/#/Builder/submitBlindedBlock and |
| 37 | /// https://ethereum.github.io/builder-specs/#/Builder/submitBlindedBlockV2 |
| 38 | async fn submit_block( |
| 39 | signed_blinded_block: Arc<SignedBlindedBeaconBlock>, |
| 40 | req_headers: HeaderMap, |
| 41 | state: PbsState<S>, |
| 42 | api_version: BuilderApiVersion, |
| 43 | ) -> eyre::Result<Option<SubmitBlindedBlockResponse>> { |
| 44 | mev_boost::submit_block(signed_blinded_block, req_headers, state, api_version).await |
| 45 | } |
| 46 | |
| 47 | /// https://ethereum.github.io/builder-specs/#/Builder/registerValidator |
| 48 | async fn register_validator( |
| 49 | registrations: Vec<serde_json::Value>, |
| 50 | req_headers: HeaderMap, |
| 51 | state: PbsState<S>, |
| 52 | ) -> eyre::Result<()> { |
| 53 | mev_boost::register_validator(registrations, req_headers, state).await |
| 54 | } |
| 55 | |
| 56 | async fn reload(state: PbsState<S>) -> eyre::Result<PbsState<S>> { |
| 57 | mev_boost::reload(state).await |
| 58 | } |
| 59 | } |
| 60 | |
| 61 | pub struct DefaultBuilderApi; |
| 62 | impl BuilderApi<()> for DefaultBuilderApi {} |