mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-03-03 10:46:58 +01:00
gossipd: dev option to allow unknown channels.
This lets us benchmark without a valid blockchain. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Header from folded patch 'fixup!_gossipd__dev_option_to_allow_unknown_channels.patch': fixup! gossipd: dev option to allow unknown channels. Suggested-by: @cdecker Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
6f59d4deb5
commit
5b12007a4f
11 changed files with 48 additions and 9 deletions
|
@ -15,6 +15,7 @@ gossipctl_init,,update_channel_interval,u32
|
||||||
gossipctl_init,,num_announcable,u16
|
gossipctl_init,,num_announcable,u16
|
||||||
gossipctl_init,,announcable,num_announcable*struct wireaddr
|
gossipctl_init,,announcable,num_announcable*struct wireaddr
|
||||||
gossipctl_init,,dev_gossip_time,?u32
|
gossipctl_init,,dev_gossip_time,?u32
|
||||||
|
gossipctl_init,,dev_unknown_channel_satoshis,?struct amount_sat
|
||||||
|
|
||||||
# Pass JSON-RPC getnodes call through
|
# Pass JSON-RPC getnodes call through
|
||||||
gossip_getnodes_request,3005
|
gossip_getnodes_request,3005
|
||||||
|
|
|
|
@ -1860,6 +1860,7 @@ static struct io_plan *gossip_init(struct io_conn *conn,
|
||||||
{
|
{
|
||||||
u32 update_channel_interval;
|
u32 update_channel_interval;
|
||||||
u32 *dev_gossip_time;
|
u32 *dev_gossip_time;
|
||||||
|
struct amount_sat *dev_unknown_channel_satoshis;
|
||||||
|
|
||||||
if (!fromwire_gossipctl_init(daemon, msg,
|
if (!fromwire_gossipctl_init(daemon, msg,
|
||||||
/* 60,000 ms
|
/* 60,000 ms
|
||||||
|
@ -1873,7 +1874,8 @@ static struct io_plan *gossip_init(struct io_conn *conn,
|
||||||
* (unless --dev-channel-update-interval) */
|
* (unless --dev-channel-update-interval) */
|
||||||
&update_channel_interval,
|
&update_channel_interval,
|
||||||
&daemon->announcable,
|
&daemon->announcable,
|
||||||
&dev_gossip_time)) {
|
&dev_gossip_time,
|
||||||
|
&dev_unknown_channel_satoshis)) {
|
||||||
master_badmsg(WIRE_GOSSIPCTL_INIT, msg);
|
master_badmsg(WIRE_GOSSIPCTL_INIT, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1882,7 +1884,9 @@ static struct io_plan *gossip_init(struct io_conn *conn,
|
||||||
chainparams_by_chainhash(&daemon->chain_hash),
|
chainparams_by_chainhash(&daemon->chain_hash),
|
||||||
&daemon->id,
|
&daemon->id,
|
||||||
update_channel_interval * 2,
|
update_channel_interval * 2,
|
||||||
dev_gossip_time);
|
dev_gossip_time,
|
||||||
|
dev_unknown_channel_satoshis);
|
||||||
|
|
||||||
/* Load stored gossip messages */
|
/* Load stored gossip messages */
|
||||||
gossip_store_load(daemon->rstate, daemon->rstate->store);
|
gossip_store_load(daemon->rstate, daemon->rstate->store);
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,8 @@ struct routing_state *new_routing_state(const tal_t *ctx,
|
||||||
const struct chainparams *chainparams,
|
const struct chainparams *chainparams,
|
||||||
const struct pubkey *local_id,
|
const struct pubkey *local_id,
|
||||||
u32 prune_timeout,
|
u32 prune_timeout,
|
||||||
const u32 *dev_gossip_time)
|
const u32 *dev_gossip_time,
|
||||||
|
const struct amount_sat *dev_unknown_channel_satoshis)
|
||||||
{
|
{
|
||||||
struct routing_state *rstate = tal(ctx, struct routing_state);
|
struct routing_state *rstate = tal(ctx, struct routing_state);
|
||||||
rstate->nodes = empty_node_map(rstate);
|
rstate->nodes = empty_node_map(rstate);
|
||||||
|
@ -100,7 +101,6 @@ struct routing_state *new_routing_state(const tal_t *ctx,
|
||||||
rstate->pending_node_map = tal(ctx, struct pending_node_map);
|
rstate->pending_node_map = tal(ctx, struct pending_node_map);
|
||||||
pending_node_map_init(rstate->pending_node_map);
|
pending_node_map_init(rstate->pending_node_map);
|
||||||
|
|
||||||
|
|
||||||
#if DEVELOPER
|
#if DEVELOPER
|
||||||
if (dev_gossip_time) {
|
if (dev_gossip_time) {
|
||||||
rstate->gossip_time = tal(rstate, struct timeabs);
|
rstate->gossip_time = tal(rstate, struct timeabs);
|
||||||
|
@ -108,6 +108,7 @@ struct routing_state *new_routing_state(const tal_t *ctx,
|
||||||
rstate->gossip_time->ts.tv_nsec = 0;
|
rstate->gossip_time->ts.tv_nsec = 0;
|
||||||
} else
|
} else
|
||||||
rstate->gossip_time = NULL;
|
rstate->gossip_time = NULL;
|
||||||
|
rstate->dev_unknown_channel_satoshis = dev_unknown_channel_satoshis;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return rstate;
|
return rstate;
|
||||||
|
@ -1013,6 +1014,16 @@ void handle_pending_cannouncement(struct routing_state *rstate,
|
||||||
if (!pending)
|
if (!pending)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
#if DEVELOPER
|
||||||
|
if (rstate->dev_unknown_channel_satoshis) {
|
||||||
|
outscript = scriptpubkey_p2wsh(pending,
|
||||||
|
bitcoin_redeem_2of2(pending,
|
||||||
|
&pending->bitcoin_key_1,
|
||||||
|
&pending->bitcoin_key_2));
|
||||||
|
sat = *rstate->dev_unknown_channel_satoshis;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* BOLT #7:
|
/* BOLT #7:
|
||||||
*
|
*
|
||||||
* The receiving node:
|
* The receiving node:
|
||||||
|
|
|
@ -218,6 +218,10 @@ struct routing_state {
|
||||||
#if DEVELOPER
|
#if DEVELOPER
|
||||||
/* Override local time for gossip messages */
|
/* Override local time for gossip messages */
|
||||||
struct timeabs *gossip_time;
|
struct timeabs *gossip_time;
|
||||||
|
|
||||||
|
/* Instead of ignoring unknown channels, pretend they're valid
|
||||||
|
* with this many satoshis (if non-NULL) */
|
||||||
|
const struct amount_sat *dev_unknown_channel_satoshis;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -240,7 +244,8 @@ struct routing_state *new_routing_state(const tal_t *ctx,
|
||||||
const struct chainparams *chainparams,
|
const struct chainparams *chainparams,
|
||||||
const struct pubkey *local_id,
|
const struct pubkey *local_id,
|
||||||
u32 prune_timeout,
|
u32 prune_timeout,
|
||||||
const u32 *dev_gossip_time);
|
const u32 *dev_gossip_time,
|
||||||
|
const struct amount_sat *dev_unknown_channel_satoshis);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a new bidirectional channel from id1 to id2 with the given
|
* Add a new bidirectional channel from id1 to id2 with the given
|
||||||
|
|
|
@ -225,7 +225,7 @@ int main(int argc, char *argv[])
|
||||||
setup_tmpctx();
|
setup_tmpctx();
|
||||||
|
|
||||||
me = nodeid(0);
|
me = nodeid(0);
|
||||||
rstate = new_routing_state(tmpctx, NULL, &me, 0, NULL);
|
rstate = new_routing_state(tmpctx, NULL, &me, 0, NULL, NULL);
|
||||||
opt_register_noarg("--perfme", opt_set_bool, &perfme,
|
opt_register_noarg("--perfme", opt_set_bool, &perfme,
|
||||||
"Run perfme-start and perfme-stop around benchmark");
|
"Run perfme-start and perfme-stop around benchmark");
|
||||||
|
|
||||||
|
|
|
@ -184,7 +184,7 @@ int main(void)
|
||||||
strlen("02cca6c5c966fcf61d121e3a70e03a1cd9eeeea024b26ea666ce974d43b242e636"),
|
strlen("02cca6c5c966fcf61d121e3a70e03a1cd9eeeea024b26ea666ce974d43b242e636"),
|
||||||
&d);
|
&d);
|
||||||
|
|
||||||
rstate = new_routing_state(tmpctx, NULL, &a, 0, NULL);
|
rstate = new_routing_state(tmpctx, NULL, &a, 0, NULL, NULL);
|
||||||
|
|
||||||
/* [{'active': True, 'short_id': '6990:2:1/1', 'fee_per_kw': 10, 'delay': 5, 'message_flags': 0, 'channel_flags': 1, 'destination': '0230ad0e74ea03976b28fda587bb75bdd357a1938af4424156a18265167f5e40ae', 'source': '02ea622d5c8d6143f15ed3ce1d501dd0d3d09d3b1c83a44d0034949f8a9ab60f06', 'last_update': 1504064344}, */
|
/* [{'active': True, 'short_id': '6990:2:1/1', 'fee_per_kw': 10, 'delay': 5, 'message_flags': 0, 'channel_flags': 1, 'destination': '0230ad0e74ea03976b28fda587bb75bdd357a1938af4424156a18265167f5e40ae', 'source': '02ea622d5c8d6143f15ed3ce1d501dd0d3d09d3b1c83a44d0034949f8a9ab60f06', 'last_update': 1504064344}, */
|
||||||
|
|
||||||
|
|
|
@ -213,7 +213,7 @@ int main(void)
|
||||||
|
|
||||||
memset(&tmp, 'a', sizeof(tmp));
|
memset(&tmp, 'a', sizeof(tmp));
|
||||||
pubkey_from_privkey(&tmp, &a);
|
pubkey_from_privkey(&tmp, &a);
|
||||||
rstate = new_routing_state(tmpctx, NULL, &a, 0, NULL);
|
rstate = new_routing_state(tmpctx, NULL, &a, 0, NULL, NULL);
|
||||||
|
|
||||||
new_node(rstate, &a);
|
new_node(rstate, &a);
|
||||||
|
|
||||||
|
|
|
@ -166,8 +166,10 @@ void gossip_init(struct lightningd *ld, int connectd_fd)
|
||||||
ld->alias, ld->config.channel_update_interval,
|
ld->alias, ld->config.channel_update_interval,
|
||||||
ld->announcable,
|
ld->announcable,
|
||||||
#if DEVELOPER
|
#if DEVELOPER
|
||||||
ld->dev_gossip_time ? &ld->dev_gossip_time: NULL
|
ld->dev_gossip_time ? &ld->dev_gossip_time: NULL,
|
||||||
|
ld->dev_unknown_channel_satoshis
|
||||||
#else
|
#else
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
|
|
|
@ -117,6 +117,7 @@ static struct lightningd *new_lightningd(const tal_t *ctx)
|
||||||
ld->dev_subdaemon_fail = false;
|
ld->dev_subdaemon_fail = false;
|
||||||
ld->dev_allow_localhost = false;
|
ld->dev_allow_localhost = false;
|
||||||
ld->dev_gossip_time = 0;
|
ld->dev_gossip_time = 0;
|
||||||
|
ld->dev_unknown_channel_satoshis = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*~ These are CCAN lists: an embedded double-linked list. It's not
|
/*~ These are CCAN lists: an embedded double-linked list. It's not
|
||||||
|
|
|
@ -199,6 +199,9 @@ struct lightningd {
|
||||||
/* Timestamp to use for gossipd, iff non-zero */
|
/* Timestamp to use for gossipd, iff non-zero */
|
||||||
u32 dev_gossip_time;
|
u32 dev_gossip_time;
|
||||||
|
|
||||||
|
/* What to override unknown channels with, iff non-NULL */
|
||||||
|
struct amount_sat *dev_unknown_channel_satoshis;
|
||||||
|
|
||||||
/* Things we've marked as not leaking. */
|
/* Things we've marked as not leaking. */
|
||||||
const void **notleaks;
|
const void **notleaks;
|
||||||
#endif /* DEVELOPER */
|
#endif /* DEVELOPER */
|
||||||
|
|
|
@ -443,6 +443,15 @@ static char *opt_subprocess_debug(const char *optarg, struct lightningd *ld)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *opt_set_dev_unknown_channel_satoshis(const char *optarg,
|
||||||
|
struct lightningd *ld)
|
||||||
|
{
|
||||||
|
tal_free(ld->dev_unknown_channel_satoshis);
|
||||||
|
ld->dev_unknown_channel_satoshis = tal(ld, struct amount_sat);
|
||||||
|
return opt_set_u64(optarg,
|
||||||
|
&ld->dev_unknown_channel_satoshis->satoshis); /* Raw: dev code */
|
||||||
|
}
|
||||||
|
|
||||||
static void dev_register_opts(struct lightningd *ld)
|
static void dev_register_opts(struct lightningd *ld)
|
||||||
{
|
{
|
||||||
opt_register_noarg("--dev-no-reconnect", opt_set_invbool,
|
opt_register_noarg("--dev-no-reconnect", opt_set_invbool,
|
||||||
|
@ -479,6 +488,9 @@ static void dev_register_opts(struct lightningd *ld)
|
||||||
opt_register_arg("--dev-gossip-time", opt_set_u32, opt_show_u32,
|
opt_register_arg("--dev-gossip-time", opt_set_u32, opt_show_u32,
|
||||||
&ld->dev_gossip_time,
|
&ld->dev_gossip_time,
|
||||||
"UNIX time to override gossipd to use.");
|
"UNIX time to override gossipd to use.");
|
||||||
|
opt_register_arg("--dev-unknown-channel-satoshis",
|
||||||
|
opt_set_dev_unknown_channel_satoshis, NULL, ld,
|
||||||
|
"Amount to pretend is in channels which we can't find funding tx for.");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue