Skip to content

Commit c217e3a

Browse files
committed
lightningd: fix scb remote_to_self_delay information.
This was changing all the time when I tried to make autogenerate-rpc-examples.py reproducible. Turns out it was being corrupted (it does suspicious things with pointers); rather than try to diagnose it, I simply rewrote the code to create it only when we need it. Signed-off-by: Rusty Russell <[email protected]>
1 parent 9fe47b1 commit c217e3a

File tree

5 files changed

+34
-58
lines changed

5 files changed

+34
-58
lines changed

lightningd/channel.c

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,6 @@ struct channel *new_unsaved_channel(struct peer *peer,
343343
channel->openchannel_signed_cmd = NULL;
344344
channel->state = DUALOPEND_OPEN_INIT;
345345
channel->owner = NULL;
346-
channel->scb = NULL;
347346
channel->reestablished = false;
348347
memset(&channel->billboard, 0, sizeof(channel->billboard));
349348
channel->billboard.transient = tal_fmt(channel, "%s",
@@ -578,30 +577,6 @@ struct channel *new_channel(struct peer *peer, u64 dbid,
578577
channel->billboard.transient = tal_strdup(channel, transient_billboard);
579578
channel->channel_info = *channel_info;
580579

581-
/* If it's a unix domain socket connection, we don't save it */
582-
if (peer->addr.itype == ADDR_INTERNAL_WIREADDR) {
583-
channel->scb = tal(channel, struct modern_scb_chan);
584-
channel->scb->id = dbid;
585-
/* More useful to have last_known_addr, if avail */
586-
if (peer->last_known_addr)
587-
channel->scb->addr = *peer->last_known_addr;
588-
channel->scb->addr = peer->addr.u.wireaddr.wireaddr;
589-
channel->scb->node_id = peer->id;
590-
channel->scb->funding = *funding;
591-
channel->scb->cid = *cid;
592-
channel->scb->funding_sats = funding_sats;
593-
channel->scb->type = channel_type_dup(channel->scb, type);
594-
595-
struct tlv_scb_tlvs *scb_tlvs = tlv_scb_tlvs_new(channel);
596-
scb_tlvs->shachain = &channel->their_shachain.chain;
597-
scb_tlvs->basepoints = &channel->channel_info.theirbase;
598-
scb_tlvs->opener = &channel->opener;
599-
scb_tlvs->remote_to_self_delay = &channel->channel_info.their_config.to_self_delay;
600-
601-
channel->scb->tlvs = scb_tlvs;
602-
} else
603-
channel->scb = NULL;
604-
605580
if (!log) {
606581
channel->log = new_logger(channel,
607582
peer->ld->log_book,

lightningd/channel.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -343,10 +343,6 @@ struct channel {
343343
/* Lease commited max part per thousandth channel fee (ppm * 1000) */
344344
u16 lease_chan_max_ppt;
345345

346-
/* `Channel-shell` of this channel
347-
* (Minimum information required to backup this channel). */
348-
struct modern_scb_chan *scb;
349-
350346
/* Do we allow the peer to set any fee it wants? */
351347
bool ignore_fee_limits;
352348

lightningd/dual_open_control.c

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1467,28 +1467,9 @@ wallet_commit_channel(struct lightningd *ld,
14671467
&commitment_feerate);
14681468
channel->min_possible_feerate = commitment_feerate;
14691469
channel->max_possible_feerate = commitment_feerate;
1470-
if (channel->peer->addr.itype == ADDR_INTERNAL_WIREADDR) {
1471-
channel->scb = tal(channel, struct modern_scb_chan);
1472-
channel->scb->id = channel->dbid;
1473-
channel->scb->addr = channel->peer->addr.u.wireaddr.wireaddr;
1474-
channel->scb->node_id = channel->peer->id;
1475-
channel->scb->funding = *funding;
1476-
channel->scb->cid = channel->cid;
1477-
channel->scb->funding_sats = total_funding;
1478-
1479-
struct tlv_scb_tlvs *scb_tlvs = tlv_scb_tlvs_new(channel);
1480-
scb_tlvs->shachain = &channel->their_shachain.chain;
1481-
scb_tlvs->basepoints = &channel_info->theirbase;
1482-
scb_tlvs->opener = &channel->opener;
1483-
scb_tlvs->remote_to_self_delay = &channel_info->their_config.to_self_delay;
1484-
1485-
channel->scb->tlvs = scb_tlvs;
1486-
} else
1487-
channel->scb = NULL;
14881470

14891471
tal_free(channel->type);
14901472
channel->type = channel_type_dup(channel, type);
1491-
channel->scb->type = channel_type_dup(channel->scb, type);
14921473

14931474
if (our_upfront_shutdown_script)
14941475
channel->shutdown_scriptpubkey[LOCAL]

lightningd/peer_control.c

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2488,15 +2488,35 @@ static void json_add_scb(struct command *cmd,
24882488
struct json_stream *response,
24892489
struct channel *c)
24902490
{
2491-
u8 *scb = tal_arr(cmd, u8, 0);
2491+
u8 *scb_wire = tal_arr(cmd, u8, 0);
2492+
struct modern_scb_chan *scb;
24922493

2493-
/* Update shachain & basepoints in SCB. */
2494-
c->scb->tlvs->shachain = &c->their_shachain.chain;
2495-
c->scb->tlvs->basepoints = &c->channel_info.theirbase;
2496-
towire_modern_scb_chan(&scb, c->scb);
2494+
/* Don't do scb for unix domain sockets. */
2495+
if (c->peer->addr.itype != ADDR_INTERNAL_WIREADDR)
2496+
return;
2497+
2498+
scb = tal(tmpctx, struct modern_scb_chan);
2499+
scb->id = c->dbid;
2500+
/* More useful to have last_known_addr, if avail */
2501+
if (c->peer->last_known_addr)
2502+
scb->addr = *c->peer->last_known_addr;
2503+
else
2504+
scb->addr = c->peer->addr.u.wireaddr.wireaddr;
2505+
scb->node_id = c->peer->id;
2506+
scb->funding = c->funding;
2507+
scb->cid = c->cid;
2508+
scb->funding_sats = c->funding_sats;
2509+
scb->type = channel_type_dup(scb, c->type);
24972510

2498-
json_add_hex_talarr(response, fieldname,
2499-
scb);
2511+
scb->tlvs = tlv_scb_tlvs_new(scb);
2512+
scb->tlvs->shachain = &c->their_shachain.chain;
2513+
scb->tlvs->basepoints = &c->channel_info.theirbase;
2514+
scb->tlvs->opener = &c->opener;
2515+
scb->tlvs->remote_to_self_delay = &c->channel_info.their_config.to_self_delay;
2516+
2517+
towire_modern_scb_chan(&scb_wire, scb);
2518+
2519+
json_add_hex_talarr(response, fieldname, scb_wire);
25002520
}
25012521

25022522
/* This will return a SCB for all the channels currently loaded
@@ -2521,9 +2541,6 @@ static struct command_result *json_staticbackup(struct command *cmd,
25212541
peer = peer_node_id_map_next(cmd->ld->peers, &it)) {
25222542
struct channel *channel;
25232543
list_for_each(&peer->channels, channel, list){
2524-
/* cppcheck-suppress uninitvar - false positive on channel */
2525-
if (!channel->scb)
2526-
continue;
25272544
json_add_scb(cmd, NULL, response, channel);
25282545
}
25292546
}

lightningd/test/run-invoice-select-inchan.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,10 @@ const char *channel_state_name(const struct channel *channel UNNEEDED)
144144
/* Generated stub for channel_state_str */
145145
const char *channel_state_str(enum channel_state state UNNEEDED)
146146
{ fprintf(stderr, "channel_state_str called!\n"); abort(); }
147+
/* Generated stub for channel_type_dup */
148+
struct channel_type *channel_type_dup(const tal_t *ctx UNNEEDED,
149+
const struct channel_type *t UNNEEDED)
150+
{ fprintf(stderr, "channel_type_dup called!\n"); abort(); }
147151
/* Generated stub for channel_type_has */
148152
bool channel_type_has(const struct channel_type *type UNNEEDED, int feature UNNEEDED)
149153
{ fprintf(stderr, "channel_type_has called!\n"); abort(); }
@@ -979,6 +983,9 @@ void subd_send_fd(struct subd *sd UNNEEDED, int fd UNNEEDED)
979983
/* Generated stub for subd_send_msg */
980984
void subd_send_msg(struct subd *sd UNNEEDED, const u8 *msg_out UNNEEDED)
981985
{ fprintf(stderr, "subd_send_msg called!\n"); abort(); }
986+
/* Generated stub for tlv_scb_tlvs_new */
987+
struct tlv_scb_tlvs *tlv_scb_tlvs_new(const tal_t *ctx UNNEEDED)
988+
{ fprintf(stderr, "tlv_scb_tlvs_new called!\n"); abort(); }
982989
/* Generated stub for towire_bigsize */
983990
void towire_bigsize(u8 **pptr UNNEEDED, const bigsize_t val UNNEEDED)
984991
{ fprintf(stderr, "towire_bigsize called!\n"); abort(); }

0 commit comments

Comments
 (0)