diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/payments.js | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/lib/payments.js b/lib/payments.js index aaf39210..ff6e9ba5 100644 --- a/lib/payments.js +++ b/lib/payments.js @@ -26,13 +26,16 @@ export let debit = async ( id = v4() ) => { let ref, tip; + let { id: uid, currency, username } = user; + + let rate = store.rates[currency]; + let invoice = await g(`invoice:${hash}`); if (invoice) { ref = invoice.uid; + if (Math.abs(invoice.rate / rate - 1) < 0.01) rate = invoice.rate; } - let { id: uid, currency, username } = user; - amount = parseInt(amount); if (!amount || amount < 0) fail("Amount must be greater than zero"); @@ -46,7 +49,15 @@ export let debit = async ( let covered = Math.min(credit, ourfee) || 0; ourfee -= covered; - l("debiting", user.username, balance, amount, fee, ourfee, amount + fee + ourfee); + l( + "debiting", + user.username, + balance, + amount, + fee, + ourfee, + amount + fee + ourfee + ); if (balance < amount + fee + ourfee) fail("Insufficient funds"); await db .multi() @@ -69,7 +80,7 @@ export let debit = async ( memo, uid, confirmed: true, - rate: store.rates[currency], + rate, currency, type, ref, @@ -96,11 +107,14 @@ export let credit = async (hash, amount, memo, ref, type = types.internal) => { let { id: uid, currency, username } = user; + let rate = store.rates[currency]; + if (Math.abs(invoice.rate / rate - 1) < 0.01) rate = invoice.rate; + let p = { hash, amount, uid, - rate: store.rates[currency], + rate, currency, memo, ref, @@ -152,6 +166,7 @@ export let confirm = async (address, txid, vout) => { if (!p) return db.sAdd("missed", id); p.confirmed = true; + emit(p.uid, "payment", p); await db .multi() |
