Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ members = [
"crates/sysperf",
"crates/test-relay",
"crates/bid-scraper",
"crates/reactive-bidding-service",
]
default-members = [
"crates/rbuilder",
Expand Down
91 changes: 58 additions & 33 deletions crates/bid-scraper/config.toml
Original file line number Diff line number Diff line change
@@ -1,41 +1,66 @@
log_json = true
log_level = "info"
log_level = "debug"
log_color = false
publisher_url ="tcp://0.0.0.0:5555"
#
#[[publishers]]
#type = "relay-bids"
#name = "relay-bids-1"
#relays_file = "/home/daniel/fb/rbuilder/crates/bid-scraper/relays.json"
#eth_provider_uri = "ws://localhost:8545"
#request_interval_s = 1.0
#time_offset_index = 0
#time_offset_count = 3
#request_start_s = 5
#
#
#[[publishers]]
#type = "relay-headers"
#name = "relay-headers-1"
#beacon_node_uri = "http://localhost:3500"
#relays_file = "/home/daniel/fb/rbuilder/crates/bid-scraper/relays.json"
#eth_provider_uri = "ws://127.0.0.1:8545"
#request_interval_s = 1.0
#time_offset_index = 0
#time_offset_count = 3
#request_start_s = 5

[[publishers]]
type = "relay-bids"
name = "relay-bids-1"
relays_file = "/home/daniel/fb/rbuilder/crates/bid-scraper/relays.json"
eth_provider_uri = "ws://localhost:8545"
request_interval_s = 1.0
time_offset_index = 0
time_offset_count = 3
request_start_s = 5


[[publishers]]
type = "relay-headers"
name = "relay-headers-1"
beacon_node_uri = "http://localhost:3500"
relays_file = "/home/daniel/fb/rbuilder/crates/bid-scraper/relays.json"
eth_provider_uri = "ws://127.0.0.1:8545"
request_interval_s = 1.0
time_offset_index = 0
time_offset_count = 3
request_start_s = 5

[[publishers]]
type = "ultrasound-ws"
name = "ultrasound-us"
ultrasound_url = "ws://relay-builders-eu.ultrasound.money/ws/v1/top_bid"
relay_name = "ultrasound-us"
# A more effiecient connection can be achieved by following the docs here: https://docs.ultrasound.money/builders/direct-auction-connections
#[[publishers]]
#type = "ultrasound-ws"
#name = "ultrasound-eu"
#ultrasound_url = "ws://relay-builders-eu.ultrasound.money/ws/v1/top_bid"
#relay_name = "ultrasound-eu"
# Optional headers for ultrasound builder-direct endpoint (leave unset for public WS)
# builder_id = "env:ULTRASOUND_BUILDER_ID"
# api_token = "env:ULTRASOUND_API_TOKEN"

#[[publishers]]
#type = "ultrasound-ws"
#name = "ultrasound-us"
#ultrasound_url = "ws://relay-builders-us.ultrasound.money/ws/v1/top_bid"
#relay_name = "ultrasound-us"
#
#
#[[publishers]]
#type = "ultrasound-ws"
#name = "ultrasound-jp"
#ultrasound_url = "ws://relay-builders-jp.ultrasound.money/ws/v1/top_bid"
#relay_name = "ultrasound-jp"

# Titan WS requires builder access (0.10% of blocks, 0.1 ETH collateral)
[[publishers]]
type = "bloxroute-ws"
name = "bloxroute"
bloxroute_url = "wss://mev-eth.blxrbdn.com/ws"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might be a good idea to include bloXroute as too. We have a subscription and and a key (same as the one used for the bloXroute relay auth).

relay_name = "bloxroute"
auth_header = "env:BLOXROUTE_AUTH_HEADER"
type = "titan-ws"
name = "titan"
titan_url = "wss://us-global.titanrelay.xyz/builder/top_bid"
relay_name = "titan-ws"
api_token = "env:TITAN_API_TOKEN"
#
##
#[[publishers]]
#type = "bloxroute-ws"
#name = "bloxroute"
#bloxroute_url = "wss://mev-eth.blxrbdn.com/ws"
#relay_name = "bloxroute"
#auth_header = "env:BLOXROUTE_AUTH_HEADER"

6 changes: 3 additions & 3 deletions crates/bid-scraper/src/titan_ws_publisher.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ impl ConnectionHandler for TitanWsConnectionHandler {
}
fn configure_request(&self, request: &mut Request<()>) -> eyre::Result<()> {
let headers = request.headers_mut();
let api_token_header_value = tokio_tungstenite::tungstenite::http::HeaderValue::from_str(
let api_key_header_value = tokio_tungstenite::tungstenite::http::HeaderValue::from_str(
&self.cfg.api_token.value()?,
)
.wrap_err("Invalid header value for 'X-Api-Token'")?;
headers.insert("X-Api-Token", api_token_header_value);
.wrap_err("Invalid header value for 'x-api-key'")?;
headers.insert("x-api-key", api_key_header_value);
Ok(())
}

Expand Down
13 changes: 7 additions & 6 deletions crates/bid-scraper/src/ws_publisher.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,22 +50,23 @@ where
}

pub async fn run(self) {
let url = self.handler.url();
if let Err(err) = self.run_with_error().await {
error!(err=?err, "UltrasoundWs failed");
error!(err=?err, url=%url, "WebSocket publisher failed");
}
}

async fn run_with_error(self) -> eyre::Result<()> {
let mut request = self
.handler
.url()
let url = self.handler.url();
let mut request = url
.clone()
.into_client_request()
.wrap_err("Unable to create request")?;
self.handler.configure_request(&mut request)?;
let (ws_stream, _) = timeout(RPC_TIMEOUT, tokio_tungstenite::connect_async(request))
.await
.wrap_err("timeout when connecting to ultrasound")?
.wrap_err("unable to connect to ultrasound")?;
.wrap_err_with(|| format!("timeout when connecting to {}", url))?
.wrap_err_with(|| format!("unable to connect to {}", url))?;

let (mut write, mut read) = ws_stream.split();
self.handler.init_connection(&mut write, &mut read).await?;
Expand Down
Loading
Loading