diff --git a/packages/state-machine/src/__tests__/machine.test.ts b/packages/state-machine/src/__tests__/machine.test.ts index 0d59d12..4d50ad2 100644 --- a/packages/state-machine/src/__tests__/machine.test.ts +++ b/packages/state-machine/src/__tests__/machine.test.ts @@ -153,7 +153,9 @@ describe('ATM State Machine', () => { }) it('should calculate sats amount from fiat with fee', async () => { - const machine = createATMMachine(mockServices) + // Fee fractions default to 0 post-aiolabs/lamassu-next#57; pass + // explicit values to exercise the cash-out fee math. + const machine = createATMMachine(mockServices, { cashOutFeeFraction: 0.0777 }) const actor = createActor(machine) actor.start() diff --git a/packages/state-machine/src/machine.ts b/packages/state-machine/src/machine.ts index b7dbce1..fc87fca 100644 --- a/packages/state-machine/src/machine.ts +++ b/packages/state-machine/src/machine.ts @@ -18,9 +18,15 @@ import { /** * Create the ATM state machine with injected services */ +export interface ATMMachineOptions { + currency?: string + cashInFeeFraction?: number + cashOutFeeFraction?: number +} + export function createATMMachine( services: Partial = {}, - options?: { currency?: string; cashInFeeFraction?: number; cashOutFeeFraction?: number } + options?: ATMMachineOptions ) { return setup({ types: { diff --git a/packages/state-machine/src/types.ts b/packages/state-machine/src/types.ts index 2fc6fde..b99c78b 100644 --- a/packages/state-machine/src/types.ts +++ b/packages/state-machine/src/types.ts @@ -163,9 +163,13 @@ export const initialContext: ATMContext = { satsAmount: 0, currency: 'USD', exchangeRate: 0, - feeFraction: 0.0333, - cashInFeeFraction: 0.0333, - cashOutFeeFraction: 0.0777, + // Zero defaults — operator's Nostr-pushed fee config is the source of + // truth (aiolabs/lamassu-next#57). The atm-store gates production boot + // on a persisted config existing; no transaction reaches this context + // until the operator's publish has been received. + feeFraction: 0, + cashInFeeFraction: 0, + cashOutFeeFraction: 0, availableBalance: 0, invoice: null, clinkOffer: null,