DustBalanceCalculator
Domain logic for calculating time-based dust balance.
Separation of Concerns:
DustTokenEntity: Dumb data container (Data layer)
DustBalanceCalculator: Business logic (Domain layer)
DustRepository: Orchestration (Data layer)
Why separate class? Follows Clean Architecture - keep business logic out of entities. Makes logic reusable and testable in isolation.
Formula (from midnight-ledger spec):
Phase 1 (Generation): value grows from initialValue to capacity
elapsed = (currentTimeMillis - creationTimeMillis) / 1000 (to seconds)
generated = elapsed * generationRatePerSecond
current = initialValue + generated
capped = min(current, dustCapacitySpecks)
Usage:
val calculator = DustBalanceCalculator()
val currentValue = calculator.calculateCurrentValue(
token = dustToken,
currentTimeMillis = System.currentTimeMillis()
)Functions
Calculate current dust value for a token at a specific time.
Calculate time remaining until token reaches capacity.
Calculate total balance from multiple tokens.
Check if token has reached maximum capacity.