-
Notifications
You must be signed in to change notification settings - Fork 192
Open
Description
Context
PR #535 introduced pseudorandom position selection to prevent bias toward certain perpetuals.
Current Behavior
// protocol/x/clob/keeper/liquidations.go:165
indexOffset := k.GetPseudoRand(ctx).Intn(numPositions)
for i := 0; i < numPositions; i++ {
position := subaccount.PerpetualPositions[(i+indexOffset)%numPositions]
if !subaccountLiquidationInfo.HasPerpetualBeenLiquidatedForSubaccount(position.PerpetualId) {
return position.PerpetualId, nil
}
}- Random starting offset for position iteration
- Single position per subaccount per block
- No risk-based prioritization
Scenario
When a subaccount has multiple positions with varying risk levels:
| Position | Margin Utilization |
|---|---|
| ETH-USD | 70% |
| BTC-USD | 95% ← Critical |
| SOL-USD | 78% |
If random selection picks ETH-USD first, the critical BTC-USD position waits until the next block. During high volatility, this delay could push it from liquidatable → bankruptcy, potentially increasing insurance fund utilization.
Is this a known trade-off that was intentionally accepted for performance or fairness reasons?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels