Vaeltrix Docs

Contract reference

Contract addresses, functions, types, and error codes generated from the deployed testnet contracts.

Contract reference

Testnet deployment. Every address, function signature, struct, enum, and error code below is extracted directly from the actual deployed testnet contracts and Rust types at build time.

Deployed testnet addresses

ContractAddressNotes
vaeltrix_registryCBBZQ577QYKADNBAYBYN56Q3ZDTDQYCBOGREHBFEVOWOI5F27TJBE6MOProvider identity, SLA templates, observer set, governance timelock
vaeltrix_bondCCYLDMTA4CTFF2VHULUCCBNCBMN3G7MA33EZ2OFYMIRSIKX3PYUHCUAIUSDC stake custody, commitment coverage, exit cooldowns, claim settlement
vaeltrix_scoreboardCD4TA5VDQUHF2LV5H5LWQSXRUSWTQYZN23MONYYUZQAJ5JBOEGYAP5ECDaily Merkle batch anchors, lifetime provider statistics, claim accounting
Test USDCCB2CFWENJ2M5JXWBGUOKO75QVIFJ2EY5WOIOHR6FFYTXAKGS2S3XOIM4Stellar Asset Contract (SAC) for testnet USDC stake & payouts

Testnet accounts

  • Admin: GCZL57Q3MFIUMMG2XGSND7XDRYTFIQSFJXMT5AIJIDHQP4WONWWPIQK2
  • Observer: GBMQHKORPRE7RJR2FUSQZGJLFSSEBSOX4EZHO3N2R4ZRXCQZJ7ZUV35R
  • Provider Admin: GAXN3KJT36RUDCOFGVUIUAD6IXWHGC5X3RIZQPV6A222GL4YZEYDG5UT
  • Verifier: GDZTVBIG3R5ZQGPY4LXDM4JSU33NNIDWBE335C7AW7E53HXIV4SS4IXH
  • Client: GC7QZSFSZSAUFJE5LHWSV25UJTRXN4KHQHEKDX2YK6DDK4FHEQ4DR3XR
  • Start ledger: 5309530

Registry Contract (vaeltrix_registry)

Testnet contract address: CBBZQ577QYKADNBAYBYN56Q3ZDTDQYCBOGREHBFEVOWOI5F27TJBE6MO Wasm hash: 63590fb3533e18870ffb71354d0da91713caeaf9369bff32eadc6bf5e80b5a6b

Sample testnet deployment on Stellar Protocol 29. Always read addresses and configuration from this page or deployments/testnet.json rather than hardcoding literals.

Functions

__constructor

fn __constructor(env: Env, admin: Address, params: Params) -> Result<(), Error>

register_provider

fn register_provider(env: Env, admin: Address, home_domain: String, signers: Vec<BytesN<32>>, metadata_uri: String,) -> Result<BytesN<32>, Error>

get_provider

fn get_provider(env: Env, id: BytesN<32>) -> Result<vaeltrix_types::Provider, Error>

providers_by_admin

fn providers_by_admin(env: Env, admin: Address) -> Vec<BytesN<32>>

provider_id_for

fn provider_id_for(env: Env, home_domain: String, admin: Address) -> BytesN<32>

update_signers

fn update_signers(env: Env, provider_id: BytesN<32>, signers: Vec<BytesN<32>>,) -> Result<(), Error>

update_metadata

fn update_metadata(env: Env, provider_id: BytesN<32>, metadata_uri: String,) -> Result<(), Error>

verify_domain

fn verify_domain(env: Env, provider_id: BytesN<32>) -> Result<(), Error>

unverify_domain

fn unverify_domain(env: Env, provider_id: BytesN<32>) -> Result<(), Error>

suspend_provider

fn suspend_provider(env: Env, provider_id: BytesN<32>, reason: Symbol,) -> Result<(), Error>

reinstate_provider

fn reinstate_provider(env: Env, provider_id: BytesN<32>) -> Result<(), Error>

propose_template

fn propose_template(env: Env, template: vaeltrix_types::SlaTemplate) -> Result<u32, Error>

activate_template

fn activate_template(env: Env, id: u32, version: u32) -> Result<(), Error>

cancel_template

fn cancel_template(env: Env, id: u32, version: u32) -> Result<(), Error>

deprecate_template

fn deprecate_template(env: Env, id: u32, version: u32) -> Result<(), Error>

get_template

