1#[macro_use]
2extern crate log;
3
4#[allow(unused_imports)]
5#[macro_use]
6extern crate serde_derive;
7
8#[allow(unused_imports)]
9#[cfg(test)]
10#[macro_use]
11extern crate serde_json;
12
13pub mod error;
14pub mod helpers;
15pub mod rpc;
16pub mod runloops;
17pub mod scenarios;
18pub mod storage;
19pub mod surfnet;
20pub mod types;
21
22use crossbeam_channel::{Receiver, Sender};
23pub use jsonrpc_core;
24pub use jsonrpc_http_server;
25pub use litesvm;
26use solana_pubkey::Pubkey;
27pub use solana_rpc_client;
28use surfnet::{GeyserEvent, locker::SurfnetSvmLocker, svm::SurfnetSvm};
29use surfpool_types::{SimnetCommand, SubgraphCommand, SurfpoolConfig};
30use txtx_addon_network_svm_types::subgraph::PluginConfig;
31use uuid::Uuid;
32
33pub const SURFPOOL_IDENTITY_PUBKEY: Pubkey =
34 Pubkey::from_str_const("SUrFPooLSUrFPooLSUrFPooLSUrFPooLSUrFPooLSUr");
35
36pub async fn start_local_surfnet(
37 surfnet_svm: SurfnetSvm,
38 config: SurfpoolConfig,
39 subgraph_commands_tx: Sender<SubgraphCommand>,
40 simnet_commands_tx: Sender<SimnetCommand>,
41 simnet_commands_rx: Receiver<SimnetCommand>,
42 geyser_events_rx: Receiver<GeyserEvent>,
43) -> Result<(), Box<dyn std::error::Error>> {
44 let svm_locker = SurfnetSvmLocker::new(surfnet_svm);
45 runloops::start_local_surfnet_runloop(
46 svm_locker,
47 config,
48 subgraph_commands_tx,
49 simnet_commands_tx,
50 simnet_commands_rx,
51 geyser_events_rx,
52 )
53 .await
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
57#[serde(rename_all = "camelCase")]
58pub struct PluginInfo {
59 pub plugin_name: String,
60 pub uuid: String,
61}
62
63#[derive(Debug)]
64pub enum PluginManagerCommand {
65 LoadConfig(Uuid, PluginConfig, Sender<String>),
66 UnloadPlugin(Uuid, Sender<Result<(), String>>),
67 ReloadPlugin(Uuid, PluginConfig, Sender<String>),
68 ListPlugins(Sender<Vec<PluginInfo>>),
69}
70
71#[cfg(test)]
72mod tests;