DustBalanceCalculator

class DustBalanceCalculator @Inject constructor

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()
)

Constructors

Link copied to clipboard
@Inject
constructor()

Functions

Link copied to clipboard
fun calculateCurrentValue(token: DustTokenEntity, currentTimeMillis: Long): BigInteger

Calculate current dust value for a token at a specific time.

Link copied to clipboard
fun calculateTimeToCapacity(token: DustTokenEntity, currentTimeMillis: Long): Long

Calculate time remaining until token reaches capacity.

Link copied to clipboard
fun calculateTotalBalance(tokens: List<DustTokenEntity>, currentTimeMillis: Long): BigInteger

Calculate total balance from multiple tokens.

Link copied to clipboard
fun isAtCapacity(token: DustTokenEntity, currentTimeMillis: Long): Boolean

Check if token has reached maximum capacity.