<feed xmlns='http://www.w3.org/2005/Atom'>
<title>coinos-server.git/routes/payments.ts, branch staging</title>
<subtitle>coinos server — legacy coinos.io backend (Lightning, on-chain, Liquid)</subtitle>
<id>https://git.coinos.io/coinos-server.git/atom?h=staging</id>
<link rel='self' href='https://git.coinos.io/coinos-server.git/atom?h=staging'/>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/'/>
<updated>2026-05-18T06:50:16Z</updated>
<entry>
<title>don't remove orphan payment ids from user payment lists</title>
<updated>2026-05-18T06:50:16Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-05-18T06:50:16Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=7c1eefc142c951d7db5a0fa1afeae64a2fdf02fd'/>
<id>urn:sha1:7c1eefc142c951d7db5a0fa1afeae64a2fdf02fd</id>
<content type='text'>
When the underlying payment record is missing, removing the id from the
user's payments list was destructive — a transiently unavailable record
(arc fallback miss, database hiccup) would cause us to permanently drop
the pointer. Leave the orphan in place so a back-fill from an RDB backup
can restore the record under the same id later.

Co-Authored-By: Claude Opus 4.7 (1M context) &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>mirror payment records to arc + atomic /confirm lock to prevent double-credits</title>
<updated>2026-05-18T06:46:58Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-05-18T06:46:58Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=dfd31ad83d24e780523f4e76d04a76aba1fa8be1'/>
<id>urn:sha1:dfd31ad83d24e780523f4e76d04a76aba1fa8be1</id>
<content type='text'>
Apr 29 double-credit prevention, ported from master 0e368dab and adapted
to staging's hono/tigerbeetle structure. Two parallel callers of /confirm
(walletnotify, catchUp, bulk sweeps) could each read p.confirmed=false
and each run tbConfirm — doubling the pending→balance transfer.
tbConfirm itself isn't idempotent on its own, so the race materializes
as a real double-credit even with TB.

- routes/payments.ts: SET NX EX 60 lock around the confirmation block
  keyed by `confirmlock:${txid}:${vout}`. Concurrent callers short-circuit
  cleanly. Released on success and on every early-return.

- lib/payments.ts credit() + routes/payments.ts /confirm: mirror payment
  + invoice records and the `payment:&lt;txid&gt;:&lt;vout&gt;` / `payment:&lt;hash&gt;`
  pointer keys into arc as soon as they're written. gf() will then find
  the prior credit via arc fallback even if the main-db copy is wiped
  by a future data-loss event.

Co-Authored-By: Claude Opus 4.7 (1M context) &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>remove /gateway endpoint</title>
<updated>2026-05-18T06:42:28Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-05-18T06:42:28Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=ca4bdc84f1eac1859044639ffa16bac9aa8fce1b'/>
<id>urn:sha1:ca4bdc84f1eac1859044639ffa16bac9aa8fce1b</id>
<content type='text'>
Unauthenticated arbitrary db.set abuse vector. Exploited on the master
deployment to inflate user balances and override safety controls in real
time, leading to a hot-wallet drain. Route and handler both fully
removed; if a webhook-by-short-channel-id mapping is ever needed again
it must be rebuilt with auth + SCID format validation + webhook URL
validation + per-user ownership check.

Co-Authored-By: Claude Opus 4.7 (1M context) &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>verify ark amounts</title>
<updated>2026-03-22T15:41:12Z</updated>
<author>
<name>Adam Soltys</name>
<email>asoltys@gmail.com</email>
</author>
<published>2026-03-22T15:41:08Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=af568c46cb3da198ea8614d21616bac3951f3262'/>
<id>urn:sha1:af568c46cb3da198ea8614d21616bac3951f3262</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix: add account ownership checks and harden PIN validation</title>
<updated>2026-03-17T08:34:28Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-03-17T08:21:48Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=136ba2a12e87178f6d83fba2874abf4c9ad32915'/>
<id>urn:sha1:136ba2a12e87178f6d83fba2874abf4c9ad32915</id>
<content type='text'>
- Validate account ownership (aid) before allowing ark send/sync/vault
  operations and in debit/sendOnchain as defense-in-depth
- Harden PIN check to reject missing/empty pin when user has one set

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>tx recalc</title>
<updated>2026-03-12T06:51:53Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-03-12T06:51:53Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=5347d890c4dca651500d6bdc31d4ae5d4ea20440'/>
<id>urn:sha1:5347d890c4dca651500d6bdc31d4ae5d4ea20440</id>
<content type='text'>
</content>
</entry>
<entry>
<title>try to cpfp piggyback on in flight withdrawals</title>
<updated>2026-03-12T06:01:00Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-03-12T06:01:00Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=79252576d1bd24bc74fe1b7fc9cc3d4d68a1c8a0'/>
<id>urn:sha1:79252576d1bd24bc74fe1b7fc9cc3d4d68a1c8a0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>remove bumpestimate</title>
<updated>2026-03-12T05:30:37Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-03-12T05:30:37Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=05119b32f331ee97130a5300feb5c02f791aac80'/>
<id>urn:sha1:05119b32f331ee97130a5300feb5c02f791aac80</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fund authorizations</title>
<updated>2026-03-04T20:43:11Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-03-04T20:43:11Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=a6bc64017162bcaf1b7c2f3525f89c0e8dbe8d68'/>
<id>urn:sha1:a6bc64017162bcaf1b7c2f3525f89c0e8dbe8d68</id>
<content type='text'>
</content>
</entry>
<entry>
<title>funds route</title>
<updated>2026-03-04T19:10:49Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-03-04T19:10:49Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=6781fd2935ebc3abdeed182b4cee62c25c5482e7'/>
<id>urn:sha1:6781fd2935ebc3abdeed182b4cee62c25c5482e7</id>
<content type='text'>
</content>
</entry>
</feed>
