11/* Simple tool to route gossip from a peer. */
2+ #include <bitcoin/block.h>
3+ #include <bitcoin/chainparams.h>
24#include <ccan/array_size/array_size.h>
35#include <ccan/err/err.h>
46#include <ccan/io/io.h>
@@ -24,6 +26,7 @@ static bool no_init = false;
2426static bool hex = false;
2527static int timeout_after = -1 ;
2628static u8 * features ;
29+ static const struct chainparams * blockchainparams = NULL ;
2730
2831static struct io_plan * simple_write (struct io_conn * conn ,
2932 const void * data , size_t len ,
@@ -81,6 +84,22 @@ enum dev_disconnect dev_disconnect(int pkt_type)
8184}
8285#endif
8386
87+ static char * opt_set_network (const char * arg , void * unused )
88+ {
89+ assert (arg != NULL );
90+
91+ /* Set the global chainparams instance */
92+ blockchainparams = chainparams_for_network (arg );
93+ if (!blockchainparams )
94+ return tal_fmt (NULL , "Unknown network name '%s'" , arg );
95+ return NULL ;
96+ }
97+
98+ static void opt_show_network (char buf [OPT_SHOW_LEN ], const void * unused )
99+ {
100+ snprintf (buf , OPT_SHOW_LEN , "%s" , blockchainparams -> network_name );
101+ }
102+
84103void peer_failed_connection_lost (void )
85104{
86105 exit (0 );
@@ -137,11 +156,21 @@ static struct io_plan *handshake_success(struct io_conn *conn,
137156 OPTIONAL_FEATURE (OPT_INITIAL_ROUTING_SYNC ));
138157
139158 if (!no_init ) {
140- msg = towire_init (NULL , NULL , features , NULL );
159+ struct tlv_init_tlvs * tlvs = NULL ;
160+ if (blockchainparams ) {
161+ tlvs = tlv_init_tlvs_new (NULL );
162+ tlvs -> networks = tal (tlvs , struct tlv_init_tlvs_networks );
163+ tlvs -> networks -> chains = tal_arr (tlvs -> networks , struct bitcoin_blkid , 1 );
164+ tlvs -> networks -> chains [0 ] = blockchainparams -> genesis_blockhash ;
165+ msg = towire_init (NULL , NULL , features , tlvs );
166+ } else
167+ msg = towire_init (NULL , NULL , features , NULL );
141168
142169 sync_crypto_write (pps , take (msg ));
143170 /* Ignore their init message. */
144171 tal_free (sync_crypto_read (NULL , pps ));
172+ if (tlvs )
173+ tal_free (tlvs );
145174 }
146175
147176 if (stream_stdin )
@@ -254,6 +283,10 @@ int main(int argc, char *argv[])
254283 "Print out messages in hex" );
255284 opt_register_arg ("--features=<hex>" , opt_set_features , NULL ,
256285 & features , "Send these features in init" );
286+ opt_register_arg ("--network" , opt_set_network , opt_show_network ,
287+ NULL ,
288+ "Select the network parameters (bitcoin, testnet,"
289+ " regtest, litecoin or litecoin-testnet)" );
257290 opt_register_noarg ("--help|-h" , opt_usage_and_exit ,
258291 "id@addr[:port] [hex-msg-tosend...]\n"
259292 "Connect to a lightning peer and relay gossip messages from it" ,
0 commit comments