Browse Source
Instead of a boutique message, use a "real" channel_announcement for private channels (with fake sigs and pubkeys). This makes it far easier for gossmap to handle local channels. Backwards compatible update, since we update old stores. We also fix devtools/dump-gossipstore to know about the tombstone markers. Since we increment our channel_announce count for local channels now, the stats in the tests changed too. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>travis-experimental
Rusty Russell
4 years ago
25 changed files with 393 additions and 153 deletions
@ -0,0 +1,50 @@ |
|||
#include <assert.h> |
|||
#include <bitcoin/chainparams.h> |
|||
#include <bitcoin/privkey.h> |
|||
#include <bitcoin/pubkey.h> |
|||
#include <common/node_id.h> |
|||
#include <common/private_channel_announcement.h> |
|||
#include <wire/peer_wiregen.h> |
|||
|
|||
const u8 *private_channel_announcement(const tal_t *ctx, |
|||
const struct short_channel_id *scid, |
|||
const struct node_id *local_node_id, |
|||
const struct node_id *remote_node_id, |
|||
const u8 *features) |
|||
{ |
|||
struct pubkey dummy_pubkey; |
|||
const struct node_id *node[2]; |
|||
struct secret not_a_secret; |
|||
|
|||
/* Make an all-zero sig. */ |
|||
static const u8 zeros[64]; |
|||
size_t zlen = sizeof(zeros); |
|||
const u8 *zerop = zeros; |
|||
secp256k1_ecdsa_signature zerosig; |
|||
fromwire_secp256k1_ecdsa_signature(&zerop, &zlen, &zerosig); |
|||
assert(zerop != NULL); |
|||
|
|||
memset(¬_a_secret, 1, sizeof(not_a_secret)); |
|||
if (!pubkey_from_secret(¬_a_secret, &dummy_pubkey)) |
|||
abort(); |
|||
|
|||
/* node ids are in ascending order. */ |
|||
if (node_id_cmp(remote_node_id, local_node_id) > 0) { |
|||
node[0] = local_node_id; |
|||
node[1] = remote_node_id; |
|||
} else { |
|||
node[0] = remote_node_id; |
|||
node[1] = local_node_id; |
|||
} |
|||
|
|||
return towire_channel_announcement(ctx, |
|||
&zerosig, &zerosig, |
|||
&zerosig, &zerosig, |
|||
features, |
|||
&chainparams->genesis_blockhash, |
|||
scid, |
|||
node[0], |
|||
node[1], |
|||
&dummy_pubkey, |
|||
&dummy_pubkey); |
|||
} |
@ -0,0 +1,17 @@ |
|||
#ifndef LIGHTNING_COMMON_PRIVATE_CHANNEL_ANNOUNCEMENT_H |
|||
#define LIGHTNING_COMMON_PRIVATE_CHANNEL_ANNOUNCEMENT_H |
|||
#include "config.h" |
|||
#include <ccan/short_types/short_types.h> |
|||
#include <ccan/tal/tal.h> |
|||
|
|||
struct short_channel_id; |
|||
struct node_id; |
|||
|
|||
/* Helper to create a fake channel announcement for local channels. */ |
|||
const u8 *private_channel_announcement(const tal_t *ctx, |
|||
const struct short_channel_id *scid, |
|||
const struct node_id *local_node_id, |
|||
const struct node_id *remote_node_id, |
|||
const u8 *features); |
|||
|
|||
#endif /* LIGHTNING_COMMON_PRIVATE_CHANNEL_ANNOUNCEMENT_H */ |
Can't render this file because it has a wrong number of fields in line 2.
|
Can't render this file because it has a wrong number of fields in line 6.
|
Loading…
Reference in new issue