2023-03-09 20:54:51 -08:00
|
|
|
use crate::{trade_fetching::{parsing::OpenBookFillEventLog, scrape::fetch_market_infos}, utils::Config};
|
2023-03-05 22:52:42 -08:00
|
|
|
use database::database::{connect_to_database, setup_database};
|
2023-03-07 22:45:37 -08:00
|
|
|
use dotenv;
|
2023-03-05 22:52:42 -08:00
|
|
|
use tokio::sync::mpsc;
|
|
|
|
|
|
|
|
mod database;
|
|
|
|
mod trade_fetching;
|
|
|
|
mod utils;
|
|
|
|
|
|
|
|
#[tokio::main]
|
|
|
|
async fn main() -> anyhow::Result<()> {
|
2023-03-07 22:45:37 -08:00
|
|
|
dotenv::dotenv().ok();
|
|
|
|
|
|
|
|
let rpc_url: String = dotenv::var("RPC_URL").unwrap();
|
|
|
|
let database_url: String = dotenv::var("DATABASE_URL").unwrap();
|
|
|
|
|
2023-03-09 20:54:51 -08:00
|
|
|
|
2023-03-07 22:45:37 -08:00
|
|
|
let config = Config {
|
|
|
|
rpc_url,
|
|
|
|
database_url,
|
|
|
|
max_pg_pool_connections: 5,
|
2023-03-05 22:52:42 -08:00
|
|
|
};
|
|
|
|
|
2023-03-09 20:54:51 -08:00
|
|
|
let markets = utils::load_markets("/Users/dboures/dev/openbook-candles/markets.json");
|
|
|
|
let market_infos = fetch_market_infos(&config, markets).await?;
|
2023-03-05 22:52:42 -08:00
|
|
|
|
|
|
|
let pool = connect_to_database(&config).await?;
|
2023-03-09 20:54:51 -08:00
|
|
|
setup_database(&pool, market_infos).await?;
|
2023-03-05 22:52:42 -08:00
|
|
|
|
2023-03-07 22:45:37 -08:00
|
|
|
let (fill_sender, fill_receiver) = mpsc::channel::<OpenBookFillEventLog>(1000);
|
2023-03-05 22:52:42 -08:00
|
|
|
|
|
|
|
// spawn a thread for each market?
|
|
|
|
// what are the memory implications?
|
|
|
|
|
2023-03-07 22:45:37 -08:00
|
|
|
// tokio::spawn(async move {
|
|
|
|
// trade_fetching::scrape::scrape(&config, fill_event_sender.clone()).await;
|
|
|
|
// });
|
|
|
|
|
2023-03-05 22:52:42 -08:00
|
|
|
tokio::spawn(async move {
|
2023-03-07 22:45:37 -08:00
|
|
|
trade_fetching::scrape::scrape(&config, fill_sender.clone()).await;
|
2023-03-05 22:52:42 -08:00
|
|
|
});
|
|
|
|
|
2023-03-07 22:45:37 -08:00
|
|
|
database::database::handle_fill_events(&pool, fill_receiver).await;
|
2023-03-05 22:52:42 -08:00
|
|
|
|
|
|
|
// trade_fetching::websocket::listen_logs().await?;
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
// use getconfirmedsignaturesforaddres2 to scan txns
|
|
|
|
// find filleventlog events
|
|
|
|
// parse trade data
|
|
|
|
// persist the last 3 months on differnet timescales
|