Contracts: XP accrual and uncapped level progression
Context
Onchain XP and uncapped level progression. Parent epic: #238 (closed).
Relevant files
contracts/src/TimeArena.solorcontracts/src/PlayerXp.sol- Frontend mirror: new
arenaXpMath.ts
Acceptance criteria
- XP per buy = linear map min CHARM→1, max CHARM→10 (integer rounding documented)
- Level thresholds: L1=20 XP; for level L→L+1 need
min(20 + (L-1)*5, 100)XP - Uncapped level; expose
xp,level,xpToNextLevelviews - Emit
XpGained(buyer, amount, newLevel?)
Verification checklist
- Forge: table-test levels 1–10 and level 50+ (100 XP/level flat)
- TS unit tests mirror onchain formula