mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-08 12:19:24 +00:00
64 lines
1.7 KiB
Rust
64 lines
1.7 KiB
Rust
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
|
#![doc = include_str!("../README.md")]
|
|
#![deny(missing_docs)]
|
|
|
|
#[global_allocator]
|
|
static ALLOCATOR: zalloc::ZeroizingAlloc<std::alloc::System> =
|
|
zalloc::ZeroizingAlloc(std::alloc::System);
|
|
|
|
use std::sync::Arc;
|
|
|
|
use alloy_core::primitives::U256;
|
|
use alloy_simple_request_transport::SimpleRequest;
|
|
use alloy_rpc_client::ClientBuilder;
|
|
use alloy_provider::{Provider, RootProvider};
|
|
|
|
use serai_env as env;
|
|
|
|
mod primitives;
|
|
pub(crate) use crate::primitives::*;
|
|
|
|
mod key_gen;
|
|
use crate::key_gen::KeyGenParams;
|
|
mod rpc;
|
|
use rpc::Rpc;
|
|
mod scheduler;
|
|
use scheduler::{SmartContract, Scheduler};
|
|
mod publisher;
|
|
use publisher::TransactionPublisher;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
let db = bin::init();
|
|
let feed = {
|
|
let provider = Arc::new(RootProvider::new(
|
|
ClientBuilder::default().transport(SimpleRequest::new(bin::url()), true),
|
|
));
|
|
Rpc { provider }
|
|
};
|
|
let chain_id = loop {
|
|
match feed.provider.get_chain_id().await {
|
|
Ok(chain_id) => break U256::try_from(chain_id).unwrap(),
|
|
Err(e) => {
|
|
log::error!("couldn't connect to the Ethereum node for the chain ID: {e:?}");
|
|
tokio::time::sleep(core::time::Duration::from_secs(5)).await;
|
|
}
|
|
}
|
|
};
|
|
|
|
bin::main_loop::<_, KeyGenParams, _>(
|
|
db,
|
|
feed.clone(),
|
|
Scheduler::new(SmartContract { chain_id }),
|
|
TransactionPublisher::new({
|
|
let relayer_hostname = env::var("ETHEREUM_RELAYER_HOSTNAME")
|
|
.expect("ethereum relayer hostname wasn't specified")
|
|
.to_string();
|
|
let relayer_port =
|
|
env::var("ETHEREUM_RELAYER_PORT").expect("ethereum relayer port wasn't specified");
|
|
relayer_hostname + ":" + &relayer_port
|
|
}),
|
|
)
|
|
.await;
|
|
}
|