Skip to content

Commit 5cbab33

Browse files
committed
lightningd: save funding_psbt in channel, database.
Interestingly, @niftynei added a funding_psbt column to the db in 2020, but we don't use it (it was removed early 2021 with the "inflight" architecture). So we don't need to add a new column, just plumb it back in. Signed-off-by: Rusty Russell <[email protected]>
1 parent 21d1954 commit 5cbab33

File tree

11 files changed

+61
-14
lines changed

11 files changed

+61
-14
lines changed

lightningd/channel.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,7 @@ struct channel *new_unsaved_channel(struct peer *peer,
435435
/* channel->channel_gossip gets populated once we know if it's public. */
436436
channel->channel_gossip = NULL;
437437
channel->forgets = tal_arr(channel, struct command *, 0);
438+
channel->funding_psbt = NULL;
438439
list_add_tail(&peer->channels, &channel->list);
439440
channel->rr_number = peer->ld->rr_counter++;
440441
tal_add_destructor(channel, destroy_channel);
@@ -556,7 +557,8 @@ struct channel *new_channel(struct peer *peer, u64 dbid,
556557
struct peer_update *peer_update STEALS,
557558
u64 last_stable_connection,
558559
const struct channel_stats *stats,
559-
struct channel_state_change **state_changes STEALS)
560+
struct channel_state_change **state_changes STEALS,
561+
const struct wally_psbt *funding_psbt STEALS)
560562
{
561563
struct channel *channel = tal(peer->ld, struct channel);
562564
struct amount_msat htlc_min, htlc_max;
@@ -732,7 +734,7 @@ struct channel *new_channel(struct peer *peer, u64 dbid,
732734
channel->error = towire_errorfmt(peer->ld,
733735
&channel->cid,
734736
"We can't be together anymore.");
735-
737+
channel->funding_psbt = tal_steal(channel, funding_psbt);
736738
return channel;
737739
}
738740

lightningd/channel.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,9 @@ struct channel {
356356

357357
/* Our change history. */
358358
struct channel_state_change **state_changes;
359+
360+
/* Unsigned PSBT if we initiated the open channel */
361+
const struct wally_psbt *funding_psbt;
359362
};
360363

361364
/* Is channel owned (and should be talking to peer) */
@@ -441,7 +444,8 @@ struct channel *new_channel(struct peer *peer, u64 dbid,
441444
struct peer_update *peer_update STEALS,
442445
u64 last_stable_connection,
443446
const struct channel_stats *stats,
444-
struct channel_state_change **state_changes STEALS);
447+
struct channel_state_change **state_changes STEALS,
448+
const struct wally_psbt *funding_psbt STEALS);
445449

