v1.12.0
v1.12.0
First feature minor in the 1.x line. No consensus or network-protocol change; safe in-place upgrade, no resync required.
Wallet push: SSE GET /sse (PR #25, issue #15 Tier 2)
Wallets can now get a push nudge the moment a watched address's mempool or confirmed state changes, instead of polling — balance/UTXO updates render at network-RTT.
- New long-lived
GET /sseendpoint on the JSON-RPC port (text/event-stream, Electrum-style per-script subscription via?addresses=). Server emits a tinyscript_changednudge; the client re-pulls. - Per-script subscription routing (cost is O(subscribers for that script)), bounded per-connection buffers, separate connection pool, per-IP and per-connection caps, 25s heartbeat, TCP-keepalive reaping.
- Spend-side coverage: a confirmed spend of a watched address nudges that address, even for transactions that never transited this node's mempool (block-only / miner-direct) and across reorgs.
- Operator opt-out:
--rpc-sse-enabled falserefuses/sse(404) and serves only one-shot JSON-RPC, for operators who prefer not to run a persistent, address-linkable subscription channel. Default on.
Batched mempool read: get_address_mempool_batch (PR #26)
One request returns the mempool view for many addresses under a single rate-limit charge — collapses a multi-address wallet poll that would otherwise spend one scan per address. Per-request work is bounded (address dedup + per-address result cap with a truncated flag).
Script tooling (PRs #22, #23)
covenants::htlcobserver types (HtlcRecord,HtlcState,HtlcRole, claim/reclaim records) — canonical wire shapes for HTLC observers/indexers/wallets, alongside the existingtry_parse_htlc.script::structural_merkle_hash— identifies a script template (same combinator structure / constant types, independent of specific parameter values), for explorers and contract-type tagging. Not a spending commitment;merkle_hashis unchanged.