mango-pnl-service: first steps
This commit is contained in:
parent
cdf6d54156
commit
30a4ca71ee
|
@ -2501,6 +2501,26 @@ dependencies = [
|
||||||
"syn 1.0.81",
|
"syn 1.0.81",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mango-pnl-service"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"async-trait",
|
||||||
|
"bs58 0.3.1",
|
||||||
|
"fixed",
|
||||||
|
"log 0.4.14",
|
||||||
|
"mango",
|
||||||
|
"mango-common",
|
||||||
|
"serde",
|
||||||
|
"serde_derive",
|
||||||
|
"solana-geyser-connector-lib",
|
||||||
|
"solana-logger",
|
||||||
|
"tokio",
|
||||||
|
"tokio-postgres",
|
||||||
|
"toml",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "matches"
|
name = "matches"
|
||||||
version = "0.1.9"
|
version = "0.1.9"
|
||||||
|
|
|
@ -4,6 +4,7 @@ members = [
|
||||||
"lib",
|
"lib",
|
||||||
"connector-raw",
|
"connector-raw",
|
||||||
"connector-mango",
|
"connector-mango",
|
||||||
|
"mango-pnl-service",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
[package]
|
||||||
|
name = "mango-pnl-service"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Christian Kamm <mail@ckamm.de>"]
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
solana-geyser-connector-lib = { path = "../lib" }
|
||||||
|
solana-logger = "=1.9.13"
|
||||||
|
log = "0.4"
|
||||||
|
anyhow = "1.0"
|
||||||
|
toml = "0.5"
|
||||||
|
|
||||||
|
async-trait = "0.1"
|
||||||
|
fixed = { version = "=1.9.0", features = ["serde"] }
|
||||||
|
bs58 = "0.3.1"
|
||||||
|
tokio = { version = "1", features = ["full"] }
|
||||||
|
tokio-postgres = "0.7.4"
|
||||||
|
|
||||||
|
serde = "1.0.130"
|
||||||
|
serde_derive = "1.0.130"
|
||||||
|
|
||||||
|
# The v3.2 branch currently has a conflicting syn version dependency, use a fixed version
|
||||||
|
mango = { git = "https://github.com/ckamm/mango-v3", rev = "2e1e4886544bdb1c5f773a3856305210f622fa94" }
|
||||||
|
mango-common = { git = "https://github.com/ckamm/mango-v3", rev = "2e1e4886544bdb1c5f773a3856305210f622fa94" }
|
|
@ -0,0 +1,19 @@
|
||||||
|
[source]
|
||||||
|
dedup_queue_size = 50000
|
||||||
|
rpc_ws_url = ""
|
||||||
|
|
||||||
|
[[source.grpc_sources]]
|
||||||
|
name = "server"
|
||||||
|
connection_string = "http://[::1]:10000"
|
||||||
|
retry_connection_sleep_secs = 30
|
||||||
|
|
||||||
|
#[source.grpc_sources.tls]
|
||||||
|
#ca_cert_path = "ca.pem"
|
||||||
|
#client_cert_path = "client.pem"
|
||||||
|
#client_key_path = "client.pem"
|
||||||
|
#domain_name = "example.com"
|
||||||
|
|
||||||
|
[source.snapshot]
|
||||||
|
rpc_http_url = ""
|
||||||
|
program_id = "mv3ekLzLbnVPNxjSKvqBpU3ZeZXPQdEC3bp5MDEBG68"
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
use {
|
||||||
|
log::*,
|
||||||
|
serde_derive::Deserialize,
|
||||||
|
solana_geyser_connector_lib::chain_data::ChainData,
|
||||||
|
solana_geyser_connector_lib::*,
|
||||||
|
std::{
|
||||||
|
fs::File,
|
||||||
|
io::Read,
|
||||||
|
sync::{Arc, RwLock},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, Deserialize)]
|
||||||
|
pub struct Config {
|
||||||
|
pub source: SourceConfig,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() -> anyhow::Result<()> {
|
||||||
|
let args: Vec<String> = std::env::args().collect();
|
||||||
|
if args.len() < 2 {
|
||||||
|
println!("requires a config file argument");
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
|
let config: Config = {
|
||||||
|
let mut file = File::open(&args[1])?;
|
||||||
|
let mut contents = String::new();
|
||||||
|
file.read_to_string(&mut contents)?;
|
||||||
|
toml::from_str(&contents).unwrap()
|
||||||
|
};
|
||||||
|
|
||||||
|
solana_logger::setup_with_default("info");
|
||||||
|
info!("startup");
|
||||||
|
|
||||||
|
let metrics_tx = metrics::start();
|
||||||
|
|
||||||
|
let chain_data = Arc::new(RwLock::new(ChainData::new()));
|
||||||
|
let (account_write_queue_sender, slot_queue_sender) =
|
||||||
|
memory_target::init(chain_data.clone()).await?;
|
||||||
|
grpc_plugin_source::process_events(
|
||||||
|
&config.source,
|
||||||
|
account_write_queue_sender,
|
||||||
|
slot_queue_sender,
|
||||||
|
metrics_tx,
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
Loading…
Reference in New Issue