fn get_template(env: Env, id: u32) -> Result<vaeltrix_types::SlaTemplate, Error>

get_template_version

fn get_template_version(env: Env, id: u32, version: u32,) -> Result<vaeltrix_types::SlaTemplate, Error>

template_ids

fn template_ids(env: Env) -> soroban_sdk::Vec<u32>

is_active_observer

fn is_active_observer(env: Env, observer: Address) -> bool

active_observer_count

fn active_observer_count(env: Env) -> Result<u32, Error>

observers

fn observers(env: Env) -> Vec<vaeltrix_types::Observer>

admin

fn admin(env: Env) -> Result<Address, Error>

params

fn params(env: Env) -> Result<Params, Error>

propose_admin

fn propose_admin(env: Env, new_admin: Address) -> Result<(), Error>

accept_admin

fn accept_admin(env: Env) -> Result<(), Error>

propose

fn propose(env: Env, kind: ActionKind) -> Result<u32, Error>

execute

fn execute(env: Env, action_id: u32) -> Result<(), Error>

cancel

fn cancel(env: Env, action_id: u32) -> Result<(), Error>

action

fn action(env: Env, id: u32) -> Result<PendingAction, Error>

Bond Contract (vaeltrix_bond)

Testnet contract address: CCYLDMTA4CTFF2VHULUCCBNCBMN3G7MA33EZ2OFYMIRSIKX3PYUHCUAI Wasm hash: cd9fb939919947617475189ccf693b5f43f4bc954e7e8e6d0d1c3fad2baa096c

Sample testnet deployment on Stellar Protocol 29. Always read addresses and configuration from this page or deployments/testnet.json rather than hardcoding literals.

Functions

__constructor

fn __constructor(env: Env, admin: Address, registry: Address, scoreboard: Address) -> ()

commit

fn commit(env: Env, provider_id: BytesN<32>, template_id: u32, stake_asset: Address, amount: i128, max_volume_per_period: i128, period_secs: u64,) -> Result<u64, Error>

commitment

fn commitment(env: Env, id: u64) -> Result<vaeltrix_types::Commitment, Error>

commitments_by_provider

fn commitments_by_provider(env: Env, provider_id: BytesN<32>) -> soroban_sdk::Vec<u64>

available_stake

fn available_stake(env: Env, id: u64) -> Result<i128, Error>

max_penalty

fn max_penalty(env: Env, id: u64) -> Result<i128, Error>

add_stake

fn add_stake(env: Env, id: u64, amount: i128) -> Result<(), Error>

withdraw_excess

fn withdraw_excess(env: Env, id: u64, amount: i128) -> Result<(), Error>

is_covered

fn is_covered(env: Env, commitment_id: u64, t0_ms: u64) -> Result<bool, Error>

pause

fn pause(env: Env, id: u64) -> Result<(), Error>

resume

fn resume(env: Env, id: u64) -> Result<(), Error>

request_exit

fn request_exit(env: Env, id: u64) -> Result<(), Error>

finalize_exit

fn finalize_exit(env: Env, id: u64) -> Result<(), Error>

admin

fn admin(env: Env) -> Result<Address, Error>

registry

fn registry(env: Env) -> Result<Address, Error>

scoreboard

fn scoreboard(env: Env) -> Result<Address, Error>

propose_upgrade

fn propose_upgrade(env: Env, wasm_hash: BytesN<32>) -> Result<(), Error>

execute_upgrade

fn execute_upgrade(env: Env) -> Result<(), Error>

cancel_upgrade

fn cancel_upgrade(env: Env) -> Result<(), Error>

Scoreboard Contract (vaeltrix_scoreboard)

Testnet contract address: CD4TA5VDQUHF2LV5H5LWQSXRUSWTQYZN23MONYYUZQAJ5JBOEGYAP5EC Wasm hash: c522eef5bfdf455eed09a1ec6b937458be2db850ed7284b93547b823b4dee3dc

Sample testnet deployment on Stellar Protocol 29. Always read addresses and configuration from this page or deployments/testnet.json rather than hardcoding literals.

Functions

__constructor

fn __constructor(env: Env, admin: Address, registry: Address) -> ()

bond

fn bond(env: Env) -> Option<Address>

set_bond

fn set_bond(env: Env, bond: Address) -> Result<(), Error>

anchor_batch

