From 830e7a730dfd288f31ae73b6b1fee5599139e83b Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Wed, 13 Mar 2024 13:22:43 +0530 Subject: [PATCH 01/29] Add draft version of the function to get total_space_pledged --- src/backend/node.rs | 71 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/src/backend/node.rs b/src/backend/node.rs index f674b602..0257b8e1 100644 --- a/src/backend/node.rs +++ b/src/backend/node.rs @@ -286,6 +286,77 @@ fn get_total_account_balance( Some(account_data.free + account_data.reserved + account_data.frozen) } +// defined here: https://github.com/subspace/subspace/blob/5d8b65740ff054b01ebcbaf5a905e74274c1a5d0/crates/subspace-core-primitives/src/pieces.rs#L803 +const PIECE_SIZE: usize = 1048672/* the actual piece size from your runtime */; + +// defined here: https://github.com/subspace/subspace/blob/5d8b65740ff054b01ebcbaf5a905e74274c1a5d0/test/subspace-test-runtime/src/lib.rs#L152-L154 +const SLOT_PROBABILITY: (u64, u64) = (1, 1); + +// defined here: https://github.com/subspace/subspace/blob/5d8b65740ff054b01ebcbaf5a905e74274c1a5d0/crates/subspace-runtime/src/lib.rs#L104 +const MAX_PIECES_IN_SECTOR: u16 = 1000; +struct Record; +impl Record { + // defined here: https://github.com/subspace/subspace/blob/5d8b65740ff054b01ebcbaf5a905e74274c1a5d0/crates/subspace-core-primitives/src/pieces.rs#L385 + pub const NUM_CHUNKS: usize = 32768; + + // defined here:https://github.com/subspace/subspace/blob/5d8b65740ff054b01ebcbaf5a905e74274c1a5d0/crates/subspace-core-primitives/src/pieces.rs#L389-L390 + const NUM_S_BUCKETS: usize = 65536; +} + +// defined type to match with that of runtime storage. +type SolutionRange = u64; + +/// Computes the following: +/// ``` +/// MAX * slot_probability / (pieces_in_sector * chunks / s_buckets) / sectors +/// ``` +const fn sectors_to_solution_range(sectors: u64) -> SolutionRange { + let solution_range = SolutionRange::MAX + // Account for slot probability + / SLOT_PROBABILITY.1 * SLOT_PROBABILITY.0 + // Now take sector size and probability of hitting occupied s-bucket in sector into account + / (MAX_PIECES_IN_SECTOR as u64 * Record::NUM_CHUNKS as u64 / Record::NUM_S_BUCKETS as u64); + + // Take number of sectors into account + solution_range / sectors +} + +/// Get the latest total space pledged +fn get_total_space_pledged( + client: &FullClient, + // TODO: may need to replace with None or something to indicate as latest block. + block_hash: H256, + solution_range_storage_key: &StorageKey, +) -> Option { + // Method-1: + // Fetch the initial solution range from storage + let current_solution_range: SolutionRange = + match client.storage(block_hash, solution_range_storage_key) { + Ok(stored_value) => { + let data = stored_value.unwrap_or_default().0; + u64::decode(&mut &data[..]).expect("Decoding of u64 failed") + } + Err(error) => { + tracing::error!("Failed to query initial solution range: {}", error); + return None; + } + }; + + // Method-2: + // TODO: Get the solution range from sectors may be instead of the fetching from runtime storage + // Also, sectors can be calculated based on my space pledged. E.g. if 2 GB, then 1 sector max. + // let current_solution_range = sectors_to_solution_range(1); + + // Calculate the total space pledged + let total_space_pledged: u128 = u128::from(u64::MAX) + .saturating_mul(PIECE_SIZE as u128) + .saturating_mul(u128::from(SLOT_PROBABILITY.0)) + / u128::from(current_solution_range) + / u128::from(SLOT_PROBABILITY.1); + + Some(total_space_pledged) +} + pub(super) fn load_chain_specification(chain_spec: &'static [u8]) -> Result { GenericChainSpec::<()>::from_json_bytes(chain_spec) .map(|chain_spec| ChainSpec(Box::new(chain_spec))) From 23f1e13b3c1ca751d7501681f0e4cd7ccab527fb Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Wed, 13 Mar 2024 13:24:55 +0530 Subject: [PATCH 02/29] Add a TODO for optimize fn --- src/backend/node.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backend/node.rs b/src/backend/node.rs index 0257b8e1..988688db 100644 --- a/src/backend/node.rs +++ b/src/backend/node.rs @@ -348,6 +348,7 @@ fn get_total_space_pledged( // let current_solution_range = sectors_to_solution_range(1); // Calculate the total space pledged + // TODO: optimize this snippet with checked arithmetics. let total_space_pledged: u128 = u128::from(u64::MAX) .saturating_mul(PIECE_SIZE as u128) .saturating_mul(u128::from(SLOT_PROBABILITY.0)) From c44268b4d667ffe5084d647ab946fe06742f676f Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Thu, 14 Mar 2024 05:46:42 +0530 Subject: [PATCH 03/29] Add code to fetch info from sp_api runtime api calls To calculate total_space_pledged, get: a. solution_ranges currrent value b. chain constants like slot_probability --- Cargo.lock | 1314 ++++++++++++++++++++++++------ metadata/subspace_metadata.scale | Bin 0 -> 93868 bytes src/backend/node.rs | 132 +-- 3 files changed, 1124 insertions(+), 322 deletions(-) create mode 100644 metadata/subspace_metadata.scale diff --git a/Cargo.lock b/Cargo.lock index 251e91cf..6e9c6c1d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -722,6 +722,15 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + [[package]] name = "arrayvec" version = "0.7.4" @@ -1002,6 +1011,24 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "async-signal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" +dependencies = [ + "async-io 2.3.2", + "async-lock 2.8.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.31", + "signal-hook-registry", + "slab", + "windows-sys 0.48.0", +] + [[package]] name = "async-task" version = "4.7.1" @@ -1300,6 +1327,16 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "blake2-rfc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +dependencies = [ + "arrayvec 0.4.12", + "constant_time_eq 0.1.5", +] + [[package]] name = "blake2b_simd" version = "1.0.2" @@ -1307,8 +1344,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", - "arrayvec", - "constant_time_eq", + "arrayvec 0.7.4", + "constant_time_eq 0.3.0", ] [[package]] @@ -1318,8 +1355,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" dependencies = [ "arrayref", - "arrayvec", - "constant_time_eq", + "arrayvec 0.7.4", + "constant_time_eq 0.3.0", ] [[package]] @@ -1329,10 +1366,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" dependencies = [ "arrayref", - "arrayvec", + "arrayvec 0.7.4", "cc", "cfg-if", - "constant_time_eq", + "constant_time_eq 0.3.0", "rayon", ] @@ -1887,6 +1924,12 @@ dependencies = [ "tiny-keccak", ] +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + [[package]] name = "constant_time_eq" version = "0.3.0" @@ -2156,9 +2199,9 @@ dependencies = [ "sc-transaction-pool-api", "sc-utils", "sp-blockchain", - "sp-core", + "sp-core 21.0.0", "sp-messenger", - "sp-runtime", + "sp-runtime 24.0.0", "tracing", ] @@ -2181,6 +2224,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.19" @@ -2315,6 +2367,76 @@ dependencies = [ "parking_lot_core 0.9.10", ] +[[package]] +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core 0.14.4", + "darling_macro 0.14.4", +] + +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core 0.20.8", + "darling_macro 0.20.8", +] + +[[package]] +name = "darling_core" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.52", +] + +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core 0.14.4", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core 0.20.8", + "quote", + "syn 2.0.52", +] + [[package]] name = "data-encoding" version = "2.6.0" @@ -2588,7 +2710,7 @@ dependencies = [ "ark-serialize", "ark-std", "ark-transcript", - "arrayvec", + "arrayvec 0.7.4", "zeroize", ] @@ -2639,14 +2761,14 @@ dependencies = [ "sp-api", "sp-block-fees", "sp-blockchain", - "sp-core", + "sp-core 21.0.0", "sp-domains", "sp-executive", - "sp-externalities", + "sp-externalities 0.19.0", "sp-inherents", "sp-messenger", - "sp-runtime", - "sp-state-machine", + "sp-runtime 24.0.0", + "sp-state-machine 0.28.0", "sp-timestamp", "sp-version", "subspace-core-primitives", @@ -2666,9 +2788,9 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-core", - "sp-runtime", - "sp-weights", + "sp-core 21.0.0", + "sp-runtime 24.0.0", + "sp-weights 20.0.0", "subspace-core-primitives", "subspace-runtime-primitives", ] @@ -2679,6 +2801,12 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + [[package]] name = "dtoa" version = "1.0.9" @@ -2779,6 +2907,21 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ed25519-zebra" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" +dependencies = [ + "curve25519-dalek 4.1.2", + "ed25519", + "hashbrown 0.14.3", + "hex", + "rand_core 0.6.4", + "sha2 0.10.8", + "zeroize", +] + [[package]] name = "either" version = "1.11.0" @@ -2948,6 +3091,17 @@ dependencies = [ "pin-project-lite 0.2.14", ] +[[package]] +name = "event-listener" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b5fb89194fa3cad959b833185b3063ba881dbfc7030680b314250779fb4cc91" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite 0.2.13", +] + [[package]] name = "event-listener-primitives" version = "2.0.1" @@ -2979,6 +3133,16 @@ dependencies = [ "pin-project-lite 0.2.14", ] +[[package]] +name = "event-listener-strategy" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feedafcaa9b749175d5ac357452a9d41ea2911da598fde46ce1fe02c37751291" +dependencies = [ + "event-listener 5.2.0", + "pin-project-lite 0.2.13", +] + [[package]] name = "exit-future" version = "0.2.0" @@ -3232,11 +3396,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-std", + "sp-core 21.0.0", + "sp-io 23.0.0", + "sp-runtime 24.0.0", + "sp-runtime-interface 17.0.0", + "sp-std 8.0.0", ] [[package]] @@ -3260,13 +3424,13 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-std", - "sp-storage", + "sp-application-crypto 23.0.0", + "sp-core 21.0.0", + "sp-io 23.0.0", + "sp-runtime 24.0.0", + "sp-runtime-interface 17.0.0", + "sp-std 8.0.0", + "sp-storage 13.0.0", "static_assertions", ] @@ -3292,7 +3456,7 @@ dependencies = [ "bitflags 1.3.2", "docify", "environmental", - "frame-metadata", + "frame-metadata 16.0.0", "frame-support-procedural", "impl-trait-for-tuples", "k256", @@ -3311,14 +3475,14 @@ dependencies = [ "sp-debug-derive", "sp-genesis-builder", "sp-inherents", - "sp-io", + "sp-io 23.0.0", "sp-metadata-ir", - "sp-runtime", + "sp-runtime 24.0.0", "sp-staking", - "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-weights", + "sp-state-machine 0.28.0", + "sp-std 8.0.0", + "sp-tracing 10.0.0", + "sp-weights 20.0.0", "static_assertions", "tt-call", ] @@ -3376,12 +3540,12 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 21.0.0", + "sp-io 23.0.0", + "sp-runtime 24.0.0", + "sp-std 8.0.0", "sp-version", - "sp-weights", + "sp-weights 20.0.0", ] [[package]] @@ -4117,6 +4281,7 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash 0.8.11", "allocator-api2", + "serde", ] [[package]] @@ -4483,17 +4648,25 @@ dependencies = [ "tokio", "tokio-rustls 0.25.0", "tower-service", + "tracing", + "want", ] [[package]] +name = "hyper-rustls" +version = "0.24.2" name = "hyper-util" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" dependencies = [ "bytes", "futures-channel", "futures-util", + "http 0.2.12", + "hyper", + "log", "http 1.1.0", "http-body 1.0.0", "hyper 1.3.1", @@ -4698,6 +4871,12 @@ dependencies = [ "hashbrown 0.14.5", ] +[[package]] +name = "indexmap-nostd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" + [[package]] name = "indoc" version = "2.0.5" @@ -4851,18 +5030,30 @@ version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfdb12a2381ea5b2e68c3469ec604a007b367778cdb14d09612c8069ebd616ad" dependencies = [ - "jsonrpsee-client-transport", - "jsonrpsee-core", - "jsonrpsee-http-client", + "jsonrpsee-client-transport 0.16.3", + "jsonrpsee-core 0.16.3", + "jsonrpsee-http-client 0.16.3", "jsonrpsee-proc-macros", "jsonrpsee-server", - "jsonrpsee-types", + "jsonrpsee-types 0.16.3", "jsonrpsee-wasm-client", "jsonrpsee-ws-client", "tokio", "tracing", ] +[[package]] +name = "jsonrpsee" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9579d0ca9fb30da026bac2f0f7d9576ec93489aeb7cd4971dd5b4617d82c79b2" +dependencies = [ + "jsonrpsee-client-transport 0.21.0", + "jsonrpsee-core 0.21.0", + "jsonrpsee-http-client 0.21.0", + "jsonrpsee-types 0.21.0", +] + [[package]] name = "jsonrpsee-client-transport" version = "0.22.5" @@ -4887,6 +5078,27 @@ dependencies = [ "webpki-roots 0.26.1", ] +[[package]] +name = "jsonrpsee-client-transport" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9f9ed46590a8d5681975f126e22531698211b926129a40a2db47cbca429220" +dependencies = [ + "futures-util", + "http 0.2.12", + "jsonrpsee-core 0.21.0", + "pin-project", + "rustls-native-certs 0.7.0", + "rustls-pki-types", + "soketto", + "thiserror", + "tokio", + "tokio-rustls 0.25.0", + "tokio-util", + "tracing", + "url", +] + [[package]] name = "jsonrpsee-core" version = "0.22.5" @@ -4913,6 +5125,30 @@ dependencies = [ "wasm-bindgen-futures", ] +[[package]] +name = "jsonrpsee-core" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "776d009e2f591b78c038e0d053a796f94575d66ca4e77dd84bfc5e81419e436c" +dependencies = [ + "anyhow", + "async-lock 3.3.0", + "async-trait", + "beef", + "futures-timer", + "futures-util", + "hyper", + "jsonrpsee-types 0.21.0", + "pin-project", + "rustc-hash", + "serde", + "serde_json", + "thiserror", + "tokio", + "tokio-stream", + "tracing", +] + [[package]] name = "jsonrpsee-http-client" version = "0.22.5" @@ -4928,6 +5164,26 @@ dependencies = [ "serde_json", "thiserror", "tokio", + "tracing", +] + +[[package]] +name = "jsonrpsee-http-client" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b7de9f3219d95985eb77fd03194d7c1b56c19bce1abfcc9d07462574b15572" +dependencies = [ + "async-trait", + "hyper", + "hyper-rustls", + "jsonrpsee-core 0.21.0", + "jsonrpsee-types 0.21.0", + "tower", + "url", + "serde", + "serde_json", + "thiserror", + "tokio", "tower", "tracing", "url", @@ -4983,15 +5239,28 @@ dependencies = [ "thiserror", ] +[[package]] +name = "jsonrpsee-types" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3266dfb045c9174b24c77c2dfe0084914bb23a6b2597d70c9dc6018392e1cd1b" +dependencies = [ + "anyhow", + "beef", + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "jsonrpsee-wasm-client" version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f448d8eacd945cc17b6c0b42c361531ca36a962ee186342a97cdb8fca679cd77" dependencies = [ - "jsonrpsee-client-transport", - "jsonrpsee-core", - "jsonrpsee-types", + "jsonrpsee-client-transport 0.16.3", + "jsonrpsee-core 0.16.3", + "jsonrpsee-types 0.16.3", ] [[package]] @@ -5445,7 +5714,7 @@ version = "0.43.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39d5ef876a2b2323d63c258e63c2f8e36f205fe5a11f0b3095d59635650790ff" dependencies = [ - "arrayvec", + "arrayvec 0.7.4", "asynchronous-codec 0.6.2", "bytes", "either", @@ -5473,7 +5742,7 @@ version = "0.45.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cc5767727d062c4eac74dd812c998f0e488008e82cce9c33b463d38423f9ad2" dependencies = [ - "arrayvec", + "arrayvec 0.7.4", "asynchronous-codec 0.7.0", "bytes", "either", @@ -6395,7 +6664,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daa3eb39495d8e2e2947a1d862852c90cc6a4a8845f8b41c8829cb9fcc047f4a" dependencies = [ "arrayref", - "arrayvec", + "arrayvec 0.7.4", "bitflags 1.3.2", "blake2 0.10.6", "c2-chacha", @@ -6427,9 +6696,9 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-beefy", - "sp-core", + "sp-core 21.0.0", "sp-mmr-primitives", - "sp-runtime", + "sp-runtime 24.0.0", ] [[package]] @@ -6442,9 +6711,9 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core", + "sp-core 21.0.0", "sp-mmr-primitives", - "sp-runtime", + "sp-runtime 24.0.0", ] [[package]] @@ -6858,7 +7127,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ - "arrayvec", + "arrayvec 0.7.4", "itoa", ] @@ -6878,6 +7147,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", + "num-bigint", "num-integer", "num-traits", ] @@ -7116,8 +7386,8 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-runtime", - "sp-std", + "sp-runtime 24.0.0", + "sp-std 8.0.0", ] [[package]] @@ -7131,58 +7401,58 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core", - "sp-io", + "sp-core 21.0.0", + "sp-io 23.0.0", "sp-mmr-primitives", - "sp-runtime", - "sp-std", + "sp-runtime 24.0.0", + "sp-std 8.0.0", ] [[package]] name = "pallet-transaction-payment" -version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ "frame-support", "frame-system", "parity-scale-codec", "scale-info", "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "sp-core 21.0.0", + "sp-io 23.0.0", + "sp-runtime 24.0.0", + "sp-std 8.0.0", ] [[package]] name = "pallet-transaction-payment-rpc" -version = "30.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ - "jsonrpsee", + "jsonrpsee 0.16.3", "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", "sp-api", "sp-blockchain", - "sp-core", + "sp-core 21.0.0", "sp-rpc", - "sp-runtime", - "sp-weights", + "sp-runtime 24.0.0", + "sp-weights 20.0.0", ] [[package]] name = "pallet-transaction-payment-rpc-runtime-api" -version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", "sp-api", - "sp-runtime", - "sp-weights", + "sp-runtime 24.0.0", + "sp-weights 20.0.0", ] [[package]] +version = "28.0.0" +source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" +version = "30.0.0" +source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" +version = "28.0.0" +source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" name = "pango" version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7207,19 +7477,6 @@ dependencies = [ "system-deps", ] -[[package]] -name = "parity-bip39" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" -dependencies = [ - "bitcoin_hashes", - "rand", - "rand_core 0.6.4", - "serde", - "unicode-normalization", -] - [[package]] name = "parity-db" version = "0.4.13" @@ -7234,9 +7491,8 @@ dependencies = [ "log", "lz4", "memmap2 0.5.10", - "parking_lot 0.12.2", "rand", - "siphasher", + "siphasher 0.3.11", "snap", "winapi", ] @@ -7247,7 +7503,7 @@ version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" dependencies = [ - "arrayvec", + "arrayvec 0.7.4", "bitvec", "byte-slice-cast", "bytes", @@ -7259,6 +7515,20 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" version = "3.6.9" +[[package]] +name = "parity-bip39" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" +dependencies = [ + "bitcoin_hashes", + "rand", + "rand_core 0.6.4", + "serde", + "unicode-normalization", +] + + "parking_lot 0.12.2", source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" dependencies = [ @@ -7373,6 +7643,15 @@ dependencies = [ "password-hash", ] +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "pem" version = "1.1.1" @@ -8692,6 +8971,17 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +[[package]] +name = "ruzstd" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" +dependencies = [ + "byteorder", + "derive_more", + "twox-hash", +] + [[package]] name = "rw-stream-sink" version = "0.3.0" @@ -8750,8 +9040,8 @@ version = "23.0.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ "log", - "sp-core", - "sp-wasm-interface", + "sp-core 21.0.0", + "sp-wasm-interface 14.0.0", "thiserror", ] @@ -8771,9 +9061,9 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 21.0.0", "sp-inherents", - "sp-runtime", + "sp-runtime 24.0.0", "substrate-prometheus-endpoint", ] @@ -8786,10 +9076,10 @@ dependencies = [ "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core", + "sp-core 21.0.0", "sp-inherents", - "sp-runtime", - "sp-trie", + "sp-runtime 24.0.0", + "sp-trie 22.0.0", ] [[package]] @@ -8813,9 +9103,9 @@ dependencies = [ "sp-core", "sp-crypto-hashing", "sp-genesis-builder", - "sp-io", - "sp-runtime", - "sp-state-machine", + "sp-io 23.0.0", + "sp-runtime 24.0.0", + "sp-state-machine 0.28.0", ] [[package]] @@ -8845,14 +9135,14 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 21.0.0", "sp-database", - "sp-externalities", - "sp-runtime", - "sp-state-machine", + "sp-externalities 0.19.0", + "sp-runtime 24.0.0", + "sp-state-machine 0.28.0", "sp-statement-store", - "sp-storage", - "sp-trie", + "sp-storage 13.0.0", + "sp-trie 22.0.0", "substrate-prometheus-endpoint", ] @@ -8872,13 +9162,13 @@ dependencies = [ "sc-client-api", "sc-state-db", "schnellru", - "sp-arithmetic", + "sp-arithmetic 16.0.0", "sp-blockchain", - "sp-core", + "sp-core 21.0.0", "sp-database", - "sp-runtime", - "sp-state-machine", - "sp-trie", + "sp-runtime 24.0.0", + "sp-state-machine 0.28.0", + "sp-trie 22.0.0", ] [[package]] @@ -8900,9 +9190,9 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", - "sp-runtime", - "sp-state-machine", + "sp-core 21.0.0", + "sp-runtime 24.0.0", + "sp-state-machine 0.28.0", "substrate-prometheus-endpoint", "thiserror", "tokio", @@ -8921,14 +9211,14 @@ dependencies = [ "sc-client-api", "sc-consensus", "sc-telemetry", - "sp-arithmetic", + "sp-arithmetic 16.0.0", "sp-blockchain", "sp-consensus", "sp-consensus-slots", - "sp-core", + "sp-core 21.0.0", "sp-inherents", - "sp-runtime", - "sp-state-machine", + "sp-runtime 24.0.0", + "sp-state-machine 0.28.0", ] [[package]] @@ -8958,10 +9248,10 @@ dependencies = [ "sp-consensus", "sp-consensus-slots", "sp-consensus-subspace", - "sp-core", + "sp-core 21.0.0", "sp-inherents", "sp-objects", - "sp-runtime", + "sp-runtime 24.0.0", "subspace-archiving", "subspace-core-primitives", "subspace-proof-of-space", @@ -8979,7 +9269,7 @@ dependencies = [ "async-oneshot", "futures", "futures-timer", - "jsonrpsee", + "jsonrpsee 0.16.3", "lru 0.12.3", "parity-scale-codec", "parking_lot 0.12.2", @@ -8992,9 +9282,9 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-subspace", - "sp-core", + "sp-core 21.0.0", "sp-objects", - "sp-runtime", + "sp-runtime 24.0.0", "subspace-archiving", "subspace-core-primitives", "subspace-farmer-components", @@ -9014,12 +9304,12 @@ dependencies = [ "sp-api", "sp-auto-id", "sp-blockchain", - "sp-core", + "sp-core 21.0.0", "sp-domains", - "sp-externalities", - "sp-io", + "sp-externalities 0.19.0", + "sp-io 23.0.0", "sp-messenger-host-functions", - "sp-runtime", + "sp-runtime 24.0.0", "sp-subspace-mmr", ] @@ -9035,14 +9325,14 @@ dependencies = [ "sc-executor-wasmtime", "schnellru", "sp-api", - "sp-core", - "sp-externalities", - "sp-io", - "sp-panic-handler", - "sp-runtime-interface", - "sp-trie", + "sp-core 21.0.0", + "sp-externalities 0.19.0", + "sp-io 23.0.0", + "sp-panic-handler 8.0.0", + "sp-runtime-interface 17.0.0", + "sp-trie 22.0.0", "sp-version", - "sp-wasm-interface", + "sp-wasm-interface 14.0.0", "tracing", ] @@ -9054,7 +9344,7 @@ dependencies = [ "polkavm", "sc-allocator", "sp-maybe-compressed-blob", - "sp-wasm-interface", + "sp-wasm-interface 14.0.0", "thiserror", "wasm-instrument", ] @@ -9083,8 +9373,8 @@ dependencies = [ "rustix 0.36.17", "sc-allocator", "sc-executor-common", - "sp-runtime-interface", - "sp-wasm-interface", + "sp-runtime-interface 17.0.0", + "sp-wasm-interface 14.0.0", "wasmtime", ] @@ -9102,7 +9392,7 @@ dependencies = [ "sc-network-common", "sc-network-sync", "sp-blockchain", - "sp-runtime", + "sp-runtime 24.0.0", ] [[package]] @@ -9113,9 +9403,9 @@ dependencies = [ "array-bytes 6.2.2", "parking_lot 0.12.2", "serde_json", - "sp-application-crypto", - "sp-core", - "sp-keystore", + "sp-application-crypto 23.0.0", + "sp-core 21.0.0", + "sp-keystore 0.27.0", "thiserror", ] @@ -9125,7 +9415,7 @@ version = "0.4.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ "array-bytes 4.2.0", - "arrayvec", + "arrayvec 0.7.4", "blake2 0.10.6", "bytes", "futures", @@ -9141,10 +9431,10 @@ dependencies = [ "sc-transaction-pool-api", "sp-api", "sp-consensus", - "sp-core", - "sp-keystore", + "sp-core 21.0.0", + "sp-keystore 0.27.0", "sp-mixnet", - "sp-runtime", + "sp-runtime 24.0.0", "thiserror", ] @@ -9178,10 +9468,10 @@ dependencies = [ "serde", "serde_json", "smallvec", - "sp-arithmetic", + "sp-arithmetic 16.0.0", "sp-blockchain", - "sp-core", - "sp-runtime", + "sp-core 21.0.0", + "sp-runtime 24.0.0", "substrate-prometheus-endpoint", "thiserror", "tokio", @@ -9206,7 +9496,7 @@ dependencies = [ "sc-client-api", "sc-network", "sp-blockchain", - "sp-runtime", + "sp-runtime 24.0.0", "thiserror", "unsigned-varint 0.7.2", ] @@ -9225,7 +9515,7 @@ dependencies = [ "sc-consensus", "sp-consensus", "sp-consensus-grandpa", - "sp-runtime", + "sp-runtime 24.0.0", ] [[package]] @@ -9242,7 +9532,7 @@ dependencies = [ "sc-network-common", "sc-network-sync", "schnellru", - "sp-runtime", + "sp-runtime 24.0.0", "substrate-prometheus-endpoint", "tracing", ] @@ -9263,8 +9553,8 @@ dependencies = [ "sc-client-api", "sc-network", "sp-blockchain", - "sp-core", - "sp-runtime", + "sp-core 21.0.0", + "sp-runtime 24.0.0", "thiserror", ] @@ -9292,12 +9582,12 @@ dependencies = [ "sc-utils", "schnellru", "smallvec", - "sp-arithmetic", + "sp-arithmetic 16.0.0", "sp-blockchain", "sp-consensus", "sp-consensus-grandpa", - "sp-core", - "sp-runtime", + "sp-core 21.0.0", + "sp-runtime 24.0.0", "substrate-prometheus-endpoint", "thiserror", "tokio", @@ -9319,7 +9609,7 @@ dependencies = [ "sc-network-sync", "sc-utils", "sp-consensus", - "sp-runtime", + "sp-runtime 24.0.0", "substrate-prometheus-endpoint", ] @@ -9348,11 +9638,11 @@ dependencies = [ "sc-transaction-pool-api", "sc-utils", "sp-api", - "sp-core", - "sp-externalities", - "sp-keystore", + "sp-core 21.0.0", + "sp-externalities 0.19.0", + "sp-keystore 0.27.0", "sp-offchain", - "sp-runtime", + "sp-runtime 24.0.0", "threadpool", "tracing", ] @@ -9380,7 +9670,7 @@ dependencies = [ "sp-consensus-slots", "sp-consensus-subspace", "sp-inherents", - "sp-runtime", + "sp-runtime 24.0.0", "subspace-core-primitives", "subspace-proof-of-time", "thread-priority", @@ -9403,7 +9693,7 @@ version = "29.0.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ "futures", - "jsonrpsee", + "jsonrpsee 0.16.3", "log", "parity-scale-codec", "parking_lot 0.12.2", @@ -9418,11 +9708,11 @@ dependencies = [ "serde_json", "sp-api", "sp-blockchain", - "sp-core", - "sp-keystore", + "sp-core 21.0.0", + "sp-keystore 0.27.0", "sp-offchain", "sp-rpc", - "sp-runtime", + "sp-runtime 24.0.0", "sp-session", "sp-statement-store", "sp-version", @@ -9434,7 +9724,7 @@ name = "sc-rpc-api" version = "0.33.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ - "jsonrpsee", + "jsonrpsee 0.16.3", "parity-scale-codec", "sc-chain-spec", "sc-mixnet", @@ -9442,9 +9732,9 @@ dependencies = [ "scale-info", "serde", "serde_json", - "sp-core", + "sp-core 21.0.0", "sp-rpc", - "sp-runtime", + "sp-runtime 24.0.0", "sp-version", "thiserror", ] @@ -9476,7 +9766,7 @@ dependencies = [ "futures", "futures-util", "hex", - "jsonrpsee", + "jsonrpsee 0.16.3", "log", "parity-scale-codec", "parking_lot 0.12.2", @@ -9489,9 +9779,9 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core", + "sp-core 21.0.0", "sp-rpc", - "sp-runtime", + "sp-runtime 24.0.0", "sp-version", "thiserror", "tokio", @@ -9508,7 +9798,7 @@ dependencies = [ "exit-future", "futures", "futures-timer", - "jsonrpsee", + "jsonrpsee 0.16.3", "log", "parity-scale-codec", "parking_lot 0.12.2", @@ -9542,16 +9832,16 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core", - "sp-externalities", - "sp-keystore", - "sp-runtime", + "sp-core 21.0.0", + "sp-externalities 0.19.0", + "sp-keystore 0.27.0", + "sp-runtime 24.0.0", "sp-session", - "sp-state-machine", - "sp-storage", + "sp-state-machine 0.28.0", + "sp-storage 13.0.0", "sp-transaction-pool", "sp-transaction-storage-proof", - "sp-trie", + "sp-trie 22.0.0", "sp-version", "static_init", "substrate-prometheus-endpoint", @@ -9581,7 +9871,7 @@ dependencies = [ "clap 4.5.4", "fs4 0.7.0", "log", - "sp-core", + "sp-core 21.0.0", "thiserror", "tokio", ] @@ -9676,10 +9966,10 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core", + "sp-core 21.0.0", "sp-rpc", - "sp-runtime", - "sp-tracing", + "sp-runtime 24.0.0", + "sp-tracing 10.0.0", "thiserror", "tracing", "tracing-log 0.1.4", @@ -9735,8 +10025,8 @@ dependencies = [ "parity-scale-codec", "serde", "sp-blockchain", - "sp-core", - "sp-runtime", + "sp-core 21.0.0", + "sp-runtime 24.0.0", "thiserror", ] @@ -9752,7 +10042,74 @@ dependencies = [ "log", "parking_lot 0.12.2", "prometheus", - "sp-arithmetic", + "sp-arithmetic 16.0.0", +] + +[[package]] +name = "scale-bits" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "036575c29af9b6e4866ffb7fa055dbf623fe7a9cc159b33786de6013a6969d89" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "scale-decode" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7caaf753f8ed1ab4752c6afb20174f03598c664724e0e32628e161c21000ff76" +dependencies = [ + "derive_more", + "parity-scale-codec", + "primitive-types", + "scale-bits", + "scale-decode-derive", + "scale-info", + "smallvec", +] + +[[package]] +name = "scale-decode-derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3475108a1b62c7efd1b5c65974f30109a598b2f45f23c9ae030acb9686966db" +dependencies = [ + "darling 0.14.4", + "proc-macro-crate 1.1.3", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scale-encode" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d70cb4b29360105483fac1ed567ff95d65224a14dd275b6303ed0a654c78de5" +dependencies = [ + "derive_more", + "parity-scale-codec", + "primitive-types", + "scale-bits", + "scale-encode-derive", + "scale-info", + "smallvec", +] + +[[package]] +name = "scale-encode-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "995491f110efdc6bea96d6a746140e32bfceb4ea47510750a5467295a4707a25" +dependencies = [ + "darling 0.14.4", + "proc-macro-crate 1.1.3", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -9781,6 +10138,39 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "scale-typegen" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00860983481ac590ac87972062909bef0d6a658013b592ccc0f2feb272feab11" +dependencies = [ + "proc-macro2", + "quote", + "scale-info", + "syn 2.0.52", + "thiserror", +] + +[[package]] +name = "scale-value" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58223c7691bf0bd46b43c9aea6f0472d1067f378d574180232358d7c6e0a8089" +dependencies = [ + "base58", + "blake2 0.10.6", + "derive_more", + "either", + "frame-metadata 15.1.0", + "parity-scale-codec", + "scale-bits", + "scale-decode", + "scale-encode", + "scale-info", + "serde", + "yap", +] + [[package]] name = "schannel" version = "0.1.23" @@ -9809,7 +10199,7 @@ checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" dependencies = [ "aead", "arrayref", - "arrayvec", + "arrayvec 0.7.4", "curve25519-dalek 4.1.2", "getrandom_or_panic", "merlin", @@ -10152,6 +10542,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" +[[package]] +name = "simple-mermaid" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" + [[package]] name = "simple_moving_average" version = "1.0.2" @@ -10167,6 +10563,12 @@ version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +[[package]] +name = "siphasher" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54ac45299ccbd390721be55b412d41931911f654fa99e2cb8bfb57184b2061fe" + [[package]] name = "slab" version = "0.4.9" @@ -10188,6 +10590,114 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +[[package]] +name = "smol" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e635339259e51ef85ac7aa29a1cd991b957047507288697a690e80ab97d07cad" +dependencies = [ + "async-channel 2.2.0", + "async-executor", + "async-fs", + "async-io 2.3.2", + "async-lock 3.3.0", + "async-net", + "async-process", + "blocking", + "futures-lite 2.2.0", +] + +[[package]] +name = "smoldot" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d1eaa97d77be4d026a1e7ffad1bb3b78448763b357ea6f8188d3e6f736a9b9" +dependencies = [ + "arrayvec 0.7.4", + "async-lock 3.3.0", + "atomic-take", + "base64 0.21.7", + "bip39", + "blake2-rfc", + "bs58 0.5.0", + "chacha20", + "crossbeam-queue", + "derive_more", + "ed25519-zebra 4.0.3", + "either", + "event-listener 4.0.3", + "fnv", + "futures-lite 2.2.0", + "futures-util", + "hashbrown 0.14.3", + "hex", + "hmac 0.12.1", + "itertools 0.12.1", + "libm", + "libsecp256k1", + "merlin", + "no-std-net", + "nom", + "num-bigint", + "num-rational", + "num-traits", + "pbkdf2 0.12.2", + "pin-project", + "poly1305", + "rand", + "rand_chacha", + "ruzstd", + "schnorrkel", + "serde", + "serde_json", + "sha2 0.10.8", + "sha3", + "siphasher 1.0.0", + "slab", + "smallvec", + "soketto", + "twox-hash", + "wasmi", + "x25519-dalek 2.0.1", + "zeroize", +] + +[[package]] +name = "smoldot-light" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5496f2d116b7019a526b1039ec2247dd172b8670633b1a64a614c9ea12c9d8c7" +dependencies = [ + "async-channel 2.2.0", + "async-lock 3.3.0", + "base64 0.21.7", + "blake2-rfc", + "derive_more", + "either", + "event-listener 4.0.3", + "fnv", + "futures-channel", + "futures-lite 2.2.0", + "futures-util", + "hashbrown 0.14.3", + "hex", + "itertools 0.12.1", + "log", + "lru 0.12.3", + "no-std-net", + "parking_lot 0.12.1", + "pin-project", + "rand", + "rand_chacha", + "serde", + "serde_json", + "siphasher 1.0.0", + "slab", + "smol", + "smoldot", + "zeroize", +] + [[package]] name = "snap" version = "1.1.1" @@ -10258,8 +10768,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api-proc-macro", - "sp-core", - "sp-externalities", + "sp-core 21.0.0", + "sp-externalities 0.19.0", "sp-metadata-ir", "sp-runtime", "sp-runtime-interface", @@ -10287,14 +10797,28 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "30.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" +source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-core 21.0.0", + "sp-io 23.0.0", + "sp-std 8.0.0", +] + +[[package]] +name = "sp-application-crypto" +version = "30.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e4fe7a9b7fa9da76272b201e2fb3c7900d97d32a46b66af9a04dad457f73c71" dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core", - "sp-io", - "sp-std", + "sp-core 28.0.0", + "sp-io 30.0.0", + "sp-std 14.0.0", ] [[package]] @@ -10308,7 +10832,22 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-std", + "sp-std 8.0.0", + "static_assertions", +] + +[[package]] +name = "sp-arithmetic" +version = "23.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f42721f072b421f292a072e8f52a3b3c0fbc27428f0c9fe24067bc47046bad63" +dependencies = [ + "integer-sqrt", + "num-traits", + "parity-scale-codec", + "scale-info", + "serde", + "sp-std 14.0.0", "static_assertions", ] @@ -10363,7 +10902,7 @@ dependencies = [ "domain-runtime-primitives", "parity-scale-codec", "sp-inherents", - "sp-std", + "sp-std 8.0.0", ] [[package]] @@ -10379,8 +10918,8 @@ dependencies = [ "sp-api", "sp-consensus", "sp-database", - "sp-runtime", - "sp-state-machine", + "sp-runtime 24.0.0", + "sp-state-machine 0.28.0", "thiserror", ] @@ -10392,10 +10931,10 @@ dependencies = [ "async-trait", "futures", "log", - "sp-core", + "sp-core 21.0.0", "sp-inherents", - "sp-runtime", - "sp-state-machine", + "sp-runtime 24.0.0", + "sp-state-machine 0.28.0", "thiserror", ] @@ -10458,15 +10997,15 @@ dependencies = [ "scale-info", "schnorrkel", "sp-api", - "sp-application-crypto", + "sp-application-crypto 23.0.0", "sp-consensus-slots", - "sp-core", - "sp-externalities", + "sp-core 21.0.0", + "sp-externalities 0.19.0", "sp-inherents", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-std", + "sp-io 23.0.0", + "sp-runtime 24.0.0", + "sp-runtime-interface 17.0.0", + "sp-std 8.0.0", "sp-timestamp", "subspace-core-primitives", "subspace-proof-of-space", @@ -10486,7 +11025,7 @@ dependencies = [ "bounded-collections", "bs58 0.5.1", "dyn-clonable", - "ed25519-zebra", + "ed25519-zebra 3.1.0", "futures", "hash-db", "hash256-std-hasher", @@ -10583,13 +11122,24 @@ dependencies = [ "syn 2.0.60", ] +[[package]] +name = "sp-debug-derive" +version = "14.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d09fa0a5f7299fb81ee25ae3853d26200f7a348148aed6de76be905c007dbe" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + [[package]] name = "sp-domain-digests" version = "0.1.0" source = "git+https://github.com/subspace/subspace?rev=d0aaf1039764f1271c2c79f266ea7f64f984cd16#d0aaf1039764f1271c2c79f266ea7f64f984cd16" dependencies = [ "parity-scale-codec", - "sp-runtime", + "sp-runtime 24.0.0", ] [[package]] @@ -10610,15 +11160,15 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-application-crypto", - "sp-core", - "sp-runtime", - "sp-runtime-interface", - "sp-state-machine", - "sp-std", - "sp-trie", + "sp-application-crypto 23.0.0", + "sp-core 21.0.0", + "sp-runtime 24.0.0", + "sp-runtime-interface 17.0.0", + "sp-state-machine 0.28.0", + "sp-std 8.0.0", + "sp-trie 22.0.0", "sp-version", - "sp-weights", + "sp-weights 20.0.0", "subspace-core-primitives", "subspace-runtime-primitives", "trie-db", @@ -10641,7 +11191,7 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus-slots", - "sp-core", + "sp-core 21.0.0", "sp-domain-digests", "sp-domains", "sp-externalities", @@ -10759,7 +11309,7 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-core", + "sp-core 21.0.0", "sp-domains", "sp-inherents", "sp-mmr-primitives", @@ -10779,12 +11329,12 @@ dependencies = [ "scale-info", "sp-api", "sp-blockchain", - "sp-core", + "sp-core 21.0.0", "sp-domains", - "sp-externalities", + "sp-externalities 0.19.0", "sp-messenger", - "sp-runtime", - "sp-runtime-interface", + "sp-runtime 24.0.0", + "sp-runtime-interface 17.0.0", ] [[package]] @@ -10792,7 +11342,7 @@ name = "sp-metadata-ir" version = "0.6.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ - "frame-metadata", + "frame-metadata 16.0.0", "parity-scale-codec", "scale-info", ] @@ -10841,8 +11391,8 @@ version = "26.0.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ "sp-api", - "sp-core", - "sp-runtime", + "sp-core 21.0.0", + "sp-runtime 24.0.0", ] [[package]] @@ -10855,6 +11405,17 @@ dependencies = [ "regex", ] +[[package]] +name = "sp-panic-handler" +version = "13.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8f5a17a0a11de029a8b811cb6e8b32ce7e02183cc04a3e965c383246798c416" +dependencies = [ + "backtrace", + "lazy_static", + "regex", +] + [[package]] name = "sp-rpc" version = "26.0.0" @@ -10862,7 +11423,7 @@ source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08 dependencies = [ "rustc-hash", "serde", - "sp-core", + "sp-core 21.0.0", ] [[package]] @@ -10880,13 +11441,38 @@ dependencies = [ "rand", "scale-info", "serde", - "simple-mermaid", - "sp-application-crypto", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-std", - "sp-weights", + "simple-mermaid 0.1.0", + "sp-application-crypto 23.0.0", + "sp-arithmetic 16.0.0", + "sp-core 21.0.0", + "sp-io 23.0.0", + "sp-std 8.0.0", + "sp-weights 20.0.0", +] + +[[package]] +name = "sp-runtime" +version = "31.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3bb49a4475d390198dfd3d41bef4564ab569fbaf1b5e38ae69b35fc01199d91" +dependencies = [ + "docify", + "either", + "hash256-std-hasher", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "paste", + "rand", + "scale-info", + "serde", + "simple-mermaid 0.1.1", + "sp-application-crypto 30.0.0", + "sp-arithmetic 23.0.0", + "sp-core 28.0.0", + "sp-io 30.0.0", + "sp-std 14.0.0", + "sp-weights 27.0.0", ] [[package]] @@ -10899,26 +11485,59 @@ dependencies = [ "parity-scale-codec", "polkavm-derive", "primitive-types", - "sp-externalities", - "sp-runtime-interface-proc-macro", - "sp-std", - "sp-storage", - "sp-tracing", - "sp-wasm-interface", + "sp-externalities 0.19.0", + "sp-runtime-interface-proc-macro 11.0.0", + "sp-std 8.0.0", + "sp-storage 13.0.0", + "sp-tracing 10.0.0", + "sp-wasm-interface 14.0.0", + "static_assertions", +] + +[[package]] +name = "sp-runtime-interface" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f66b66d8cec3d785fa6289336c1d9cbd4305d5d84f7134378c4d79ed7983e6fb" +dependencies = [ + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec", + "primitive-types", + "sp-externalities 0.25.0", + "sp-runtime-interface-proc-macro 17.0.0", + "sp-std 14.0.0", + "sp-storage 19.0.0", + "sp-tracing 16.0.0", + "sp-wasm-interface 20.0.0", "static_assertions", ] [[package]] name = "sp-runtime-interface-proc-macro" +dependencies = [ + "Inflector", + "expander", + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", +] + version = "17.0.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" + "syn 2.0.60", +[[package]] +name = "sp-runtime-interface-proc-macro" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfaf6e85b2ec12a4b99cd6d8d57d083e30c94b7f1b0d8f93547121495aae6f0c" dependencies = [ "Inflector", "expander", "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.52", ] [[package]] @@ -10929,9 +11548,9 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api", - "sp-core", - "sp-keystore", - "sp-runtime", + "sp-core 21.0.0", + "sp-keystore 0.27.0", + "sp-runtime 24.0.0", "sp-staking", ] @@ -10997,6 +11616,12 @@ name = "sp-std" version = "14.0.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" +[[package]] +name = "sp-std" +version = "14.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8ee986414b0a9ad741776762f4083cd3a5128449b982a3919c4df36874834" + [[package]] name = "sp-storage" version = "19.0.0" @@ -11018,8 +11643,8 @@ dependencies = [ "scale-info", "sp-api", "sp-blockchain", - "sp-core", - "sp-externalities", + "sp-core 21.0.0", + "sp-externalities 0.19.0", "sp-mmr-primitives", "sp-runtime", "sp-runtime-interface", @@ -11055,7 +11680,7 @@ version = "26.0.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ "sp-api", - "sp-runtime", + "sp-runtime 24.0.0", ] [[package]] @@ -11066,7 +11691,7 @@ dependencies = [ "async-trait", "parity-scale-codec", "scale-info", - "sp-core", + "sp-core 21.0.0", "sp-inherents", "sp-runtime", "sp-trie", @@ -11198,9 +11823,9 @@ dependencies = [ "serde_json", "simple_moving_average", "sp-consensus-subspace", - "sp-core", + "sp-core 21.0.0", "sp-domains-fraud-proof", - "sp-runtime", + "sp-runtime 24.0.0", "subspace-core-primitives", "subspace-erasure-coding", "subspace-fake-runtime-api", @@ -11601,8 +12226,8 @@ version = "0.1.0" source = "git+https://github.com/subspace/subspace?rev=d0aaf1039764f1271c2c79f266ea7f64f984cd16#d0aaf1039764f1271c2c79f266ea7f64f984cd16" dependencies = [ "pallet-transaction-payment", - "sp-core", - "sp-runtime", + "sp-core 21.0.0", + "sp-runtime 24.0.0", "subspace-core-primitives", ] @@ -11617,7 +12242,7 @@ dependencies = [ "frame-system-rpc-runtime-api", "futures", "hex", - "jsonrpsee", + "jsonrpsee 0.16.3", "mmr-gadget", "mmr-rpc", "pallet-transaction-payment-rpc", @@ -11655,17 +12280,17 @@ dependencies = [ "sp-consensus", "sp-consensus-slots", "sp-consensus-subspace", - "sp-core", + "sp-core 21.0.0", "sp-domains", "sp-domains-fraud-proof", - "sp-externalities", - "sp-io", + "sp-externalities 0.19.0", + "sp-io 23.0.0", "sp-messenger", "sp-messenger-host-functions", "sp-mmr-primitives", "sp-objects", "sp-offchain", - "sp-runtime", + "sp-runtime 24.0.0", "sp-session", "sp-subspace-mmr", "sp-timestamp", @@ -11728,7 +12353,7 @@ source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08 dependencies = [ "frame-system-rpc-runtime-api", "futures", - "jsonrpsee", + "jsonrpsee 0.16.3", "log", "parity-scale-codec", "sc-rpc-api", @@ -11736,8 +12361,8 @@ dependencies = [ "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core", - "sp-runtime", + "sp-core 21.0.0", + "sp-runtime 24.0.0", ] [[package]] @@ -11764,6 +12389,110 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +[[package]] +name = "subxt" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3323d5c27898b139d043dc1ee971f602f937b99354ee33ee933bd90e0009fbd" +dependencies = [ + "async-trait", + "base58", + "blake2 0.10.6", + "derivative", + "either", + "frame-metadata 16.0.0", + "futures", + "hex", + "impl-serde", + "instant", + "jsonrpsee 0.21.0", + "parity-scale-codec", + "primitive-types", + "scale-bits", + "scale-decode", + "scale-encode", + "scale-info", + "scale-value", + "serde", + "serde_json", + "sp-core 28.0.0", + "sp-core-hashing 15.0.0", + "sp-runtime 31.0.1", + "subxt-lightclient", + "subxt-macro", + "subxt-metadata", + "thiserror", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "subxt-codegen" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d0e58c3f88651cff26aa52bae0a0a85f806a2e923a20eb438c16474990743ea" +dependencies = [ + "frame-metadata 16.0.0", + "heck", + "hex", + "jsonrpsee 0.21.0", + "parity-scale-codec", + "proc-macro2", + "quote", + "scale-info", + "scale-typegen", + "subxt-metadata", + "syn 2.0.52", + "thiserror", + "tokio", +] + +[[package]] +name = "subxt-lightclient" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecec7066ba7bc0c3608fcd1d0c7d9584390990cd06095b6ae4f114f74c4b8550" +dependencies = [ + "futures", + "futures-util", + "serde", + "serde_json", + "smoldot-light", + "thiserror", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "subxt-macro" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "365251668613323064803427af8c7c7bc366cd8b28e33639640757669dafebd5" +dependencies = [ + "darling 0.20.8", + "parity-scale-codec", + "proc-macro-error", + "quote", + "scale-typegen", + "subxt-codegen", + "syn 2.0.52", +] + +[[package]] +name = "subxt-metadata" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c02aca8d39a1f6c55fff3a8fd81557d30a610fedc1cef03f889a81bc0f8f0b52" +dependencies = [ + "frame-metadata 16.0.0", + "parity-scale-codec", + "scale-info", + "sp-core-hashing 15.0.0", + "thiserror", +] + [[package]] name = "supports-color" version = "3.0.0" @@ -12083,6 +12812,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" +dependencies = [ + "rustls 0.22.2", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.15" @@ -12776,6 +13516,37 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wasmi" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7" +dependencies = [ + "smallvec", + "spin 0.9.8", + "wasmi_arena", + "wasmi_core", + "wasmparser-nostd", +] + +[[package]] +name = "wasmi_arena" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" + +[[package]] +name = "wasmi_core" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a" +dependencies = [ + "downcast-rs", + "libm", + "num-traits", + "paste", +] + [[package]] name = "wasmparser" version = "0.102.0" @@ -12786,6 +13557,15 @@ dependencies = [ "url", ] +[[package]] +name = "wasmparser-nostd" +version = "0.100.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9157cab83003221bfd385833ab587a039f5d6fa7304854042ba358a3b09e0724" +dependencies = [ + "indexmap-nostd", +] + [[package]] name = "wasmtime" version = "8.0.1" @@ -13606,6 +14386,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "yap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4524214bc4629eba08d78ceb1d6507070cc0bcbbed23af74e19e6e924a24cf" + [[package]] name = "yasna" version = "0.5.2" diff --git a/metadata/subspace_metadata.scale b/metadata/subspace_metadata.scale new file mode 100644 index 0000000000000000000000000000000000000000..06f35793248460d618727207022de02f3efb7de5 GIT binary patch literal 93868 zcmc${4`3YEnIHDv?tolMOM7*O5-5RkqYHEgUY8qC27M3@(g7qu12ITK1SnHBRbYV~ z0BbIGp`BflaHLjFX)$@89?T``%{ID!+4bkID~*TT82rW-zeY z+}>(6ij%9Wjdr~?TY2|QN_ooD{s-G*zv;jGraS3TWqqYo4*yeqS(VR?tToGp$73uLinc3#ZDhvhG*?y1z~@3R)^CJ+#`WhwaUv85XpEI#@eK-J^J` z*|<=xbQTxG_S#x?wHnl0$@+x~I_TH&?vyG3%s$nhAKxn1YC&shrCckc^RU0Qy%mJ< zy58VXd8Y?dK^NAVK`@|gnbLkU2!rN@pb{?}SZg*u9Mt1Q{cE-IdN`U0A z)BvE^s|I^Ok*Mma0bOVxx@k-)KR;?Fx4pI1Xtw-HHQXwW$`Rxi+M|MWu_4t)N+MRU36%GPGH)W0D%pZLXn)^21pBi$QgLqZJOxze^Wx z8hAgKV3ldqYfG)_W-zSt?e~l-J&Z+ZtSyDr58EO&tkj;ODq@Ix)JSf8t6ANwwyGC` zC7$BK%uR>iliEk4N@a3ttU&!YvD)Zia6PC8&FbnvrMe!3t$`{22Vd$!t+5`C>+#!z z)p04E#a_Ersd2P2p(ZZV%5YR)>HgvQW^h`1%c&_nbqxD1z}5?=>+98eFk4Y-R1Z=& z?Xg?c9yR1D?4r7-3JXEGwu_qBkEdE2LDP%(rc}j%HeJ6^Z8qwg*x+Zjuv|ff4%-w? z9!?*A&S2DYYOdqtOK=(@GDt z8e7%X@LH`0XwZw8()rv(*j~XlTMg{Oj99qnL#0Ot7Wk}tYEf^+5C4%P48ypoj>eR~ zVA}H3-TH2G1a14N`WZEGYHcl`;~9PTnES3_-Ys=Bpt5T4ba1iUtc0HWjJ{;LX-ZM5 z7f<=-priU{UF#Mxr0Vyn@x^Aj9+p?>C>;+1eD+2CNz)6?xP7&>hIgsY_o$iJ=kw)l zT31hfNq?qG3tRF!)d+CMnO3z{ZEbt%D|*p<*_I+x8#`lgs z$1CNj&u+mPYF8Sb+NX8R)DKaRs)&=im`{+N0jb{4dl2|g>A?v?!I+Nf>Oy-Jn=175 zs70YmRgkE&dc>m9Sv&&Qd}6Zh2lgv}wXwMcq7hX5P#Rck*J|6Pao6tga^PXE+Z3cu}N~7l~I5j_Z~X7Ee(d0VIIexrVHbp!hqM1~shH_BUEpaGTA z)S0dIX1Nkfwp$yGCP)pM29r<;mO9$eqpKUi>UnJ3W{AUiNf%Zcjhfnn@zya#+z1c0 z>{=>$Tf9a5wMNqi7WM_3`LcaVXM54yj-3KpEA(c#CF^J#wIBvW+Y(&DLzoGXnJX=%C2D7DqsugvW8a~!&Hrrc-)z#Ii zc&1*yfOA(~sRb&p#!fdHt&@$`WUbb?i0b>5+K5kDV#r{W`m5OZmvTDS9wQn{r+!L5 zz>M>W$+Jr*PEDPen_ikeefretrRkH$PEAcuEiKG`U>ZDiE#7W?YQV2?XB4LJS;do)v3=A&0_Q zVt{+pgsirFIMb+A)Lu1;DVV;5Q(5780f{+UYpmj|t9?psQyDNT#^}hB&BrdMuREr425=SC1yDfjT^G3Vf-- zm?h+|ePFQ_ni)Z88&xXaE)5?qH*pSbZ?qup3~#kpYSq=H^TGBbdR*SjbJ6>PZKcPA zVOc6yDiAfo6b>EOV6MENr+5iYwl`OT=J7_8*fw3K zIP=oIxn(;?EdMPz&OPiHx%P6mj}-K%ogm)p_vsNc9kaCcm7cM$K{l~UG{N`lDO2Z| zD^q%Ts~KEavbAL{8FEh#AFY+o2k&Mgq33{3Ti9Q#8;~X{OFX}y&{K0Loiv3!71#*s zzI@NY_@<{Y2`}L!5o*-^yZE@vK+wViy2WQaHOeDL%;|mreESFh%&AZGp6_mB0yVAk z8W(giw&F@pxfy{hwoZHHA-$NG5MT!`SL&hOefIc7=X|Ucvpsac=F81il~8H{a|ML} z4%#F6Mb;P?*~zivd64e`+0Z2KeNvBy&6^G%K6LYuBewLDPT4SM-o-xf;);gH^2>(* zOR@cl1Ff_-XoQBGE}X~C{Io8-5C16blT;bj8m&=1c5179S36il!2$}D%HO6JA%O*c zHT28iL`1XzBf^Yn1qI9-tYhQV{bg!)*|8^nxy3J+Lrgs|7+6W{|7EmOIjo1N?!j;? zSgk@yae!g)35b%v2&~`-Bt%iKpsRib-Gx=+FNqncw6}mBz>}dqn4};q&7J!oHCJ>a zId^Br8U8eO7gQYBU7yL1nF%w3Phy&wA9=sWlc5 zy$5E)unmyqy|}Ac4Mv)wl34(KzWliUdf(x?iStA71-nk5TSo@qY=6um zqy9>}<*yJw;7?xy4Z>c-;hmCgR=fmU(XNrmN92mOeH-!-bU%Kr5r){HB+IS^%{*zp z8k?yV%eBBfcCKPK*fZXoZA&DlpaQOb*i7O=fXT>X5UIw{Eh*jN6V9TGnM|R#0Y8Z zawl{O-q^g5&}87Wcyg`U3|me%1ng8NgfgmLv8AQ&96e@9;P(j!)+>zdz>T1C z3?R2M%%u#P-FqbyzSsLM4?y-NZ<`3!4hN<6lAx_fcjJ@p=0M4RKTdI_S-yBBz2&^? zWxitF5jLQ9>R3f=B^sfXoG;h^-~wZQAg8Y9qw9X&=jl}U7E@fN^UZ3w5^R(&R2$6$ zr2&W!*jQK6?N#0;@)nm4-9dQ?gSLPkB^b=SPpJE#{MEgZ-y$T^ur`0Hw&=vfFN101_7 z8+y6uGm#^@QKp|2%m<*vbQm03DGgyBR*4S+oL&1XcsF+IuM+IkUnN*c^)@iaGU%1e z`8D2h3a5!ATk_A;<=2(8_ek7gu((lXhNasE=sw&1 zU0Q2#D<$vlMIfVP76idNLBtRw4wh8-$ItgCtxf~2X1Ur5VJm=gCM*DNtd3erE(Am8 z3dcdKz=k@4Ome~(^XCjliWU+|@&soltmzPoIHX;NppoVcyif3Z!(RfQf(LH~s{sjy zj9m$Tm-HZ=qVhU;hy>T_-8ab`7L9bZ0d40h@!X~^qkeo!%HDQscb}TN=F>u}x)pYI zS?Sg#RV*oQbV0zB@5co{x(Uel9LA-nO@j`1H-_|gyBNUPRA&sm_C8Om1WuEXI)s*h za6xcayLzEP!V545ohB;@c=uXf_ zN)N+i(=OLY^V+dGO6M_{&O(*DLr?lKIB9)=1zjt^gxEnBH>#@}{xTX6RXh|nvphMatCDav0547VO)kA7V5$r~~kdJ0<}Mc0$Z;#{^MB5u_~jIT(kj zWw8l)MhTpnc+b1$O?D^q;p`DG-N3K~X_{oar!^F-;v@iyi~^Wi&Q5}R!J3fS$gUT} zu^kD))82rz0ohqU1DkS1=W?gcd+HfrdX>lQdkRWeV0sjIN`1raRbz8Z>{Ukd^CL&0 z(5?l9{{kG_A*s1kt$a)SV!VVAUKdxmmeFR42Z0_ng`#38>S3{mG@4|#_ga&_v<1XO zJy>q0)+W(&UfMR6>0_)K$4MD(iZcNEFX$ojmH-&BFGvJ=Ru|2yMLc1=twd{vL0ce| zH0&XlZ8o%(mddTJirkD^?AAEAs$Q^W)r_5p)4@8){FvFCb^d5HF}CDf^_X-|P1$x% zHh{$lm0z}*k-AjlE}*_PU(tGyqNq>J$Vg`E5HLv(fd;)Eo$pa+ZRZO(QZ!5QaZZoI z5V2HYBX;LD8HGu+`>VZb-nKV|`LNUCU1nNxa6VuITcc_D!OK!u`hz=Jv8vdS%oqDI* zfO%y#ke$dc7KxFCb5o=Krdlqjx#P`py8=CZV-5cy-vpY!9>AWXeNJYQC1!cIT1#RW z_>R8&6q_%{1w`f`<94B2)ivspyt8Z0_RKk;3FBAL>qP#N8n>S~orG~H>xNUXyydV_ z|E_+;)P{`?&%FRELQnwnzSSZ_kJzwoRqs+elB933iBOg_j0gs(k70Mzv+){9yzS+u zFKiO&`i?gs^9Guv3y@yms7TUFfh0OK#Wd}^J*e4eVt~0~Z0h0a7#o%z(fQHY`h{|> zS`n&8P{!+{%Q;xor!NJo;O-iA^RcH!Kyjk^0mYe-2Bs~Sjmn;SQ5V>l0n_P=xtXL% z1_p;v-ePX7nd^J`k+_@Bz$P2;V;(d4dE*jfiP$&2qtUaRW+@XZ`hKg>@U5zBdOrFk=d;@AeO8_p7ns$%Dph3GwD*gM1 z9}>b$r`oNR#wGF)gz6>V4RXlhW(hlX z0(@oI8T@r^oWZl+(~0iMYmGK7TBZ&YvNp_D=(n_(=pQ1>7P<9yg~MB%iVPnz!`Ono z_vx@%5`Q-A1l03>ngG-S2|0}WXK1ZM5t|zXOgoy=TqoF&)(UTK@~jm2Gu^Fm^12g{ zW#TL(WXwU|rIFeCTeggQyq_gzhnBHQ&AU#qm`oa3WdzfCw6qLHX+93kzpq8z>%E=; zd*?-EDD9w1Ud3v==u7sOwQ8;(=SM)IU9tTnw0KqNT;y&J&R{?o3r{5^W2IhCd)S{b z9`-*a2a5NM{-!?)ud<&SfAOOFSuTbByKWDb?$NW6>?1cuNc!Z%3bsh+XX3g#@#0OB zl0pT0d%Xdb3Ny@*I(DEbpG_Z2q6w^u!`F0{RzU4Y%Z9^hRt2b}PwTN0f*ocn%vgAH zv(9_NehzZ-`Pj0eW#jn4%m)qwgX(%Ko$Z8PR65-;%G(UO&O>DDR3dqocuB-iRe_Hb zkSi2cFoSJj(px3nv5m!zB{fjik%+G`d~to(P-&xc0*wDO^m5$^)7v}=8SmNH`jti5 zNZt#{h2!x=p4ug-MIq+JcHvILfLX2$fzJ?z&K)Ri@udGEn=lJIZI@9%QOq#9?bk61 zC_>@pB@$xEd&oHO1>lZY*N(Rw*mRILyBx?;AI_?md;N8|(dXeA$bnDfM&IS6_QT)4 z3cU=Xswxf0mtB>J-WL~f8s(+s*I1>v3I9pbX46zr1AZH>5;$&KP^i))SNae;Td*nq}ZL~wo z5IkEClyn|cro*SiyPqH@>cjAKHX+}6m#C7f;B@uQ#~uK~m6?2RplrUEDpNzGPX)(~ zm@2q400?7rFAXnX=#$|T;CyT6HS2w2(*GdAxl|7C9G>TeJ#xep9OypVJId7ibzB?< z8R`&+K@qT>u7UGyJlMyE6XnMyx3+5AE+Qh5#MKBpd{jToUM6T`Oo%|umOyU37A;k2u2n~*;sLEIAjC$&d*p~|b%7#9)|I*uAnYlq1Nf&eqYie!u`Cf8iQoht9%;AX z1%4$#3hI#V8o^RHhIM6ac@bI_3XEXwKK+OVrz!8;0*q51T(-MFsxIGIf*UjZfDxLp zv<0Rarh$I`*C+wBcX#r;WNmy;hY7M}1)H}(|HL}Yc$M_WR0p4(v!5-IO$4|ZLB|fo|5S@bDjyAEP=C2oPliA8KmR2;zG>VTpZ zc%)103)*dQ_j>my0ZM&EO}UtsCFAn}T^=n)rxWNqP2Tdg&nKWqw%Y}XOf`q z)DHSuhNEz8+c=(5bWb#Z&b@LqTxAm5yw|5_*4wWUP0|7<1UV7H1)SyJW(ExHtX>qu z5DV{OF9KFx2#q8oVd*eVe&%Ma@E5pfbX46!1*2-R^R(6|6d@d8rK<$YBETlEhgaY} zBfjcGQD_h%Z!e__NoTVPkFRiA>-*+AVtU6-qbTQKAjDHnL!)Sr@NOc4XLS@3JgZYN z!KNq*3YG#j+kK>+@IYUx$9S+VU@kV`Q5vv&aRPk0q3|*)LdjI4MJ`C)-V(RLE}30k zsuKy4HIyP*Lrk)6>pl)qrp-Y(Yi(eObslh>(Rwj8|4cd5nJb&~LNw)t)Qn3>G~xWL z?$E5WmT zJ3Ul|m4C^Q#m<)&!PM6+d9}*M1kH7Y+?D~v78c4|)v&Df;3WP9!c}^X8C40U?QC}x zYS30-OHDA zl$GEYSKBbW0UH^%W1bWqEyJ0bveE{1V^;2D5LCj&1_T%~tib4;o8*p@9h%7|@tC>= z-$0)2fm%@G^V=*q9wBKVuLt3tWw8@%H)426{r(h7*yebm_a~q&XJfRns$y5 z^2jup17Ktl48U*sV5pjIMVEbwf`Hd>g9HFK$39LCL0Ic6FvGwF9Uy*OwiGx4(DQ`q+9L-WBn#(`od53ArovOgP*s~Rt zg4EFh6!4JFn2r<3@$T65b|s+Vt#%W#PHBV~yW`awTj;R^pGE5!F@;mYtA>hgTig(h zgJv0SmNBo5sgn&*tor(-3ur~O>)Df#yiByKqrd17frC-Cz1~CAA=nioI})$pwvMY; z@+4Z)1$HFjW4E<4C2(|2tGu~oq{@hI_3~ibfLIZAIIM>t(w%@^4XFc^H=iWtsP>l8 z?R&I0Y?knhBrc)2n2+dO_h6;5g+@(`ZX}3;au?tMD2LP{+Cm*0{G(bU@Rns$sMbKX z#t?^s`Csa&Tr|bqzEK}d(5qsKUKN>MeN4L$78{pmrgkv_EJaZ^vD1k%jD=GcoBAp!Y+a_nj{OyR_0X}jFZVKmwss0X)={a{K?6G!63)RB0Rj|4%J`LWOmmx z@khkW!iD1ntv_+JacMkmpJ(5W@fi*!HXaV(;Jr^IF<_S-fDso-c*Oxq#3MtJ9`7i5 z8C!*Nu&0Kqi$Pq3oPKmpsKwP=Yb?N#VsyT@g*s z`k79-aVJm!Zh_DWsnl>>AT-j`t6IN8Gf(FvsN9Z{@st-#(Kl%)_{XHpZguOe;2IW_ z6Gcs;qbUQ72{DATo~P4g*JSkl(>#IV0ToWR(w&obqC=QZHI5!(=H`_!^cwVK1p;z? zn;cX6yw4_~>|GZvy){zs3%Z*}$y92C=LTfc>6dhFwxS;a83kXA96pGve}syZF2pf8 zVk;?B%!Js#gv3MgJu;+7xLEp)dP#Rp@U+24%Y2_3uznQu;6;iH{49=!dc@?5;IwM5;q8p%k63_m4Bs+GgOL$0^Dy4VSsM+FBIW#o z#?~fXcth(6xR0R_@)3A_=Di6-t_STb5y+oIiz=1i#>x~E>1#IH_4AM7NErTyvg@FP z6oFJjXY|N1DsW$nxpm=$VSO3x&o@G*d`i7`8Ab~_W=_BnCPoUH{S&Pn7msvvc#gPw zdWJI_7W0kEG;R35^bFwJ2lSS31Rb;Ek~RE%=Y~6Gja#k6S~Zj7n$(#cdDY~sa*NB{ zVtlq;gMFFa98hffkwYt^C%Bn~ptj~d-v_fx_AyLiPVK);OR*CMfIi)=rE4<1 z6D21+7%i=dJhgc|O+extBG2M^Jo7qNt!zU1OfP0D;AkPtQZ5STL2BJFA*hh14Zt1B zXrvS5pGqC-)uXGT^La#}VaFCuATknW&irJpMtk!x{+~IRQ8#y=gJNv>!^xrFVun5$ z8~QE10D-44E6PbY&rO+!XsCMAd4s~!6e?Aok956mQ=%qm2)AU^^c4?b)(qi}*bruW z4Z)u^!IC-RAx~uNnpl8OWQ3DUFPb`$N$0B^quf=|4B&`Gc@b~R=tXg?3Oj0H1#ip5 zoyU9B)44$k_<#z?Q)kecc}TT3C*4HRFYL43;mma=*<<&%ASu%eM9;vJI}!Dy)E%@! zvl(^g6|Yd)tWXeJq4Mrl=$Xz1dZy?41O#6>qpIna<7z{jon>&ItpjlRS^|o1Ai4)R z3OB(0QhJEZjGlMWo8+VuUvk|Kl-v%!pGX{{yoZufQ@55OFO98HjK`9Fi@bgzI|23X z?H2$h(`j{2b_y`WEJ6c69|TCMRs;I}g~pxjR593*#TrI`Bd!<|y<hnj?3`?oWCic}*Bha#xT z?@PAV`7s)tl0Lv|+Y~@MflmHKOO&l8xdU^Zf`6)E^!C<>>zf(QWizv{ag87fvCqj3+e9?=iFwUqU z)6ctaBK2F8H$3a!+%y8qTgJS)Y2;2&c(e_ln`clA&a@wW=F~Q!4W;hsi8X|kvuI;@ z%*0w4HUNCXCryb>Q9%x9{sx#%GO19OQexxUL1}TWil7=~w19_K2p=F$@{8nqaJ3Re zkzcbF$RzD*I8zOTBhK_vu9fD1>|Jhh3rfbjWPUOTl$t3C!Av?+6BJWFWZ#zfCu9jk zJa*ZDWdrY{G*2*{u{EqTYBM%+#$YI*KCuYak}^B}1rt{9Uu?ADR!6=mw!zXlh68l1 zBW?xyr*BQB;$a-884v)Wu@-?lHt>~-Q(%qF9OB$Pa1@zcDQ$bXxozwCo8%b?=J_Bu zQW`foK@AfVs=eNqMAJdGR-O>yKn|y)s~&V{wOwGU@^<(R3JZJDy|0Qgg7tP$EbUjHs+YSs&v4eJqnt zru{6!EeiZSyB-f6r{8BdeSIvG{l_!8%OrV#0;@(=ZXCPZ(CvpN>zv%55W(#?0nexh zGcFb{nFS%HtM6YSn>!3PWHt>S&gi=d`;RYDCIWZ`tyR}=b-sRNhb3M7*(5FC7J!mR z%OUuVX7vKB`b2~!pMo_Y!JQ4CKZ*`W?|iuqw09}lL84uBG{ij;r*kE6BS% z*4$A5K4sUFpGwb+=$GWY#TrIGZw(=Sm z)_-3tpZ|jy{e`!4_-EvnfLQPGivm9NHur9X?O5-WTU&Ob;APxaFrC%kemkci*A1n9aVu>tNWbSnvB2*DBnWeS6O##Yu5QS`32DYZ|t*@B(-nQ4upd5~LD?!rl7t z(JXuu-p1}JFeBD)1r8k%YXQ#zavhGVCD;paY!nVLFrzFY2$LzvMoo=I029szynEo zm+ld8oU_?cY$6pSL*}C#IL18`N+=GIh+cF{jx&d(mrHb$Pgo7D&wV0-;ISl7J-P>E zXRT~53u8%Nu4g73y+hwwB$Z6~l6UU_UBjj(DPxup;EXGj8c2!TBR7XrTXdu%7y!)% z(|Itfw`?8_L3iVZ9PmEr;vJCcn&2_1b^-^_WfP?IfT^!jACYPmUCrPK*mON+OJK*F zC6F=QoYfn$*UX4Ibu1nGF5M#f84baHA@7Q`eA(fQl6u8JkW3V{x0Az8G>Ts4z{htk zC61Y0RYZ^`HLAHzwqRNlm+??5wjx(C)pf27?D(x zOKY%*K%vze;Hx^daPbe((71WFBfeZ)S9dDgI=)47_en^cT@Bl+QP$R=3Fw)`X0A)+ zTe6hFMo!oy>3bAIixdtXWR zb@^t{(OV-mJf1KEAYU$JFzd%Za_|iO? z(J#`?WPwRTBj1cCeMsWX6_NOkZ^;7@8IC+(p3i9L*;b?5k041rA&?uQfs{d%X5YaL z89S~YR8Jv#>tll6Am*ZXGZ#RMn9-KQv-D@ngAmUNs?ZC5pOMC zC9kR7^h>+MMRaM??a`%vHgMw{#KS7$7_f_k?=d2HEX3!mc@gap;~Q1GOvi9cO-$=} z$255T#|U8DT{qC*59V6x7+bH`k)oz6_4l^PqcRosl3~LbyzToj|J8Q<;LjLet)Akw<6A_F;O()rlbB z?11KR@AJ*TIx+S07WslkRAQ4df;HBZ`f_5TaG6;$O;mr6vm)C8K67R_@NCA=Ls8FR zQo!n(!PLzqBL<_$=Soi{Ds7;Z5glt%=~|+K+XQA0B&yzPZl_6nVfMM1%tZaOofB?h zG(%Rsmc%%njdQ9Iw{^p>X7nY(T%4@KqCtCFFfzD;>WMW*c1F*z3YZkLmL&u}{VM5?zLrs6ORPQ8 zh^;iBR~0Ph881O>sR22HUx#H>-oa|X#te&1(vFKVMe6H`4#tvS+a6%+HW5&83oKeFDptDmaTobr{Y_?8eJ9S)KW$34S31ic@Gr5Y{hlXm!?mddKP{)xg z>MzC$cF_WIwwlgmetD#{B|LRw)@`4Tce`kJFC~h&5M@n-e(*q6e}-oj`^#WH7NAr> zdIoM^=@@b0`+9!>R@>2gxwu!ooZDtHK;erbgK;+l9>^MB3ch&qkvyEezO}221m$@8o z-DL;IzC`r4+4w8W$yl~bZid^DW1OnW8H@4)#598l0Eutv)aFoc>}~>jkc1tnVeeCY znE;kIC0ZvVUfxVo>gT(foBMX8YMq#_r#7d{K1pCY5WC&5E0(f3D%lm^_Ef&^1jUYf zs&7|NB99o;h9v!ci$R^|F08O!sUj%374FOGvm|8P9+5-2&>lE^Ulxqv{;b-+t1(Qa znt*!+t^j0Jlg)lD=h!CN7Z|R|>YFvea1~rnIS$&OfHe1fATJ&O z?AH+N*Jc&|!hip|?Dbi7T{fPEYBUuPir^0*+3T}$(IQesN!ygXiu|CHS|`PViAX4v zDG|-wu&X(nh|SqsyxQF+9&FQY&Wz<$x^Y&W=l2&sIrFmm)`Zi8VuLf=4am#p010kJ zB(=?b-U;u3-tkEHV7N`{@fwtTlyUJdCN_1{uQX+rhsAIPSq@c;Ho^!l>taVJ{WH!mqlj5CxXyI9r zKWoxDSbPmt1`LyFJ9h#1H@B8dY_ZuZxD-2C;C6e;xSaYH){*<;EpB6dar^Zu?n0#~ zO~dVZ`jYLTdj;F0_P&+0&FtJZAlQo4f_|9pxpS`mFsv<`zEiJkuee*NXRoP`&|f9i zACk?m{%>g&j#%hy(R7w9w>@PM2$rx;_iX7cGds;@yIu$oc~utrk)5oHI}Z&}$5mWN4D(%wi_qrxPciJR7Is^>M#wJN` z2#?xJ1mOQjfdGg&*c~iWsRmADHASOAZcZffH=jAYSYhbz9bD_M!aB>?xG;g(*yc5^=75N;yo){J}%Iyunb1ME3+B zpbT37@@9A@s~-^UKr1lm)N!deURbranNQUjo6*@7Mm)-?@}s`HB*}-#(trkV;+GD< zA*RD8C(#(S-VAExZO+jR)ePcDHpBHhv-+pUnz$Z$ij{~a+4N;yahxFUHcCgoiEhyE z*+c;);pGhSZy5k7$CvK?y=6P<4Dd?VT;~w?WcMWYL7X3gs-37ftYnxiZq$r21R$?SYJt6wof>+p`9(BwoqSxBjRln@~>K`-Ga=rupG2WUhc zc}cJhNa#)|&zw!umB6VH zN|N+iCg&}~llNqEU9MAzAj4kiPT)+86|l%hvbX?&1N>}SBc(o)y^Mvkvo;dMJ5i!D zYEP-?T`F#`Yy6-3XtrCz`DjV{3zV%KOc3$Jy9uIEohh2=d#u1BXFYG%Imt9QP{Czy zDnKNiHVa)Xb#{Ti2Z=R@xDEmh*F-Rw-NTYIxP&>y(c?32ftsce9mAq_Z(;Y-luh*| z9iXpaB#%bcE&>>#fVCt@(L2<9Yn<6WmQ9D`k4Uu9F)TV6OL7C@Hspp)PklVATTrHK zA_p0lAVU);#I#v(LD3b`65)md^(1tCoPwDY7d#a)g>C-1%{6I}8jRS(S$n z;VSSX1@wG@NGL!XAO|7}%vbTKS#6LU1n>v5IqMt5!=U~ij?^W|aJE=}63<35(v(p) zyK@LrL|)nYHs?3Rbtn|>Mz^@`7=`#~)SZ#)C#)(!d}Ev2HuLYPl@Gx`Elsoh$mhFL zNpsnoQe8*J)7r6dg*cJZ#hB0dr?TX>b@9F8K@N8~lTh|fB=I;cVIxRMNf#>I`Fs&J0- zw8nMHHqkH|+whw}W^Pwl#ocTr?oK;K`C*+GfB1YBj$5>k7GR!_z5wsJXj?~2H{9eU zzt}E%P~YrW+amVc09N+fw6gS{%yU_VzgXGgfO_861_0y;P(;las3!dM z`5UK7vpb{vUUCstcCwV(-?PWz_q&uJyTy%peNJ#jbgY-`9k;Ga&7trWFiSY}*LeDA z=%%Mg4j(rzIz(zx=g(0e(rC=b+6P(*8ADy?>91HViG0p`yK7s#5!ix{dCy$yDg0Gl z{#%6sbzNequ1_!3^|Dm-kC*>J7N6XZn!_H3Lt#uKAD+0c3Dj&(g2hhg*Av*dlt4-( zVhG79!JK#J8s}}yV$v-=-Vqc+2H}Va4RLViWWJ8ENp0MLftj|BQkK;wUDu7sA}k*m z4v8=(vgM^_!ST(OLGSVzPS^D9C%i~QKw6U9Pe6}DxAX#Qs{=IAxo;KJ!BhuE)zkv# zG0J3zc#xA&rT(Hp1v%tLcK-2E1WVse5iBwt!XwxXCz?u&NTAYd7zPVV8NQGew|h$~ z*t~j(x74=^BkHjERZutMSLPPDHF|N65fjBD?jnveMfl+cdk33f1mnpbIV{?&zeX!J z>E${w+lCF}iRa4~Ge;8R4B5f#f|t`Xf)vcI1N(43h%o_bI<>CGU^B9Ki9P6v#)GKj zwcolV7X-{g^}^SMYQ#vuaS`qeV&4vJBn>P)ww!%~>5fOz5BbkxClEp`2^hPs`vIE}fk()0I zB=R-#bed;;UBl8;%r_-hk60H^m4PVimsBF3XJNmR=6t47ojsSv4017$;VvA|@no5_ zgJ*a7aQL=<_zX1PWGYxH@KFXO+a6Udx$UGCewTv|KqYA#u3+ zq^zzy6#6@>77so?sr@YEXbf;Q^5rca}Vd0=GbM6FjJ z4+O@cm|K#{s(Z~&k$K`egqNZ%h0T7+)Nvkeq!o(Q=yR=L-Qr&5u{wLyBG3eY>m1`= zWqohyq-f$i^Y)YDm8xwVka&a!j6koy;|LkW~B9a2t}+) z9tO44TBWFy970gp9WD=23U1x`(3+N;LT)L9m=<&bn1P1Tdu4UNzd z!r9fhX_RiJSwk2%w%mj%qBt)pyIM_Pq_(+J#G|RaTC@dtC%6`}W<~8+6Q+OHnRNQ4nfL5e~!8dG$+bl$l)j`dw;_=O}`=A33OrKXz5F zRhLYzII}(m8w)g~k^EC?#)5|7Ov-g!>QAeR+4lA&X^nA0p)phg%5Due&`@2cYEgP> z!~Dd)`7`QL#~J6bFtj2^{#mptSio+8a!n1wI!Dw5pwY!yxaucR*Q;}9>ST_bN5Zp4 zCI0HqsdE-y6vqX9^~uq>-?nbguI$6;UY_LdX>XRxpBH;nv7@fc(AJr{sQSM9)JYn>W_?JQ4&l@pS= zha%D)<3hH3Bg~#Lncnok>SlIou6K5LGcaK`18AZ$$OCj<#`$+Nrv!1DQ->wq+SI zM0<|&O%e8!tQr+&z!tzo9NVTA*ylcAtl;8N__nQX*s?up3PiJm<=CqhBMNJ3a(HY` z&0)FQYUp9w$am%yAY-0pS(DcL#ITVk-p zs1OFV#Fm&3ZtWd#6!5xcWWP){@>e7eJDlML$Qf=Cnw`76u8xDUf}AvIV2Y@Zahwy} z0`?oR4D3lqm$CxeP%`}wquSY2-D7mK9u!FDWWp%@Cwb?E_6s1?XfGSYzli+{%%1Tc ziNEwkjY2J~h-!+`uM);1iyH0{*zWM|3su(p{30&oa9K(>$`=Ao#LDJ3f&*C2c`k-S zlbZzX9LSz0SL{(0@b=bUz=D7#TQK5*KGv`)I=dA#0Mggzy<)CdTnSdo?GSzA+P+QU zA5wW(L%xPwlA%I5yQ4L*O#*W6$FHkxFE?SdbI#vy(0GBwMb^RI{&fAo_^sd`h&kpv zoF32=J;6o}j=_h^I$UmF*ZsJf5Bg0#CH9YY3-Roo?;atM2+qOQ{|!Ho2?Lj|TQ4yA z;3LRKWYksMD3mRi_ZiE>xvPh_*gah)p<^)lA?vh8az_Cq1C~cMz#cKI(Edn5@AZ00 zL-{%@C_joL)72+#(D+@&=X?P7#k_5eHC1Zz_XP+^|W>m)aS#!`aIixJ`z(} zG$)+4Ka?w34cWJgE2o=7Kw{64^&P`>^*92(2mPtopdW`u*$&iGpXxPgR7(u|Q=Pp+ zw&GO9oxW_OC*xyhE3~sQ*EVr;?*7W2s8Q|OG}{vPe_#hJ30$=3Qj<|{T32)~cj`Q> z`j{h?2gmCvU=}RU6M~xia9bq(%K!NF*VX5|v{$xI_!@4Bp{Q=nCIx?ld?0X~1!nz% zr$0-ydKjxl+TfyZD#d;}KTom?NWv6{dBZDhKz#uaXP&~fmjZd8zALM~+y!={pp0<} zBO``QVOTNlXQ%02_2~ZIRT={k{(4~U4z|n=UwX{1OJjzgLL=mr4%Xqj$!6pl-+F@_ z>Zk@MEH9gje#}??>=fm2XAOlZ5{i~d0Tq_371tEOhU=FBWx4J*a6)`0jHS_&4LUCt zrmXi&3Z^pP0#N*sflP9#m#Ot?9U`+?x*6m$BIha3)4E49xOiH21}?Ja%08KU>}5vQ zyAp#OMv@h5ljCjJ82h}>C!6zS57CUTp@Nwx16;{Q>>8--KHuYgrlS=L%9c*=eYQvQ zAad?&d(*VtRHg$M8DCF+?KYJitYgUC?a6YJ6w}Jmlsj_}jZTmQm%1uy)61{naPak6K0LRv<>V%D_wp>_dhyu88ahR67yf&p3cU|*u*5Z;JhMTw z%W~ibc5~c7f+*z`^nIeXfO4}<+QBg^dWvd}900-T~);B(@b?xNDQ{PcHAo9njO2n+_j71oP%|bQiHaAfnDyp{yiweRR*eq_ygwUaf?PlYbrz zcR)YmE#Qzn=S7!In?921swh<*UoOa(O+O!1@8{-{m0y6nh}=Xt``(k2i)T(xFD*=; zo}HYV{lN6p(gOaAE16#a>yVuU4#=sOh>IA0*?ZOdf%hZtHSZ1Y=brBC>)Y3-UiJzj zYcYpm%1?>Ze9*pzi|h+dLgEr>6>xnro%5Mv8^P*%NQ$InkcA-)1^&F+yQvvziVRzX zzo_{MZifsPw@ZO(?1dTv|R9FpKg}nYvgsiW;YLoAHUbQF?@DY8pGrbN;`)T z1WwGWdBn9pc+A+xck^S`K92IEXCDvqBU0f@Q}5x&J@)Z8_;Ig&9OFl1u9wQ#{^)2Q zZiD3E9Kx+ac)rR#3tU&bX8|nlo&~b~?pZ*4hkF*--szqNxPp5Y=&o_k0^TpVXMyis z_L-t50AIg*7Wl4p&jR0{a?b+apLWjz-++4-_^xx$0^gr;&jR0{b~@ZI8`1-@I| zv%vRT?pffQaL)qYq;mz&CB5e?#Cq?w$p{_qu0+Z^k_fe6#LZ z;QNd2S>Su0dlvZS+_S)U!aWOoC*8BacgjAG34HVJS>U_PJqvuN-Lt^A;GPA(MfWW5 zopH|s-|g;M;CsJ&7WmG(XMyhy`+T#&_W}1T@O{ud3w-C?v%q(!dlvZqL-#E3ExBib zZ`nNyd}a46@U6IKfo~NTTp0W;09K*`fiQ>)1jMzdKww;t3IxcFs6e2sMg;=qhoS<3 z^L$hwfYzb{fppUq7*bM?3Ix(dR3MOUMFj%sT~UER+KdVW(l9CzNLx{XK-!K91kwvp zfk1lE6&Rv&DJl?1x1$1q^utksK>C-W0)h1Is6ZgSCn^v~|D&itApMV{0)h12s6Zh7 zh$}GU30gfu1k(RJDiBB?iV6hMhh2do zIsZjeAdvn}R3MN(5)}xfk46Oo>EDP71k%456$qrCj0yzOPela+>3-aR3MOkHYyNEKNl4Ur2kD+AdvpIQGr1E`KUl3{X$eAkp6d3fk67-y8=Uyz8Dn< zq)$Z!0_pz{6$qsNV^koJekm#tNWUBv2&Dg0R3MQ4ov1({{Yq3Ikbcz_7}E52qXL2S z??nXy>C;hxK>D?)Kp_45QGr1E526Br^qHtYApLq&Advn+R3MQ4&$i&E5us7vhzbPK zZ$HiWH2&DfoDiBD&6%`1i-;N3d(ti{c2&DfwDiBDYjS2+P=UjoIQGXZ}2&DgO zR3MOkCn^v~pN|Rz(*G?g5J>+?R3MOkH!2WFUx*3>(*Hdw5J>+IS72z=i&23<`chON zkp7=hfk664QGr1Ey{JGSeK{%+NdIY6AdvoXR3MPP5)}xfuet(5qyAY`Advp^s6Zh7 zepDck{vaw4NdK>>Kp_1WQGr1E!>B+Y{ZUjPkp9c4Kp_3UU4fxdKaL6n($}H_f%IQR z1p?{+6BP)guSW#}=})2pf%IQT1p?{6i3$YLpGE}&=^L)V(5QbK6$qsNZ&VpqI2`(V90tYD%6S`CcO<3=d2ke&)kA&R;BdGBUMq#04S z!v>0WM2By*FS_q?_nI!l^3y~fds5d*7Ic_PHsR}Q!1%uI$T-p0m!H5bUEvnof9!o% zQz3_#Q_ftY=Ms&UiTH);6RK2FXYJe7$755~kUWOwS<=2ZS8Dj0zHW-4 z{uOef>1Xe%+<@Hpp3`Op>39su*Unz5K*Y4(`JPhvh znKL&1!?bO&FlcU|)|(m5I-wuUM7l`*ZLgoImNhhtVu8J`kK&m6)b)KXP#+2E<)9?!BZ({Y)-Jo%g^VDHfF%R)7 zfc((TP;_ft7kS316SL1T4FlqH2c2L)Y^k*XKHRu^rXuzpPfeN2evek0EeR=r^WxO> zr42YfwL;8Wqm3k%A^emFj-jN1lo672a<9VKsla~=OVns?L%Rk~JM+NPBKE|6Y6#Ux zIS$k5RSJXNae})}N`B-R%*G9Pc{R?rw=l%HlZ`V_J5%-t(_I6JEjpouCjI8V96A0} z&7Bk>EM9Uug^ATiJ~(W$Tl(}vE_B@1n8hWqEm$RkX3-~ezT|GdrO)JgG#LdpH6pwz zf%_!(5dSAL-KX#ueqNh+G1~#aJfkt&2hA~@6Uh0Y&^TY-w&@6Q7a_o^EwPo)6%L5e z@8&+;F^m&C&+Aldm)ZP(`N7$`_-8^n3imyDDQkGx0M#{d84FqaZc7}WGkx*%bA|?- zJV0l5hC{OY#(<%iL0C(xjV6v4ZpVqef;TmnDh(4En|Q)ow4P%>$Ox+=Sr&XK$lyv= z&)zkLYLwOe0{1c>>xGlOQ?b%RXk@Fr4o5gU=jx8W-l0>24bIpR&hR8kGz7NA7VKwO zer;dh*{9)rwJPbgq!wJ6?!@$E%6+Q5iw-2mnF+UGXDy`Kp(GxjMrJM8FyGBir*J@7 zTSImnlPwji6ZGX4vHcM-33CkHpk(RW=sbLuDGwmr(3_z$ZH{w-R#>IsW=uAndvJ@B zvE7_`_f1L{*?*9n5!QohpRO54z(iZ1x_C>zTB@4B)thNty@@#h#@p-#XA|Lg15x* z5n#>21ytPb)A!K_9XF&TYGW@)ccVRtYmSbW5j)?c-oyy0wtInu95=fFhSz$4ScB^N z2KI_e-BR3wKTN%qjKWN&-}l2t4Ow#<^?UmCV+-cDfzYK)#vQN0#d5P^hK~V_;#|Qo z0e^9;S+GB&hp@2lg28R~h>Bigzi>(O*1Zn)(mj2>;~#wsNp8pip&v;t!Z6ZIw^wS& zf{SEKj{pXKpfC_U)?|p6$`$093ByNp@?%87hKS!n=I1JmnwRd45j6vjja4Mn;)_$%DMk+y!2^HXalhuuO{rscg^%j82%OHp_V4`Hne4=sj$uTN$ zUyQkRVWzh)qy70tI4|BHA4!~#`%~xRem)-`P1Jf>r>eb-1CGBROVoQLRqYY3_3>U? z8`e|!V^LHAU5{!Imd_WFQEmxFS8$iz!e#a63p$>Ds4e|o!?F{M#MDP=#I{m)uUX&e*PdxGa;oZ(;Sc!mX{7y7_8IUhN<0wD}cFz z-9j+0^CgAXW%R~yY#$Z<*aLE9&%sRtt@5s{Ro4PKS)GmJ+&tKqn@LgtfEOl#1ovX% zkJZCOl^)NiM-$8ScqX-8s6)&8DXRbFjCwp#|A{oJe?m|_{p01H>?^1z`{I$|GZKn{ z*a58XY9QPha*P;9j3sg&c~%#VT*T2Gm&<3QK9_)JBnAEmL;r~2>r#p(j0#^QSWPMD8D99(m!7An^`0e z`g-D%Z>B%_rhM{EVc04hC=@QQATFuK2{$Y4RXC8@3o{YiLoa|BxZFnDGXoLEUA}TV z1kLMRW`bAWP7L6=^Z=fd0nk5Q?obxFloDUOkpAKY`GWq*yws=g7hjIP45yYp=WR2v z+T7l1HHJVGXpd2xD5NAk$nGn-P z>5NRIgT_Bi4-AM7Ll2RIoai=Usq!i3cNm`2qxS1#^bFPu#2KldYaKV=sUPeDpkc&U zPeGopA`f~52R7{}+`VdT@~@$0f7GWDAj+4F%-V8%XcD6Evjpkw5E5JBagWpm}qhajlBjFcVk)lU-ezLAFa4T1NK zz8=oG85#vw5TXR={bYs8mf ziyEK$eS7rXPKGkIla;YMJN@W)^O4#IAT#^-sQtYl6var_K9Pd*?Ti&F5>rVTkioCU z@9Nqyb@VlR;!3h>)7u;>H=-=p(%4_fsOwNa(vpop%D*0q%33lIN-N}FFROa}p4=40 zQf)RVnJ35}LX<-B$Aos#I)x&15T3`Yr$}2uy8=9z*xuCoTXKfopJ0)sUlrXBOAY5;+i?gJ}8ajXN-=Bn+TkUVXm-B5t2ncL@9=h z#L^ETe>21_x+})8boa5VVB| zD${|<0h_80Uq@l{(EM$So*wM z5OWtz9;wE=1LhBJmbVb2U5^HYxELU!;1YF35oGl7fs#=!At!TzK=<}xim>L1Q5ql- zY(s$ukhRIChUCgVvZ7K@z_R2v3nW$6a%mWH2bgU_T3YR5O16BeN^?S?0JsMJLbcIG z4riL6(tso*L#zvi|6^aCY~2KyMIVX(8VFHnw(NUu!WSD`X<+&S3HZ1#89vsJ`SOII z5zhCB@CIyb1|ZRBNnNk~lcyG^kMO(@R;Czm(B3iL995#jh%6U zVqtL5*6BM08*M_R#b1>CqYW%9W)EFsjI_ou$N1}roolxaHr7n#pZUan<71@BM&}`< zScIM+9uMg>8Cra~ff25OW9H~M)TCC8lwTTVQ20c<9fL!S8nTZGasz?+a#?^!UW8>I z_r$eIMJ`xuY*kl7LR=%)X-^H`sOeacV%~*xA?k-J`AE=?EdgX~LQr6trtNZo=e~@H zf6}l}$Gp3P@S!e1j5{bS80t3d14)=Zq>)gjxI!v-C~p8Qx;HEyRP7tVA zTACe(vxI4=hSM6G5HU;$WFqD5!PQ#Tu15_ML(C$7A}V^!Hm)LeU4T%mQi>SF_RxF8 zxX~D2am$4<+V7xFGBHFnsj(6BJOF-BwvxI-4m0eW?SK%AKucjh%P>pebV>e**rpdfWgQ0F9+qdlQ_f4913}_2G z00?l=^io-D!2EJLSTiT%61v13E#gi@U*?a`uKB)#bBD&uEq|HR5m3gX zX}RPd2PzBvVUth&0JVadDJ@4GE;g&kQDnc>3Vr78+(n;;XCP^k7Xw;bniWb^$I1~J z{<3Y>LNb#ErSp<&bq!6l&}NtG(%-_aV|+%FDF}UPQuMq?=4D2sfaLJ)m;7Z?t6>@l z{ZXp1*o=c51XvTJBgVHSeMsxYff3%v!Xt!}`VF1=;4j~ayfFS>eDXQ{u0Jt<{{CZ6 zUa$1k&o2G$@0awu*5uFc>#Nlx|K`>^UA4al4$9X2=dTrh&(-{AsF`d~?^XAo{!r^( zhTKo^XGA}rmFtB3UyTT_jYkcSu$qM8a&b8fZ@U_aXQ5$qz@~sHxeb@#sBttk&;R#6 z!|2uKH!+M0*2oZu7!OmDG=zj4c^?)E|CS)a-bX$a%B~he(n1&w(oXOm2v1}@j7`z- z&j-PlKisHMbTJ4sr3Un&&JSA$O8(S}%=#UAV&c+0!hF8`6UeO*7h!laKx+sHGaaNW zqL6N5!{l>j->-sWsn#zv&Icv%>l_Alr+zr=TQS4^plN zf9Gd+KlqbZpqf<^|L(|l^iLoD8zc(;;a48{oqzf4U!yB^)xY`eU;FJ>e`|V<>db%O zcYp7%{N+FRV;aC8|H*LQ4S#U`hv@gAo7A8DtHUpzpx^r+c>d_-xnJE!zyJ1lU-Q5( z|BK(I-(UIE$3AiDgMai`f84thjd*zp3`rgF@_fq+9z4(ED^0Tqo zze~Sg`rzpCyZ-eDxcvv8|D%D=|KUGAOEAbE?>^j*0G1Oc1!%rn2g7Dr5l{|N0+xms z77mZiH-oh*Y+Sj2lf#qTABUXnh5DSGGbdqDypz3C#20$^Or!{y`2`>DVFg!d4 z0ssrmuMlg8Wod0wBrVtsG-s$d!^4RzOF&oU5Xie49wI6LEJgs^^)tK>rN;BiV3Fjl zfd`Gj90t}1JBtH*DSHoqthR6m;ua1BqELa=*`-5(H#1SvZA{i&ssaOn4GtK47QXAhe}kEQ9ua-WoiY7l805gE&RInB$01%11fs4D56nsJ;@Ez)FB$ zM01#5Vj4V~yySD>E#GRCHFmKua>O;0dqowFeP*_3!a-%hI0l!np=v?VZuLo6 z22GeVZA{C8R2ncw(~w~^u;an%83K*wTa@++69fkxt0)1}VN@n(izY0UY>!&K=<|%@ zKVF+Q4_H8y)7oC#s2aYG(X4^?B3L(bnTxQQG~puW(6P=eAF%>Gn$)_It~uuru4Xgp%_%y}=wnz$HLkK`sur;Dlm;+Z2r=Pw@p226& z`jfQ5XpZ^h5D{jdlMn=Y8&5zQ7;6=4!5$M-TAErAgLd3S!Rx#4ezeCNfe2eH=o!;D zPJmGlz-s{l1aKBhIreqr06~xtBM%~l-eDgHS`SM#<~o8VPF1RJCoO)~RB|}krg~l_ zMG#uE@)p>TWgzHz(KeU{#g7)d3EXZW&h(Tf05b?o*mg`i4z~D$K*3cfM{Ds!f}?c-Uwskjz^D*giu{v8=r-VMU=wK5 zMyJjU8(X?N(ZbOHVt3-~;(k7~`Qy$udEL@zVTHbD{Eq)%_iupfEuA$;GBwCg(I9UD z?oRF;e|R-oRRK0WX9t8r$%`&?0{aP3Q0|SEw27VmIQ0b9O`c`v0?l$oGati*9Fp6J zP@i-I-=d9(k7Uu~KxrmEE@>ILxTvSiUvNycpPF>&80%WZCLplT4vYoGV52oHzJ6ML z72W0Tq8wuE{DTApkdfpt%9Sg z@JvH_5Zf?B&R0nXK}fG8rc_WTSPa-bOFc&bZ3{h44gjRd)QS!W`j*DQFOl89`e8X1 zgp*_vk`S*2>>cVe*UO+NOwREtm@2BfDTsm*L>hK2N_#F~JBH!jlP0Ea+S($8ys_vqZw z2x|c1DfajBNpzw=1@s)T8^jus^e=oUJ^5wOWN_OoLi2G>5-gby0t&kbt3W<6m68G` zoM+!HINyO|WIk~-fNcgAjus6mxnS}X-;lta0etjH3x!4Gbf*j)v9E;g(H%x=51#2? z<^>;-#tL6H+Upw;^MH1uq*&&2ItZm&bW~>f91xpquAV3qZo({iw?RNKCCt6b)EC`U z@v|HhAQf`3HAf0f^*mFhd%JW@Zv89JP2v`#)<(|Dq`L0fK3|^^7D<^#!UCiMO6Fv% z(w>kLPT=s7T<+4f*&6TUjUk!^F7nH3Ksd7XdGx#z+!-iWYPi%j&K+N81Qm3%Y#jg# zh41Z!;q?2=g-6M7iI+`GDq|<6hygKcqVgy0VCfocR<;iqoQkc5bB%>11w3pEB6eW- zSPF2s*aDaYv;msR7(+&KgQ!$xxky!O`9XgYxtBKK^@D?rMvx{6+Cz~_V7@uhBz1u+;q^i{viuK_CIw(%w*dx`{wmZ)OqxtYQz%5=AArgu}*Yfp-A!wm*#2j5WBt)>tkkk6ReOpi|$%ehVtE z^I^kxVtqI$1`7g{P0`{KM_*!+gd4+HakBm8^UDWHW2f2Q)o|SKhxPmH;kz-8m&t4e ztzfx{+dqkd8OE0&25lt$0D1@^I}wxnE8;|J2k$u}D)n=Di`H=Ql}!^_f_<;25fsLu^IEAF_ZDX2iiKYY$P<~r)*;XoS|35+=6 zw@V#ED}a5=A_|+FiZIiZi4?MytaBPli`b*gz7Tum^4%8-`!K5fCt~!CI47VcQ=0{7 zv(cZ$t^*#aZX)0jB(Q^LB?KzpVstds96*Axl`paXdN^yw2u}lgeUvGvN!Whct=uqvY`cC->MLxBw4c(!2{CA_goyR> z4S+YZR8pAMlh`x@KedYOK`AZSn#7~TdKxu8E$uS75Ft8lxrk3_LlHYA);(j3XslJC zE{imHMt)Z*BekAZB=W*=Y2wD$h?Y^f*az^_izNm ziC(L&^CF)n!2##ntb#R!LIs{^gLEg6OLgA&?Tn5M9b4fJJ)9uJ^#y9w>Q5ob@TahQyV<6EZP z0L~G+0ImmiG3=HSV8~seG-vBWR7G~z{t@I6SKvYQf-$g5cfR0 zuBZbbaydxhxOTo)Mf__8L8{~^a-O;Ye#Az$b6`O$5f8=Ug6Omb9>}SvC>$*dw8oxL z6rq8R9MA&xbigiHZ~{UnWQqf#g%czB(Wsk=;(pqv%W4R3%A4MB^v@9a(Q4bLBuFIbe}ROW3MJ3*j7 z1kP)!v0zx05`z+$Mu;odyCR z@^b$HmStNQz+74C^|>eXu~5+Bw!n}*;^|cC(Q^MDB^Vf0xMyPQH9yTASqF|RMr&a~ z_k|sXa~bW*A4t1_M_}HrL#ur`jd9@M*np22QA+iV+yYDxluI*wbsbcqh{$HdR5ZNW zu@Yta)TqRkWN0vAJ=&eohFfkjphpkt3hnESC9vTLGnKBKWZWREST49VdSq131vRbH)Q=iFC}Si}LhMH}-%9zfM%m zXC8J4*XL$J-BMMbI0+%QXnX{`4Uu*Xx4ORx1(?Ux)9`E|W~BIPL<{*PCvg~a-_ywAA7^y}8w zXnu7?`yaugR@U%iyt^@WzVgl}?MdzzZ1C{%VMObjZ0p?P` zoxz*ttpmfs7wG!h!kWq=Og2rMeR)}(t1c2jxY6%nVLthB>%x(=pyF?QybaV`EB6;Q z`DiF*qO4eNIcq0p`w9n|8X3rDeJ2H1)&B%6E%7SW6>HKEs4i^rW^#tq0K|$bCzfg_ ziHj@SHb@c|)tb4xHc{o37vS<(4uXKXHcIGxU!yKXqSaAz#BXEM55bnezYDJ9(8#CR z_{1J|(fj*<`sY{f$on`R%KiuOhcZXA@hsSi7vXC~_u-UAIJY=7&{)x$g&m#JL2}W6 zDN&4XHfH@J?&(OJ5%|dSwM5wmUd1QqxMV(+h1K6P>99hEu^_mBs@F~JaJot(H_O7A zF+k3fWi0C&`MCgOij}L%n?S4DHiw*1d@r}^+H2&eNDlG(9LmC~tqV;HuM3}Yx3-nr zRLg+8789-w$_prxy6i@wEz=ONmmX5!eGyx!lFP<2@S`rTA0~Z|i3Vh&lJ>WF^RTKA zkOVd8c26OP5~$jfW<$cjS=%8HL6IdfZWBJXV28&IRBwf8ScPM74XkD3gzV}y3KFKs zUc{I_*}nH)%gIWs{Ukc3@=m?W5Vn8%&yMyxsmUK~%;vA^%f&aRZ(}~%nym6U^*&L- ztkY<}%a-4MXS?>{5EebS^=lWvAhkITJ?Opyu%hzNc@jfN?;&J>9y7Y2Uc+Vk|wc`9d*s zRTcQugDWUI=vYGZ#Kb?m6Ork;t@cY=Ud8F-Ga>%spd>}Ost0VQ!oXY8mvhQx+&hcC zyYD4)5^v!aQO^Wqa)mH#^NXU_SH%^e^1pIDL~ferC#@__km z(zJ$S{S(jag`sxy{ok>gNYBTiKelh*+ne9iOE$C9%gUOTJJrs7`b71+-)YOxQ>Z@G zwa;pj1dmYZIM0smRf5hIRxf#H>~zJLIqH%hEklureN#W=H!2yGQ73c-Uqn@MN=SD|bArNdhLA;v!i7IF!n5UL z7rojijp`RQqcmy4?=tw9jGwH6$_PyJh=QvLo}9NUitvsZoeUsjB)wQXWQ(N7d$7b_ zOUV3TMMLnG@EnmKp#(D{Ov-CYnGQIyX4Hc$DVFShDH$oi7Kf@Q^+F)ZqF#IP$W9# zCia0Xs&dF=aORlfyMUPY0&2ddJXk*@y!0kzm~tS?3PBDmqy@k1w{4bwFVvKWa7uCz zAhg(VL{9*y<>U*cZ89mwKadF4OIR1c8MvlN%<(PgBMR|~DM~%)rl;jcUA%ZnqA#6Q zv6QvGA~WEZJ{3OX9XfuK*PmZ8KcfyezhjznYO(K5hbMryqBkXF&ZplgkO+5cZ zuti~`G>-S?mT?ty@hR=H2rqO?#HgWWb?9+8xB@)oCm$t#2x zcgU9nMh@8DuFIB}?hyfBG{;uF=qvI5bY1$i7Xl`Dn5H@>gN$XfZXKzHDg{*QbD(x0$e3>ftc)` zmZL!nQ%8nD*9)ui-{Sm74r^N|#Spudt#Ve|N3sRPVl?!Wr_|ak*i1SCm=2jh&Oz<- zX{9(TH)3IR{UNh!Yj{(9)?j0~W=eA4otp7$*-1Xutr^tr!MX+3XigZ{tJ|)24*H@E zD!T*vGufw4VmFn>RU5vXsjc#?Ixi#BY@Os~kKZ+%mp!yvb83TC_Ju%Q$8YBLBnF?m zLH=U75Zh)br9@NIK?2(9KENuv{SD zpB=Yy*KUrSd%~UHfJmeBN>`UqF%I@KhVi|A=EV)N@wnn_FsnMFcWt z`yBi&ixh{QDa6S&;NQ99(}qi|BkBON{5X5*t71P&b|X_aQQ!7iV4?nDNrrfP_TlM= zBP^0mmKUO`p2Gn%EPSTmoP0=FYxC>ttAhvbz4r#vf8%P2QgknxyE#g#|1b~O;NGKu z_}=$C-?XEmMjmeB&9$@{rb!#2Mvkd0we?L6{@(W-l|)c5JLIj}UC6Tw>po9sfX!xe zeBZu(_Z9cUB=#eNa{WfvjSlZ(fInPWOwvdl^kJ@7g<_Z?m30!FWE)_o7R>940+Gf@ z+eePEe4hADyThUyYw?e6f>tqM6leW1bMM@zC?%mFQM>w-)U`Rt|ev2pA}BbxmP z7uBZVaEFt>l>FE1J&1*Vx!Hbq>B_&YtZSgdEoo@zu2UCUfpJnA-LH^wZ#eOH)K>i4 znGs_f8^;0}e^v)1u3$2l;Ds+RN;s_DYPWs({rPwIym~Z4`xF80a%SmFR<3`-o#R$e zUdfk>7MU=&uEbvOf?5xatj$Q9 zGUi+16Lq${2ctK5mnX&3r)>p0WW)rkpUtwek_p=RRf&!I%9S^ZnyIiljv-~4<>QJv zwGn&l6C)~{p@wVQ_LIap^VCO( zpUc%5M9EpR-dts*2_bk9@sWKQ`4 z7%QS9+x0_d)5cMqo5*b?IZ)9=a;yXy+%gNpq<%UPvk?rz7f_&~#95OJLbjS zL72mi8B2tpm^gVHXW2hudDAo(YDDV8eiQm+r;$RWH3=DwUvH&e+ppsC>D0_)q`kBdzeLDHB;Rt;!OvvuY_= z*f2UmD3DYVsd>WVScAM}N@Dbi;gz*q5a3e>=1#Turdggs23rYJ8ex4is%1^smQM|R z=ta14GgQSVy)+a`v%lQVV?d9&*4ES9l`eBL-iy`j9Mn%`P@W_b=yo(!rSe56%C!wl z%_=0A;# zCOU|v8{S1a%hTz|w)1xcAZ80VK;DSEJWhFHSmV~xN^cS7V1AG|`=Ngo=Ww(6-oN zmtcVI(0rsAZyXOke#RWlgXXrs_eX84lag0E!{8rH-6>X5wweV$q^GznIovbGJSgYA zGIshV{Al6Y86uYtU%%|`ORpRpHCWHz#yoUKc}UUniVqeEnRri^2c(_Fsy;JfRVmfc zLqB@AJm+I@RfS3o&mc$R`xi!h@4GV7hzqI?o6R2Cg`?_eQpBXuJS&#=Te;C=Gk1LC zb`NXxm;xN0$hd^a9)G$W&)Nfpp*9o{5@$f0Oc~9uq*wCi56D_*2Q{4Uwcq!CUb%K+ z+br*Ip5NPir4Vn?lYTG3ZbWjq*Pks7=RcY&4)`ff0n-;;+TAB?C~t1fvu@dZyttz= zeqm{?seg=HF{gYBZ>aU&m9~3|+7~Wd@-k4F`Z&?ohek9B9&zrf}{}+_Fx84q}Ncxxy@0LVqwssdje{d2IuNLxo^usvslX z-+{91o(j#j+MoLft^s|yuuL0}7;I8}H>Q8Vw9Bv_jUOxdSBMQnO%3h0DQxlB*!1aA zJnVNGQRv{`iqowCT?862<6{Y4z4Z1VPNx9p48`3J2uM2c+N0Dx6& zIlc@5cL@DkDjXp&589ROn8G6>8^ulVcI-=O6c(@f-EmiS&m*zLKOdBLG}{E++&jap z9#|flqWz>=CX%gckf85S(0<$W8BinojT(dk9|^^RIV-0Z|V-C2{I-QgeQCtx6=^TMSs76%~R+anhNJ`&sa=u$WZ zQC`h^S6fMmuY4BFNgEZifi%L4Y^)L{qK%Pd>sY-DBl~VRJpARDw|r%8SRw-#-It>? z9jsmJ7$D1oT%odU)k?A&1-o6BO-)E`-3A-^LGl`mPxc1uG3C+M-&bB+TDYU(ZlfJH zs9%cxTFCRug`vP(hzM0^oX$6mlM}G;1So!0>l&I@J|NN8JRDKxl=ombTJw2qAH3{Z zJjEJ~46iSVg5u3|89CsGB)p2fePC#B9Ka2$Z;EvYVlr}NWj#5E;>_;0FR@min75@M z+6AWr^f|u9^$;ol!HVLj5qfCv-YE;TNHiIQUY@LW?<@a}c74LXt&Y|y`|G2za};IA zYSWQt7`y=*hvJ=rx|<`2y?R<6Gb1xWtO` z_$Ip`BjHr66F@qGC3z3^Xbr3}7#M%{mq{~PSr#Lrjn`hT31~FGRYdz}F4{uNEXI{r zfnwXBd``@*n>7?`YH7Sl+9)yTviZ#3CjIQ1|625D`myJ^J>M>VSWNoenQ^1oWd&*0 zepGCoJfn_Emnmocpl9IyxR~I+AAXzNj9-4jC8739^tt+3am3&73+}0ld9^q)X>Tz4 zwf--Pt@?eTzbdwNy$!V4+VW+I-ylTT6jan|ZEd@&^DV8dJ6b0v&VT~rcf&rEDoD?V z;#2KQeTq&k7tV^<^&qJ&;T|cEIi#b7apAXjzOA)Y^eATYoNa;6Z2`xelR3{jeU&fs z+#+`=Y-*`UsiHfak!ctO#s~`)_c+UjtF4hnog6lEs|(I(++3DU0)8l_6eV)GGewR= zP!AKAa*jidaXshTTeO|3Lm)jdH8+h`&ZM6^bL;d)H|P}!j1%{?CcZFw5OKl)OMF!} zT2^{f!3&+$##3lv`44hRgi1Q9c+8p|Qk#5-<$kwBN+KKDAL@E(US3>`H0XXLn4r_&2*s{`&M9UtD}?xT^%_6-P3IsMvRf87 zDU2pB#K92R&($`u(lDT57i>?qWoc9#l~! z;w6G_eqcq1=H-7vi8`hxnJ6_=O4)GbiEH9v)!n0GiR>rz@%^pyEwxHBrsYQ@Sf&YF zhFb*X&Cgss9@ubNZoD|s9TgD_prrin+-h zukLwdqrcHFF4}ToBK5nG#t(RH*@f2F`sST24}$w0gO9Wh&bL3PAdwi4c5foehb$W@ zGYX8IUqRKEC8yS{IrF*pwr7q(Bhs>!F@qtu2n?-9sI%4D+iHGkr

