Skip to main content

Deterministic default resolution for XLS-66 lending vaults on the XRP Ledger

Project description

Ward Protocol

Version Tests CI PyPI License

ward_signed = False — always. Ward constructs unsigned transactions. Institutions sign. XRPL settles. Ward is never a counterparty, never a custodian, never a signatory.


Overview

Ward Protocol is the open specification for deterministic default resolution on XLS-66 institutional lending vaults on the XRP Ledger. When a borrower defaults, nine on-chain checks run automatically against live ledger state — no oracle, no human judgment, no Ward signature. The outcome is the same every time, for every institution, regardless of who runs the vault. See real-world scenarios at wardprotocol.org/use-cases.


How It Works

Full specification at wardprotocol.org/spec.

Nine deterministic steps — all state from the XRPL ledger:

Step Check
1 NFT existence + taxon 281 (XLS-20)
2 Policy validity — ledger close_time + matching on-chain premium payment
3 Vault address binding — NFT metadata vault == defaulted vault
4 LSF_LOAN_DEFAULT flag on LedgerEntry(index=loan_id)
5 Vault loss > 0 drops
6 Pool usable balance ≥ vault loss (balance − XRPL reserve)
7 Replay protection — NFT still live (burn-on-settlement)
8 Claimant holds NFT — AccountNFTs(account=claimant)
9 Pool solvency + rate limit (≤ 3/NFT/300 s, ratio ≥ 1.5×)

Live Status

Metric Value
SDK Version v0.2.5
Hosted API api.wardprotocol.org — live
Python Tests 317/317 passing (3.10 · 3.11 · 3.12)
Rust Tests 40/40 passing
TypeScript Tests 45/45 passing
Altnet E2E F·01–F·04 confirmed on-chain
XRPLF Standard Discussion #474 — active
Swell 2026 Application submitted

Quick Start

pip install ward-protocol==0.2.5
import asyncio
from ward import WardClient, ClaimValidator

# Purchase default-protection coverage
client = WardClient(url="https://s.altnet.rippletest.net:51234/")
result = await client.purchase_coverage(
    wallet=depositor_wallet,        # institution signs — Ward never does
    vault_address="rVaultXXX...",
    coverage_drops=500_000_000,     # 500 XRP
    period_days=90,
    pool_address="rPoolXXX...",
)
assert result["ward_signed"] is False  # invariant

# Validate a claim — 9 steps, all on-chain
validator = ClaimValidator(url="https://s.altnet.rippletest.net:51234/")
claim = await validator.validate_claim(
    claimant_address="rClaimantXXX...",
    nft_token_id="A" * 64,
    defaulted_vault="rVaultXXX...",
    loan_id="B" * 64,
    pool_address="rPoolXXX...",
)
print(claim.approved)            # True
print(claim.steps_passed)        # 9
print(claim.claim_payout_drops)  # min(vault_loss, policy_coverage)

SDK & API

pip install ward-protocol          # Python SDK
npm install ward-protocol          # TypeScript SDK

Hosted API: https://api.wardprotocol.org

  • GET /health — status check
  • POST /keys/generate — API key (Developer tier, no auth required)
  • POST /validate — 9-step claim validation
  • POST /purchase — unsigned coverage transaction

Full docs: wardprotocol.org/docs
Build guide: wardprotocol.org/build
Institutional readiness: docs/institutional-readiness.md


XLS Standards

Standard Role in Ward
XLS-66 Lending vault + loan lifecycle — Ward resolves defaults
XLS-20 Policy NFT (taxon 281, TF_BURNABLE, non-transferable)
XLS-70 KYC/AML credential NFT (taxon 282)
XLS-80 Domain verification for vault operators

Multi-Chain Roadmap

Chain Status Notes
XRPL Live Altnet E2E confirmed, mainnet at XLS-66 launch
Flare EVM Phase 1.5 FDC enables XRPL state verification from Flare
Hedera Phase 2 HCS + HTS + Solidity contracts
Solana Phase 3 Anchor + Metaplex pNFT (Anodos Finance call June 12)
Stellar Phase 4 Soroban + Horizon SSE + SEP-0010
XDC Evaluating XDC Network — XLS-66 compatibility assessment

Integration plans: docs/integration/


Running Tests

# Python (317 unit tests)
pip install -r requirements.txt
python -m pytest test_ward.py -m "not integration" -v

# Rust (40 tests)
cd ward && cargo test

# TypeScript (45 tests)
cd sdk/typescript && npm install && npm test

# Lint
ruff check ward/ --select=E,F,W,I --ignore=E501

Community


License

The Ward Protocol specification and SDK are MIT licensed.
The hosted API at api.wardprotocol.org is subject to commercial terms.
Ward Protocol is protocol software — not an insurance product, financial instrument, or regulated entity.

See wardprotocol.org/terms


ward_signed = False — always.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ward_protocol-0.2.6.tar.gz (58.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ward_protocol-0.2.6-py3-none-any.whl (78.6 kB view details)

Uploaded Python 3

File details

Details for the file ward_protocol-0.2.6.tar.gz.

File metadata

  • Download URL: ward_protocol-0.2.6.tar.gz
  • Upload date:
  • Size: 58.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for ward_protocol-0.2.6.tar.gz
Algorithm Hash digest
SHA256 1b812523e012df425ed1988b54fd7f911d243cba41f30a0257d24e5492453ad1
MD5 acd0e4b606b078126f2eaebb924327e3
BLAKE2b-256 a3ba37e824814f43006d219cf4c47f7444c8c7d0059c100c59f4842ef567d34a

See more details on using hashes here.

File details

Details for the file ward_protocol-0.2.6-py3-none-any.whl.

File metadata

  • Download URL: ward_protocol-0.2.6-py3-none-any.whl
  • Upload date:
  • Size: 78.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for ward_protocol-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 0872e4807d3baaf98ce4beefcd943f112d339ba39c343a9b44e774ebebda4fd4
MD5 d5288fabfb94797ea59921af2686bd66
BLAKE2b-256 67f02c710584d0e361f7ea6628ca8980a3253af7f64e20869714b8f57290e0e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page