Skip to content

Commit 29cf6b5

Browse files
start better config
1 parent c1c5ce5 commit 29cf6b5

2 files changed

Lines changed: 80 additions & 27 deletions

File tree

swap-orchestrator/src/containers.rs

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ use crate::{
1212

1313
// Important: don't add slashes or anything here
1414
// Todo: find better way to do that
15-
const MONEROD_DATA: &str = "monerod-data";
16-
const BITCOIN_DATA: &str = "bitcoin-data";
17-
const ELECTRS_DATA: &str = "electrs-data";
18-
const ASB_DATA: &str = "asb-data";
15+
pub const MONEROD_DATA: &str = "monerod-data";
16+
pub const BITCOIN_DATA: &str = "bitcoin-data";
17+
pub const ELECTRS_DATA: &str = "electrs-data";
18+
pub const ASB_DATA: &str = "asb-data";
1919

2020
/// Add all the services/volumes to the compose config
2121
#[allow(unused_variables)]
@@ -91,19 +91,28 @@ pub fn monerod(
9191
(monerod_data, monerod_service, monerod_rpc_port)
9292
}
9393

94+
pub struct BitcoindConfig {
95+
enabled: bool,
96+
container_name: String,
97+
volume_name: String,
98+
network: bitcoin::Network,
99+
p2p_port: u16,
100+
rpc_port: u16,
101+
}
102+
94103
/// Adds the volume/service to the compose config and returns them + the rpc bind port and p2p bind port
95104
pub fn bitcoind(
96105
compose: &mut ComposeConfig,
97-
network: bitcoin::Network,
98-
enabled: bool,
106+
config: BitcoindConfig,
99107
) -> (Arc<Volume>, Arc<Service>, u16, u16) {
100-
let (rpc_port, p2p_port, chain): (u16, u16, &str) = match network {
101-
bitcoin::Network::Bitcoin => (8332, 8333, "main"),
102-
bitcoin::Network::Testnet => (18332, 18333, "test"),
108+
let chain = match config.network {
109+
bitcoin::Network::Bitcoin => "main",
110+
bitcoin::Network::Testnet => "test",
103111
_ => panic!("unsupported bitcoin network"),
104112
};
113+
let (rpc_port, p2p_port) = (config.rpc_port, config.p2p_port);
105114

106-
let bitcoind_data = compose.add_volume(BITCOIN_DATA);
115+
let bitcoind_data = compose.add_volume(config.volume_name);
107116

108117
let bitcoind_command = command!(
109118
"bitcoind",
@@ -119,38 +128,45 @@ pub fn bitcoind(
119128
);
120129

121130
let bitcoind = Service::new(
122-
"bitcoind",
131+
config.container_name,
123132
ImageSource::from_registry(images::BITCOIND_IMAGE),
124133
)
125134
.with_mount(Mount::volume(&bitcoind_data))
126135
.with_exposed_port(rpc_port)
127136
.with_exposed_port(p2p_port)
128137
.with_command(bitcoind_command)
129-
.with_enabled(enabled);
138+
.with_enabled(config.enabled);
130139

131140
let bitcoind = compose.add_service(bitcoind);
132141

133142
(bitcoind_data, bitcoind, rpc_port, p2p_port)
134143
}
135144

145+
pub struct ElectrsConfig {
146+
enabled: bool,
147+
container_name: String,
148+
volume_name: String,
149+
network: bitcoin::Network,
150+
port: u16,
151+
}
152+
136153
pub fn electrs(
137154
compose: &mut ComposeConfig,
138-
network: bitcoin::Network,
139-
enabled: bool,
140155
bitcoind_rpc_port: u16,
141156
bitcoind_p2p_port: u16,
142157
bitcoind: Arc<Service>,
143158
bitcoind_data: Arc<Volume>,
159+
config: ElectrsConfig,
144160
) -> (Arc<Volume>, Arc<Service>, u16) {
145-
let (port, chain): (u16, &str) = match network {
161+
let (port, chain): (u16, &str) = match config.network {
146162
bitcoin::Network::Bitcoin => (50001, "bitcoin"),
147163
bitcoin::Network::Testnet => (50001, "testnet"),
148164
_ => panic!("unsupported bitcoin network"),
149165
};
150166

151167
let bitcoind_name = bitcoind.name();
152168

153-
let electrs_data = compose.add_volume(ELECTRS_DATA);
169+
let electrs_data = compose.add_volume(config.volume_name);
154170
let command = command!(
155171
"electrs",
156172
flag!("--network={chain}"),
@@ -164,12 +180,15 @@ pub fn electrs(
164180
flag!("--electrum-rpc-addr=0.0.0.0:{port}"),
165181
flag!("--log-filters=INFO"),
166182
);
167-
let service = Service::new("electrs", ImageSource::from_registry(images::ELECTRS_IMAGE))
168-
.with_dependency(bitcoind.clone())
169-
.with_exposed_port(port)
170-
.with_command(command)
171-
.with_mount(Mount::volume(&electrs_data))
172-
.with_enabled(enabled);
183+
let service = Service::new(
184+
config.container_name,
185+
ImageSource::from_registry(images::ELECTRS_IMAGE),
186+
)
187+
.with_dependency(bitcoind.clone())
188+
.with_exposed_port(port)
189+
.with_command(command)
190+
.with_mount(Mount::volume(&electrs_data))
191+
.with_enabled(config.enabled);
173192

174193
let service = compose.add_service(service);
175194

swap-orchestrator/src/main.rs

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ fn main() {
9292
/// The complete config, whether to create a full bitcoin/electrum node and whether to create a full monero node
9393
fn setup_wizard(
9494
existing_config: Option<Result<Config>>,
95-
defaults: Defaults,
95+
bitcoin_network: bitcoin::Network,
96+
monero_network: monero::Network,
9697
) -> Result<(Config, bool, bool)> {
9798
// If we already have a valid config, just use it and deduce the monero/bitcoin settings
9899
if let Some(Ok(config)) = existing_config {
@@ -129,9 +130,11 @@ fn setup_wizard(
129130
.item("Abort and leave my `config.toml` alone")
130131
.interact()?;
131132

132-
if choice != 0 {
133+
134+
if choice == 1 {
135+
// user chose to abort
133136
println!("Stopping wizard. Goodbye!");
134-
bail!("User doesn't want to procede.")
137+
return Err(anyhow!("User doesn't want to procede."))
135138
}
136139

137140
std::fs::rename(CONFIG_PATH, &proposed_filename)?;
@@ -152,8 +155,14 @@ fn setup_wizard(
152155
// - listen addresses
153156
// - tip
154157

155-
let min_buy = config_prompt::min_buy_amount()?;
156-
let max_buy = config_prompt::max_buy_amount()?;
158+
let defaults = match (bitcoin_network, monero_network) {
159+
(bitcoin::Network::Bitcoin, monero::Network::Mainnet) => Mainnet::get_config_file_defaults()?,
160+
(bitcoin::Network::Testnet, monero::Network::Stagenet) => Testnet::get_config_file_defaults()?,
161+
(a, b) => bail!("unsupported network combo: Bitcoin::{a} and Monero::{:?}", b)
162+
};
163+
164+
let min_buy_btc = config_prompt::min_buy_amount()?;
165+
let max_buy_btc = config_prompt::max_buy_amount()?;
157166
let markup = config_prompt::ask_spread()?;
158167
let rendezvous_points = config_prompt::rendezvous_points()?;
159168
let hidden_service = config_prompt::tor_hidden_service()?;
@@ -162,8 +171,33 @@ fn setup_wizard(
162171
let monero_node_type = prompt::monero_node_type();
163172
let electrum_node_type = prompt::electrum_server_type(&defaults.electrum_rpc_urls);
164173

174+
let electrum_rpc_urls = match electrum_node_type {
175+
prompt::ElectrumServerType::Included => vec![],
176+
}
177+
165178
let tip = config_prompt::developer_tip()?;
166179

180+
181+
let config = Config {
182+
data: Data {
183+
dir: PathBuf::from("/").join(containers::ASB_DATA),
184+
},
185+
network: Network {
186+
listen: listen_addresses,
187+
rendezvous_point: rendezvous_points,
188+
external_addresses: Vec::new(),
189+
},
190+
maker: Maker {
191+
max_buy_btc,
192+
min_buy_btc,
193+
ask_spread: markup,
194+
price_ticker_ws_url: defaults.price_ticker_ws_url,
195+
external_bitcoin_redeem_address: None,
196+
developer_tip: tip,
197+
},
198+
bitcoin: Bitcoin { electrum_rpc_urls: , target_block: defaults.bitcoin_confirmation_target, finality_confirmations: None, network: defaults., use_mempool_space_fee_estimation: () }
199+
};
200+
167201
bail!("unimplemented")
168202
}
169203

0 commit comments

Comments
 (0)