use crate::channel::TLCId;
use crate::invoice::HashAlgorithm;
use crate::serde_utils::{CompactSignatureAsBytes, EntityHex};
use crate::{Hash256, Privkey, Pubkey};
use ckb_types::packed::{Bytes, CellOutput, Script};
use musig2::CompactSignature;
use serde::{Deserialize, Serialize};
use serde_with::serde_as;
#[serde_as]
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct RevocationData {
pub commitment_number: u64,
#[serde_as(as = "CompactSignatureAsBytes")]
pub aggregated_signature: CompactSignature,
#[serde_as(as = "EntityHex")]
pub output: CellOutput,
#[serde_as(as = "EntityHex")]
pub output_data: Bytes,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct SettlementData {
pub local_amount: u128,
pub remote_amount: u128,
pub tlcs: Vec<SettlementTlc>,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct SettlementTlc {
pub tlc_id: TLCId,
pub hash_algorithm: HashAlgorithm,
pub payment_amount: u128,
pub payment_hash: Hash256,
pub expiry: u64,
pub local_key: Privkey,
pub remote_key: Pubkey,
}
#[serde_as]
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct ChannelData {
pub channel_id: Hash256,
#[serde_as(as = "Option<EntityHex>")]
pub funding_udt_type_script: Option<Script>,
pub local_settlement_key: Privkey,
pub remote_settlement_key: Pubkey,
pub local_funding_pubkey: Pubkey,
pub remote_funding_pubkey: Pubkey,
pub remote_settlement_data: SettlementData,
pub pending_remote_settlement_data: SettlementData,
pub local_settlement_data: SettlementData,
pub revocation_data: Option<RevocationData>,
}