Core architecture: commitments, measurement, carve-outs, claims, and the scoreboard.
Implementation status: The deployed foundation supports provider registration, templates, stake/coverage/exits, and scoreboard storage. Claim filing, challenges, payouts, the observer service and the public SDK are planned; integration steps for them describe the intended protocol, not runnable deployed functionality. See the technical specification for the status breakdown.
Vaeltrix creates a financial bridge between fast onchain Stellar settlements and offchain banking / mobile money rails. Rather than relying on private agreements or unenforced estimates, Vaeltrix establishes a verifiable, staked SLA layer.
A Provider represents an anchor, payment processor, or fintech on Stellar.
Home domain binding: Providers register with an admin address and a home_domain (e.g. anchor.example.com). This domain must host a standard SEP-1 stellar.toml file.
Provider ID derivation: The unique 32-byte provider ID is derived deterministically from the home domain and admin address: SHA256("VAELTRIX:PROVIDER:v1" || lowercase(home_domain) || admin_scaddress_xdr).
Signer keys: Providers register Ed25519 public keys used to sign offchain completion receipts. Signers can be rotated by the provider admin without altering existing commitments.
Verification: An independent verifier role checks that the provider admin key matches the signing keys published in the domain's stellar.toml. Until verified, providers cannot create active commitments.
Lifecycle states:
Active: Normal operation; can create commitments and stake.
Suspended: Temporarily halted by governance due to fraud or domain compromise.
Exited: Voluntarily closed all commitments and exited the system.
Real-world payouts encounter legitimate offchain interruptions. Vaeltrix accounts for these with published carve-outs:
Carve-out
Description
ReceiverBankHoliday
Receiving commercial banks closed due to official holiday or weekend.
ComplianceHoldDeclared
Payment flagged for mandatory AML/sanctions review with proof.
InvalidBeneficiary
Recipient account details rejected by downstream clearinghouse.
SenderInfoIncomplete
Missing KYC details required from the sending institution.
When a carve-out occurs, the provider records a pause duration (pause_ms), subject to the template's max_hold_ms ceiling. The net duration evaluated for SLA compliance is:
A Commitment binds a provider to a specific template version and locks collateral in vaeltrix_bond:
Isolated stake: Stake is held exclusively in vaeltrix_bond. Each commitment is strictly isolated - stake from one provider or corridor cannot subsidize another.
Any new claim reserves penalty funds from available stake. If available stake is insufficient, the commitment cannot cover additional volume.
Coverage checks:is_covered(commitment_id, t0_ms) ensures that a payment was initiated while the commitment was active and not paused.
Exiting: Calling request_exit() freezes the commitment and starts an exit cooldown timer (the frozen exit_cooldown_secs, which already includes exit_extra_secs). Once the cooldown elapses and all open claims are resolved, finalize_exit() returns remaining collateral to the provider.
When a payment breaches its SLA (either completed late or never completed), a claim can be filed:
Filing: The sending client or an observer files a claim with the PaymentRef and evidence hash. A claim bond is deposited to deter spam.
Challenge window: The provider has challenge_window_secs to review the claim. In the planned flow, anyone may call resolve after the deadline; a keeper can automate that call.
Observer adjudication: If challenged, independent observers review the evidence bundle offchain and cast attestation votes onchain. If the quorum threshold is met and the breach is upheld, the penalty is released to the beneficiary and the claim bond is returned. If rejected, the claim bond is forfeited.
To protect providers and participants from sudden rule shifts:
Timelock delay: Critical changes (adding/removing observers, changing parameters, updating contract Wasm) require a mandatory timelock delay (timelock_secs, e.g. 7 days).
Two-step execution: Actions must be propose()-ed first, wait out the timelock, and then be execute()-ed by anyone.
Two-step admin transfer: Admin keys cannot be changed in a single step; the current admin calls propose_admin(), and the new admin must explicitly call accept_admin().