Skip to content

Commit b263400

Browse files
committed
feat: allow running cch as a separate service
1 parent 3e157e9 commit b263400

39 files changed

+1182
-143
lines changed

.github/workflows/e2e.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ jobs:
1414
- udt
1515
- reestablish
1616
- cross-chain-hub
17+
- cross-chain-hub-separate
1718
- router-pay
1819
- udt-router-pay
1920
- watchtower
@@ -60,7 +61,7 @@ jobs:
6061
wget "https://github.com/nervosnetwork/ckb/releases/download/v${version}/ckb_v${version}_x86_64-unknown-linux-gnu-portable.tar.gz"
6162
tar -xvaf "ckb_v${version}_x86_64-unknown-linux-gnu-portable.tar.gz"
6263
sudo mv "ckb_v${version}_x86_64-unknown-linux-gnu-portable"/* /usr/local/bin/
63-
if [ ${{ matrix.workflow }} = "cross-chain-hub" ]; then
64+
if [[ "${{ matrix.workflow }}" = cross-chain-hub* ]]; then
6465
wget "https://bitcoin.org/bin/bitcoin-core-27.0/bitcoin-27.0-x86_64-linux-gnu.tar.gz"
6566
tar -xvaf "bitcoin-27.0-x86_64-linux-gnu.tar.gz"
6667
echo "$(pwd)/bitcoin-27.0/bin" >> $GITHUB_PATH
@@ -82,13 +83,15 @@ jobs:
8283
export ON_GITHUB_ACTION=y
8384
# Pass it to tests/funding-tx-builder as args
8485
export EXTRA_BRU_ARGS="${{ matrix.extra_bru_args }}"
86+
87+
port_file=./tests/nodes/.ports
88+
rm -f "$port_file"
8589
./tests/nodes/start.sh "e2e/${{ matrix.workflow }}" &
8690
8791
# Wait for the nodes to start, the initialization takes some time
8892
# check all the ports are open
8993
9094
# when .ports file is not generated, we will retry 20 times to check if all ports are open
91-
port_file=./tests/nodes/.ports
9295
retry_count=0
9396
while [ $retry_count -lt 100 ]; do
9497
if [ -f $port_file ]; then
@@ -105,6 +108,7 @@ jobs:
105108
ports+=("$line")
106109
done < ./tests/nodes/.ports
107110
111+
cat ./tests/nodes/.ports_map
108112
echo "Checking if all ports are open ... ${ports[@]}"
109113
110114
try_number=120

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
/tests/nodes/*/dev.toml
1111
/tests/nodes/*.log
1212
/tests/deploy/udt-init/target
13-
tests/nodes/.ports
13+
/tests/nodes/.ports
14+
/tests/nodes/.ports_map
15+
/tests/nodes/.ports_tmp
1416
/coverage-report
1517
/*.info
1618
.vscode

crates/fiber-bin/src/main.rs

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,9 @@ pub async fn main() -> Result<(), ExitMessage> {
7878
let _span = info_span!("node", node = fnn::get_node_prefix()).entered();
7979

8080
let config = Config::parse();
81+
let fiber_fallback_config = config.fiber_fallback_config.clone();
8182

82-
let store_path = config
83-
.fiber
84-
.as_ref()
85-
.ok_or_else(|| ExitMessage("fiber config is required but absent".to_string()))?
86-
.store_path();
83+
let store_path = fiber_fallback_config.store_path();
8784

8885
let store = Store::new(store_path).map_err(|err| ExitMessage(err.to_string()))?;
8986
let store = StoreWithPubSub::new(store);
@@ -102,10 +99,7 @@ pub async fn main() -> Result<(), ExitMessage> {
10299
});
103100

104101
#[allow(unused_variables)]
105-
let (network_actor, ckb_chain_actor, network_graph, node_public_key) = match config
106-
.fiber
107-
.clone()
108-
{
102+
let (network_actor, ckb_chain_actor, network_graph) = match config.fiber.clone() {
109103
Some(fiber_config) => {
110104
// TODO: this is not a super user friendly error message which has actionable information
111105
// for the user to fix the error and start the node.
@@ -296,26 +290,31 @@ pub async fn main() -> Result<(), ExitMessage> {
296290
Some(network_actor),
297291
Some(ckb_chain_actor),
298292
Some(network_graph),
299-
Some(node_public_key),
300293
)
301294
}
302-
None => (None, None, None, None),
295+
None => (None, None, None),
303296
};
304297

305298
let cch_actor = match config.cch {
306299
Some(cch_config) => {
307300
info!("Starting cch");
308301
let ignore_startup_failure = cch_config.ignore_startup_failure;
302+
let node_keypair =
303+
if let Some(fiber) = config.fiber.as_ref() {
304+
Some(fiber.read_or_generate_secret_key().map_err(|err| {
305+
ExitMessage(format!("failed to read secret key: {}", err))
306+
})?)
307+
} else {
308+
None
309+
};
309310
match start_cch(
310311
CchArgs {
311312
config: cch_config,
312313
tracker: new_tokio_task_tracker(),
313314
token: new_tokio_cancellation_token(),
314-
network_actor: network_actor
315-
.clone()
316-
.expect("Cch service requires network actor"),
317-
pubkey: node_public_key.expect("Cch service requires node public key"),
315+
network_actor: network_actor.clone(),
318316
store: store.clone(),
317+
node_keypair,
319318
},
320319
root_actor.get_cell(),
321320
)
@@ -333,8 +332,6 @@ pub async fn main() -> Result<(), ExitMessage> {
333332
}
334333
}
335334
Ok(actor) => {
336-
// Subscribe the actor to the store so it can receive updates
337-
store.subscribe(Box::new(actor.clone()));
338335
info!("cch started successfully ...");
339336
Some(actor)
340337
}
@@ -344,8 +341,8 @@ pub async fn main() -> Result<(), ExitMessage> {
344341
};
345342

346343
// Start rpc service
347-
let rpc_server_handle = match (config.rpc, network_graph) {
348-
(Some(rpc_config), Some(network_graph)) => {
344+
let rpc_server_handle = match config.rpc {
345+
Some(rpc_config) => {
349346
match start_rpc(
350347
rpc_config,
351348
config.ckb,
@@ -355,20 +352,19 @@ pub async fn main() -> Result<(), ExitMessage> {
355352
store,
356353
network_graph,
357354
root_actor.get_cell(),
358-
#[cfg(debug_assertions)] ckb_chain_actor,
359-
#[cfg(debug_assertions)] rpc_dev_module_commitment_txs,
355+
#[cfg(debug_assertions)]
356+
ckb_chain_actor,
357+
#[cfg(debug_assertions)]
358+
rpc_dev_module_commitment_txs,
360359
)
361-
.await {
360+
.await
361+
{
362362
Ok(handle) => Some(handle),
363363
Err(err) => {
364364
return ExitMessage::err(format!("rpc server failed to start: {}", err));
365365
}
366366
}
367-
},
368-
(Some(_), None) => return ExitMessage::err(
369-
"RPC requires network graph in the fiber service which is not enabled in the config file"
370-
.to_string()
371-
),
367+
}
372368
_ => None,
373369
};
374370

0 commit comments

Comments
 (0)