From cbe75d1db7cb34545f1ff3370daad3170525a659 Mon Sep 17 00:00:00 2001 From: Alex Stokes Date: Tue, 28 Feb 2023 10:17:12 -0700 Subject: [PATCH] install transaction injector to builder service --- example.config.toml | 5 +++++ mev-build-rs/src/service.rs | 30 ++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/example.config.toml b/example.config.toml index 1b8d3ad4..07d2e6dc 100644 --- a/example.config.toml +++ b/example.config.toml @@ -20,3 +20,8 @@ secret_key = "0x14b6e79cbc6267c6e527b4bf7a71747d42a58b10279366cf0c7bb4e2aa455901 host = "0.0.0.0" port = 8551 engine_api_endpoint = "http://127.0.0.1:8552" + +[builder.transaction_injector] +mnemonic = "work man father plunge mystery proud hollow address reunion sauce theory bonus" +chain_id = 1337 +provider_url = "http://127.0.0.1:8545" diff --git a/mev-build-rs/src/service.rs b/mev-build-rs/src/service.rs index 41646908..f52d18f9 100644 --- a/mev-build-rs/src/service.rs +++ b/mev-build-rs/src/service.rs @@ -10,6 +10,7 @@ use mev_rs::{ Client as HttpClient, Config as EngineApiProxyConfig, Proxy, Server as EngineApiProxy, }, }, + transaction_injector::{Config as TransactionInjectorConfig, Injector as TransactionInjector}, Error, Network, }; use serde::Deserialize; @@ -31,6 +32,8 @@ pub struct Config { pub network: Network, pub engine_api_proxy: EngineApiProxyConfig, pub secret_key: SecretKey, + #[serde(default)] + pub transaction_injector: Option, } impl fmt::Debug for Config { @@ -42,6 +45,7 @@ impl fmt::Debug for Config { .field("network", &self.network) .field("engine_api_proxy", &self.engine_api_proxy) .field("secret_key", &"...") + .field("transaction_injector", &self.transaction_injector) .finish() } } @@ -55,6 +59,7 @@ impl Default for Config { network: Default::default(), engine_api_proxy: Default::default(), secret_key: SecretKey::default(), + transaction_injector: None, } } } @@ -69,8 +74,15 @@ impl Service { } pub async fn spawn(self, context: Option) -> Result { - let Config { host, port, beacon_api_endpoint, network, engine_api_proxy, secret_key } = - self.config; + let Config { + host, + port, + beacon_api_endpoint, + network, + engine_api_proxy, + secret_key, + transaction_injector, + } = self.config; let beacon_api_endpoint: Url = beacon_api_endpoint.parse().unwrap(); let client = Client::new(beacon_api_endpoint); @@ -101,6 +113,14 @@ impl Service { let current_epoch = clock.current_epoch(); builder.initialize(current_epoch).await; + let mut transaction_injector = + transaction_injector.and_then(|config| match TransactionInjector::new(config) { + Ok(injector) => Some(injector), + Err(err) => { + tracing::warn!("could not create transaction injector: {err}"); + None + } + }); let clock = tokio::spawn(async move { let slots = clock.stream_slots(); @@ -108,6 +128,12 @@ impl Service { while let Some(slot) = slots.next().await { builder.on_slot(slot).await; + if let Some(transaction_injector) = &mut transaction_injector { + match transaction_injector.submit_transaction().await { + Ok(txn_hash) => tracing::info!("injected transaction with hash {txn_hash}"), + Err(err) => tracing::warn!("error injecting transaction: {err}"), + } + } } });