Skip to main content

pot_o_extensions/
lib.rs

1//! PoT-O extensions: chain bridge, DeFi client, device protocol, peer network, pool strategy, and proof authority.
2
3pub mod chain_bridge;
4pub mod defi;
5pub mod device_protocol;
6pub mod peer_network;
7pub mod pool_strategy;
8pub mod security;
9
10pub use chain_bridge::{ChainBridge, SolanaBridge};
11pub use defi::{
12    DefiClient, EscrowInfo, LiquidityPoolInfo, StakeAccountInfo, StakingPoolInfo, SwapQuoteInfo,
13    TreasuryInfo, UserVaultInfo,
14};
15pub use device_protocol::{
16    DeviceProtocol, DeviceStatus, DeviceType, ESP32SDevice, ESP8266Device, NativeDevice, WasmDevice,
17};
18pub use peer_network::{LocalOnlyNetwork, PeerNetwork};
19pub use pool_strategy::{PoolStrategy, SoloStrategy};
20pub use security::{Ed25519Authority, ProofAuthority};
21
22/// Central registry that holds the active extension implementations.
23/// Constructed once at startup from config/env, then passed by reference.
24pub struct ExtensionRegistry {
25    pub device: Box<dyn DeviceProtocol>,
26    pub network: Box<dyn PeerNetwork>,
27    pub pool: Box<dyn PoolStrategy>,
28    pub chain: Box<dyn ChainBridge>,
29    pub auth: Box<dyn ProofAuthority>,
30}
31
32impl ExtensionRegistry {
33    /// Build the default registry for single-node local operation.
34    pub fn local_defaults(
35        solana_rpc_url: &str,
36        program_id: &str,
37        relayer_keypair_path: &str,
38        auto_register_miners: bool,
39    ) -> Self {
40        Self {
41            device: Box::new(NativeDevice::new()),
42            network: Box::new(LocalOnlyNetwork::new()),
43            pool: Box::new(SoloStrategy),
44            chain: Box::new(SolanaBridge::new(
45                solana_rpc_url.to_string(),
46                program_id.to_string(),
47                relayer_keypair_path.to_string(),
48                auto_register_miners,
49            )),
50            auth: Box::new(Ed25519Authority),
51        }
52    }
53}