diff --git a/Cargo.lock b/Cargo.lock index 59966e61806..051c363cba4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -84,21 +84,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" -[[package]] -name = "anstream" -version = "0.6.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" -dependencies = [ - "anstyle", - "anstyle-parse 0.2.7", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - [[package]] name = "anstream" version = "1.0.0" @@ -106,7 +91,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" dependencies = [ "anstyle", - "anstyle-parse 1.0.0", + "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", @@ -120,15 +105,6 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" -[[package]] -name = "anstyle-parse" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" -dependencies = [ - "utf8parse", -] - [[package]] name = "anstyle-parse" version = "1.0.0" @@ -175,9 +151,9 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9f3647c145568cec02c42054e07bdf9a5a698e15b466fb2341bfc393cd24aa5" +checksum = "a07d1f37ff60921c83bdfc7407723bdefe89b44b98a9b772f225c8f9d67141a6" dependencies = [ "rustversion", ] @@ -271,9 +247,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-lc-rs" -version = "1.16.1" +version = "1.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94bffc006df10ac2a68c83692d734a465f8ee6c5b384d8545a636f81d858f4bf" +checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc" dependencies = [ "aws-lc-sys", "zeroize", @@ -281,9 +257,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4321e568ed89bb5a7d291a7f37997c2c0df89809d7b6d12062c81ddb54aa782e" +checksum = "1fa7e52a4c5c547c741610a2c6f123f3881e409b714cd27e6798ef020c514f0a" dependencies = [ "cc", "cmake", @@ -757,19 +733,20 @@ dependencies = [ [[package]] name = "borsh" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f" +checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" dependencies = [ "borsh-derive", + "bytes", "cfg_aliases", ] [[package]] name = "borsh-derive" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0686c856aa6aac0c4498f936d7d6a02df690f614c03e4d906d1018062b5c5e2c" +checksum = "bfcfdc083699101d5a7965e49925975f2f55060f94f9a05e7187be95d530ca59" dependencies = [ "once_cell", "proc-macro-crate 3.5.0", @@ -1092,7 +1069,7 @@ version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" dependencies = [ - "anstream 1.0.0", + "anstream", "anstyle", "clap_lex", "strsim", @@ -1630,7 +1607,7 @@ dependencies = [ [[package]] name = "dash-spv" version = "0.42.0" -source = "git+https://github.com/dashpay/rust-dashcore?rev=42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e#42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" +source = "git+https://github.com/dashpay/rust-dashcore?rev=08ade6e8043ff376bd253c9566b927154ca8a455#08ade6e8043ff376bd253c9566b927154ca8a455" dependencies = [ "anyhow", "async-trait", @@ -1645,7 +1622,6 @@ dependencies = [ "hickory-resolver", "indexmap 2.13.0", "key-wallet", - "key-wallet-manager", "log", "rand 0.8.5", "rayon", @@ -1663,7 +1639,7 @@ dependencies = [ [[package]] name = "dash-spv-ffi" version = "0.42.0" -source = "git+https://github.com/dashpay/rust-dashcore?rev=42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e#42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" +source = "git+https://github.com/dashpay/rust-dashcore?rev=08ade6e8043ff376bd253c9566b927154ca8a455#08ade6e8043ff376bd253c9566b927154ca8a455" dependencies = [ "cbindgen 0.29.2", "clap", @@ -1673,7 +1649,6 @@ dependencies = [ "hex", "key-wallet", "key-wallet-ffi", - "key-wallet-manager", "libc", "log", "once_cell", @@ -1688,7 +1663,7 @@ dependencies = [ [[package]] name = "dashcore" version = "0.42.0" -source = "git+https://github.com/dashpay/rust-dashcore?rev=42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e#42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" +source = "git+https://github.com/dashpay/rust-dashcore?rev=08ade6e8043ff376bd253c9566b927154ca8a455#08ade6e8043ff376bd253c9566b927154ca8a455" dependencies = [ "anyhow", "base64-compat", @@ -1713,12 +1688,12 @@ dependencies = [ [[package]] name = "dashcore-private" version = "0.42.0" -source = "git+https://github.com/dashpay/rust-dashcore?rev=42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e#42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" +source = "git+https://github.com/dashpay/rust-dashcore?rev=08ade6e8043ff376bd253c9566b927154ca8a455#08ade6e8043ff376bd253c9566b927154ca8a455" [[package]] name = "dashcore-rpc" version = "0.42.0" -source = "git+https://github.com/dashpay/rust-dashcore?rev=42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e#42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" +source = "git+https://github.com/dashpay/rust-dashcore?rev=08ade6e8043ff376bd253c9566b927154ca8a455#08ade6e8043ff376bd253c9566b927154ca8a455" dependencies = [ "dashcore-rpc-json", "hex", @@ -1731,7 +1706,7 @@ dependencies = [ [[package]] name = "dashcore-rpc-json" version = "0.42.0" -source = "git+https://github.com/dashpay/rust-dashcore?rev=42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e#42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" +source = "git+https://github.com/dashpay/rust-dashcore?rev=08ade6e8043ff376bd253c9566b927154ca8a455#08ade6e8043ff376bd253c9566b927154ca8a455" dependencies = [ "bincode", "dashcore", @@ -1746,7 +1721,7 @@ dependencies = [ [[package]] name = "dashcore_hashes" version = "0.42.0" -source = "git+https://github.com/dashpay/rust-dashcore?rev=42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e#42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" +source = "git+https://github.com/dashpay/rust-dashcore?rev=08ade6e8043ff376bd253c9566b927154ca8a455#08ade6e8043ff376bd253c9566b927154ca8a455" dependencies = [ "bincode", "dashcore-private", @@ -1946,7 +1921,7 @@ dependencies = [ "derive_more 1.0.0", "dpp", "dpp-json-convertible-derive", - "env_logger 0.11.9", + "env_logger 0.11.10", "getrandom 0.2.17", "grovedb-commitment-tree", "hex", @@ -1956,7 +1931,6 @@ dependencies = [ "json-schema-compatibility-validator", "jsonschema", "key-wallet", - "key-wallet-manager", "lazy_static", "log", "nohash-hasher", @@ -2252,9 +2226,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a1c3cc8e57274ec99de65301228b537f1e4eedc1b8e0f9411c6caac8ae7308f" +checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef" dependencies = [ "log", "regex", @@ -2275,11 +2249,11 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.9" +version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2daee4ea451f429a58296525ddf28b45a3b64f1acf6587e2067437bb11e218d" +checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a" dependencies = [ - "anstream 0.6.21", + "anstream", "anstyle", "env_filter", "jiff", @@ -3591,14 +3565,15 @@ dependencies = [ [[package]] name = "ipconfig" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" dependencies = [ - "socket2 0.5.10", + "socket2 0.6.3", "widestring", - "windows-sys 0.48.0", - "winreg", + "windows-registry", + "windows-result", + "windows-sys 0.61.2", ] [[package]] @@ -3609,9 +3584,9 @@ checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] name = "iri-string" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +checksum = "d8e7418f59cc01c88316161279a7f665217ae316b388e58a0d10e29f54f1e5eb" dependencies = [ "memchr", "serde", @@ -3672,9 +3647,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" @@ -3709,7 +3684,7 @@ dependencies = [ "cesu8", "cfg-if", "combine", - "jni-sys", + "jni-sys 0.3.1", "log", "thiserror 1.0.69", "walkdir", @@ -3718,9 +3693,31 @@ dependencies = [ [[package]] name = "jni-sys" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.117", +] [[package]] name = "jobserver" @@ -3829,7 +3826,7 @@ dependencies = [ [[package]] name = "key-wallet" version = "0.42.0" -source = "git+https://github.com/dashpay/rust-dashcore?rev=42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e#42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" +source = "git+https://github.com/dashpay/rust-dashcore?rev=08ade6e8043ff376bd253c9566b927154ca8a455#08ade6e8043ff376bd253c9566b927154ca8a455" dependencies = [ "aes", "async-trait", @@ -3845,11 +3842,13 @@ dependencies = [ "getrandom 0.2.17", "hex", "rand 0.8.5", + "rayon", "scrypt", "secp256k1", "serde", "serde_json", "sha2", + "tokio", "tracing", "zeroize", ] @@ -3857,34 +3856,17 @@ dependencies = [ [[package]] name = "key-wallet-ffi" version = "0.42.0" -source = "git+https://github.com/dashpay/rust-dashcore?rev=42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e#42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" +source = "git+https://github.com/dashpay/rust-dashcore?rev=08ade6e8043ff376bd253c9566b927154ca8a455#08ade6e8043ff376bd253c9566b927154ca8a455" dependencies = [ "cbindgen 0.29.2", "dashcore", "hex", "key-wallet", - "key-wallet-manager", "libc", "secp256k1", "tokio", ] -[[package]] -name = "key-wallet-manager" -version = "0.42.0" -source = "git+https://github.com/dashpay/rust-dashcore?rev=42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e#42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" -dependencies = [ - "async-trait", - "bincode", - "dashcore", - "dashcore_hashes", - "key-wallet", - "rayon", - "secp256k1", - "tokio", - "zeroize", -] - [[package]] name = "keyword-search-contract" version = "3.1.0-dev.1" @@ -4387,9 +4369,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" [[package]] name = "num-derive" @@ -4876,7 +4858,6 @@ dependencies = [ "dpp", "indexmap 2.13.0", "key-wallet", - "key-wallet-manager", "platform-encryption", "rand 0.8.5", "thiserror 1.0.69", @@ -5036,7 +5017,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.4+spec-1.1.0", + "toml_edit 0.25.8+spec-1.1.0", ] [[package]] @@ -5212,9 +5193,9 @@ dependencies = [ [[package]] name = "pulldown-cmark" -version = "0.13.1" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c41efbf8f90ac44de7f3a868f0867851d261b56291732d0cbf7cceaaeb55a6" +checksum = "7c3a14896dfa883796f1cb410461aef38810ea05f2b2c33c5aded3649095fdad" dependencies = [ "bitflags 2.11.0", "memchr", @@ -5247,9 +5228,9 @@ dependencies = [ [[package]] name = "quick_cache" -version = "0.6.19" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "530e84778a55de0f52645a51d4e3b9554978acd6a1e7cd50b6a6784692b3029e" +checksum = "5a70b1b8b47e31d0498ecbc3c5470bb931399a8bfed1fd79d1717a61ce7f96e3" dependencies = [ "ahash 0.8.12", "equivalent", @@ -5855,7 +5836,7 @@ dependencies = [ "dash-spv-ffi", "dotenvy", "drive-proof-verifier", - "env_logger 0.11.9", + "env_logger 0.11.10", "envy", "getrandom 0.2.17", "hex", @@ -6080,9 +6061,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.9" +version = "0.103.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" +checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" dependencies = [ "aws-lc-rs", "ring", @@ -6391,9 +6372,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" +checksum = "876ac351060d4f882bb1032b6369eb0aef79ad9df1ea8bc404874d8cc3d0cd98" dependencies = [ "serde_core", ] @@ -7251,7 +7232,7 @@ checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ "indexmap 2.13.0", "serde_core", - "serde_spanned 1.0.4", + "serde_spanned 1.1.0", "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", @@ -7278,9 +7259,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "1.0.0+spec-1.1.0" +version = "1.1.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" +checksum = "97251a7c317e03ad83774a8752a7e81fb6067740609f75ea2b585b569a59198f" dependencies = [ "serde_core", ] @@ -7312,23 +7293,23 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.4+spec-1.1.0" +version = "0.25.8+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7193cbd0ce53dc966037f54351dbbcf0d5a642c7f0038c382ef9e677ce8c13f2" +checksum = "16bff38f1d86c47f9ff0647e6838d7bb362522bdf44006c7068c2b1e606f1f3c" dependencies = [ "indexmap 2.13.0", - "toml_datetime 1.0.0+spec-1.1.0", + "toml_datetime 1.1.0+spec-1.1.0", "toml_parser", - "winnow 0.7.15", + "winnow 1.0.0", ] [[package]] name = "toml_parser" -version = "1.0.9+spec-1.1.0" +version = "1.1.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" +checksum = "2334f11ee363607eb04df9b8fc8a13ca1715a72ba8662a26ac285c98aabb4011" dependencies = [ - "winnow 0.7.15", + "winnow 1.0.0", ] [[package]] @@ -7339,9 +7320,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.0.6+spec-1.1.0" +version = "1.1.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" +checksum = "d282ade6016312faf3e41e57ebbba0c073e4056dab1232ab1cb624199648f8ed" [[package]] name = "tonic" @@ -7734,9 +7715,9 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "da36089a805484bcccfffe0739803392c8298778a2d2f09febf76fac5ad9025b" [[package]] name = "unicode-xid" @@ -7768,9 +7749,9 @@ checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" [[package]] name = "ureq" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc97a28575b85cfedf2a7e7d3cc64b3e11bd8ac766666318003abbacc7a21fc" +checksum = "dea7109cdcd5864d4eeb1b58a1648dc9bf520360d7af16ec26d0a9354bafcfc0" dependencies = [ "base64 0.22.1", "flate2", @@ -7779,15 +7760,15 @@ dependencies = [ "rustls", "rustls-pki-types", "ureq-proto", - "utf-8", + "utf8-zero", "webpki-roots", ] [[package]] name = "ureq-proto" -version = "0.5.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d81f9efa9df032be5934a46a068815a10a042b494b6a58cb0a1a97bb5467ed6f" +checksum = "e994ba84b0bd1b1b0cf92878b7ef898a5c1760108fe7b6010327e274917a808c" dependencies = [ "base64 0.22.1", "http", @@ -7813,6 +7794,12 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf8-zero" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8c0a043c9540bae7c578c88f91dda8bd82e59ae27c21baca69c8b191aaf5a6e" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -8384,15 +8371,6 @@ dependencies = [ "windows-targets 0.42.2", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -8444,21 +8422,6 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -8498,12 +8461,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -8522,12 +8479,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -8546,12 +8497,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -8582,12 +8527,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -8606,12 +8545,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -8630,12 +8563,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -8654,12 +8581,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -8691,13 +8612,12 @@ dependencies = [ ] [[package]] -name = "winreg" -version = "0.50.0" +name = "winnow" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +checksum = "a90e88e4667264a994d34e6d1ab2d26d398dcdca8b7f52bec8668957517fc7d8" dependencies = [ - "cfg-if", - "windows-sys 0.48.0", + "memchr", ] [[package]] @@ -8874,18 +8794,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.42" +version = "0.8.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2578b716f8a7a858b7f02d5bd870c14bf4ddbbcf3a4c05414ba6503640505e3" +checksum = "efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.42" +version = "0.8.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f" +checksum = "0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 4173fa820df..8372814ea07 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,12 +47,11 @@ members = [ ] [workspace.dependencies] -dashcore = { git = "https://github.com/dashpay/rust-dashcore", rev = "8cbae416458565faac21d3452fbc6d80b324f6d3" } -dash-spv = { git = "https://github.com/dashpay/rust-dashcore", rev = "8cbae416458565faac21d3452fbc6d80b324f6d3" } -dash-spv-ffi = { git = "https://github.com/dashpay/rust-dashcore", rev = "8cbae416458565faac21d3452fbc6d80b324f6d3" } -key-wallet = { git = "https://github.com/dashpay/rust-dashcore", rev = "8cbae416458565faac21d3452fbc6d80b324f6d3" } -key-wallet-manager = { git = "https://github.com/dashpay/rust-dashcore", rev = "8cbae416458565faac21d3452fbc6d80b324f6d3" } -dashcore-rpc = { git = "https://github.com/dashpay/rust-dashcore", rev = "8cbae416458565faac21d3452fbc6d80b324f6d3" } +dashcore = { git = "https://github.com/dashpay/rust-dashcore", rev = "08ade6e8043ff376bd253c9566b927154ca8a455" } +dash-spv = { git = "https://github.com/dashpay/rust-dashcore", rev = "08ade6e8043ff376bd253c9566b927154ca8a455" } +dash-spv-ffi = { git = "https://github.com/dashpay/rust-dashcore", rev = "08ade6e8043ff376bd253c9566b927154ca8a455" } +key-wallet = { git = "https://github.com/dashpay/rust-dashcore", rev = "08ade6e8043ff376bd253c9566b927154ca8a455" } +dashcore-rpc = { git = "https://github.com/dashpay/rust-dashcore", rev = "08ade6e8043ff376bd253c9566b927154ca8a455" } # Optimize heavy crypto crates even in dev/test builds so that # Halo 2 proof generation and verification run at near-release speed. diff --git a/packages/rs-dpp/Cargo.toml b/packages/rs-dpp/Cargo.toml index 1eecb169b4a..222f9edcf51 100644 --- a/packages/rs-dpp/Cargo.toml +++ b/packages/rs-dpp/Cargo.toml @@ -25,15 +25,13 @@ chrono = { version = "0.4.35", default-features = false, features = [ chrono-tz = { version = "0.8", optional = true } ciborium = { version = "0.2.2", optional = true } dashcore = { workspace = true, features = [ - "std", "secp-recovery", "rand", "signer", "serde", "eddsa", -], default-features = false } +] } key-wallet = { workspace = true, optional = true } -key-wallet-manager = { workspace = true, optional = true } dash-spv = { workspace = true, optional = true } dashcore-rpc = { workspace = true, optional = true } @@ -94,7 +92,6 @@ core_quorum_validation = ["dashcore/quorum_validation"] core_key_wallet = ["dep:key-wallet"] core_key_wallet_bincode = ["dep:key-wallet", "key-wallet/bincode"] core_key_wallet_bip_38 = ["dep:key-wallet", "key-wallet/bip38"] -core_key_wallet_manager = ["dep:key-wallet-manager"] core_key_wallet_serde = ["dep:key-wallet", "key-wallet/serde"] core_spv = ["dep:dash-spv"] core_rpc_client = ["dep:dashcore-rpc"] diff --git a/packages/rs-dpp/src/lib.rs b/packages/rs-dpp/src/lib.rs index e73fb05c251..b28e2c4ea2b 100644 --- a/packages/rs-dpp/src/lib.rs +++ b/packages/rs-dpp/src/lib.rs @@ -12,9 +12,6 @@ pub use dashcore; #[cfg(feature = "core_key_wallet")] pub use key_wallet; -#[cfg(feature = "core_key_wallet_manager")] -pub use key_wallet_manager; - #[cfg(feature = "core_spv")] pub use dash_spv; diff --git a/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_identities/update_operator_identity/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_identities/update_operator_identity/v0/mod.rs index 334872be2b3..774e235358d 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_identities/update_operator_identity/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_identities/update_operator_identity/v0/mod.rs @@ -531,7 +531,7 @@ mod tests { collateral_address: [0; 20], operator_reward: 0.0, state: DMNState { - service: SocketAddr::from_str("1.0.1.1:1234").unwrap(), + service: Some(SocketAddr::from_str("1.0.1.1:1234").unwrap()), registered_height: 0, pose_revived_height: None, pose_ban_height: None, @@ -608,7 +608,7 @@ mod tests { collateral_address: [0; 20], operator_reward: 0.0, state: DMNState { - service: SocketAddr::from_str("1.0.1.1:1234").unwrap(), + service: Some(SocketAddr::from_str("1.0.1.1:1234").unwrap()), registered_height: 0, pose_revived_height: None, pose_ban_height: None, @@ -668,7 +668,7 @@ mod tests { collateral_address: [0; 20], operator_reward: 0.0, state: DMNState { - service: SocketAddr::from_str("1.0.1.1:1234").unwrap(), + service: Some(SocketAddr::from_str("1.0.1.1:1234").unwrap()), registered_height: 0, pose_revived_height: None, pose_ban_height: None, @@ -741,7 +741,7 @@ mod tests { collateral_address: [0; 20], operator_reward: 0.0, state: DMNState { - service: SocketAddr::from_str("1.0.1.1:1234").unwrap(), + service: Some(SocketAddr::from_str("1.0.1.1:1234").unwrap()), registered_height: 0, pose_revived_height: None, pose_ban_height: None, @@ -818,7 +818,7 @@ mod tests { collateral_address: [0; 20], operator_reward: 0.0, state: DMNState { - service: SocketAddr::from_str("1.0.1.1:1234").unwrap(), + service: Some(SocketAddr::from_str("1.0.1.1:1234").unwrap()), registered_height: 0, pose_revived_height: None, pose_ban_height: None, @@ -879,7 +879,7 @@ mod tests { collateral_address: [0; 20], operator_reward: 0.0, state: DMNState { - service: SocketAddr::from_str("1.0.1.1:1234").unwrap(), + service: Some(SocketAddr::from_str("1.0.1.1:1234").unwrap()), registered_height: 0, pose_revived_height: None, pose_ban_height: None, @@ -967,7 +967,7 @@ mod tests { collateral_address: [0; 20], operator_reward: 0.0, state: DMNState { - service: SocketAddr::from_str("1.0.1.1:1234").unwrap(), + service: Some(SocketAddr::from_str("1.0.1.1:1234").unwrap()), registered_height: 0, pose_revived_height: None, pose_ban_height: None, @@ -1097,7 +1097,7 @@ mod tests { collateral_address: [0; 20], operator_reward: 0.0, state: DMNState { - service: SocketAddr::from_str("1.0.1.1:1234").unwrap(), + service: Some(SocketAddr::from_str("1.0.1.1:1234").unwrap()), registered_height: 0, pose_revived_height: None, pose_ban_height: None, @@ -1198,7 +1198,7 @@ mod tests { collateral_address: [0; 20], operator_reward: 0.0, state: DMNState { - service: SocketAddr::from_str("1.0.1.1:1234").unwrap(), + service: Some(SocketAddr::from_str("1.0.1.1:1234").unwrap()), registered_height: 0, pose_revived_height: None, pose_ban_height: None, @@ -1259,7 +1259,7 @@ mod tests { collateral_address: [0; 20], operator_reward: 0.0, state: DMNState { - service: SocketAddr::from_str("1.0.1.1:1234").unwrap(), + service: Some(SocketAddr::from_str("1.0.1.1:1234").unwrap()), registered_height: 0, pose_revived_height: None, pose_ban_height: None, diff --git a/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_list/update_state_masternode_list/v0/mod.rs b/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_list/update_state_masternode_list/v0/mod.rs index 0c5750d8947..4672db45b54 100644 --- a/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_list/update_state_masternode_list/v0/mod.rs +++ b/packages/rs-drive-abci/src/execution/platform_events/core_based_updates/update_masternode_list/update_state_masternode_list/v0/mod.rs @@ -64,7 +64,7 @@ where // the ban_height was changed validator.is_banned = maybe_ban_height.is_some(); } - if let Some(address) = dmn_state_diff.service { + if let Some(Some(address)) = dmn_state_diff.service { validator.node_ip = address.ip().to_string(); } diff --git a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/mod.rs b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/mod.rs index 5ec952feba8..b53fd20ccee 100644 --- a/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/mod.rs +++ b/packages/rs-drive-abci/src/execution/validation/state_transition/state_transitions/mod.rs @@ -679,7 +679,7 @@ pub(in crate::execution) mod tests { collateral_address: rng.gen(), operator_reward: 0.0, state: DMNState { - service: SocketAddr::new(IpAddr::V4(random_ip), 19999), + service: Some(SocketAddr::new(IpAddr::V4(random_ip), 19999)), registered_height: 0, pose_revived_height: None, pose_ban_height: None, @@ -768,7 +768,7 @@ pub(in crate::execution) mod tests { collateral_address: rng.gen(), operator_reward: 0.0, state: DMNState { - service: SocketAddr::new(IpAddr::V4(random_ip), 19999), + service: Some(SocketAddr::new(IpAddr::V4(random_ip), 19999)), registered_height: 0, pose_revived_height: None, pose_ban_height: None, diff --git a/packages/rs-drive-abci/src/platform_types/masternode/mod.rs b/packages/rs-drive-abci/src/platform_types/masternode/mod.rs index 0b2b94b0586..1bfe638d102 100644 --- a/packages/rs-drive-abci/src/platform_types/masternode/mod.rs +++ b/packages/rs-drive-abci/src/platform_types/masternode/mod.rs @@ -24,7 +24,7 @@ impl TryFromPlatformVersioned for Masternode { platform_version: &PlatformVersion, ) -> Result { match platform_version.drive_abci.structs.masternode { - 0 => Ok(Self::V0(value.into())), + 0 => Ok(Self::V0(value.try_into()?)), version => Err(Error::Execution(ExecutionError::UnknownVersionMismatch { method: "Masternode::try_from_platform_versioned(MasternodeListItem)".to_string(), known_versions: vec![0], diff --git a/packages/rs-drive-abci/src/platform_types/masternode/v0/mod.rs b/packages/rs-drive-abci/src/platform_types/masternode/v0/mod.rs index 43e9dba0359..cb79c3a171f 100644 --- a/packages/rs-drive-abci/src/platform_types/masternode/v0/mod.rs +++ b/packages/rs-drive-abci/src/platform_types/masternode/v0/mod.rs @@ -1,6 +1,8 @@ /// Accessors for Masternode pub mod accessors; +use crate::error::execution::ExecutionError; +use crate::error::Error; use dpp::bincode::{Decode, Encode}; use dpp::dashcore_rpc::dashcore_rpc_json::{DMNState, MasternodeType}; use dpp::dashcore_rpc::json::MasternodeListItem; @@ -45,8 +47,10 @@ impl Debug for MasternodeV0 { } } -impl From for MasternodeV0 { - fn from(value: MasternodeListItem) -> Self { +impl TryFrom for MasternodeV0 { + type Error = Error; + + fn try_from(value: MasternodeListItem) -> Result { let MasternodeListItem { node_type, pro_tx_hash, @@ -57,15 +61,15 @@ impl From for MasternodeV0 { state, } = value; - Self { + Ok(Self { node_type, pro_tx_hash, collateral_hash, collateral_index, collateral_address, operator_reward, - state: state.into(), - } + state: state.try_into()?, + }) } } @@ -137,8 +141,10 @@ pub struct MasternodeStateV0 { pub platform_http_port: Option, } -impl From for MasternodeStateV0 { - fn from(value: DMNState) -> Self { +impl TryFrom for MasternodeStateV0 { + type Error = Error; + + fn try_from(value: DMNState) -> Result { let DMNState { service, registered_height, @@ -155,7 +161,11 @@ impl From for MasternodeStateV0 { platform_http_port, } = value; - Self { + let service = service.ok_or(Error::Execution(ExecutionError::CorruptedCodeExecution( + "masternode service address is required but was empty in core RPC response", + )))?; + + Ok(Self { service, registered_height, pose_revived_height, @@ -169,7 +179,7 @@ impl From for MasternodeStateV0 { platform_node_id, platform_p2p_port, platform_http_port, - } + }) } } @@ -192,7 +202,7 @@ impl From for DMNState { } = value; Self { - service, + service: Some(service), registered_height, pose_revived_height, pose_ban_height, diff --git a/packages/rs-drive-abci/src/platform_types/validator/v0/mod.rs b/packages/rs-drive-abci/src/platform_types/validator/v0/mod.rs index f52b335b54e..db52b5b3e1d 100644 --- a/packages/rs-drive-abci/src/platform_types/validator/v0/mod.rs +++ b/packages/rs-drive-abci/src/platform_types/validator/v0/mod.rs @@ -37,12 +37,13 @@ impl NewValidatorIfMasternodeInState for ValidatorV0 { return None; }; let platform_node_id = (*platform_node_id)?; + let service_addr = (*service)?; Some(ValidatorV0 { pro_tx_hash, public_key, - node_ip: service.ip().to_string(), + node_ip: service_addr.ip().to_string(), node_id: PubkeyHash::from_byte_array(platform_node_id), - core_port: service.port(), + core_port: service_addr.port(), platform_http_port: *platform_http_port as u16, platform_p2p_port: *platform_p2p_port as u16, is_banned: pose_ban_height.is_some(), diff --git a/packages/rs-drive-abci/tests/strategy_tests/masternode_list_item_helpers.rs b/packages/rs-drive-abci/tests/strategy_tests/masternode_list_item_helpers.rs index 82f61aaf0ba..2318a34b0a4 100644 --- a/packages/rs-drive-abci/tests/strategy_tests/masternode_list_item_helpers.rs +++ b/packages/rs-drive-abci/tests/strategy_tests/masternode_list_item_helpers.rs @@ -104,8 +104,10 @@ mod tests { collateral_address: [0; 20], operator_reward: 0.0, state: DMNState { - service: SocketAddr::from_str(format!("1.0.{}.{}:1234", i / 256, i % 256).as_str()) - .unwrap(), + service: Some( + SocketAddr::from_str(format!("1.0.{}.{}:1234", i / 256, i % 256).as_str()) + .unwrap(), + ), registered_height: 0, pose_revived_height: None, pose_ban_height: None, diff --git a/packages/rs-drive-abci/tests/strategy_tests/masternodes.rs b/packages/rs-drive-abci/tests/strategy_tests/masternodes.rs index 55c2794bf59..aed04ab7e04 100644 --- a/packages/rs-drive-abci/tests/strategy_tests/masternodes.rs +++ b/packages/rs-drive-abci/tests/strategy_tests/masternodes.rs @@ -247,8 +247,10 @@ pub fn generate_test_masternodes( collateral_address: [0; 20], operator_reward: 0.0, state: DMNState { - service: SocketAddr::from_str(format!("1.0.{}.{}:1234", i / 256, i % 256).as_str()) - .unwrap(), + service: Some( + SocketAddr::from_str(format!("1.0.{}.{}:1234", i / 256, i % 256).as_str()) + .unwrap(), + ), registered_height: 0, pose_revived_height: None, pose_ban_height: None, @@ -348,9 +350,13 @@ pub fn generate_test_masternodes( rng.gen_range(0..255), rng.gen_range(0..255), ); - let old_port = masternode_list_item_b.state.service.port(); + let old_port = masternode_list_item_b + .state + .service + .map(|s| s.port()) + .unwrap_or(0); masternode_list_item_b.state.service = - SocketAddr::new(IpAddr::V4(random_ip), old_port); + Some(SocketAddr::new(IpAddr::V4(random_ip), old_port)); } latest_masternode_list_item = masternode_list_item_b.clone(); @@ -384,8 +390,10 @@ pub fn generate_test_masternodes( collateral_address: [0; 20], operator_reward: 0.0, state: DMNState { - service: SocketAddr::from_str(format!("1.1.{}.{}:1234", i / 256, i % 256).as_str()) - .unwrap(), + service: Some( + SocketAddr::from_str(format!("1.1.{}.{}:1234", i / 256, i % 256).as_str()) + .unwrap(), + ), registered_height: 0, pose_revived_height: None, pose_ban_height: None, @@ -525,9 +533,13 @@ pub fn generate_test_masternodes( rng.gen_range(0..255), rng.gen_range(0..255), ); - let old_port = hpmn_list_item_b.state.service.port(); + let old_port = hpmn_list_item_b + .state + .service + .map(|s| s.port()) + .unwrap_or(0); hpmn_list_item_b.state.service = - SocketAddr::new(IpAddr::V4(random_ip), old_port); + Some(SocketAddr::new(IpAddr::V4(random_ip), old_port)); } if update.p2p_port { if let Some(port) = hpmn_list_item_b.state.platform_p2p_port.as_mut() { diff --git a/packages/rs-platform-wallet/Cargo.toml b/packages/rs-platform-wallet/Cargo.toml index c30e7e43e9a..391a6590977 100644 --- a/packages/rs-platform-wallet/Cargo.toml +++ b/packages/rs-platform-wallet/Cargo.toml @@ -14,7 +14,6 @@ platform-encryption = { path = "../rs-platform-encryption" } # Key wallet dependencies (from rust-dashcore) key-wallet = { workspace = true } -key-wallet-manager = { workspace = true, optional = true } # Core dependencies dashcore = { workspace = true } @@ -34,4 +33,4 @@ rand = "0.8" default = ["bls", "eddsa", "manager"] bls = ["key-wallet/bls"] eddsa = ["key-wallet/eddsa"] -manager = ["key-wallet-manager"] +manager = [] diff --git a/packages/rs-platform-wallet/README.md b/packages/rs-platform-wallet/README.md index d91bafa525e..a255dc4ccdf 100644 --- a/packages/rs-platform-wallet/README.md +++ b/packages/rs-platform-wallet/README.md @@ -21,7 +21,7 @@ This allows applications to manage both Layer 1 (blockchain) and Layer 2 (Platfo ```rust use platform_wallet::PlatformWalletInfo; -use key_wallet_manager::wallet_manager::WalletManager; +use key_wallet::manager::WalletManager; use key_wallet::wallet::managed_wallet_info::wallet_info_interface::WalletInfoInterface; use dpp::prelude::Identifier; @@ -105,12 +105,12 @@ The package is structured as follows: ### Compatibility - Works with `WalletManager` for standard wallet management - Works with `SPVWalletManager` for SPV/light client functionality -- Fully compatible with existing `key-wallet-manager` infrastructure +- Fully compatible with existing `key-wallet::manager` infrastructure ## Dependencies - `key-wallet`: Core wallet functionality -- `key-wallet-manager`: Wallet management and SPV support +- `key-wallet::manager`: Wallet management and SPV support (merged into key-wallet) - `dpp`: Dash Platform Protocol types and identity definitions - `dashcore`: Core blockchain types diff --git a/packages/rs-platform-wallet/examples/basic_usage.rs b/packages/rs-platform-wallet/examples/basic_usage.rs index ccf3c743022..b53d8766bfa 100644 --- a/packages/rs-platform-wallet/examples/basic_usage.rs +++ b/packages/rs-platform-wallet/examples/basic_usage.rs @@ -25,7 +25,7 @@ fn main() -> Result<(), PlatformWalletError> { // The platform wallet can be used with WalletManager (requires "manager" feature) #[cfg(feature = "manager")] { - use key_wallet_manager::wallet_manager::WalletManager; + use key_wallet::manager::WalletManager; let _wallet_manager = WalletManager::::new(network); println!("Platform wallet successfully integrated with wallet managers!"); diff --git a/packages/rs-platform-wallet/src/lib.rs b/packages/rs-platform-wallet/src/lib.rs index 694bbb2d14a..80eee325ddc 100644 --- a/packages/rs-platform-wallet/src/lib.rs +++ b/packages/rs-platform-wallet/src/lib.rs @@ -20,6 +20,3 @@ pub use established_contact::EstablishedContact; pub use identity_manager::IdentityManager; pub use managed_identity::ManagedIdentity; pub use platform_wallet_info::PlatformWalletInfo; - -#[cfg(feature = "manager")] -pub use key_wallet_manager; diff --git a/packages/rs-platform-wallet/src/platform_wallet_info/wallet_info_interface.rs b/packages/rs-platform-wallet/src/platform_wallet_info/wallet_info_interface.rs index cb3ccead404..e88b9a1b5dc 100644 --- a/packages/rs-platform-wallet/src/platform_wallet_info/wallet_info_interface.rs +++ b/packages/rs-platform-wallet/src/platform_wallet_info/wallet_info_interface.rs @@ -111,4 +111,8 @@ impl WalletInfoInterface for PlatformWalletInfo { fn update_synced_height(&mut self, current_height: u32) { self.wallet_info.update_synced_height(current_height) } + + fn mark_instant_send_utxos(&mut self, txid: &dashcore::Txid) -> bool { + self.wallet_info.mark_instant_send_utxos(txid) + } } diff --git a/packages/rs-platform-wallet/src/platform_wallet_info/wallet_transaction_checker.rs b/packages/rs-platform-wallet/src/platform_wallet_info/wallet_transaction_checker.rs index 0d711984de2..7c7527d0466 100644 --- a/packages/rs-platform-wallet/src/platform_wallet_info/wallet_transaction_checker.rs +++ b/packages/rs-platform-wallet/src/platform_wallet_info/wallet_transaction_checker.rs @@ -13,13 +13,14 @@ impl WalletTransactionChecker for PlatformWalletInfo { &mut self, tx: &Transaction, context: TransactionContext, - wallet: &Wallet, + wallet: &mut Wallet, update_state: bool, + update_balance: bool, ) -> TransactionCheckResult { // Check transaction with underlying wallet info let result = self .wallet_info - .check_core_transaction(tx, context, wallet, update_state) + .check_core_transaction(tx, context, wallet, update_state, update_balance) .await; // If the transaction is relevant, and it's an asset lock, automatically fetch identities diff --git a/packages/rs-sdk-ffi/build.rs b/packages/rs-sdk-ffi/build.rs index 0564b587eef..7fb4da51cd8 100644 --- a/packages/rs-sdk-ffi/build.rs +++ b/packages/rs-sdk-ffi/build.rs @@ -23,7 +23,16 @@ fn main() { "/* This file is auto-generated. Do not modify manually. */\n/* Unified Dash SDK - includes both Core (SPV) and Platform functionality */".to_string(), ), after_includes: Some( - "/* Forward declarations for opaque types */\nstruct ShieldedPoolClient;\n".to_string(), + concat!( + "/* Forward declarations for opaque types */\n", + "struct ShieldedPoolClient;\n", + "\n", + "/* Forward declarations for dash-spv-ffi types used by the unified SDK.\n", + " * These allow the header to compile standalone. The full iOS build\n", + " * merges the complete dash_spv_ffi.h definitions via build_ios.sh. */\n", + "typedef struct FFIClientConfig FFIClientConfig;\n", + "typedef struct FFIDashSpvClient FFIDashSpvClient;\n", + ).to_string(), ), includes: vec![], sys_includes: vec!["stdint.h".to_string(), "stdbool.h".to_string()], diff --git a/packages/rs-sdk-ffi/build_ios.sh b/packages/rs-sdk-ffi/build_ios.sh index a72884a9eeb..a32aa238a94 100755 --- a/packages/rs-sdk-ffi/build_ios.sh +++ b/packages/rs-sdk-ffi/build_ios.sh @@ -78,7 +78,7 @@ fi RUST_DASHCORE_DIR="$PROJECT_ROOT/../rust-dashcore" HASHFILE="$PROJECT_ROOT/target/.rust_dashcore_ios_hash" if [[ -d "$RUST_DASHCORE_DIR" ]] && grep -q 'path.*rust-dashcore' "$PROJECT_ROOT/packages/rs-sdk-ffi/Cargo.toml" "$PROJECT_ROOT/packages/rs-dpp/Cargo.toml" 2>/dev/null; then - CURRENT_HASH=$(find "$RUST_DASHCORE_DIR/dash/src" "$RUST_DASHCORE_DIR/key-wallet/src" "$RUST_DASHCORE_DIR/dash-spv/src" "$RUST_DASHCORE_DIR/dash-spv-ffi/src" "$RUST_DASHCORE_DIR/key-wallet-manager/src" -name '*.rs' 2>/dev/null | sort | xargs cat 2>/dev/null | shasum -a 256 | cut -d' ' -f1) + CURRENT_HASH=$(find "$RUST_DASHCORE_DIR/dash/src" "$RUST_DASHCORE_DIR/key-wallet/src" "$RUST_DASHCORE_DIR/dash-spv/src" "$RUST_DASHCORE_DIR/dash-spv-ffi/src" -name '*.rs' 2>/dev/null | sort | xargs cat 2>/dev/null | shasum -a 256 | cut -d' ' -f1) PREV_HASH="" if [[ -f "$HASHFILE" ]]; then PREV_HASH=$(cat "$HASHFILE") @@ -95,7 +95,7 @@ if [[ "$CLEAN_BUILD" -eq 1 ]]; then cargo clean --release --target aarch64-apple-ios-sim -p rs-sdk-ffi 2>/dev/null || true cargo clean --release --target x86_64-apple-ios -p rs-sdk-ffi 2>/dev/null || true # Also clean path-dependency crates that cargo may cache - for pkg in dashcore key-wallet key-wallet-manager dash-spv dash-spv-ffi rs-platform-wallet rs-platform-wallet-ffi; do + for pkg in dashcore key-wallet dash-spv dash-spv-ffi rs-platform-wallet rs-platform-wallet-ffi; do cargo clean --release --target aarch64-apple-ios -p "$pkg" 2>/dev/null || true cargo clean --release --target aarch64-apple-ios-sim -p "$pkg" 2>/dev/null || true cargo clean --release --target x86_64-apple-ios -p "$pkg" 2>/dev/null || true @@ -186,6 +186,38 @@ RUST_DASHCORE_PATH="$PROJECT_ROOT/../rust-dashcore" KEY_WALLET_HEADER_PATH="$RUST_DASHCORE_PATH/key-wallet-ffi/include/key_wallet_ffi.h" SPV_HEADER_PATH="$RUST_DASHCORE_PATH/dash-spv-ffi/include/dash_spv_ffi.h" +# Generate missing FFI headers from rust-dashcore via a host build +# The build.rs in each crate runs cbindgen to produce the header under include/ +if [ -d "$RUST_DASHCORE_PATH" ]; then + if [ ! -f "$KEY_WALLET_HEADER_PATH" ] || [ ! -f "$SPV_HEADER_PATH" ]; then + echo -e "${GREEN}Generating FFI headers from rust-dashcore (host build)...${NC}" + pushd "$RUST_DASHCORE_PATH" >/dev/null + DASHCORE_CARGO_CMD="cargo" + if [ -n "${RUST_DASHCORE_TOOLCHAIN:-}" ]; then + DASHCORE_CARGO_CMD="cargo +${RUST_DASHCORE_TOOLCHAIN}" + fi + if [ ! -f "$KEY_WALLET_HEADER_PATH" ]; then + echo -ne " Generating key_wallet_ffi.h..." + if $DASHCORE_CARGO_CMD build --release -p key-wallet-ffi > /tmp/cargo_build_kwffi_host.log 2>&1; then + echo -e " ${GREEN}done${NC}" + else + echo -e " ${RED}failed${NC}" + cat /tmp/cargo_build_kwffi_host.log + fi + fi + if [ ! -f "$SPV_HEADER_PATH" ]; then + echo -ne " Generating dash_spv_ffi.h..." + if $DASHCORE_CARGO_CMD build --release -p dash-spv-ffi > /tmp/cargo_build_spvffi_host.log 2>&1; then + echo -e " ${GREEN}done${NC}" + else + echo -e " ${RED}failed${NC}" + cat /tmp/cargo_build_spvffi_host.log + fi + fi + popd >/dev/null + fi +fi + if [ -f "$KEY_WALLET_HEADER_PATH" ] && [ -f "$SPV_HEADER_PATH" ]; then # Create merged header with unified include guard MERGED_HEADER="$OUTPUT_DIR/dash_unified_ffi.h" @@ -210,8 +242,8 @@ extern "C" { // Forward declarations to ensure cross-refs compile regardless of merge order typedef struct FFIClientConfig FFIClientConfig; -// Provide explicit opaque definitions so Swift can import the type names -typedef struct FFIDashSpvClient { unsigned char _private[0]; } FFIDashSpvClient; +// Forward declarations so Swift can import the type names +struct FFIDashSpvClient; typedef struct FFIDashSpvClient FFIDashSpvClient; typedef struct FFIWallet { unsigned char _private[0]; } FFIWallet; typedef struct FFIAccount { unsigned char _private[0]; } FFIAccount; typedef struct FFIAccountCollection { unsigned char _private[0]; } FFIAccountCollection; @@ -348,9 +380,24 @@ EOF echo -e "${GREEN}✓ Headers merged successfully${NC}" else echo -e "${YELLOW}⚠ Key Wallet FFI or SPV FFI headers not found${NC}" - echo -e "${YELLOW} Please build key-wallet-ffi and dash-spv-ffi first:${NC}" - echo -e "${YELLOW} cd ../../../rust-dashcore/key-wallet-ffi && cargo build --release${NC}" - echo -e "${YELLOW} cd ../../../rust-dashcore/dash-spv-ffi && cargo build --release${NC}" + echo -e "${YELLOW} Patching dash_sdk_ffi.h with forward declarations as fallback...${NC}" + # Replace the #include "dash_spv_ffi.h" with forward declarations for the + # types that rs-sdk-ffi references from dash-spv-ffi, so the header compiles + # even without the external header file. + if [ -f "$OUTPUT_DIR/dash_sdk_ffi.h" ]; then + TEMP_HEADER=$(mktemp) + awk ' + /^#include "dash_spv_ffi\.h"/ { + print "/* dash_spv_ffi.h not available; forward declarations injected */" + print "struct FFIClientConfig; typedef struct FFIClientConfig FFIClientConfig;" + print "struct FFIDashSpvClient; typedef struct FFIDashSpvClient FFIDashSpvClient;" + next + } + { print } + ' "$OUTPUT_DIR/dash_sdk_ffi.h" > "$TEMP_HEADER" + mv "$TEMP_HEADER" "$OUTPUT_DIR/dash_sdk_ffi.h" + echo -e "${YELLOW} ⚠ Header patched with minimal forward declarations${NC}" + fi fi # Build dash-spv-ffi from local rust-dashcore for device and simulator diff --git a/packages/rs-sdk-ffi/include/dash_sdk_ffi.h b/packages/rs-sdk-ffi/include/dash_sdk_ffi.h index b57b79965e1..0e7b6041131 100644 --- a/packages/rs-sdk-ffi/include/dash_sdk_ffi.h +++ b/packages/rs-sdk-ffi/include/dash_sdk_ffi.h @@ -11,9 +11,14 @@ #include #include #include -#include -#include -#include "dash_spv_ffi.h" + +/* Forward declarations for types from dash-spv-ffi. + * When building the full unified SDK, the merge step in build_ios.sh replaces + * this header with one that includes the complete dash_spv_ffi.h definitions. + * These forward declarations keep the header self-contained for local use. */ +#ifndef DASH_SPV_FFI_H +typedef struct FFIClientConfig FFIClientConfig; +#endif // Authorized action takers for token operations typedef enum DashSDKAuthorizedActionTakers { diff --git a/packages/rs-sdk-ffi/src/unified.rs b/packages/rs-sdk-ffi/src/unified.rs index 1431a8e9fc1..334f5c6aac1 100644 --- a/packages/rs-sdk-ffi/src/unified.rs +++ b/packages/rs-sdk-ffi/src/unified.rs @@ -9,7 +9,7 @@ use std::ffi::c_char; use std::sync::atomic::{AtomicBool, Ordering}; use crate::types::{DashSDKConfig, SDKHandle}; -use dash_spv_ffi::{FFIClientConfig, FFIDashSpvClient}; +use dash_spv_ffi::{FFIClientConfig, FFIDashSpvClient, FFIEventCallbacks}; /// Static flag to track unified initialization static UNIFIED_INITIALIZED: AtomicBool = AtomicBool::new(false); @@ -72,7 +72,8 @@ pub unsafe extern "C" fn dash_unified_sdk_create( let config = &*config; // Create Core SDK client (always enabled in unified SDK) - let core_client = dash_spv_ffi::dash_spv_ffi_client_new(config.core_config); + let core_client = + dash_spv_ffi::dash_spv_ffi_client_new(config.core_config, FFIEventCallbacks::default()); // Create Platform SDK let platform_sdk_result = crate::dash_sdk_create(&config.platform_config); diff --git a/packages/rs-sdk/Cargo.toml b/packages/rs-sdk/Cargo.toml index 42d595eb1fd..bf398bd9d85 100644 --- a/packages/rs-sdk/Cargo.toml +++ b/packages/rs-sdk/Cargo.toml @@ -75,7 +75,6 @@ default = [ ] spv-client = [ "core_spv", - "core_key_wallet_manager", "core_key_wallet", "core_bincode", "core_key_wallet_bincode", @@ -146,14 +145,13 @@ core_verification = ["dpp/core_verification"] core_key_wallet = ["dpp/core_key_wallet"] core_key_wallet_serde = ["dpp/core_key_wallet_serde"] core_key_wallet_bincode = ["dpp/core_key_wallet_bincode"] -core_key_wallet_manager = ["dpp/core_key_wallet_manager"] core_key_wallet_bip38 = ["dpp/core_key_wallet_bip_38"] core_spv = ["dpp/core_spv"] core_rpc_client = ["dpp/core_rpc_client"] shielded = ["dep:grovedb-commitment-tree", "dpp/shielded-client"] # Platform wallet support -wallet = ["core_key_wallet_manager", "core_key_wallet",] +wallet = ["core_key_wallet"] [[example]] diff --git a/packages/swift-sdk/Sources/SwiftDashSDK/Core/SPV/SPVClient.swift b/packages/swift-sdk/Sources/SwiftDashSDK/Core/SPV/SPVClient.swift index a33193153b2..4593e56384f 100644 --- a/packages/swift-sdk/Sources/SwiftDashSDK/Core/SPV/SPVClient.swift +++ b/packages/swift-sdk/Sources/SwiftDashSDK/Core/SPV/SPVClient.swift @@ -34,7 +34,21 @@ class SPVClient: @unchecked Sendable { return false }() - init(network: Network = DashSDKNetwork(rawValue: 1), dataDir: String?, startHeight: UInt32) throws { + init( + network: Network = DashSDKNetwork(rawValue: 1), + dataDir: String?, + startHeight: UInt32, + progressHandler: SPVProgressUpdateEventHandler? = nil, + syncHandler: SPVSyncEventsHandler? = nil, + networkHandler: SPVNetworkEventsHandler? = nil, + walletHandler: SPVWalletEventsHandler? = nil + ) throws { + // Retain handlers so their pointers remain valid for the lifetime of the client + self.progressUpdateEventHandler = progressHandler + self.syncEventsHandler = syncHandler + self.networkEventsHandler = networkHandler + self.walletEventsHandler = walletHandler + if swiftLoggingEnabled { let level = (ProcessInfo.processInfo.environment["SPV_LOG"] ?? "off") print("[SPV][Log] Initialized SPV logging level=\(level)") @@ -118,8 +132,15 @@ class SPVClient: @unchecked Sendable { _ = dash_spv_ffi_config_set_start_from_height(configPtr, startHeight) - // Create client - let client = dash_spv_ffi_client_new(configPtr) + // Build unified event callbacks and create client + let callbacks = buildFFIEventCallbacks( + progressHandler: progressHandler, + syncHandler: syncHandler, + networkHandler: networkHandler, + walletHandler: walletHandler + ) + + let client = dash_spv_ffi_client_new(configPtr, callbacks) guard let client = client else { print("[SPV][Init] Failed to create client: \(SPVClient.getLastDashFFIError())") throw SPVError.initializationFailed @@ -159,86 +180,16 @@ class SPVClient: @unchecked Sendable { return String(cString: errorMsg) } - // MARK: - Event Handlers operations - - func setProgressUpdateEventHandler(_ handler: SPVProgressUpdateEventHandler) { - progressUpdateEventHandler = handler - - let result = dash_spv_ffi_client_set_progress_callback( - client, - handler.intoFFIProgressCallback() - ) - - assert(result == 0, "It should only fail if the client is nil, but client is not nil") - - // We dont receive an initial progress update from the client - // so we trigger one manually here - handler.onProgressUpdate(getSyncProgress()) - } - - func clearProgressUpdateEventHandler() { - progressUpdateEventHandler = nil - - let result = dash_spv_ffi_client_clear_progress_callback(client) - - assert(result == 0, "It should only fail if the client is nil, but client is not nil") - } - - func setSyncEventsHandler(_ handler: SPVSyncEventsHandler) { - syncEventsHandler = handler - - let result = dash_spv_ffi_client_set_sync_event_callbacks( - client, - handler.intoFFISyncEventCallbacks() - ) - - assert(result == 0, "It should only fail if the client is nil, but client is not nil") - } - - func clearSyncEventsHandler() { - syncEventsHandler = nil - - let result = dash_spv_ffi_client_clear_sync_event_callbacks(client) + // MARK: - Event Handlers + // + // Event handlers are now set at client creation time via FFIEventCallbacks. + // The new dashcore FFI uses a unified EventHandler pattern instead of + // individual callback setters. Pass handlers to the SPVClient init. - assert(result == 0, "It should only fail if the client is nil, but client is not nil") - } - - func setNetworkEventsHandler(_ handler: SPVNetworkEventsHandler) { - networkEventsHandler = handler - - let result = dash_spv_ffi_client_set_network_event_callbacks( - client, - handler.intoFFINetworkEventCallbacks() - ) - - assert(result == 0, "It should only fail if the client is nil, but client is not nil") - } - - func clearNetworkEventsHandler() { - networkEventsHandler = nil - - let result = dash_spv_ffi_client_clear_network_event_callbacks(client) - - assert(result == 0, "It should only fail if the client is nil, but client is not nil") - } - - func setWalletEventsHandler(_ handler: SPVWalletEventsHandler) { - walletEventsHandler = handler - - let result = dash_spv_ffi_client_set_wallet_event_callbacks( - client, - handler.intoFFIWalletEventCallbacks() - ) - - assert(result == 0, "It should only fail if the client is nil, but client is not nil") - } - - func clearWalletEventsHandler() { - walletEventsHandler = nil - - let result = dash_spv_ffi_client_clear_wallet_event_callbacks(client) - - assert(result == 0, "It should only fail if the client is nil, but client is not nil") + /// Trigger a manual progress update from the current sync state. + /// Useful for obtaining an initial progress snapshot after creation. + func triggerProgressUpdate() { + progressUpdateEventHandler?.onProgressUpdate(getSyncProgress()) } /// Enable/disable masternode sync. If the client is running, apply the update immediately. diff --git a/packages/swift-sdk/Sources/SwiftDashSDK/Core/SPV/SPVEventHandler.swift b/packages/swift-sdk/Sources/SwiftDashSDK/Core/SPV/SPVEventHandler.swift index e1e8e1fe64b..9b85cdbc11a 100644 --- a/packages/swift-sdk/Sources/SwiftDashSDK/Core/SPV/SPVEventHandler.swift +++ b/packages/swift-sdk/Sources/SwiftDashSDK/Core/SPV/SPVEventHandler.swift @@ -219,6 +219,8 @@ private func onSpvBlockProcessedCallbackC( height: UInt32, hashPtr: UnsafePointer?, newAddressCount: UInt32, + confirmedTxids: UnsafePointer?, + confirmedTxidCount: UInt32, userData: UnsafeMutableRawPointer? ) { let hash = bytePtrIntoData(hashPtr, 32) @@ -419,6 +421,7 @@ extension SPVWalletEventsHandler { func intoFFIWalletEventCallbacks() -> FFIWalletEventCallbacks { FFIWalletEventCallbacks( on_transaction_received: onSpvTransactionReceivedCallbackC, + on_transaction_status_changed: nil, on_balance_updated: onSpvBalanceUpdatedCallbackC, user_data: Unmanaged.passUnretained(self).toOpaque() ) @@ -427,6 +430,7 @@ extension SPVWalletEventsHandler { private func onSpvTransactionReceivedCallbackC( walletIdPtr: UnsafePointer?, + status: FFITransactionContext, accountIndex: UInt32, txidPtr: UnsafePointer?, amount: Int64, @@ -546,3 +550,39 @@ public func ffiSyncProgressPtrIntoSpvSyncProgress(_ ptr: UnsafePointer FFIEventCallbacks { + let progress: FFIProgressCallback = progressHandler?.intoFFIProgressCallback() + ?? FFIProgressCallback(on_progress: nil, user_data: nil) + + let sync: FFISyncEventCallbacks = syncHandler?.intoFFISyncEventCallbacks() + ?? FFISyncEventCallbacks() + + let network: FFINetworkEventCallbacks = networkHandler?.intoFFINetworkEventCallbacks() + ?? FFINetworkEventCallbacks() + + let wallet: FFIWalletEventCallbacks = walletHandler?.intoFFIWalletEventCallbacks() + ?? FFIWalletEventCallbacks() + + let error = FFIClientErrorCallback(on_error: nil, user_data: nil) + + return FFIEventCallbacks( + sync: sync, + network: network, + progress: progress, + wallet: wallet, + error: error + ) +} diff --git a/packages/swift-sdk/Sources/SwiftDashSDK/Core/Services/WalletService.swift b/packages/swift-sdk/Sources/SwiftDashSDK/Core/Services/WalletService.swift index f40f9ad8c9a..70818674235 100644 --- a/packages/swift-sdk/Sources/SwiftDashSDK/Core/Services/WalletService.swift +++ b/packages/swift-sdk/Sources/SwiftDashSDK/Core/Services/WalletService.swift @@ -124,18 +124,20 @@ public class WalletService: ObservableObject { network: network.sdkNetwork, dataDir: dataDir, startHeight: 0, + progressHandler: SPVProgressUpdateEventHandlerImpl(walletService: self), + syncHandler: SPVSyncEventsHandlerImpl(walletService: self), + networkHandler: SPVNetworkEventsHandlerImpl(walletService: self), + walletHandler: SPVWalletEventsHandlerImpl(walletService: self) ) - + self.spvClient = spvClient - + + // Trigger initial progress snapshot since the FFI won't send one until sync starts + spvClient.triggerProgressUpdate() + // Create the SDK wallet manager by reusing the SPV client's shared manager // TODO: Investigate this error self.walletManager = try! CoreWalletManager(spvClient: spvClient, modelContainer: modelContainer) - - spvClient.setProgressUpdateEventHandler(SPVProgressUpdateEventHandlerImpl(walletService: self)) - spvClient.setSyncEventsHandler(SPVSyncEventsHandlerImpl(walletService: self)) - spvClient.setNetworkEventsHandler(SPVNetworkEventsHandlerImpl(walletService: self)) - spvClient.setWalletEventsHandler(SPVWalletEventsHandlerImpl(walletService: self)) } deinit { @@ -164,13 +166,12 @@ public class WalletService: ObservableObject { network: self.self.network.sdkNetwork, dataDir: dataDir, startHeight: 0, + progressHandler: SPVProgressUpdateEventHandlerImpl(walletService: self), + syncHandler: SPVSyncEventsHandlerImpl(walletService: self), + networkHandler: SPVNetworkEventsHandlerImpl(walletService: self), + walletHandler: SPVWalletEventsHandlerImpl(walletService: self) ) - self.spvClient.setProgressUpdateEventHandler(SPVProgressUpdateEventHandlerImpl(walletService: self)) - self.spvClient.setSyncEventsHandler(SPVSyncEventsHandlerImpl(walletService: self)) - self.spvClient.setNetworkEventsHandler(SPVNetworkEventsHandlerImpl(walletService: self)) - self.spvClient.setWalletEventsHandler(SPVWalletEventsHandlerImpl(walletService: self)) - try! self.spvClient.setMasternodeSyncEnabled(self.masternodesEnabled) SDKLogger.log("✅ SPV Client initialized successfully for \(self.network.rawValue) (deferred start)", minimumLevel: .medium)