Skip to main content

surfpool_core/
lib.rs

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;