Skip to content

Commit

Permalink
add uniswap v3 subgraph endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
maschad committed Jan 12, 2024
1 parent 3eef4bb commit 0fc3f47
Show file tree
Hide file tree
Showing 6 changed files with 267 additions and 47 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
/target
/logs
.vscode/
.vscode/
logs
settings.toml
139 changes: 139 additions & 0 deletions Cargo.lock

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

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ edition = "2018"
[dependencies]
cfonts = "1.1.0"
chrono = "0.4.31"
clap = { version = "4.4.16", features = ["derive"] }
crossterm = "0.27.0"
ethers = "2.0.11"
futures = "0.3.30"
rand = { version = "0.7.3", default-features = false, features = ["std"] }
ratatui = "0.25.0"
serde = "1.0.194"
simplelog = "0.12.1"
tokio = { version = "1.35.1", features = ["full"] }
url = "2.5.0"
71 changes: 59 additions & 12 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,21 @@ use std::thread;
use std::time::{Duration, Instant};

use app::App;
use chrono::Utc;
use crossterm::{
event::{self, Event as CEvent, KeyCode},
terminal::{disable_raw_mode, enable_raw_mode},
};
use network::network::{handle_tokio, Network, NetworkEvent};

use crate::widgets::{
chart::{render_chart, TokenChart},
search::render_search_block,
table::{render_table, StatefulTable},
tabs::{render_tab_titles, TabsState},
welcome::render_welcome,
};
use clap::Parser;
use models::event_handling::Event;
use models::states::InputMode;
use ratatui::{
Expand All @@ -19,9 +29,10 @@ use ratatui::{
Terminal,
};
use routes::{ActiveBlock, Route, RouteId};
use simplelog::{
ColorChoice, CombinedLogger, Config, LevelFilter, TermLogger, TerminalMode, WriteLogger,
};
use tokio::sync::Mutex;
use widgets::search::render_search_block;
use widgets::welcome::render_welcome;

mod app;
mod models;
Expand All @@ -30,22 +41,46 @@ mod routes;
mod util;
mod widgets;

use crate::widgets::{
chart::{render_chart, TokenChart},
table::{render_table, StatefulTable},
tabs::{render_tab_titles, TabsState},
};
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
struct Args {
/// Etherscan Json-RPC URL
#[arg(short, long, default_value = "https://eth.public-rpc.com")]
etherscan_endpoint: String,
/// Uniswap v3 Subgraph URL
#[arg(
short,
long,
default_value = "https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3/graphql"
)]
uniswap_v3_endpoint: String,
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let _ = std::fs::create_dir("logs");

CombinedLogger::init(vec![
TermLogger::new(
LevelFilter::Error,
Config::default(),
TerminalMode::Mixed,
ColorChoice::Auto,
),
WriteLogger::new(
LevelFilter::Debug,
Config::default(),
std::fs::File::create(format!("logs/{}.log", Utc::now().format("%Y%m%d%H%M"))).unwrap(),
),
])
.unwrap();

enable_raw_mode().expect("can run in raw mode");

let (tx, rx) = mpsc::channel();
let tick_rate = Duration::from_millis(200);

let app = Arc::new(Mutex::new(App::default()));
let mut app = app.lock().await;

// Start tick thread
thread::spawn(move || {
let mut last_tick = Instant::now();
loop {
Expand All @@ -67,11 +102,23 @@ async fn main() -> Result<(), Box<dyn Error>> {
}
});

let app = Arc::new(Mutex::new(App::default()));
let cloned_app = app.clone();
let args = Args::parse();
let (sync_network_tx, sync_network_rx) = mpsc::channel::<NetworkEvent>();

// Start network thread
std::thread::spawn(move || {
let mut network = Network::default(app, args.etherscan_endpoint, args.uniswap_v3_endpoint);
handle_tokio(sync_network_rx, &mut network);
});

let stdout = io::stdout();
let stdout = stdout.lock();
let backend = CrosstermBackend::new(stdout);
let mut terminal = Terminal::new(backend)?;

let mut app = cloned_app.lock().await;
let mut terminal = Terminal::new(backend)?;
let mut table = StatefulTable::new();
let mut token_chart = TokenChart::new();

Expand Down Expand Up @@ -150,7 +197,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
let message = app.submit_search();
app.set_route(Route::new(
RouteId::Searching(message),
ActiveBlock::MyPosition,
ActiveBlock::MyPositions,
));
}
_ => {}
Expand Down

0 comments on commit 0fc3f47

Please sign in to comment.