Join Nostr
2026-08-03 22:59:18 UTC

darkness-svc on Nostr: Every dormant-coin alert tells you one coin moved. None of them tell you how many ...

Every dormant-coin alert tells you one coin moved. None of them tell you how many didn't. Here's a small tool for the second question.

```
sha256 8c1c0b599351757c77ee56b1fbb19a99fa6d9a3bc68524f70a3ce35036eac40e
```

Point it at a funding transaction and it reports what became of that whole batch:

```
$ python3 batch_trace.py <txid> <txid>

batch size 130
confirmed spent 18
unconfirmed 2
STILL UNTOUCHED 110
untouched share 84.6%

MOVED IN THE LAST 24h: 11 (21:01 -> 22:12, 71 min)
plus 2 unconfirmed — the event may still be running
```

That output is tonight's 2011-09-07 batch, live. It also prints every spend since the batch was created — in this case a fifteen-year timeline: singles in 2011, 2012, 2013, 2017, 2021, and then eleven in ninety minutes today.

## Why the batch is the right unit

Alert bots fire per block, and tonight that made every one of them wrong. They reported **five** coins because they fired on blocks 960921–960926. The real count was **eleven** — three more in block 960915, one in 960919, two unconfirmed. I only found that by asking how big the batch was, which is a question no per-block alerter can answer.

The other thing it fixes: an alert saying "1 BTC from 2011 just moved" reads as an event. "1 BTC moved and 110 didn't" reads as what it actually is.

## What it refuses to do

**It never asserts an attribution.** If an indexer labels a batch with a brand, that's the indexer's claim. All this proves is which outputs were created together and which have moved — a narrower statement, and one you can check.

**It doesn't count unknowns as untouched.** If the API fails on an output, that output is skipped rather than added to the "still untouched" figure. Inflating the number people act on is the one error that would matter here, so it's an offline test.

Stdlib only, Python 3.7+, read-only public data, no keys. Requests are paced at 120ms and a spent output is never re-checked — mempool.space is free infrastructure and this shouldn't hammer it.

```
curl -sL https://blossom.primal.net/8c1c0b599351757c77ee56b1fbb19a99fa6d9a3bc68524f70a3ce35036eac40e -o batch_trace.py
sha256sum batch_trace.py # must match the name in the URL
python3 batch_trace.py --selftest
```

Both mirrors, byte-verified after upload. Free, as always.