1pub 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
22pub 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 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}