From e3a30baff05f65f510e43ad96ef542d4c6566ea2 Mon Sep 17 00:00:00 2001 From: keegreil Date: Sat, 13 Dec 2025 18:35:34 -0500 Subject: [PATCH 1/4] Added static payout file and API fetched payouts. Compiles, not tested. --- .gitignore | 3 +- Cargo.lock | 123 ++++++++++++++++++++++++++++++++++++++++++++++------ Cargo.toml | 10 +++-- config.toml | 3 ++ src/main.rs | 62 ++++++++++++++++++++++++-- 5 files changed, 180 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index 7c1cdb8..032ecef 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ store*.db p2pool.log .env docker/.env -logs/* \ No newline at end of file +logs/* +config_copy.toml \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 0ac5cf1..5ac1ba0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -302,7 +302,7 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper", + "sync_wrapper 1.0.2", "tokio", "tower", "tower-layer", @@ -325,7 +325,7 @@ dependencies = [ "mime", "pin-project-lite", "rustversion", - "sync_wrapper", + "sync_wrapper 1.0.2", "tower-layer", "tower-service", "tracing", @@ -374,6 +374,12 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64" version = "0.22.1" @@ -487,12 +493,12 @@ dependencies = [ [[package]] name = "bitcoindrpc" version = "0.1.0" -source = "git+https://github.com/p2poolv2/p2poolv2?tag=v0.7.0#88d671c0c8c06f31c1cc1a63c08bc52e64eebb0e" +source = "git+https://github.com/keegreil/p2poolv2?branch=hydrapool-mod#a05417f7bf04e62b982bfba7ca0ebc6413ee0c76" dependencies = [ "base64 0.22.1", "bitcoin", "hex", - "reqwest", + "reqwest 0.12.24", "serde", "serde_json", "tokio", @@ -1702,6 +1708,8 @@ dependencies = [ "p2poolv2_api", "p2poolv2_cli", "p2poolv2_lib", + "reqwest 0.11.27", + "serde_json", "tokio", "tracing", "tracing-subscriber", @@ -1768,6 +1776,19 @@ dependencies = [ "tower-service", ] +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper 0.14.32", + "native-tls", + "tokio", + "tokio-native-tls", +] + [[package]] name = "hyper-tls" version = "0.6.0" @@ -1803,7 +1824,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "socket2 0.6.0", - "system-configuration", + "system-configuration 0.6.1", "tokio", "tower-service", "tracing", @@ -1969,7 +1990,7 @@ dependencies = [ "netlink-proto", "netlink-sys", "rtnetlink", - "system-configuration", + "system-configuration 0.6.1", "tokio", "windows", ] @@ -3020,7 +3041,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p2poolv2_api" version = "0.1.0" -source = "git+https://github.com/p2poolv2/p2poolv2?tag=v0.7.0#88d671c0c8c06f31c1cc1a63c08bc52e64eebb0e" +source = "git+https://github.com/keegreil/p2poolv2?branch=hydrapool-mod#a05417f7bf04e62b982bfba7ca0ebc6413ee0c76" dependencies = [ "axum", "base64 0.22.1", @@ -3040,7 +3061,7 @@ dependencies = [ [[package]] name = "p2poolv2_cli" version = "0.1.0" -source = "git+https://github.com/p2poolv2/p2poolv2?tag=v0.7.0#88d671c0c8c06f31c1cc1a63c08bc52e64eebb0e" +source = "git+https://github.com/keegreil/p2poolv2?branch=hydrapool-mod#a05417f7bf04e62b982bfba7ca0ebc6413ee0c76" dependencies = [ "base64 0.22.1", "clap", @@ -3060,7 +3081,7 @@ dependencies = [ [[package]] name = "p2poolv2_lib" version = "0.1.0" -source = "git+https://github.com/p2poolv2/p2poolv2?tag=v0.7.0#88d671c0c8c06f31c1cc1a63c08bc52e64eebb0e" +source = "git+https://github.com/keegreil/p2poolv2?branch=hydrapool-mod#a05417f7bf04e62b982bfba7ca0ebc6413ee0c76" dependencies = [ "async-trait", "base64 0.22.1", @@ -3612,6 +3633,46 @@ dependencies = [ "bytecheck", ] +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper-tls 0.5.0", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration 0.5.1", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + [[package]] name = "reqwest" version = "0.12.24" @@ -3628,7 +3689,7 @@ dependencies = [ "http-body-util", "hyper 1.6.0", "hyper-rustls", - "hyper-tls", + "hyper-tls 0.6.0", "hyper-util", "js-sys", "log", @@ -3640,7 +3701,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "sync_wrapper", + "sync_wrapper 1.0.2", "tokio", "tokio-native-tls", "tower", @@ -3885,6 +3946,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + [[package]] name = "rustls-pki-types" version = "1.12.0" @@ -4269,6 +4339,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "sync_wrapper" version = "1.0.2" @@ -4289,6 +4365,17 @@ dependencies = [ "syn 2.0.104", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys 0.5.0", +] + [[package]] name = "system-configuration" version = "0.6.1" @@ -4297,7 +4384,17 @@ checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags 2.9.1", "core-foundation", - "system-configuration-sys", + "system-configuration-sys 0.6.0", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", ] [[package]] @@ -4580,7 +4677,7 @@ dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper", + "sync_wrapper 1.0.2", "tokio", "tokio-util", "tower-layer", diff --git a/Cargo.toml b/Cargo.toml index 2d48c96..0f002d1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,10 +31,12 @@ tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } bitcoin = { version = "0.32.5", features = ["serde", "rand"] } tokio = { version = "1.0", features = ["full"] } -p2poolv2_lib = { git = "https://github.com/p2poolv2/p2poolv2", package = "p2poolv2_lib", tag = "v0.7.0" } -p2poolv2_cli = { git = "https://github.com/p2poolv2/p2poolv2", package = "p2poolv2_cli", tag = "v0.7.0" } -p2poolv2_api = { git = "https://github.com/p2poolv2/p2poolv2", package = "p2poolv2_api", tag = "v0.7.0" } -bitcoindrpc = { git = "https://github.com/p2poolv2/p2poolv2", package = "bitcoindrpc", tag = "v0.7.0" } +serde_json = "1.0" +p2poolv2_lib = { git = "https://github.com/keegreil/p2poolv2", package = "p2poolv2_lib", branch = "external-payouts"} +p2poolv2_cli = { git = "https://github.com/keegreil/p2poolv2", package = "p2poolv2_cli", branch = "external-payouts" } +p2poolv2_api = { git = "https://github.com/keegreil/p2poolv2", package = "p2poolv2_api", branch = "external-payouts" } +bitcoindrpc = { git = "https://github.com/keegreil/p2poolv2", package = "bitcoindrpc", branch = "external-payouts" } +reqwest = { version = "0.11", features = ["json"] } [[bin]] name = "hydrapool" diff --git a/config.toml b/config.toml index c669d7e..d027d15 100644 --- a/config.toml +++ b/config.toml @@ -32,6 +32,9 @@ difficulty_multiplier = 1.0 # how large your pool is, if you are running private, there is no need # to add a pool signature. Maximum length 16 bytes. pool_signature = "hydrapool" +#payout_file_path = "/tmp/hydrapool_payouts.json" # Triggers file mode +#downstream_payout_url = "https://your-pool-server.com/api/payouts" # Optional: Enables fetcher +#payout_refresh_interval = 30 [bitcoinrpc] # RPC credentials are loaded from env vars diff --git a/src/main.rs b/src/main.rs index b995919..b5578e0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -36,6 +36,9 @@ use std::time::Duration; use tokio::sync::oneshot; use tracing::error; use tracing::info; +use std::fs::File; +use std::io::Write; +use serde_json::json; // For building JSON if needed /// Interval in seconds to poll for new block templates since the last zmq signal const GBT_POLL_INTERVAL: u64 = 10; // seconds @@ -139,7 +142,35 @@ async fn main() -> Result<(), String> { Duration::from_secs(config.store.pplns_ttl_days * 3600 * 24), ); - let stratum_config = config.stratum.clone().parse().unwrap(); + let mut stratum_config = config.stratum.clone().parse().unwrap(); + let mut payout_file_path = stratum_config.payout_file_path.clone(); // Optional + + // If URL set, spawn fetcher to update file + if let Some(ref url) = stratum_config.downstream_payout_url { // Assume you add this field too (see below) + if payout_file_path.is_none() { + payout_file_path = Some("/tmp/hydrapool_payouts.json".to_string()); // Default file + } + if let Some(ref file_path) = payout_file_path { + let file_clone = file_path.clone(); + let url_clone = url.clone(); + let interval = std::time::Duration::from_secs(config.stratum.payout_refresh_interval); + let network = stratum_config.network; // For addr validation if needed + + tokio::spawn(async move { + loop { + if let Err(e) = fetch_and_write_payouts(&url_clone, &file_clone, network).await { + debug!("API fetch/write failed: {}", e); + } + tokio::time::sleep(interval).await; + } + }); + } + } + + // Set the parsed config's file path + stratum_config.payout_file_path = payout_file_path; + + let bitcoinrpc_config = config.bitcoinrpc.clone(); let (stratum_shutdown_tx, stratum_shutdown_rx) = tokio::sync::oneshot::channel(); @@ -188,7 +219,7 @@ async fn main() -> Result<(), String> { store_for_notify, tracker_handle_cloned, &cloned_stratum_config, - None, + None, // miner_pubkey: Option (unused for now) ) .await; }); @@ -212,7 +243,7 @@ async fn main() -> Result<(), String> { let mut stratum_server = StratumServerBuilder::default() .shutdown_rx(stratum_shutdown_rx) .connections_handle(connections_handle.clone()) - .emissions_tx(emissions_tx) + .emissions_tx(shares_tx) // Changed: emission_tx + Some() wrapper (matches lib sig) .hostname(stratum_config.hostname) .port(stratum_config.port) .start_difficulty(stratum_config.start_difficulty) @@ -306,3 +337,28 @@ async fn main() -> Result<(), String> { } Ok(()) } + +async fn fetch_and_write_payouts( + url: &str, + file_path: &str, + _network: bitcoin::Network, // Optional: Validate addrs match network +) -> Result<(), Box> { + let client = reqwest::Client::new(); + let resp = client.get(url).send().await?; + if !resp.status().is_success() { + return Err(format!("HTTP {} from {}", resp.status(), url).into()); + } + let json: serde_json::Value = resp.json().await?; + + // Extract and rewrite WinnersList (keep full structure for future-proofing) + let winners = json["WinnersList"].as_array().ok_or("Missing WinnersList")?.clone(); + let updated_json = json!({ + "WinnersList": winners, + "OnDeckList": json["OnDeckList"], // Preserve if present + "BestShare": json["BestShare"] // Preserve + }); + + let mut file = File::create(file_path)?; + file.write_all(updated_json.to_string().as_bytes())?; + Ok(()) +} From 657f5a19831c042dfddbd4ca72dd1b1a754a3f3d Mon Sep 17 00:00:00 2001 From: keegreil Date: Sat, 20 Dec 2025 19:11:19 -0500 Subject: [PATCH 2/4] Recieve works now. I think. --- Cargo.lock | 1303 ++++++++++++++++++-------------------- Cargo.toml | 16 + config.toml | 2 +- payout_file_example.json | 130 ++++ src/main.rs | 3 +- 5 files changed, 768 insertions(+), 686 deletions(-) create mode 100644 payout_file_example.json diff --git a/Cargo.lock b/Cargo.lock index 5ac1ba0..3144551 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,21 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - [[package]] name = "aead" version = "0.5.2" @@ -65,9 +50,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -89,9 +74,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.19" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -104,9 +89,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -119,29 +104,29 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.3" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.9" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "arrayref" @@ -179,7 +164,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", "synstructure", ] @@ -191,7 +176,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -202,11 +187,11 @@ checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247" [[package]] name = "async-io" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" dependencies = [ - "async-lock", + "autocfg", "cfg-if", "concurrent-queue", "futures-io", @@ -215,29 +200,18 @@ dependencies = [ "polling", "rustix", "slab", - "windows-sys 0.60.2", -] - -[[package]] -name = "async-lock" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" -dependencies = [ - "event-listener", - "event-listener-strategy", - "pin-project-lite", + "windows-sys 0.61.2", ] [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -286,10 +260,10 @@ dependencies = [ "axum-core", "bytes", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.8.1", "hyper-util", "itoa", "matchit", @@ -319,7 +293,7 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "http-body-util", "mime", @@ -331,21 +305,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "backtrace" -version = "0.3.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - [[package]] name = "base-x" version = "0.2.11" @@ -358,6 +317,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base256emoji" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c" +dependencies = [ + "const-str", + "match-lookup", +] + [[package]] name = "base58ck" version = "0.1.0" @@ -388,59 +357,39 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" +checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a" [[package]] name = "bech32" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" - -[[package]] -name = "bindgen" -version = "0.69.5" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" -dependencies = [ - "bitflags 2.9.1", - "cexpr", - "clang-sys", - "itertools 0.12.1", - "lazy_static", - "lazycell", - "proc-macro2", - "quote", - "regex", - "rustc-hash 1.1.0", - "shlex", - "syn 2.0.104", -] +checksum = "32637268377fc7b10a8c6d51de3e7fba1ce5dd371a96e342b34e6078db558e7f" [[package]] name = "bindgen" -version = "0.71.1" +version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "cexpr", "clang-sys", - "itertools 0.13.0", + "itertools", "proc-macro2", "quote", "regex", - "rustc-hash 2.1.1", + "rustc-hash", "shlex", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] name = "bitcoin" -version = "0.32.6" +version = "0.32.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8929a18b8e33ea6b3c09297b687baaa71fb1b97353243a3f1029fad5c59c5b" +checksum = "1e499f9fc0407f50fe98af744ab44fa67d409f76b6772e1689ec8485eb0c0f66" dependencies = [ "base58ck", "bech32", @@ -465,9 +414,9 @@ dependencies = [ [[package]] name = "bitcoin-io" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" +checksum = "2dee39a0ee5b4095224a0cfc6bf4cc1baf0f9624b96b367e53b66d974e51d953" [[package]] name = "bitcoin-units" @@ -481,9 +430,9 @@ dependencies = [ [[package]] name = "bitcoin_hashes" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" +checksum = "26ec84b80c482df901772e931a9a681e26a1b9ee2302edeff23cb30328745c8b" dependencies = [ "bitcoin-io", "hex-conservative", @@ -493,12 +442,11 @@ dependencies = [ [[package]] name = "bitcoindrpc" version = "0.1.0" -source = "git+https://github.com/keegreil/p2poolv2?branch=hydrapool-mod#a05417f7bf04e62b982bfba7ca0ebc6413ee0c76" dependencies = [ "base64 0.22.1", "bitcoin", "hex", - "reqwest 0.12.24", + "reqwest 0.12.25", "serde", "serde_json", "tokio", @@ -514,9 +462,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bitvec" @@ -550,9 +498,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.7" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" +checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f" dependencies = [ "borsh-derive", "cfg_aliases", @@ -560,15 +508,15 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.5.7" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" +checksum = "0686c856aa6aac0c4498f936d7d6a02df690f614c03e4d906d1018062b5c5e2c" dependencies = [ "once_cell", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -616,9 +564,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" [[package]] name = "bzip2-sys" @@ -632,10 +580,11 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.30" +version = "1.2.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" +checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -662,9 +611,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -707,7 +656,34 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-link 0.2.1", + "windows-link", +] + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", ] [[package]] @@ -734,9 +710,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.41" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" +checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" dependencies = [ "clap_builder", "clap_derive", @@ -744,9 +720,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.41" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" +checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" dependencies = [ "anstream", "anstyle", @@ -756,21 +732,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.41" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "colorchoice" @@ -812,6 +788,12 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-str" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" + [[package]] name = "core-foundation" version = "0.9.4" @@ -922,9 +904,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "rand_core 0.6.4", @@ -964,7 +946,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -1004,9 +986,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" dependencies = [ "data-encoding", - "syn 2.0.104", + "syn 2.0.111", +] + +[[package]] +name = "deadpool" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" +dependencies = [ + "deadpool-runtime", + "lazy_static", + "num_cpus", + "tokio", ] +[[package]] +name = "deadpool-runtime" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" + [[package]] name = "der" version = "0.7.10" @@ -1033,9 +1033,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", ] @@ -1071,7 +1071,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -1167,7 +1167,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -1178,33 +1178,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", -] - -[[package]] -name = "event-listener" -version = "5.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" -dependencies = [ - "event-listener", - "pin-project-lite", + "windows-sys 0.61.2", ] [[package]] @@ -1229,6 +1208,12 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +[[package]] +name = "find-msvc-tools" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" + [[package]] name = "fnv" version = "1.0.7" @@ -1258,9 +1243,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -1332,9 +1317,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ "futures-core", "pin-project-lite", @@ -1348,7 +1333,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -1418,21 +1403,21 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasip2", "wasm-bindgen", ] @@ -1446,17 +1431,11 @@ dependencies = [ "polyval", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "group" @@ -1490,16 +1469,16 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.3.1", + "http 1.4.0", "indexmap", "slab", "tokio", @@ -1508,31 +1487,42 @@ dependencies = [ ] [[package]] -name = "hashbrown" -version = "0.12.3" +name = "half" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ - "ahash", + "cfg-if", + "crunchy", + "zerocopy", ] [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", "foldhash", ] +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" + [[package]] name = "heck" version = "0.5.0" @@ -1553,9 +1543,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hex-conservative" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +checksum = "fda06d18ac606267c40c04e41b9947729bf8b9efe74bd4e82b61a5f26a510b9f" dependencies = [ "arrayvec", ] @@ -1643,12 +1633,11 @@ dependencies = [ [[package]] name = "http" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", "itoa", ] @@ -1670,7 +1659,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.3.1", + "http 1.4.0", ] [[package]] @@ -1681,7 +1670,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "pin-project-lite", ] @@ -1741,20 +1730,22 @@ dependencies = [ [[package]] name = "hyper" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", - "h2 0.4.11", - "http 1.3.1", + "futures-core", + "h2 0.4.12", + "http 1.4.0", "http-body 1.0.1", "httparse", "httpdate", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -1766,8 +1757,8 @@ version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "http 1.3.1", - "hyper 1.6.0", + "http 1.4.0", + "hyper 1.8.1", "hyper-util", "rustls", "rustls-pki-types", @@ -1797,7 +1788,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.6.0", + "hyper 1.8.1", "hyper-util", "native-tls", "tokio", @@ -1807,23 +1798,23 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.16" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" +checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" dependencies = [ "base64 0.22.1", "bytes", "futures-channel", "futures-core", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", - "hyper 1.6.0", + "hyper 1.8.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.0", + "socket2 0.6.1", "system-configuration 0.6.1", "tokio", "tower-service", @@ -1857,9 +1848,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", @@ -1870,9 +1861,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -1883,11 +1874,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -1898,42 +1888,38 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -1943,9 +1929,9 @@ dependencies = [ [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -2016,12 +2002,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.10.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.16.1", ] [[package]] @@ -2042,17 +2028,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "io-uring" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" -dependencies = [ - "bitflags 2.9.1", - "cfg-if", - "libc", -] - [[package]] name = "ipconfig" version = "0.3.2" @@ -2073,9 +2048,9 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" dependencies = [ "memchr", "serde", @@ -2083,18 +2058,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -2113,19 +2079,19 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ "once_cell", "wasm-bindgen", @@ -2172,26 +2138,20 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "libc" -version = "0.2.174" +version = "0.2.178" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" +checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" [[package]] name = "libloading" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets 0.53.2", + "windows-link", ] [[package]] @@ -2321,9 +2281,9 @@ dependencies = [ [[package]] name = "libp2p-identity" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3104e13b51e4711ff5738caa1fb54467c8604c2e94d607e27745bcf709068774" +checksum = "f0c7892c221730ba55f7196e98b0b8ba5e04b4155651736036628e9f73ed6fc3" dependencies = [ "asn1_der", "bs58", @@ -2334,7 +2294,7 @@ dependencies = [ "quick-protobuf", "rand 0.8.5", "sha2", - "thiserror 2.0.12", + "thiserror 2.0.17", "tracing", "zeroize", ] @@ -2509,7 +2469,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -2576,16 +2536,16 @@ dependencies = [ "thiserror 1.0.69", "tracing", "yamux 0.12.1", - "yamux 0.13.5", + "yamux 0.13.8", ] [[package]] name = "librocksdb-sys" -version = "0.17.1+9.9.3" +version = "0.17.3+10.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b7869a512ae9982f4d46ba482c2a304f1efd80c6412a3d4bf57bb79a619679f" +checksum = "cef2a00ee60fe526157c9023edab23943fae1ce2ab6f4abb2a807c1746835de9" dependencies = [ - "bindgen 0.69.5", + "bindgen", "bzip2-sys", "cc", "libc", @@ -2596,9 +2556,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.22" +version = "1.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" +checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" dependencies = [ "cc", "pkg-config", @@ -2613,31 +2573,30 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.27" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "lru" @@ -2645,7 +2604,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.4", + "hashbrown 0.15.5", ] [[package]] @@ -2673,13 +2632,24 @@ dependencies = [ "libc", ] +[[package]] +name = "match-lookup" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -2690,9 +2660,9 @@ checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "mime" @@ -2706,24 +2676,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", -] - [[package]] name = "mio" -version = "1.0.4" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -2747,11 +2708,12 @@ dependencies = [ [[package]] name = "multibase" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77" dependencies = [ "base-x", + "base256emoji", "data-encoding", "data-encoding-macro", ] @@ -2845,7 +2807,7 @@ dependencies = [ "log", "netlink-packet-core", "netlink-sys", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -2890,12 +2852,11 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "overload", - "winapi", + "windows-sys 0.61.2", ] [[package]] @@ -2942,15 +2903,6 @@ dependencies = [ "libc", ] -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - [[package]] name = "oid-registry" version = "0.7.1" @@ -2968,9 +2920,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "opaque-debug" @@ -2980,11 +2932,11 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.74" +version = "0.10.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "cfg-if", "foreign-types", "libc", @@ -3001,7 +2953,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -3012,9 +2964,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.110" +version = "0.9.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" dependencies = [ "cc", "libc", @@ -3032,16 +2984,9 @@ dependencies = [ "hashbrown 0.12.3", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "p2poolv2_api" version = "0.1.0" -source = "git+https://github.com/keegreil/p2poolv2?branch=hydrapool-mod#a05417f7bf04e62b982bfba7ca0ebc6413ee0c76" dependencies = [ "axum", "base64 0.22.1", @@ -3061,7 +3006,6 @@ dependencies = [ [[package]] name = "p2poolv2_cli" version = "0.1.0" -source = "git+https://github.com/keegreil/p2poolv2?branch=hydrapool-mod#a05417f7bf04e62b982bfba7ca0ebc6413ee0c76" dependencies = [ "base64 0.22.1", "clap", @@ -3081,13 +3025,14 @@ dependencies = [ [[package]] name = "p2poolv2_lib" version = "0.1.0" -source = "git+https://github.com/keegreil/p2poolv2?branch=hydrapool-mod#a05417f7bf04e62b982bfba7ca0ebc6413ee0c76" dependencies = [ "async-trait", "base64 0.22.1", "bitcoin", "bitcoindrpc", "chrono", + "ciborium", + "ciborium-io", "config", "dashmap", "futures", @@ -3098,7 +3043,7 @@ dependencies = [ "rust_decimal_macros", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tokio-stream", "tokio-util", @@ -3118,9 +3063,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -3128,15 +3073,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -3153,36 +3098,35 @@ checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "pem" -version = "3.0.5" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ "base64 0.22.1", - "serde", + "serde_core", ] [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.1" +version = "2.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" +checksum = "cbcfd20a6d4eeba40179f05735784ad32bdaef05ce8e8af05f180d45bb3e7e22" dependencies = [ "memchr", - "thiserror 2.0.12", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.8.1" +version = "2.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" +checksum = "51f72981ade67b1ca6adc26ec221be9f463f2b5839c7508998daa17c23d94d7f" dependencies = [ "pest", "pest_generator", @@ -3190,22 +3134,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.1" +version = "2.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" +checksum = "dee9efd8cdb50d719a80088b76f81aec7c41ed6d522ee750178f83883d271625" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] name = "pest_meta" -version = "2.8.1" +version = "2.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" +checksum = "bf1d70880e76bdc13ba52eafa6239ce793d85c8e43896507e43dd8984ff05b82" dependencies = [ "pest", "sha2", @@ -3228,7 +3172,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -3261,16 +3205,16 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "polling" -version = "3.9.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi", "pin-project-lite", "rustix", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -3298,9 +3242,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] @@ -3322,18 +3266,18 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit", + "toml_edit 0.23.9", ] [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] @@ -3358,7 +3302,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -3405,9 +3349,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases", @@ -3415,10 +3359,10 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.1.1", + "rustc-hash", "rustls", - "socket2 0.5.10", - "thiserror 2.0.12", + "socket2 0.6.1", + "thiserror 2.0.17", "tokio", "tracing", "web-time", @@ -3426,20 +3370,20 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.12" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", - "getrandom 0.3.3", + "getrandom 0.3.4", "lru-slab", "rand 0.9.2", "ring 0.17.14", - "rustc-hash 2.1.1", + "rustc-hash", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.12", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -3447,23 +3391,23 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.5.10", + "socket2 0.6.1", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] @@ -3536,14 +3480,14 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", ] [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -3551,9 +3495,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -3573,56 +3517,41 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.15" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8af0dde094006011e6a740d4879319439489813bd0bcdc7d821beaeeff48ec" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "rend" @@ -3675,19 +3604,19 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.24" +version = "0.12.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +checksum = "b6eff9328d40131d43bd911d42d79eb6a47312002a4daefc9e37f17e74a7701a" dependencies = [ "base64 0.22.1", "bytes", "encoding_rs", "futures-core", - "h2 0.4.11", - "http 1.3.1", + "h2 0.4.12", + "http 1.4.0", "http-body 1.0.1", "http-body-util", - "hyper 1.6.0", + "hyper 1.8.1", "hyper-rustls", "hyper-tls 0.6.0", "hyper-util", @@ -3715,9 +3644,9 @@ dependencies = [ [[package]] name = "resolv-conf" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" +checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" [[package]] name = "rfc6979" @@ -3859,9 +3788,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.37.2" +version = "1.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b203a6425500a03e0919c42d3c47caca51e79f1132046626d2c8871c5092035d" +checksum = "35affe401787a9bd846712274d97654355d21b2a2c092a3139aabe31e9022282" dependencies = [ "arrayvec", "borsh", @@ -3875,26 +3804,14 @@ dependencies = [ [[package]] name = "rust_decimal_macros" -version = "1.37.1" +version = "1.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6268b74858287e1a062271b988a0c534bf85bbeb567fe09331bf40ed78113d5" +checksum = "ae8c0cb48f413ebe24dc2d148788e0efbe09ba3e011d9277162f2eaf8e1069a3" dependencies = [ "quote", - "syn 2.0.104", + "syn 2.0.111", ] -[[package]] -name = "rustc-demangle" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - [[package]] name = "rustc-hash" version = "2.1.1" @@ -3921,27 +3838,27 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.8" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.29" +version = "0.23.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" +checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" dependencies = [ "once_cell", "ring 0.17.14", "rustls-pki-types", - "rustls-webpki 0.103.4", + "rustls-webpki 0.103.8", "subtle", "zeroize", ] @@ -3957,9 +3874,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c" dependencies = [ "web-time", "zeroize", @@ -3977,9 +3894,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.4" +version = "0.103.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" dependencies = [ "ring 0.17.14", "rustls-pki-types", @@ -3988,9 +3905,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rw-stream-sink" @@ -4020,11 +3937,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4080,7 +3997,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "core-foundation", "core-foundation-sys", "libc", @@ -4089,9 +4006,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -4099,9 +4016,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "serde" @@ -4130,19 +4047,20 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] name = "serde_json" -version = "1.0.141" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] @@ -4205,9 +4123,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.5" +version = "1.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" dependencies = [ "libc", ] @@ -4230,9 +4148,9 @@ checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "slab" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "smallvec" @@ -4269,12 +4187,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -4295,9 +4213,9 @@ dependencies = [ [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "static_assertions" @@ -4330,9 +4248,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.104" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", @@ -4362,7 +4280,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -4382,7 +4300,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "core-foundation", "system-configuration-sys 0.6.0", ] @@ -4439,10 +4357,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -4456,11 +4374,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.17", ] [[package]] @@ -4471,18 +4389,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -4496,9 +4414,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "itoa", @@ -4511,15 +4429,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -4527,9 +4445,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -4537,9 +4455,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -4552,33 +4470,30 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.46.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "slab", - "socket2 0.5.10", + "socket2 0.6.1", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -4593,9 +4508,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", @@ -4614,9 +4529,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" dependencies = [ "bytes", "futures-core", @@ -4642,8 +4557,8 @@ checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", - "toml_datetime", - "toml_edit", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", ] [[package]] @@ -4655,6 +4570,15 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.22.27" @@ -4664,7 +4588,28 @@ dependencies = [ "indexmap", "serde", "serde_spanned", - "toml_datetime", + "toml_datetime 0.6.11", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.23.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d7cbc3b4b49633d57a0509303158ca50de80ae32c265093b24c414705807832" +dependencies = [ + "indexmap", + "toml_datetime 0.7.3", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ "winnow", ] @@ -4687,14 +4632,14 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.10.0", "bytes", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "iri-string", "pin-project-lite", @@ -4717,9 +4662,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" dependencies = [ "log", "pin-project-lite", @@ -4729,32 +4674,32 @@ dependencies = [ [[package]] name = "tracing-appender" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +checksum = "786d480bce6247ab75f005b14ae1624ad978d3029d9113f0a22fa1ac773faeaf" dependencies = [ "crossbeam-channel", - "thiserror 1.0.69", + "thiserror 2.0.17", "time", "tracing-subscriber", ] [[package]] name = "tracing-attributes" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" dependencies = [ "once_cell", "valuable", @@ -4773,14 +4718,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "sharded-slab", "smallvec", "thread_local", @@ -4797,9 +4742,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "ucd-trie" @@ -4821,9 +4766,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "universal-hash" @@ -4861,13 +4806,14 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] [[package]] @@ -4884,9 +4830,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.17.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" dependencies = [ "js-sys", "wasm-bindgen", @@ -4906,9 +4852,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version-compare" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" [[package]] name = "version_check" @@ -4948,45 +4894,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.104", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" dependencies = [ "cfg-if", "js-sys", @@ -4997,9 +4930,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5007,31 +4940,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.104", - "wasm-bindgen-backend", + "syn 2.0.111", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" dependencies = [ "js-sys", "wasm-bindgen", @@ -5049,9 +4982,9 @@ dependencies = [ [[package]] name = "widestring" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" [[package]] name = "winapi" @@ -5071,11 +5004,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5112,9 +5045,9 @@ checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", - "windows-link 0.2.1", + "windows-link", "windows-result 0.4.1", - "windows-strings 0.5.1", + "windows-strings", ] [[package]] @@ -5125,7 +5058,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -5136,15 +5069,9 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] -[[package]] -name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - [[package]] name = "windows-link" version = "0.2.1" @@ -5153,13 +5080,13 @@ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-registry" -version = "0.5.3" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" dependencies = [ - "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.4.2", + "windows-link", + "windows-result 0.4.1", + "windows-strings", ] [[package]] @@ -5171,31 +5098,13 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-result" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" -dependencies = [ - "windows-link 0.1.3", -] - [[package]] name = "windows-result" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link 0.2.1", -] - -[[package]] -name = "windows-strings" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" -dependencies = [ - "windows-link 0.1.3", + "windows-link", ] [[package]] @@ -5204,7 +5113,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -5240,7 +5149,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.2", + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", ] [[package]] @@ -5276,18 +5194,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.2" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -5304,9 +5223,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -5322,9 +5241,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -5340,9 +5259,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -5352,9 +5271,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -5370,9 +5289,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -5388,9 +5307,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -5406,9 +5325,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -5424,15 +5343,15 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.12" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] @@ -5448,19 +5367,39 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wiremock" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +checksum = "08db1edfb05d9b3c1542e521aea074442088292f00b5f28e435c714a98f85031" dependencies = [ - "bitflags 2.9.1", + "assert-json-diff", + "base64 0.22.1", + "deadpool", + "futures", + "http 1.4.0", + "http-body-util", + "hyper 1.8.1", + "hyper-util", + "log", + "once_cell", + "regex", + "serde", + "serde_json", + "tokio", + "url", ] +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "wyz" @@ -5502,9 +5441,9 @@ dependencies = [ [[package]] name = "xml-rs" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" [[package]] name = "xmltree" @@ -5541,9 +5480,9 @@ dependencies = [ [[package]] name = "yamux" -version = "0.13.5" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da1acad1c2dc53f0dde419115a38bd8221d8c3e47ae9aeceaf453266d29307e" +checksum = "deab71f2e20691b4728b349c6cee8fc7223880fa67b6b4f92225ec32225447e5" dependencies = [ "futures", "log", @@ -5566,11 +5505,10 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -5578,34 +5516,34 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -5625,15 +5563,15 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" dependencies = [ "zeroize_derive", ] @@ -5646,7 +5584,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -5661,9 +5599,9 @@ dependencies = [ [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", @@ -5672,9 +5610,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", @@ -5683,13 +5621,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.111", ] [[package]] @@ -5716,11 +5654,10 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.15+zstd.1.5.7" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ - "bindgen 0.71.1", "cc", "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index 0f002d1..98ed7a5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,6 +37,22 @@ p2poolv2_cli = { git = "https://github.com/keegreil/p2poolv2", package = "p2pool p2poolv2_api = { git = "https://github.com/keegreil/p2poolv2", package = "p2poolv2_api", branch = "external-payouts" } bitcoindrpc = { git = "https://github.com/keegreil/p2poolv2", package = "bitcoindrpc", branch = "external-payouts" } reqwest = { version = "0.11", features = ["json"] } +# --- Local Development Dependencies --- +# Assuming 'p2poolv2' is a sibling directory to 'hydrapool' +# The path is RELATIVE to the directory containing this Cargo.toml file. + +# For p2poolv2_lib (located at /parent_directory/p2poolv2/p2poolv2_lib) +p2poolv2_lib = { path = "../p2poolv2/p2poolv2_lib" } + +# For p2poolv2_cli +p2poolv2_cli = { path = "../p2poolv2/p2poolv2_cli" } + +# For p2poolv2_api +p2poolv2_api = { path = "../p2poolv2/p2poolv2_api" } + +# For bitcoindrpc +# This is likely a standalone crate in the p2poolv2 repo, check the exact path +bitcoindrpc = { path = "../p2poolv2/bitcoindrpc" } [[bin]] name = "hydrapool" diff --git a/config.toml b/config.toml index d027d15..ae2d6f4 100644 --- a/config.toml +++ b/config.toml @@ -32,7 +32,7 @@ difficulty_multiplier = 1.0 # how large your pool is, if you are running private, there is no need # to add a pool signature. Maximum length 16 bytes. pool_signature = "hydrapool" -#payout_file_path = "/tmp/hydrapool_payouts.json" # Triggers file mode +#payout_file_path = "./payout_file_example.json" # Triggers file mode #downstream_payout_url = "https://your-pool-server.com/api/payouts" # Optional: Enables fetcher #payout_refresh_interval = 30 diff --git a/payout_file_example.json b/payout_file_example.json new file mode 100644 index 0000000..3ab220a --- /dev/null +++ b/payout_file_example.json @@ -0,0 +1,130 @@ +{ + "payouts": [ + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", + "Difficulty": 394120, + "DiffString": "394.12k" + }, + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", + "Difficulty": 126321, + "DiffString": "126.32k" + } + ], + "OnDeckList": [ + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.bitaxe", + "Difficulty": 47010, + "DiffString": "47.01k" + }, + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", + "Difficulty": 41036, + "DiffString": "41.04k" + }, + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.bitaxe", + "Difficulty": 28934, + "DiffString": "28.93k" + }, + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.bitaxe", + "Difficulty": 22479, + "DiffString": "22.48k" + }, + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", + "Difficulty": 14403, + "DiffString": "14.40k" + }, + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", + "Difficulty": 13327, + "DiffString": "13.33k" + }, + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.bitaxe", + "Difficulty": 11471, + "DiffString": "11.47k" + }, + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", + "Difficulty": 11205, + "DiffString": "11.21k" + }, + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.bitaxe", + "Difficulty": 9580, + "DiffString": "9.58k" + }, + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.bitaxe", + "Difficulty": 8528, + "DiffString": "8.53k" + }, + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", + "Difficulty": 0, + "DiffString": "0" + }, + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", + "Difficulty": 0, + "DiffString": "0" + }, + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.bitaxe", + "Difficulty": 0, + "DiffString": "0" + }, + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", + "Difficulty": 0, + "DiffString": "0" + }, + { + "Value": 19531250, + "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", + "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", + "Difficulty": 0, + "DiffString": "0" + } + ], + "BestShare": { + "Difficulty": 8168909776, + "MinerAddress": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterStart9", + "Timestamp": "2025-12-06T21:31:39.0550588Z" + } +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index b5578e0..3b92f11 100644 --- a/src/main.rs +++ b/src/main.rs @@ -219,7 +219,6 @@ async fn main() -> Result<(), String> { store_for_notify, tracker_handle_cloned, &cloned_stratum_config, - None, // miner_pubkey: Option (unused for now) ) .await; }); @@ -243,7 +242,7 @@ async fn main() -> Result<(), String> { let mut stratum_server = StratumServerBuilder::default() .shutdown_rx(stratum_shutdown_rx) .connections_handle(connections_handle.clone()) - .emissions_tx(shares_tx) // Changed: emission_tx + Some() wrapper (matches lib sig) + .shares_tx(shares_tx) .hostname(stratum_config.hostname) .port(stratum_config.port) .start_difficulty(stratum_config.start_difficulty) From c60d64505718bdf6b728c868674dca821270d96c Mon Sep 17 00:00:00 2001 From: keegreil Date: Sat, 14 Feb 2026 18:54:58 -0500 Subject: [PATCH 3/4] Compiles after rebase. Untested. --- Cargo.lock | 203 +++++----------------------------------------------- Cargo.toml | 10 +-- src/main.rs | 11 +-- 3 files changed, 28 insertions(+), 196 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3144551..7ebd453 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -276,7 +276,7 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", "tower", "tower-layer", @@ -299,7 +299,7 @@ dependencies = [ "mime", "pin-project-lite", "rustversion", - "sync_wrapper 1.0.2", + "sync_wrapper", "tower-layer", "tower-service", "tracing", @@ -343,12 +343,6 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" @@ -446,7 +440,7 @@ dependencies = [ "base64 0.22.1", "bitcoin", "hex", - "reqwest 0.12.25", + "reqwest", "serde", "serde_json", "tokio", @@ -659,33 +653,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "ciborium" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" - -[[package]] -name = "ciborium-ll" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" -dependencies = [ - "ciborium-io", - "half", -] - [[package]] name = "cipher" version = "0.4.4" @@ -989,24 +956,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "deadpool" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" -dependencies = [ - "deadpool-runtime", - "lazy_static", - "num_cpus", - "tokio", -] - -[[package]] -name = "deadpool-runtime" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" - [[package]] name = "der" version = "0.7.10" @@ -1486,17 +1435,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "half" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" -dependencies = [ - "cfg-if", - "crunchy", - "zerocopy", -] - [[package]] name = "hashbrown" version = "0.12.3" @@ -1506,6 +1444,12 @@ dependencies = [ "ahash", ] +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + [[package]] name = "hashbrown" version = "0.15.5" @@ -1697,7 +1641,7 @@ dependencies = [ "p2poolv2_api", "p2poolv2_cli", "p2poolv2_lib", - "reqwest 0.11.27", + "reqwest", "serde_json", "tokio", "tracing", @@ -1767,19 +1711,6 @@ dependencies = [ "tower-service", ] -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper 0.14.32", - "native-tls", - "tokio", - "tokio-native-tls", -] - [[package]] name = "hyper-tls" version = "0.6.0" @@ -1815,7 +1746,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "socket2 0.6.1", - "system-configuration 0.6.1", + "system-configuration", "tokio", "tower-service", "tracing", @@ -1976,7 +1907,7 @@ dependencies = [ "netlink-proto", "netlink-sys", "rtnetlink", - "system-configuration 0.6.1", + "system-configuration", "tokio", "windows", ] @@ -3031,8 +2962,6 @@ dependencies = [ "bitcoin", "bitcoindrpc", "chrono", - "ciborium", - "ciborium-io", "config", "dashmap", "futures", @@ -3051,6 +2980,7 @@ dependencies = [ "tracing", "tracing-appender", "tracing-subscriber", + "url", "void", "zmq", ] @@ -3562,46 +3492,6 @@ dependencies = [ "bytecheck", ] -[[package]] -name = "reqwest" -version = "0.11.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper-tls 0.5.0", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 0.1.2", - "system-configuration 0.5.1", - "tokio", - "tokio-native-tls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - [[package]] name = "reqwest" version = "0.12.25" @@ -3618,7 +3508,7 @@ dependencies = [ "http-body-util", "hyper 1.8.1", "hyper-rustls", - "hyper-tls 0.6.0", + "hyper-tls", "hyper-util", "js-sys", "log", @@ -3630,7 +3520,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", "tokio-native-tls", "tower", @@ -3863,15 +3753,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - [[package]] name = "rustls-pki-types" version = "1.13.1" @@ -4257,12 +4138,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - [[package]] name = "sync_wrapper" version = "1.0.2" @@ -4283,17 +4158,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys 0.5.0", -] - [[package]] name = "system-configuration" version = "0.6.1" @@ -4302,17 +4166,7 @@ checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags 2.10.0", "core-foundation", - "system-configuration-sys 0.6.0", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", + "system-configuration-sys", ] [[package]] @@ -4622,7 +4476,7 @@ dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", "tokio-util", "tower-layer", @@ -5366,29 +5220,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "wiremock" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08db1edfb05d9b3c1542e521aea074442088292f00b5f28e435c714a98f85031" -dependencies = [ - "assert-json-diff", - "base64 0.22.1", - "deadpool", - "futures", - "http 1.4.0", - "http-body-util", - "hyper 1.8.1", - "hyper-util", - "log", - "once_cell", - "regex", - "serde", - "serde_json", - "tokio", - "url", -] - [[package]] name = "wit-bindgen" version = "0.46.0" diff --git a/Cargo.toml b/Cargo.toml index 98ed7a5..f7f6ffd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,11 +32,11 @@ tracing-subscriber = { version = "0.3", features = ["env-filter"] } bitcoin = { version = "0.32.5", features = ["serde", "rand"] } tokio = { version = "1.0", features = ["full"] } serde_json = "1.0" -p2poolv2_lib = { git = "https://github.com/keegreil/p2poolv2", package = "p2poolv2_lib", branch = "external-payouts"} -p2poolv2_cli = { git = "https://github.com/keegreil/p2poolv2", package = "p2poolv2_cli", branch = "external-payouts" } -p2poolv2_api = { git = "https://github.com/keegreil/p2poolv2", package = "p2poolv2_api", branch = "external-payouts" } -bitcoindrpc = { git = "https://github.com/keegreil/p2poolv2", package = "bitcoindrpc", branch = "external-payouts" } -reqwest = { version = "0.11", features = ["json"] } +#p2poolv2_lib = { git = "https://github.com/keegreil/p2poolv2", package = "p2poolv2_lib", branch = "external-payouts"} +#p2poolv2_cli = { git = "https://github.com/keegreil/p2poolv2", package = "p2poolv2_cli", branch = "external-payouts" } +#p2poolv2_api = { git = "https://github.com/keegreil/p2poolv2", package = "p2poolv2_api", branch = "external-payouts" } +#bitcoindrpc = { git = "https://github.com/keegreil/p2poolv2", package = "bitcoindrpc", branch = "external-payouts" } +reqwest = { version = "0.12", features = ["json"] } # --- Local Development Dependencies --- # Assuming 'p2poolv2' is a sibling directory to 'hydrapool' # The path is RELATIVE to the directory containing this Cargo.toml file. diff --git a/src/main.rs b/src/main.rs index 3b92f11..23bedd1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -35,6 +35,7 @@ use std::sync::Arc; use std::time::Duration; use tokio::sync::oneshot; use tracing::error; +use tracing::debug; use tracing::info; use std::fs::File; use std::io::Write; @@ -153,7 +154,7 @@ async fn main() -> Result<(), String> { if let Some(ref file_path) = payout_file_path { let file_clone = file_path.clone(); let url_clone = url.clone(); - let interval = std::time::Duration::from_secs(config.stratum.payout_refresh_interval); + let interval = Duration::from_secs(config.stratum.payout_refresh_interval); let network = stratum_config.network; // For addr validation if needed tokio::spawn(async move { @@ -219,6 +220,7 @@ async fn main() -> Result<(), String> { store_for_notify, tracker_handle_cloned, &cloned_stratum_config, + None, ) .await; }); @@ -242,7 +244,6 @@ async fn main() -> Result<(), String> { let mut stratum_server = StratumServerBuilder::default() .shutdown_rx(stratum_shutdown_rx) .connections_handle(connections_handle.clone()) - .shares_tx(shares_tx) .hostname(stratum_config.hostname) .port(stratum_config.port) .start_difficulty(stratum_config.start_difficulty) @@ -338,12 +339,12 @@ async fn main() -> Result<(), String> { } async fn fetch_and_write_payouts( - url: &str, + url: &reqwest::Url, // ← change to &Url file_path: &str, - _network: bitcoin::Network, // Optional: Validate addrs match network + _network: bitcoin::Network, ) -> Result<(), Box> { let client = reqwest::Client::new(); - let resp = client.get(url).send().await?; + let resp = client.get(url.clone()).send().await?; // ← works directly with &Url if !resp.status().is_success() { return Err(format!("HTTP {} from {}", resp.status(), url).into()); } From abe727d3a7a3ada6108676f89cd124710961cd9c Mon Sep 17 00:00:00 2001 From: keegreil Date: Wed, 18 Mar 2026 23:14:01 -0400 Subject: [PATCH 4/4] Shares to external API work now --- Cargo.lock | 3 + Cargo.toml | 3 + config.toml | 20 +- docker/config-example.toml | 12 +- payout_file_example.json | 131 +------------ src/main.rs | 392 +++++++++++++++++++++++++++++++++++-- 6 files changed, 404 insertions(+), 157 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7ebd453..bea4e73 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1638,10 +1638,13 @@ dependencies = [ "bitcoin", "bitcoindrpc", "clap", + "config", + "hex", "p2poolv2_api", "p2poolv2_cli", "p2poolv2_lib", "reqwest", + "serde", "serde_json", "tokio", "tracing", diff --git a/Cargo.toml b/Cargo.toml index f7f6ffd..3b54c7a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,6 +37,9 @@ serde_json = "1.0" #p2poolv2_api = { git = "https://github.com/keegreil/p2poolv2", package = "p2poolv2_api", branch = "external-payouts" } #bitcoindrpc = { git = "https://github.com/keegreil/p2poolv2", package = "bitcoindrpc", branch = "external-payouts" } reqwest = { version = "0.12", features = ["json"] } +serde = { version = "1.0", features = ["derive"] } +hex = "0.4" +config = "0.13.4" # --- Local Development Dependencies --- # Assuming 'p2poolv2' is a sibling directory to 'hydrapool' # The path is RELATIVE to the directory containing this Cargo.toml file. diff --git a/config.toml b/config.toml index ae2d6f4..9ca1ba2 100644 --- a/config.toml +++ b/config.toml @@ -32,21 +32,27 @@ difficulty_multiplier = 1.0 # how large your pool is, if you are running private, there is no need # to add a pool signature. Maximum length 16 bytes. pool_signature = "hydrapool" -#payout_file_path = "./payout_file_example.json" # Triggers file mode -#downstream_payout_url = "https://your-pool-server.com/api/payouts" # Optional: Enables fetcher -#payout_refresh_interval = 30 +payout_file_path = "./payout_file_example.json" # Triggers file mode +downstream_payout_url = "https://boot.gridlabs.science/api/mining/payouts" # Optional: Enables fetcher +payout_refresh_interval = 30 +# Optional high-difficulty share relay (separate from payout URL) +high_diff_share_submit_url = "https://boot.gridlabs.science/api/mining/share" +# Target average cadence for share submissions (adaptive difficulty threshold) +high_diff_share_submit_interval_secs = 10 +# How often to recompute adaptive submission threshold +high_diff_share_adjust_interval_secs = 30 [bitcoinrpc] # RPC credentials are loaded from env vars -url = "http://127.0.0.1:38332" -username = "p2pool" -password = "p2pool" +url = "http://127.0.0.1:8332" +username = "bitcoin" +password = "47mvwsxosyep744le24i" [logging] # Specify a file path for the log file, if no log file is specified, console logging will be used # file = "./logs/p2pool.log" # Set a log level. The supported levels are debug, info, warn and error. -level = "info" +level = "debug" # Pool, user and worker stats are backed up for aggregates across pool restarts in this directory. stats_dir = "./logs/stats" diff --git a/docker/config-example.toml b/docker/config-example.toml index b3cfc3e..cd91ce3 100644 --- a/docker/config-example.toml +++ b/docker/config-example.toml @@ -47,6 +47,17 @@ difficulty_multiplier = 1.0 # Comment out for anonymous mining or replace/append your identifier. pool_signature = "hydrapool" +# Optional: External payout fetch URL (for coinbase splitting lists) +#downstream_payout_url = "http://boot-protocol:5000/api/mining/payouts" +#payout_refresh_interval = 30 + +# Optional: High-difficulty share submit URL (separate from payout URL) +#high_diff_share_submit_url = "http://boot-protocol:5000/api/mining/share" +# Target average cadence for share submissions (adaptive threshold) +#high_diff_share_submit_interval_secs = 10 +# How often to recompute adaptive threshold +#high_diff_share_adjust_interval_secs = 30 + [bitcoinrpc] # REQUIRED: Bitcoin RPC connection # For Docker: use "http://host.docker.internal:38332" to connect to host @@ -73,4 +84,3 @@ port = 46884 # 2. prometheus.yml to update auth auth_user = "hydrapool" auth_token = "28a556ceb0b24c9b664d1e35a81239ed$5c9fb3271b22be05eb87272ce11c3cad55242d045eb379873ce0dc821586204a" - diff --git a/payout_file_example.json b/payout_file_example.json index 3ab220a..ef9d828 100644 --- a/payout_file_example.json +++ b/payout_file_example.json @@ -1,130 +1 @@ -{ - "payouts": [ - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", - "Difficulty": 394120, - "DiffString": "394.12k" - }, - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", - "Difficulty": 126321, - "DiffString": "126.32k" - } - ], - "OnDeckList": [ - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.bitaxe", - "Difficulty": 47010, - "DiffString": "47.01k" - }, - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", - "Difficulty": 41036, - "DiffString": "41.04k" - }, - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.bitaxe", - "Difficulty": 28934, - "DiffString": "28.93k" - }, - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.bitaxe", - "Difficulty": 22479, - "DiffString": "22.48k" - }, - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", - "Difficulty": 14403, - "DiffString": "14.40k" - }, - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", - "Difficulty": 13327, - "DiffString": "13.33k" - }, - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.bitaxe", - "Difficulty": 11471, - "DiffString": "11.47k" - }, - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", - "Difficulty": 11205, - "DiffString": "11.21k" - }, - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.bitaxe", - "Difficulty": 9580, - "DiffString": "9.58k" - }, - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.bitaxe", - "Difficulty": 8528, - "DiffString": "8.53k" - }, - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", - "Difficulty": 0, - "DiffString": "0" - }, - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", - "Difficulty": 0, - "DiffString": "0" - }, - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.bitaxe", - "Difficulty": 0, - "DiffString": "0" - }, - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", - "Difficulty": 0, - "DiffString": "0" - }, - { - "Value": 19531250, - "Address": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y", - "Username": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterOmen", - "Difficulty": 0, - "DiffString": "0" - } - ], - "BestShare": { - "Difficulty": 8168909776, - "MinerAddress": "bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.maraHeaterStart9", - "Timestamp": "2025-12-06T21:31:39.0550588Z" - } -} \ No newline at end of file +{"BestShare":null,"OnDeckList":null,"payouts":[{"Address":"bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.Hydrapool_Bitaxe","Value":19531250},{"Address":"bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.Hydrapool_Bitaxe","Value":19531250},{"Address":"bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.Hydrapool_Bitaxe","Value":19531250},{"Address":"bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.Hydrapool_Bitaxe","Value":19531250},{"Address":"bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.Hydrapool_Bitaxe","Value":19531250},{"Address":"bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.Hydrapool_Bitaxe","Value":19531250},{"Address":"bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.Hydrapool_Bitaxe","Value":19531250},{"Address":"bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.Hydrapool_Bitaxe","Value":19531250},{"Address":"bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.Hydrapool_Bitaxe","Value":19531250},{"Address":"bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.Hydrapool_Bitaxe","Value":19531250},{"Address":"bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.Hydrapool_Bitaxe","Value":19531250},{"Address":"bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.Hydrapool_Bitaxe","Value":19531250},{"Address":"bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.Hydrapool_Bitaxe","Value":19531250},{"Address":"bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.Hydrapool_Bitaxe","Value":19531250},{"Address":"bc1qrwsx8fs0l6z7ugp5cvzy6lhss7jlyru3kg9s8y.Hydrapool_Bitaxe","Value":19531250}]} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 23bedd1..f4eb6fd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,6 +14,8 @@ // You should have received a copy of the GNU General Public License along with // Hydra-Pool. If not, see . +use bitcoin::consensus::encode::serialize_hex; +use bitcoin::hashes::Hash; use clap::Parser; use p2poolv2_api::start_api_server; use p2poolv2_lib::accounting::stats::metrics; @@ -26,20 +28,23 @@ use p2poolv2_lib::store::Store; use p2poolv2_lib::stratum::client_connections::start_connections_handler; use p2poolv2_lib::stratum::emission::Emission; use p2poolv2_lib::stratum::server::StratumServerBuilder; +use p2poolv2_lib::stratum::work::gbt::build_merkle_branches_for_template; use p2poolv2_lib::stratum::work::gbt::start_gbt; use p2poolv2_lib::stratum::work::notify::start_notify; use p2poolv2_lib::stratum::work::tracker::start_tracker_actor; use p2poolv2_lib::stratum::zmq_listener::{ZmqListener, ZmqListenerTrait}; +use reqwest::Url; +use serde::Serialize; +use serde_json::json; // For building JSON if needed +use std::fs::File; +use std::io::Write; use std::process::exit; use std::sync::Arc; use std::time::Duration; use tokio::sync::oneshot; -use tracing::error; use tracing::debug; +use tracing::error; use tracing::info; -use std::fs::File; -use std::io::Write; -use serde_json::json; // For building JSON if needed /// Interval in seconds to poll for new block templates since the last zmq signal const GBT_POLL_INTERVAL: u64 = 10; // seconds @@ -54,6 +59,50 @@ const FULL_DONATION_BIPS: u16 = 10_000; /// clients. If we have more than notify channel capacity of pending /// clients in queue, some will be dropped. const NOTIFY_CHANNEL_CAPACITY: usize = 1000; +/// Maximum number of pending shares queued for downstream high-difficulty API +const HIGH_DIFF_SHARES_BUFFER_SIZE: usize = 1000; + +fn default_high_diff_submit_interval_secs() -> u64 { + 10 +} + +fn default_high_diff_adjust_interval_secs() -> u64 { + 30 +} + +fn default_high_diff_submit_queue_size() -> usize { + 1000 +} + +#[derive(Debug, Default)] +struct HydrapoolStratumLocalConfig { + high_diff_share_submit_url: Option, + high_diff_share_submit_interval_secs: u64, + high_diff_share_adjust_interval_secs: u64, + high_diff_share_submit_queue_size: usize, +} + +impl HydrapoolStratumLocalConfig { + fn with_defaults() -> Self { + Self { + high_diff_share_submit_url: None, + high_diff_share_submit_interval_secs: default_high_diff_submit_interval_secs(), + high_diff_share_adjust_interval_secs: default_high_diff_adjust_interval_secs(), + high_diff_share_submit_queue_size: default_high_diff_submit_queue_size(), + } + } +} + +#[derive(Debug, Serialize)] +#[serde(rename_all = "PascalCase")] +struct BootShareSubmission { + miner_address: String, + header_hex: String, + coinbase_hex: String, + merkle_path: Vec, + nonce: i64, + difficulty: f64, +} /// Wait for shutdown signals (Ctrl+C, SIGTERM on Unix) or internal shutdown signal. /// Returns when any shutdown signal is received. @@ -110,6 +159,7 @@ async fn main() -> Result<(), String> { return Err(format!("Failed to load config: {err}")); } let config = config.unwrap(); + let local_config = load_local_config(&args.config)?; // Configure logging based on config let logging_result = setup_logging(&config.logging); // hold guard to ensure logging is set up correctly @@ -144,22 +194,30 @@ async fn main() -> Result<(), String> { ); let mut stratum_config = config.stratum.clone().parse().unwrap(); - let mut payout_file_path = stratum_config.payout_file_path.clone(); // Optional + let mut payout_file_path = stratum_config.payout_file_path.clone(); // Optional // If URL set, spawn fetcher to update file - if let Some(ref url) = stratum_config.downstream_payout_url { // Assume you add this field too (see below) + if let Some(ref url) = stratum_config.downstream_payout_url { + // Assume you add this field too (see below) if payout_file_path.is_none() { - payout_file_path = Some("/tmp/hydrapool_payouts.json".to_string()); // Default file + payout_file_path = Some("/tmp/hydrapool_payouts.json".to_string()); // Default file } if let Some(ref file_path) = payout_file_path { let file_clone = file_path.clone(); let url_clone = url.clone(); let interval = Duration::from_secs(config.stratum.payout_refresh_interval); - let network = stratum_config.network; // For addr validation if needed + let network = stratum_config.network; // For addr validation if needed + info!( + "Starting downstream payout fetcher: url={} file={} interval={}s", + url_clone, + file_clone, + interval.as_secs() + ); tokio::spawn(async move { loop { - if let Err(e) = fetch_and_write_payouts(&url_clone, &file_clone, network).await { + if let Err(e) = fetch_and_write_payouts(&url_clone, &file_clone, network).await + { debug!("API fetch/write failed: {}", e); } tokio::time::sleep(interval).await; @@ -171,7 +229,6 @@ async fn main() -> Result<(), String> { // Set the parsed config's file path stratum_config.payout_file_path = payout_file_path; - let bitcoinrpc_config = config.bitcoinrpc.clone(); let (stratum_shutdown_tx, stratum_shutdown_rx) = tokio::sync::oneshot::channel(); @@ -225,9 +282,45 @@ async fn main() -> Result<(), String> { .await; }); - let (emissions_tx, emissions_rx) = + let (stratum_emissions_tx, stratum_emissions_rx) = + tokio::sync::mpsc::channel::(STRATUM_SHARES_BUFFER_SIZE); + let (node_emissions_tx, node_emissions_rx) = tokio::sync::mpsc::channel::(STRATUM_SHARES_BUFFER_SIZE); + let boot_submit_url = local_config.high_diff_share_submit_url.clone(); + let high_diff_submit_interval_secs = local_config.high_diff_share_submit_interval_secs.max(1); + let high_diff_adjust_interval_secs = local_config.high_diff_share_adjust_interval_secs.max(1); + let high_diff_share_submit_queue_size = local_config + .high_diff_share_submit_queue_size + .max(1) + .min(HIGH_DIFF_SHARES_BUFFER_SIZE); + + if let Some(url) = boot_submit_url { + info!( + "High-difficulty share submit enabled: url={} target_interval={}s adjust_interval={}s", + url, high_diff_submit_interval_secs, high_diff_adjust_interval_secs + ); + let (boot_submit_tx, boot_submit_rx) = + tokio::sync::mpsc::channel::(high_diff_share_submit_queue_size); + tokio::spawn(start_boot_share_submitter(url, boot_submit_rx)); + tokio::spawn(forward_emissions_with_adaptive_threshold( + stratum_emissions_rx, + node_emissions_tx, + Some(boot_submit_tx), + high_diff_submit_interval_secs, + high_diff_adjust_interval_secs, + )); + } else { + info!("High-difficulty share submit disabled"); + tokio::spawn(forward_emissions_with_adaptive_threshold( + stratum_emissions_rx, + node_emissions_tx, + None, + high_diff_submit_interval_secs, + high_diff_adjust_interval_secs, + )); + } + let metrics_handle = match metrics::start_metrics(config.logging.stats_dir.clone()).await { Ok(handle) => handle, Err(e) => { @@ -244,6 +337,7 @@ async fn main() -> Result<(), String> { let mut stratum_server = StratumServerBuilder::default() .shutdown_rx(stratum_shutdown_rx) .connections_handle(connections_handle.clone()) + .emissions_tx(stratum_emissions_tx) .hostname(stratum_config.hostname) .port(stratum_config.port) .start_difficulty(stratum_config.start_difficulty) @@ -296,7 +390,7 @@ async fn main() -> Result<(), String> { config.api.hostname, config.api.port ); - match NodeHandle::new(config, chain_store, emissions_rx, metrics_handle).await { + match NodeHandle::new(config, chain_store, node_emissions_rx, metrics_handle).await { Ok((node_handle, stopping_rx)) => { info!("Node started"); @@ -338,27 +432,287 @@ async fn main() -> Result<(), String> { Ok(()) } +fn load_local_config(path: &str) -> Result { + let settings = config::Config::builder() + .add_source(config::File::with_name(path)) + .build() + .map_err(|e| format!("Failed to load local hydrapool config from {path}: {e}"))?; + + let mut local = HydrapoolStratumLocalConfig::with_defaults(); + + local.high_diff_share_submit_url = settings + .get_string("stratum.high_diff_share_submit_url") + .ok() + .and_then(|url| Url::parse(&url).ok()); + + if let Ok(value) = settings.get_int("stratum.high_diff_share_submit_interval_secs") { + local.high_diff_share_submit_interval_secs = value.max(1) as u64; + } + if let Ok(value) = settings.get_int("stratum.high_diff_share_adjust_interval_secs") { + local.high_diff_share_adjust_interval_secs = value.max(1) as u64; + } + if let Ok(value) = settings.get_int("stratum.high_diff_share_submit_queue_size") { + local.high_diff_share_submit_queue_size = value.max(1) as usize; + } + + Ok(local) +} + +async fn forward_emissions_with_adaptive_threshold( + mut stratum_emissions_rx: tokio::sync::mpsc::Receiver, + node_emissions_tx: tokio::sync::mpsc::Sender, + boot_submit_tx: Option>, + target_submit_interval_secs: u64, + adjust_interval_secs: u64, +) { + let target_submit_interval = Duration::from_secs(target_submit_interval_secs.max(1)); + let adjust_interval = Duration::from_secs(adjust_interval_secs.max(1)); + + let mut current_threshold: u64 = 1; + let mut observed_difficulties: Vec = Vec::new(); + let mut last_adjust_at = tokio::time::Instant::now(); + let mut seen_count: u64 = 0; + let mut queued_count: u64 = 0; + let mut below_threshold_count: u64 = 0; + let mut dropped_count: u64 = 0; + + while let Some(emission) = stratum_emissions_rx.recv().await { + seen_count = seen_count.saturating_add(1); + let truediff = get_true_difficulty(&emission.header.block_hash()) as u64; + observed_difficulties.push(truediff); + + let elapsed = last_adjust_at.elapsed(); + if elapsed >= adjust_interval { + let new_threshold = recompute_threshold( + &observed_difficulties, + elapsed, + target_submit_interval, + current_threshold, + ); + if new_threshold != current_threshold { + debug!( + "Adjusted high-diff share threshold from {} to {} using {} samples over {:.1}s", + current_threshold, + new_threshold, + observed_difficulties.len(), + elapsed.as_secs_f64() + ); + } + if boot_submit_tx.is_some() { + info!( + "High-diff relay window: seen={} queued={} below_threshold={} dropped={} threshold={} target={}s", + seen_count, + queued_count, + below_threshold_count, + dropped_count, + current_threshold, + target_submit_interval.as_secs() + ); + } + current_threshold = new_threshold; + observed_difficulties.clear(); + last_adjust_at = tokio::time::Instant::now(); + seen_count = 0; + queued_count = 0; + below_threshold_count = 0; + dropped_count = 0; + } + + if let Some(ref tx) = boot_submit_tx { + if truediff >= current_threshold { + if let Some(payload) = build_boot_submission(&emission, truediff) { + let miner = payload.miner_address.clone(); + let difficulty = payload.difficulty; + if tx.try_send(payload).is_err() { + dropped_count = dropped_count.saturating_add(1); + debug!("Dropped high-diff share submission because submit queue is full"); + } else { + queued_count = queued_count.saturating_add(1); + debug!( + "Queued high-diff share for submit miner={} diff={} threshold={}", + miner, difficulty, current_threshold + ); + } + } + } else { + below_threshold_count = below_threshold_count.saturating_add(1); + } + } + + if node_emissions_tx.send(emission).await.is_err() { + info!("Node emission channel closed. Stopping emission forwarder."); + break; + } + } +} + +fn recompute_threshold( + observed_difficulties: &[u64], + elapsed: Duration, + target_submit_interval: Duration, + current_threshold: u64, +) -> u64 { + if observed_difficulties.is_empty() { + return (current_threshold / 2).max(1); + } + + let target_count = + ((elapsed.as_secs_f64() / target_submit_interval.as_secs_f64()).round() as usize).max(1); + let mut sorted = observed_difficulties.to_vec(); + sorted.sort_unstable_by(|a, b| b.cmp(a)); + let idx = target_count + .saturating_sub(1) + .min(sorted.len().saturating_sub(1)); + sorted[idx].max(1) +} + +/// Use bitcoin mainnet max attainable target to convert the hash into difficulty. +/// This mirrors p2poolv2's truediffone-based share difficulty metric. +fn get_true_difficulty(hash: &bitcoin::BlockHash) -> u128 { + let mut bytes = hash.as_byte_array().to_vec(); + bytes.reverse(); + let diff = u128::from_str_radix(&hex::encode(&bytes[..16]), 16).unwrap(); + (0xFFFF_u128 << (208 - 128)) / diff +} + +fn build_boot_submission(emission: &Emission, truediff: u64) -> Option { + let btcaddress = emission.pplns.btcaddress.clone().unwrap_or_default(); + if btcaddress.is_empty() { + return None; + } + let workername = emission.pplns.workername.clone().unwrap_or_default(); + let miner_address = if workername.is_empty() { + btcaddress + } else { + format!("{btcaddress}.{workername}") + }; + + let merkle_path = build_merkle_branches_for_template(&emission.blocktemplate) + .into_iter() + .map(|h| h.to_string()) + .collect::>(); + + Some(BootShareSubmission { + miner_address, + header_hex: serialize_hex(&emission.header), + coinbase_hex: serialize_hex(&emission.coinbase), + merkle_path, + nonce: emission.header.nonce as i64, + difficulty: truediff as f64, + }) +} + +async fn start_boot_share_submitter( + submit_url: Url, + mut boot_submit_rx: tokio::sync::mpsc::Receiver, +) { + let client = reqwest::Client::new(); + while let Some(payload) = boot_submit_rx.recv().await { + let mut attempt: u8 = 0; + loop { + attempt = attempt.saturating_add(1); + let response = client.post(submit_url.clone()).json(&payload).send().await; + match response { + Ok(resp) if resp.status().is_success() => { + debug!( + "Submitted high-diff share to {} miner={} diff={} status={}", + submit_url, + payload.miner_address, + payload.difficulty, + resp.status() + ); + break; + } + Ok(resp) => { + if attempt >= 3 { + debug!( + "Failed submitting high-diff share to {} status={} after {} attempts", + submit_url, + resp.status(), + attempt + ); + break; + } + } + Err(e) => { + if attempt >= 3 { + debug!( + "Failed submitting high-diff share to {} error={} after {} attempts", + submit_url, e, attempt + ); + break; + } + } + } + tokio::time::sleep(Duration::from_millis(250 * u64::from(attempt))).await; + } + } +} + async fn fetch_and_write_payouts( - url: &reqwest::Url, // ← change to &Url + url: &reqwest::Url, // ← change to &Url file_path: &str, _network: bitcoin::Network, ) -> Result<(), Box> { + debug!("Fetching payouts from {} ...", url); let client = reqwest::Client::new(); - let resp = client.get(url.clone()).send().await?; // ← works directly with &Url + let resp = client.get(url.clone()).send().await?; // ← works directly with &Url if !resp.status().is_success() { return Err(format!("HTTP {} from {}", resp.status(), url).into()); } let json: serde_json::Value = resp.json().await?; - // Extract and rewrite WinnersList (keep full structure for future-proofing) - let winners = json["WinnersList"].as_array().ok_or("Missing WinnersList")?.clone(); + // Accept multiple key variants from downstream APIs. + let raw_payouts = json["payouts"] + .as_array() + .or_else(|| json["Payouts"].as_array()) + .or_else(|| json["WinnersList"].as_array()) + .ok_or("Missing payouts/Payouts/WinnersList")? + .clone(); + + // Normalize payout objects so p2poolv2 file mode can parse them. + // p2poolv2 expects each payout to have "Address" and "Value" keys. + let mut payouts = Vec::with_capacity(raw_payouts.len()); + for entry in raw_payouts { + let address = entry["Address"] + .as_str() + .or_else(|| entry["address"].as_str()) + .or_else(|| entry["MinerAddress"].as_str()) + .ok_or("Missing Address/address/MinerAddress in payout entry")?; + let value = entry["Value"] + .as_u64() + .or_else(|| entry["value"].as_u64()) + .ok_or("Missing Value/value in payout entry")?; + payouts.push(json!({ + "Address": address, + "Value": value + })); + } + + let on_deck = if !json["OnDeckList"].is_null() { + json["OnDeckList"].clone() + } else { + serde_json::Value::Null + }; + let best_share = if !json["BestShare"].is_null() { + json["BestShare"].clone() + } else { + serde_json::Value::Null + }; let updated_json = json!({ - "WinnersList": winners, - "OnDeckList": json["OnDeckList"], // Preserve if present - "BestShare": json["BestShare"] // Preserve + // p2poolv2 loader currently expects "payouts" + "payouts": payouts, + "OnDeckList": on_deck, + "BestShare": best_share }); let mut file = File::create(file_path)?; file.write_all(updated_json.to_string().as_bytes())?; + info!( + "Updated payout file from {} -> {} ({} payouts)", + url, + file_path, + updated_json["payouts"].as_array().map_or(0, |a| a.len()) + ); Ok(()) }