fn anchor_batch(env: Env, observer: Address, commitment_id: u64, provider_id: BytesN<32>, period_start: u64, period_end: u64, merkle_root: BytesN<32>, stats: PeriodStats, attestation_hash: BytesN<32>,) -> Result<(), Error>

record_claim_outcome

fn record_claim_outcome(env: Env, claim: Claim, outcome: ClaimOutcome,) -> Result<(), Error>

lifetime

fn lifetime(env: Env, provider_id: BytesN<32>) -> LifetimeStats

batch

fn batch(env: Env, commitment_id: u64, period: u64) -> Result<BatchRecord, Error>

stats

fn stats(env: Env, commitment_id: u64, period: u64) -> Result<PeriodStats, Error>

periods

fn periods(env: Env, commitment_id: u64) -> Vec<u64>

Data model & shared types

Single source of truth from crates/vaeltrix-types.

Structs

Provider

pub id: BytesN<32>
pub admin: Address
pub signers: Vec<BytesN<32>>
pub home_domain: String
pub metadata_uri: String
pub verified: bool
pub status: ProviderStatus
pub registered_at: u64

Scope

pub asset: Address
pub direction: Direction
pub sender_country: Option<Symbol>
pub receiver_country: Option<Symbol>
pub min_amount: i128
pub max_amount: i128
pub payout_rail: Option<Symbol>

SlaTemplate

pub id: u32
pub version: u32
pub metric: Metric
pub start_event: EventKind
pub end_event: EventKind
pub target_ms: u64
pub grace_ms: u64
pub penalty: PenaltyModel
pub scope: Scope
pub carve_outs: Vec<CarveOut>
pub max_hold_ms: u64
pub claim_window_secs: u64
pub evidence_mode: EvidenceMode
pub status: TemplateStatus
pub activates_at: u64

Commitment

pub id: u64
pub provider_id: BytesN<32>
pub template_id: u32
pub template_version: u32
pub stake_asset: Address
pub stake_total: i128
pub stake_reserved: i128
pub min_stake: i128
pub max_volume_per_period: i128
pub period_secs: u64
pub effective_from: u64
pub effective_to: Option<u64>
pub paused_at: Option<u64>
pub resumed_at: Option<u64>
pub exit_requested_at: Option<u64>
pub exit_cooldown_secs: u64
pub open_claims: u32
pub status: CommitmentStatus

PaymentRef

pub payment_id: BytesN<32>
pub sep31_tx_id: String
pub commitment_id: u64
pub amount: i128
pub t0_ms: u64
pub t1_ms: Option<u64>
pub pause_ms: u64
pub evidence_hash: BytesN<32>

CompletionReceipt

pub signer: BytesN<32>
pub signature: BytesN<64>

Claim

pub id: u64
pub commitment_id: u64
pub provider_id: BytesN<32>
pub payment: PaymentRef
pub breach: BreachKind
pub claimant: Address
pub beneficiary: Address
pub bond_payer: Address
pub filed_by_observer: Option<Address>
pub penalty_amount: i128
pub reserved_amount: i128
pub shortfall: i128
pub claim_bond: i128
pub status: ClaimStatus
pub filed_at: u64
pub challenge_deadline: u64
pub attestation_deadline: u64
pub counter_evidence_hash: Option<BytesN<32>>
pub votes_for: u32
pub votes_against: u32

Observer

pub address: Address
pub key: BytesN<32>
pub active: bool
pub added_at: u64

Params

pub timelock_secs: u64
pub challenge_window_secs: u64
pub attestation_window_secs: u64
pub exit_extra_secs: u64
pub quorum: u32
pub min_claim_bond: i128
pub claim_bond_bps: u32
pub rejected_bond_provider_bps: u32
pub stake_floor: i128
pub stake_k: u32
pub max_stake_per_commitment: i128
pub allowed_stake_assets: Vec<Address>

PeriodStats

pub payments: u32
pub on_time: u32
pub breaches: u32
pub carved_out: u32
pub p50_ms: u64
pub p95_ms: u64
pub p99_ms: u64
pub volume: i128
pub penalties_paid: i128

LifetimeStats

pub payments: u64
pub on_time: u64
pub breaches: u64
pub carved_out: u64
pub volume: i128
pub penalties_paid: i128
pub claims_upheld: u32
pub claims_rejected: u32
pub claims_expired: u32
pub shortfall_total: i128

BatchRecord

pub observer: Address
pub merkle_root: BytesN<32>
pub attestation_hash: BytesN<32>
pub stats: PeriodStats
pub anchored_at: u64

