v0.9.4 — play rewards + fingerprint matcher + node.hello connectivity gate
MusicChain v0.9.4
Android APK (arm64-v8a) attached — sideload musicchain-player-v0.9.4-arm64.apk.
Play rewards fixed
A buggy container/ID3 tag could register a garbage song duration (e.g. 184 h). Because the play-reward gate needs 50% of the registered duration, such songs were permanently un-rewardable — every real play scored "below_threshold". Now sanity-gated on both sides:
- player: reject implausible durations at registration (prefer tag, fall back to PCM math, else 0)
- node: treat an implausible on-chain duration as unreliable and fall back to the fixed legacy listen threshold — so songs already registered with a bad duration reward again on a genuine play
Fingerprint matcher fixed (false positives + slow validation)
- offset-alignment bug in
similarity()(mixed match-count from one offset with overlap-length from another — inflated different-song scores AND deflated same-song transcodes) - minimum-overlap guard (kills silence-tail flukes)
- same-song threshold 0.55 → 0.70, hoisted to one shared constant used by both the consensus dup-check and the swarm-join probe
- swarm-join probe early-exits on first match (perf)
- player: only count a scan as "matched" when the node names a chain song with a real swarm
Network / consensus (Model 1)
node.hellofull-node identity handshake + connectivity-gated propagation (an isolated node holds INV/DHT fan-out and flushes when a full-node peer appears; minting is never gated)- retired the
validator_enabledproducer/follower gate — every node mints on content (song blocks + tx-carrying heartbeat blocks), converging on the heaviest valid chain - discovery: the library re-announces on every network change (songs no longer go undiscoverable while still online)
Runs against a freshly re-bootstrapped genesis (the fingerprint/threshold change is consensus-affecting). Build full/mini nodes from source.