T-Bill Anchored DeFi
A reference basket of DeFi vaults whose terminal-underlying exposure is a tokenized T-bill or T-bill-backed stable, with an off-chain backing share of at least 80%. Every constituent is a vault (not a raw asset) so depositors get on-chain composability; the underlying-backing rule keeps the basket anchored to short-duration cash-equivalent collateral rather than open DeFi credit risk. Universe is currently small (regulated RWA-direct DeFi markets are an emerging segment); v1.2.1 adds a max_per_protocol_pct=45 selector clamp to provide a 5pp structural buffer before the 50% hard issuer cap (Ethena Labs currently holds ~47% of uncapped score weight via aEthUSDtb and steakUSDTBethena).
Summary
A reference basket of DeFi vaults whose terminal-underlying exposure is a tokenized T-bill or T-bill-backed stable, with an off-chain backing share of at least 80%. Every constituent is a vault (not a raw asset) so depositors get on-chain composability; the underlying-backing rule keeps the basket anchored to short-duration cash-equivalent collateral rather than open DeFi credit risk. Universe is currently small (regulated RWA-direct DeFi markets are an emerging segment); v1.2.1 adds a max_per_protocol_pct=45 selector clamp to provide a 5pp structural buffer before the 50% hard issuer cap (Ethena Labs currently holds ~47% of uncapped score weight via aEthUSDtb and steakUSDTBethena).
Constituent Type
Vault (each constituent is a DeFi vault holding a qualifying terminal-underlying asset)
Minimum constituents: 2.
Eligibility Rule
A vault is eligible when its Philidor risk tier is Prime or Core, its review_status is "reviewed", its terminal_underlying.category is tokenized_treasury or t_bill_backed_stable, and the terminal_underlying.backing_offchain_pct is at least 80%. Vaults whose terminal exposure is open DeFi credit, LSTs, LRTs, or synthetic stables are excluded.
Structured form (the rebalancer reads this exact shape):
{
"asset_category": [],
"review_status": ["reviewed"],
"terminal_underlying_category": ["tokenized_treasury", "t_bill_backed_stable"],
"terminal_underlying_min_backing_offchain_pct": 80,
"tier": ["Prime", "Core"]
}Weighting Rule
Each constituent receives a raw weight proportional to its risk score above 6.0; raw weights are then normalised so the basket sums to 100%. The pivot is set lower than Basket A's (7.0) because the on-chain T-bill-anchored DeFi universe is currently concentrated in newer institutional markets (e.g. Aave Horizon) which haven't yet built the multi-year track record that justifies a 7.0 floor.
Formula:
w_i ∝ (risk_score_i − 6.0); normalize so Σ w_i = 1.0Worked Example
| Constituent | Risk Score | Raw Weight (score − pivot) | Normalised Weight |
|---|---|---|---|
| Constituent A | 9.00 | 3.00 | 29.27% |
| Constituent B | 8.50 | 2.50 | 24.39% |
| Constituent C | 8.00 | 2.00 | 19.51% |
| Constituent D | 7.50 | 1.50 | 14.63% |
| Constituent E | 7.25 | 1.25 | 12.20% |
| Sum | — | 10.25 | 100.00% |
In this illustrative case every normalised weight is below the 50% single-name cap and above the 2% floor, so no cap-redistribution is needed. When a constituent exceeds a cap, the rebalancer iteratively trims it to the cap and redistributes the excess across the remaining names in proportion to their current weights, repeating until all caps and the floor are simultaneously satisfied (within 50 iterations — see invariant I5).
Caps
| Cap | Value | Meaning |
|---|---|---|
| Single-name | 50% | No constituent may exceed this share of the basket. |
| Issuer | 50% | Cross-chain deduplicated; aggregate exposure to one issuer is bounded. |
| Floor | 2% | Any constituent below the floor is dropped before final normalisation. |
Refresh Schedule
Rebalances run on a calendar schedule (the last business day of March, June, September, and December at 16:00 UTC) and additionally fire when any constituent crosses a tier boundary, moves by ≥ 0.5 in risk score, when a new eligible name enters the universe, or when the methodology version itself changes. Rating-triggered rebalances are throttled to at most one every 14 days; calendar rebalances always fire and are not throttled.
Structured form (the rebalancer reads this exact shape):
{
"calendar_day": "last_business_day",
"calendar_months": [3, 6, 9, 12],
"calendar_time_utc": "16:00",
"rating_move_throttle_days": 14,
"rating_move_triggers": [
"tier_change",
"score_delta_ge_0_5",
"new_eligible_entrant",
"methodology_version_change"
]
}Halt Conditions
The rebalancer enforces the following halt-closed invariants. When any of these fails the rebalance aborts and the prior published version is preserved; alerts page the on-call.
| ID | Description |
|---|---|
| I1 | Every constituent must have a non-null issuer_id and risk_score and review_status = "reviewed". Otherwise the constituent is rejected. |
| I2 | The eligible set must contain at least min_constituents names. If it falls below, the rebalance aborts and the prior published version is preserved. |
| I3 | Eligible-set turnover versus the prior version must not exceed 50%. A higher turnover triggers a "universe shock" abort with the prior version preserved. |
| I4 | The indexer must have a successful run within the last 6 hours. Stale ratings abort the rebalance and the prior version is preserved. |
| I5 | Cap-redistribution must converge within 50 iterations. Otherwise the rebalance aborts; equal-weight fallback only runs with an explicit operator flag. |
| I6 | The published weights must sum to 1.0 within 1e-6. The database CHECK constraint refuses to commit a version row that violates this. |
| I7 | Calendar and rating-move rebalances are mutually exclusive per basket via a Postgres advisory lock; a second concurrent rebalance exits cleanly. |
| I8 | Every published version is content-hash signed; the current_version_id pointer is moved atomically only after constituents and signature are written. |
| I9 | Every version is reproducible from frozen inputs stored in basket_version_inputs; CI replays the latest version and asserts byte-equality of canonical JSON. |
| I10 | The methodology doc_url must resolve with HTTP 200 before publish. A missing or 404 doc aborts the rebalance. |
Version
Current methodology version: 1.2.1
Methodology document URL: https://docs.philidor.io/docs/methodology/baskets/tbill-anchored-defi
Change Log
- 1.2.1 — Initial published methodology.
RWA T-Bill Conservative
A reference basket of pure real-world-asset and tokenized T-bill assets that have cleared Philidor's Prime/Core review with explicit issuer and reserve provenance. The basket targets a conservative liquidity-and-credit profile: every name is an asset (not a vault) whose primary failure mode is bounded by the issuer's regulated reserves, and weights tilt toward the highest Philidor risk scores subject to single-name and issuer caps.
USDC Core DeFi Vaults
A reference basket of pure-USDC DeFi lending vaults at Philidor's Core risk tier (5 ≤ risk_score < 8). v2.1.1 keeps the v2.0 diversification rules (≤ 10 names across ≥ 2 protocols with ≤ 60% per-protocol seats, 40% curator cap, $5M vault TVL floor, 6-month protocol-age floor), the v2.1 asymmetric requalification (downward score moves ≥ 0.3 trigger a rebalance, upward drift < 1.0 is suppressed), and adds an ERC-4626-compatibility filter that excludes SparkLend money-market positions (`SparkLendEthereum`) for the same reason as the Prime basket — SparkLend aTokens are not natively ERC-4626 and no Philidor-endorsed 4626 wrapper path is currently maintained. Constituents are auto-demoted on incident-clamp, hard-fail-flag, or sustained downward drift before a tier-crossing event materializes.