diff --git a/daemon/p2p_announce.c b/daemon/p2p_announce.c index 801726d74..33467652b 100644 --- a/daemon/p2p_announce.c +++ b/daemon/p2p_announce.c @@ -75,16 +75,16 @@ static void broadcast_node_announcement(struct lightningd_state *dstate) address = write_ip(tmpctx, dstate->external_ip, dstate->portnum); serialized = towire_node_announcement(tmpctx, &signature, + NULL, timestamp, &dstate->id, rgb_color, alias, - NULL, address); privkey_sign(dstate, serialized + 66, tal_count(serialized) - 66, &signature); serialized = towire_node_announcement(tmpctx, &signature, + NULL, timestamp, &dstate->id, rgb_color, alias, - NULL, address); u8 *tag = tal_arr(tmpctx, u8, 0); towire_pubkey(&tag, &dstate->id); @@ -147,24 +147,24 @@ static void broadcast_channel_announcement(struct lightningd_state *dstate, stru &node_signature[1], &bitcoin_signature[0], &bitcoin_signature[1], + NULL, &short_channel_id, node_id[0], node_id[1], bitcoin_key[0], - bitcoin_key[1], - NULL); + bitcoin_key[1]); privkey_sign(dstate, serialized + 256, tal_count(serialized) - 256, my_node_signature); serialized = towire_channel_announcement(tmpctx, &node_signature[0], &node_signature[1], &bitcoin_signature[0], &bitcoin_signature[1], + NULL, &short_channel_id, node_id[0], node_id[1], bitcoin_key[0], - bitcoin_key[1], - NULL); + bitcoin_key[1]); u8 *tag = tal_arr(tmpctx, u8, 0); towire_short_channel_id(&tag, &short_channel_id); queue_broadcast(dstate->rstate->broadcasts, WIRE_CHANNEL_ANNOUNCEMENT, diff --git a/daemon/routing.c b/daemon/routing.c index a195f4d80..d7a5c4a94 100644 --- a/daemon/routing.c +++ b/daemon/routing.c @@ -706,10 +706,10 @@ void handle_channel_announcement( &node_signature_1, &node_signature_2, &bitcoin_signature_1, &bitcoin_signature_2, + &features, &short_channel_id, &node_id_1, &node_id_2, - &bitcoin_key_1, &bitcoin_key_2, - &features)) { + &bitcoin_key_1, &bitcoin_key_2)) { tal_free(tmpctx); return; } @@ -866,8 +866,8 @@ void handle_node_announcement( serialized = tal_dup_arr(tmpctx, u8, node_ann, len, 0); if (!fromwire_node_announcement(tmpctx, serialized, NULL, - &signature, ×tamp, - &node_id, rgb_color, alias, &features, + &signature, &features, ×tamp, + &node_id, rgb_color, alias, &addresses)) { tal_free(tmpctx); return; diff --git a/lightningd/channel/channel.c b/lightningd/channel/channel.c index a1b76c78a..b2de1f6f3 100644 --- a/lightningd/channel/channel.c +++ b/lightningd/channel/channel.c @@ -265,9 +265,10 @@ static u8 *create_channel_announcement(const tal_t *ctx, struct peer *peer) &peer->announcement_node_sigs[second], &peer->announcement_bitcoin_sigs[first], &peer->announcement_bitcoin_sigs[second], + features, &peer->short_channel_ids[LOCAL], &peer->node_ids[first], &peer->node_ids[second], &peer->channel->funding_pubkey[first], - &peer->channel->funding_pubkey[second], features); + &peer->channel->funding_pubkey[second]); tal_free(features); return cannounce; } diff --git a/lightningd/peer_control.c b/lightningd/peer_control.c index 4d9e55e5a..e7f7d142a 100644 --- a/lightningd/peer_control.c +++ b/lightningd/peer_control.c @@ -988,8 +988,8 @@ static u8 *create_node_announcement(const tal_t *ctx, struct lightningd *ld, } memset(alias, 0, sizeof(alias)); announcement = - towire_node_announcement(ctx, sig, timestamp, &ld->dstate.id, rgb, - alias, features, addresses); + towire_node_announcement(ctx, sig, features, timestamp, + &ld->dstate.id, rgb, alias, addresses); return announcement; } diff --git a/wire/gen_peer_wire_csv b/wire/gen_peer_wire_csv index d323d6466..2494e947e 100644 --- a/wire/gen_peer_wire_csv +++ b/wire/gen_peer_wire_csv @@ -112,21 +112,21 @@ channel_announcement,0,node_signature_1,64 channel_announcement,64,node_signature_2,64 channel_announcement,128,bitcoin_signature_1,64 channel_announcement,192,bitcoin_signature_2,64 -channel_announcement,256,short_channel_id,8 -channel_announcement,264,node_id_1,33 -channel_announcement,297,node_id_2,33 -channel_announcement,330,bitcoin_key_1,33 -channel_announcement,363,bitcoin_key_2,33 -channel_announcement,396,len,2 -channel_announcement,398,features,len +channel_announcement,256,len,2 +channel_announcement,258,features,len +channel_announcement,258+len,short_channel_id,8 +channel_announcement,266+len,node_id_1,33 +channel_announcement,299+len,node_id_2,33 +channel_announcement,332+len,bitcoin_key_1,33 +channel_announcement,365+len,bitcoin_key_2,33 node_announcement,257 node_announcement,0,signature,64 -node_announcement,64,timestamp,4 -node_announcement,68,node_id,33 -node_announcement,101,rgb_color,3 -node_announcement,104,alias,32 -node_announcement,136,flen,2 -node_announcement,138,features,flen +node_announcement,64,flen,2 +node_announcement,66,features,flen +node_announcement,66+flen,timestamp,4 +node_announcement,70+flen,node_id,33 +node_announcement,103+flen,rgb_color,3 +node_announcement,106+flen,alias,32 node_announcement,138+flen,addrlen,2 node_announcement,140+flen,addresses,addrlen channel_update,258 diff --git a/wire/test/run-peer-wire.c b/wire/test/run-peer-wire.c index 056f43984..9b182c94c 100644 --- a/wire/test/run-peer-wire.c +++ b/wire/test/run-peer-wire.c @@ -192,12 +192,12 @@ struct msg_channel_announcement { secp256k1_ecdsa_signature node_signature_2; secp256k1_ecdsa_signature bitcoin_signature_1; secp256k1_ecdsa_signature bitcoin_signature_2; + u8 *features; + struct short_channel_id short_channel_id; struct pubkey node_id_1; struct pubkey node_id_2; struct pubkey bitcoin_key_1; struct pubkey bitcoin_key_2; - struct short_channel_id short_channel_id; - u8 *features; }; struct msg_init { u8 *globalfeatures; @@ -224,12 +224,12 @@ static void *towire_struct_channel_announcement(const tal_t *ctx, &s->node_signature_2, &s->bitcoin_signature_1, &s->bitcoin_signature_2, + s->features, &s->short_channel_id, &s->node_id_1, &s->node_id_2, &s->bitcoin_key_1, - &s->bitcoin_key_2, - s->features); + &s->bitcoin_key_2); } static struct msg_channel_announcement *fromwire_struct_channel_announcement(const tal_t *ctx, const void *p, size_t *plen) @@ -240,12 +240,12 @@ static struct msg_channel_announcement *fromwire_struct_channel_announcement(con &s->node_signature_2, &s->bitcoin_signature_1, &s->bitcoin_signature_2, + &s->features, &s->short_channel_id, &s->node_id_1, &s->node_id_2, &s->bitcoin_key_1, - &s->bitcoin_key_2, - &s->features)) + &s->bitcoin_key_2)) return tal_free(s); return s; } @@ -345,24 +345,25 @@ static void *towire_struct_node_announcement(const tal_t *ctx, { return towire_node_announcement(ctx, &s->signature, + s->features, s->timestamp, &s->node_id, s->rgb_color, s->alias, - s->features, s->addresses); } static struct msg_node_announcement *fromwire_struct_node_announcement(const tal_t *ctx, const void *p, size_t *plen) { struct msg_node_announcement *s = tal(ctx, struct msg_node_announcement); - if (!fromwire_node_announcement(s, p, plen, + if (!fromwire_node_announcement(s, p, plen, &s->signature, + &s->features, &s->timestamp, &s->node_id, s->rgb_color, s->alias, - &s->features, &s->addresses)) + &s->addresses)) return tal_free(s); return s; } @@ -697,9 +698,10 @@ static struct msg_init *fromwire_struct_init(const tal_t *ctx, const void *p, si static bool channel_announcement_eq(const struct msg_channel_announcement *a, const struct msg_channel_announcement *b) { - return eq_upto(a, b, short_channel_id) && - short_channel_id_eq(&a->short_channel_id, &b->short_channel_id) - && eq_var(a, b, features); + return eq_upto(a, b, features) + && eq_var(a, b, features) + && short_channel_id_eq(&a->short_channel_id, &b->short_channel_id) + && eq_between(a, b, node_id_1, bitcoin_key_2); } static bool funding_locked_eq(const struct msg_funding_locked *a,