Skip to content

Commit 26fb35c

Browse files
authored
refactor: update config to use derive (#75)
* refactor: update config to use derive * fix: not optional
1 parent 7a12d58 commit 26fb35c

File tree

6 files changed

+156
-238
lines changed

6 files changed

+156
-238
lines changed

bin/builder.rs

+6-9
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use builder::{
66
tx_poller,
77
},
88
};
9-
use init4_bin_base::{deps::tracing, utils::calc::SlotCalculator};
9+
use init4_bin_base::{deps::tracing, utils::from_env::FromEnv};
1010
use signet_sim::SimCache;
1111
use std::sync::Arc;
1212
use tokio::select;
@@ -19,15 +19,13 @@ async fn main() -> eyre::Result<()> {
1919
let _guard = init4_bin_base::init4();
2020
let init_span_guard = info_span!("builder initialization");
2121

22-
let config = BuilderConfig::load_from_env()?.clone();
22+
let config = BuilderConfig::from_env()?.clone();
2323
let constants = config.load_pecorino_constants();
2424
let authenticator = Authenticator::new(&config)?;
2525

26-
let (host_provider, ru_provider, sequencer_signer) = tokio::try_join!(
27-
config.connect_host_provider(),
28-
config.connect_ru_provider(),
29-
config.connect_sequencer_signer(),
30-
)?;
26+
let (host_provider, sequencer_signer) =
27+
tokio::try_join!(config.connect_host_provider(), config.connect_sequencer_signer(),)?;
28+
let ru_provider = config.connect_ru_provider();
3129

3230
let zenith = config.connect_zenith(host_provider.clone());
3331

@@ -55,8 +53,7 @@ async fn main() -> eyre::Result<()> {
5553
let (submit_channel, submit_jh) = submit.spawn();
5654

5755
let sim_items = SimCache::new();
58-
let slot_calculator =
59-
SlotCalculator::new(config.start_timestamp, config.chain_offset, config.target_slot_time);
56+
let slot_calculator = config.slot_calculator;
6057

6158
let sim = Arc::new(Simulator::new(&config, ru_provider.clone(), slot_calculator));
6259

bin/submit_transaction.rs

+38-28
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,65 @@ use alloy::{
55
rpc::types::eth::TransactionRequest,
66
signers::aws::AwsSigner,
77
};
8-
use aws_config::BehaviorVersion;
9-
use builder::config::{HostProvider, load_address, load_string, load_u64, load_url};
8+
use builder::config::HostProvider;
109
use init4_bin_base::{
1110
deps::metrics::{counter, histogram},
1211
init4,
12+
utils::from_env::FromEnv,
1313
};
1414
use std::time::{Duration, Instant};
1515
use tokio::time::timeout;
1616

17+
#[derive(Debug, Clone, FromEnv)]
18+
struct Config {
19+
#[from_env(var = "RPC_URL", desc = "Ethereum RPC URL")]
20+
rpc_url: String,
21+
#[from_env(var = "CHAIN_ID", desc = "Ethereum chain ID")]
22+
chain_id: u64,
23+
#[from_env(var = "AWS_KMS_KEY_ID", desc = "AWS KMS key ID")]
24+
kms_key_id: String,
25+
#[from_env(var = "RECIPIENT_ADDRESS", desc = "Recipient address")]
26+
recipient_address: Address,
27+
#[from_env(var = "SLEEP_TIME", desc = "Time to sleep between transactions")]
28+
sleep_time: u64,
29+
}
30+
31+
impl Config {
32+
async fn provider(&self) -> HostProvider {
33+
let config = aws_config::load_defaults(aws_config::BehaviorVersion::latest()).await;
34+
let client = aws_sdk_kms::Client::new(&config);
35+
let signer =
36+
AwsSigner::new(client, self.kms_key_id.clone(), Some(self.chain_id)).await.unwrap();
37+
38+
ProviderBuilder::new()
39+
.wallet(EthereumWallet::from(signer))
40+
.connect(&self.rpc_url)
41+
.await
42+
.unwrap()
43+
}
44+
}
45+
1746
#[tokio::main]
1847
async fn main() {
1948
init4();
2049

2150
tracing::trace!("connecting to provider");
22-
let (provider, recipient_address, sleep_time) = connect_from_config().await;
51+
52+
let config = Config::from_env().unwrap();
53+
let provider = config.provider().await;
54+
let recipient_address = config.recipient_address;
55+
let sleep_time = config.sleep_time;
2356

2457
loop {
2558
tracing::debug!("attempting transaction");
26-
send_transaction(provider.clone(), recipient_address).await;
59+
send_transaction(&provider, recipient_address).await;
2760

2861
tracing::debug!(sleep_time, "sleeping");
2962
tokio::time::sleep(tokio::time::Duration::from_secs(sleep_time)).await;
3063
}
3164
}
3265

33-
async fn send_transaction(provider: HostProvider, recipient_address: Address) {
66+
async fn send_transaction(provider: &HostProvider, recipient_address: Address) {
3467
// construct simple transaction to send ETH to a recipient
3568
let tx = TransactionRequest::default()
3669
.with_from(provider.default_signer_address())
@@ -66,26 +99,3 @@ async fn send_transaction(provider: HostProvider, recipient_address: Address) {
6699
tracing::debug!(success = receipt.status(), mine_time, hash, "transaction mined");
67100
histogram!("txn_submitter.tx_mine_time").record(mine_time as f64);
68101
}
69-
70-
async fn connect_from_config() -> (HostProvider, Address, u64) {
71-
// load signer config values from .env
72-
let rpc_url = load_url("RPC_URL").unwrap();
73-
let chain_id = load_u64("CHAIN_ID").unwrap();
74-
let kms_key_id = load_string("AWS_KMS_KEY_ID").unwrap();
75-
// load transaction sending config value from .env
76-
let recipient_address: Address = load_address("RECIPIENT_ADDRESS").unwrap();
77-
let sleep_time = load_u64("SLEEP_TIME").unwrap();
78-
79-
// connect signer & provider
80-
let config = aws_config::load_defaults(BehaviorVersion::latest()).await;
81-
let client = aws_sdk_kms::Client::new(&config);
82-
let signer = AwsSigner::new(client, kms_key_id.to_string(), Some(chain_id)).await.unwrap();
83-
84-
let provider = ProviderBuilder::new()
85-
.wallet(EthereumWallet::from(signer))
86-
.connect(&rpc_url)
87-
.await
88-
.unwrap();
89-
90-
(provider, recipient_address, sleep_time)
91-
}

0 commit comments

Comments
 (0)