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_amountThe 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:
- Balance invariant:
final_balance_a + final_balance_b == escrow_amount - At least 2 signatures are present (both parties).
- 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.