diff options
| author | Adam Soltys <[email protected]> | 2026-02-16 08:45:37 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-02-16 08:45:37 -0800 |
| commit | 20cee249905ee6975e88089b76b2eccb4019e19a (patch) | |
| tree | b8fbe28b5423aae6fef971378ac1cf1a292bab24 | |
| parent | eedf7695d64e4c00af3d178484900c7c57087ac0 (diff) | |
| download | coinos-server-20cee249905ee6975e88089b76b2eccb4019e19a.tar.gz coinos-server-20cee249905ee6975e88089b76b2eccb4019e19a.zip | |
Prevent duplicate Ark vault accounts
Co-Authored-By: Claude Opus 4.6 <[email protected]>
| -rw-r--r-- | routes/users.ts | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/routes/users.ts b/routes/users.ts index 4435ba6f..904a5bb0 100644 --- a/routes/users.ts +++ b/routes/users.ts @@ -844,22 +844,13 @@ export default { } if (account.type === PaymentType.ark) { - const decoded = bech32m.decode(account.arkAddress, 1023); - const data = new Uint8Array(bech32m.fromWords(decoded.words)); - - const vtxoTaprootKey = data.slice(33, 65); - - const vtxoHex = Buffer.from(vtxoTaprootKey).toString("hex"); - const r = await fetch( - `http://arkd:7070/v1/indexer/vtxos?scripts=5120${vtxoHex}&spendable_only=true`, - { "content-type": "application/json" }, - ); - const { vtxos } = await r.json(); - if (!vtxos?.length) continue; - account.balance = vtxos.reduce( - (a, b) => a + Number.parseInt(b.amount), - 0, - ); + const paymentIds = await db.lRange(`${id}:payments`, 0, -1); + let sum = 0; + for (const pid of paymentIds) { + const pay = await g(`payment:${pid}`); + if (pay) sum += pay.amount; + } + account.balance = Math.max(sum, 0); } } @@ -897,6 +888,14 @@ export default { // ARK accounts don't need Bitcoin Core wallet setup if (type === "ark") { + const accountIds = await db.lRange(`${user.id}:accounts`, 0, -1); + for (const accId of accountIds) { + const acc = await g(`account:${accId}`); + if (acc?.type === "ark") { + bail(res, "You already have an Ark vault"); + return; + } + } const m = db.multi() .set(`account:${id}`, JSON.stringify(account)) .lPush(`${user.id}:accounts`, id); |
