How many wrappers are active at any given time?
YieldGuard doesn’t fix a hard cap. The number is dynamic and depends on (1) which tokenised T-bill products the core team has whitelisted in the `StrategyRouter`, and (2) which of those wrappers are actually funded after the daily yield-based allocation. The metrics fall into three buckets:
| Metric | What it counts | Current value (Jul 2025) | Where to see it |
|---|---|---|---|
numWrappers | ERC-20 contracts in StrategyRouter.approvedWrappers[] | 2 (Sepolia MVP) | strategyRouter.listWrappers() or dashboard "Issuer split" |
numIssuers | Distinct legal issuers behind those wrappers | 2 | Aggregated on frontend |
Market Universe | Live U.S. T-bill wrappers YieldGuard could whitelist | 5-7 credible products | See snapshot below |
The Broader Wrapper Universe
The MVP on Sepolia whitelists mock versions of TBILL (OpenEden) and wSTBT (Matrixdock) because they expose an on-chain NAV getter and Chainlink Proof-of-Reserve feed. Adding another wrapper is a simple multisig call. Below are other well-capitalised wrappers that could be whitelisted next:
| Wrapper (Ticker) | Manager / Issuer | Notes |
|---|---|---|
| TBILL | OpenEden | BVI-regulated vault; mint/redeem 1 USD : 1 TBILL. |
| STBT / wSTBT | Matrixdock | Rebasing token + non-rebasing wrapper. |
| bIB01 | Backed Finance | ERC-20 tracker of BlackRock’s 0-1 yr Treasury ETF. |
| OUSG | Ondo Finance | Note for qualified purchasers backed by T-Bills & MMFs. |
| USTB | Superstate | 40-Act–style tokenised fund holding short-duration Treasuries. |
Roadmap
We plan to add Backed’s bIB01 in Q1 2026, followed by Ondo’s OUSG and Superstate’s USTB once their PoR feeds are robust. The practical limit is gas cost, which suggests an upper bound of 10-15 wrappers before rebalancing becomes inefficient.
How Deposits Are Distributed
Each individual deposit is "bundled" into one wrapper, not all wrappers at once. This keeps the per-deposit gas cost low and avoids complex splitting logic. Here’s a phase-by-phase breakdown of what happens when an investor calls `deposit()`:
| Phase | On-Chain Action | Practical Effect |
|---|---|---|
| 1. Vault Receives USDC | `AggregatorVault.deposit()` pulls the user’s USDC and mints them vault shares. | The user now holds YieldGuard-shares; underlying cash is still in the vault. |
| 2. Single-Shot Allocation | In the same transaction, `StrategyRouter.allocate(amount)` picks the highest-yield wrapper with available capacity and pushes the entire deposit into it. | Exactly one wrapper is hit per deposit call. |
| 3. Cap Test | If the deposit would breach the wrapper’s 60% issuer ceiling, the router skips it and sends the whole amount to the next one. (Partial “split” fills are not implemented yet.) | Early deposits fall into the 5% APY TBILL until its cap is hit; later deposits go 100% into the 4.9% wSTBT. |
| 4. Daily Rebalance | A keeper runs `rebalance()` every 24h on the aggregate balances. If a high-yield wrapper has capacity, funds are migrated in bulk. | Over time the system equalises yields across all investors without ever looping over individual wallets. |
Roadmap Note: A "partial-fill" feature that would pro-rata split a single large deposit across wrappers the moment a cap is crossed is planned for a future version (v0.2). Until then, one-wrapper-per-deposit is the intended behaviour.
Why Deposit Timing Still Matters
The vault's operating cost scales with the number of wrappers, not investors. However, the order in which deposits arrive can still affect individual allocations during periods of high demand.
- Transactions are Sequential: Even if 100 investors click "Deposit" at the same time, the blockchain processes their transactions one by one.
- State Changes After Each Deposit: Each successful deposit alters the vault's state (e.g., the amount allocated to a specific wrapper).
- First-Come, First-Served for Caps: When a high-yield wrapper nears its 60% concentration cap, the transaction that fills the remaining capacity gets the last spot. The very next transaction, even moments later, will be routed to the second-best wrapper.
This "arrival-order" effect is most relevant when a wrapper's cap is a constraint. The daily rebalancing process works to smooth out these minor differences over time for all investors.
How Rebalancing Creates Fairness Over Time
While the initial deposit allocation is first-come, first-served, the nightly rebalancing process ensures fairness and yield optimization for all investors over time. This process is collective and operates on the vault's aggregate holdings.
- One Bulk Operation: The rebalancer does not loop through individual investor accounts. It looks at the total amount in each wrapper (e.g., `$15M` in TBILL, `$10M` in wSTBT) and moves funds in one bulk transaction.
- Triggered by Spreads: If a yield spread of ≥ 5 basis points opens up and the higher-yield wrapper has capacity, the rebalancer will migrate funds to capture that improved return for the entire vault.
- Passive Benefit: Individual investors don't need to do anything. They benefit passively as the Net Asset Value (NAV) of their
yTBillshares increases from the optimized yield of the underlying assets.
Switching Tolls
To cover the costs of rebalancing (gas, slippage, wrapper fees) and deter excessive trading, a dynamic switching toll is applied. This toll is capped based on TVL (from 3 bps down to 0.5 bps) and is often absorbed by the vault's operating allowance, making most switches free for the investor. Any applied toll is rebated to remaining holders.
The Bottom Line
The protocol only switches wrappers when the expected net benefit clearly outweighs all associated costs, ensuring that every rebalance adds value to the vault.