Enums

ProviderStatus

Active
Suspended
Exited

Metric

TimeToCompletion

EventKind

SenderDebitConfirmed
OnChainSettled
ReceiverAccepted
ReceiverCreditConfirmed
RecipientAcknowledged

Direction

Inbound
Outbound

CarveOut

ReceiverBankHoliday
ComplianceHoldDeclared
InvalidBeneficiary
SenderInfoIncomplete

EvidenceMode

DualSigned
ProviderSigned
ObserverOnly

TemplateStatus

Proposed
Active
Deprecated

CommitmentStatus

Active
Paused
Exiting
Exited

ClaimStatus

Filed
Challenged
Paid
Rejected
Expired

BreachKind

LateCompletion
NoCompletion

ClaimOutcome

Upheld
Rejected
Expired

PenaltyModel

PerBreachBps(PerBreachBps)

Contract error codes

Frozen #[contracterror] codes from crates/vaeltrix-types/src/errors.rs. Returned on contract failure with explicit numeric tags.

CodeNameDescription
1NotAuthorizedCaller lacks authorization or required signature from admin, observer, or bond authority.
2ProviderNotActiveProvider status is suspended or exited; operations on this provider are disallowed.
3TemplateNotActiveSLA template is proposed or deprecated, not currently in active state.
4InsufficientStakeCommitment does not have enough unreserved stake to cover penalty or minimum stake.
5OutOfScopePayment amount, asset, direction, or corridor is outside the template scope.
6ClaimWindowClosedClaim filed after the template claim window has elapsed.
7DuplicateClaimA claim for this payment ID has already been recorded; duplicate filing rejected.
8InvalidEvidencePause duration exceeds maximum hold duration, or evidence hash is invalid.
9NotInBreachPayment completed within target plus grace duration; no SLA breach occurred.
10ChallengeWindowOpenAttempted action before the challenge window has closed.
11OpenClaimsExistCommitment exit or excess withdrawal blocked while open claims remain unresolved.
12CooldownActiveExit cooldown period has not yet expired.
13UnknownObserverObserver address is not in the active observer registry.
14AlreadyAttestedObserver has already cast an attestation vote on this claim.
15AlreadyInitializedContract has already been initialized via constructor.
16NotInitializedContract has not been initialized with required parameters.
17InvalidParamsParameters fail validation bounds (quorum, windows, fee bps, asset caps, etc.).
18UnknownProviderProvider ID does not exist in the registry.
19UnknownTemplateTemplate ID does not exist in the registry.
20UnknownCommitmentCommitment ID does not exist in the bond contract.
21UnknownClaimClaim ID does not exist.
22ProviderNotVerifiedProvider home domain has not been verified by the designated verifier.
23ProviderExistsProvider already registered for this domain and admin combination.
24TemplateExistsTemplate version already exists.
25TimelockActiveGovernance action timelock has not expired; action is still pending.
26AssetNotAllowedStake asset is not in the registry allowed stake assets list.
27AssetMismatchStake asset does not match the template scope asset.
28AmountOutOfRangeAmount is below minimum stake floor or exceeds allowable thresholds.
29NotCoveredPayment initiation timestamp (t0) falls outside active commitment coverage period.
30CommitmentNotActiveCommitment is not active (paused, exiting, or exited).
31ClaimNotOpenClaim status is not Filed or Challenged.
32AttestationWindowClosedObserver attestation window has expired.
33QuorumNotReachedQuorum not reached among observer attestations.
34BelowMinStakeStake reduction or commitment amount falls below required minimum stake floor.
35StakeCapExceededTotal stake exceeds maximum allowed stake per commitment.
36PaymentIdMismatchDerived payment ID does not match the provided payment ID.
37UnknownSignerSigner is not in the provider registered signer set.
38TooManySignersSigner list length exceeds maximum permitted count.
39UnsupportedPenaltyModelSpecified penalty calculation model is not supported.
40ArithmeticOverflowMath overflow or underflow detected in checked arithmetic operation.
41BondAlreadySetBond contract address has already been set on the scoreboard.
42BatchExistsDaily metrics batch for this commitment and period has already been anchored.
43InvalidPeriodPeriod start/end is not a multiple of 86400, length is not 86400s, or is in the future.
44NothingPendingNo pending governance action or admin transition found with the specified ID.

On this page