diff --git a/.yarn/cache/@unrs-resolver-binding-darwin-arm64-npm-1.11.1-c78d4bd2cb-10.zip b/.yarn/cache/@unrs-resolver-binding-darwin-arm64-npm-1.11.1-c78d4bd2cb-10.zip deleted file mode 100644 index c25b83d2ad6..00000000000 Binary files a/.yarn/cache/@unrs-resolver-binding-darwin-arm64-npm-1.11.1-c78d4bd2cb-10.zip and /dev/null differ diff --git a/.yarn/cache/@unrs-resolver-binding-linux-x64-gnu-npm-1.11.1-93a00570de-10.zip b/.yarn/cache/@unrs-resolver-binding-linux-x64-gnu-npm-1.11.1-93a00570de-10.zip new file mode 100644 index 00000000000..a5061a1a7eb Binary files /dev/null and b/.yarn/cache/@unrs-resolver-binding-linux-x64-gnu-npm-1.11.1-93a00570de-10.zip differ diff --git a/.yarn/cache/fsevents-patch-19706e7e35-10.zip b/.yarn/cache/fsevents-patch-19706e7e35-10.zip deleted file mode 100644 index aff1ab12ce5..00000000000 Binary files a/.yarn/cache/fsevents-patch-19706e7e35-10.zip and /dev/null differ diff --git a/Cargo.lock b/Cargo.lock index 59966e61806..b3a1efa99a0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -144,7 +144,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -155,7 +155,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -1137,7 +1137,7 @@ version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -1630,7 +1630,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?branch=feat%2Fmempool-support#450f72f5148b9fea2cd79bd1e37fa9d68a9fd18a" dependencies = [ "anyhow", "async-trait", @@ -1645,7 +1645,6 @@ dependencies = [ "hickory-resolver", "indexmap 2.13.0", "key-wallet", - "key-wallet-manager", "log", "rand 0.8.5", "rayon", @@ -1663,7 +1662,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?branch=feat%2Fmempool-support#450f72f5148b9fea2cd79bd1e37fa9d68a9fd18a" dependencies = [ "cbindgen 0.29.2", "clap", @@ -1673,7 +1672,6 @@ dependencies = [ "hex", "key-wallet", "key-wallet-ffi", - "key-wallet-manager", "libc", "log", "once_cell", @@ -1688,7 +1686,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?branch=feat%2Fmempool-support#450f72f5148b9fea2cd79bd1e37fa9d68a9fd18a" dependencies = [ "anyhow", "base64-compat", @@ -1713,12 +1711,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?branch=feat%2Fmempool-support#450f72f5148b9fea2cd79bd1e37fa9d68a9fd18a" [[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?branch=feat%2Fmempool-support#450f72f5148b9fea2cd79bd1e37fa9d68a9fd18a" dependencies = [ "dashcore-rpc-json", "hex", @@ -1731,7 +1729,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?branch=feat%2Fmempool-support#450f72f5148b9fea2cd79bd1e37fa9d68a9fd18a" dependencies = [ "bincode", "dashcore", @@ -1746,7 +1744,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?branch=feat%2Fmempool-support#450f72f5148b9fea2cd79bd1e37fa9d68a9fd18a" dependencies = [ "bincode", "dashcore-private", @@ -1956,7 +1954,6 @@ dependencies = [ "json-schema-compatibility-validator", "jsonschema", "key-wallet", - "key-wallet-manager", "lazy_static", "log", "nohash-hasher", @@ -2308,7 +2305,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -3625,7 +3622,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -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?branch=feat%2Fmempool-support#450f72f5148b9fea2cd79bd1e37fa9d68a9fd18a" 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?branch=feat%2Fmempool-support#450f72f5148b9fea2cd79bd1e37fa9d68a9fd18a" 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" @@ -4339,7 +4321,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -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", @@ -5111,7 +5092,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7" dependencies = [ - "heck 0.5.0", + "heck 0.4.1", "itertools 0.14.0", "log", "multimap", @@ -6010,7 +5991,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.12.1", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -6069,7 +6050,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -6658,7 +6639,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -6890,7 +6871,7 @@ dependencies = [ "getrandom 0.4.2", "once_cell", "rustix 1.1.4", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -8296,7 +8277,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index c4993e32ad8..c616f2f2ef3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,12 +47,11 @@ members = [ ] [workspace.dependencies] -dashcore = { git = "https://github.com/dashpay/rust-dashcore", rev = "42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" } -dash-spv = { git = "https://github.com/dashpay/rust-dashcore", rev = "42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" } -dash-spv-ffi = { git = "https://github.com/dashpay/rust-dashcore", rev = "42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" } -key-wallet = { git = "https://github.com/dashpay/rust-dashcore", rev = "42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" } -key-wallet-manager = { git = "https://github.com/dashpay/rust-dashcore", rev = "42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" } -dashcore-rpc = { git = "https://github.com/dashpay/rust-dashcore", rev = "42eb1d698d4f178d3a8a80c72c9c0f9bbeddcc3e" } +dashcore = { git = "https://github.com/dashpay/rust-dashcore", branch = "feat/mempool-support" } +dash-spv = { git = "https://github.com/dashpay/rust-dashcore", branch = "feat/mempool-support" } +dash-spv-ffi = { git = "https://github.com/dashpay/rust-dashcore", branch = "feat/mempool-support" } +key-wallet = { git = "https://github.com/dashpay/rust-dashcore", branch = "feat/mempool-support" } +dashcore-rpc = { git = "https://github.com/dashpay/rust-dashcore", branch = "feat/mempool-support" } # 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..1fcf55b4863 100644 --- a/packages/rs-dpp/Cargo.toml +++ b/packages/rs-dpp/Cargo.toml @@ -25,7 +25,6 @@ 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", @@ -33,7 +32,6 @@ dashcore = { workspace = true, features = [ "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,7 @@ 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_manager = ["dep:key-wallet"] 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..b9c08571286 100644 --- a/packages/rs-dpp/src/lib.rs +++ b/packages/rs-dpp/src/lib.rs @@ -13,7 +13,7 @@ pub use dashcore; pub use key_wallet; #[cfg(feature = "core_key_wallet_manager")] -pub use key_wallet_manager; +pub use key_wallet as 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/v0/mod.rs b/packages/rs-drive-abci/src/platform_types/masternode/v0/mod.rs index 43e9dba0359..d4c26e60a1e 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 @@ -98,7 +98,7 @@ impl From for MasternodeListItem { pub struct MasternodeStateV0 { /// Masternode's network service address. #[bincode(with_serde)] - pub service: SocketAddr, + pub service: Option, /// Block height when the masternode was registered. pub registered_height: u32, 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..02daedeea23 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,6 +37,7 @@ impl NewValidatorIfMasternodeInState for ValidatorV0 { return None; }; let platform_node_id = (*platform_node_id)?; + let service = (*service)?; Some(ValidatorV0 { pro_tx_hash, public_key, 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..ea05551f503 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 + .expect("service address") + .port(); 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 + .expect("service address") + .port(); 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/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..c7c323027c0 100644 --- a/packages/rs-platform-wallet/src/lib.rs +++ b/packages/rs-platform-wallet/src/lib.rs @@ -22,4 +22,4 @@ pub use managed_identity::ManagedIdentity; pub use platform_wallet_info::PlatformWalletInfo; #[cfg(feature = "manager")] -pub use key_wallet_manager; +pub use key_wallet as 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..4bd51b151b7 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 @@ -1,6 +1,6 @@ use crate::platform_wallet_info::PlatformWalletInfo; use crate::IdentityManager; -use dashcore::{Address as DashAddress, Network, Transaction}; +use dashcore::{Address as DashAddress, Network, Transaction, Txid}; use dpp::prelude::CoreBlockHeight; use key_wallet::account::{ManagedAccountCollection, TransactionRecord}; use key_wallet::wallet::managed_wallet_info::wallet_info_interface::WalletInfoInterface; @@ -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: &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/src/platform/fetch.rs b/packages/rs-sdk/src/platform/fetch.rs index 520e442b13b..ecd5fab3984 100644 --- a/packages/rs-sdk/src/platform/fetch.rs +++ b/packages/rs-sdk/src/platform/fetch.rs @@ -158,47 +158,8 @@ where query: Q, settings: Option, ) -> Result<(Option, ResponseMetadata, Proof), Error> { - let request: &::Request = &query.query(sdk.prove())?; - - let fut = |settings: RequestSettings| async move { - let ExecutionResponse { - address, - retries, - inner: response, - } = request - .clone() - .execute(sdk, settings) - .await - .map_err(|execution_error| execution_error.inner_into())?; - - let object_type = std::any::type_name::().to_string(); - tracing::trace!(request = ?request, response = ?response, ?address, retries, object_type, "fetched object from platform"); - - let (object, response_metadata, proof): (Option, ResponseMetadata, Proof) = sdk - .parse_proof_with_metadata_and_proof(request.clone(), response) - .await - .map_err(|e| ExecutionError { - inner: e, - address: Some(address.clone()), - retries, - })?; - - match object { - Some(item) => Ok((item.into(), response_metadata, proof)), - None => Ok((None, response_metadata, proof)), - } - .map(|x| ExecutionResponse { - inner: x, - address, - retries, - }) - }; - - let settings = sdk - .dapi_client_settings - .override_by(settings.unwrap_or_default()); - - retry(sdk.address_list(), settings, fut).await.into_inner() + let request = query.query(sdk.prove())?; + fetch_with_metadata_and_proof_impl(sdk, request, settings).await } /// Fetch single object from Platform. @@ -249,6 +210,67 @@ where } } +/// Standalone helper for the default `Fetch::fetch_with_metadata_and_proof`. +/// +/// Extracting the retry + closure logic into a free `async fn` breaks the +/// HRTB Send inference chain that prevents `tokio::spawn` from proving the +/// resulting future is Send. +async fn fetch_with_metadata_and_proof_impl( + sdk: &Sdk, + request: R, + settings: Option, +) -> Result<(Option, ResponseMetadata, Proof), Error> +where + T: Sized + + Debug + + MockResponse + + Send + + FromProof::Response>, + R: TransportRequest + Into<>::Request>, +{ + let request = &request; + + let fut = |settings: RequestSettings| async move { + let ExecutionResponse { + address, + retries, + inner: response, + } = request + .clone() + .execute(sdk, settings) + .await + .map_err(|execution_error| execution_error.inner_into())?; + + let object_type = std::any::type_name::().to_string(); + tracing::trace!(request = ?request, response = ?response, ?address, retries, object_type, "fetched object from platform"); + + let (object, response_metadata, proof): (Option, ResponseMetadata, Proof) = sdk + .parse_proof_with_metadata_and_proof(request.clone(), response) + .await + .map_err(|e| ExecutionError { + inner: e, + address: Some(address.clone()), + retries, + })?; + + match object { + Some(item) => Ok((item.into(), response_metadata, proof)), + None => Ok((None, response_metadata, proof)), + } + .map(|x| ExecutionResponse { + inner: x, + address, + retries, + }) + }; + + let settings = sdk + .dapi_client_settings + .override_by(settings.unwrap_or_default()); + + retry(sdk.address_list(), settings, fut).await.into_inner() +} + impl Fetch for Identity { type Request = IdentityRequest; } diff --git a/packages/rs-sdk/src/platform/fetch_many.rs b/packages/rs-sdk/src/platform/fetch_many.rs index e19a256ffb1..73707426dd6 100644 --- a/packages/rs-sdk/src/platform/fetch_many.rs +++ b/packages/rs-sdk/src/platform/fetch_many.rs @@ -207,51 +207,8 @@ where query: Q, settings: Option, ) -> Result<(O, ResponseMetadata, Proof), Error> { - let request = &query.query(sdk.prove())?; - - let fut = |settings: RequestSettings| async move { - let ExecutionResponse { - address, - retries, - inner: response, - } = request - .clone() - .execute(sdk, settings) - .await - .map_err(|e| e.inner_into())?; - - let object_type = std::any::type_name::().to_string(); - tracing::trace!( - request = ?request, - response = ?response, - ?address, - retries, - object_type, - "fetched objects from platform" - ); - - sdk.parse_proof_with_metadata_and_proof::<>::Request, O>( - request.clone(), - response, - ) - .await - .map_err(|e| ExecutionError { - inner: e, - address: Some(address.clone()), - retries, - }) - .map(|(o, metadata, proof)| ExecutionResponse { - inner: (o.unwrap_or_default(), metadata, proof), - retries, - address: address.clone(), - }) - }; - - let settings = sdk - .dapi_client_settings - .override_by(settings.unwrap_or_default()); - - retry(sdk.address_list(), settings, fut).await.into_inner() + let request = query.query(sdk.prove())?; + fetch_many_with_metadata_and_proof_impl(sdk, request, settings).await } /// Fetch multiple objects from Platform by their identifiers. @@ -306,6 +263,67 @@ where } } +/// Standalone helper for the default `FetchMany::fetch_many_with_metadata_and_proof`. +/// +/// Extracting the retry + closure logic into a free `async fn` breaks the +/// HRTB Send inference chain that prevents `tokio::spawn` from proving the +/// resulting future is Send. +async fn fetch_many_with_metadata_and_proof_impl( + sdk: &Sdk, + request: R, + settings: Option, +) -> Result<(O, ResponseMetadata, Proof), Error> +where + R: TransportRequest + Into<>::Request>, + O: FromProof::Response> + + MockResponse + + Send + + Default, +{ + let request = &request; + + let fut = |settings: RequestSettings| async move { + let ExecutionResponse { + address, + retries, + inner: response, + } = request + .clone() + .execute(sdk, settings) + .await + .map_err(|e| e.inner_into())?; + + let object_type = std::any::type_name::().to_string(); + tracing::trace!( + request = ?request, + response = ?response, + ?address, + retries, + object_type, + "fetched objects from platform" + ); + + sdk.parse_proof_with_metadata_and_proof::(request.clone(), response) + .await + .map_err(|e| ExecutionError { + inner: e, + address: Some(address.clone()), + retries, + }) + .map(|(o, metadata, proof)| ExecutionResponse { + inner: (o.unwrap_or_default(), metadata, proof), + retries, + address: address.clone(), + }) + }; + + let settings = sdk + .dapi_client_settings + .override_by(settings.unwrap_or_default()); + + retry(sdk.address_list(), settings, fut).await.into_inner() +} + /// Fetch documents from Platform. /// /// Returns [Documents](dpp::document::Document) indexed by their [Identifier](dpp::prelude::Identifier). @@ -462,7 +480,6 @@ impl FetchMany for ContestedResource { /// ## Supported query types /// /// * [`ContestedDocumentVotePollDriveQuery`](drive::query::vote_poll_vote_state_query::ContestedDocumentVotePollDriveQuery) -#[async_trait::async_trait] impl FetchMany for ContenderWithSerializedDocument { type Request = GetContestedResourceVoteStateRequest; } diff --git a/packages/rs-sdk/src/platform/fetch_unproved.rs b/packages/rs-sdk/src/platform/fetch_unproved.rs index b368f87d3a3..e738b5010c7 100644 --- a/packages/rs-sdk/src/platform/fetch_unproved.rs +++ b/packages/rs-sdk/src/platform/fetch_unproved.rs @@ -70,46 +70,65 @@ where Response = <::Request as TransportRequest>::Response, >, { - // Default implementation - let request: &::Request = &query.query(false)?; - let closure = move |local_settings: RequestSettings| async move { - // Execute the request using the Sdk instance - let ExecutionResponse { - inner: response, - address, - retries, - } = request - .clone() - .execute(sdk, local_settings) - .await - .map_err(|e| e.inner_into())?; + let request = query.query(false)?; + fetch_unproved_with_settings_impl(sdk, request, settings).await + } +} + +/// Standalone helper for the default `FetchUnproved::fetch_unproved_with_settings`. +/// +/// Extracting the retry + closure logic into a free `async fn` breaks the +/// HRTB Send inference chain that prevents `tokio::spawn` from proving the +/// resulting future is Send. +async fn fetch_unproved_with_settings_impl( + sdk: &Sdk, + request: R, + settings: RequestSettings, +) -> Result<(Option, ResponseMetadata), Error> +where + T: Sized + + Debug + + Send + + FromUnproved::Response>, + R: TransportRequest, +{ + let request = &request; - // Parse the response into the appropriate type along with metadata - let (object, metadata): (Option, platform_proto::ResponseMetadata) = - Self::maybe_from_unproved_with_metadata( - request.clone(), - response, - sdk.network, - sdk.version(), - ) - .map_err(|e| ExecutionError { - inner: e.into(), - address: Some(address.clone()), - retries, - })?; + let closure = move |local_settings: RequestSettings| async move { + let ExecutionResponse { + inner: response, + address, + retries, + } = request + .clone() + .execute(sdk, local_settings) + .await + .map_err(|e| e.inner_into())?; - Ok(ExecutionResponse { - inner: (object, metadata), - address, + let (object, metadata): (Option, platform_proto::ResponseMetadata) = + T::maybe_from_unproved_with_metadata( + request.clone(), + response, + sdk.network, + sdk.version(), + ) + .map_err(|e| ExecutionError { + inner: e.into(), + address: Some(address.clone()), retries, - }) - }; + })?; - let settings = sdk.dapi_client_settings.override_by(settings); - retry(sdk.address_list(), settings, closure) - .await - .into_inner() - } + Ok(ExecutionResponse { + inner: (object, metadata), + address, + retries, + }) + }; + + let settings = sdk.dapi_client_settings.override_by(settings); + retry(sdk.address_list(), settings, closure) + .await + .into_inner() } impl FetchUnproved for drive_proof_verifier::types::CurrentQuorumsInfo {