use std::collections::BTreeMap;
#[cfg(feature = "serde")]
use amplify::ToYamlString;
use amplify::{DumbDefault, Slice32};
use p2p::bolt::{ActiveChannelId, TempChannelId};
use secp256k1::ecdsa::Signature;
use secp256k1::PublicKey;
use super::{
CommonParams, Direction, HtlcKnown, HtlcSecret, Lifecycle, LocalKeyset,
PeerParams, Policy, RemoteKeyset,
};
use crate::channel::{Funding, State};
#[derive(Clone, Debug)]
#[derive(StrictEncode, StrictDecode)]
#[cfg_attr(
feature = "serde",
derive(Display, Serialize, Deserialize),
serde(crate = "serde_crate"),
display(ChannelState::to_yaml_string)
)]
pub struct ChannelState {
pub funding: Funding,
pub stage: Lifecycle,
pub chain_hash: Slice32,
pub active_channel_id: ActiveChannelId,
pub local_amount_msat: u64,
pub remote_amount_msat: u64,
pub commitment_number: u64,
pub commitment_sigs: Vec<Signature>,
pub policy: Policy,
pub common_params: CommonParams,
pub local_params: PeerParams,
pub remote_params: PeerParams,
pub local_keys: LocalKeyset,
pub remote_keys: RemoteKeyset,
pub remote_per_commitment_point: PublicKey,
pub local_per_commitment_point: PublicKey,
pub direction: Direction,
pub offered_htlcs: BTreeMap<u64, HtlcSecret>,
pub received_htlcs: BTreeMap<u64, HtlcSecret>,
pub resolved_htlcs: BTreeMap<u64, HtlcKnown>,
pub last_recieved_htlc_id: u64,
pub last_offered_htlc_id: u64,
}
impl State for ChannelState {
fn to_funding(&self) -> Funding {
self.funding.clone()
}
fn set_funding(&mut self, funding: &Funding) {
self.funding = funding.clone()
}
}
#[cfg(feature = "serde")]
impl ToYamlString for ChannelState {}
impl DumbDefault for ChannelState {
fn dumb_default() -> Self {
ChannelState {
funding: Funding::new(),
stage: Default::default(),
chain_hash: Default::default(),
active_channel_id: ActiveChannelId::Temporary(
TempChannelId::dumb_default(),
),
local_amount_msat: 0,
remote_amount_msat: 0,
commitment_number: 0,
commitment_sigs: vec![],
policy: Default::default(),
common_params: Default::default(),
local_params: Default::default(),
remote_params: Default::default(),
local_keys: LocalKeyset::dumb_default(),
remote_keys: RemoteKeyset::dumb_default(),
remote_per_commitment_point: dumb_pubkey!(),
local_per_commitment_point: dumb_pubkey!(),
direction: Direction::Inbound,
offered_htlcs: none!(),
received_htlcs: none!(),
resolved_htlcs: none!(),
last_recieved_htlc_id: 0,
last_offered_htlc_id: 0,
}
}
}