Files
routstr-core/tests
Jeroen UbbinkandClaude Opus 5 dbb9df13f2 fix(pricing): keep an unusable rate out of the money math
Prices reach the node from upstream catalogs, an operator's admin edit, a
legacy database row and the BTC/USD feed. json.loads accepts the bare NaN and
Infinity literals and overflows 1e999 to inf, so any of those sources can
deliver a value that is not a price. Three guards let one through:

- The token-rate gate tested truthiness, so NaN and inf reached the token math
  and raised ValueError/OverflowError *after* the response was served. The
  streaming handlers swallow that, so the request went unbilled. A negative
  rate produced a negative charge, which settlement subtracts from the balance.
- An upstream-reported cost component was clamped with max(0.0, ...), which
  passes inf and NaN through. A non-finite component poisoned the proportional
  split in _calculate_from_usd_cost (inf / inf is NaN); the exception was
  absorbed by the broad handler around the USD path, so a request whose total
  was perfectly valid fell through to token estimation and was billed a
  fraction of what the upstream charged. Each spelling is now coerced before
  the fallback chooses between them, so a malformed first field cannot win the
  `or` and hide the usable figure beside it.
- An exchange quote that was zero, negative or non-finite was accepted as the
  node's BTC/USD price, repricing every model on the node.

Each now declines to price rather than billing a nonsensical amount.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-25 15:42:15 +02:00
..
2025-08-06 20:31:55 -03:00