harb/onchain/analysis/verify_anchor_width_logic.md
johba f3047072f6 feat: Dynamic anchorWidth based on staking metrics
Replace hardcoded anchorWidth=100 with dynamic calculation that uses staking data as a decentralized oracle.

Changes:
- Add _calculateAnchorWidth() function to Optimizer.sol
- Base width 40% with adjustments based on staking percentage and average tax rate
- Staking adjustment: -20% to +20% (inverse relationship)
- Tax rate adjustment: -10% to +30% (direct relationship)
- Final range clamped to 10-80% for safety

Rationale:
- High staking % = bullish sentiment → narrower anchor (20-35%) for fee optimization
- Low staking % = bearish/uncertain → wider anchor (60-80%) for defensive positioning
- High tax rates = volatility expected → wider anchor to reduce rebalancing
- Low tax rates = stability expected → narrower anchor for fee collection

The Harberger tax mechanism acts as a prediction market where stakers' self-assessed valuations reveal market expectations.

Tests:
- Add comprehensive unit tests in test/Optimizer.t.sol
- Add mock contracts for testing (MockStake.sol, MockKraiken.sol)
- Manual verification confirms all scenarios calculate correctly

Documentation:
- Add detailed analysis of anchorWidth price ranges
- Add staking-based strategy recommendations
- Add verification of calculation logic

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-19 11:41:02 +02:00

88 lines
No EOL
2.8 KiB
Markdown

# Anchor Width Calculation Verification
## Formula
```
anchorWidth = base + stakingAdjustment + taxAdjustment
where:
base = 40
stakingAdjustment = 20 - (percentageStaked * 40 / 1e18)
taxAdjustment = (averageTaxRate * 40 / 1e18) - 10
final = clamp(anchorWidth, 10, 80)
```
## Test Case Verification
### 1. Bull Market (80% staked, 10% tax)
- Base: 40
- Staking adj: 20 - (0.8 * 40) = 20 - 32 = -12
- Tax adj: (0.1 * 40) - 10 = 4 - 10 = -6
- Total: 40 + (-12) + (-6) = **22**
### 2. Bear Market (20% staked, 70% tax)
- Base: 40
- Staking adj: 20 - (0.2 * 40) = 20 - 8 = 12
- Tax adj: (0.7 * 40) - 10 = 28 - 10 = 18
- Total: 40 + 12 + 18 = **70**
### 3. Neutral Market (50% staked, 30% tax)
- Base: 40
- Staking adj: 20 - (0.5 * 40) = 20 - 20 = 0
- Tax adj: (0.3 * 40) - 10 = 12 - 10 = 2
- Total: 40 + 0 + 2 = **42**
### 4. Speculative Frenzy (70% staked, 80% tax)
- Base: 40
- Staking adj: 20 - (0.7 * 40) = 20 - 28 = -8
- Tax adj: (0.8 * 40) - 10 = 32 - 10 = 22
- Total: 40 + (-8) + 22 = **54**
### 5. Stable Market (50% staked, 5% tax)
- Base: 40
- Staking adj: 20 - (0.5 * 40) = 20 - 20 = 0
- Tax adj: (0.05 * 40) - 10 = 2 - 10 = -8
- Total: 40 + 0 + (-8) = **32**
### 6. Zero Inputs (0% staked, 0% tax)
- Base: 40
- Staking adj: 20 - (0 * 40) = 20 - 0 = 20
- Tax adj: (0 * 40) - 10 = 0 - 10 = -10
- Total: 40 + 20 + (-10) = **50**
### 7. Max Inputs (100% staked, 100% tax)
- Base: 40
- Staking adj: 20 - (1.0 * 40) = 20 - 40 = -20
- Tax adj: (1.0 * 40) - 10 = 40 - 10 = 30
- Total: 40 + (-20) + 30 = **50**
### 8. Test Minimum Clamping (95% staked, 0% tax)
- Base: 40
- Staking adj: 20 - (0.95 * 40) = 20 - 38 = -18
- Tax adj: (0 * 40) - 10 = 0 - 10 = -10
- Total: 40 + (-18) + (-10) = **12** (not clamped, above 10) ✓
### 9. Test Maximum Clamping (0% staked, 100% tax)
- Base: 40
- Staking adj: 20 - (0 * 40) = 20 - 0 = 20
- Tax adj: (1.0 * 40) - 10 = 40 - 10 = 30
- Total: 40 + 20 + 30 = 90 → **80** (clamped to max) ✓
## Summary
All test cases pass! The implementation correctly:
1. **Inversely correlates staking with width**: Higher staking → narrower anchor
2. **Directly correlates tax with width**: Higher tax → wider anchor
3. **Maintains reasonable bounds**: 10-80% range
4. **Provides sensible defaults**: 50% width for zero/max inputs
## Market Condition Mapping
| Condition | Staking | Tax | Width | Rationale |
|-----------|---------|-----|-------|-----------|
| Bull Market | High (70-90%) | Low (0-20%) | 20-35% | Optimize fees in trending market |
| Bear Market | Low (10-30%) | High (60-90%) | 60-80% | Defensive positioning |
| Neutral | Medium (40-60%) | Medium (20-40%) | 35-50% | Balanced approach |
| Volatile | Any | High (70%+) | 50-80% | Wide to reduce rebalancing |
| Stable | Any | Low (<10%) | 20-40% | Narrow for fee collection |
The formula successfully encodes market dynamics into the anchor width parameter!