Allows Android/FFI callers to interrupt an in-progress wallet sync
cleanly between batches. Adds salvium_wallet_stop_sync FFI export,
WalletError::Cancelled, SyncEvent::Cancelled, and WalletHandle
wrapper that pairs each wallet with its cancellation flag.
macOS GitHub Actions runners ship bash 3.2, which does not support
declare -A (requires bash 4.0+). Rewrote build-ios.sh and
build-android.sh to use parallel indexed arrays instead.
- Version all crates at 1.0.7-r001 (tracking Salvium C++ 1.0.7)
- Source-available license: free for author/designees and non-commercial
use; annual commercial license required for any revenue-generating use
- Build scripts for Android/iOS/Linux/macOS/Windows producing both
libsalvium_crypto and libsalvium_ffi
- CI workflow publishes platform archives to salvium-rs-releases
- 23 new FFI functions: storage ops, address book, tx notes, attributes,
staked balance, key derivation, mnemonic
- Fix stake detection: count owned outputs regardless of spent state
- Auto-resume testnet integration tests from current chain height
Multi-output CARROT transactions store per-output D_e in additional_pubkeys
(tag 0x04) with no tx_pubkey (tag 0x01), so the single-D_e pre-computation
path was skipped entirely — every output hit the full _scanCarrotOutput path
(~40ms each via FFI). Added per-output X25519 + 3-byte view tag rejection
that restores post-fork sync from ~10 blk/s back to ~900+ blk/s.
Also fixed parseExtra to handle 0xDE (minergate tag) and gracefully skip
unknown tags via varint-length instead of aborting all remaining extra bytes.
Move native code from native/ to Expo-compatible layout with android/
and ios/ at package root. Add Android JNI bridge (OnLoad.cpp,
ExpoSalviumCryptoModule.java, ExpoSalviumCryptoPackage.java).
Prebuilt binaries now go in prebuilt/ instead of native/lib/.
Test fixes:
- wallet-sync: update stale DEFAULT_BATCH_SIZE assertion (10 -> 100)
- bulletproofs+: fix hashToPoint -> hashToPointMonero rename in test,
fix serializeProof to include V array matching parseProof format
- transaction-builder: expect 2 outputs for exact-amount tx (zero-change
output is always added for privacy)