Skip to content

[Phase 1] Upgrade price.proto float → double (blocker for multi-currency price-server) #283

Description

@islandbitcoin

Status: Phase 1 blocker (per ENG-315 currency-precision roadmap 5.A)

Reclassified 2026-04-19 from "deferred / low priority." JMD's yaml.ts workaround only covers JMD. Phase 1.C extends price-server into a multi-source aggregator for every currency Flash adds (TTD, HTG, NGN, etc.) — float32 reintroduces silent rounding errors the moment a second fiat goes through gRPC. Must land before Phase 1.C starts.

The Problem

float in protobuf = 32-bit IEEE 754 = ~7 significant digits. Rates like 157.xx (JMD) or 392.xx (NGN) × 8-decimal sat precision exceed that. Result: silent rounding errors on every conversion through the gRPC price service.

The Fix

// src/services/price/protos/price.proto

  • float price = 1;
  • double price = 1;

Apply to every numeric rate field. Regen stubs. Deploy price-server → backend → mobile in that order, in the same release window, with mobile min-supported-version bumped.

Files

src/services/price/protos/price.proto

src/services/price/index.ts

Regenerated stubs + any gRPC consumer importing them (audit before merge)

Verification

Unit test: encode rate > 7 sig digits, decode, bit-equal compare

Integration test: full gRPC round-trip preserves precision

All gRPC consumers audited and listed in PR description

24h dev burn-in before staging promotion

Out of scope

Migrating JMD off yaml.ts (Phase 1.C). RoundingPolicy module (Phase 1.B). New currencies (their own issues post-Phase-1.C).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions