@@ -2,8 +2,10 @@ mod opts;
22
33use std:: io;
44use std:: str:: FromStr as _;
5+ use std:: sync:: Arc ;
56
67use bfte_derive_secret:: DeriveableSecret ;
8+ use bfte_node:: Node ;
79use bfte_node:: derive_secret_ext:: DeriveSecretExt as _;
810use bfte_util_error:: { Whatever , WhateverResult } ;
911use clap:: Parser as _;
@@ -48,7 +50,7 @@ impl Bfte {
4850 None
4951 } ;
5052
51- match opts. command {
53+ let db = match opts. command {
5254 Commands :: GenSecret => {
5355 let root_seckey = DeriveableSecret :: generate ( ) ;
5456 let peer_seckey = root_seckey. get_peer_seckey ( ) . expect ( "Just generated" ) ;
@@ -62,39 +64,67 @@ impl Bfte {
6264 return Ok ( ( ) ) ;
6365 }
6466
65- Commands :: Join { invite } => bfte_node:: Node :: join (
66- db_path
67- . whatever_context ( "Database path must be set to persist created federation" ) ?,
68- & invite,
69- )
70- . await
71- . whatever_context ( "Failed to join consensus" ) ?,
67+ Commands :: Join { invite, run } => {
68+ let db = Arc :: new (
69+ Node :: open_db ( db_path)
70+ . await
71+ . whatever_context ( "Failed to open database" ) ?,
72+ ) ;
7273
73- Commands :: Create { extra_peers } => bfte_node:: Node :: create (
74- db_path
75- . whatever_context ( "Database path must be set to persist created federation" ) ?,
76- secret. whatever_context ( "Secret must be provided to create a new federation" ) ?,
77- extra_peers,
78- )
79- . await
80- . whatever_context ( "Failed to create consensus" ) ?,
81-
82- Commands :: Run { bind_ui } => {
83- bfte_node:: Node :: builder ( )
84- . maybe_root_secret ( secret)
85- . maybe_db_path ( db_path)
86- . ui ( Box :: new ( move |api| {
87- Box :: pin ( async move { bfte_node_ui_axum:: run ( api, bind_ui) . await } )
88- } ) )
89- . build ( )
74+ bfte_node:: Node :: join ( db. clone ( ) , & invite)
9075 . await
91- . whatever_context ( "Failed to build node" ) ?
92- . run ( )
93- . await
94- . whatever_context ( "Failed to run node" ) ?;
76+ . whatever_context ( "Failed to join consensus" ) ?;
77+
78+ if !run {
79+ return Ok ( ( ) ) ;
80+ }
81+
82+ db
9583 }
84+
85+ Commands :: Create { extra_peers, run } => {
86+ let db = Arc :: new (
87+ Node :: open_db ( db_path)
88+ . await
89+ . whatever_context ( "Failed to open database" ) ?,
90+ ) ;
91+
92+ bfte_node:: Node :: create (
93+ db. clone ( ) ,
94+ secret
95+ . whatever_context ( "Secret must be provided to create a new federation" ) ?,
96+ extra_peers,
97+ )
98+ . await
99+ . whatever_context ( "Failed to create consensus" ) ?;
100+
101+ if !run {
102+ return Ok ( ( ) ) ;
103+ }
104+
105+ db
106+ }
107+
108+ Commands :: Run => Arc :: new (
109+ Node :: open_db ( db_path)
110+ . await
111+ . whatever_context ( "Failed to open database" ) ?,
112+ ) ,
96113 } ;
97114
115+ bfte_node:: Node :: builder ( )
116+ . maybe_root_secret ( secret)
117+ . db ( db)
118+ . ui ( Box :: new ( move |api| {
119+ Box :: pin ( async move { bfte_node_ui_axum:: run ( api, opts. bind_ui ) . await } )
120+ } ) )
121+ . build ( )
122+ . await
123+ . whatever_context ( "Failed to build node" ) ?
124+ . run ( )
125+ . await
126+ . whatever_context ( "Failed to run node" ) ?;
127+
98128 Ok ( ( ) )
99129 }
100130}
0 commit comments