Ward Protocol SDK — v0.2.2

Documentation

SDK reference, module overview, and integration guides. All modules are independently auditable.

146/146 TestsPython 3.11+MIT License

Quickstart

# Install
pip install ward-protocol==0.2.2

# Validate a claim (9 steps, all on-chain)
from ward import ClaimValidator

validator = ClaimValidator(url="https://s.altnet.rippletest.net:51234/")

result = await validator.validate_claim(
    claimant_address="rClaimantXXX...",
    nft_token_id="A" * 64,
    defaulted_vault="rVaultXXX...",
    loan_id="B" * 64,
    pool_address="rPoolXXX...",
)

print(result.approved)            # True
print(result.steps_passed)        # 9
print(result.claim_payout_drops)  # min(vault_loss, policy_coverage)

Module Reference

Total nSLOC: ~1,565 Python + ~583 Rust

WardClient
ward/client.py · ~100 nSLOC
High-level SDK entrypoint. No wallet stored as instance attribute.
VaultMonitor
ward/vault_monitor.py · ~240 nSLOC
WebSocket default detection. 3-ledger confirmation. Heartbeat reconnect.
ClaimValidator
ward/validator.py · ~220 nSLOC
9-step on-chain claim validation. All state from XRPL ledger.
EscrowSettlement
ward/settlement.py · ~160 nSLOC
PREIMAGE-SHA-256 escrow lifecycle. Ward never receives preimage.
PoolHealthMonitor
ward/pool.py · ~175 nSLOC
Coverage ratio enforcement. XRPL reserve accounting.
primitives
ward/primitives.py · ~220 nSLOC
validate_drops(), check_rate_limit(), make_preimage_condition(), submit_with_retry().
constants
ward/constants.py · ~95 nSLOC
Single source of truth for all protocol constants. 100% test coverage.

Testing

# Run test suite (146/146 passing)
pip install -r requirements.txt
python -m pytest test_ward.py -m "not integration" -v

# Rust modules
cd ward && cargo test

146 tests covering all 9 claim validation steps, all 15 attack vectors, VaultMonitor, EscrowSettlement, PoolHealthMonitor, and all primitives. Marked integration tests require XRPL Mainnet access.

Resources