use crate::invoice::HashAlgorithm;
use crate::schema_helpers::*;
use crate::serde_utils::{EntityHex, Hash256, Privkey, Pubkey, SliceHex, U128Hex, U64Hex};
use ckb_jsonrpc_types::Script;
use ckb_types::packed::{Bytes, CellOutput};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use serde_with::serde_as;
#[serde_as]
#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub enum TLCId {
Offered(
#[serde_as(as = "U64Hex")]
#[schemars(schema_with = "schema_as_uint_hex")]
u64,
),
Received(
#[serde_as(as = "U64Hex")]
#[schemars(schema_with = "schema_as_uint_hex")]
u64,
),
}
#[serde_as]
#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)]
pub struct SettlementTlc {
pub tlc_id: TLCId,
pub hash_algorithm: HashAlgorithm,
#[serde_as(as = "U128Hex")]
#[schemars(schema_with = "schema_as_uint_hex")]
pub payment_amount: u128,
pub payment_hash: Hash256,
#[serde_as(as = "U64Hex")]
#[schemars(schema_with = "schema_as_uint_hex")]
pub expiry: u64,
pub local_key: Privkey,
pub remote_key: Pubkey,
}
#[serde_as]
#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)]
pub struct SettlementData {
#[serde_as(as = "U128Hex")]
#[schemars(schema_with = "schema_as_uint_hex")]
pub local_amount: u128,
#[serde_as(as = "U128Hex")]
#[schemars(schema_with = "schema_as_uint_hex")]
pub remote_amount: u128,
pub tlcs: Vec<SettlementTlc>,
}
#[serde_as]
#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)]
pub struct RevocationData {
#[serde_as(as = "U64Hex")]
#[schemars(schema_with = "schema_as_uint_hex")]
pub commitment_number: u64,
#[serde_as(as = "SliceHex")]
#[schemars(schema_with = "schema_as_hex_bytes")]
pub aggregated_signature: Vec<u8>,
#[serde_as(as = "EntityHex")]
#[schemars(schema_with = "schema_as_hex_bytes")]
pub output: CellOutput,
#[serde_as(as = "EntityHex")]
#[schemars(schema_with = "schema_as_hex_bytes")]
pub output_data: Bytes,
}
#[serde_as]
#[derive(Serialize, Deserialize, Debug, Clone, JsonSchema)]
pub struct CreateWatchChannelParams {
pub channel_id: Hash256,
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 settlement_data: SettlementData,
}
#[serde_as]
#[derive(Serialize, Deserialize, Debug, Clone, JsonSchema)]
pub struct RemoveWatchChannelParams {
pub channel_id: Hash256,
}
#[serde_as]
#[derive(Serialize, Deserialize, Debug, Clone, JsonSchema)]
pub struct UpdateRevocationParams {
pub channel_id: Hash256,
pub revocation_data: RevocationData,
pub settlement_data: SettlementData,
}
#[serde_as]
#[derive(Serialize, Deserialize, Debug, Clone, JsonSchema)]
pub struct UpdatePendingRemoteSettlementParams {
pub channel_id: Hash256,
pub settlement_data: SettlementData,
}
#[serde_as]
#[derive(Serialize, Deserialize, Debug, Clone, JsonSchema)]
pub struct UpdateLocalSettlementParams {
pub channel_id: Hash256,
pub settlement_data: SettlementData,
}
#[serde_as]
#[derive(Serialize, Deserialize, Debug, Clone, JsonSchema)]
pub struct CreatePreimageParams {
pub payment_hash: Hash256,
pub preimage: Hash256,
}
#[serde_as]
#[derive(Serialize, Deserialize, Debug, Clone, JsonSchema)]
pub struct RemovePreimageParams {
pub payment_hash: Hash256,
}