@@ -265,6 +265,33 @@ def parse_command_line_arguments(self):
265265 action = "store_true" ,
266266 help = "Preserve lndbtc lnd.conf file during updates"
267267 )
268+ group .add_argument (
269+ "--lndbtc.mode" ,
270+ metavar = "<mode>" ,
271+ choices = ["native" , "external" ],
272+ help = "Lndbtc service mode"
273+ )
274+ group .add_argument (
275+ "--lndbtc.rpc-host" ,
276+ metavar = "<hostname>" ,
277+ help = "External lndbtc RPC hostname"
278+ )
279+ group .add_argument (
280+ "--lndbtc.rpc-port" ,
281+ type = int ,
282+ metavar = "<port>" ,
283+ help = "External lndbtc RPC port"
284+ )
285+ group .add_argument (
286+ "--lndbtc.certpath" ,
287+ metavar = "<hostname>" ,
288+ help = "External lndbtc TLS certificate file"
289+ )
290+ group .add_argument (
291+ "--lndbtc.macaroonpath" ,
292+ metavar = "<hostname>" ,
293+ help = "External lndbtc admin.macaroon path"
294+ )
268295
269296 group = parser .add_argument_group ("lndltc" )
270297 group .add_argument (
@@ -277,6 +304,33 @@ def parse_command_line_arguments(self):
277304 action = "store_true" ,
278305 help = "Preserve lndltc lnd.conf file during updates"
279306 )
307+ group .add_argument (
308+ "--lndltc.mode" ,
309+ metavar = "<mode>" ,
310+ choices = ["native" , "external" ],
311+ help = "Lndltc service mode"
312+ )
313+ group .add_argument (
314+ "--lndltc.rpc-host" ,
315+ metavar = "<hostname>" ,
316+ help = "External lndltc RPC hostname"
317+ )
318+ group .add_argument (
319+ "--lndltc.rpc-port" ,
320+ type = int ,
321+ metavar = "<port>" ,
322+ help = "External lndltc RPC port"
323+ )
324+ group .add_argument (
325+ "--lndltc.certpath" ,
326+ metavar = "<hostname>" ,
327+ help = "External lndltc TLS certificate file"
328+ )
329+ group .add_argument (
330+ "--lndltc.macaroonpath" ,
331+ metavar = "<hostname>" ,
332+ help = "External lndltc admin.macaroon path"
333+ )
280334
281335 group = parser .add_argument_group ("connext" )
282336 group .add_argument (
@@ -665,20 +719,72 @@ def update_geth(self, parsed):
665719 value = getattr (self .args , opt )
666720 node ["cache" ] = value
667721
722+ def _get_value (self , key , node , parsed , validator = None , converter = None , default = None ):
723+ result = None
724+
725+ node_name = node ["name" ]
726+
727+ def process (value , hint ):
728+ if converter :
729+ try :
730+ value = converter (value )
731+ except Exception as e :
732+ raise ValueError ("({}) Invalid value: {}" .format (hint , value )) from e
733+
734+ if validator and not validator (value ):
735+ raise ValueError (value )
736+
737+ return value
738+
739+ if key in parsed :
740+ value = parsed [key ]
741+ value = process (value , "{}.conf > {} > {}" .format (self .network , node_name , key ))
742+ result = value
743+
744+ opt = "{}.{}" .format (node_name , key .replace ("-" , "_" ))
745+
746+ if hasattr (self .args , opt ):
747+ value = getattr (self .args , opt )
748+ value = process (value , "--{}" .format (opt .replace ("_" , "-" )))
749+ result = value
750+
751+ if not result :
752+ if default :
753+ return default
754+ msg = "configuration \" {}.{}\" missing (please specify command-line option \" --{}\" or add \" {}\" in your {}.conf \" {}\" section)" .format (
755+ node_name , key , opt .replace ("_" , "-" ), key , self .network , node_name )
756+ raise ValueError (msg )
757+
758+ return result
759+
668760 def update_lndbtc (self , parsed ):
669761 """Update lndbtc related configurations from parsed TOML lndbtc section
670762 :param parsed: Parsed lndbtc TOML section
671763 """
672764 node = self .nodes ["lndbtc" ]
673765 self .update_ports (node , parsed )
674766
767+ node ["mode" ] = self ._get_value ("mode" , node , parsed , validator = lambda v : v in ["native" , "external" ], default = "native" )
768+ if node ["mode" ] == "external" :
769+ node ["rpc_host" ] = self ._get_value ("rpc_host" , node , parsed )
770+ node ["rpc_port" ] = self ._get_value ("rpc_port" , node , parsed , converter = lambda v : int (v ))
771+ node ["certpath" ] = self ._get_value ("certpath" , node , parsed )
772+ node ["macaroonpath" ] = self ._get_value ("macaroonpath" , node , parsed )
773+
675774 def update_lndltc (self , parsed ):
676775 """Update lndltc related configurations from parsed TOML lndltc section
677776 :param parsed: Parsed lndltc TOML section
678777 """
679778 node = self .nodes ["lndltc" ]
680779 self .update_ports (node , parsed )
681780
781+ node ["mode" ] = self ._get_value ("mode" , node , parsed , validator = lambda v : v in ["native" , "external" ], default = "native" )
782+ if node ["mode" ] == "external" :
783+ node ["rpc_host" ] = self ._get_value ("rpc_host" , node , parsed )
784+ node ["rpc_port" ] = self ._get_value ("rpc_port" , node , parsed , converter = lambda v : int (v ))
785+ node ["certpath" ] = self ._get_value ("certpath" , node , parsed )
786+ node ["macaroonpath" ] = self ._get_value ("macaroonpath" , node , parsed )
787+
682788 def update_connext (self , parsed ):
683789 """Update Connext related configurations from parsed TOML connext section
684790 :param parsed: Parsed connext TOML section
@@ -975,6 +1081,7 @@ def dump_attr(attr: str) -> None:
9751081 if isinstance (value , bool ):
9761082 value = str (value ).lower ()
9771083 print ("{}=\" {}\" " .format (key , value ), file = f )
1084+
9781085 dump_attr ("branch" )
9791086 dump_attr ("disable_update" )
9801087 dump_attr ("external_ip" )
@@ -1024,16 +1131,21 @@ def dump_node_attr(node: str, attr: str) -> None:
10241131 if node in ["bitcoind" , "litecoind" ]:
10251132 dump_node_attr (node , "external_rpc_host" )
10261133 dump_node_attr (node , "external_rpc_port" )
1027- #dump_node_attr(node, "external_rpc_user")
1028- #dump_node_attr(node, "external_rpc_password")
1134+ # dump_node_attr(node, "external_rpc_user")
1135+ # dump_node_attr(node, "external_rpc_password")
10291136 dump_node_attr (node , "external_zmqpubrawblock" )
10301137 dump_node_attr (node , "external_zmqpubrawtx" )
10311138 elif node == "geth" :
10321139 dump_node_attr (node , "external_rpc_host" )
10331140 dump_node_attr (node , "external_rpc_port" )
1034- #dump_node_attr(node, "infura_project_id")
1035- #dump_node_attr(node, "infura_project_secret")
1141+ # dump_node_attr(node, "infura_project_id")
1142+ # dump_node_attr(node, "infura_project_secret")
10361143 dump_node_attr (node , "cache" )
1144+ elif node in ["lndbtc" , "lndltc" ]:
1145+ dump_node_attr (node , "rpc_host" )
1146+ dump_node_attr (node , "rpc_port" )
1147+ dump_node_attr (node , "certpath" )
1148+ dump_node_attr (node , "macaroonpath" )
10371149 elif node == "arby" :
10381150 dump_node_attr (node , "test_centralized_baseasset_balance" )
10391151 dump_node_attr (node , "test_centralized_quoteasset_balance" )
@@ -1044,6 +1156,6 @@ def dump_node_attr(node: str, attr: str) -> None:
10441156 dump_node_attr (node , "live_cex" )
10451157 dump_node_attr (node , "test_mode" )
10461158 dump_node_attr (node , "cex" )
1047- #dump_node_attr(node, "cex_api_key")
1048- #dump_node_attr(node, "cex_api_secret")
1159+ # dump_node_attr(node, "cex_api_key")
1160+ # dump_node_attr(node, "cex_api_secret")
10491161 dump_node_attr (node , "margin" )
0 commit comments