Sigil documentation
ReferenceRust referencesigil-czac

sigil-czac · settlement

Source declarations, signatures and documentation for settlement.

Source: sigil/node/sigil-czac/src/settlement.rs. SHA-256: a2702b3b42d029b729dcf3f7e192ca308ee035d165700ae0fd461dab2c22edd8.

This reference follows declared source modules, retains conditional attributes, and includes public declarations and implementation methods. Private-module re-exports and trait resolution require the compiler; this is a source reference, not a claim that every listed item is a root import. Function bodies and constant values are omitted.

settlement::SETTLEMENT_DOMAIN_TAG

Domain separator for CZAC settlement signatures.

The signed transcript is:

SETTLEMENT_DOMAIN_TAG
|| u32-le:len(channel_id) || channel_id
|| u64-le:latest_sequence
|| u64-le:final_balance_a
|| u64-le:final_balance_b
|| u64-le:escrow_amount

The signatures field is excluded. escrow_amount is included so a valid signature for one escrow cannot be replayed into a different channel amount even if a channel identifier is reused by a caller.

pub const SETTLEMENT_DOMAIN_TAG: &[u8];

Source line: 29.

settlement::SettlementProof

A settlement proof submitted to the consensus layer.

This proof authorizes the on-chain release of escrowed funds according to the final balance distribution.

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SettlementProof {
/// Payment channel ID being settled.

pub channel_id: String,
/// Final balance for party A.

pub final_balance_a: u64,
/// Final balance for party B.

pub final_balance_b: u64,
/// Latest state update sequence number.

pub latest_sequence: u64,
/// Signatures from both parties over the final state.

pub signatures: Vec<Vec<u8>>
}

Source line: 36.

settlement::verify_settlement

Verify that a settlement proof is valid against the escrow amount.

Checks:

  1. Balance invariant: final_balance_a + final_balance_b == escrow_amount
  2. At least 2 signatures are present (both parties).
  3. Channel ID is non-empty.
pub fn verify_settlement(proof: &SettlementProof, escrow_amount: u64) -> Result<bool, CzacError>;

Source line: 55.

settlement::verify_settlement_with_keys

Verify that a settlement proof carries valid party signatures.

The verifying keys must come from the already-resolved channel parties (typically via OAS/DID resolution). They are not read from the proof, which prevents a proof from self-authorizing with attacker-chosen keys.

pub fn verify_settlement_with_keys(
    proof: &SettlementProof,
    escrow_amount: u64,
    party_a_verifying_key_bytes: &[u8; 32],
    party_b_verifying_key_bytes: &[u8; 32],
) -> Result<bool, CzacError>;

Source line: 65.

settlement::create_signed_settlement_proof

Create a settlement proof signed by both channel parties.

pub fn create_signed_settlement_proof(
    channel_id: String,
    balance_a: u64,
    balance_b: u64,
    sequence: u64,
    escrow_amount: u64,
    signing_key_a: &SigningKey,
    signing_key_b: &SigningKey,
) -> Result<SettlementProof, CzacError>;

Source line: 98.

settlement::settlement_digest

Compute the canonical digest signed by settlement participants.

pub fn settlement_digest(proof: &SettlementProof, escrow_amount: u64) -> [u8; 32];

Source line: 127.

settlement::calculate_settlement_amounts

Calculate the settlement amounts from a proof.

Returns (amount_a, amount_b) after verifying the balance invariant against the sum.

pub fn calculate_settlement_amounts(proof: &SettlementProof) -> Result<(u64, u64), CzacError>;

Source line: 219.

settlement::create_settlement_proof

Create a settlement proof from a closed payment channel.

pub fn create_settlement_proof(
    channel_id: String,
    balance_a: u64,
    balance_b: u64,
    sequence: u64,
    signature_a: Vec<u8>,
    signature_b: Vec<u8>,
) -> SettlementProof;

Source line: 233.

On this page