From 8abed301dad5f0ea8ffb1f63bbcfe5b7b1045473 Mon Sep 17 00:00:00 2001 From: Matt Hess Date: Tue, 3 Mar 2026 16:58:17 +0000 Subject: [PATCH] salvium_wallet_scan_mempool is now exported as a C FFI symbol --- Cargo.lock | 26 ++++++++++++------------- Cargo.toml | 2 +- crates/salvium-ffi/src/wallet.rs | 33 ++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 19c8b5d..77bcf52 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1956,7 +1956,7 @@ checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "salvium-cli" -version = "1.0.7-r016" +version = "1.0.7-r017" dependencies = [ "clap", "dirs", @@ -1978,7 +1978,7 @@ dependencies = [ [[package]] name = "salvium-consensus" -version = "1.0.7-r016" +version = "1.0.7-r017" dependencies = [ "hex", "salvium-types", @@ -1990,7 +1990,7 @@ dependencies = [ [[package]] name = "salvium-crypto" -version = "1.0.7-r016" +version = "1.0.7-r017" dependencies = [ "aes-gcm", "argon2", @@ -2016,7 +2016,7 @@ dependencies = [ [[package]] name = "salvium-ffi" -version = "1.0.7-r016" +version = "1.0.7-r017" dependencies = [ "dirs", "hex", @@ -2035,7 +2035,7 @@ dependencies = [ [[package]] name = "salvium-miner" -version = "1.0.7-r016" +version = "1.0.7-r017" dependencies = [ "clap", "hex", @@ -2050,7 +2050,7 @@ dependencies = [ [[package]] name = "salvium-miner-gr" -version = "1.0.7-r016" +version = "1.0.7-r017" dependencies = [ "cc", "clap", @@ -2062,7 +2062,7 @@ dependencies = [ [[package]] name = "salvium-miner-v2" -version = "1.0.7-r016" +version = "1.0.7-r017" dependencies = [ "cc", "clap", @@ -2077,7 +2077,7 @@ dependencies = [ [[package]] name = "salvium-multisig" -version = "1.0.7-r016" +version = "1.0.7-r017" dependencies = [ "curve25519-dalek", "hex", @@ -2093,7 +2093,7 @@ dependencies = [ [[package]] name = "salvium-rpc" -version = "1.0.7-r016" +version = "1.0.7-r017" dependencies = [ "base64", "hex", @@ -2108,7 +2108,7 @@ dependencies = [ [[package]] name = "salvium-sync-bench" -version = "1.0.7-r016" +version = "1.0.7-r017" dependencies = [ "clap", "env_logger", @@ -2125,7 +2125,7 @@ dependencies = [ [[package]] name = "salvium-tx" -version = "1.0.7-r016" +version = "1.0.7-r017" dependencies = [ "curve25519-dalek", "getrandom 0.2.17", @@ -2143,7 +2143,7 @@ dependencies = [ [[package]] name = "salvium-types" -version = "1.0.7-r016" +version = "1.0.7-r017" dependencies = [ "hex", "serde", @@ -2153,7 +2153,7 @@ dependencies = [ [[package]] name = "salvium-wallet" -version = "1.0.7-r016" +version = "1.0.7-r017" dependencies = [ "aes-gcm", "chacha20", diff --git a/Cargo.toml b/Cargo.toml index 9adbe42..6669a55 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ members = [ ] [workspace.package] -version = "1.0.7-r016" +version = "1.0.7-r017" edition = "2021" license = "LicenseRef-Salvium-RS" repository = "https://github.com/salvium/salvium-rs" diff --git a/crates/salvium-ffi/src/wallet.rs b/crates/salvium-ffi/src/wallet.rs index 8356a6a..d546ac3 100644 --- a/crates/salvium-ffi/src/wallet.rs +++ b/crates/salvium-ffi/src/wallet.rs @@ -481,6 +481,39 @@ fn dispatch_sync_event(event: &salvium_wallet::SyncEvent, cb: SyncCallbackFn) { } } +// ============================================================================= +// Mempool Scan +// ============================================================================= + +/// Scan the mempool for transactions belonging to this wallet. +/// +/// This is a lightweight alternative to a full sync — it only checks the +/// daemon's transaction pool for new or dropped transactions relevant to the +/// wallet's keys. +/// +/// Returns JSON: `{"new_pool_txs": N, "dropped_pool_txs": N}` +/// Caller must free with `salvium_string_free()`. +#[no_mangle] +pub unsafe extern "C" fn salvium_wallet_scan_mempool( + wallet: *mut c_void, + daemon: *mut c_void, +) -> *mut c_char { + ffi_try_string(|| { + let handle = unsafe { borrow_handle::(wallet) }?; + let dh = unsafe { borrow_handle::(daemon) }?; + let rt = crate::runtime(); + + rt.block_on(async { + let result = handle.wallet.scan_mempool(&dh.pool).await.map_err(|e| e.to_string())?; + serde_json::to_string(&serde_json::json!({ + "new_pool_txs": result.new_pool_txs, + "dropped_pool_txs": result.dropped_pool_txs, + })) + .map_err(|e| e.to_string()) + }) + }) +} + // ============================================================================= // Query Functions // =============================================================================