m=CDd>FIIzQ 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 l metadata/subspace_metadata.scale +// ``` +#[subxt::subxt(runtime_metadata_path = "metadata/subspace_metadata.scale")] +pub mod subspace {} + +// Subspace runtime API +type SubspaceApi = subspace::runtime_apis::subspace_api::SubspaceApi; + +// Had to define separately as the inferred type differs from the original `sp_consensus_subspace::ChainConstants`. +type RuntimeChainConstants = subspace::runtime_types::sp_consensus_subspace::ChainConstants; + +async fn get_current_solution_range( + api: &OnlineClient, + subspace_api: &SubspaceApi, +) -> anyhow::Result { + let solution_ranges_runtime_api_call = subspace_api.solution_ranges(); + + // get the solution ranges from the latest block + let current_solution_range = api + .runtime_api() + .at_latest() + .await? + .call(solution_ranges_runtime_api_call) + .await? + .current; + + Ok(current_solution_range) } -// defined type to match with that of runtime storage. -type SolutionRange = u64; - -/// Computes the following: -/// ``` -/// MAX * slot_probability / (pieces_in_sector * chunks / s_buckets) / sectors -/// ``` -const fn sectors_to_solution_range(sectors: u64) -> SolutionRange { - let solution_range = SolutionRange::MAX - // Account for slot probability - / SLOT_PROBABILITY.1 * SLOT_PROBABILITY.0 - // Now take sector size and probability of hitting occupied s-bucket in sector into account - / (MAX_PIECES_IN_SECTOR as u64 * Record::NUM_CHUNKS as u64 / Record::NUM_S_BUCKETS as u64); - - // Take number of sectors into account - solution_range / sectors +async fn get_slot_probability( + api: &OnlineClient, + subspace_api: &SubspaceApi, +) -> anyhow::Result<(u64, u64)> { + let chain_constants_runtime_api_call = subspace_api.chain_constants(); + + // get the chain constants from the latest block + let current_chain_constants = api + .runtime_api() + .at_latest() + .await? + .call(chain_constants_runtime_api_call) + .await?; + + let RuntimeChainConstants::V0 { + slot_probability, .. + } = current_chain_constants; + + Ok(slot_probability) } /// Get the latest total space pledged -fn get_total_space_pledged( - client: &FullClient, - // TODO: may need to replace with None or something to indicate as latest block. - block_hash: H256, - solution_range_storage_key: &StorageKey, -) -> Option { - // Method-1: - // Fetch the initial solution range from storage - let current_solution_range: SolutionRange = - match client.storage(block_hash, solution_range_storage_key) { - Ok(stored_value) => { - let data = stored_value.unwrap_or_default().0; - u64::decode(&mut &data[..]).expect("Decoding of u64 failed") - } - Err(error) => { - tracing::error!("Failed to query initial solution range: {}", error); - return None; - } - }; +async fn get_total_space_pledged() -> anyhow::Result { + let api = OnlineClient::::from_url(WS_URL) + .await + .map_err(|e| anyhow::Error::new(e).context("Failed to create OnlineClient from WS_URL"))?; + + let subspace_api: SubspaceApi = subspace::apis().subspace_api(); - // Method-2: - // TODO: Get the solution range from sectors may be instead of the fetching from runtime storage - // Also, sectors can be calculated based on my space pledged. E.g. if 2 GB, then 1 sector max. - // let current_solution_range = sectors_to_solution_range(1); + let current_solution_range = get_current_solution_range(&api, &subspace_api).await?; + + let slot_probability = get_slot_probability(&api, &subspace_api).await?; // Calculate the total space pledged - // TODO: optimize this snippet with checked arithmetics. let total_space_pledged: u128 = u128::from(u64::MAX) - .saturating_mul(PIECE_SIZE as u128) - .saturating_mul(u128::from(SLOT_PROBABILITY.0)) - / u128::from(current_solution_range) - / u128::from(SLOT_PROBABILITY.1); - - Some(total_space_pledged) + .checked_mul(PIECE_SIZE as u128) + .expect("Multiplication with piece size works; qed") + .checked_mul(u128::from(slot_probability.0)) + .expect("Multiplication with slot probability_0 works; qed") + .checked_div(u128::from(current_solution_range)) + .expect("Division by current solution range works; qed") + .checked_div(u128::from(slot_probability.1)) + .expect("Division by slot probability_1 works; qed"); + + Ok(total_space_pledged) } pub(super) fn load_chain_specification(chain_spec: &'static [u8]) -> Result { From 783ea573ce532c368590e5af1e88594743849b93 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Thu, 14 Mar 2024 06:18:01 +0530 Subject: [PATCH 04/29] Add the fn to predict expected reward timestamp based on space_pledged --- Cargo.toml | 1 + src/backend/farmer.rs | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index f6c3bc27..08bdfe20 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -99,6 +99,7 @@ thread-priority = "1.1.0" tokio = { version = "1.37.0", features = ["fs", "time"] } tracing = "0.1.40" tracing-subscriber = "0.3.18" +chrono = "0.4.35" [target.'cfg(windows)'.dependencies] native-dialog = "0.7.0" diff --git a/src/backend/farmer.rs b/src/backend/farmer.rs index a041d7ae..eb02cd16 100644 --- a/src/backend/farmer.rs +++ b/src/backend/farmer.rs @@ -684,3 +684,19 @@ where action_sender, }) } + +/// the farmer can expect to get the next reward payment in this time units (sec/min/hr). +fn calculate_expected_reward_duration_from_now( + total_space_pledged: u128, + space_pledged: u128, + last_reward_timestamp: Option, +) -> i64 { + // Time elapsed since the last reward payment timestamp. + let time_previous = Utc::now().timestamp() - last_reward_timestamp.unwrap_or(0); + + // Expected time duration for next reward payment since the last reward payment timestamp. + let expected_time_next = (total_space_pledged as i64 / space_pledged as i64) * time_previous; + + // subtract the duration till now from the expected time duration to get the ETA duration. + expected_time_next - time_previous +} From e0dab347a3ee2950a1978f54274394f3a7619d76 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Thu, 14 Mar 2024 07:12:01 +0530 Subject: [PATCH 05/29] Remove warnings --- src/backend/farmer.rs | 1 + src/backend/node.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/backend/farmer.rs b/src/backend/farmer.rs index eb02cd16..d7aa35b6 100644 --- a/src/backend/farmer.rs +++ b/src/backend/farmer.rs @@ -686,6 +686,7 @@ where } /// the farmer can expect to get the next reward payment in this time units (sec/min/hr). +#[allow(dead_code)] fn calculate_expected_reward_duration_from_now( total_space_pledged: u128, space_pledged: u128, diff --git a/src/backend/node.rs b/src/backend/node.rs index 30fffa73..97194ea6 100644 --- a/src/backend/node.rs +++ b/src/backend/node.rs @@ -349,6 +349,7 @@ async fn get_slot_probability( } /// Get the latest total space pledged +#[allow(dead_code)] async fn get_total_space_pledged() -> anyhow::Result { let api = OnlineClient::::from_url(WS_URL) .await From 991b148cd6bd27b7f4977449feb506d3616a2d25 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Thu, 14 Mar 2024 22:57:36 +0530 Subject: [PATCH 06/29] Remove external crate: chrono Removed chrono crate, instead used the current timestamp using std. lib --- Cargo.toml | 48 ------------------------------------------------ 1 file changed, 48 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 08bdfe20..854e14be 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -99,7 +99,6 @@ thread-priority = "1.1.0" tokio = { version = "1.37.0", features = ["fs", "time"] } tracing = "0.1.40" tracing-subscriber = "0.3.18" -chrono = "0.4.35" [target.'cfg(windows)'.dependencies] native-dialog = "0.7.0" @@ -121,58 +120,11 @@ numa = [ # # This list is ordered alphabetically. [profile.dev.package] -bitvec = { opt-level = 3 } -blake2 = { opt-level = 3 } -blake3 = { opt-level = 3 } -blake2b_simd = { opt-level = 3 } -blst = { opt-level = 3 } -rust-kzg-blst = { opt-level = 3 } -chacha20 = { opt-level = 3 } -chacha20poly1305 = { opt-level = 3 } -cranelift-codegen = { opt-level = 3 } -cranelift-wasm = { opt-level = 3 } -crc32fast = { opt-level = 3 } -crossbeam-deque = { opt-level = 3 } -crypto-mac = { opt-level = 3 } -curve25519-dalek = { opt-level = 3 } -ed25519-zebra = { opt-level = 3 } -flate2 = { opt-level = 3 } -futures-channel = { opt-level = 3 } -hashbrown = { opt-level = 3 } -hash-db = { opt-level = 3 } -hmac = { opt-level = 3 } -httparse = { opt-level = 3 } -integer-sqrt = { opt-level = 3 } -k256 = { opt-level = 3 } -keccak = { opt-level = 3 } -kzg = { opt-level = 3 } -libsecp256k1 = { opt-level = 3 } -libz-sys = { opt-level = 3 } -mio = { opt-level = 3 } -nalgebra = { opt-level = 3 } -num-bigint = { opt-level = 3 } parking_lot = { opt-level = 3 } -parking_lot_core = { opt-level = 3 } -percent-encoding = { opt-level = 3 } -primitive-types = { opt-level = 3 } -ring = { opt-level = 3 } -rustls = { opt-level = 3 } -secp256k1 = { opt-level = 3 } -sha2 = { opt-level = 3 } -sha3 = { opt-level = 3 } -smallvec = { opt-level = 3 } -snow = { opt-level = 3 } -subspace-archiving = { opt-level = 3 } subspace-core-primitives = { opt-level = 3 } subspace-erasure-coding = { opt-level = 3 } subspace-farmer-components = { opt-level = 3 } subspace-proof-of-space = { opt-level = 3 } -subspace-proof-of-time = { opt-level = 3 } -twox-hash = { opt-level = 3 } -uint = { opt-level = 3 } -x25519-dalek = { opt-level = 3 } -yamux = { opt-level = 3 } -zeroize = { opt-level = 3 } [profile.release] # Substrate runtime requires unwinding. From f4bdccdb7fcb553830bb2606c87701d0deeb315e Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Fri, 15 Mar 2024 01:55:15 +0530 Subject: [PATCH 07/29] Replace RPC approach with direct runtime API call to get the solution range --- metadata/subspace_metadata.scale | Bin 93868 -> 0 bytes src/backend/node.rs | 94 +++++++------------------------ 2 files changed, 21 insertions(+), 73 deletions(-) delete mode 100644 metadata/subspace_metadata.scale diff --git a/metadata/subspace_metadata.scale b/metadata/subspace_metadata.scale deleted file mode 100644 index 06f35793248460d618727207022de02f3efb7de5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93868 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

