Ward Protocol
ward_signed = False — always.Ward constructs unsigned transactions. Institutions sign. The chain settles. Ward is never a counterparty, never a custodian, never a signatory.
Overview
Ward Protocol defines deterministic default resolution for institutional lending vaults on the XRP Ledger (XLS-66 amendment in validator voting). The validator specifies nine checks sourced from authoritative ledger state — no discretionary Ward approval and no Ward signature. The hosted Altnet surface currently proves policy checks F01-F03. Full XLS-66 lifecycle validation is the next XRPL Devnet integration milestone.
wardprotocol.org | wardprotocol.org/assurance | wardprotocol.org/demo
Live Status
| Metric | Value |
|---|---|
| SDK Version | PyPI/npm badges above |
| Hosted API | api.wardprotocol.org — live |
| Test Counts | Latest CI + src/lib/wardMetrics.ts |
| Critical Path Coverage | src/lib/wardMetrics.ts |
| Documented Invariants | 32 |
| TLA+ Model Checks | INV-007 and INV-016 in CI |
| Dependency Security | CI audit and secret-scanning gates |
| XRPLF Standard | Discussion #474 — active |
The Nine Checks
| Step | Check |
|---|---|
| 1 | NFT existence + taxon 281 (XLS-20) |
| 2 | Policy validity — ledger close_time + 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/300s, ratio >=1.5x) |
Install
pip install ward-protocol # Python SDK
npm install @wardprotocol/sdk # TypeScript SDK
Hosted API: https://api.wardprotocol.org
Quick Start
import asyncio
from ward import WardClient, ClaimValidator
# Validate against the configured XRPL endpoint
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.ward_signed) # False — always
Integration Status
| Surface | Status | Evidence |
|---|---|---|
| XRPL Altnet | Hosted verification | F01-F03 policy evidence |
| XRPL Devnet XLS-65/66 | Next integration milestone | Full vault, loan, default, and checks 4-9 lifecycle |
| Non-XRPL modules | Source scaffolds only | Seven modules contain unimplemented lifecycle methods |
Ward's resolution model is intended to be rail-agnostic, but no non-XRPL module
is presented as a deployable integration. See docs/multichain-gaps.md.
Running Tests
# Python
pip install -r requirements.txt
python3 -m pytest tests/ -v
# Rust
cd ward && cargo test
# TypeScript
cd sdk/typescript && npm install && npm test
Assurance
Internal pre-mainnet security report, TLA+ models, and continuous scanning results: wardprotocol.org/assurance
- Automated test and coverage totals are maintained in
src/lib/wardMetrics.ts - 32 invariants are documented in
INVARIANTS.md - TLA+ CI model checks cover INV-007 and INV-016; this is not a proof of all 32 invariants
- Dependency audit, secret scanning, and signer-boundary checks run in CI
- Git history scrubbed and verified clean
- ward_signed = False enforced at 4 independent layers
Community
- Discord: discord.gg/j45hnRP3HW
- XRPLF Discussion #474: github.com/XRPLF/XRPL-Standards/discussions/474
- Website: wardprotocol.org
- X: x.com/wardprotocol
Commercial
Published SDK packages and included specifications are MIT licensed. Mainnet API, Ward-conformant certification, and enterprise support require a commercial license. See COMMERCIAL.md.
Contact: team@wardprotocol.org
License
MIT — see LICENSE file.
ward_signed = False — always.
Metadata
Release files for ward-protocol 0.2.11
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ward_protocol-0.2.11.tar.gz | 157.1 kB | Without provenance | Details for ward_protocol-0.2.11.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ward_protocol-0.2.11-py3-none-any.whl | Python 3 | none | any | Details for ward_protocol-0.2.11-py3-none-any.whl |
Total release size: 259.4 kB
Release files / ward_protocol-0.2.11.tar.gz
| Download URL | ward_protocol-0.2.11.tar.gz |
|---|---|
| Size | 157.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3c11b504a2181c2fb675733c18dc5c20c457ef7fe457a47bd5a342a7deefc6d1
|
|
BLAKE2b-256 checksum How to use checksums |
1328a5fabc425ec8e2d373611dc5aa79205ebc29ad0d29dc7d39ae107848848a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.4
|
Release files / ward_protocol-0.2.11-py3-none-any.whl
| Download URL | ward_protocol-0.2.11-py3-none-any.whl |
|---|---|
| Size | 102.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1c0bce9eaedcf61686066cbc96408c76ee5edc4844d7499f94e4bdc19dc3766c
|
|
BLAKE2b-256 checksum How to use checksums |
3441bebaacb8f8c78a42bdc7644d8c648ed8fa5c1eed0de6a8929185ade53fd8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.4
|
Security for ward-protocol 0.2.11
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.