446450
/* new_inflight - Create a new channel_inflight for a channel */
447451
struct channel_inflight *new_inflight(struct channel *channel,

lightningd/closed_channel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ struct closed_channel {
3030
u64 last_stable_connection;
3131
/* NULL for older closed channels */
3232
const struct shachain *their_shachain;
33+
const struct wally_psbt *funding_psbt;
3334
};
3435

3536
static inline const struct channel_id *keyof_closed_channel(const struct closed_channel *cc)

lightningd/dual_open_control.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1501,6 +1501,8 @@ wallet_commit_channel(struct lightningd *ld,
15011501
channel->lease_chan_max_ppt = lease_chan_max_ppt;
15021502
channel->htlc_minimum_msat = channel_info->their_config.htlc_minimum;
15031503
channel->htlc_maximum_msat = htlc_max_possible_send(channel);
1504+
/* Filled in when we have PSBT for inflight */
1505+
channel->funding_psbt = NULL;
15041506

15051507
/* Now we finally put it in the database. */
15061508
wallet_channel_insert(ld->wallet, channel);
@@ -2773,6 +2775,11 @@ json_openchannel_signed(struct command *cmd,
27732775
wallet_inflight_save(cmd->ld->wallet, inflight);
27742776
watch_opening_inflight(cmd->ld, inflight);
27752777

2778+
/* Channel's funding psbt also updated now */
2779+
tal_free(channel->funding_psbt);
2780+
channel->funding_psbt = clone_psbt(channel, inflight->funding_psbt);
2781+
wallet_channel_save(cmd->ld->wallet, channel);
2782+
27762783
/* Only after we've updated/saved our psbt do we check
27772784
* for peer connected */
27782785
if (!channel->owner)

lightningd/opening_common.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ struct funding_channel {
101101
/* Place to stash the per-peer-state while we wait
102102
* for them to get back to us with signatures */
103103
struct peer_fd *peer_fd;
104+
105+
/* Were we the one to publish the commitment/splicing tx? */
106+
const struct wally_psbt *funding_psbt;
104107
};
105108

106109
struct uncommitted_channel *new_uncommitted_channel(struct peer *peer);

lightningd/opening_control.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ wallet_commit_channel(struct lightningd *ld,
9696
u32 feerate,
9797
const u8 *our_upfront_shutdown_script,
9898
const u8 *remote_upfront_shutdown_script,
99-
const struct channel_type *type)
99+
const struct channel_type *type,
100+
const struct wally_psbt *funding_psbt)
100101
{
101102
struct channel *channel;
102103
struct amount_msat our_msat;
@@ -235,7 +236,8 @@ wallet_commit_channel(struct lightningd *ld,
235236
NULL,
236237
0,
237238
&zero_channel_stats,
238-
tal_arr(NULL, struct channel_state_change *, 0));
239+
tal_arr(NULL, struct channel_state_change *, 0),
240+
funding_psbt);
239241

240242
/* Now we finally put it in the database. */
241243
wallet_channel_insert(ld->wallet, channel);
@@ -443,7 +445,8 @@ static void opening_funder_finished(struct subd *openingd, const u8 *resp,
443445
feerate,
444446
fc->our_upfront_shutdown_script,
445447
remote_upfront_shutdown_script,
446-
type);
448+
type,
449+
fc->funding_psbt);
447450
if (!channel) {
448451
was_pending(command_fail(fc->cmd, LIGHTNINGD,
449452
"Key generation failure"));
@@ -546,7 +549,8 @@ static void opening_fundee_finished(struct subd *openingd,
546549
feerate,
547550
local_upfront_shutdown_script,
548551
remote_upfront_shutdown_script,
549-
type);
552+
type,
553+
NULL);
550554
if (!channel) {
551555
uncommitted_channel_disconnect(uc, LOG_BROKEN,
552556
"Commit channel failed");
@@ -1090,6 +1094,8 @@ static struct command_result *json_fundchannel_complete(struct command *cmd,
10901094
if (command_check_only(cmd))
10911095
return command_check_done(cmd);
10921096

1097+
fc->funding_psbt = tal_steal(fc, funding_psbt);
1098+
10931099
/* Set the cmd to this new cmd */
10941100
peer->uncommitted_channel->fc->cmd = cmd;
10951101
msg = towire_openingd_funder_complete(NULL,
@@ -1637,7 +1643,8 @@ static struct channel *stub_chan(struct command *cmd,
16371643
NULL,
16381644
0,
16391645
&zero_channel_stats,
1640-
tal_arr(NULL, struct channel_state_change *, 0));
1646+
tal_arr(NULL, struct channel_state_change *, 0),
1647+
NULL);
16411648

16421649
/* We don't want to gossip about this, ever. */
16431650
channel->channel_gossip = tal_free(channel->channel_gossip);

wallet/test/run-chain_moves_duplicate-detect.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,8 @@ struct channel *new_channel(struct peer *peer UNNEEDED, u64 dbid UNNEEDED,
234234
struct peer_update *peer_update STEALS UNNEEDED,
235235
u64 last_stable_connection UNNEEDED,
236236
const struct channel_stats *stats UNNEEDED,
237-
struct channel_state_change **state_changes STEALS UNNEEDED)
237+
struct channel_state_change **state_changes STEALS UNNEEDED,
238+
const struct wally_psbt *funding_psbt STEALS UNNEEDED)
238239
{ fprintf(stderr, "new_channel called!\n"); abort(); }
239240
/* Generated stub for new_channel_state_change */
240241
struct channel_state_change *new_channel_state_change(const tal_t *ctx UNNEEDED,

wallet/test/run-db.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,8 @@ struct channel *new_channel(struct peer *peer UNNEEDED, u64 dbid UNNEEDED,
242242
struct peer_update *peer_update STEALS UNNEEDED,
243243
u64 last_stable_connection UNNEEDED,
244244
const struct channel_stats *stats UNNEEDED,
245-
struct channel_state_change **state_changes STEALS UNNEEDED)
245+
struct channel_state_change **state_changes STEALS UNNEEDED,
246+
const struct wally_psbt *funding_psbt STEALS UNNEEDED)
246247
{ fprintf(stderr, "new_channel called!\n"); abort(); }
247248
/* Generated stub for new_channel_state_change */
248249
struct channel_state_change *new_channel_state_change(const tal_t *ctx UNNEEDED,

wallet/test/run-migrate_remove_chain_moves_duplicates.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,8 @@ struct channel *new_channel(struct peer *peer UNNEEDED, u64 dbid UNNEEDED,
249249
struct peer_update *peer_update STEALS UNNEEDED,
250250
u64 last_stable_connection UNNEEDED,
251251
const struct channel_stats *stats UNNEEDED,
252-
struct channel_state_change **state_changes STEALS UNNEEDED)
252+
struct channel_state_change **state_changes STEALS UNNEEDED,
253+
const struct wally_psbt *funding_psbt STEALS UNNEEDED)
253254
{ fprintf(stderr, "new_channel called!\n"); abort(); }
254255
/* Generated stub for new_channel_state_change */
255256
struct channel_state_change *new_channel_state_change(const tal_t *ctx UNNEEDED,

wallet/test/run-wallet.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1614,7 +1614,8 @@ static bool test_channel_inflight_crud(struct lightningd *ld, const tal_t *ctx)
16141614
NULL,
16151615
0,
16161616
stats,
1617-
tal_arr(NULL, struct channel_state_change *, 0));
1617+
tal_arr(NULL, struct channel_state_change *, 0),
1618+
NULL);
16181619
db_begin_transaction(w->db);
16191620
CHECK(!wallet_err);
16201621
wallet_channel_insert(w, chan);

0 commit comments

Comments
 (0)