m=CDd>FIIzQ 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 l metadata/subspace_metadata.scale -// ``` -#[subxt::subxt(runtime_metadata_path = "metadata/subspace_metadata.scale")] -pub mod subspace {} - -// Subspace runtime API -type SubspaceApi = subspace::runtime_apis::subspace_api::SubspaceApi; - -// Had to define separately as the inferred type differs from the original `sp_consensus_subspace::ChainConstants`. -type RuntimeChainConstants = subspace::runtime_types::sp_consensus_subspace::ChainConstants; - -async fn get_current_solution_range( - api: &OnlineClient, - subspace_api: &SubspaceApi, -) -> anyhow::Result { - let solution_ranges_runtime_api_call = subspace_api.solution_ranges(); - - // get the solution ranges from the latest block - let current_solution_range = api - .runtime_api() - .at_latest() - .await? - .call(solution_ranges_runtime_api_call) - .await? - .current; - - Ok(current_solution_range) -} - -async fn get_slot_probability( - api: &OnlineClient, - subspace_api: &SubspaceApi, -) -> anyhow::Result<(u64, u64)> { - let chain_constants_runtime_api_call = subspace_api.chain_constants(); - - // get the chain constants from the latest block - let current_chain_constants = api - .runtime_api() - .at_latest() - .await? - .call(chain_constants_runtime_api_call) - .await?; - - let RuntimeChainConstants::V0 { - slot_probability, .. - } = current_chain_constants; - - Ok(slot_probability) -} - -/// Get the latest total space pledged #[allow(dead_code)] -async fn get_total_space_pledged() -> anyhow::Result { - let api = OnlineClient::::from_url(WS_URL) - .await - .map_err(|e| anyhow::Error::new(e).context("Failed to create OnlineClient from WS_URL"))?; - - let subspace_api: SubspaceApi = subspace::apis().subspace_api(); - - let current_solution_range = get_current_solution_range(&api, &subspace_api).await?; - - let slot_probability = get_slot_probability(&api, &subspace_api).await?; +pub(crate) fn get_total_space_pledged( + client: &Client, + block_hash: H256, +) -> Result +where + Block: BlockT + sp_api::__private::BlockT, + Client: ProvideRuntimeApi, + Client::Api: SubspaceApi, +{ + let current_solution_range = client + .runtime_api() + .solution_ranges(block_hash) + .map(|solution_ranges| solution_ranges.current) + .expect("Failed to get current solution range"); // Calculate the total space pledged let total_space_pledged: u128 = u128::from(u64::MAX) .checked_mul(PIECE_SIZE as u128) .expect("Multiplication with piece size works; qed") - .checked_mul(u128::from(slot_probability.0)) + .checked_mul(u128::from(SLOT_PROBABILITY.0)) .expect("Multiplication with slot probability_0 works; qed") .checked_div(u128::from(current_solution_range)) .expect("Division by current solution range works; qed") - .checked_div(u128::from(slot_probability.1)) + .checked_div(u128::from(SLOT_PROBABILITY.1)) .expect("Division by slot probability_1 works; qed"); Ok(total_space_pledged) From 27fb06db5f7e8af334090ef74e46544ff1d5fbef Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Fri, 15 Mar 2024 02:39:48 +0530 Subject: [PATCH 08/29] Add minor changes --- src/backend/farmer.rs | 2 +- src/backend/node.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/farmer.rs b/src/backend/farmer.rs index d7aa35b6..280f3282 100644 --- a/src/backend/farmer.rs +++ b/src/backend/farmer.rs @@ -687,7 +687,7 @@ where /// the farmer can expect to get the next reward payment in this time units (sec/min/hr). #[allow(dead_code)] -fn calculate_expected_reward_duration_from_now( +pub(crate) fn calculate_expected_reward_duration_from_now( total_space_pledged: u128, space_pledged: u128, last_reward_timestamp: Option, diff --git a/src/backend/node.rs b/src/backend/node.rs index be24c824..41d018d4 100644 --- a/src/backend/node.rs +++ b/src/backend/node.rs @@ -310,7 +310,7 @@ where .expect("Failed to get current solution range"); // Calculate the total space pledged - let total_space_pledged: u128 = u128::from(u64::MAX) + let total_space_pledged = u128::from(u64::MAX) .checked_mul(PIECE_SIZE as u128) .expect("Multiplication with piece size works; qed") .checked_mul(u128::from(SLOT_PROBABILITY.0)) From bd91a7e408414d289abb72fe64444b58d41b3d5c Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Mon, 18 Mar 2024 12:46:46 +0530 Subject: [PATCH 09/29] Made changed based on PR #161#pullrequestreview-1941023244 - Sorted sp-api alphabetically - Synced '[profile.dev.package]' from 'main' branch - Reverted 'total_space_pledged' formula to original one - Added snippet to fetch SLOT_PROBABILITY from runtime api client directly. TODO: uncomment later. --- src/backend/node.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/backend/node.rs b/src/backend/node.rs index 41d018d4..0b07fcab 100644 --- a/src/backend/node.rs +++ b/src/backend/node.rs @@ -288,8 +288,6 @@ fn get_total_account_balance( Some(account_data.free + account_data.reserved + account_data.frozen) } -// defined here: https://github.com/subspace/subspace/blob/5d8b65740ff054b01ebcbaf5a905e74274c1a5d0/crates/subspace-core-primitives/src/pieces.rs#L803 -const PIECE_SIZE: usize = 1048672/* the actual piece size from your runtime */; // TODO: needs to be moved to runtime constants or somewhere else const SLOT_PROBABILITY: (u64, u64) = (1, 6); @@ -309,16 +307,19 @@ where .map(|solution_ranges| solution_ranges.current) .expect("Failed to get current solution range"); + // TODO: Uncomment later. + // let slot_probability = client + // .runtime_api() + // .chain_constants(block_hash) + // .map(|chain_constants| chain_constants.slot_probability()) + // .unwrap(); + // Calculate the total space pledged let total_space_pledged = u128::from(u64::MAX) - .checked_mul(PIECE_SIZE as u128) - .expect("Multiplication with piece size works; qed") - .checked_mul(u128::from(SLOT_PROBABILITY.0)) - .expect("Multiplication with slot probability_0 works; qed") - .checked_div(u128::from(current_solution_range)) - .expect("Division by current solution range works; qed") - .checked_div(u128::from(SLOT_PROBABILITY.1)) - .expect("Division by slot probability_1 works; qed"); + .saturating_mul(subspace_core_primitives::Piece::SIZE as u128) + .saturating_mul(u128::from(SLOT_PROBABILITY.0)) + / u128::from(current_solution_range) + / u128::from(SLOT_PROBABILITY.1); Ok(total_space_pledged) } From 4f7b3648bf230145bfe5679978d4e10a14deefb6 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Mon, 18 Mar 2024 16:17:33 +0530 Subject: [PATCH 10/29] Rectify calculation of total space pledged Previously used the formula as defined in subspace-test-runtime. Now, changed as defined in subspace-runtime. --- src/backend/node.rs | 17 ++++++++--------- src/backend/utils.rs | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/backend/node.rs b/src/backend/node.rs index 0b07fcab..141316b1 100644 --- a/src/backend/node.rs +++ b/src/backend/node.rs @@ -2,7 +2,7 @@ mod utils; use crate::backend::farmer::maybe_node_client::MaybeNodeRpcClient; use crate::backend::node::utils::account_storage_key; -use crate::backend::utils::{Handler, HandlerFn}; +use crate::backend::utils::{solution_range_to_sectors, Handler, HandlerFn, MAX_PIECES_IN_SECTOR}; use crate::PosTable; use event_listener_primitives::HandlerId; use frame_system::AccountInfo; @@ -289,7 +289,7 @@ fn get_total_account_balance( } // TODO: needs to be moved to runtime constants or somewhere else -const SLOT_PROBABILITY: (u64, u64) = (1, 6); +pub(crate) const SLOT_PROBABILITY: (u64, u64) = (1, 6); #[allow(dead_code)] pub(crate) fn get_total_space_pledged( @@ -314,14 +314,13 @@ where // .map(|chain_constants| chain_constants.slot_probability()) // .unwrap(); - // Calculate the total space pledged - let total_space_pledged = u128::from(u64::MAX) - .saturating_mul(subspace_core_primitives::Piece::SIZE as u128) - .saturating_mul(u128::from(SLOT_PROBABILITY.0)) - / u128::from(current_solution_range) - / u128::from(SLOT_PROBABILITY.1); + // calculate the sectors + let sectors = solution_range_to_sectors(current_solution_range); - Ok(total_space_pledged) + // Calculate the total space pledged + Ok(sectors as u128 + * MAX_PIECES_IN_SECTOR as u128 + * subspace_core_primitives::Piece::SIZE as u128) } pub(super) fn load_chain_specification(chain_spec: &'static [u8]) -> Result { diff --git a/src/backend/utils.rs b/src/backend/utils.rs index f908107b..125d8516 100644 --- a/src/backend/utils.rs +++ b/src/backend/utils.rs @@ -1,5 +1,26 @@ +use crate::backend::node::SLOT_PROBABILITY; use event_listener_primitives::Bag; use std::sync::Arc; +use subspace_core_primitives::{Record, SolutionRange}; pub(super) type HandlerFn = Arc; pub(super) type Handler = Bag, A>; + +// defined as constant in `subspace-farmer-components`, `subspace-runtime`. +// https://github.com/subspace/subspace/blob/df8d33b65fff6a88d77fa8090533879199bcb422/crates/subspace-runtime/src/lib.rs#L104 +pub(crate) const MAX_PIECES_IN_SECTOR: u16 = 1000; + +/// Computes the following: +/// ``` +/// MAX * slot_probability / (pieces_in_sector * chunks / s_buckets) / solution_range +/// ``` +pub(crate) const fn solution_range_to_sectors(solution_range: SolutionRange) -> u64 { + let sectors = SolutionRange::MAX + // Account for slot probability + / SLOT_PROBABILITY.1 * SLOT_PROBABILITY.0 + // Now take sector size and probability of hitting occupied s-bucket in sector into account + / (MAX_PIECES_IN_SECTOR as u64 * Record::NUM_CHUNKS as u64 / Record::NUM_S_BUCKETS as u64); + + // Take solution range into account + sectors / solution_range +} From f89ab703767dbe78253ee2b4e3b8f756885a31c3 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Mon, 18 Mar 2024 19:03:36 +0530 Subject: [PATCH 11/29] Constants fetched using runtime_api - max_pieces_in_sector, slot_probability are fetched using runtime_api rather than defining separately in space-acres. - 'sp-api' crate modified as git dependency --- src/backend/node.rs | 28 ++++++++++++++-------------- src/backend/utils.rs | 19 ++++++++++--------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/backend/node.rs b/src/backend/node.rs index 141316b1..7c50a2ba 100644 --- a/src/backend/node.rs +++ b/src/backend/node.rs @@ -2,7 +2,7 @@ mod utils; use crate::backend::farmer::maybe_node_client::MaybeNodeRpcClient; use crate::backend::node::utils::account_storage_key; -use crate::backend::utils::{solution_range_to_sectors, Handler, HandlerFn, MAX_PIECES_IN_SECTOR}; +use crate::backend::utils::{solution_range_to_sectors, Handler, HandlerFn}; use crate::PosTable; use event_listener_primitives::HandlerId; use frame_system::AccountInfo; @@ -288,9 +288,6 @@ fn get_total_account_balance( Some(account_data.free + account_data.reserved + account_data.frozen) } -// TODO: needs to be moved to runtime constants or somewhere else -pub(crate) const SLOT_PROBABILITY: (u64, u64) = (1, 6); - #[allow(dead_code)] pub(crate) fn get_total_space_pledged( client: &Client, @@ -304,22 +301,25 @@ where let current_solution_range = client .runtime_api() .solution_ranges(block_hash) - .map(|solution_ranges| solution_ranges.current) - .expect("Failed to get current solution range"); + .map(|solution_ranges| solution_ranges.current)?; + + let slot_probability = client + .runtime_api() + .chain_constants(block_hash) + .map(|chain_constants| chain_constants.slot_probability())?; - // TODO: Uncomment later. - // let slot_probability = client - // .runtime_api() - // .chain_constants(block_hash) - // .map(|chain_constants| chain_constants.slot_probability()) - // .unwrap(); + let max_pieces_in_sector = client.runtime_api().max_pieces_in_sector(block_hash)?; // calculate the sectors - let sectors = solution_range_to_sectors(current_solution_range); + let sectors = solution_range_to_sectors( + current_solution_range, + slot_probability, + max_pieces_in_sector, + ); // Calculate the total space pledged Ok(sectors as u128 - * MAX_PIECES_IN_SECTOR as u128 + * max_pieces_in_sector as u128 * subspace_core_primitives::Piece::SIZE as u128) } diff --git a/src/backend/utils.rs b/src/backend/utils.rs index 125d8516..b0fab82e 100644 --- a/src/backend/utils.rs +++ b/src/backend/utils.rs @@ -1,4 +1,3 @@ -use crate::backend::node::SLOT_PROBABILITY; use event_listener_primitives::Bag; use std::sync::Arc; use subspace_core_primitives::{Record, SolutionRange}; @@ -6,20 +5,22 @@ use subspace_core_primitives::{Record, SolutionRange}; pub(super) type HandlerFn = Arc; pub(super) type Handler = Bag, A>; -// defined as constant in `subspace-farmer-components`, `subspace-runtime`. -// https://github.com/subspace/subspace/blob/df8d33b65fff6a88d77fa8090533879199bcb422/crates/subspace-runtime/src/lib.rs#L104 -pub(crate) const MAX_PIECES_IN_SECTOR: u16 = 1000; - -/// Computes the following: +// TODO: pointing to source code: https://github.com/subspace/subspace/blob/df8d33b65fff6a88d77fa8090533879199bcb422/crates/subspace-runtime/src/lib.rs#L222-L235 +// Needs to de-duplicate +/// Computes the following: https://github.com/subspace/subspace/blob/df8d33b65fff6a88d77fa8090533879199bcb422/crates/subspace-runtime/src/lib.rs#L222-L235 /// ``` /// MAX * slot_probability / (pieces_in_sector * chunks / s_buckets) / solution_range /// ``` -pub(crate) const fn solution_range_to_sectors(solution_range: SolutionRange) -> u64 { +pub(crate) const fn solution_range_to_sectors( + solution_range: SolutionRange, + slot_probability: (u64, u64), + max_pieces_in_sector: u16, +) -> u64 { let sectors = SolutionRange::MAX // Account for slot probability - / SLOT_PROBABILITY.1 * SLOT_PROBABILITY.0 + / slot_probability.1 * slot_probability.0 // Now take sector size and probability of hitting occupied s-bucket in sector into account - / (MAX_PIECES_IN_SECTOR as u64 * Record::NUM_CHUNKS as u64 / Record::NUM_S_BUCKETS as u64); + / (max_pieces_in_sector as u64 * Record::NUM_CHUNKS as u64 / Record::NUM_S_BUCKETS as u64); // Take solution range into account sectors / solution_range From 36dc4d54ad6e8b086dee38dde192399ee89fd9d4 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Mon, 18 Mar 2024 19:04:40 +0530 Subject: [PATCH 12/29] minor change --- src/backend/utils.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/utils.rs b/src/backend/utils.rs index b0fab82e..07445a45 100644 --- a/src/backend/utils.rs +++ b/src/backend/utils.rs @@ -6,7 +6,7 @@ pub(super) type HandlerFn = Arc; pub(super) type Handler = Bag, A>; // TODO: pointing to source code: https://github.com/subspace/subspace/blob/df8d33b65fff6a88d77fa8090533879199bcb422/crates/subspace-runtime/src/lib.rs#L222-L235 -// Needs to de-duplicate +// Needs to be de-duplicated /// Computes the following: https://github.com/subspace/subspace/blob/df8d33b65fff6a88d77fa8090533879199bcb422/crates/subspace-runtime/src/lib.rs#L222-L235 /// ``` /// MAX * slot_probability / (pieces_in_sector * chunks / s_buckets) / solution_range From 4752d0fabb5e6a38da9ae4dbe6985b2fecfb7c10 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Mon, 18 Mar 2024 22:31:33 +0530 Subject: [PATCH 13/29] Refactor runtime API calls in node.rs for better error handling --- src/backend/node.rs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/backend/node.rs b/src/backend/node.rs index 7c50a2ba..d89008de 100644 --- a/src/backend/node.rs +++ b/src/backend/node.rs @@ -298,17 +298,11 @@ where Client: ProvideRuntimeApi, Client::Api: SubspaceApi, { - let current_solution_range = client - .runtime_api() - .solution_ranges(block_hash) - .map(|solution_ranges| solution_ranges.current)?; + let runtime_api = client.runtime_api(); - let slot_probability = client - .runtime_api() - .chain_constants(block_hash) - .map(|chain_constants| chain_constants.slot_probability())?; - - let max_pieces_in_sector = client.runtime_api().max_pieces_in_sector(block_hash)?; + let current_solution_range = runtime_api.solution_ranges(block_hash)?.current; + let slot_probability = runtime_api.chain_constants(block_hash)?.slot_probability(); + let max_pieces_in_sector = runtime_api.max_pieces_in_sector(block_hash)?; // calculate the sectors let sectors = solution_range_to_sectors( From bba9146aa1c793432bb36877d125bdd29d193a0a Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Wed, 8 May 2024 22:28:04 +0530 Subject: [PATCH 14/29] Resolve conflicts & rebase over v0.1.17 --- Cargo.lock | 1323 +++++++++-------------------------------- Cargo.toml | 1 + src/backend/farmer.rs | 6 +- 3 files changed, 275 insertions(+), 1055 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6e9c6c1d..0eba0bc7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -722,15 +722,6 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" -[[package]] -name = "arrayvec" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" -dependencies = [ - "nodrop", -] - [[package]] name = "arrayvec" version = "0.7.4" @@ -1011,24 +1002,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "async-signal" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" -dependencies = [ - "async-io 2.3.2", - "async-lock 2.8.0", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix 0.38.31", - "signal-hook-registry", - "slab", - "windows-sys 0.48.0", -] - [[package]] name = "async-task" version = "4.7.1" @@ -1327,16 +1300,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "blake2-rfc" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" -dependencies = [ - "arrayvec 0.4.12", - "constant_time_eq 0.1.5", -] - [[package]] name = "blake2b_simd" version = "1.0.2" @@ -1344,8 +1307,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", - "arrayvec 0.7.4", - "constant_time_eq 0.3.0", + "arrayvec", + "constant_time_eq", ] [[package]] @@ -1355,8 +1318,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" dependencies = [ "arrayref", - "arrayvec 0.7.4", - "constant_time_eq 0.3.0", + "arrayvec", + "constant_time_eq", ] [[package]] @@ -1366,10 +1329,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec", "cc", "cfg-if", - "constant_time_eq 0.3.0", + "constant_time_eq", "rayon", ] @@ -1924,12 +1887,6 @@ dependencies = [ "tiny-keccak", ] -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - [[package]] name = "constant_time_eq" version = "0.3.0" @@ -2199,9 +2156,9 @@ dependencies = [ "sc-transaction-pool-api", "sc-utils", "sp-blockchain", - "sp-core 21.0.0", + "sp-core", "sp-messenger", - "sp-runtime 24.0.0", + "sp-runtime", "tracing", ] @@ -2224,15 +2181,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "crossbeam-queue" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.19" @@ -2367,76 +2315,6 @@ dependencies = [ "parking_lot_core 0.9.10", ] -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - -[[package]] -name = "darling" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" -dependencies = [ - "darling_core 0.20.8", - "darling_macro 0.20.8", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", -] - -[[package]] -name = "darling_core" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 2.0.52", -] - -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" -dependencies = [ - "darling_core 0.20.8", - "quote", - "syn 2.0.52", -] - [[package]] name = "data-encoding" version = "2.6.0" @@ -2710,7 +2588,7 @@ dependencies = [ "ark-serialize", "ark-std", "ark-transcript", - "arrayvec 0.7.4", + "arrayvec", "zeroize", ] @@ -2761,14 +2639,14 @@ dependencies = [ "sp-api", "sp-block-fees", "sp-blockchain", - "sp-core 21.0.0", + "sp-core", "sp-domains", "sp-executive", - "sp-externalities 0.19.0", + "sp-externalities", "sp-inherents", "sp-messenger", - "sp-runtime 24.0.0", - "sp-state-machine 0.28.0", + "sp-runtime", + "sp-state-machine", "sp-timestamp", "sp-version", "subspace-core-primitives", @@ -2788,9 +2666,9 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-core 21.0.0", - "sp-runtime 24.0.0", - "sp-weights 20.0.0", + "sp-core", + "sp-runtime", + "sp-weights", "subspace-core-primitives", "subspace-runtime-primitives", ] @@ -2801,12 +2679,6 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - [[package]] name = "dtoa" version = "1.0.9" @@ -2907,21 +2779,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ed25519-zebra" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" -dependencies = [ - "curve25519-dalek 4.1.2", - "ed25519", - "hashbrown 0.14.3", - "hex", - "rand_core 0.6.4", - "sha2 0.10.8", - "zeroize", -] - [[package]] name = "either" version = "1.11.0" @@ -3091,17 +2948,6 @@ dependencies = [ "pin-project-lite 0.2.14", ] -[[package]] -name = "event-listener" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b5fb89194fa3cad959b833185b3063ba881dbfc7030680b314250779fb4cc91" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite 0.2.13", -] - [[package]] name = "event-listener-primitives" version = "2.0.1" @@ -3133,16 +2979,6 @@ dependencies = [ "pin-project-lite 0.2.14", ] -[[package]] -name = "event-listener-strategy" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feedafcaa9b749175d5ac357452a9d41ea2911da598fde46ce1fe02c37751291" -dependencies = [ - "event-listener 5.2.0", - "pin-project-lite 0.2.13", -] - [[package]] name = "exit-future" version = "0.2.0" @@ -3396,11 +3232,11 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 21.0.0", - "sp-io 23.0.0", - "sp-runtime 24.0.0", - "sp-runtime-interface 17.0.0", - "sp-std 8.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-runtime-interface", + "sp-std", ] [[package]] @@ -3424,13 +3260,13 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-application-crypto 23.0.0", - "sp-core 21.0.0", - "sp-io 23.0.0", - "sp-runtime 24.0.0", - "sp-runtime-interface 17.0.0", - "sp-std 8.0.0", - "sp-storage 13.0.0", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-runtime-interface", + "sp-std", + "sp-storage", "static_assertions", ] @@ -3456,7 +3292,7 @@ dependencies = [ "bitflags 1.3.2", "docify", "environmental", - "frame-metadata 16.0.0", + "frame-metadata", "frame-support-procedural", "impl-trait-for-tuples", "k256", @@ -3475,14 +3311,14 @@ dependencies = [ "sp-debug-derive", "sp-genesis-builder", "sp-inherents", - "sp-io 23.0.0", + "sp-io", "sp-metadata-ir", - "sp-runtime 24.0.0", + "sp-runtime", "sp-staking", - "sp-state-machine 0.28.0", - "sp-std 8.0.0", - "sp-tracing 10.0.0", - "sp-weights 20.0.0", + "sp-state-machine", + "sp-std", + "sp-tracing", + "sp-weights", "static_assertions", "tt-call", ] @@ -3540,12 +3376,12 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 21.0.0", - "sp-io 23.0.0", - "sp-runtime 24.0.0", - "sp-std 8.0.0", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", "sp-version", - "sp-weights 20.0.0", + "sp-weights", ] [[package]] @@ -4281,7 +4117,6 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash 0.8.11", "allocator-api2", - "serde", ] [[package]] @@ -4648,25 +4483,17 @@ dependencies = [ "tokio", "tokio-rustls 0.25.0", "tower-service", - "tracing", - "want", ] [[package]] -name = "hyper-rustls" -version = "0.24.2" name = "hyper-util" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" dependencies = [ "bytes", "futures-channel", "futures-util", - "http 0.2.12", - "hyper", - "log", "http 1.1.0", "http-body 1.0.0", "hyper 1.3.1", @@ -4871,12 +4698,6 @@ dependencies = [ "hashbrown 0.14.5", ] -[[package]] -name = "indexmap-nostd" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" - [[package]] name = "indoc" version = "2.0.5" @@ -5030,30 +4851,18 @@ version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfdb12a2381ea5b2e68c3469ec604a007b367778cdb14d09612c8069ebd616ad" dependencies = [ - "jsonrpsee-client-transport 0.16.3", - "jsonrpsee-core 0.16.3", - "jsonrpsee-http-client 0.16.3", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-http-client", "jsonrpsee-proc-macros", "jsonrpsee-server", - "jsonrpsee-types 0.16.3", + "jsonrpsee-types", "jsonrpsee-wasm-client", "jsonrpsee-ws-client", "tokio", "tracing", ] -[[package]] -name = "jsonrpsee" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9579d0ca9fb30da026bac2f0f7d9576ec93489aeb7cd4971dd5b4617d82c79b2" -dependencies = [ - "jsonrpsee-client-transport 0.21.0", - "jsonrpsee-core 0.21.0", - "jsonrpsee-http-client 0.21.0", - "jsonrpsee-types 0.21.0", -] - [[package]] name = "jsonrpsee-client-transport" version = "0.22.5" @@ -5078,27 +4887,6 @@ dependencies = [ "webpki-roots 0.26.1", ] -[[package]] -name = "jsonrpsee-client-transport" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9f9ed46590a8d5681975f126e22531698211b926129a40a2db47cbca429220" -dependencies = [ - "futures-util", - "http 0.2.12", - "jsonrpsee-core 0.21.0", - "pin-project", - "rustls-native-certs 0.7.0", - "rustls-pki-types", - "soketto", - "thiserror", - "tokio", - "tokio-rustls 0.25.0", - "tokio-util", - "tracing", - "url", -] - [[package]] name = "jsonrpsee-core" version = "0.22.5" @@ -5125,30 +4913,6 @@ dependencies = [ "wasm-bindgen-futures", ] -[[package]] -name = "jsonrpsee-core" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "776d009e2f591b78c038e0d053a796f94575d66ca4e77dd84bfc5e81419e436c" -dependencies = [ - "anyhow", - "async-lock 3.3.0", - "async-trait", - "beef", - "futures-timer", - "futures-util", - "hyper", - "jsonrpsee-types 0.21.0", - "pin-project", - "rustc-hash", - "serde", - "serde_json", - "thiserror", - "tokio", - "tokio-stream", - "tracing", -] - [[package]] name = "jsonrpsee-http-client" version = "0.22.5" @@ -5164,26 +4928,6 @@ dependencies = [ "serde_json", "thiserror", "tokio", - "tracing", -] - -[[package]] -name = "jsonrpsee-http-client" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b7de9f3219d95985eb77fd03194d7c1b56c19bce1abfcc9d07462574b15572" -dependencies = [ - "async-trait", - "hyper", - "hyper-rustls", - "jsonrpsee-core 0.21.0", - "jsonrpsee-types 0.21.0", - "tower", - "url", - "serde", - "serde_json", - "thiserror", - "tokio", "tower", "tracing", "url", @@ -5239,28 +4983,15 @@ dependencies = [ "thiserror", ] -[[package]] -name = "jsonrpsee-types" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3266dfb045c9174b24c77c2dfe0084914bb23a6b2597d70c9dc6018392e1cd1b" -dependencies = [ - "anyhow", - "beef", - "serde", - "serde_json", - "thiserror", -] - [[package]] name = "jsonrpsee-wasm-client" version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f448d8eacd945cc17b6c0b42c361531ca36a962ee186342a97cdb8fca679cd77" dependencies = [ - "jsonrpsee-client-transport 0.16.3", - "jsonrpsee-core 0.16.3", - "jsonrpsee-types 0.16.3", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", ] [[package]] @@ -5714,7 +5445,7 @@ version = "0.43.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39d5ef876a2b2323d63c258e63c2f8e36f205fe5a11f0b3095d59635650790ff" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", "asynchronous-codec 0.6.2", "bytes", "either", @@ -5742,7 +5473,7 @@ version = "0.45.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cc5767727d062c4eac74dd812c998f0e488008e82cce9c33b463d38423f9ad2" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", "asynchronous-codec 0.7.0", "bytes", "either", @@ -6664,7 +6395,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daa3eb39495d8e2e2947a1d862852c90cc6a4a8845f8b41c8829cb9fcc047f4a" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec", "bitflags 1.3.2", "blake2 0.10.6", "c2-chacha", @@ -6696,9 +6427,9 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-beefy", - "sp-core 21.0.0", + "sp-core", "sp-mmr-primitives", - "sp-runtime 24.0.0", + "sp-runtime", ] [[package]] @@ -6711,9 +6442,9 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core 21.0.0", + "sp-core", "sp-mmr-primitives", - "sp-runtime 24.0.0", + "sp-runtime", ] [[package]] @@ -7127,7 +6858,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", "itoa", ] @@ -7147,7 +6878,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", - "num-bigint", "num-integer", "num-traits", ] @@ -7386,8 +7116,8 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-runtime 24.0.0", - "sp-std 8.0.0", + "sp-runtime", + "sp-std", ] [[package]] @@ -7401,58 +7131,58 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "sp-core 21.0.0", - "sp-io 23.0.0", + "sp-core", + "sp-io", "sp-mmr-primitives", - "sp-runtime 24.0.0", - "sp-std 8.0.0", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-transaction-payment" +version = "28.0.0" +source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ "frame-support", "frame-system", "parity-scale-codec", "scale-info", "serde", - "sp-core 21.0.0", - "sp-io 23.0.0", - "sp-runtime 24.0.0", - "sp-std 8.0.0", -] - + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-transaction-payment-rpc" +version = "30.0.0" +source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ - "jsonrpsee 0.16.3", + "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", "sp-api", "sp-blockchain", - "sp-core 21.0.0", + "sp-core", "sp-rpc", - "sp-runtime 24.0.0", - "sp-weights 20.0.0", + "sp-runtime", + "sp-weights", ] [[package]] name = "pallet-transaction-payment-rpc-runtime-api" +version = "28.0.0" +source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", "sp-api", - "sp-runtime 24.0.0", - "sp-weights 20.0.0", + "sp-runtime", + "sp-weights", ] [[package]] -version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" -version = "30.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" -version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" name = "pango" version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7477,6 +7207,19 @@ dependencies = [ "system-deps", ] +[[package]] +name = "parity-bip39" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" +dependencies = [ + "bitcoin_hashes", + "rand", + "rand_core 0.6.4", + "serde", + "unicode-normalization", +] + [[package]] name = "parity-db" version = "0.4.13" @@ -7491,8 +7234,9 @@ dependencies = [ "log", "lz4", "memmap2 0.5.10", + "parking_lot 0.12.2", "rand", - "siphasher 0.3.11", + "siphasher", "snap", "winapi", ] @@ -7503,7 +7247,7 @@ version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" dependencies = [ - "arrayvec 0.7.4", + "arrayvec", "bitvec", "byte-slice-cast", "bytes", @@ -7515,20 +7259,6 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" version = "3.6.9" -[[package]] -name = "parity-bip39" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" -dependencies = [ - "bitcoin_hashes", - "rand", - "rand_core 0.6.4", - "serde", - "unicode-normalization", -] - - "parking_lot 0.12.2", source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" dependencies = [ @@ -7643,15 +7373,6 @@ dependencies = [ "password-hash", ] -[[package]] -name = "pbkdf2" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" -dependencies = [ - "digest 0.10.7", -] - [[package]] name = "pem" version = "1.1.1" @@ -8971,17 +8692,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" -[[package]] -name = "ruzstd" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" -dependencies = [ - "byteorder", - "derive_more", - "twox-hash", -] - [[package]] name = "rw-stream-sink" version = "0.3.0" @@ -9040,8 +8750,8 @@ version = "23.0.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ "log", - "sp-core 21.0.0", - "sp-wasm-interface 14.0.0", + "sp-core", + "sp-wasm-interface", "thiserror", ] @@ -9061,9 +8771,9 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 21.0.0", + "sp-core", "sp-inherents", - "sp-runtime 24.0.0", + "sp-runtime", "substrate-prometheus-endpoint", ] @@ -9076,10 +8786,10 @@ dependencies = [ "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core 21.0.0", + "sp-core", "sp-inherents", - "sp-runtime 24.0.0", - "sp-trie 22.0.0", + "sp-runtime", + "sp-trie", ] [[package]] @@ -9103,9 +8813,9 @@ dependencies = [ "sp-core", "sp-crypto-hashing", "sp-genesis-builder", - "sp-io 23.0.0", - "sp-runtime 24.0.0", - "sp-state-machine 0.28.0", + "sp-io", + "sp-runtime", + "sp-state-machine", ] [[package]] @@ -9135,14 +8845,14 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 21.0.0", + "sp-core", "sp-database", - "sp-externalities 0.19.0", - "sp-runtime 24.0.0", - "sp-state-machine 0.28.0", + "sp-externalities", + "sp-runtime", + "sp-state-machine", "sp-statement-store", - "sp-storage 13.0.0", - "sp-trie 22.0.0", + "sp-storage", + "sp-trie", "substrate-prometheus-endpoint", ] @@ -9162,13 +8872,13 @@ dependencies = [ "sc-client-api", "sc-state-db", "schnellru", - "sp-arithmetic 16.0.0", + "sp-arithmetic", "sp-blockchain", - "sp-core 21.0.0", + "sp-core", "sp-database", - "sp-runtime 24.0.0", - "sp-state-machine 0.28.0", - "sp-trie 22.0.0", + "sp-runtime", + "sp-state-machine", + "sp-trie", ] [[package]] @@ -9190,9 +8900,9 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 21.0.0", - "sp-runtime 24.0.0", - "sp-state-machine 0.28.0", + "sp-core", + "sp-runtime", + "sp-state-machine", "substrate-prometheus-endpoint", "thiserror", "tokio", @@ -9211,14 +8921,14 @@ dependencies = [ "sc-client-api", "sc-consensus", "sc-telemetry", - "sp-arithmetic 16.0.0", + "sp-arithmetic", "sp-blockchain", "sp-consensus", "sp-consensus-slots", - "sp-core 21.0.0", + "sp-core", "sp-inherents", - "sp-runtime 24.0.0", - "sp-state-machine 0.28.0", + "sp-runtime", + "sp-state-machine", ] [[package]] @@ -9248,10 +8958,10 @@ dependencies = [ "sp-consensus", "sp-consensus-slots", "sp-consensus-subspace", - "sp-core 21.0.0", + "sp-core", "sp-inherents", "sp-objects", - "sp-runtime 24.0.0", + "sp-runtime", "subspace-archiving", "subspace-core-primitives", "subspace-proof-of-space", @@ -9269,7 +8979,7 @@ dependencies = [ "async-oneshot", "futures", "futures-timer", - "jsonrpsee 0.16.3", + "jsonrpsee", "lru 0.12.3", "parity-scale-codec", "parking_lot 0.12.2", @@ -9282,9 +8992,9 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-consensus-subspace", - "sp-core 21.0.0", + "sp-core", "sp-objects", - "sp-runtime 24.0.0", + "sp-runtime", "subspace-archiving", "subspace-core-primitives", "subspace-farmer-components", @@ -9304,12 +9014,12 @@ dependencies = [ "sp-api", "sp-auto-id", "sp-blockchain", - "sp-core 21.0.0", + "sp-core", "sp-domains", - "sp-externalities 0.19.0", - "sp-io 23.0.0", + "sp-externalities", + "sp-io", "sp-messenger-host-functions", - "sp-runtime 24.0.0", + "sp-runtime", "sp-subspace-mmr", ] @@ -9325,14 +9035,14 @@ dependencies = [ "sc-executor-wasmtime", "schnellru", "sp-api", - "sp-core 21.0.0", - "sp-externalities 0.19.0", - "sp-io 23.0.0", - "sp-panic-handler 8.0.0", - "sp-runtime-interface 17.0.0", - "sp-trie 22.0.0", + "sp-core", + "sp-externalities", + "sp-io", + "sp-panic-handler", + "sp-runtime-interface", + "sp-trie", "sp-version", - "sp-wasm-interface 14.0.0", + "sp-wasm-interface", "tracing", ] @@ -9344,7 +9054,7 @@ dependencies = [ "polkavm", "sc-allocator", "sp-maybe-compressed-blob", - "sp-wasm-interface 14.0.0", + "sp-wasm-interface", "thiserror", "wasm-instrument", ] @@ -9373,8 +9083,8 @@ dependencies = [ "rustix 0.36.17", "sc-allocator", "sc-executor-common", - "sp-runtime-interface 17.0.0", - "sp-wasm-interface 14.0.0", + "sp-runtime-interface", + "sp-wasm-interface", "wasmtime", ] @@ -9392,7 +9102,7 @@ dependencies = [ "sc-network-common", "sc-network-sync", "sp-blockchain", - "sp-runtime 24.0.0", + "sp-runtime", ] [[package]] @@ -9403,9 +9113,9 @@ dependencies = [ "array-bytes 6.2.2", "parking_lot 0.12.2", "serde_json", - "sp-application-crypto 23.0.0", - "sp-core 21.0.0", - "sp-keystore 0.27.0", + "sp-application-crypto", + "sp-core", + "sp-keystore", "thiserror", ] @@ -9415,7 +9125,7 @@ version = "0.4.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ "array-bytes 4.2.0", - "arrayvec 0.7.4", + "arrayvec", "blake2 0.10.6", "bytes", "futures", @@ -9431,10 +9141,10 @@ dependencies = [ "sc-transaction-pool-api", "sp-api", "sp-consensus", - "sp-core 21.0.0", - "sp-keystore 0.27.0", + "sp-core", + "sp-keystore", "sp-mixnet", - "sp-runtime 24.0.0", + "sp-runtime", "thiserror", ] @@ -9468,10 +9178,10 @@ dependencies = [ "serde", "serde_json", "smallvec", - "sp-arithmetic 16.0.0", + "sp-arithmetic", "sp-blockchain", - "sp-core 21.0.0", - "sp-runtime 24.0.0", + "sp-core", + "sp-runtime", "substrate-prometheus-endpoint", "thiserror", "tokio", @@ -9496,7 +9206,7 @@ dependencies = [ "sc-client-api", "sc-network", "sp-blockchain", - "sp-runtime 24.0.0", + "sp-runtime", "thiserror", "unsigned-varint 0.7.2", ] @@ -9515,7 +9225,7 @@ dependencies = [ "sc-consensus", "sp-consensus", "sp-consensus-grandpa", - "sp-runtime 24.0.0", + "sp-runtime", ] [[package]] @@ -9532,7 +9242,7 @@ dependencies = [ "sc-network-common", "sc-network-sync", "schnellru", - "sp-runtime 24.0.0", + "sp-runtime", "substrate-prometheus-endpoint", "tracing", ] @@ -9553,8 +9263,8 @@ dependencies = [ "sc-client-api", "sc-network", "sp-blockchain", - "sp-core 21.0.0", - "sp-runtime 24.0.0", + "sp-core", + "sp-runtime", "thiserror", ] @@ -9582,12 +9292,12 @@ dependencies = [ "sc-utils", "schnellru", "smallvec", - "sp-arithmetic 16.0.0", + "sp-arithmetic", "sp-blockchain", "sp-consensus", "sp-consensus-grandpa", - "sp-core 21.0.0", - "sp-runtime 24.0.0", + "sp-core", + "sp-runtime", "substrate-prometheus-endpoint", "thiserror", "tokio", @@ -9609,7 +9319,7 @@ dependencies = [ "sc-network-sync", "sc-utils", "sp-consensus", - "sp-runtime 24.0.0", + "sp-runtime", "substrate-prometheus-endpoint", ] @@ -9638,11 +9348,11 @@ dependencies = [ "sc-transaction-pool-api", "sc-utils", "sp-api", - "sp-core 21.0.0", - "sp-externalities 0.19.0", - "sp-keystore 0.27.0", + "sp-core", + "sp-externalities", + "sp-keystore", "sp-offchain", - "sp-runtime 24.0.0", + "sp-runtime", "threadpool", "tracing", ] @@ -9670,7 +9380,7 @@ dependencies = [ "sp-consensus-slots", "sp-consensus-subspace", "sp-inherents", - "sp-runtime 24.0.0", + "sp-runtime", "subspace-core-primitives", "subspace-proof-of-time", "thread-priority", @@ -9693,7 +9403,7 @@ version = "29.0.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ "futures", - "jsonrpsee 0.16.3", + "jsonrpsee", "log", "parity-scale-codec", "parking_lot 0.12.2", @@ -9708,11 +9418,11 @@ dependencies = [ "serde_json", "sp-api", "sp-blockchain", - "sp-core 21.0.0", - "sp-keystore 0.27.0", + "sp-core", + "sp-keystore", "sp-offchain", "sp-rpc", - "sp-runtime 24.0.0", + "sp-runtime", "sp-session", "sp-statement-store", "sp-version", @@ -9724,7 +9434,7 @@ name = "sc-rpc-api" version = "0.33.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ - "jsonrpsee 0.16.3", + "jsonrpsee", "parity-scale-codec", "sc-chain-spec", "sc-mixnet", @@ -9732,9 +9442,9 @@ dependencies = [ "scale-info", "serde", "serde_json", - "sp-core 21.0.0", + "sp-core", "sp-rpc", - "sp-runtime 24.0.0", + "sp-runtime", "sp-version", "thiserror", ] @@ -9766,7 +9476,7 @@ dependencies = [ "futures", "futures-util", "hex", - "jsonrpsee 0.16.3", + "jsonrpsee", "log", "parity-scale-codec", "parking_lot 0.12.2", @@ -9779,9 +9489,9 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core 21.0.0", + "sp-core", "sp-rpc", - "sp-runtime 24.0.0", + "sp-runtime", "sp-version", "thiserror", "tokio", @@ -9798,7 +9508,7 @@ dependencies = [ "exit-future", "futures", "futures-timer", - "jsonrpsee 0.16.3", + "jsonrpsee", "log", "parity-scale-codec", "parking_lot 0.12.2", @@ -9832,16 +9542,16 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 21.0.0", - "sp-externalities 0.19.0", - "sp-keystore 0.27.0", - "sp-runtime 24.0.0", + "sp-core", + "sp-externalities", + "sp-keystore", + "sp-runtime", "sp-session", - "sp-state-machine 0.28.0", - "sp-storage 13.0.0", + "sp-state-machine", + "sp-storage", "sp-transaction-pool", "sp-transaction-storage-proof", - "sp-trie 22.0.0", + "sp-trie", "sp-version", "static_init", "substrate-prometheus-endpoint", @@ -9871,7 +9581,7 @@ dependencies = [ "clap 4.5.4", "fs4 0.7.0", "log", - "sp-core 21.0.0", + "sp-core", "thiserror", "tokio", ] @@ -9966,10 +9676,10 @@ dependencies = [ "serde", "sp-api", "sp-blockchain", - "sp-core 21.0.0", + "sp-core", "sp-rpc", - "sp-runtime 24.0.0", - "sp-tracing 10.0.0", + "sp-runtime", + "sp-tracing", "thiserror", "tracing", "tracing-log 0.1.4", @@ -10025,8 +9735,8 @@ dependencies = [ "parity-scale-codec", "serde", "sp-blockchain", - "sp-core 21.0.0", - "sp-runtime 24.0.0", + "sp-core", + "sp-runtime", "thiserror", ] @@ -10042,74 +9752,7 @@ dependencies = [ "log", "parking_lot 0.12.2", "prometheus", - "sp-arithmetic 16.0.0", -] - -[[package]] -name = "scale-bits" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "036575c29af9b6e4866ffb7fa055dbf623fe7a9cc159b33786de6013a6969d89" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", -] - -[[package]] -name = "scale-decode" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7caaf753f8ed1ab4752c6afb20174f03598c664724e0e32628e161c21000ff76" -dependencies = [ - "derive_more", - "parity-scale-codec", - "primitive-types", - "scale-bits", - "scale-decode-derive", - "scale-info", - "smallvec", -] - -[[package]] -name = "scale-decode-derive" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3475108a1b62c7efd1b5c65974f30109a598b2f45f23c9ae030acb9686966db" -dependencies = [ - "darling 0.14.4", - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "scale-encode" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d70cb4b29360105483fac1ed567ff95d65224a14dd275b6303ed0a654c78de5" -dependencies = [ - "derive_more", - "parity-scale-codec", - "primitive-types", - "scale-bits", - "scale-encode-derive", - "scale-info", - "smallvec", -] - -[[package]] -name = "scale-encode-derive" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "995491f110efdc6bea96d6a746140e32bfceb4ea47510750a5467295a4707a25" -dependencies = [ - "darling 0.14.4", - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn 1.0.109", + "sp-arithmetic", ] [[package]] @@ -10138,39 +9781,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "scale-typegen" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00860983481ac590ac87972062909bef0d6a658013b592ccc0f2feb272feab11" -dependencies = [ - "proc-macro2", - "quote", - "scale-info", - "syn 2.0.52", - "thiserror", -] - -[[package]] -name = "scale-value" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58223c7691bf0bd46b43c9aea6f0472d1067f378d574180232358d7c6e0a8089" -dependencies = [ - "base58", - "blake2 0.10.6", - "derive_more", - "either", - "frame-metadata 15.1.0", - "parity-scale-codec", - "scale-bits", - "scale-decode", - "scale-encode", - "scale-info", - "serde", - "yap", -] - [[package]] name = "schannel" version = "0.1.23" @@ -10199,7 +9809,7 @@ checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" dependencies = [ "aead", "arrayref", - "arrayvec 0.7.4", + "arrayvec", "curve25519-dalek 4.1.2", "getrandom_or_panic", "merlin", @@ -10542,12 +10152,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" -[[package]] -name = "simple-mermaid" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" - [[package]] name = "simple_moving_average" version = "1.0.2" @@ -10563,12 +10167,6 @@ version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" -[[package]] -name = "siphasher" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ac45299ccbd390721be55b412d41931911f654fa99e2cb8bfb57184b2061fe" - [[package]] name = "slab" version = "0.4.9" @@ -10590,114 +10188,6 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -[[package]] -name = "smol" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e635339259e51ef85ac7aa29a1cd991b957047507288697a690e80ab97d07cad" -dependencies = [ - "async-channel 2.2.0", - "async-executor", - "async-fs", - "async-io 2.3.2", - "async-lock 3.3.0", - "async-net", - "async-process", - "blocking", - "futures-lite 2.2.0", -] - -[[package]] -name = "smoldot" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d1eaa97d77be4d026a1e7ffad1bb3b78448763b357ea6f8188d3e6f736a9b9" -dependencies = [ - "arrayvec 0.7.4", - "async-lock 3.3.0", - "atomic-take", - "base64 0.21.7", - "bip39", - "blake2-rfc", - "bs58 0.5.0", - "chacha20", - "crossbeam-queue", - "derive_more", - "ed25519-zebra 4.0.3", - "either", - "event-listener 4.0.3", - "fnv", - "futures-lite 2.2.0", - "futures-util", - "hashbrown 0.14.3", - "hex", - "hmac 0.12.1", - "itertools 0.12.1", - "libm", - "libsecp256k1", - "merlin", - "no-std-net", - "nom", - "num-bigint", - "num-rational", - "num-traits", - "pbkdf2 0.12.2", - "pin-project", - "poly1305", - "rand", - "rand_chacha", - "ruzstd", - "schnorrkel", - "serde", - "serde_json", - "sha2 0.10.8", - "sha3", - "siphasher 1.0.0", - "slab", - "smallvec", - "soketto", - "twox-hash", - "wasmi", - "x25519-dalek 2.0.1", - "zeroize", -] - -[[package]] -name = "smoldot-light" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5496f2d116b7019a526b1039ec2247dd172b8670633b1a64a614c9ea12c9d8c7" -dependencies = [ - "async-channel 2.2.0", - "async-lock 3.3.0", - "base64 0.21.7", - "blake2-rfc", - "derive_more", - "either", - "event-listener 4.0.3", - "fnv", - "futures-channel", - "futures-lite 2.2.0", - "futures-util", - "hashbrown 0.14.3", - "hex", - "itertools 0.12.1", - "log", - "lru 0.12.3", - "no-std-net", - "parking_lot 0.12.1", - "pin-project", - "rand", - "rand_chacha", - "serde", - "serde_json", - "siphasher 1.0.0", - "slab", - "smol", - "smoldot", - "zeroize", -] - [[package]] name = "snap" version = "1.1.1" @@ -10768,8 +10258,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api-proc-macro", - "sp-core 21.0.0", - "sp-externalities 0.19.0", + "sp-core", + "sp-externalities", "sp-metadata-ir", "sp-runtime", "sp-runtime-interface", @@ -10790,35 +10280,21 @@ dependencies = [ "expander", "proc-macro-crate 3.1.0", "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "sp-application-crypto" -version = "30.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-core 21.0.0", - "sp-io 23.0.0", - "sp-std 8.0.0", + "quote", + "syn 2.0.60", ] [[package]] name = "sp-application-crypto" version = "30.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4fe7a9b7fa9da76272b201e2fb3c7900d97d32a46b66af9a04dad457f73c71" +source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 28.0.0", - "sp-io 30.0.0", - "sp-std 14.0.0", + "sp-core", + "sp-io", + "sp-std", ] [[package]] @@ -10832,22 +10308,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-std 8.0.0", - "static_assertions", -] - -[[package]] -name = "sp-arithmetic" -version = "23.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f42721f072b421f292a072e8f52a3b3c0fbc27428f0c9fe24067bc47046bad63" -dependencies = [ - "integer-sqrt", - "num-traits", - "parity-scale-codec", - "scale-info", - "serde", - "sp-std 14.0.0", + "sp-std", "static_assertions", ] @@ -10902,7 +10363,7 @@ dependencies = [ "domain-runtime-primitives", "parity-scale-codec", "sp-inherents", - "sp-std 8.0.0", + "sp-std", ] [[package]] @@ -10918,8 +10379,8 @@ dependencies = [ "sp-api", "sp-consensus", "sp-database", - "sp-runtime 24.0.0", - "sp-state-machine 0.28.0", + "sp-runtime", + "sp-state-machine", "thiserror", ] @@ -10931,10 +10392,10 @@ dependencies = [ "async-trait", "futures", "log", - "sp-core 21.0.0", + "sp-core", "sp-inherents", - "sp-runtime 24.0.0", - "sp-state-machine 0.28.0", + "sp-runtime", + "sp-state-machine", "thiserror", ] @@ -10997,15 +10458,15 @@ dependencies = [ "scale-info", "schnorrkel", "sp-api", - "sp-application-crypto 23.0.0", + "sp-application-crypto", "sp-consensus-slots", - "sp-core 21.0.0", - "sp-externalities 0.19.0", + "sp-core", + "sp-externalities", "sp-inherents", - "sp-io 23.0.0", - "sp-runtime 24.0.0", - "sp-runtime-interface 17.0.0", - "sp-std 8.0.0", + "sp-io", + "sp-runtime", + "sp-runtime-interface", + "sp-std", "sp-timestamp", "subspace-core-primitives", "subspace-proof-of-space", @@ -11025,7 +10486,7 @@ dependencies = [ "bounded-collections", "bs58 0.5.1", "dyn-clonable", - "ed25519-zebra 3.1.0", + "ed25519-zebra", "futures", "hash-db", "hash256-std-hasher", @@ -11122,24 +10583,13 @@ dependencies = [ "syn 2.0.60", ] -[[package]] -name = "sp-debug-derive" -version = "14.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d09fa0a5f7299fb81ee25ae3853d26200f7a348148aed6de76be905c007dbe" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.52", -] - [[package]] name = "sp-domain-digests" version = "0.1.0" source = "git+https://github.com/subspace/subspace?rev=d0aaf1039764f1271c2c79f266ea7f64f984cd16#d0aaf1039764f1271c2c79f266ea7f64f984cd16" dependencies = [ "parity-scale-codec", - "sp-runtime 24.0.0", + "sp-runtime", ] [[package]] @@ -11160,15 +10610,15 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-application-crypto 23.0.0", - "sp-core 21.0.0", - "sp-runtime 24.0.0", - "sp-runtime-interface 17.0.0", - "sp-state-machine 0.28.0", - "sp-std 8.0.0", - "sp-trie 22.0.0", + "sp-application-crypto", + "sp-core", + "sp-runtime", + "sp-runtime-interface", + "sp-state-machine", + "sp-std", + "sp-trie", "sp-version", - "sp-weights 20.0.0", + "sp-weights", "subspace-core-primitives", "subspace-runtime-primitives", "trie-db", @@ -11191,7 +10641,7 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-consensus-slots", - "sp-core 21.0.0", + "sp-core", "sp-domain-digests", "sp-domains", "sp-externalities", @@ -11309,7 +10759,7 @@ dependencies = [ "scale-info", "serde", "sp-api", - "sp-core 21.0.0", + "sp-core", "sp-domains", "sp-inherents", "sp-mmr-primitives", @@ -11329,12 +10779,12 @@ dependencies = [ "scale-info", "sp-api", "sp-blockchain", - "sp-core 21.0.0", + "sp-core", "sp-domains", - "sp-externalities 0.19.0", + "sp-externalities", "sp-messenger", - "sp-runtime 24.0.0", - "sp-runtime-interface 17.0.0", + "sp-runtime", + "sp-runtime-interface", ] [[package]] @@ -11342,7 +10792,7 @@ name = "sp-metadata-ir" version = "0.6.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ - "frame-metadata 16.0.0", + "frame-metadata", "parity-scale-codec", "scale-info", ] @@ -11391,8 +10841,8 @@ version = "26.0.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ "sp-api", - "sp-core 21.0.0", - "sp-runtime 24.0.0", + "sp-core", + "sp-runtime", ] [[package]] @@ -11405,17 +10855,6 @@ dependencies = [ "regex", ] -[[package]] -name = "sp-panic-handler" -version = "13.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f5a17a0a11de029a8b811cb6e8b32ce7e02183cc04a3e965c383246798c416" -dependencies = [ - "backtrace", - "lazy_static", - "regex", -] - [[package]] name = "sp-rpc" version = "26.0.0" @@ -11423,7 +10862,7 @@ source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08 dependencies = [ "rustc-hash", "serde", - "sp-core 21.0.0", + "sp-core", ] [[package]] @@ -11441,38 +10880,13 @@ dependencies = [ "rand", "scale-info", "serde", - "simple-mermaid 0.1.0", - "sp-application-crypto 23.0.0", - "sp-arithmetic 16.0.0", - "sp-core 21.0.0", - "sp-io 23.0.0", - "sp-std 8.0.0", - "sp-weights 20.0.0", -] - -[[package]] -name = "sp-runtime" -version = "31.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3bb49a4475d390198dfd3d41bef4564ab569fbaf1b5e38ae69b35fc01199d91" -dependencies = [ - "docify", - "either", - "hash256-std-hasher", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "paste", - "rand", - "scale-info", - "serde", - "simple-mermaid 0.1.1", - "sp-application-crypto 30.0.0", - "sp-arithmetic 23.0.0", - "sp-core 28.0.0", - "sp-io 30.0.0", - "sp-std 14.0.0", - "sp-weights 27.0.0", + "simple-mermaid", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-std", + "sp-weights", ] [[package]] @@ -11485,59 +10899,26 @@ dependencies = [ "parity-scale-codec", "polkavm-derive", "primitive-types", - "sp-externalities 0.19.0", - "sp-runtime-interface-proc-macro 11.0.0", - "sp-std 8.0.0", - "sp-storage 13.0.0", - "sp-tracing 10.0.0", - "sp-wasm-interface 14.0.0", - "static_assertions", -] - -[[package]] -name = "sp-runtime-interface" -version = "24.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f66b66d8cec3d785fa6289336c1d9cbd4305d5d84f7134378c4d79ed7983e6fb" -dependencies = [ - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec", - "primitive-types", - "sp-externalities 0.25.0", - "sp-runtime-interface-proc-macro 17.0.0", - "sp-std 14.0.0", - "sp-storage 19.0.0", - "sp-tracing 16.0.0", - "sp-wasm-interface 20.0.0", + "sp-externalities", + "sp-runtime-interface-proc-macro", + "sp-std", + "sp-storage", + "sp-tracing", + "sp-wasm-interface", "static_assertions", ] [[package]] name = "sp-runtime-interface-proc-macro" -dependencies = [ - "Inflector", - "expander", - "proc-macro-crate 3.1.0", - "proc-macro2", - "quote", -] - version = "17.0.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" - "syn 2.0.60", -[[package]] -name = "sp-runtime-interface-proc-macro" -version = "17.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfaf6e85b2ec12a4b99cd6d8d57d083e30c94b7f1b0d8f93547121495aae6f0c" dependencies = [ "Inflector", "expander", "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.52", + "syn 2.0.60", ] [[package]] @@ -11548,9 +10929,9 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api", - "sp-core 21.0.0", - "sp-keystore 0.27.0", - "sp-runtime 24.0.0", + "sp-core", + "sp-keystore", + "sp-runtime", "sp-staking", ] @@ -11616,12 +10997,6 @@ name = "sp-std" version = "14.0.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" -[[package]] -name = "sp-std" -version = "14.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8ee986414b0a9ad741776762f4083cd3a5128449b982a3919c4df36874834" - [[package]] name = "sp-storage" version = "19.0.0" @@ -11643,8 +11018,8 @@ dependencies = [ "scale-info", "sp-api", "sp-blockchain", - "sp-core 21.0.0", - "sp-externalities 0.19.0", + "sp-core", + "sp-externalities", "sp-mmr-primitives", "sp-runtime", "sp-runtime-interface", @@ -11680,7 +11055,7 @@ version = "26.0.0" source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08ab5299d5d88cfa1c6ed#44d742b90e7852aed1f08ab5299d5d88cfa1c6ed" dependencies = [ "sp-api", - "sp-runtime 24.0.0", + "sp-runtime", ] [[package]] @@ -11691,7 +11066,7 @@ dependencies = [ "async-trait", "parity-scale-codec", "scale-info", - "sp-core 21.0.0", + "sp-core", "sp-inherents", "sp-runtime", "sp-trie", @@ -11822,10 +11197,11 @@ dependencies = [ "serde", "serde_json", "simple_moving_average", + "sp-api", "sp-consensus-subspace", - "sp-core 21.0.0", + "sp-core", "sp-domains-fraud-proof", - "sp-runtime 24.0.0", + "sp-runtime", "subspace-core-primitives", "subspace-erasure-coding", "subspace-fake-runtime-api", @@ -12226,8 +11602,8 @@ version = "0.1.0" source = "git+https://github.com/subspace/subspace?rev=d0aaf1039764f1271c2c79f266ea7f64f984cd16#d0aaf1039764f1271c2c79f266ea7f64f984cd16" dependencies = [ "pallet-transaction-payment", - "sp-core 21.0.0", - "sp-runtime 24.0.0", + "sp-core", + "sp-runtime", "subspace-core-primitives", ] @@ -12242,7 +11618,7 @@ dependencies = [ "frame-system-rpc-runtime-api", "futures", "hex", - "jsonrpsee 0.16.3", + "jsonrpsee", "mmr-gadget", "mmr-rpc", "pallet-transaction-payment-rpc", @@ -12280,17 +11656,17 @@ dependencies = [ "sp-consensus", "sp-consensus-slots", "sp-consensus-subspace", - "sp-core 21.0.0", + "sp-core", "sp-domains", "sp-domains-fraud-proof", - "sp-externalities 0.19.0", - "sp-io 23.0.0", + "sp-externalities", + "sp-io", "sp-messenger", "sp-messenger-host-functions", "sp-mmr-primitives", "sp-objects", "sp-offchain", - "sp-runtime 24.0.0", + "sp-runtime", "sp-session", "sp-subspace-mmr", "sp-timestamp", @@ -12353,7 +11729,7 @@ source = "git+https://github.com/subspace/polkadot-sdk?rev=44d742b90e7852aed1f08 dependencies = [ "frame-system-rpc-runtime-api", "futures", - "jsonrpsee 0.16.3", + "jsonrpsee", "log", "parity-scale-codec", "sc-rpc-api", @@ -12361,8 +11737,8 @@ dependencies = [ "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core 21.0.0", - "sp-runtime 24.0.0", + "sp-core", + "sp-runtime", ] [[package]] @@ -12389,110 +11765,6 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" -[[package]] -name = "subxt" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3323d5c27898b139d043dc1ee971f602f937b99354ee33ee933bd90e0009fbd" -dependencies = [ - "async-trait", - "base58", - "blake2 0.10.6", - "derivative", - "either", - "frame-metadata 16.0.0", - "futures", - "hex", - "impl-serde", - "instant", - "jsonrpsee 0.21.0", - "parity-scale-codec", - "primitive-types", - "scale-bits", - "scale-decode", - "scale-encode", - "scale-info", - "scale-value", - "serde", - "serde_json", - "sp-core 28.0.0", - "sp-core-hashing 15.0.0", - "sp-runtime 31.0.1", - "subxt-lightclient", - "subxt-macro", - "subxt-metadata", - "thiserror", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "subxt-codegen" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d0e58c3f88651cff26aa52bae0a0a85f806a2e923a20eb438c16474990743ea" -dependencies = [ - "frame-metadata 16.0.0", - "heck", - "hex", - "jsonrpsee 0.21.0", - "parity-scale-codec", - "proc-macro2", - "quote", - "scale-info", - "scale-typegen", - "subxt-metadata", - "syn 2.0.52", - "thiserror", - "tokio", -] - -[[package]] -name = "subxt-lightclient" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecec7066ba7bc0c3608fcd1d0c7d9584390990cd06095b6ae4f114f74c4b8550" -dependencies = [ - "futures", - "futures-util", - "serde", - "serde_json", - "smoldot-light", - "thiserror", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "subxt-macro" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "365251668613323064803427af8c7c7bc366cd8b28e33639640757669dafebd5" -dependencies = [ - "darling 0.20.8", - "parity-scale-codec", - "proc-macro-error", - "quote", - "scale-typegen", - "subxt-codegen", - "syn 2.0.52", -] - -[[package]] -name = "subxt-metadata" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02aca8d39a1f6c55fff3a8fd81557d30a610fedc1cef03f889a81bc0f8f0b52" -dependencies = [ - "frame-metadata 16.0.0", - "parity-scale-codec", - "scale-info", - "sp-core-hashing 15.0.0", - "thiserror", -] - [[package]] name = "supports-color" version = "3.0.0" @@ -12812,17 +12084,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-rustls" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" -dependencies = [ - "rustls 0.22.2", - "rustls-pki-types", - "tokio", -] - [[package]] name = "tokio-stream" version = "0.1.15" @@ -13516,37 +12777,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmi" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7" -dependencies = [ - "smallvec", - "spin 0.9.8", - "wasmi_arena", - "wasmi_core", - "wasmparser-nostd", -] - -[[package]] -name = "wasmi_arena" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" - -[[package]] -name = "wasmi_core" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a" -dependencies = [ - "downcast-rs", - "libm", - "num-traits", - "paste", -] - [[package]] name = "wasmparser" version = "0.102.0" @@ -13557,15 +12787,6 @@ dependencies = [ "url", ] -[[package]] -name = "wasmparser-nostd" -version = "0.100.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9157cab83003221bfd385833ab587a039f5d6fa7304854042ba358a3b09e0724" -dependencies = [ - "indexmap-nostd", -] - [[package]] name = "wasmtime" version = "8.0.1" @@ -14386,12 +13607,6 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "yap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4524214bc4629eba08d78ceb1d6507070cc0bcbbed23af74e19e6e924a24cf" - [[package]] name = "yasna" version = "0.5.2" diff --git a/Cargo.toml b/Cargo.toml index 854e14be..679bf30a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -79,6 +79,7 @@ semver = "1.0.22" serde = { version = "1.0.199", features = ["derive"] } serde_json = "1.0.116" simple_moving_average = "1.0.2" +sp-api = { git = "https://github.com/subspace/polkadot-sdk", rev = "44d742b90e7852aed1f08ab5299d5d88cfa1c6ed", default-features = false } sp-core = { git = "https://github.com/subspace/polkadot-sdk", rev = "44d742b90e7852aed1f08ab5299d5d88cfa1c6ed", default-features = false } sp-consensus-subspace = { git = "https://github.com/subspace/subspace", rev = "d0aaf1039764f1271c2c79f266ea7f64f984cd16" } sp-domains-fraud-proof = { git = "https://github.com/subspace/subspace", rev = "d0aaf1039764f1271c2c79f266ea7f64f984cd16" } diff --git a/src/backend/farmer.rs b/src/backend/farmer.rs index 280f3282..96427d9a 100644 --- a/src/backend/farmer.rs +++ b/src/backend/farmer.rs @@ -693,7 +693,11 @@ pub(crate) fn calculate_expected_reward_duration_from_now( last_reward_timestamp: Option, ) -> i64 { // Time elapsed since the last reward payment timestamp. - let time_previous = Utc::now().timestamp() - last_reward_timestamp.unwrap_or(0); + let time_previous = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_secs() as i64 + - last_reward_timestamp.unwrap_or(0); // Expected time duration for next reward payment since the last reward payment timestamp. let expected_time_next = (total_space_pledged as i64 / space_pledged as i64) * time_previous; From 06bd101c5fe7e6aab8b2eaff30efc68581f60607 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Thu, 16 May 2024 23:24:33 +0530 Subject: [PATCH 15/29] Add progress bar widget with both themes as well as tooltip --- src/backend/farmer.rs | 6 +- src/frontend.rs | 2 + src/frontend/running.rs | 6 ++ src/frontend/widgets/progress_bar.rs | 87 ++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 src/frontend/widgets/progress_bar.rs diff --git a/src/backend/farmer.rs b/src/backend/farmer.rs index 96427d9a..caf48498 100644 --- a/src/backend/farmer.rs +++ b/src/backend/farmer.rs @@ -17,7 +17,7 @@ use std::hash::Hash; use std::num::{NonZeroU8, NonZeroUsize}; use std::path::PathBuf; use std::sync::Arc; -use std::time::Duration; +use std::time::{Duration, SystemTime, UNIX_EPOCH}; use std::{fmt, fs}; use subspace_core_primitives::crypto::kzg::Kzg; use subspace_core_primitives::{PublicKey, Record, SectorIndex}; @@ -693,8 +693,8 @@ pub(crate) fn calculate_expected_reward_duration_from_now( last_reward_timestamp: Option, ) -> i64 { // Time elapsed since the last reward payment timestamp. - let time_previous = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) + let time_previous = SystemTime::now() + .duration_since(UNIX_EPOCH) .unwrap() .as_secs() as i64 - last_reward_timestamp.unwrap_or(0); diff --git a/src/frontend.rs b/src/frontend.rs index e926519b..f8610695 100644 --- a/src/frontend.rs +++ b/src/frontend.rs @@ -1,4 +1,6 @@ pub mod configuration; pub mod loading; pub mod new_version; +#[path = "./frontend/widgets/progress_bar.rs"] +pub mod progress_bar; pub mod running; diff --git a/src/frontend/running.rs b/src/frontend/running.rs index 0fbcda16..4b9751a4 100644 --- a/src/frontend/running.rs +++ b/src/frontend/running.rs @@ -5,6 +5,7 @@ use crate::backend::config::RawConfig; use crate::backend::farmer::{FarmerNotification, InitialFarmState}; use crate::backend::node::ChainInfo; use crate::backend::{FarmIndex, NodeNotification}; +use crate::frontend::progress_bar::create_circular_progress_bar; use crate::frontend::running::farm::{FarmWidget, FarmWidgetInit, FarmWidgetInput}; use crate::frontend::running::node::{NodeInput, NodeView}; use gtk::prelude::*; @@ -56,6 +57,7 @@ pub struct RunningView { farmer_state: FarmerState, farms: FactoryHashMap, plotting_paused: bool, + circular_progress_bar: gtk::DrawingArea, } #[relm4::component(pub)] @@ -72,6 +74,7 @@ impl Component for RunningView { model.node_view.widget().clone(), + gtk::Separator { set_margin_all: 10, }, @@ -107,6 +110,8 @@ impl Component for RunningView { set_halign: gtk::Align::End, set_hexpand: true, + model.circular_progress_bar.clone(), + gtk::LinkButton { remove_css_class: "link", set_tooltip: "Total account balance and coins farmed since application started, click to see details in Astral", @@ -199,6 +204,7 @@ impl Component for RunningView { farmer_state: FarmerState::default(), farms, plotting_paused: init.plotting_paused, + circular_progress_bar: create_circular_progress_bar(), }; let farms_box = model.farms.widget(); diff --git a/src/frontend/widgets/progress_bar.rs b/src/frontend/widgets/progress_bar.rs new file mode 100644 index 00000000..23fdf94e --- /dev/null +++ b/src/frontend/widgets/progress_bar.rs @@ -0,0 +1,87 @@ +use gtk::prelude::*; +use gtk::{glib, DrawingArea}; +use std::cell::RefCell; +use std::f64::consts::PI; +use std::rc::Rc; + +/// @diameter diameter for a progress circle +pub fn create_circular_progress_bar() -> DrawingArea { + let diameter = 20.0; + + let drawing_area = Rc::new(RefCell::new( + DrawingArea::builder() + .content_width((diameter + 1.0) as i32) + .content_height((diameter + 1.0) as i32) + .margin_top(10) + .margin_bottom(10) + .margin_start(10) + .margin_end(10) + .tooltip_text("ETA for next reward payment") + .build(), + )); + + // Create a shared state for the progress + let progress = Rc::new(RefCell::new(1.0)); // Start fully "unwiped" + drawing_area.borrow().set_draw_func({ + let progress = progress.clone(); + move |_, cr, width, height| { + let percentage = *progress.borrow(); + + // Center coordinates + let center_x = width as f64 / 2.0; + let center_y = height as f64 / 2.0; + + // Draw the full circle with respective color in dark/light themes + if matches!(dark_light::detect(), dark_light::Mode::Dark) { + // Grey for dark theme + cr.set_source_rgb(0.2078431373, 0.2078431373, 0.2078431373); + } else { + // White for light theme + cr.set_source_rgb(1.0, 1.0, 1.0); // White for full circle + } + cr.arc(center_x, center_y, diameter / 2.0, 0.0, 2.0 * PI); + // let _ = cr.fill(); // w/o border color + let _ = cr.fill_preserve(); // Preserve the path for stroking + cr.set_source_rgb(0.0, 0.0, 0.0); // Black for the border + cr.set_line_width(0.5); // Set the border width + let _ = cr.stroke(); // Draw the border + + // Draw the sweeping with respective color in dark/light themes + if matches!(dark_light::detect(), dark_light::Mode::Dark) { + // White for dark theme + cr.set_source_rgb(1.0, 1.0, 1.0); + } else { + // Grey for light theme + cr.set_source_rgb(0.2078431373, 0.2078431373, 0.2078431373); + } + cr.arc( + center_x, + center_y, + diameter / 2.0, + -PI / 2.0, + -PI / 2.0 + 2.0 * PI * (1.0 - percentage), + ); + cr.line_to(center_x, center_y); + let _ = cr.fill(); + } + }); + + // Update the progress i.e. sweep arc every `interval` second + glib::timeout_add_seconds_local(1, { + let progress = progress.clone(); + let drawing_area = drawing_area.clone(); + move || { + let mut percentage = progress.borrow_mut(); + if *percentage <= 0.0 { + *percentage = 1.0; // Reset to full when it reaches 0 + } else { + *percentage -= 0.1; // Decrease by 10% + } + drawing_area.borrow().queue_draw(); + glib::ControlFlow::Continue + } + }); + + let progress_bar = drawing_area.borrow().clone(); + progress_bar +} From 9e0bcd6050f9b667b7f7e180cadb3696fde6ed9e Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Thu, 16 May 2024 23:38:53 +0530 Subject: [PATCH 16/29] Parametrize the progress bar function with custom diameter --- src/frontend/running.rs | 2 +- src/frontend/widgets/progress_bar.rs | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/frontend/running.rs b/src/frontend/running.rs index 4b9751a4..ee527d08 100644 --- a/src/frontend/running.rs +++ b/src/frontend/running.rs @@ -204,7 +204,7 @@ impl Component for RunningView { farmer_state: FarmerState::default(), farms, plotting_paused: init.plotting_paused, - circular_progress_bar: create_circular_progress_bar(), + circular_progress_bar: create_circular_progress_bar(20.0), }; let farms_box = model.farms.widget(); diff --git a/src/frontend/widgets/progress_bar.rs b/src/frontend/widgets/progress_bar.rs index 23fdf94e..bc89c988 100644 --- a/src/frontend/widgets/progress_bar.rs +++ b/src/frontend/widgets/progress_bar.rs @@ -5,9 +5,7 @@ use std::f64::consts::PI; use std::rc::Rc; /// @diameter diameter for a progress circle -pub fn create_circular_progress_bar() -> DrawingArea { - let diameter = 20.0; - +pub fn create_circular_progress_bar(diameter: f64) -> DrawingArea { let drawing_area = Rc::new(RefCell::new( DrawingArea::builder() .content_width((diameter + 1.0) as i32) From 10f76b8815ed00bd67a3567793882d5cf8e6b9b8 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Fri, 17 May 2024 22:04:32 +0530 Subject: [PATCH 17/29] Update circular progress bar - Parametrize the circular progress bar so as to set the values from farmer page in the code. - Reverse the progress direction from clockwise to anti-clockwise direction. --- src/frontend/running.rs | 9 +++++++- src/frontend/widgets/progress_bar.rs | 32 +++++++++++++++++----------- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/frontend/running.rs b/src/frontend/running.rs index ee527d08..a6cf2e05 100644 --- a/src/frontend/running.rs +++ b/src/frontend/running.rs @@ -204,7 +204,14 @@ impl Component for RunningView { farmer_state: FarmerState::default(), farms, plotting_paused: init.plotting_paused, - circular_progress_bar: create_circular_progress_bar(20.0), + circular_progress_bar: create_circular_progress_bar( + 20.0, + 10, + 10, + 10, + 10, + "ETA for next reward payment", + ), }; let farms_box = model.farms.widget(); diff --git a/src/frontend/widgets/progress_bar.rs b/src/frontend/widgets/progress_bar.rs index bc89c988..b64da2dd 100644 --- a/src/frontend/widgets/progress_bar.rs +++ b/src/frontend/widgets/progress_bar.rs @@ -4,22 +4,30 @@ use std::cell::RefCell; use std::f64::consts::PI; use std::rc::Rc; -/// @diameter diameter for a progress circle -pub fn create_circular_progress_bar(diameter: f64) -> DrawingArea { +/// props for drawing a circular progress bar +pub fn create_circular_progress_bar( + diameter: f64, + margin_top: i32, + margin_bottom: i32, + margin_start: i32, + margin_end: i32, + tooltip_text: &str, +) -> DrawingArea { + // Create a shared state for the progress + let progress = Rc::new(RefCell::new(1.0)); // Start fully "unwiped" + let drawing_area = Rc::new(RefCell::new( DrawingArea::builder() .content_width((diameter + 1.0) as i32) .content_height((diameter + 1.0) as i32) - .margin_top(10) - .margin_bottom(10) - .margin_start(10) - .margin_end(10) - .tooltip_text("ETA for next reward payment") + .margin_top(margin_top) + .margin_bottom(margin_bottom) + .margin_start(margin_start) + .margin_end(margin_end) + .tooltip_text(tooltip_text) .build(), )); - // Create a shared state for the progress - let progress = Rc::new(RefCell::new(1.0)); // Start fully "unwiped" drawing_area.borrow().set_draw_func({ let progress = progress.clone(); move |_, cr, width, height| { @@ -38,7 +46,7 @@ pub fn create_circular_progress_bar(diameter: f64) -> DrawingArea { cr.set_source_rgb(1.0, 1.0, 1.0); // White for full circle } cr.arc(center_x, center_y, diameter / 2.0, 0.0, 2.0 * PI); - // let _ = cr.fill(); // w/o border color + // let _ = cr.fill(); // NOTE: Fill w/o border color let _ = cr.fill_preserve(); // Preserve the path for stroking cr.set_source_rgb(0.0, 0.0, 0.0); // Black for the border cr.set_line_width(0.5); // Set the border width @@ -57,7 +65,7 @@ pub fn create_circular_progress_bar(diameter: f64) -> DrawingArea { center_y, diameter / 2.0, -PI / 2.0, - -PI / 2.0 + 2.0 * PI * (1.0 - percentage), + -PI / 2.0 + 2.0 * PI * percentage, ); cr.line_to(center_x, center_y); let _ = cr.fill(); @@ -70,7 +78,7 @@ pub fn create_circular_progress_bar(diameter: f64) -> DrawingArea { let drawing_area = drawing_area.clone(); move || { let mut percentage = progress.borrow_mut(); - if *percentage <= 0.0 { + if (*percentage - 0.1) <= 0.0 { *percentage = 1.0; // Reset to full when it reaches 0 } else { *percentage -= 0.1; // Decrease by 10% From 2d31e8dc10316a086371a971c0eead6b708740f3 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Mon, 20 May 2024 19:51:15 +0530 Subject: [PATCH 18/29] Add the total_space_pledged fn part of the impl block for Consensus node --- src/backend/node.rs | 57 +++++++++++++++++++------------------------- src/backend/utils.rs | 3 ++- 2 files changed, 27 insertions(+), 33 deletions(-) diff --git a/src/backend/node.rs b/src/backend/node.rs index d89008de..80d2ce16 100644 --- a/src/backend/node.rs +++ b/src/backend/node.rs @@ -19,12 +19,12 @@ use sc_network::config::{Ed25519Secret, NodeKeyConfig, NonReservedPeerMode, SetC use sc_service::{BlocksPruning, Configuration, GenericChainSpec}; use sc_storage_monitor::{StorageMonitorParams, StorageMonitorService}; use serde_json::Value; -use sp_api::{ApiError, ProvideRuntimeApi}; -use sp_consensus_subspace::{FarmerPublicKey, SubspaceApi}; +use sp_api::ProvideRuntimeApi; +use sp_consensus_subspace::SubspaceApi; use sp_core::crypto::Ss58AddressFormat; use sp_core::storage::StorageKey; use sp_core::H256; -use sp_runtime::traits::{Block as BlockT, Header}; +use sp_runtime::traits::Header; use std::fmt; use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4}; use std::path::PathBuf; @@ -237,6 +237,28 @@ impl ConsensusNode { self.full_node.client.info().best_number } + #[warn(dead_code)] + pub(super) fn total_space_pledged(&self) -> anyhow::Result { + let runtime_api = self.full_node.client.runtime_api(); + let block_hash = self.full_node.client.info().best_hash; + + let current_solution_range = runtime_api.solution_ranges(block_hash)?.current; + let slot_probability = runtime_api.chain_constants(block_hash)?.slot_probability(); + let max_pieces_in_sector = runtime_api.max_pieces_in_sector(block_hash)?; + + // calculate the sectors + let sectors = solution_range_to_sectors( + current_solution_range, + slot_probability, + max_pieces_in_sector, + ); + + // Calculate the total space pledged + Ok(sectors as u128 + * max_pieces_in_sector as u128 + * subspace_core_primitives::Piece::SIZE as u128) + } + pub(super) fn account_balance(&self, account: &PublicKey) -> Balance { let reward_address_storage_key = account_storage_key(account); @@ -288,35 +310,6 @@ fn get_total_account_balance( Some(account_data.free + account_data.reserved + account_data.frozen) } -#[allow(dead_code)] -pub(crate) fn get_total_space_pledged( - client: &Client, - block_hash: H256, -) -> Result -where - Block: BlockT + sp_api::__private::BlockT, - Client: ProvideRuntimeApi, - Client::Api: SubspaceApi, -{ - let runtime_api = client.runtime_api(); - - let current_solution_range = runtime_api.solution_ranges(block_hash)?.current; - let slot_probability = runtime_api.chain_constants(block_hash)?.slot_probability(); - let max_pieces_in_sector = runtime_api.max_pieces_in_sector(block_hash)?; - - // calculate the sectors - let sectors = solution_range_to_sectors( - current_solution_range, - slot_probability, - max_pieces_in_sector, - ); - - // Calculate the total space pledged - Ok(sectors as u128 - * max_pieces_in_sector as u128 - * subspace_core_primitives::Piece::SIZE as u128) -} - pub(super) fn load_chain_specification(chain_spec: &'static [u8]) -> Result { GenericChainSpec::<()>::from_json_bytes(chain_spec) .map(|chain_spec| ChainSpec(Box::new(chain_spec))) diff --git a/src/backend/utils.rs b/src/backend/utils.rs index 07445a45..5fe3e967 100644 --- a/src/backend/utils.rs +++ b/src/backend/utils.rs @@ -11,7 +11,8 @@ pub(super) type Handler = Bag, A>; /// ``` /// MAX * slot_probability / (pieces_in_sector * chunks / s_buckets) / solution_range /// ``` -pub(crate) const fn solution_range_to_sectors( +#[warn(dead_code)] +pub(super) const fn solution_range_to_sectors( solution_range: SolutionRange, slot_probability: (u64, u64), max_pieces_in_sector: u16, From 7505f7c9a014e8474699b44c8a3ea8aa1fde7582 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Mon, 20 May 2024 19:52:37 +0530 Subject: [PATCH 19/29] minor fix --- src/backend/node.rs | 2 +- src/backend/utils.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/node.rs b/src/backend/node.rs index 80d2ce16..31a98973 100644 --- a/src/backend/node.rs +++ b/src/backend/node.rs @@ -237,7 +237,7 @@ impl ConsensusNode { self.full_node.client.info().best_number } - #[warn(dead_code)] + #[allow(dead_code)] pub(super) fn total_space_pledged(&self) -> anyhow::Result { let runtime_api = self.full_node.client.runtime_api(); let block_hash = self.full_node.client.info().best_hash; diff --git a/src/backend/utils.rs b/src/backend/utils.rs index 5fe3e967..74841498 100644 --- a/src/backend/utils.rs +++ b/src/backend/utils.rs @@ -11,7 +11,7 @@ pub(super) type Handler = Bag, A>; /// ``` /// MAX * slot_probability / (pieces_in_sector * chunks / s_buckets) / solution_range /// ``` -#[warn(dead_code)] +#[allow(dead_code)] pub(super) const fn solution_range_to_sectors( solution_range: SolutionRange, slot_probability: (u64, u64), From 78a1e36d190e6a6369b180c9e60f176723cc81ee Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Tue, 21 May 2024 00:24:26 +0530 Subject: [PATCH 20/29] Resolved conflicts & added missing sp-api for this branch --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index 01e8ce2b..c3e2d681 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -79,6 +79,7 @@ semver = "1.0.23" serde = { version = "1.0.202", features = ["derive"] } serde_json = "1.0.117" simple_moving_average = "1.0.2" +sp-api = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d", default-features = false } sp-core = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d", default-features = false } sp-consensus-subspace = { git = "https://github.com/subspace/subspace", rev = "d159452bf4cd480837770d83c4f0cab3a28da048" } sp-domains-fraud-proof = { git = "https://github.com/subspace/subspace", rev = "d159452bf4cd480837770d83c4f0cab3a28da048" } From b5dfa7dcd4218dc83d573da728ef51ddfc196b94 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Wed, 22 May 2024 22:53:58 +0530 Subject: [PATCH 21/29] Remove solution_range_to_sectors func Also refactor: add Clone trait to NC in create_network function --- Cargo.lock | 870 ++++++++++++++++++++------------------ Cargo.toml | 52 +-- src/backend/networking.rs | 2 +- src/backend/node.rs | 4 +- src/backend/utils.rs | 23 - 5 files changed, 490 insertions(+), 461 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9916118e..196e051e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -31,16 +31,16 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.6.0" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d223b13fd481fc0d1f83bb12659ae774d9e3601814c68a0bc539731698cca743" +checksum = "4eb9843d84c775696c37d9a418bbb01b932629d01870722c0f13eb3f95e2536d" dependencies = [ "actix-codec", "actix-rt", "actix-service", "actix-utils", "ahash 0.8.11", - "base64 0.21.7", + "base64 0.22.1", "bitflags 2.5.0", "brotli", "bytes", @@ -75,18 +75,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] name = "actix-router" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d22475596539443685426b6bdadb926ad0ecaefdfc5fb05e5e3441f15463c511" +checksum = "13d324164c51f63867b57e73ba5936ea151b8a41a1d23d1031eeb9f70d0236f8" dependencies = [ "bytestring", + "cfg-if", "http 0.2.12", "regex", + "regex-lite", "serde", "tracing", ] @@ -141,9 +143,9 @@ dependencies = [ [[package]] name = "actix-web" -version = "4.5.1" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a6556ddebb638c2358714d853257ed226ece6023ef9364f23f0c70737ea984" +checksum = "b1cf67dadb19d7c95e5a299e2dda24193b89d5d4f33a3b9800888ede9e19aa32" dependencies = [ "actix-codec", "actix-http", @@ -170,6 +172,7 @@ dependencies = [ "once_cell", "pin-project-lite 0.2.14", "regex", + "regex-lite", "serde", "serde_json", "serde_urlencoded", @@ -188,7 +191,7 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -256,7 +259,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.14", + "getrandom 0.2.15", "once_cell", "version_check", ] @@ -268,7 +271,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom 0.2.14", + "getrandom 0.2.15", "once_cell", "version_check", "zerocopy", @@ -336,47 +339,48 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.13" +version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -384,9 +388,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.83" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "approx" @@ -408,7 +412,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -712,9 +716,9 @@ checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" [[package]] name = "array-bytes" -version = "6.2.2" +version = "6.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f840fb7195bcfc5e17ea40c26e5ce6d5b9ce5d584466e17703209657e459ae0" +checksum = "5d5dde061bd34119e902bbb2d9b90c5692635cf59fb91d582c2b68043f1b8293" [[package]] name = "arrayref" @@ -786,7 +790,7 @@ checksum = "7378575ff571966e99a744addeff0bff98b8ada0dedf1956d59e634db95eaac1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", "synstructure 0.13.1", ] @@ -809,7 +813,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -837,12 +841,11 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.2.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d4d23bcc79e27423727b36823d86233aad06dfea531837b038394d11e9928" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener 5.3.0", "event-listener-strategy 0.5.2", "futures-core", "pin-project-lite 0.2.14", @@ -913,9 +916,9 @@ dependencies = [ [[package]] name = "async-nats" -version = "0.34.0" +version = "0.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eea7b126ebfa4db78e9e788b2a792b6329f35b4f2fdd56dbc646dedc2beec7a5" +checksum = "ab8df97cb8fc4a884af29ab383e9292ea0939cfcdd7d2a17179086dc6c427e7f" dependencies = [ "base64 0.22.1", "bytes", @@ -930,7 +933,7 @@ dependencies = [ "ring 0.17.8", "rustls-native-certs 0.7.0", "rustls-pemfile 2.1.2", - "rustls-webpki 0.102.3", + "rustls-webpki 0.102.4", "serde", "serde_json", "serde_nanos", @@ -938,7 +941,7 @@ dependencies = [ "thiserror", "time", "tokio", - "tokio-rustls 0.25.0", + "tokio-rustls 0.26.0", "tracing", "tryhard", "url", @@ -959,7 +962,7 @@ version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a53fc6301894e04a92cb2584fedde80cb25ba8e02d9dc39d4a87d036e22f397d" dependencies = [ - "async-channel 2.2.1", + "async-channel 2.3.1", "async-io", "async-lock", "async-signal", @@ -981,7 +984,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -1016,7 +1019,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -1095,9 +1098,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "autotools" @@ -1115,7 +1118,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" dependencies = [ "futures-core", - "getrandom 0.2.14", + "getrandom 0.2.15", "instant", "pin-project-lite 0.2.14", "rand", @@ -1394,7 +1397,7 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" dependencies = [ - "async-channel 2.2.1", + "async-channel 2.3.1", "async-lock", "async-task", "futures-io", @@ -1405,7 +1408,7 @@ dependencies = [ [[package]] name = "blst" version = "0.3.11" -source = "git+https://github.com/supranational/blst.git#704c7f6d5f99ebb6bda84f635122e449ee51aa48" +source = "git+https://github.com/supranational/blst.git#afd60c5f689ef11863852353dd394265a0c37863" dependencies = [ "cc", "glob", @@ -1427,9 +1430,9 @@ dependencies = [ [[package]] name = "brotli" -version = "3.5.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391" +checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -1438,9 +1441,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.5.1" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +checksum = "e6221fe77a248b9117d431ad93761222e1cf8ff282d9d1d5d9f53d6299a1cf76" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -1481,9 +1484,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" +checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" [[package]] name = "byteorder" @@ -1558,9 +1561,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.96" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065a29261d53ba54260972629f9ca6bffa69bac13cd1fed61420f7fa68b9f8bd" +checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" dependencies = [ "jobserver", "libc", @@ -1767,7 +1770,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -1826,9 +1829,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" [[package]] name = "common" @@ -1882,7 +1885,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom 0.2.14", + "getrandom 0.2.15", "once_cell", "tiny-keccak", ] @@ -2094,9 +2097,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] @@ -2146,7 +2149,7 @@ checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" [[package]] name = "cross-domain-message-gossip" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "futures", "parity-scale-codec", @@ -2183,9 +2186,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" @@ -2283,7 +2286,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -2426,7 +2429,7 @@ checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -2573,7 +2576,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -2619,16 +2622,16 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.60", + "syn 2.0.65", "termcolor", - "toml 0.8.12", + "toml 0.8.13", "walkdir", ] [[package]] name = "domain-block-preprocessor" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "async-trait", "domain-runtime-primitives", @@ -2657,7 +2660,7 @@ dependencies = [ [[package]] name = "domain-runtime-primitives" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "fp-account", "frame-support", @@ -2781,9 +2784,9 @@ dependencies = [ [[package]] name = "either" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "elliptic-curve" @@ -2841,7 +2844,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -2861,7 +2864,7 @@ checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -2882,7 +2885,7 @@ checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -2912,9 +2915,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2999,7 +3002,7 @@ dependencies = [ "prettier-please", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -3058,9 +3061,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38793c55593b33412e3ae40c2c9781ffaa6f438f6f8c10f24e71846fbd7ae01e" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "field-offset" @@ -3084,9 +3087,9 @@ dependencies = [ [[package]] name = "file-rotate" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf221ceec4517f3cb764dae3541b2bd87666fc8832e51322fbb97250b468c71" +checksum = "7a3ed82142801f5b1363f7d463963d114db80f467e860b1cd82228eaebc627a0" dependencies = [ "chrono", "flate2", @@ -3194,7 +3197,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -3206,7 +3209,7 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "fork-tree" version = "12.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "parity-scale-codec", ] @@ -3223,7 +3226,7 @@ dependencies = [ [[package]] name = "fp-account" version = "1.0.0-dev" -source = "git+https://github.com/subspace/frontier?rev=f1039d3b588b2524a3fc29726435077f5c87ce92#f1039d3b588b2524a3fc29726435077f5c87ce92" +source = "git+https://github.com/subspace/frontier?rev=0b4f22c3343a7a21783c1e2f0d0e21dfbf66b641#0b4f22c3343a7a21783c1e2f0d0e21dfbf66b641" dependencies = [ "hex", "impl-serde", @@ -3248,7 +3251,7 @@ checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "frame-benchmarking" version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "frame-support", "frame-support-procedural", @@ -3285,10 +3288,10 @@ dependencies = [ [[package]] name = "frame-support" version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "aquamarine", - "array-bytes 6.2.2", + "array-bytes 6.2.3", "bitflags 1.3.2", "docify", "environmental", @@ -3326,7 +3329,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "23.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "Inflector", "cfg-expr", @@ -3339,35 +3342,35 @@ dependencies = [ "proc-macro2", "quote", "sp-crypto-hashing", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] name = "frame-support-procedural-tools" version = "10.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] name = "frame-support-procedural-tools-derive" version = "11.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] name = "frame-system" version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "cfg-if", "docify", @@ -3387,7 +3390,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "26.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "parity-scale-codec", "sp-api", @@ -3518,7 +3521,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -3702,9 +3705,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "js-sys", @@ -3816,7 +3819,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -4166,9 +4169,9 @@ dependencies = [ [[package]] name = "hex-conservative" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed443af458ccb6d81c1e7e661545f94d3176752fb1df2f543b902a1e0f51e2" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" [[package]] name = "hex-literal" @@ -4716,9 +4719,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -4803,6 +4806,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + [[package]] name = "itertools" version = "0.10.5" @@ -4821,6 +4830,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.11" @@ -4943,7 +4961,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -5078,9 +5096,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.154" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libm" @@ -5090,9 +5108,9 @@ checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "libmimalloc-sys" -version = "0.1.37" +version = "0.1.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81eb4061c0582dedea1cbc7aff2240300dd6982e0239d1c99e65c1dbf4a30ba7" +checksum = "0e7bb23d733dfcc8af652a78b7bf232f0e967710d044732185e561e47c0336b6" dependencies = [ "cc", "libc", @@ -5107,7 +5125,7 @@ dependencies = [ "bytes", "futures", "futures-timer", - "getrandom 0.2.14", + "getrandom 0.2.15", "instant", "libp2p-allow-block-list 0.1.1", "libp2p-connection-limits 0.1.0", @@ -5141,7 +5159,7 @@ dependencies = [ "either", "futures", "futures-timer", - "getrandom 0.2.14", + "getrandom 0.2.15", "instant", "libp2p-allow-block-list 0.3.0", "libp2p-autonat", @@ -5339,7 +5357,7 @@ dependencies = [ "fnv", "futures", "futures-ticker", - "getrandom 0.2.14", + "getrandom 0.2.15", "hex_fmt", "instant", "libp2p-core 0.41.2", @@ -5819,7 +5837,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -6071,9 +6089,9 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "lioness" @@ -6185,7 +6203,7 @@ dependencies = [ "macro_magic_core", "macro_magic_macros", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -6199,7 +6217,7 @@ dependencies = [ "macro_magic_core_macros", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -6210,7 +6228,7 @@ checksum = "9ea73aa640dc01d62a590d48c0c3521ed739d53b27f919b25c3551e233481654" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -6221,7 +6239,7 @@ checksum = "ef9d79ae96aaba821963320eb2b6e34d17df1e5a83d8a1985c29cc5be59577b3" dependencies = [ "macro_magic_core", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -6347,9 +6365,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.41" +version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f41a2280ded0da56c8cf898babb86e8f10651a34adcfff190ae9a1159c6908d" +checksum = "e9186d86b79b52f4a77af65604b51225e8db1d6ee7e3f41aec1e40829c71a176" dependencies = [ "libmimalloc-sys", ] @@ -6368,9 +6386,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" dependencies = [ "adler", "simd-adler32", @@ -6416,7 +6434,7 @@ dependencies = [ [[package]] name = "mmr-gadget" version = "29.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "futures", "log", @@ -6435,7 +6453,7 @@ dependencies = [ [[package]] name = "mmr-rpc" version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -6642,7 +6660,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" dependencies = [ - "getrandom 0.2.14", + "getrandom 0.2.15", ] [[package]] @@ -6767,7 +6785,7 @@ dependencies = [ "data-encoding", "ed25519", "ed25519-dalek", - "getrandom 0.2.14", + "getrandom 0.2.15", "log", "rand", "signatory", @@ -6828,20 +6846,19 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" dependencies = [ - "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-complex" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] @@ -6873,20 +6890,19 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", "libm", @@ -6919,7 +6935,7 @@ checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -6944,15 +6960,15 @@ dependencies = [ [[package]] name = "objc-sys" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da284c198fb9b7b0603f8635185e85fbd5b64ee154b1ed406d489077de2d6d60" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" [[package]] name = "objc2" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b25e1034d0e636cd84707ccdaa9f81243d399196b8a773946dcffec0401659" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" dependencies = [ "objc-sys", "objc2-encode", @@ -6960,9 +6976,9 @@ dependencies = [ [[package]] name = "objc2-encode" -version = "4.0.1" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88658da63e4cc2c8adb1262902cd6af51094df0488b760d6fd27194269c0950a" +checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" [[package]] name = "objc_id" @@ -7042,9 +7058,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "open" -version = "5.1.2" +version = "5.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "449f0ff855d85ddbf1edd5b646d65249ead3f5e422aaa86b7d2d0b049b103e32" +checksum = "2eb49fbd5616580e9974662cb96a3463da4476e649a7e4b258df0de065db0657" dependencies = [ "is-wsl", "libc", @@ -7108,7 +7124,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "pallet-balances" version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "docify", "frame-support", @@ -7123,7 +7139,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "27.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "frame-benchmarking", "frame-support", @@ -7141,7 +7157,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "frame-support", "frame-system", @@ -7157,7 +7173,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "30.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -7173,7 +7189,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -7353,9 +7369,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pathdiff" @@ -7409,9 +7425,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", "indexmap 2.2.6", @@ -7434,7 +7450,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -7457,9 +7473,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +checksum = "464db0c665917b13ebb5d453ccdec4add5658ee1adc7affc7677615356a8afaf" dependencies = [ "atomic-waker", "fastrand", @@ -7550,7 +7566,7 @@ dependencies = [ "polkavm-common", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -7560,7 +7576,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" dependencies = [ "polkavm-derive-impl", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -7662,7 +7678,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22020dfcf177fcc7bf5deaf7440af371400c67c0de14c399938d8ed4fb4645d3" dependencies = [ "proc-macro2", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -7748,23 +7764,23 @@ checksum = "834da187cfe638ae8abb0203f0b33e5ccdb02a28e7199f2f47b3e2754f50edca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" dependencies = [ "unicode-ident", ] [[package]] name = "prometheus" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" dependencies = [ "cfg-if", "fnv", @@ -7806,7 +7822,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -7821,12 +7837,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f5d036824e4761737860779c906171497f6d55681139d8312388f8fe398922" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ "bytes", - "prost-derive 0.12.4", + "prost-derive 0.12.6", ] [[package]] @@ -7866,15 +7882,15 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19de2de2a00075bf566bee3bd4db014b11587e84184d3f7a791bc17f1a8e9e48" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.11.0", + "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -8102,7 +8118,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.14", + "getrandom 0.2.15", ] [[package]] @@ -8222,29 +8238,29 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" dependencies = [ - "getrandom 0.2.14", + "getrandom 0.2.15", "libredox", "thiserror", ] [[package]] name = "ref-cast" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4846d4c50d1721b1a3bef8af76924eef20d5e723647333798c1b519b3a9473f" +checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fddb4f8d99b0a2ebafc65a87a69a7b9875e4b1ae1f00db265d300ef7f28bccc" +checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -8291,6 +8307,12 @@ dependencies = [ "regex-syntax 0.8.3", ] +[[package]] +name = "regex-lite" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b661b2f27137bdbc16f00eda72866a92bb28af1753ffbd56744fb6e2e9cd8e" + [[package]] name = "regex-syntax" version = "0.6.29" @@ -8349,7 +8371,7 @@ checksum = "4a0249463bd27f93f10c883aaa31e7ca254cc2f0c6c8cd60a68e6d052d9dba85" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -8452,7 +8474,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.14", + "getrandom 0.2.15", "libc", "spin 0.9.8", "untrusted 0.9.0", @@ -8516,9 +8538,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -8573,7 +8595,7 @@ dependencies = [ "bitflags 2.5.0", "errno", "libc", - "linux-raw-sys 0.4.13", + "linux-raw-sys 0.4.14", "windows-sys 0.52.0", ] @@ -8610,7 +8632,21 @@ dependencies = [ "log", "ring 0.17.8", "rustls-pki-types", - "rustls-webpki 0.102.3", + "rustls-webpki 0.102.4", + "subtle 2.5.0", + "zeroize", +] + +[[package]] +name = "rustls" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebbbdb961df0ad3f2652da8f3fdc4b36122f568f968f45ad3316f26c025c677b" +dependencies = [ + "once_cell", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.4", "subtle 2.5.0", "zeroize", ] @@ -8661,9 +8697,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.5.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beb461507cee2c2ff151784c52762cf4d9ff6a61f3e80968600ed24fa837fa54" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" [[package]] name = "rustls-webpki" @@ -8677,9 +8713,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.3" +version = "0.102.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3bce581c0dd41bce533ce695a1437fa16a7ab5ac3ccfa99fe1a620a7885eabf" +checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" dependencies = [ "ring 0.17.8", "rustls-pki-types", @@ -8688,9 +8724,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "rw-stream-sink" @@ -8716,15 +8752,15 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "safe-transmute" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a01dab6acf992653be49205bdd549f32f17cb2803e8eacf1560bf97259aae8" +checksum = "3944826ff8fa8093089aba3acb4ef44b9446a99a16f3bf4e74af3f77d340ab7d" [[package]] name = "safe_arch" @@ -8747,7 +8783,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "23.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "log", "sp-core", @@ -8758,7 +8794,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.34.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "futures", "futures-timer", @@ -8780,7 +8816,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.33.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "parity-scale-codec", "sp-api", @@ -8795,9 +8831,9 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "27.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ - "array-bytes 6.2.2", + "array-bytes 6.2.3", "docify", "log", "memmap2 0.9.4", @@ -8821,18 +8857,18 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "11.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] name = "sc-client-api" version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "fnv", "futures", @@ -8859,7 +8895,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.35.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "hash-db", "kvdb", @@ -8884,7 +8920,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.33.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "async-lock", "async-trait", @@ -8911,7 +8947,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.33.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "async-trait", "futures", @@ -8934,11 +8970,10 @@ dependencies = [ [[package]] name = "sc-consensus-subspace" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "async-trait", "futures", - "lru 0.12.3", "parity-scale-codec", "parking_lot 0.12.2", "rand", @@ -8951,6 +8986,7 @@ dependencies = [ "sc-telemetry", "sc-transaction-pool-api", "sc-utils", + "schnellru", "schnorrkel", "sp-api", "sp-block-builder", @@ -8974,13 +9010,12 @@ dependencies = [ [[package]] name = "sc-consensus-subspace-rpc" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "async-oneshot", "futures", "futures-timer", "jsonrpsee", - "lru 0.12.3", "parity-scale-codec", "parking_lot 0.12.2", "sc-client-api", @@ -8988,6 +9023,7 @@ dependencies = [ "sc-rpc", "sc-rpc-api", "sc-utils", + "schnellru", "sp-api", "sp-blockchain", "sp-consensus", @@ -9007,7 +9043,7 @@ dependencies = [ [[package]] name = "sc-domains" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "sc-client-api", "sc-executor", @@ -9016,6 +9052,7 @@ dependencies = [ "sp-blockchain", "sp-core", "sp-domains", + "sp-domains-fraud-proof", "sp-externalities", "sp-io", "sp-messenger-host-functions", @@ -9026,7 +9063,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.32.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "parity-scale-codec", "parking_lot 0.12.2", @@ -9049,7 +9086,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.29.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "polkavm", "sc-allocator", @@ -9062,7 +9099,7 @@ dependencies = [ [[package]] name = "sc-executor-polkavm" version = "0.29.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "log", "polkavm", @@ -9073,7 +9110,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.29.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "anyhow", "cfg-if", @@ -9091,7 +9128,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.33.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "ansi_term", "futures", @@ -9108,9 +9145,9 @@ dependencies = [ [[package]] name = "sc-keystore" version = "25.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ - "array-bytes 6.2.2", + "array-bytes 6.2.3", "parking_lot 0.12.2", "serde_json", "sp-application-crypto", @@ -9122,7 +9159,7 @@ dependencies = [ [[package]] name = "sc-mixnet" version = "0.4.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "array-bytes 4.2.0", "arrayvec", @@ -9151,9 +9188,9 @@ dependencies = [ [[package]] name = "sc-network" version = "0.34.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ - "array-bytes 6.2.2", + "array-bytes 6.2.3", "async-channel 1.9.0", "async-trait", "asynchronous-codec 0.6.2", @@ -9194,14 +9231,14 @@ dependencies = [ [[package]] name = "sc-network-bitswap" version = "0.33.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "async-channel 1.9.0", "cid", "futures", "libp2p-identity 0.1.3", "log", - "prost 0.12.4", + "prost 0.12.6", "prost-build", "sc-client-api", "sc-network", @@ -9214,7 +9251,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.33.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "async-trait", "bitflags 1.3.2", @@ -9231,7 +9268,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.34.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "ahash 0.8.11", "futures", @@ -9250,15 +9287,15 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.33.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ - "array-bytes 6.2.2", + "array-bytes 6.2.3", "async-channel 1.9.0", "futures", "libp2p-identity 0.1.3", "log", "parity-scale-codec", - "prost 0.12.4", + "prost 0.12.6", "prost-build", "sc-client-api", "sc-network", @@ -9271,9 +9308,9 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.33.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ - "array-bytes 6.2.2", + "array-bytes 6.2.3", "async-channel 1.9.0", "async-trait", "fork-tree", @@ -9283,7 +9320,7 @@ dependencies = [ "log", "mockall", "parity-scale-codec", - "prost 0.12.4", + "prost 0.12.6", "prost-build", "sc-client-api", "sc-consensus", @@ -9307,9 +9344,9 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.33.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ - "array-bytes 6.2.2", + "array-bytes 6.2.3", "futures", "libp2p 0.51.4", "log", @@ -9326,9 +9363,9 @@ dependencies = [ [[package]] name = "sc-offchain" version = "29.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ - "array-bytes 6.2.2", + "array-bytes 6.2.3", "bytes", "fnv", "futures", @@ -9360,13 +9397,12 @@ dependencies = [ [[package]] name = "sc-proof-of-time" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "atomic", "core_affinity", "derive_more", "futures", - "lru 0.12.3", "parity-scale-codec", "parking_lot 0.12.2", "rayon", @@ -9374,6 +9410,7 @@ dependencies = [ "sc-consensus-slots", "sc-network", "sc-network-gossip", + "schnellru", "sp-api", "sp-blockchain", "sp-consensus", @@ -9391,7 +9428,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.17.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -9400,7 +9437,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "29.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "futures", "jsonrpsee", @@ -9432,7 +9469,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.33.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -9452,7 +9489,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "11.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "futures", "governor", @@ -9470,9 +9507,9 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.34.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ - "array-bytes 6.2.2", + "array-bytes 6.2.3", "futures", "futures-util", "hex", @@ -9501,7 +9538,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.35.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "async-trait", "directories", @@ -9565,7 +9602,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.30.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "log", "parity-scale-codec", @@ -9576,7 +9613,7 @@ dependencies = [ [[package]] name = "sc-storage-monitor" version = "0.16.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "clap 4.5.4", "fs4 0.7.0", @@ -9589,7 +9626,7 @@ dependencies = [ [[package]] name = "sc-subspace-block-relay" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "async-channel 1.9.0", "async-trait", @@ -9614,12 +9651,12 @@ dependencies = [ [[package]] name = "sc-subspace-chain-specs" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" [[package]] name = "sc-sysinfo" version = "27.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "derive_more", "futures", @@ -9640,7 +9677,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "15.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "chrono", "futures", @@ -9659,7 +9696,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "ansi_term", "chrono", @@ -9689,18 +9726,18 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "11.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] name = "sc-transaction-pool" version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "async-trait", "futures", @@ -9727,7 +9764,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "async-trait", "futures", @@ -9743,7 +9780,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "14.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "async-channel 1.9.0", "futures", @@ -9757,9 +9794,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.11.2" +version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c453e59a955f81fb62ee5d596b450383d699f152d350e9d23a0db2adb78e4c0" +checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" dependencies = [ "bitvec", "cfg-if", @@ -9771,11 +9808,11 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.11.2" +version = "2.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18cf6c6447f813ef19eb450e985bcce6705f9ce7660db221b59093d15c79c4b7" +checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", "syn 1.0.109", @@ -9792,9 +9829,9 @@ dependencies = [ [[package]] name = "schnellru" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" +checksum = "c9a8ef13a93c54d20580de1e5c413e624e53121d42fc7e2c11d10ef7f8b02367" dependencies = [ "ahash 0.8.11", "cfg-if", @@ -9880,11 +9917,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "core-foundation", "core-foundation-sys", "libc", @@ -9893,9 +9930,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" dependencies = [ "core-foundation-sys", "libc", @@ -9954,7 +9991,7 @@ checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -9985,14 +10022,14 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] name = "serde_spanned" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" dependencies = [ "serde", ] @@ -10251,7 +10288,7 @@ dependencies = [ [[package]] name = "sp-api" version = "26.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "hash-db", "log", @@ -10273,7 +10310,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "15.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "Inflector", "blake2 0.10.6", @@ -10281,13 +10318,13 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] name = "sp-application-crypto" version = "30.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "parity-scale-codec", "scale-info", @@ -10300,7 +10337,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "23.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "docify", "integer-sqrt", @@ -10333,7 +10370,7 @@ dependencies = [ [[package]] name = "sp-auto-id" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "parity-scale-codec", "scale-info", @@ -10347,7 +10384,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "26.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "sp-api", "sp-inherents", @@ -10357,7 +10394,7 @@ dependencies = [ [[package]] name = "sp-block-fees" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "async-trait", "domain-runtime-primitives", @@ -10369,7 +10406,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "futures", "log", @@ -10387,7 +10424,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.32.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "async-trait", "futures", @@ -10402,7 +10439,7 @@ dependencies = [ [[package]] name = "sp-consensus-beefy" version = "13.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "lazy_static", "parity-scale-codec", @@ -10422,7 +10459,7 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" version = "13.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "finality-grandpa", "log", @@ -10439,7 +10476,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.32.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "parity-scale-codec", "scale-info", @@ -10450,7 +10487,7 @@ dependencies = [ [[package]] name = "sp-consensus-subspace" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "async-trait", "log", @@ -10477,9 +10514,9 @@ dependencies = [ [[package]] name = "sp-core" version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ - "array-bytes 6.2.2", + "array-bytes 6.2.3", "bandersnatch_vrfs", "bitflags 1.3.2", "blake2 0.10.6", @@ -10524,7 +10561,7 @@ dependencies = [ [[package]] name = "sp-crypto-ec-utils" version = "0.10.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "ark-bls12-377", "ark-bls12-377-ext", @@ -10544,7 +10581,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing" version = "0.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "blake2b_simd", "byteorder", @@ -10557,17 +10594,17 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "quote", "sp-crypto-hashing", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] name = "sp-database" version = "10.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "kvdb", "parking_lot 0.12.2", @@ -10576,17 +10613,17 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] name = "sp-domain-digests" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -10595,7 +10632,7 @@ dependencies = [ [[package]] name = "sp-domains" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "blake2 0.10.6", "domain-runtime-primitives", @@ -10627,7 +10664,7 @@ dependencies = [ [[package]] name = "sp-domains-fraud-proof" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "domain-block-preprocessor", "domain-runtime-primitives", @@ -10660,7 +10697,7 @@ dependencies = [ [[package]] name = "sp-executive" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "async-trait", "parity-scale-codec", @@ -10670,7 +10707,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.25.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "environmental", "parity-scale-codec", @@ -10680,7 +10717,7 @@ dependencies = [ [[package]] name = "sp-genesis-builder" version = "0.7.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "serde_json", "sp-api", @@ -10690,7 +10727,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "26.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -10703,7 +10740,7 @@ dependencies = [ [[package]] name = "sp-io" version = "30.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "bytes", "ed25519-dalek", @@ -10729,7 +10766,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.34.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "parity-scale-codec", "parking_lot 0.12.2", @@ -10740,7 +10777,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "11.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "thiserror", "zstd 0.12.4", @@ -10749,7 +10786,7 @@ dependencies = [ [[package]] name = "sp-messenger" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "async-trait", "frame-support", @@ -10771,7 +10808,7 @@ dependencies = [ [[package]] name = "sp-messenger-host-functions" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "domain-block-preprocessor", "parity-scale-codec", @@ -10790,7 +10827,7 @@ dependencies = [ [[package]] name = "sp-metadata-ir" version = "0.6.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "frame-metadata", "parity-scale-codec", @@ -10800,7 +10837,7 @@ dependencies = [ [[package]] name = "sp-mixnet" version = "0.4.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "parity-scale-codec", "scale-info", @@ -10811,7 +10848,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "26.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "ckb-merkle-mountain-range", "log", @@ -10828,7 +10865,7 @@ dependencies = [ [[package]] name = "sp-objects" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "sp-api", "subspace-core-primitives", @@ -10838,7 +10875,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "26.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "sp-api", "sp-core", @@ -10848,7 +10885,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "13.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "backtrace", "lazy_static", @@ -10858,7 +10895,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "26.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "rustc-hash", "serde", @@ -10868,7 +10905,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "31.0.1" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "docify", "either", @@ -10892,7 +10929,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "24.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -10911,20 +10948,20 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "17.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "Inflector", "expander", "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] name = "sp-session" version = "27.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "parity-scale-codec", "scale-info", @@ -10938,7 +10975,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "26.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -10951,7 +10988,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.35.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "hash-db", "log", @@ -10971,7 +11008,7 @@ dependencies = [ [[package]] name = "sp-statement-store" version = "10.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "aes-gcm", "curve25519-dalek 4.1.2", @@ -10995,12 +11032,12 @@ dependencies = [ [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" [[package]] name = "sp-storage" version = "19.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11012,7 +11049,7 @@ dependencies = [ [[package]] name = "sp-subspace-mmr" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "parity-scale-codec", "scale-info", @@ -11029,7 +11066,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "26.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "async-trait", "parity-scale-codec", @@ -11041,7 +11078,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "16.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "parity-scale-codec", "tracing", @@ -11052,7 +11089,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "26.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "sp-api", "sp-runtime", @@ -11061,7 +11098,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "26.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "async-trait", "parity-scale-codec", @@ -11075,7 +11112,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "29.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "ahash 0.8.11", "hash-db", @@ -11098,7 +11135,7 @@ dependencies = [ [[package]] name = "sp-version" version = "29.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "impl-serde", "parity-scale-codec", @@ -11115,18 +11152,18 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "13.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] name = "sp-wasm-interface" version = "20.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -11138,7 +11175,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "27.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "bounded-collections", "parity-scale-codec", @@ -11341,13 +11378,13 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] name = "subspace-archiving" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "parity-scale-codec", "rayon", @@ -11360,7 +11397,7 @@ dependencies = [ [[package]] name = "subspace-core-primitives" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "blake3", "derive_more", @@ -11383,7 +11420,7 @@ dependencies = [ [[package]] name = "subspace-erasure-coding" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "kzg", "rust-kzg-blst", @@ -11393,7 +11430,7 @@ dependencies = [ [[package]] name = "subspace-fake-runtime-api" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "domain-runtime-primitives", "frame-support", @@ -11424,7 +11461,7 @@ dependencies = [ [[package]] name = "subspace-farmer" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "anyhow", "async-lock", @@ -11446,7 +11483,6 @@ dependencies = [ "hex", "hwlocality", "jsonrpsee", - "lru 0.12.3", "mimalloc", "num_cpus", "parity-scale-codec", @@ -11455,6 +11491,7 @@ dependencies = [ "prometheus-client 0.22.2", "rand", "rayon", + "schnellru", "schnorrkel", "serde", "serde_json", @@ -11483,7 +11520,7 @@ dependencies = [ [[package]] name = "subspace-farmer-components" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "async-lock", "async-trait", @@ -11514,7 +11551,7 @@ dependencies = [ [[package]] name = "subspace-metrics" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "actix-web", "prometheus", @@ -11525,7 +11562,7 @@ dependencies = [ [[package]] name = "subspace-networking" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "async-mutex", "async-trait", @@ -11540,7 +11577,6 @@ dependencies = [ "futures-timer", "hex", "libp2p 0.53.2", - "lru 0.12.3", "memmap2 0.9.4", "nohash-hasher", "parity-scale-codec", @@ -11548,6 +11584,7 @@ dependencies = [ "pin-project", "prometheus-client 0.22.2", "rand", + "schnellru", "serde", "serde_json", "subspace-core-primitives", @@ -11563,20 +11600,22 @@ dependencies = [ [[package]] name = "subspace-proof-of-space" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "chacha20", "derive_more", + "parking_lot 0.12.2", "rayon", "seq-macro", "sha2 0.10.8", + "spin 0.9.8", "subspace-core-primitives", ] [[package]] name = "subspace-proof-of-time" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "aes", "subspace-core-primitives", @@ -11586,7 +11625,7 @@ dependencies = [ [[package]] name = "subspace-rpc-primitives" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "hex", "parity-scale-codec", @@ -11599,9 +11638,12 @@ dependencies = [ [[package]] name = "subspace-runtime-primitives" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ + "frame-support", "pallet-transaction-payment", + "parity-scale-codec", + "scale-info", "sp-core", "sp-runtime", "subspace-core-primitives", @@ -11610,7 +11652,7 @@ dependencies = [ [[package]] name = "subspace-service" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "async-trait", "cross-domain-message-gossip", @@ -11687,7 +11729,7 @@ dependencies = [ [[package]] name = "subspace-verification" version = "0.1.0" -source = "git+https://github.com/subspace/subspace?rev=d159452bf4cd480837770d83c4f0cab3a28da048#d159452bf4cd480837770d83c4f0cab3a28da048" +source = "git+https://github.com/subspace/subspace?rev=97411443667bef713bfdaa23af689b35b5d7035c#97411443667bef713bfdaa23af689b35b5d7035c" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -11700,7 +11742,7 @@ dependencies = [ [[package]] name = "substrate-bip39" version = "0.4.7" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "hmac 0.12.1", "pbkdf2", @@ -11725,7 +11767,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "28.0.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "frame-system-rpc-runtime-api", "futures", @@ -11744,7 +11786,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.17.0" -source = "git+https://github.com/subspace/polkadot-sdk?rev=808269708cf5375526755797e8f9a9986016727d#808269708cf5375526755797e8f9a9986016727d" +source = "git+https://github.com/subspace/polkadot-sdk?rev=9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee#9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" dependencies = [ "hyper 0.14.28", "log", @@ -11787,9 +11829,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.60" +version = "2.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" dependencies = [ "proc-macro2", "quote", @@ -11822,7 +11864,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -11855,7 +11897,7 @@ dependencies = [ "cfg-expr", "heck 0.5.0", "pkg-config", - "toml 0.8.12", + "toml 0.8.13", "version-compare", ] @@ -11917,22 +11959,22 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -12060,7 +12102,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -12084,6 +12126,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.7", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.15" @@ -12098,9 +12151,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", @@ -12108,7 +12161,6 @@ dependencies = [ "futures-sink", "pin-project-lite 0.2.14", "tokio", - "tracing", ] [[package]] @@ -12122,21 +12174,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.12" +version = "0.8.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" +checksum = "a4e43f8cc456c9704c851ae29c67e17ef65d2c30017c17a9765b89c382dc8bba" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.12", + "toml_edit 0.22.13", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" dependencies = [ "serde", ] @@ -12165,15 +12217,15 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.12" +version = "0.22.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef" +checksum = "c127785850e8c20836d49732ae6abfa47616e60bf9d9f57c43c250361a9db96c" dependencies = [ "indexmap 2.2.6", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.7", + "winnow 0.6.8", ] [[package]] @@ -12242,7 +12294,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -12355,7 +12407,7 @@ checksum = "ca029746fbe0efda3298205de77bf759d7fef23ac97902641e0b49a623b0455f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -12496,7 +12548,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34778c17965aa2a08913b57e1f34db9b4a63f5de31768b55bf20d2795f921259" dependencies = [ - "getrandom 0.2.14", + "getrandom 0.2.15", "rand", "serde", "web-time", @@ -12708,7 +12760,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", "wasm-bindgen-shared", ] @@ -12742,7 +12794,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -13054,9 +13106,9 @@ dependencies = [ [[package]] name = "wide" -version = "0.7.17" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0e39d2c603fdc0504b12b458cf1f34e0b937ed2f4f2dc20796e3e86f34e11f" +checksum = "21e005a4cc35784183a9e39cb22e9a9c46353ef6a7f113fd8d36ddc58c15ef3c" dependencies = [ "bytemuck", "safe_arch", @@ -13157,7 +13209,7 @@ checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -13168,7 +13220,7 @@ checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -13396,9 +13448,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14b9415ee827af173ebb3f15f9083df5a122eb93572ec28741fb153356ea2578" +checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" dependencies = [ "memchr", ] @@ -13533,7 +13585,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" dependencies = [ "libc", - "linux-raw-sys 0.4.13", + "linux-raw-sys 0.4.14", "rustix 0.38.34", ] @@ -13618,9 +13670,9 @@ dependencies = [ [[package]] name = "zbus" -version = "4.2.0" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aea58d1af0aaa8abf87f3d9ade9b8f46bf13727e5f9fb24bc31ee9d94a9b4ad" +checksum = "989c3977a7aafa97b12b9a35d21cdcff9b0d2289762b14683f45d66b1ba6c48f" dependencies = [ "async-broadcast", "async-executor", @@ -13651,19 +13703,19 @@ dependencies = [ "xdg-home", "zbus_macros", "zbus_names", - "zvariant 4.0.3", + "zvariant 4.1.1", ] [[package]] name = "zbus_macros" -version = "4.2.0" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf2b496ec1e2d3c4a7878e351607f7a2bec1e1029b353683dfc28a22999e369" +checksum = "6fe9de53245dcf426b7be226a4217dd5e339080e5d46e64a02d6e5dcbf90fca1" dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.65", "zvariant_utils", ] @@ -13675,27 +13727,27 @@ checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" dependencies = [ "serde", "static_assertions", - "zvariant 4.0.3", + "zvariant 4.1.1", ] [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -13715,7 +13767,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.65", ] [[package]] @@ -13799,15 +13851,15 @@ dependencies = [ [[package]] name = "zvariant" -version = "4.0.3" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e9282c6945d9e27742ba7ad7191325546636295de7b83f6735af73159b32ac7" +checksum = "9aa6d31a02fbfb602bfde791de7fedeb9c2c18115b3d00f3a36e489f46ffbbc7" dependencies = [ "endi", "enumflags2", "serde", "static_assertions", - "zvariant_derive 4.0.3", + "zvariant_derive 4.1.1", ] [[package]] @@ -13824,24 +13876,24 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "4.0.3" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0142549e559746ff09d194dd43d256a554299d286cc56460a082b8ae24652aa1" +checksum = "642bf1b6b6d527988b3e8193d20969d53700a36eac734d21ae6639db168701c8" dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.65", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "1.1.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75fa7291bdd68cd13c4f97cc9d78cbf16d96305856dfc7ac942aeff4c2de7d5a" +checksum = "fc242db087efc22bd9ade7aa7809e4ba828132edc312871584a6b4391bdf8786" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.65", ] diff --git a/Cargo.toml b/Cargo.toml index c3e2d681..b367ab88 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -50,7 +50,7 @@ duct = "0.13.7" event-listener-primitives = "2.0.1" indoc = "2.0.5" file-rotate = "0.7.5" -frame-system = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d", default-features = false } +frame-system = { git = "https://github.com/subspace/polkadot-sdk", rev = "9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee", default-features = false } fs4 = "0.8.3" futures = "0.3.30" gtk = { version = "0.7.3", package = "gtk4" } @@ -60,40 +60,40 @@ libp2p-identity-substate = { version = "0.1.3", package = "libp2p-identity" } mimalloc = "0.1.41" names = "0.14.0" open = "5.1.2" -pallet-balances = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d", default-features = false } +pallet-balances = { git = "https://github.com/subspace/polkadot-sdk", rev = "9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee", default-features = false } parity-scale-codec = "3.6.12" parking_lot = "0.12.2" relm4 = "0.7.0-rc.1" relm4-icons = { version = "0.7.0-alpha.2", features = ["checkmark", "cross", "grid-filled", "menu-large", "pause", "processor", "puzzle-piece", "size-horizontally", "ssd", "wallet2", "warning"] } relm4-components = { version = "0.7.0-rc.1", default-features = false } reqwest = { version = "0.12.4", default-features = false, features = ["json", "rustls-tls"] } -sc-client-api = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d", default-features = false } -sc-client-db = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d", default-features = false } -sc-consensus-slots = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d", default-features = false } -sc-informant = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d", default-features = false } -sc-network = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d", default-features = false } -sc-service = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d", default-features = false } -sc-storage-monitor = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d", default-features = false } -sc-subspace-chain-specs = { git = "https://github.com/subspace/subspace", rev = "d159452bf4cd480837770d83c4f0cab3a28da048" } +sc-client-api = { git = "https://github.com/subspace/polkadot-sdk", rev = "9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee", default-features = false } +sc-client-db = { git = "https://github.com/subspace/polkadot-sdk", rev = "9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee", default-features = false } +sc-consensus-slots = { git = "https://github.com/subspace/polkadot-sdk", rev = "9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee", default-features = false } +sc-informant = { git = "https://github.com/subspace/polkadot-sdk", rev = "9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee", default-features = false } +sc-network = { git = "https://github.com/subspace/polkadot-sdk", rev = "9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee", default-features = false } +sc-service = { git = "https://github.com/subspace/polkadot-sdk", rev = "9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee", default-features = false } +sc-storage-monitor = { git = "https://github.com/subspace/polkadot-sdk", rev = "9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee", default-features = false } +sc-subspace-chain-specs = { git = "https://github.com/subspace/subspace", rev = "97411443667bef713bfdaa23af689b35b5d7035c" } semver = "1.0.23" serde = { version = "1.0.202", features = ["derive"] } serde_json = "1.0.117" simple_moving_average = "1.0.2" -sp-api = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d", default-features = false } -sp-core = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d", default-features = false } -sp-consensus-subspace = { git = "https://github.com/subspace/subspace", rev = "d159452bf4cd480837770d83c4f0cab3a28da048" } -sp-domains-fraud-proof = { git = "https://github.com/subspace/subspace", rev = "d159452bf4cd480837770d83c4f0cab3a28da048" } -sp-runtime = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d", default-features = false } -subspace-core-primitives = { git = "https://github.com/subspace/subspace", rev = "d159452bf4cd480837770d83c4f0cab3a28da048" } -subspace-erasure-coding = { git = "https://github.com/subspace/subspace", rev = "d159452bf4cd480837770d83c4f0cab3a28da048" } -subspace-fake-runtime-api = { git = "https://github.com/subspace/subspace", rev = "d159452bf4cd480837770d83c4f0cab3a28da048" } -subspace-farmer = { git = "https://github.com/subspace/subspace", rev = "d159452bf4cd480837770d83c4f0cab3a28da048", default-features = false } -subspace-farmer-components = { git = "https://github.com/subspace/subspace", rev = "d159452bf4cd480837770d83c4f0cab3a28da048" } -subspace-networking = { git = "https://github.com/subspace/subspace", rev = "d159452bf4cd480837770d83c4f0cab3a28da048" } -subspace-proof-of-space = { git = "https://github.com/subspace/subspace", rev = "d159452bf4cd480837770d83c4f0cab3a28da048" } -subspace-rpc-primitives = { git = "https://github.com/subspace/subspace", rev = "d159452bf4cd480837770d83c4f0cab3a28da048" } -subspace-runtime-primitives = { git = "https://github.com/subspace/subspace", rev = "d159452bf4cd480837770d83c4f0cab3a28da048" } -subspace-service = { git = "https://github.com/subspace/subspace", rev = "d159452bf4cd480837770d83c4f0cab3a28da048" } +sp-api = { git = "https://github.com/subspace/polkadot-sdk", rev = "9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee", default-features = false } +sp-core = { git = "https://github.com/subspace/polkadot-sdk", rev = "9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee", default-features = false } +sp-consensus-subspace = { git = "https://github.com/subspace/subspace", rev = "97411443667bef713bfdaa23af689b35b5d7035c" } +sp-domains-fraud-proof = { git = "https://github.com/subspace/subspace", rev = "97411443667bef713bfdaa23af689b35b5d7035c" } +sp-runtime = { git = "https://github.com/subspace/polkadot-sdk", rev = "9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee", default-features = false } +subspace-core-primitives = { git = "https://github.com/subspace/subspace", rev = "97411443667bef713bfdaa23af689b35b5d7035c" } +subspace-erasure-coding = { git = "https://github.com/subspace/subspace", rev = "97411443667bef713bfdaa23af689b35b5d7035c" } +subspace-fake-runtime-api = { git = "https://github.com/subspace/subspace", rev = "97411443667bef713bfdaa23af689b35b5d7035c" } +subspace-farmer = { git = "https://github.com/subspace/subspace", rev = "97411443667bef713bfdaa23af689b35b5d7035c", default-features = false } +subspace-farmer-components = { git = "https://github.com/subspace/subspace", rev = "97411443667bef713bfdaa23af689b35b5d7035c" } +subspace-networking = { git = "https://github.com/subspace/subspace", rev = "97411443667bef713bfdaa23af689b35b5d7035c" } +subspace-proof-of-space = { git = "https://github.com/subspace/subspace", rev = "97411443667bef713bfdaa23af689b35b5d7035c" } +subspace-rpc-primitives = { git = "https://github.com/subspace/subspace", rev = "97411443667bef713bfdaa23af689b35b5d7035c" } +subspace-runtime-primitives = { git = "https://github.com/subspace/subspace", rev = "97411443667bef713bfdaa23af689b35b5d7035c" } +subspace-service = { git = "https://github.com/subspace/subspace", rev = "97411443667bef713bfdaa23af689b35b5d7035c" } supports-color = "3.0.0" thiserror = "1.0.60" thread-priority = "1.1.0" @@ -137,4 +137,4 @@ lto = "fat" [patch."https://github.com/paritytech/polkadot-sdk.git"] # TODO: https://github.com/paritytech/arkworks-substrate depends on Substrate's git commit and requires override -sp-crypto-ec-utils = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d" } +sp-crypto-ec-utils = { git = "https://github.com/subspace/polkadot-sdk", rev = "9b8cdb87de8f1c0e6b48c468b6196d1d99eeabee" } diff --git a/src/backend/networking.rs b/src/backend/networking.rs index 6c027d13..42ad32d8 100644 --- a/src/backend/networking.rs +++ b/src/backend/networking.rs @@ -94,7 +94,7 @@ pub fn create_network( where FarmIndex: Hash + Eq + Copy + fmt::Debug + Send + Sync + 'static, usize: From, - NC: NodeClientExt, + NC: NodeClientExt + Clone, { let span = info_span!("Network"); let _enter = span.enter(); diff --git a/src/backend/node.rs b/src/backend/node.rs index 67efa8f9..dbec6647 100644 --- a/src/backend/node.rs +++ b/src/backend/node.rs @@ -2,7 +2,7 @@ mod utils; use crate::backend::farmer::maybe_node_client::MaybeNodeRpcClient; use crate::backend::node::utils::account_storage_key; -use crate::backend::utils::{solution_range_to_sectors, Handler, HandlerFn}; +use crate::backend::utils::{Handler, HandlerFn}; use crate::PosTable; use event_listener_primitives::HandlerId; use frame_system::AccountInfo; @@ -31,7 +31,7 @@ use std::path::PathBuf; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; use std::time::Duration; -use subspace_core_primitives::{BlockNumber, PublicKey}; +use subspace_core_primitives::{solution_range_to_sectors, BlockNumber, PublicKey}; use subspace_fake_runtime_api::RuntimeApi; use subspace_farmer::node_client::node_rpc_client::NodeRpcClient; use subspace_networking::libp2p::identity::ed25519::Keypair; diff --git a/src/backend/utils.rs b/src/backend/utils.rs index 74841498..f908107b 100644 --- a/src/backend/utils.rs +++ b/src/backend/utils.rs @@ -1,28 +1,5 @@ use event_listener_primitives::Bag; use std::sync::Arc; -use subspace_core_primitives::{Record, SolutionRange}; pub(super) type HandlerFn = Arc; pub(super) type Handler = Bag, A>; - -// TODO: pointing to source code: https://github.com/subspace/subspace/blob/df8d33b65fff6a88d77fa8090533879199bcb422/crates/subspace-runtime/src/lib.rs#L222-L235 -// Needs to be de-duplicated -/// Computes the following: https://github.com/subspace/subspace/blob/df8d33b65fff6a88d77fa8090533879199bcb422/crates/subspace-runtime/src/lib.rs#L222-L235 -/// ``` -/// MAX * slot_probability / (pieces_in_sector * chunks / s_buckets) / solution_range -/// ``` -#[allow(dead_code)] -pub(super) const fn solution_range_to_sectors( - solution_range: SolutionRange, - slot_probability: (u64, u64), - max_pieces_in_sector: u16, -) -> u64 { - let sectors = SolutionRange::MAX - // Account for slot probability - / slot_probability.1 * slot_probability.0 - // Now take sector size and probability of hitting occupied s-bucket in sector into account - / (max_pieces_in_sector as u64 * Record::NUM_CHUNKS as u64 / Record::NUM_S_BUCKETS as u64); - - // Take solution range into account - sectors / solution_range -} From 57551243bb2e30ac239e900a97d5d2b9a08ba2f9 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Sat, 25 May 2024 04:40:21 +0530 Subject: [PATCH 22/29] Add required TSP metrics to calculate TSP, Allocated space for ETA --- src/backend.rs | 17 ++++++-- src/backend/farmer.rs | 9 ++-- src/backend/node.rs | 38 +++++++++-------- src/frontend/running.rs | 50 ++++++++++++++++++++-- src/frontend/running/farm.rs | 15 +++++++ src/frontend/running/node.rs | 2 +- src/frontend/widgets/progress_bar.rs | 63 ++++++++++------------------ 7 files changed, 122 insertions(+), 72 deletions(-) diff --git a/src/backend.rs b/src/backend.rs index 61b8d77b..4825c726 100644 --- a/src/backend.rs +++ b/src/backend.rs @@ -187,7 +187,11 @@ enum LoadedConsensusChainNode { #[derive(Debug, Clone)] pub enum NodeNotification { SyncStateUpdate(SyncState), - BlockImported(BlockImported), + BlockImported { + imported_block: BlockImported, + current_solution_range: u64, + max_pieces_in_sector: u16, + }, } /// Notification messages send from backend about its operation @@ -523,9 +527,14 @@ async fn run( let _on_imported_block_handler_id = consensus_node.on_block_imported({ let notifications_sender = notifications_sender.clone(); // let reward_address_storage_key = account_storage_key(&config.reward_address); - - Arc::new(move |&block_imported| { - let notification = NodeNotification::BlockImported(block_imported); + let (current_solution_range, max_pieces_in_sector) = consensus_node.tsp_metrics()?; + + Arc::new(move |&imported_block| { + let notification = NodeNotification::BlockImported { + imported_block, + current_solution_range, + max_pieces_in_sector, + }; let mut notifications_sender = notifications_sender.clone(); diff --git a/src/backend/farmer.rs b/src/backend/farmer.rs index cf30ac4b..aaae234c 100644 --- a/src/backend/farmer.rs +++ b/src/backend/farmer.rs @@ -686,21 +686,20 @@ where } /// the farmer can expect to get the next reward payment in this time units (sec/min/hr). -#[allow(dead_code)] pub(crate) fn calculate_expected_reward_duration_from_now( total_space_pledged: u128, space_pledged: u128, - last_reward_timestamp: Option, -) -> i64 { + last_reward_timestamp: Option, +) -> u64 { // Time elapsed since the last reward payment timestamp. let time_previous = SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap() - .as_secs() as i64 + .as_secs() as u64 - last_reward_timestamp.unwrap_or(0); // Expected time duration for next reward payment since the last reward payment timestamp. - let expected_time_next = (total_space_pledged as i64 / space_pledged as i64) * time_previous; + let expected_time_next = (total_space_pledged as u64 / space_pledged as u64) * time_previous; // subtract the duration till now from the expected time duration to get the ETA duration. expected_time_next - time_previous diff --git a/src/backend/node.rs b/src/backend/node.rs index dbec6647..1c44258e 100644 --- a/src/backend/node.rs +++ b/src/backend/node.rs @@ -122,7 +122,7 @@ struct Handlers { block_imported: Handler, } -pub(super) struct ConsensusNode { +pub(crate) struct ConsensusNode { full_node: NewFull>, pause_sync: Arc, chain_info: ChainInfo, @@ -136,7 +136,7 @@ impl fmt::Debug for ConsensusNode { } impl ConsensusNode { - fn new( + pub(crate) fn new( full_node: NewFull>, pause_sync: Arc, chain_info: ChainInfo, @@ -237,26 +237,14 @@ impl ConsensusNode { self.full_node.client.info().best_number } - #[allow(dead_code)] - pub(super) fn total_space_pledged(&self) -> anyhow::Result { + /// Returns current solution range & max. pieces in a sector + pub(super) fn tsp_metrics(&self) -> anyhow::Result<(u64, u16)> { let runtime_api = self.full_node.client.runtime_api(); let block_hash = self.full_node.client.info().best_hash; - let current_solution_range = runtime_api.solution_ranges(block_hash)?.current; - let slot_probability = runtime_api.chain_constants(block_hash)?.slot_probability(); let max_pieces_in_sector = runtime_api.max_pieces_in_sector(block_hash)?; - // calculate the sectors - let sectors = solution_range_to_sectors( - current_solution_range, - slot_probability, - max_pieces_in_sector, - ); - - // Calculate the total space pledged - Ok(sectors as u128 - * max_pieces_in_sector as u128 - * subspace_core_primitives::Piece::SIZE as u128) + Ok((current_solution_range, max_pieces_in_sector)) } pub(super) fn account_balance(&self, account: &PublicKey) -> Balance { @@ -570,3 +558,19 @@ pub(super) async fn create_consensus_node( Ok(ConsensusNode::new(consensus_node, pause_sync, chain_info)) } + +pub(crate) fn total_space_pledged( + current_solution_range: u64, + slot_probability: (u64, u64), + max_pieces_in_sector: u16, +) -> u128 { + // calculate the sectors + let sectors = solution_range_to_sectors( + current_solution_range, + slot_probability, + max_pieces_in_sector, + ); + + // Calculate the total space pledged + sectors as u128 * max_pieces_in_sector as u128 * subspace_core_primitives::Piece::SIZE as u128 +} diff --git a/src/frontend/running.rs b/src/frontend/running.rs index a6cf2e05..412638f5 100644 --- a/src/frontend/running.rs +++ b/src/frontend/running.rs @@ -2,8 +2,10 @@ mod farm; mod node; use crate::backend::config::RawConfig; -use crate::backend::farmer::{FarmerNotification, InitialFarmState}; -use crate::backend::node::ChainInfo; +use crate::backend::farmer::{ + calculate_expected_reward_duration_from_now, FarmerNotification, InitialFarmState, +}; +use crate::backend::node::{total_space_pledged, ChainInfo}; use crate::backend::{FarmIndex, NodeNotification}; use crate::frontend::progress_bar::create_circular_progress_bar; use crate::frontend::running::farm::{FarmWidget, FarmWidgetInit, FarmWidgetInput}; @@ -16,6 +18,9 @@ use subspace_core_primitives::BlockNumber; use subspace_runtime_primitives::{Balance, SSC}; use tracing::debug; +// TODO: define it calling from chain_constants. +pub const SLOT_PROBABILITY: (u64, u64) = (1, 6); + #[derive(Debug)] pub struct RunningInit { pub plotting_paused: bool, @@ -290,7 +295,11 @@ impl RunningView { } self.node_synced = new_synced; } - NodeNotification::BlockImported(imported_block) => { + NodeNotification::BlockImported { + imported_block, + current_solution_range, + max_pieces_in_sector, + } => { if !self.node_synced { // Do not count balance increase during sync as increase related to // farming, but preserve accumulated diff @@ -298,7 +307,16 @@ impl RunningView { - self.farmer_state.initial_reward_address_balance; self.farmer_state.initial_reward_address_balance = imported_block.reward_address_balance - previous_diff; + self.update_progress(0); + } else { + let total_space_pledged = total_space_pledged( + current_solution_range, + SLOT_PROBABILITY, + max_pieces_in_sector, + ); + self.update_progress(total_space_pledged); } + // In case balance decreased, subtract it from initial balance to ignore, // this typically happens due to chain reorg when reward is "disappears" if let Some(decreased_by) = self @@ -360,4 +378,30 @@ impl RunningView { } } } + + fn update_progress(&mut self, total_space_pledged: u128) { + // Sum up the allocated space from all farms + let total_allocated_space: u64 = self + .farms + .iter() + .map(|(_, farm)| farm.allocated_space()) + .sum(); + + // Calculate the ETA for reward payment + // TODO: may be change the last reward timestamp + let eta = calculate_expected_reward_duration_from_now( + total_space_pledged, + total_allocated_space as u128, + None, + ); + + // TODO: correct the progress updation. + // Calculate the progress and update + // if total_space_pledged > 0 { + // let progress_value = total_allocated_space as f64 / total_space_pledged as f64; + // *self.progress.borrow_mut() = progress_value; + // } else { + // *self.progress.borrow_mut() = 0.0; + // } + } } diff --git a/src/frontend/running/farm.rs b/src/frontend/running/farm.rs index 903d802f..194a6fc0 100644 --- a/src/frontend/running/farm.rs +++ b/src/frontend/running/farm.rs @@ -1,4 +1,5 @@ use crate::backend::config::Farm; +use bytesize::ByteSize; use gtk::prelude::*; use relm4::prelude::*; use relm4_icons::icon_name; @@ -549,4 +550,18 @@ impl FarmWidget { ))); } } + + pub(super) fn allocated_space(&self) -> u64 { + if self.is_node_synced && !self.plotting_paused { + // Parsing the size string and converting it to bytes + let allocated_space = self + .size + .parse::() + .expect("Failed to parse farm size") + .as_u64(); + return allocated_space; + } + + 0 + } } diff --git a/src/frontend/running/node.rs b/src/frontend/running/node.rs index e3545a31..2b6c67e3 100644 --- a/src/frontend/running/node.rs +++ b/src/frontend/running/node.rs @@ -291,7 +291,7 @@ impl NodeView { } self.sync_state = new_sync_state; } - NodeNotification::BlockImported(imported_block) => { + NodeNotification::BlockImported { imported_block, .. } => { self.best_block_number = imported_block.number; // Ensure target is never below current block if let SyncState::Syncing { target, .. } = &mut self.sync_state { diff --git a/src/frontend/widgets/progress_bar.rs b/src/frontend/widgets/progress_bar.rs index b64da2dd..bc0c8bf4 100644 --- a/src/frontend/widgets/progress_bar.rs +++ b/src/frontend/widgets/progress_bar.rs @@ -1,56 +1,52 @@ use gtk::prelude::*; -use gtk::{glib, DrawingArea}; +use gtk::DrawingArea; use std::cell::RefCell; use std::f64::consts::PI; use std::rc::Rc; -/// props for drawing a circular progress bar +/// Create a circular progress bar pub fn create_circular_progress_bar( diameter: f64, margin_top: i32, margin_bottom: i32, margin_start: i32, margin_end: i32, + set_visible: bool, tooltip_text: &str, + progress: Rc>, ) -> DrawingArea { - // Create a shared state for the progress - let progress = Rc::new(RefCell::new(1.0)); // Start fully "unwiped" + let drawing_area = DrawingArea::builder() + .content_width((diameter + 1.0) as i32) + .content_height((diameter + 1.0) as i32) + .margin_top(margin_top) + .margin_bottom(margin_bottom) + .margin_start(margin_start) + .margin_end(margin_end) + .tooltip_text(tooltip_text) + .visible(set_visible) + .build(); - let drawing_area = Rc::new(RefCell::new( - DrawingArea::builder() - .content_width((diameter + 1.0) as i32) - .content_height((diameter + 1.0) as i32) - .margin_top(margin_top) - .margin_bottom(margin_bottom) - .margin_start(margin_start) - .margin_end(margin_end) - .tooltip_text(tooltip_text) - .build(), - )); - - drawing_area.borrow().set_draw_func({ - let progress = progress.clone(); + drawing_area.set_draw_func({ + let percentage = *progress.borrow(); move |_, cr, width, height| { - let percentage = *progress.borrow(); - // Center coordinates let center_x = width as f64 / 2.0; let center_y = height as f64 / 2.0; - // Draw the full circle with respective color in dark/light themes + // Draw the background circle with respective color in dark/light themes if matches!(dark_light::detect(), dark_light::Mode::Dark) { // Grey for dark theme cr.set_source_rgb(0.2078431373, 0.2078431373, 0.2078431373); } else { // White for light theme - cr.set_source_rgb(1.0, 1.0, 1.0); // White for full circle + cr.set_source_rgb(1.0, 1.0, 1.0); } cr.arc(center_x, center_y, diameter / 2.0, 0.0, 2.0 * PI); // let _ = cr.fill(); // NOTE: Fill w/o border color let _ = cr.fill_preserve(); // Preserve the path for stroking - cr.set_source_rgb(0.0, 0.0, 0.0); // Black for the border + cr.set_source_rgb(0.0, 0.0, 0.0); // Black border color for both the themes. cr.set_line_width(0.5); // Set the border width - let _ = cr.stroke(); // Draw the border + let _ = cr.stroke(); // Draw the circle border // Draw the sweeping with respective color in dark/light themes if matches!(dark_light::detect(), dark_light::Mode::Dark) { @@ -72,22 +68,5 @@ pub fn create_circular_progress_bar( } }); - // Update the progress i.e. sweep arc every `interval` second - glib::timeout_add_seconds_local(1, { - let progress = progress.clone(); - let drawing_area = drawing_area.clone(); - move || { - let mut percentage = progress.borrow_mut(); - if (*percentage - 0.1) <= 0.0 { - *percentage = 1.0; // Reset to full when it reaches 0 - } else { - *percentage -= 0.1; // Decrease by 10% - } - drawing_area.borrow().queue_draw(); - glib::ControlFlow::Continue - } - }); - - let progress_bar = drawing_area.borrow().clone(); - progress_bar + drawing_area } From d0e26f72f99e3be18d2cfb9c1be3d1454992ce0d Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Sun, 26 May 2024 23:38:32 +0530 Subject: [PATCH 23/29] Enhance Reward ETA Calculation and Progress Bar Visualization 1. Error Handling in `calculate_expected_reward_duration_from_now` Function: - Added `anyhow::Result` as the return type. - Utilized `checked_sub`, `checked_div`, and `checked_mul` methods to prevent overflows. - Included explicit error handling for division by zero. 2. Frontend Updates: - Introduced a new `utils` module. - Added `CmdOut` enum for command output related to reward ETA progress. 3. Running View Enhancements: - Added new fields in `RunningView` for space pledged and progress bar tracking. - Implemented `update_cmd` to handle progress update commands. - Calculated total space pledged and initialized corresponding state in `RunningView`. - Provided the function `move_progress_bar` to manage progress bar updates based on ETA. - Defined the helper function `calculate_progress_params` for progress calculation. 4. Progress Bar Drawing Updates: - Enhanced drawing logic to handle different themes (dark/light) properly. - Updated the `create_circular_progress_bar` function to set up the progress bar correctly. 5. Cleanup and Refactoring: - Removed the `allocated_space` method from `FarmWidget` as it is no longer needed. - Updated comments and improved function headers for better clarity. Overall, the changes enhance the reward time estimation process and provide a seamless visual representation of progress towards reward payments. --- src/backend/farmer.rs | 31 +++-- src/frontend.rs | 1 + src/frontend/running.rs | 163 ++++++++++++++++++++------- src/frontend/running/farm.rs | 15 --- src/frontend/utils.rs | 58 ++++++++++ src/frontend/widgets/progress_bar.rs | 71 ++++++------ 6 files changed, 241 insertions(+), 98 deletions(-) create mode 100644 src/frontend/utils.rs diff --git a/src/backend/farmer.rs b/src/backend/farmer.rs index aaae234c..2edf5929 100644 --- a/src/backend/farmer.rs +++ b/src/backend/farmer.rs @@ -685,22 +685,37 @@ where }) } -/// the farmer can expect to get the next reward payment in this time units (sec/min/hr). +/// Calculate the ETA for reward payment. +/// The farmer can expect reward in secs/mins/hrs/days/weeks time. pub(crate) fn calculate_expected_reward_duration_from_now( total_space_pledged: u128, space_pledged: u128, last_reward_timestamp: Option, -) -> u64 { +) -> anyhow::Result { // Time elapsed since the last reward payment timestamp. let time_previous = SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap() - .as_secs() as u64 - - last_reward_timestamp.unwrap_or(0); + .as_secs() + .checked_sub(last_reward_timestamp.unwrap_or(0)) + .ok_or_else(|| anyhow!("Overflow occurred while subtracting the last reward timestamp"))?; - // Expected time duration for next reward payment since the last reward payment timestamp. - let expected_time_next = (total_space_pledged as u64 / space_pledged as u64) * time_previous; + // Ensure space_pledged is not zero to prevent division by zero. + if space_pledged == 0 { + return Err(anyhow!("Division by zero error: space_pledged is zero")); + } - // subtract the duration till now from the expected time duration to get the ETA duration. - expected_time_next - time_previous + // Expected time duration for next reward payment since the last reward payment timestamp. + let expected_time_next = (total_space_pledged as u64) + .checked_div(space_pledged as u64) + .ok_or_else(|| anyhow!("Overflow occurred during division"))? + .checked_mul(time_previous) + .ok_or_else(|| anyhow!("Overflow occurred during multiplication"))?; + + // Subtract the duration till now from the expected time duration to get the ETA duration. + let eta_duration = expected_time_next + .checked_sub(time_previous) + .ok_or_else(|| anyhow!("Overflow occurred during final subtraction"))?; + + Ok(eta_duration) } diff --git a/src/frontend.rs b/src/frontend.rs index f8610695..38b0dd77 100644 --- a/src/frontend.rs +++ b/src/frontend.rs @@ -4,3 +4,4 @@ pub mod new_version; #[path = "./frontend/widgets/progress_bar.rs"] pub mod progress_bar; pub mod running; +pub mod utils; diff --git a/src/frontend/running.rs b/src/frontend/running.rs index 412638f5..96a4b684 100644 --- a/src/frontend/running.rs +++ b/src/frontend/running.rs @@ -10,16 +10,23 @@ use crate::backend::{FarmIndex, NodeNotification}; use crate::frontend::progress_bar::create_circular_progress_bar; use crate::frontend::running::farm::{FarmWidget, FarmWidgetInit, FarmWidgetInput}; use crate::frontend::running::node::{NodeInput, NodeView}; +use crate::frontend::utils::format_eta; +use anyhow::anyhow; +use bytesize::ByteSize; +use futures::FutureExt; use gtk::prelude::*; use relm4::factory::FactoryHashMap; use relm4::prelude::*; use relm4_icons::icon_name; +use std::cell::RefCell; +use std::rc::Rc; use subspace_core_primitives::BlockNumber; use subspace_runtime_primitives::{Balance, SSC}; use tracing::debug; -// TODO: define it calling from chain_constants. -pub const SLOT_PROBABILITY: (u64, u64) = (1, 6); +// TODO: Need to fetch from chain_constants. +const SLOT_PROBABILITY: (u64, u64) = (1, 6); +const DEFAULT_TOOLTIP_ETA_PROGRESS_BAR: &str = "ETA for next reward payment"; #[derive(Debug)] pub struct RunningInit { @@ -41,6 +48,14 @@ pub enum RunningInput { TogglePausePlotting, } +#[derive(Debug)] +pub enum CmdOut { + /// Progress update based on arc progress of ETA progress bar. + RewardEtaProgress(f64), + /// Finished signal from ETA progress bar. + RewardEtaProgressFinished, +} + #[derive(Debug)] pub enum RunningOutput { PausePlotting(bool), @@ -62,7 +77,12 @@ pub struct RunningView { farmer_state: FarmerState, farms: FactoryHashMap, plotting_paused: bool, - circular_progress_bar: gtk::DrawingArea, + space_pledged: u128, + /// Reward payment ETA Progress value + reward_eta_progress: Rc>, + /// Reward payment ETA Progress bar (circular) + reward_eta_progress_bar: gtk::DrawingArea, + reward_eta_progress_bar_stopped: bool, } #[relm4::component(pub)] @@ -70,7 +90,7 @@ impl Component for RunningView { type Init = RunningInit; type Input = RunningInput; type Output = RunningOutput; - type CommandOutput = (); + type CommandOutput = CmdOut; view! { #[root] @@ -115,7 +135,7 @@ impl Component for RunningView { set_halign: gtk::Align::End, set_hexpand: true, - model.circular_progress_bar.clone(), + append: &model.reward_eta_progress_bar, gtk::LinkButton { remove_css_class: "link", @@ -202,6 +222,7 @@ impl Component for RunningView { let farms = FactoryHashMap::builder() .launch(gtk::Box::default()) .detach(); + let progress = Rc::new(RefCell::new(0.0)); let model = Self { node_view, @@ -209,14 +230,19 @@ impl Component for RunningView { farmer_state: FarmerState::default(), farms, plotting_paused: init.plotting_paused, - circular_progress_bar: create_circular_progress_bar( + space_pledged: 0, + reward_eta_progress: progress.clone(), + reward_eta_progress_bar: create_circular_progress_bar( 20.0, 10, 10, 10, 10, - "ETA for next reward payment", + true, + DEFAULT_TOOLTIP_ETA_PROGRESS_BAR, + progress, ), + reward_eta_progress_bar_stopped: true, }; let farms_box = model.farms.widget(); @@ -228,6 +254,25 @@ impl Component for RunningView { fn update(&mut self, input: Self::Input, sender: ComponentSender, _root: &Self::Root) { self.process_input(input, sender); } + + fn update_cmd( + &mut self, + message: Self::CommandOutput, + _sender: ComponentSender, + _root: &Self::Root, + ) { + match message { + CmdOut::RewardEtaProgress(p) => { + *self.reward_eta_progress.borrow_mut() = p; + self.reward_eta_progress_bar.queue_draw(); + } + CmdOut::RewardEtaProgressFinished => { + self.reward_eta_progress_bar + .set_tooltip_text(Some(DEFAULT_TOOLTIP_ETA_PROGRESS_BAR)); + self.reward_eta_progress_bar_stopped = true; + } + } + } } impl RunningView { @@ -240,6 +285,7 @@ impl RunningView { raw_config, chain_info, } => { + let mut space_pledged: u128 = 0; for (farm_index, (initial_farm_state, farm)) in initial_farm_states .iter() .copied() @@ -252,14 +298,23 @@ impl RunningView { backend; qed", ), FarmWidgetInit { - farm, + farm: farm.clone(), total_sectors: initial_farm_state.total_sectors_count, plotted_total_sectors: initial_farm_state.plotted_sectors_count, plotting_paused: self.plotting_paused, }, ); + + // Want this to panic in case of any error which I don't expect to happen + space_pledged += farm + .size + .parse::() + .expect("Failed to parse farm size") + .0 as u128; } + self.space_pledged = space_pledged; + self.farmer_state = FarmerState { initial_reward_address_balance: reward_address_balance, reward_address_balance, @@ -307,14 +362,25 @@ impl RunningView { - self.farmer_state.initial_reward_address_balance; self.farmer_state.initial_reward_address_balance = imported_block.reward_address_balance - previous_diff; - self.update_progress(0); } else { - let total_space_pledged = total_space_pledged( - current_solution_range, - SLOT_PROBABILITY, - max_pieces_in_sector, - ); - self.update_progress(total_space_pledged); + // only move the progress bar if it was stopped & the node is synced ofcourse + if self.reward_eta_progress_bar_stopped { + let total_space_pledged = total_space_pledged( + current_solution_range, + SLOT_PROBABILITY, + max_pieces_in_sector, + ); + + // TODO: Need to fetch the last reward timestamp + let eta = calculate_expected_reward_duration_from_now( + total_space_pledged, + self.space_pledged, + None, + ) + .map_err(|_| anyhow!("Failed to calculate ETA for reward payment")) + .unwrap_or(0); + self.move_progress_bar(sender.clone(), eta); + } } // In case balance decreased, subtract it from initial balance to ignore, @@ -364,6 +430,10 @@ impl RunningView { }, RunningInput::ToggleFarmDetails => { self.farms.broadcast(FarmWidgetInput::ToggleFarmDetails); + + // CLEANUP: remove later + // 10s ETA for testing on clicking the farm-details toggle button + self.move_progress_bar(sender.clone(), 10000); } RunningInput::TogglePausePlotting => { self.plotting_paused = !self.plotting_paused; @@ -379,29 +449,44 @@ impl RunningView { } } - fn update_progress(&mut self, total_space_pledged: u128) { - // Sum up the allocated space from all farms - let total_allocated_space: u64 = self - .farms - .iter() - .map(|(_, farm)| farm.allocated_space()) - .sum(); - - // Calculate the ETA for reward payment - // TODO: may be change the last reward timestamp - let eta = calculate_expected_reward_duration_from_now( - total_space_pledged, - total_allocated_space as u128, - None, - ); - - // TODO: correct the progress updation. - // Calculate the progress and update - // if total_space_pledged > 0 { - // let progress_value = total_allocated_space as f64 / total_space_pledged as f64; - // *self.progress.borrow_mut() = progress_value; - // } else { - // *self.progress.borrow_mut() = 0.0; - // } + /// Move the progress bar based on the ETA + fn move_progress_bar(&mut self, sender: ComponentSender, eta: u64) { + // Format the ETA + let eta_str = format_eta(eta); + + // Update the tooltip text of the progress bar + self.reward_eta_progress_bar + .set_tooltip_text(Some(&format!("Next reward in {}", eta_str))); + + sender.command(move |out, shutdown| { + shutdown + // Performs this operation until a shutdown is triggered + .register(async move { + // Get the decrease value and interval from the helper function + let (decrease_value, interval) = calculate_progress_params(eta); + + let mut percentage = 1.0; + + while percentage > 0.0 { + out.send(CmdOut::RewardEtaProgress(percentage)).unwrap(); + percentage -= decrease_value; + tokio::time::sleep(std::time::Duration::from_millis(interval)).await; + } + + out.send(CmdOut::RewardEtaProgressFinished).unwrap(); + }) + // Perform task until a shutdown interrupts it + .drop_on_shutdown() + // Wrap into a `Pin>` for return + .boxed() + }); } } + +/// Calculate the decrease value and interval for the progress updates +fn calculate_progress_params(eta: u64) -> (f64, u64) { + let interval = 1000; // Default interval of 1 second (1000 milliseconds) + let steps = eta / interval; + let decrease_value = 1.0 / steps as f64; + (decrease_value, interval) +} diff --git a/src/frontend/running/farm.rs b/src/frontend/running/farm.rs index 194a6fc0..903d802f 100644 --- a/src/frontend/running/farm.rs +++ b/src/frontend/running/farm.rs @@ -1,5 +1,4 @@ use crate::backend::config::Farm; -use bytesize::ByteSize; use gtk::prelude::*; use relm4::prelude::*; use relm4_icons::icon_name; @@ -550,18 +549,4 @@ impl FarmWidget { ))); } } - - pub(super) fn allocated_space(&self) -> u64 { - if self.is_node_synced && !self.plotting_paused { - // Parsing the size string and converting it to bytes - let allocated_space = self - .size - .parse::() - .expect("Failed to parse farm size") - .as_u64(); - return allocated_space; - } - - 0 - } } diff --git a/src/frontend/utils.rs b/src/frontend/utils.rs new file mode 100644 index 00000000..8bca1a09 --- /dev/null +++ b/src/frontend/utils.rs @@ -0,0 +1,58 @@ +const WEEK: u64 = 604800000; +const DAY: u64 = 86400000; +const HOUR: u64 = 3600000; +const MINUTE: u64 = 60000; +const SECOND: u64 = 1000; + +/// Format ETA from milliseconds to a human-readable string with up to two time units +pub(crate) fn format_eta(eta_millis: u64) -> String { + if eta_millis == 0 || eta_millis < SECOND { + return "0 secs".to_string(); + } + + let weeks = eta_millis / WEEK; + let days = (eta_millis % WEEK) / DAY; + let hours = (eta_millis % DAY) / HOUR; + let minutes = (eta_millis % HOUR) / MINUTE; + let seconds = (eta_millis % MINUTE) / SECOND; + + let mut parts = Vec::new(); + + if weeks > 0 { + parts.push(format!("{} weeks", weeks)); + } + if days > 0 { + parts.push(format!("{} days", days)); + } + if hours > 0 { + parts.push(format!("{} hours", hours)); + } + if minutes > 0 { + parts.push(format!("{} mins", minutes)); + } + if seconds > 0 { + parts.push(format!("{} secs", seconds)); + } + + parts.into_iter().take(2).collect::>().join(" ") +} + +#[test] +fn test_format_eta() { + assert_eq!(format_eta(0), "0 secs"); + assert_eq!(format_eta(999), "0 secs"); + assert_eq!(format_eta(1000), "1 secs"); + assert_eq!(format_eta(60_000), "1 mins"); + assert_eq!(format_eta(60_999), "1 mins"); + assert_eq!(format_eta(120_000), "2 mins"); + assert_eq!(format_eta(3_600_000), "1 hours"); + assert_eq!(format_eta(3_600_999), "1 hours"); + assert_eq!(format_eta(3_661_000), "1 hours 1 mins"); + assert_eq!(format_eta(86_400_000), "1 days"); + assert_eq!(format_eta(86_460_000), "1 days 1 mins"); + assert_eq!(format_eta(604_800_000), "1 weeks"); + assert_eq!(format_eta(604_860_000), "1 weeks 1 mins"); + assert_eq!(format_eta(1_000_000), "16 mins 40 secs"); + assert_eq!(format_eta(10_000_000), "2 hours 46 mins"); + assert_eq!(format_eta(864_000_000), "1 weeks 3 days"); +} diff --git a/src/frontend/widgets/progress_bar.rs b/src/frontend/widgets/progress_bar.rs index bc0c8bf4..c52d1f96 100644 --- a/src/frontend/widgets/progress_bar.rs +++ b/src/frontend/widgets/progress_bar.rs @@ -26,46 +26,45 @@ pub fn create_circular_progress_bar( .visible(set_visible) .build(); - drawing_area.set_draw_func({ + drawing_area.set_draw_func(move |_, cr, width, height| { let percentage = *progress.borrow(); - move |_, cr, width, height| { - // Center coordinates - let center_x = width as f64 / 2.0; - let center_y = height as f64 / 2.0; - // Draw the background circle with respective color in dark/light themes - if matches!(dark_light::detect(), dark_light::Mode::Dark) { - // Grey for dark theme - cr.set_source_rgb(0.2078431373, 0.2078431373, 0.2078431373); - } else { - // White for light theme - cr.set_source_rgb(1.0, 1.0, 1.0); - } - cr.arc(center_x, center_y, diameter / 2.0, 0.0, 2.0 * PI); - // let _ = cr.fill(); // NOTE: Fill w/o border color - let _ = cr.fill_preserve(); // Preserve the path for stroking - cr.set_source_rgb(0.0, 0.0, 0.0); // Black border color for both the themes. - cr.set_line_width(0.5); // Set the border width - let _ = cr.stroke(); // Draw the circle border + // Center coordinates + let center_x = width as f64 / 2.0; + let center_y = height as f64 / 2.0; - // Draw the sweeping with respective color in dark/light themes - if matches!(dark_light::detect(), dark_light::Mode::Dark) { - // White for dark theme - cr.set_source_rgb(1.0, 1.0, 1.0); - } else { - // Grey for light theme - cr.set_source_rgb(0.2078431373, 0.2078431373, 0.2078431373); - } - cr.arc( - center_x, - center_y, - diameter / 2.0, - -PI / 2.0, - -PI / 2.0 + 2.0 * PI * percentage, - ); - cr.line_to(center_x, center_y); - let _ = cr.fill(); + // Draw the background circle with respective color in dark/light themes + if matches!(dark_light::detect(), dark_light::Mode::Dark) { + // Grey for dark theme + cr.set_source_rgb(0.2078431373, 0.2078431373, 0.2078431373); + } else { + // White smoke for light theme + cr.set_source_rgb(0.965, 0.961, 0.957); } + cr.arc(center_x, center_y, diameter / 2.0, 0.0, 2.0 * PI); + // let _ = cr.fill(); // NOTE: Fill w/o border color + let _ = cr.fill_preserve(); // Preserve the path for stroking + cr.set_source_rgb(0.0, 0.0, 0.0); // Black border color for both the themes. + cr.set_line_width(0.5); // Set the border width + let _ = cr.stroke(); // Draw the circle border + + // Draw the sweeping with respective color in dark/light themes + if matches!(dark_light::detect(), dark_light::Mode::Dark) { + // White smoke for dark theme + cr.set_source_rgb(0.965, 0.961, 0.957); + } else { + // Grey for light theme + cr.set_source_rgb(0.2078431373, 0.2078431373, 0.2078431373); + } + cr.arc( + center_x, + center_y, + diameter / 2.0, + -PI / 2.0, + -PI / 2.0 + 2.0 * PI * percentage, + ); + cr.line_to(center_x, center_y); + let _ = cr.fill(); }); drawing_area From ff6d9652592fb97a7889a3ab9928c930bc613945 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Mon, 27 May 2024 18:00:57 +0530 Subject: [PATCH 24/29] Update reward ETA progress bar variable name - The reward ETA progress bar variable name was changed from to to better reflect its purpose. - Additionally the status change was done before moving the progress bar --- src/frontend/running.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/frontend/running.rs b/src/frontend/running.rs index 96a4b684..8a19639a 100644 --- a/src/frontend/running.rs +++ b/src/frontend/running.rs @@ -82,7 +82,7 @@ pub struct RunningView { reward_eta_progress: Rc>, /// Reward payment ETA Progress bar (circular) reward_eta_progress_bar: gtk::DrawingArea, - reward_eta_progress_bar_stopped: bool, + reward_eta_progress_bar_moving: bool, } #[relm4::component(pub)] @@ -242,7 +242,7 @@ impl Component for RunningView { DEFAULT_TOOLTIP_ETA_PROGRESS_BAR, progress, ), - reward_eta_progress_bar_stopped: true, + reward_eta_progress_bar_moving: false, }; let farms_box = model.farms.widget(); @@ -269,7 +269,7 @@ impl Component for RunningView { CmdOut::RewardEtaProgressFinished => { self.reward_eta_progress_bar .set_tooltip_text(Some(DEFAULT_TOOLTIP_ETA_PROGRESS_BAR)); - self.reward_eta_progress_bar_stopped = true; + self.reward_eta_progress_bar_moving = !self.reward_eta_progress_bar_moving; } } } @@ -364,7 +364,10 @@ impl RunningView { imported_block.reward_address_balance - previous_diff; } else { // only move the progress bar if it was stopped & the node is synced ofcourse - if self.reward_eta_progress_bar_stopped { + if !self.reward_eta_progress_bar_moving { + self.reward_eta_progress_bar_moving = + !self.reward_eta_progress_bar_moving; + let total_space_pledged = total_space_pledged( current_solution_range, SLOT_PROBABILITY, @@ -433,7 +436,11 @@ impl RunningView { // CLEANUP: remove later // 10s ETA for testing on clicking the farm-details toggle button - self.move_progress_bar(sender.clone(), 10000); + if !self.reward_eta_progress_bar_moving { + self.reward_eta_progress_bar_moving = !self.reward_eta_progress_bar_moving; + + self.move_progress_bar(sender.clone(), 10000); + } } RunningInput::TogglePausePlotting => { self.plotting_paused = !self.plotting_paused; From 784b37f505f8473c17efde5128f6b1f02ed24636 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Mon, 27 May 2024 20:50:51 +0530 Subject: [PATCH 25/29] Fetch chain constants from frontend Backend notification sent to the frontend with chain_constants inside 'Initialize' enum param of RunningInput enum --- src/backend.rs | 5 +++++ src/backend/node.rs | 6 +++++- src/frontend/running.rs | 11 +++++++---- src/main.rs | 2 ++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/backend.rs b/src/backend.rs index 4825c726..05612439 100644 --- a/src/backend.rs +++ b/src/backend.rs @@ -21,6 +21,8 @@ use future::FutureExt; use futures::channel::mpsc; use futures::{future, select, SinkExt, StreamExt}; use sc_subspace_chain_specs::GEMINI_3H_CHAIN_SPEC; +use sp_api::ProvideRuntimeApi; +use sp_consensus_subspace::{ChainConstants, SubspaceApi}; use std::error::Error; use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; use std::path::{Path, PathBuf}; @@ -225,6 +227,7 @@ pub enum BackendNotification { reward_address_balance: Balance, initial_farm_states: Vec, chain_info: ChainInfo, + chain_constants: ChainConstants, }, Node(NodeNotification), Farmer(FarmerNotification), @@ -494,6 +497,7 @@ async fn run( "networking".to_string(), )?; + let runtime_api = consensus_node.full_node.client.runtime_api(); notifications_sender .send(BackendNotification::Running { raw_config, @@ -501,6 +505,7 @@ async fn run( reward_address_balance: consensus_node.account_balance(&config.reward_address), initial_farm_states: farmer.initial_farm_states().to_vec(), chain_info: consensus_node.chain_info().clone(), + chain_constants: runtime_api.chain_constants(consensus_node.best_block_hash())?, }) .await?; diff --git a/src/backend/node.rs b/src/backend/node.rs index 1c44258e..9c183496 100644 --- a/src/backend/node.rs +++ b/src/backend/node.rs @@ -123,7 +123,7 @@ struct Handlers { } pub(crate) struct ConsensusNode { - full_node: NewFull>, + pub full_node: NewFull>, pause_sync: Arc, chain_info: ChainInfo, handlers: Handlers, @@ -237,6 +237,10 @@ impl ConsensusNode { self.full_node.client.info().best_number } + pub(super) fn best_block_hash(&self) -> H256 { + self.full_node.client.info().best_hash + } + /// Returns current solution range & max. pieces in a sector pub(super) fn tsp_metrics(&self) -> anyhow::Result<(u64, u16)> { let runtime_api = self.full_node.client.runtime_api(); diff --git a/src/frontend/running.rs b/src/frontend/running.rs index 8a19639a..15b7ee29 100644 --- a/src/frontend/running.rs +++ b/src/frontend/running.rs @@ -18,14 +18,13 @@ use gtk::prelude::*; use relm4::factory::FactoryHashMap; use relm4::prelude::*; use relm4_icons::icon_name; +use sp_consensus_subspace::ChainConstants; use std::cell::RefCell; use std::rc::Rc; use subspace_core_primitives::BlockNumber; use subspace_runtime_primitives::{Balance, SSC}; use tracing::debug; -// TODO: Need to fetch from chain_constants. -const SLOT_PROBABILITY: (u64, u64) = (1, 6); const DEFAULT_TOOLTIP_ETA_PROGRESS_BAR: &str = "ETA for next reward payment"; #[derive(Debug)] @@ -41,6 +40,7 @@ pub enum RunningInput { initial_farm_states: Vec, raw_config: RawConfig, chain_info: ChainInfo, + chain_constants: ChainConstants, }, NodeNotification(NodeNotification), FarmerNotification(FarmerNotification), @@ -77,6 +77,7 @@ pub struct RunningView { farmer_state: FarmerState, farms: FactoryHashMap, plotting_paused: bool, + slot_probability: (u64, u64), space_pledged: u128, /// Reward payment ETA Progress value reward_eta_progress: Rc>, @@ -230,6 +231,7 @@ impl Component for RunningView { farmer_state: FarmerState::default(), farms, plotting_paused: init.plotting_paused, + slot_probability: (0, 0), space_pledged: 0, reward_eta_progress: progress.clone(), reward_eta_progress_bar: create_circular_progress_bar( @@ -284,6 +286,7 @@ impl RunningView { initial_farm_states, raw_config, chain_info, + chain_constants, } => { let mut space_pledged: u128 = 0; for (farm_index, (initial_farm_state, farm)) in initial_farm_states @@ -312,7 +315,7 @@ impl RunningView { .expect("Failed to parse farm size") .0 as u128; } - + self.slot_probability = chain_constants.slot_probability(); self.space_pledged = space_pledged; self.farmer_state = FarmerState { @@ -370,7 +373,7 @@ impl RunningView { let total_space_pledged = total_space_pledged( current_solution_range, - SLOT_PROBABILITY, + self.slot_probability, max_pieces_in_sector, ); diff --git a/src/main.rs b/src/main.rs index b4169e8c..9f1b0ae9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -710,6 +710,7 @@ impl App { reward_address_balance, initial_farm_states, chain_info, + chain_constants, } => { self.current_raw_config.replace(raw_config.clone()); self.current_view = View::Running; @@ -719,6 +720,7 @@ impl App { initial_farm_states, raw_config, chain_info, + chain_constants, }); } BackendNotification::Node(node_notification) => { From dc1914312ba48e7e0f4b8fe8ed6aacb98f4a1893 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Tue, 28 May 2024 23:28:33 +0530 Subject: [PATCH 26/29] Add last_reward_timestamp field for reward_eta calculation --- src/frontend/running.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/frontend/running.rs b/src/frontend/running.rs index 15b7ee29..9f47d578 100644 --- a/src/frontend/running.rs +++ b/src/frontend/running.rs @@ -21,6 +21,7 @@ use relm4_icons::icon_name; use sp_consensus_subspace::ChainConstants; use std::cell::RefCell; use std::rc::Rc; +use std::time::{SystemTime, UNIX_EPOCH}; use subspace_core_primitives::BlockNumber; use subspace_runtime_primitives::{Balance, SSC}; use tracing::debug; @@ -79,6 +80,7 @@ pub struct RunningView { plotting_paused: bool, slot_probability: (u64, u64), space_pledged: u128, + last_reward_timestamp: Option, /// Reward payment ETA Progress value reward_eta_progress: Rc>, /// Reward payment ETA Progress bar (circular) @@ -233,6 +235,7 @@ impl Component for RunningView { plotting_paused: init.plotting_paused, slot_probability: (0, 0), space_pledged: 0, + last_reward_timestamp: None, reward_eta_progress: progress.clone(), reward_eta_progress_bar: create_circular_progress_bar( 20.0, @@ -377,11 +380,10 @@ impl RunningView { max_pieces_in_sector, ); - // TODO: Need to fetch the last reward timestamp let eta = calculate_expected_reward_duration_from_now( total_space_pledged, self.space_pledged, - None, + self.last_reward_timestamp, ) .map_err(|_| anyhow!("Failed to calculate ETA for reward payment")) .unwrap_or(0); @@ -398,6 +400,22 @@ impl RunningView { { self.farmer_state.initial_reward_address_balance -= decreased_by; } + + // In case of balance increase or decrease, update the last reward timestamp + if self + .farmer_state + .reward_address_balance + .abs_diff(imported_block.reward_address_balance) + > 0 + { + self.last_reward_timestamp = Some( + SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_secs(), + ); + } + self.farmer_state.reward_address_balance = imported_block.reward_address_balance; } From 44792bd8e439453d93e36df1757f653bdcc0b1eb Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Wed, 29 May 2024 12:28:36 +0530 Subject: [PATCH 27/29] Reimplement progress bar with Relm4 Component trait Previously, progress bar was available as a function returning DrawingArea type. Now, it is available as ELM state with fields: progress, tooltip, diameter --- src/frontend/running.rs | 40 +++---- src/frontend/widgets/progress_bar.rs | 162 +++++++++++++++++---------- 2 files changed, 119 insertions(+), 83 deletions(-) diff --git a/src/frontend/running.rs b/src/frontend/running.rs index 9f47d578..1e3f85a9 100644 --- a/src/frontend/running.rs +++ b/src/frontend/running.rs @@ -7,7 +7,7 @@ use crate::backend::farmer::{ }; use crate::backend::node::{total_space_pledged, ChainInfo}; use crate::backend::{FarmIndex, NodeNotification}; -use crate::frontend::progress_bar::create_circular_progress_bar; +use crate::frontend::progress_bar::{CircularProgressBar, DEFAULT_TOOLTIP_ETA_PROGRESS_BAR}; use crate::frontend::running::farm::{FarmWidget, FarmWidgetInit, FarmWidgetInput}; use crate::frontend::running::node::{NodeInput, NodeView}; use crate::frontend::utils::format_eta; @@ -19,14 +19,12 @@ use relm4::factory::FactoryHashMap; use relm4::prelude::*; use relm4_icons::icon_name; use sp_consensus_subspace::ChainConstants; -use std::cell::RefCell; -use std::rc::Rc; use std::time::{SystemTime, UNIX_EPOCH}; use subspace_core_primitives::BlockNumber; use subspace_runtime_primitives::{Balance, SSC}; use tracing::debug; -const DEFAULT_TOOLTIP_ETA_PROGRESS_BAR: &str = "ETA for next reward payment"; +use super::progress_bar::ProgressBarInput; #[derive(Debug)] pub struct RunningInit { @@ -81,10 +79,7 @@ pub struct RunningView { slot_probability: (u64, u64), space_pledged: u128, last_reward_timestamp: Option, - /// Reward payment ETA Progress value - reward_eta_progress: Rc>, - /// Reward payment ETA Progress bar (circular) - reward_eta_progress_bar: gtk::DrawingArea, + reward_eta_progress_bar: Controller, reward_eta_progress_bar_moving: bool, } @@ -138,7 +133,7 @@ impl Component for RunningView { set_halign: gtk::Align::End, set_hexpand: true, - append: &model.reward_eta_progress_bar, + model.reward_eta_progress_bar.widget().clone(), gtk::LinkButton { remove_css_class: "link", @@ -225,7 +220,7 @@ impl Component for RunningView { let farms = FactoryHashMap::builder() .launch(gtk::Box::default()) .detach(); - let progress = Rc::new(RefCell::new(0.0)); + let reward_eta_progress_bar = CircularProgressBar::builder().launch(20.0).detach(); let model = Self { node_view, @@ -236,17 +231,7 @@ impl Component for RunningView { slot_probability: (0, 0), space_pledged: 0, last_reward_timestamp: None, - reward_eta_progress: progress.clone(), - reward_eta_progress_bar: create_circular_progress_bar( - 20.0, - 10, - 10, - 10, - 10, - true, - DEFAULT_TOOLTIP_ETA_PROGRESS_BAR, - progress, - ), + reward_eta_progress_bar, reward_eta_progress_bar_moving: false, }; @@ -268,12 +253,14 @@ impl Component for RunningView { ) { match message { CmdOut::RewardEtaProgress(p) => { - *self.reward_eta_progress.borrow_mut() = p; - self.reward_eta_progress_bar.queue_draw(); + self.reward_eta_progress_bar + .emit(ProgressBarInput::SetProgress(p)); } CmdOut::RewardEtaProgressFinished => { self.reward_eta_progress_bar - .set_tooltip_text(Some(DEFAULT_TOOLTIP_ETA_PROGRESS_BAR)); + .emit(ProgressBarInput::SetTooltip( + DEFAULT_TOOLTIP_ETA_PROGRESS_BAR.to_string(), + )); self.reward_eta_progress_bar_moving = !self.reward_eta_progress_bar_moving; } } @@ -484,7 +471,10 @@ impl RunningView { // Update the tooltip text of the progress bar self.reward_eta_progress_bar - .set_tooltip_text(Some(&format!("Next reward in {}", eta_str))); + .emit(ProgressBarInput::SetTooltip(format!( + "Next reward in {}", + eta_str + ))); sender.command(move |out, shutdown| { shutdown diff --git a/src/frontend/widgets/progress_bar.rs b/src/frontend/widgets/progress_bar.rs index c52d1f96..b4ab4eaf 100644 --- a/src/frontend/widgets/progress_bar.rs +++ b/src/frontend/widgets/progress_bar.rs @@ -1,71 +1,117 @@ use gtk::prelude::*; -use gtk::DrawingArea; +use relm4::prelude::*; use std::cell::RefCell; use std::f64::consts::PI; use std::rc::Rc; -/// Create a circular progress bar -pub fn create_circular_progress_bar( - diameter: f64, - margin_top: i32, - margin_bottom: i32, - margin_start: i32, - margin_end: i32, - set_visible: bool, - tooltip_text: &str, +pub(crate) const DEFAULT_TOOLTIP_ETA_PROGRESS_BAR: &str = "ETA for next reward payment"; + +#[derive(Debug, Clone)] +pub struct CircularProgressBar { progress: Rc>, -) -> DrawingArea { - let drawing_area = DrawingArea::builder() - .content_width((diameter + 1.0) as i32) - .content_height((diameter + 1.0) as i32) - .margin_top(margin_top) - .margin_bottom(margin_bottom) - .margin_start(margin_start) - .margin_end(margin_end) - .tooltip_text(tooltip_text) - .visible(set_visible) - .build(); + tooltip_text: String, + diameter: f64, +} - drawing_area.set_draw_func(move |_, cr, width, height| { - let percentage = *progress.borrow(); +#[derive(Debug)] +pub enum ProgressBarInput { + SetProgress(f64), + SetTooltip(String), +} - // Center coordinates - let center_x = width as f64 / 2.0; - let center_y = height as f64 / 2.0; +#[relm4::component(pub)] +impl Component for CircularProgressBar { + type Init = f64; // Diameter of the progress bar + type Input = ProgressBarInput; + type Output = (); + type CommandOutput = (); - // Draw the background circle with respective color in dark/light themes - if matches!(dark_light::detect(), dark_light::Mode::Dark) { - // Grey for dark theme - cr.set_source_rgb(0.2078431373, 0.2078431373, 0.2078431373); - } else { - // White smoke for light theme - cr.set_source_rgb(0.965, 0.961, 0.957); - } - cr.arc(center_x, center_y, diameter / 2.0, 0.0, 2.0 * PI); - // let _ = cr.fill(); // NOTE: Fill w/o border color - let _ = cr.fill_preserve(); // Preserve the path for stroking - cr.set_source_rgb(0.0, 0.0, 0.0); // Black border color for both the themes. - cr.set_line_width(0.5); // Set the border width - let _ = cr.stroke(); // Draw the circle border + view! { + #[root] + gtk::DrawingArea { + set_content_width: (model.diameter + 1.0) as i32, + set_content_height: (model.diameter + 1.0) as i32, + set_margin_top: 10, + set_margin_bottom: 10, + set_margin_start: 10, + set_margin_end: 10, + set_visible: true, + set_draw_func: { + let progress_clone = model.progress.clone(); + let diameter = model.diameter; + move |_, cr, width, height| { + let percentage = *progress_clone.borrow(); - // Draw the sweeping with respective color in dark/light themes - if matches!(dark_light::detect(), dark_light::Mode::Dark) { - // White smoke for dark theme - cr.set_source_rgb(0.965, 0.961, 0.957); - } else { - // Grey for light theme - cr.set_source_rgb(0.2078431373, 0.2078431373, 0.2078431373); + // Center coordinates + let center_x = width as f64 / 2.0; + let center_y = height as f64 / 2.0; + + // Draw the background circle with respective color in dark/light themes + if matches!(dark_light::detect(), dark_light::Mode::Dark) { + // Grey for dark theme + cr.set_source_rgb(0.2078431373, 0.2078431373, 0.2078431373); + } else { + // White smoke for light theme + cr.set_source_rgb(0.965, 0.961, 0.957); + } + cr.arc(center_x, center_y, diameter / 2.0, 0.0, 2.0 * PI); + // let _ = cr.fill(); // NOTE: Fill w/o border color + let _ = cr.fill_preserve(); // Preserve the path for stroking + cr.set_source_rgb(0.0, 0.0, 0.0); // Black border color for both the themes. + cr.set_line_width(0.5); // Set the border width + let _ = cr.stroke(); // Draw the circle border + + // Draw the sweeping with respective color in dark/light themes + if matches!(dark_light::detect(), dark_light::Mode::Dark) { + // White smoke for dark theme + cr.set_source_rgb(0.965, 0.961, 0.957); + } else { + // Grey for light theme + cr.set_source_rgb(0.2078431373, 0.2078431373, 0.2078431373); + } + cr.arc( + center_x, + center_y, + diameter / 2.0, + -PI / 2.0, + -PI / 2.0 + 2.0 * PI * percentage, + ); + cr.line_to(center_x, center_y); + let _ = cr.fill(); + } + }, + set_tooltip_text: Some(&model.tooltip_text), } - cr.arc( - center_x, - center_y, - diameter / 2.0, - -PI / 2.0, - -PI / 2.0 + 2.0 * PI * percentage, - ); - cr.line_to(center_x, center_y); - let _ = cr.fill(); - }); + } + + fn init( + diameter: Self::Init, + _root: Self::Root, + _sender: ComponentSender, + ) -> ComponentParts { + let progress = Rc::new(RefCell::new(0.0)); + let tooltip_text = DEFAULT_TOOLTIP_ETA_PROGRESS_BAR.to_string(); - drawing_area + let model = Self { + progress, + tooltip_text, + diameter, + }; + + let widgets = view_output!(); + ComponentParts { model, widgets } + } + + fn update(&mut self, input: Self::Input, _sender: ComponentSender, root: &Self::Root) { + match input { + ProgressBarInput::SetProgress(p) => { + *self.progress.borrow_mut() = p; + root.queue_draw(); + } + ProgressBarInput::SetTooltip(text) => { + self.tooltip_text = text; + root.set_tooltip_text(Some(&self.tooltip_text)); + } + } + } } From a1cc6f4c701952cbb94c390fb35b9f73f54fa544 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Wed, 29 May 2024 12:40:17 +0530 Subject: [PATCH 28/29] Cleanup --- src/frontend/running.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/frontend/running.rs b/src/frontend/running.rs index 1e3f85a9..e6a4e23f 100644 --- a/src/frontend/running.rs +++ b/src/frontend/running.rs @@ -444,11 +444,11 @@ impl RunningView { // CLEANUP: remove later // 10s ETA for testing on clicking the farm-details toggle button - if !self.reward_eta_progress_bar_moving { - self.reward_eta_progress_bar_moving = !self.reward_eta_progress_bar_moving; + // if !self.reward_eta_progress_bar_moving { + // self.reward_eta_progress_bar_moving = !self.reward_eta_progress_bar_moving; - self.move_progress_bar(sender.clone(), 10000); - } + // self.move_progress_bar(sender.clone(), 10000); + // } } RunningInput::TogglePausePlotting => { self.plotting_paused = !self.plotting_paused; From 1d631e0a00e3ec2c2b52a869a719556ac7fe0602 Mon Sep 17 00:00:00 2001 From: Abhijit Roy Date: Wed, 29 May 2024 12:48:00 +0530 Subject: [PATCH 29/29] Fix clippy warnings Details: ``` warning: large size difference between variants --> src/frontend/running.rs:35:1 | 35 | / pub enum RunningInput { 36 | |/ Initialize { 37 | || best_block_number: BlockNumber, 38 | || reward_address_balance: Balance, 39 | || initial_farm_states: Vec, ... || 42 | || chain_constants: ChainConstants, 43 | || }, | ||_____- the largest variant contains at least 268 bytes 44 | | NodeNotification(NodeNotification), | | ---------------------------------- the second-largest variant contains at least 48 bytes ... | 47 | | TogglePausePlotting, 48 | | } | |__^ the entire enum is at least 0 bytes | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant = note: `#[warn(clippy::large_enum_variant)]` on by default help: consider boxing the large fields to reduce the total size of the enum | 40 | raw_config: Box, | ~~~~~~~~~~~~~~ ``` --- src/frontend/running.rs | 2 +- src/main.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/frontend/running.rs b/src/frontend/running.rs index e6a4e23f..1327bd9e 100644 --- a/src/frontend/running.rs +++ b/src/frontend/running.rs @@ -37,7 +37,7 @@ pub enum RunningInput { best_block_number: BlockNumber, reward_address_balance: Balance, initial_farm_states: Vec, - raw_config: RawConfig, + raw_config: Box, chain_info: ChainInfo, chain_constants: ChainConstants, }, diff --git a/src/main.rs b/src/main.rs index 37fdd425..8997fc28 100644 --- a/src/main.rs +++ b/src/main.rs @@ -718,7 +718,7 @@ impl App { best_block_number, reward_address_balance, initial_farm_states, - raw_config, + raw_config: Box::new(raw_config), chain_info, chain_constants, });