diff options
| author | Adam Soltys <[email protected]> | 2024-12-02 22:50:11 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2024-12-02 22:50:11 -0800 |
| commit | 5a8c49ad031dcb175ff4a0dec71c818eeab0b491 (patch) | |
| tree | 9e78528c72256700df1b966519ec200cb8b86f05 /lib | |
| parent | 2484b61e149273d788170c4d64e679b5b0f8155d (diff) | |
| download | coinos-server-5a8c49ad031dcb175ff4a0dec71c818eeab0b491.tar.gz coinos-server-5a8c49ad031dcb175ff4a0dec71c818eeab0b491.zip | |
detect duplicate keysend
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/nwc.ts | 5 | ||||
| -rw-r--r-- | lib/payments.ts | 8 |
2 files changed, 9 insertions, 4 deletions
@@ -56,7 +56,7 @@ export default () => { const user = await g(`user:${uid}`); try { - const result = await handle(method, params, user); + const result = await handle(method, params, user, ev); const payload = JSON.stringify({ result_type: method, ...result }); content = await nip04.encrypt(sk, pubkey, payload); @@ -88,7 +88,7 @@ export default () => { }); }; -const handle = (method, params, user) => +const handle = (method, params, user, ev) => ({ async pay_invoice() { const { invoice: pr } = params; @@ -145,6 +145,7 @@ const handle = (method, params, user) => const { amount, pubkey } = params; const { payment_hash } = await sendKeysend({ + hash: ev.id, amount, pubkey, user, diff --git a/lib/payments.ts b/lib/payments.ts index 7f0ab968..76a7d1fa 100644 --- a/lib/payments.ts +++ b/lib/payments.ts @@ -416,6 +416,7 @@ export const sendOnchain = async (params) => { }; export const sendKeysend = async ({ + hash, amount, pubkey, fee = undefined, @@ -424,8 +425,11 @@ export const sendKeysend = async ({ }) => { fee = Math.max(parseInt(fee || amount * 0.005), 5); - const p = await debit({ - hash: v4(), + let p = await g(`payment:${hash}`); + if (p) fail("duplicate keysend"); + + p = await debit({ + hash, amount, fee, memo, |
