feat: wallet operations engine and encrypted storage with tests

This commit is contained in:
2026-08-19 21:06:17 +02:00
parent 6f966d5a2d
commit 1c9e7165e4
19 changed files with 2698 additions and 7 deletions
+21
View File
@@ -0,0 +1,21 @@
// The protocol layer speaks msat everywhere (LUD-25 amounts, kit fee math);
// humans think in sats. These helpers are the only place the two meet.
export const MSAT_PER_SAT = 1000
export const msatToSats = (msat: number): number => msat / MSAT_PER_SAT
export const satsToMsat = (sats: number): number =>
Math.round(sats * MSAT_PER_SAT)
// rounds up to the next whole sat - for an msat amount about to be
// requested as an invoice, where sub-sat precision (e.g. from a mint fee's
// percentage cut, see grossUpForMintFee) isn't reliably payable
export const ceilMsatToSat = (msat: number): number =>
Math.ceil(msat / MSAT_PER_SAT) * MSAT_PER_SAT
// rounds down to the nearest whole sat - for a fee-adjusted amount shown
// as an upper bound: rounding up there would advertise a note value that
// isn't actually reachable
export const floorMsatToSat = (msat: number): number =>
Math.floor(msat / MSAT_PER_SAT) * MSAT_PER_SAT