Vauban Docs
Architecture

Rewards Architecture

Rewards Architecture

All staking rewards on Starknet are paid in STRK, regardless of which asset is staked.

Reward Flow

User stakes wBTC --> VaubanManager --> BTC Pool
                           |
                    Rewards = STRK (not wBTC)
                           |
    Claim --> User receives STRK
    Restake --> STRK goes to STRK pool (not back to BTC pool)

Product Types

ProductReward TypeCompound Behavior
vaSTRKAuto (exchange rate increases)Automatic
vaBTCSTRK rewardsManual claim or restake
Native STRKSTRKClaim or restake
Native BTCSTRKClaim or restake to STRK pool

Fee Structure

ActionFeeRationale
Claim rewards5%Protocol revenue
Restake / compound0%Incentivize compounding
Vault compound (caller)0.1% incentiveReward compound callers

Reward Distribution (Synthetix Pattern)

The contract uses the Synthetix reward-per-token pattern (V2.8) for accurate pro-rata distribution:

reward_per_token = stored_reward_per_token + (new_rewards * 1e18 / total_staked)
user_earned = user_staked * (reward_per_token - user_paid_per_token) / 1e18

This ensures fair distribution even with frequent stake/unstake operations.

Critical: USD Calculation

When displaying rewards in USD, always multiply by STRK price, not the staked asset's price:

// CORRECT
rewardsUSD = rewards * strkPrice;

// WRONG -- would show BTC price for STRK rewards
rewardsUSD = rewards * assetPrice;