Week 30 dev update at https://t.co/EQMge9ENAj
168 commits, 18 PRs
One theme: reducing what can go wrong
- Staking canister audited 👀
Every numbered audit finding was closed, concurrency bugs, oracle-await hazards, funds-exit during shutdown, distribution caps, fail-closed valuation. Regression tests cover all of it.
- Surface deliberately shrunk
After the audit, the canister was trimmed for phase-1: reward-pool code removed, irreversible shutdown dropped (pause is now the only blocking state), scheduler collapsed to one interval. ICRC-10/28 added with https://t.co/B91MazthRH as trusted origin. Less code, less that can go wrong.
- Stake/Unstake is now Lock/Unlock
The wording reflects what the canister actually does in phase 1. A new flag gates the entire locking UI, togglable without a deploy.
- Staking UI off canister calls
Positions, stakers and pagination now come from REST. Server-side pagination, sortable columns, cleaner data handling.
- SQL injection path closed
Caller principal is now escaped before interpolation in the staking position query. Seven high npm audit advisories cleared. 2FA step-up extracted into a single reusable hook, closing a gap in the new inline staking form.
- SDK v1.6.0 shipped
Popup language option now available to integrators. Dormant Phantom BTC detector added, ready to flip when Phantom lands support.
Building in public, one week at a time