1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
use std::sync::Arc;

use parking_lot::RwLock;
use raiden_blockchain::{
	contracts::ContractsManager,
	proxies::{
		Account,
		ProxyManager,
	},
};
use raiden_network_messages::messages::TransportServiceMessage;
use raiden_pathfinding::{
	config::PFSConfig,
	PFS,
};
use raiden_primitives::types::{
	AddressMetadata,
	ChainID,
	DefaultAddresses,
	RevealTimeout,
	SettleTimeout,
};
use raiden_state_machine::types::MediationFeeConfig;
use raiden_transition::manager::StateManager;
use tokio::sync::mpsc::UnboundedSender;
use web3::{
	transports::Http,
	Web3,
};

/// Configuration of Raiden's API.
#[derive(Clone)]
pub struct RaidenConfig {
	pub chain_id: ChainID,
	pub account: Account<Http>,
	pub mediation_config: MediationFeeConfig,
	pub monitoring_enabled: bool,
	pub pfs_config: PFSConfig,
	pub metadata: AddressMetadata,
	/// Default addresses
	pub addresses: DefaultAddresses,
	pub default_settle_timeout: SettleTimeout,
	pub default_reveal_timeout: RevealTimeout,
}

/// A Raiden instance which holds vital components for passing around.
pub struct Raiden {
	pub web3: Web3<Http>,
	/// Raiden Configurations
	pub config: RaidenConfig,
	/// Manager for contracts and deployments
	pub contracts_manager: Arc<ContractsManager>,
	/// Contract proxies manager
	pub proxy_manager: Arc<ProxyManager>,
	/// Manager of the current chain state
	pub state_manager: Arc<RwLock<StateManager>>,
	/// Transport layer
	pub transport: UnboundedSender<TransportServiceMessage>,
	/// Pathfinding
	pub pfs: Arc<PFS>,
}