Skip to content

Commit ebbcb0e

Browse files
committed
devtools/gossipwith: add a "network" option
If specified, this will add the corresponding chain_hash to the init message.
1 parent 4861e2c commit ebbcb0e

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

devtools/gossipwith.c

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
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;
2426
static bool hex = false;
2527
static int timeout_after = -1;
2628
static u8 *features;
29+
static const struct chainparams *blockchainparams = NULL;
2730

2831
static 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+
84103
void 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

Comments
 (0)