1+ use bitcoin:: secp256k1:: PublicKey ;
12use clap:: { value_parser, Parser } ;
23use rgb_lib:: BitcoinNetwork ;
34use std:: path:: PathBuf ;
45
56use crate :: auth:: check_auth_args;
67use crate :: error:: AppError ;
7- use crate :: utils:: check_port_is_available;
8+ use crate :: utils:: { check_port_is_available, hex_str_to_compressed_pubkey } ;
89
910#[ derive( Parser ) ]
1011#[ command( author, version, about, long_about = None ) ]
@@ -38,6 +39,9 @@ struct Args {
3839
3940 #[ arg( long, default_value_t = false ) ]
4041 enable_virtual_channels_v0 : bool ,
42+
43+ #[ arg( long, value_delimiter = ',' ) ]
44+ virtual_peer_pubkeys : Vec < String > ,
4145}
4246
4347pub ( crate ) struct UserArgs {
@@ -48,6 +52,7 @@ pub(crate) struct UserArgs {
4852 pub ( crate ) max_media_upload_size_mb : u16 ,
4953 pub ( crate ) root_public_key : Option < biscuit_auth:: PublicKey > ,
5054 pub ( crate ) enable_virtual_channels_v0 : bool ,
55+ pub ( crate ) virtual_peer_pubkeys : Vec < PublicKey > ,
5156}
5257
5358pub ( crate ) fn parse_startup_args ( ) -> Result < UserArgs , AppError > {
@@ -62,6 +67,14 @@ pub(crate) fn parse_startup_args() -> Result<UserArgs, AppError> {
6267
6368 let root_public_key = check_auth_args ( args. disable_authentication , args. root_public_key ) ?;
6469
70+ let mut virtual_peer_pubkeys = Vec :: new ( ) ;
71+ for pubkey in args. virtual_peer_pubkeys {
72+ let Some ( parsed_pubkey) = hex_str_to_compressed_pubkey ( & pubkey) else {
73+ return Err ( AppError :: InvalidVirtualPeerPubkey ( pubkey) ) ;
74+ } ;
75+ virtual_peer_pubkeys. push ( parsed_pubkey) ;
76+ }
77+
6578 Ok ( UserArgs {
6679 storage_dir_path : args. storage_directory_path ,
6780 daemon_listening_port,
@@ -70,5 +83,6 @@ pub(crate) fn parse_startup_args() -> Result<UserArgs, AppError> {
7083 max_media_upload_size_mb : args. max_media_upload_size_mb ,
7184 root_public_key,
7285 enable_virtual_channels_v0 : args. enable_virtual_channels_v0 ,
86+ virtual_peer_pubkeys,
7387 } )
7488}
0 commit comments