@@ -312,6 +312,7 @@ struct channel *new_unsaved_channel(struct peer *peer,
312312 channel -> stable_conn_timer = NULL ;
313313 /* Nothing happened yet */
314314 memset (& channel -> stats , 0 , sizeof (channel -> stats ));
315+ channel -> state_changes = tal_arr (channel , struct state_change_entry , 0 );
315316
316317 /* No shachain yet */
317318 channel -> their_shachain .id = 0 ;
@@ -448,7 +449,8 @@ struct channel *new_channel(struct peer *peer, u64 dbid,
448449 /* NULL or stolen */
449450 struct peer_update * peer_update STEALS ,
450451 u64 last_stable_connection ,
451- const struct channel_stats * stats )
452+ const struct channel_stats * stats ,
453+ struct state_change_entry * state_changes STEALS )
452454{
453455 struct channel * channel = tal (peer -> ld , struct channel );
454456 struct amount_msat htlc_min , htlc_max ;
@@ -606,6 +608,8 @@ struct channel *new_channel(struct peer *peer, u64 dbid,
606608 channel -> last_stable_connection = last_stable_connection ;
607609 channel -> stable_conn_timer = NULL ;
608610 channel -> stats = * stats ;
611+ channel -> state_changes = tal_steal (channel , state_changes );
612+
609613 /* Populate channel->channel_gossip */
610614 channel_gossip_init (channel , take (peer_update ));
611615
@@ -836,8 +840,6 @@ void channel_set_state(struct channel *channel,
836840 enum state_change reason ,
837841 char * why )
838842{
839- struct timeabs timestamp ;
840-
841843 /* set closer, if known */
842844 if (channel_state_closing (state ) && channel -> closer == NUM_SIDES ) {
843845 if (reason == REASON_LOCAL ) channel -> closer = LOCAL ;
@@ -865,10 +867,17 @@ void channel_set_state(struct channel *channel,
865867
866868 /* plugin notification channel_state_changed and DB entry */
867869 if (state != old_state ) { /* see issue #4029 */
868- timestamp = time_now ();
870+ struct state_change_entry change ;
871+ change .timestamp = time_now ();
872+ change .old_state = old_state ;
873+ change .new_state = state ;
874+ change .cause = reason ;
875+ change .message = tal_strdup (channel -> state_changes , why );
876+ tal_arr_expand (& channel -> state_changes , change );
877+
869878 wallet_state_change_add (channel -> peer -> ld -> wallet ,
870879 channel -> dbid ,
871- timestamp ,
880+ change . timestamp ,
872881 old_state ,
873882 state ,
874883 reason ,
@@ -877,7 +886,7 @@ void channel_set_state(struct channel *channel,
877886 & channel -> peer -> id ,
878887 & channel -> cid ,
879888 channel -> scid ,
880- timestamp ,
889+ change . timestamp ,
881890 old_state ,
882891 state ,
883892 reason ,
0 commit comments