lnp/channel/bolt/
state.rs1use std::collections::BTreeMap;
15
16#[cfg(feature = "serde")]
17use amplify::ToYamlString;
18use amplify::{DumbDefault, Slice32};
19use p2p::bolt::{ActiveChannelId, TempChannelId};
20use secp256k1::ecdsa::Signature;
21use secp256k1::PublicKey;
22
23use super::{
24 CommonParams, Direction, HtlcKnown, HtlcSecret, Lifecycle, LocalKeyset,
25 PeerParams, Policy, RemoteKeyset,
26};
27use crate::channel::{Funding, State};
28
29#[derive(Clone, Debug)]
30#[derive(StrictEncode, StrictDecode)]
31#[cfg_attr(
32 feature = "serde",
33 derive(Display, Serialize, Deserialize),
34 serde(crate = "serde_crate"),
35 display(ChannelState::to_yaml_string)
36)]
37pub struct ChannelState {
38 pub funding: Funding,
39
40 pub stage: Lifecycle,
42
43 pub chain_hash: Slice32,
52
53 pub active_channel_id: ActiveChannelId,
60
61 pub local_amount_msat: u64,
63
64 pub remote_amount_msat: u64,
66
67 pub commitment_number: u64,
68
69 pub commitment_sigs: Vec<Signature>,
70
71 pub policy: Policy,
73
74 pub common_params: CommonParams,
76
77 pub local_params: PeerParams,
80
81 pub remote_params: PeerParams,
83
84 pub local_keys: LocalKeyset,
86
87 pub remote_keys: RemoteKeyset,
89
90 pub remote_per_commitment_point: PublicKey,
91
92 pub local_per_commitment_point: PublicKey,
93
94 pub direction: Direction,
96
97 pub offered_htlcs: BTreeMap<u64, HtlcSecret>,
98 pub received_htlcs: BTreeMap<u64, HtlcSecret>,
99 pub resolved_htlcs: BTreeMap<u64, HtlcKnown>,
100 pub last_recieved_htlc_id: u64,
101 pub last_offered_htlc_id: u64,
102}
103
104impl State for ChannelState {
105 fn to_funding(&self) -> Funding {
106 self.funding.clone()
107 }
108
109 fn set_funding(&mut self, funding: &Funding) {
110 self.funding = funding.clone()
111 }
112}
113
114#[cfg(feature = "serde")]
115impl ToYamlString for ChannelState {}
116
117impl DumbDefault for ChannelState {
118 fn dumb_default() -> Self {
119 ChannelState {
120 funding: Funding::new(),
121 stage: Default::default(),
122 chain_hash: Default::default(),
123 active_channel_id: ActiveChannelId::Temporary(
124 TempChannelId::dumb_default(),
125 ),
126 local_amount_msat: 0,
127 remote_amount_msat: 0,
128 commitment_number: 0,
129 commitment_sigs: vec![],
130 policy: Default::default(),
131 common_params: Default::default(),
132 local_params: Default::default(),
133 remote_params: Default::default(),
134 local_keys: LocalKeyset::dumb_default(),
135 remote_keys: RemoteKeyset::dumb_default(),
136 remote_per_commitment_point: dumb_pubkey!(),
137 local_per_commitment_point: dumb_pubkey!(),
138 direction: Direction::Inbound,
139 offered_htlcs: none!(),
140 received_htlcs: none!(),
141 resolved_htlcs: none!(),
142 last_recieved_htlc_id: 0,
143 last_offered_htlc_id: 0,
144 }
145 }
146}