Skip to content

sTARE

ERC-4626 savings vault over TARE. Depositors receive sTARE shares; share price rises when engine surplus is distributed — no rebasing.

Source: TARE-Stablecoin/src/stare.vy (Vyper 0.4.3)

Sepolia deployment: 0xCc7A41B795b433d41481980b9c5b84e34541107daddress book

Concept guide: sTARE protocol page

Implementation overview

  • Thin snekmate wrapper — all share math in audited erc4626 module; no custom @external functions.
  • Yield source — TARE transferred in by TareEngine.distribute_to_savings and via SurplusSplitter senior slice.
  • totalAssets()TARE.balanceOf(self); NAV rises only on inbound TARE transfers.

Init

@deploy
def __init__(tare_address: address):
    erc4626.__init__(
        NAME,           # "Savings TARE"
        SYMBOL,         # "sTARE"
        erc4626.IERC20(tare_address),
        DECIMALS_OFFSET,  # 0
        NAME,
        EIP_712_VERSION,
    )
Param Description
tare_address TARE ERC-20 used as vault underlying

Deploy script seeds dead shares for inflation-attack mitigation (script/deploy_stare.py).

Trust model

Property Behavior
Yield Share price up only when TARE arrives — stability fees → engine surplus → distribute_to_savings / SurplusSplitter
Bad debt Not first-loss capital; engine never skims below surplus_buffer_target
Admin mint None — no custom admin on wrapper
Rebasing No — ERC-4626 share appreciation only
Collateral claim Savers have no claim on CDP collateral

Protected wrapper

NatSpec: sTARE is a protected yield wrapper. At worst NAV stalls when no fees accrue; savers are not diluted to cover insolvent positions.

Yield flow

flowchart LR
    Fees[Stability fees] --> Surplus[Engine surplus]
    Surplus --> Dist[distribute_to_savings]
    SS[SurplusSplitter] --> sTARE[sTARE vault]
    Dist --> sTARE
    sTARE --> Shares[Share price rises]

Engine wiring: owner calls set_savings_vault to point distributions at this contract.

Standard ERC-4626 surface

Full interface re-exported via exports: erc4626.__interface__:

  • deposit / mint / withdraw / redeem
  • convertToAssets / convertToShares / previewDeposit / etc.
  • asset() → TARE address
  • ERC-20 share token + EIP-2612 permit

For per-function ERC-4626 docs see snekmate erc4626.