Ward Protocol — Interactive

Demo & Checklist

Verify your integration satisfies all 9 Ward Protocol claim validation steps. All state must be sourced from the XRPL ledger — no off-chain inputs trusted.

9-Step Claim Validation

All state sourced from XRPL ledger — no off-chain inputs trusted.

1
NFT Existence & Taxon
Policy NFT in claimant wallet with taxon = 281 (WARD_POLICY_TAXON)
2
Policy Expiry
Expiry checked against XRPL ledger close_time — not server clock
3
Vault Address Binding
NFT metadata vault address matches reported defaulted_vault
4
On-Chain Default Flag
LedgerEntry carries LSF_LOAN_DEFAULT (0x00010000)
5
Positive Vault Loss
TotalValueOutstanding from defaulted loan > 0 drops
6
Pool Coverage Breach
Usable pool balance = balance − XRPL reserve ≥ 0
7
Replay Protection
NFT still live on-chain; burn-on-settlement prevents replays
8
Claimant Holds NFT
NFT found in claimant_address wallet via AccountNFTs
9
Pool Solvency & Rate Limit
Usable ≥ payout, ratio ≥ 1.5×, ≤ 3 claims/NFT per 300 s
0/ 9
Not Started
NOT CONFORMANT

Core Invariants

  • ward_signed = FalseWard never holds signing keys
  • Events are hintsLedger is always truth
  • 3-ledger confirmationRequired before VerifiedDefault
  • TF_BURNABLE onlyTF_TRANSFERABLE deliberately absent
  • No off-chain trustZero oracle dependence
Python SDK — v0.2.4

Integration Flow Examples

Five flows from vault registration to escrow settlement. ward_signed = False throughout.

F·01 — Vault Registration

Register an XLS-66 vault. Ward returns an unsigned NFTokenMint; institution signs.

from ward import WardClient
from xrpl.wallet import Wallet

client = WardClient()
wallet = Wallet.from_seed(seed)   # institution holds key

# Ward builds unsigned tx — ward_signed = False
unsigned_tx = await client.register_vault(
    institution_address=wallet.classic_address,
    collateral_currency="XRP",
    min_collateral_ratio=1.5,
)

assert "TxnSignature" not in unsigned_tx
# Institution signs and submits
result = await submit_and_wait(unsigned_tx, xrpl_client, wallet)