What's Changed
⚠️ Potential Breaking Changes
- Split client-lib and client-wallet (#1078) — the client library has been restructured into separate
client-libandclient-walletpackages. SDK consumers that import from the combined package will need to update their import paths. - Remove dashboard (#72) — the built-in admin dashboard has been removed. The new Admin web console (see Features) replaces it.
🔒 Security & Hardening
This release contains a large batch of security hardening commits. Operators on v0.9.15 or earlier should upgrade promptly.
- Patch CVE-2026-56852 in
golang.org/x/text(#1164) - Fix unbounded allocation in
DecodeTapTree(OOM / DoS class) (#33) - Harden fee estimation: stop accepting client-declared input amounts in
EstimateIntentFee - Make
Proof.Feesoverflow-safe and exclude thetoSpendinput (#9) - Bind PSBT
prevoutmetadata to the operator's own records in forfeit path (#10) - Match Ark proprietary PSBT field keys exactly (#20)
- Verify MuSig2 tree partial signatures under sorted key aggregation (#37)
- Reject non-taproot
pkScriptsbefore byte-slicing (#36) - Reject offchain outputs whose taproot key is off the curve (#12)
- Reject sighash types that do not commit to all outputs (#58)
- Reject VTXO spends through unhandled closures (#26)
- Reject unregistered cosigners from submitting nonces/signatures in Redis store (#51)
- Mitigate tree nonces/signatures submitted for another cosigner (#59)
- Ban participants that withhold forfeit signatures (#93)
- Validate asset inputs in
RegisterIntent(#1) - Harden batch builder (#4)
- Harden locktime config checks and witness reads in
ExtractWithAnchors; handleBanThresholdoverflow - Bind boarding signatures to the operator's commitment tx (#53)
- Accept only standard onchain receiver scripts in intents (#15)
- Transaction sanity checks (#2)
- Fix nil-check for
input[0].WitnessUtxo(#5) - Fraud hardening (#28)
- Add
OP_SIZEcheck to VHTLC claim condition (go-sdk #219 backport)
✨ Features
- Admin web console — replaces the removed dashboard
client-lib: AddGetBlockHeightto explorer interface (#1154)- Log client IP metadata on gRPC calls (#42)
- Require forfeits for expired, unswept VTXOs (#94)
- Push Docker images to prod and staging ECR on tag release (#3)
- Cross-compile multi-arch images (instead of emulation) for faster builds (#7)
🐛 Bug Fixes
- Fix
RegisterIntent/SubmitOffchainTxcache race (#62, #92) - Fix offchain transaction cache/DB projection race (#71)
- Fix
confirmation sessionrace on concurrentConfirm()(#91) - Fix
inmemoryintent storeDeleteAlldesyncing the VTXO guard set (#98) - Fix
ScheduledSweepSQL query (#68) - Fix pagination overflow (#35)
- In-memory live-store: never block on the collection signal (#50)
- Reconnect with back-off to scanner notification watcher (#90)
- Collect asset issuance once per group, not once per output (#16)
- Clamp fee output (#39) and boarding target-amount-exceed clamp (#38)
- Decode timelocks from actual script pushes, not inferred offsets (#47)
- Avoid panic on signature error (#19)
- Admin console display fixes (#60)
arkd-wallet: improve coin selection algorithm (#1158)compose: wait forarkd-walletreadiness before startingarkd(#56)
📦 Dependencies
golang.org/x/text→ v0.39.0 (CVE-2026-56852)golang.org/x/net→ v0.56.0 (#74)google.golang.org/grpc→ v1.82.1 (#1156)- Go toolchain → 1.26.6 (#75)
🔧 CI / Infrastructure
- Cancel superseded pull-request runs (#61)
- Cache Docker module downloads; drop redundant Go cache on self-hosted (#76)
- SQLite/Badger integration tests run only on merge to master (#41)
- E2E tests: replace fixed sleeps with condition polling (#44)
- Updated
SECURITY.md(drop Nostr DM contact) (#1165)
Changelog generated by Arkana release-coordinator · 2026-08-25
Full Changelog: v0.9.15...v0.9.16