Skip to content

Commit

Permalink
Refactor relay and builder concerns from boost
Browse files Browse the repository at this point in the history
  • Loading branch information
ralexstokes committed May 15, 2022
1 parent 1cd28b7 commit d7da4c0
Show file tree
Hide file tree
Showing 30 changed files with 185 additions and 117 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
/target
target
/Cargo.lock
40 changes: 6 additions & 34 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,35 +1,7 @@
[package]
name = "mev-boost-rs"
version = "0.1.0"
edition = "2021"
license = "MIT OR Apache-2.0"
rust-version = "1.60.0"
[workspace]

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
tokio = { version = "1.0", features = ["full"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
futures = "0.3.21"
async-trait = "0.1.53"

axum = "0.5.4"
url = { version = "2.2.2", default-features = false }

serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0.81"

thiserror = "1.0.30"

clap = { version = "3.1.14", features = ["derive"] }

ethereum_consensus = { git = "https://github.com/ralexstokes/ethereum_consensus" }
ssz_rs = { git = "https://github.com/ralexstokes/ssz_rs" }
beacon-api-client = { git = "https://github.com/ralexstokes/beacon-api-client" }

[dev-dependencies]
rand = "0.8.5"

[[bin]]
name = "main"
members = [
"mev-boost-rs",
"mev-relay-rs",
"mev-build-rs",
]
2 changes: 2 additions & 0 deletions LICENSE-APACHE
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
Copyright (c) 2022 Alex Stokes

Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
Expand Down
File renamed without changes.
35 changes: 35 additions & 0 deletions mev-boost-rs/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
[package]
name = "mev-boost-rs"
version = "0.1.0"
edition = "2021"
license = "MIT OR Apache-2.0"
rust-version = "1.60.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
tokio = { version = "1.0", features = ["full"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
futures = "0.3.21"
async-trait = "0.1.53"

url = { version = "2.2.2", default-features = false }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0.81"

thiserror = "1.0.30"

clap = { version = "3.1.14", features = ["derive"] }

ethereum_consensus = { git = "https://github.com/ralexstokes/ethereum_consensus" }
beacon-api-client = { git = "https://github.com/ralexstokes/beacon-api-client" }

mev-build-rs = { path = "../mev-build-rs" }
mev-relay-rs = { path = "../mev-relay-rs" }

[dev-dependencies]
rand = "0.8.5"

[[bin]]
name = "main"
1 change: 1 addition & 0 deletions mev-boost-rs/LICENSE-APACHE
1 change: 1 addition & 0 deletions mev-boost-rs/LICENSE-MIT
File renamed without changes.
File renamed without changes.
4 changes: 4 additions & 0 deletions mev-boost-rs/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
mod relay_mux;
mod service;

pub use service::{Service, ServiceConfig};
12 changes: 6 additions & 6 deletions src/relay_mux.rs → mev-boost-rs/src/relay_mux.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
use crate::builder::{Builder, Error as BuilderError};
use crate::relay::{Error as RelayError, Relay};
use crate::types::{
BidRequest, ExecutionPayload, Hash32, SignedBlindedBeaconBlock, SignedBuilderBid,
SignedValidatorRegistration, Slot,
};
use async_trait::async_trait;
use beacon_api_client::Error as ApiError;
use ethereum_consensus::primitives::{Hash32, Slot};
use futures::future::join_all;
use mev_build_rs::{
BidRequest, Builder, Error as BuilderError, ExecutionPayload, SignedBlindedBeaconBlock,
SignedBuilderBid, SignedValidatorRegistration,
};
use mev_relay_rs::{Client as Relay, ClientError as RelayError};
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
use std::time::Duration;
Expand Down
4 changes: 2 additions & 2 deletions src/service.rs → mev-boost-rs/src/service.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use crate::builder_api_server::Server as ApiServer;
use crate::relay::Relay;
use crate::relay_mux::RelayMux;
use beacon_api_client::Client;
use futures::future::join_all;
use mev_build_rs::ApiServer;
use mev_relay_rs::Client as Relay;
use std::net::Ipv4Addr;
use url::Url;

Expand Down
File renamed without changes.
7 changes: 3 additions & 4 deletions tests/integration.rs → mev-boost-rs/tests/integration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@ use ethereum_consensus::builder::{SignedValidatorRegistration, ValidatorRegistra
use ethereum_consensus::crypto::SecretKey;
use ethereum_consensus::phase0::mainnet::Validator;
use ethereum_consensus::primitives::{ExecutionAddress, Hash32, Slot};
use mev_boost_rs::{
builder::Builder, builder_api_server::Server as ApiServer, relay_server::Relay, BidRequest,
Relay as RelayClient, Service, ServiceConfig,
};
use mev_boost_rs::{Service, ServiceConfig};
use mev_build_rs::{ApiServer, BidRequest, Builder};
use mev_relay_rs::{Client as RelayClient, Relay};
use rand;
use rand::seq::SliceRandom;
use url::Url;
Expand Down
23 changes: 23 additions & 0 deletions mev-build-rs/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
[package]
name = "mev-build-rs"
version = "0.1.0"
edition = "2021"
license = "MIT OR Apache-2.0"
rust-version = "1.60.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[features]
default = ["serde", "api"]
api = ["axum", "beacon-api-client", "tracing"]

[dependencies]
axum = { version = "0.5.4", optional = true }
tracing = { version = "0.1", optional = true }
async-trait = "0.1.53"
serde = { version = "1.0", features = ["derive"], optional = true }
thiserror = "1.0.30"

ethereum_consensus = { git = "https://github.com/ralexstokes/ethereum_consensus" }
ssz_rs = { git = "https://github.com/ralexstokes/ssz_rs" }
beacon-api-client = { git = "https://github.com/ralexstokes/beacon-api-client", optional = true }
1 change: 1 addition & 0 deletions mev-build-rs/LICENSE-APACHE
1 change: 1 addition & 0 deletions mev-build-rs/LICENSE-MIT
19 changes: 16 additions & 3 deletions src/builder.rs → mev-build-rs/src/builder.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
use crate::types::{BidRequest, SignedBuilderBid};
use crate::types::{
BidRequest, ExecutionPayload, SignedBlindedBeaconBlock, SignedBuilderBid,
SignedValidatorRegistration,
};
use async_trait::async_trait;
use beacon_api_client::ApiError;
use ethereum_consensus::bellatrix::mainnet::{ExecutionPayload, SignedBlindedBeaconBlock};
use ethereum_consensus::builder::SignedValidatorRegistration;
#[cfg(feature = "api")]
use beacon_api_client::Error as ApiClientError;
use thiserror::Error;

#[derive(Debug, Error)]
Expand All @@ -15,6 +18,16 @@ pub enum Error {
Custom(String),
}

#[cfg(feature = "api")]
impl From<ApiClientError> for Error {
fn from(err: ApiClientError) -> Self {
match err {
ApiClientError::Api(err) => err.into(),
err => Error::Internal(err.to_string()),
}
}
}

#[async_trait]
pub trait Builder {
async fn register_validator(
Expand Down
File renamed without changes.
11 changes: 11 additions & 0 deletions mev-build-rs/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
mod builder;
#[cfg(feature = "api")]
mod builder_api_server;
#[cfg(feature = "serde")]
mod serde;
mod types;

pub use builder::{Builder, Error};
#[cfg(feature = "api")]
pub use builder_api_server::Server as ApiServer;
pub use types::*;
File renamed without changes.
30 changes: 30 additions & 0 deletions mev-build-rs/src/types.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
pub use ethereum_consensus::bellatrix::mainnet::{
ExecutionPayload, ExecutionPayloadHeader, SignedBlindedBeaconBlock,
};
pub use ethereum_consensus::builder::SignedValidatorRegistration;
use ethereum_consensus::primitives::{BlsPublicKey, BlsSignature, Hash32, Slot};
use ssz_rs::prelude::*;

#[derive(Debug, Default, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct BidRequest {
#[serde(with = "crate::serde::as_string")]
pub slot: Slot,
pub parent_hash: Hash32,
pub public_key: BlsPublicKey,
}

#[derive(Debug, Default, SimpleSerialize)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct BuilderBid {
pub header: ExecutionPayloadHeader,
pub value: U256,
pub public_key: BlsPublicKey,
}

#[derive(Debug, Default, SimpleSerialize)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SignedBuilderBid {
pub message: BuilderBid,
pub signature: BlsSignature,
}
19 changes: 19 additions & 0 deletions mev-relay-rs/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[package]
name = "mev-relay-rs"
version = "0.1.0"
edition = "2021"
license = "MIT OR Apache-2.0"
rust-version = "1.60.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
async-trait = "0.1.53"
thiserror = "1.0.30"
http = "0.2.7"

ethereum_consensus = { git = "https://github.com/ralexstokes/ethereum_consensus" }
beacon-api-client = { git = "https://github.com/ralexstokes/beacon-api-client" }
ssz_rs = { git = "https://github.com/ralexstokes/ssz_rs" }

mev-build-rs = { path = "../mev-build-rs"}
1 change: 1 addition & 0 deletions mev-relay-rs/LICENSE-APACHE
1 change: 1 addition & 0 deletions mev-relay-rs/LICENSE-MIT
24 changes: 7 additions & 17 deletions src/relay.rs → mev-relay-rs/src/client.rs
Original file line number Diff line number Diff line change
@@ -1,27 +1,17 @@
use crate::builder::{Builder, Error as BuilderError};
use crate::types::{
BidRequest, ExecutionPayload, SignedBlindedBeaconBlock, SignedBuilderBid,
SignedValidatorRegistration,
};
use async_trait::async_trait;
use beacon_api_client::{api_error_or_ok, Client as BeaconApiClient, VersionedValue};
use mev_build_rs::{
BidRequest, Builder, Error as BuilderError, ExecutionPayload, SignedBlindedBeaconBlock,
SignedBuilderBid, SignedValidatorRegistration,
};

pub type Error = beacon_api_client::Error;

impl From<Error> for BuilderError {
fn from(err: Error) -> BuilderError {
match err {
Error::Api(err) => err.into(),
err => BuilderError::Internal(err.to_string()),
}
}
}

pub struct Relay {
pub struct Client {
api: BeaconApiClient,
}

impl Relay {
impl Client {
pub fn new(api_client: BeaconApiClient) -> Self {
Self { api: api_client }
}
Expand All @@ -33,7 +23,7 @@ impl Relay {
}

#[async_trait]
impl Builder for Relay {
impl Builder for Client {
async fn register_validator(
&self,
registration: &SignedValidatorRegistration,
Expand Down
5 changes: 5 additions & 0 deletions mev-relay-rs/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
mod client;
mod relay;

pub use client::{Client, Error as ClientError};
pub use relay::Relay;
15 changes: 8 additions & 7 deletions src/relay_server.rs → mev-relay-rs/src/relay.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
use crate::builder::{Builder, Error as BuilderError};
use crate::types::{
BidRequest, BlsPublicKey, BuilderBid, ExecutionAddress, ExecutionPayload,
ExecutionPayloadHeader, SignedBlindedBeaconBlock, SignedBuilderBid,
SignedValidatorRegistration, U256,
};
use async_trait::async_trait;
use axum::http::StatusCode;
use beacon_api_client::ApiError;
use ethereum_consensus::primitives::{BlsPublicKey, ExecutionAddress};
use http::StatusCode;
use mev_build_rs::{
BidRequest, Builder, BuilderBid, Error as BuilderError, ExecutionPayload,
ExecutionPayloadHeader, SignedBlindedBeaconBlock, SignedBuilderBid,
SignedValidatorRegistration,
};
use ssz_rs::prelude::U256;
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
use thiserror::Error;
Expand Down
14 changes: 0 additions & 14 deletions src/lib.rs

This file was deleted.

29 changes: 0 additions & 29 deletions src/types.rs

This file was deleted.

0 comments on commit d7da4c0

Please sign in to comment.