<feed xmlns='http://www.w3.org/2005/Atom'>
<title>coinosv3.git/src/electrum.js, branch fdroid-v1.7</title>
<subtitle>coinos v3 — bitcoin, Ark, Lightning and nostr wallet (web + Android)</subtitle>
<id>https://git.coinos.io/coinosv3.git/atom?h=fdroid-v1.7</id>
<link rel='self' href='https://git.coinos.io/coinosv3.git/atom?h=fdroid-v1.7'/>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/'/>
<updated>2026-09-10T14:33:05Z</updated>
<entry>
<title>Electrum source: answer txStatus, so the replaced/evicted-tx pruner actually prunes.</title>
<updated>2026-09-10T14:33:05Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-10T14:33:05Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=197ab88cec2f05b7ad45323b396a6e34b8b5edca'/>
<id>urn:sha1:197ab88cec2f05b7ad45323b396a6e34b8b5edca</id>
<content type='text'>
_pruneReplaced only drops a pending row on a definitive "not found", and the
Electrum adapter had no txStatus at all — the call threw, the catch said
"transient", and nothing was ever pruned on the default data source. A
5,000-sat send the network never accepted sat in History as a pending
withdrawal for four days (and the cross-device union kept it fed).

Fulcrum's verbose transaction.get answers both halves: bitcoind's "No such
mempool or blockchain transaction" is the definitive miss (→ null), a
blockhash means confirmed. Other failures still throw.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01Nw1Dijik1tLVKRM1WkU7xE
</content>
</entry>
<entry>
<title>Rebrand: hal → coinos v3</title>
<updated>2026-08-02T19:32:14Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-08-02T19:32:14Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=1fdaa920d7530ac2073ca50280d9531935446c7a'/>
<id>urn:sha1:1fdaa920d7530ac2073ca50280d9531935446c7a</id>
<content type='text'>
The app already presents as Coinos; this finishes the job in the repo:
package name, README, GitHub link, code comments, and the stale locale
lines that still explained the old "Hal Wallet" name (they fall back to
the English tribute line). Kept: the hal-nwc-pouch IndexedDB name (an
upgrade-compat identifier), the halwallet.app domain in the BIP-353
names feature (live infrastructure), and the Hal Finney tribute itself.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
</content>
</entry>
<entry>
<title>Fee rates from live explorer + reconnect half-open socket on wake</title>
<updated>2026-07-06T21:55:40Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-07-06T21:55:40Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=312621af84136fddbe7d7e47ffecc1ba2b38920d'/>
<id>urn:sha1:312621af84136fddbe7d7e47ffecc1ba2b38920d</id>
<content type='text'>
- Fee rates on the electrum backend came from Fulcrum's estimatefee
  (Core's estimatesmartfee): historical, laggy, floored at 1 sat/vB, so
  it showed 1 across the board while mempool.space showed 11/10. Pull the
  configured explorer's live recommendation instead (/v1/fees/recommended,
  then /fee-estimates), falling back to estimatefee only when the explorer
  is unreachable — self-hosted/regtest behaviour unchanged.
- On mobile a backgrounded page leaves the socket half-open: TCP is dead
  but readyState still reads OPEN, so wake() never reconnected and fired
  scan RPCs into the void, waiting ~20s for the heartbeat to recover.
  wake() now forces a reconnect when the socket has been silent past the
  heartbeat window, so a payment shows the instant you refocus.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Per-network data source; drop duplicate regtest fields; add mutinynet</title>
<updated>2026-06-27T18:45:49Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-06-27T18:45:49Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=3c79da0976b8b1c5c5ce7d5ea1b90221b1a96b48'/>
<id>urn:sha1:3c79da0976b8b1c5c5ce7d5ea1b90221b1a96b48</id>
<content type='text'>
The network card is now just the network picker. Each network's endpoints
(Electrum server + block explorer) live solely in the Data source card, whose
options change per network and are stored per network (so switching networks
remembers each one's choice). Removes the duplicate regtest Esplora/WS fields.

Adds mutinynet (signet — testnet address format, explorer at mutinynet.com).
Per-network defaults: mainnet → coinos Electrum, testnet/mutinynet → explorer,
regtest → local Fulcrum. Fixes tx-explorer links to use each network's web base
(no double /testnet).

Co-Authored-By: Claude Opus 4.8 (1M context) &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add Electrum-over-WebSocket as an alternative data backend</title>
<updated>2026-06-26T15:23:57Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-06-26T15:23:57Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=ff69e7e9f166e01102500b559b0cd66e3a019fab'/>
<id>urn:sha1:ff69e7e9f166e01102500b559b0cd66e3a019fab</id>
<content type='text'>
Settings → Data source now offers 'Electrum' alongside the Esplora REST explorer.
One Electrum WebSocket serves BOTH the wallet's data queries and scripthash push
notifications, so pointing Hal at your own Fulcrum/electrs gives a fully
self-hosted setup — no coinos, no public REST, nothing shared off your node.

- src/electrum.js: ElectrumApi maps the Esplora shapes the wallet consumes onto
  Electrum methods (scripthash get_balance/listunspent/get_history, estimatefee,
  transaction.broadcast). electrs has no verbose tx lookup, so it parses raw txs
  and resolves input values from parent txs to compute fees (cached, in-flight
  deduped, bounded-parallel). Validated field-for-field against mempool.space:
  addressTxs (fee/vin/vout/status), getTx, outspend, balance, utxos.
- wallet.js: the realtime socket already spoke Electrum's notify protocol; added
  request/response (_rpcCall) so the same connection answers data calls. Real
  Electrum notifications carry no tx data, so they reconcile via the backend.
  Replaced the fragile newline parser with a string-aware brace-depth scanner
  that handles every framing (newline, one-per-frame, concatenated, split) —
  fixes a buffer-poisoning hang under concurrent calls; also hardens the coinos
  watcher path. Esplora stays the default; nothing changes for existing users.

Verified end-to-end against blockstream's electrs: concurrent transport, a full
fresh-wallet scan (~2s), and the parser unit-tested on all framings.

Co-Authored-By: Claude Opus 4.8 (1M context) &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
