diff --git a/bitcoin-core-sv2/Cargo.toml b/bitcoin-core-sv2/Cargo.toml index 65a079f2a..424f5d58f 100644 --- a/bitcoin-core-sv2/Cargo.toml +++ b/bitcoin-core-sv2/Cargo.toml @@ -22,6 +22,6 @@ async-channel = "1.5.1" # fetching from github enables synchronizing development workflows across sv2-apps and stratum repos # it MUST be changed before bitcoin-core-sv2 is published to crates.io # with the proper version of stratum-core being fetched from crates.io as well -stratum-core = { git = "https://github.com/stratum-mining/stratum", branch = "main" } +stratum-core = { git = "https://github.com/marafoundation/stratum", branch = "vardiff/simulation-framework" } bitcoin-capnp-types = "0.2.0" diff --git a/integration-tests/Cargo.lock b/integration-tests/Cargo.lock index 1367caf70..c94e3075e 100644 --- a/integration-tests/Cargo.lock +++ b/integration-tests/Cargo.lock @@ -372,9 +372,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "axum" @@ -430,12 +430,11 @@ dependencies = [ [[package]] name = "base58ck" -version = "0.1.0" +version = "0.1.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f" +checksum = "ec5dc7e09f7bb15f0062da7c03086d6b71a2c84e0af4fccbbc7d8c6559847816" dependencies = [ - "bitcoin-internals", - "bitcoin_hashes 0.14.1", + "bitcoin_hashes 0.14.100", ] [[package]] @@ -465,7 +464,7 @@ checksum = "32637268377fc7b10a8c6d51de3e7fba1ce5dd371a96e342b34e6078db558e7f" [[package]] name = "binary_sv2" version = "5.0.1" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "buffer_sv2", "derive_codec_sv2", @@ -473,17 +472,16 @@ dependencies = [ [[package]] name = "bitcoin" -version = "0.32.9" +version = "0.32.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf93e61f2dbc3e3c41234ca26a65e2c0b0975c52e0f069ab9893ebbede584d3" +checksum = "39581299241111285f3268ba75ddf372746fd041620918b145c1af9d75e91b6c" dependencies = [ "base58ck", "base64 0.21.7", "bech32", - "bitcoin-internals", "bitcoin-io", "bitcoin-units", - "bitcoin_hashes 0.14.1", + "bitcoin_hashes 0.14.100", "hex-conservative 0.2.2", "hex_lit", "secp256k1 0.29.1", @@ -500,28 +498,18 @@ dependencies = [ "capnpc", ] -[[package]] -name = "bitcoin-internals" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bdbe14aa07b06e6cfeffc529a1f099e5fbe249524f8125358604df99a4bed2" -dependencies = [ - "serde", -] - [[package]] name = "bitcoin-io" -version = "0.1.4" +version = "0.1.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dee39a0ee5b4095224a0cfc6bf4cc1baf0f9624b96b367e53b66d974e51d953" +checksum = "11301df0b06f22dea7bb1916403fdd88a371031e495c49b8f96931b28189e175" [[package]] name = "bitcoin-units" -version = "0.1.3" +version = "0.1.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346568ebaab2918487cea76dd55dae13c27bb618cdb737c952e69eb2017c4118" +checksum = "57bad157b78d0d1b22c4cbb6a35a566211fc4d14866a37f2c780652b50f3b845" dependencies = [ - "bitcoin-internals", "serde", ] @@ -560,9 +548,9 @@ dependencies = [ [[package]] name = "bitcoin_hashes" -version = "0.14.1" +version = "0.14.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26ec84b80c482df901772e931a9a681e26a1b9ee2302edeff23cb30328745c8b" +checksum = "0c9901a56e133a1fc86eeb1113e2591f45f4682451ca893bff494d2f88918e3f" dependencies = [ "bitcoin-io", "hex-conservative 0.2.2", @@ -577,9 +565,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a" dependencies = [ "serde_core", ] @@ -639,16 +627,16 @@ dependencies = [ [[package]] name = "buffer_sv2" version = "3.0.1" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "aes-gcm", ] [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "byte-slice-cast" @@ -670,9 +658,9 @@ checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "capnp" -version = "0.25.4" +version = "0.25.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63da65e5e9ffc3b8f993d4ad222a548152549351a643f6b850a7773cb6ff2809" +checksum = "1cfd2485d4b36ac9c5aa6572d7d35daa63a5b34f517627d6c34d068e616e4a73" dependencies = [ "embedded-io", ] @@ -716,9 +704,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.62" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "shlex", @@ -757,7 +745,7 @@ dependencies = [ [[package]] name = "channels_sv2" version = "6.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "bitcoin", @@ -848,7 +836,7 @@ checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "codec_sv2" version = "5.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "buffer_sv2", @@ -867,7 +855,7 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "common_messages_sv2" version = "7.2.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] @@ -1100,9 +1088,9 @@ dependencies = [ [[package]] name = "dashmap" -version = "6.1.0" +version = "6.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1126,7 +1114,7 @@ dependencies = [ [[package]] name = "derive_codec_sv2" version = "1.1.2" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" [[package]] name = "digest" @@ -1179,9 +1167,9 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "embedded-io" @@ -1255,7 +1243,7 @@ dependencies = [ [[package]] name = "extensions_sv2" version = "0.1.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] @@ -1321,7 +1309,7 @@ dependencies = [ [[package]] name = "framing_sv2" version = "6.0.1" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "buffer_sv2", @@ -1506,7 +1494,7 @@ dependencies = [ [[package]] name = "handlers_sv2" version = "0.4.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "common_messages_sv2", @@ -1585,9 +1573,9 @@ dependencies = [ [[package]] name = "hex-conservative" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7289f6b628ce69fb1a371d0fdcf8ff38cd93ec00e3010eb055d1e044998c8d1" +checksum = "35431185f361ccf3ffc58254628af5f1f5d5f28531da2e02e5d6c82bbc282a10" dependencies = [ "arrayvec", ] @@ -1615,9 +1603,9 @@ checksum = "4398eddb78466298f1ddcc739abbbd8a942e541d1972c7590bd83de364e626e0" [[package]] name = "http" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0" dependencies = [ "bytes", "itoa", @@ -1660,9 +1648,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", @@ -1695,14 +1683,35 @@ dependencies = [ [[package]] name = "idna" -version = "0.4.0" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "279259b0ac81c89d11c290495fdcfa96ea3643b7df311c138b6fe8ca5237f0f8" dependencies = [ + "idna_mapping", "unicode-bidi", "unicode-normalization", ] +[[package]] +name = "idna_mapping" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11c13906586a4b339310541a274dd927aff6fcbb5b8e3af90634c4b31681c792" +dependencies = [ + "unicode-joining-type", +] + [[package]] name = "impl-codec" version = "0.7.1" @@ -1856,17 +1865,17 @@ dependencies = [ [[package]] name = "job_declaration_sv2" -version = "8.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +version = "7.1.0" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" dependencies = [ "cfg-if", "futures-util", @@ -1935,9 +1944,9 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libredox" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" +checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ "libc", ] @@ -1971,9 +1980,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "113b30b4cd05f7c06868fdb2854f66a7b9fece9a48425351cd532e810d74024f" dependencies = [ "value-bag", ] @@ -1995,9 +2004,9 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "mime" @@ -2024,20 +2033,20 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "mining_sv2" version = "10.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] [[package]] name = "miniscript" -version = "13.0.0" +version = "13.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "867b1f11e0545ad5ebbddd8a9f18756d9657a6758bf10d96cf15ddd0b726b650" +checksum = "7cfb042402e95bb8a7a2f476bb8896ee1552c2f14224b3d680ac809fb20ff29d" dependencies = [ "bech32", "bitcoin", - "hex-conservative 1.1.0", + "hex-conservative 1.2.0", ] [[package]] @@ -2065,9 +2074,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", @@ -2077,7 +2086,7 @@ dependencies = [ [[package]] name = "noise_sv2" version = "1.4.2" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "aes-gcm", "chacha20poly1305", @@ -2233,7 +2242,7 @@ dependencies = [ [[package]] name = "parsers_sv2" version = "0.4.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "common_messages_sv2", @@ -2418,7 +2427,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.11+spec-1.1.0", + "toml_edit 0.25.12+spec-1.1.0", ] [[package]] @@ -2502,7 +2511,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", ] [[package]] @@ -2566,7 +2575,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ "base64 0.21.7", - "bitflags 2.11.1", + "bitflags 2.12.1", "serde", "serde_derive", ] @@ -2641,7 +2650,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "errno", "libc", "linux-raw-sys 0.4.15", @@ -2654,7 +2663,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "errno", "libc", "linux-raw-sys 0.12.1", @@ -2737,7 +2746,7 @@ version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" dependencies = [ - "bitcoin_hashes 0.14.1", + "bitcoin_hashes 0.14.100", "secp256k1-sys 0.10.1", "serde", ] @@ -2792,9 +2801,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", @@ -2889,9 +2898,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook-registry" @@ -2950,9 +2959,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -2995,7 +3004,7 @@ dependencies = [ [[package]] name = "stratum-core" version = "0.4.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "bitcoin", @@ -3018,7 +3027,7 @@ dependencies = [ [[package]] name = "stratum_translation" version = "0.3.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "bitcoin", @@ -3043,7 +3052,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sv1_api" version = "4.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "bitcoin_hashes 0.3.2", @@ -3091,7 +3100,7 @@ dependencies = [ [[package]] name = "template_distribution_sv2" version = "5.1.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] @@ -3191,7 +3200,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.3", + "socket2 0.6.4", "tokio-macros", "tracing", "windows-sys 0.61.2", @@ -3268,9 +3277,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.11+spec-1.1.0" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap", "toml_datetime 1.1.1+spec-1.1.0", @@ -3414,9 +3423,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "ucd-trie" @@ -3454,6 +3463,12 @@ version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +[[package]] +name = "unicode-joining-type" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8d00a78170970967fdb83f9d49b92f959ab2bb829186b113e4f4604ad98e180" + [[package]] name = "unicode-normalization" version = "0.1.25" @@ -3465,9 +3480,9 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-xid" @@ -3493,15 +3508,22 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.4.1" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -3599,9 +3621,9 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" dependencies = [ "cfg-if", "once_cell", @@ -3612,9 +3634,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" dependencies = [ "js-sys", "wasm-bindgen", @@ -3622,9 +3644,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3632,9 +3654,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" dependencies = [ "bumpalo", "proc-macro2", @@ -3645,9 +3667,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" dependencies = [ "unicode-ident", ] @@ -3901,18 +3923,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" dependencies = [ "proc-macro2", "quote", diff --git a/miner-apps/Cargo.lock b/miner-apps/Cargo.lock index 909181447..fd499520c 100644 --- a/miner-apps/Cargo.lock +++ b/miner-apps/Cargo.lock @@ -131,9 +131,9 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.9.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a07d1f37ff60921c83bdfc7407723bdefe89b44b98a9b772f225c8f9d67141a6" +checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207" dependencies = [ "rustversion", ] @@ -186,15 +186,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "axum" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" +checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" dependencies = [ "axum-core", "bytes", @@ -244,12 +244,11 @@ dependencies = [ [[package]] name = "base58ck" -version = "0.1.0" +version = "0.1.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f" +checksum = "ec5dc7e09f7bb15f0062da7c03086d6b71a2c84e0af4fccbbc7d8c6559847816" dependencies = [ - "bitcoin-internals 0.3.0", - "bitcoin_hashes 0.14.1", + "bitcoin_hashes 0.14.100", ] [[package]] @@ -273,7 +272,7 @@ checksum = "32637268377fc7b10a8c6d51de3e7fba1ce5dd371a96e342b34e6078db558e7f" [[package]] name = "binary_sv2" version = "5.0.1" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "buffer_sv2", "derive_codec_sv2", @@ -281,16 +280,15 @@ dependencies = [ [[package]] name = "bitcoin" -version = "0.32.8" +version = "0.32.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e499f9fc0407f50fe98af744ab44fa67d409f76b6772e1689ec8485eb0c0f66" +checksum = "39581299241111285f3268ba75ddf372746fd041620918b145c1af9d75e91b6c" dependencies = [ "base58ck", "bech32", - "bitcoin-internals 0.3.0", "bitcoin-io", "bitcoin-units", - "bitcoin_hashes 0.14.1", + "bitcoin_hashes 0.14.100", "hex-conservative 0.2.2", "hex_lit", "secp256k1 0.29.1", @@ -306,32 +304,17 @@ dependencies = [ "capnpc", ] -[[package]] -name = "bitcoin-internals" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" - -[[package]] -name = "bitcoin-internals" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bdbe14aa07b06e6cfeffc529a1f099e5fbe249524f8125358604df99a4bed2" - [[package]] name = "bitcoin-io" -version = "0.1.4" +version = "0.1.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dee39a0ee5b4095224a0cfc6bf4cc1baf0f9624b96b367e53b66d974e51d953" +checksum = "11301df0b06f22dea7bb1916403fdd88a371031e495c49b8f96931b28189e175" [[package]] name = "bitcoin-units" -version = "0.1.2" +version = "0.1.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5285c8bcaa25876d07f37e3d30c303f2609179716e11d688f51e8f1fe70063e2" -dependencies = [ - "bitcoin-internals 0.3.0", -] +checksum = "57bad157b78d0d1b22c4cbb6a35a566211fc4d14866a37f2c780652b50f3b845" [[package]] name = "bitcoin_core_sv2" @@ -359,19 +342,18 @@ dependencies = [ [[package]] name = "bitcoin_hashes" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +checksum = "446819536d8121575eeb7e89efdbadb3f055e87e4bb66c6679a6d5cc2f4b64fd" dependencies = [ - "bitcoin-internals 0.2.0", "hex-conservative 0.1.2", ] [[package]] name = "bitcoin_hashes" -version = "0.14.1" +version = "0.14.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26ec84b80c482df901772e931a9a681e26a1b9ee2302edeff23cb30328745c8b" +checksum = "0c9901a56e133a1fc86eeb1113e2591f45f4682451ca893bff494d2f88918e3f" dependencies = [ "bitcoin-io", "hex-conservative 0.2.2", @@ -379,9 +361,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.11.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a" dependencies = [ "serde_core", ] @@ -428,16 +410,16 @@ dependencies = [ [[package]] name = "buffer_sv2" version = "3.0.1" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "aes-gcm", ] [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "byte-slice-cast" @@ -459,9 +441,9 @@ checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "capnp" -version = "0.25.4" +version = "0.25.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63da65e5e9ffc3b8f993d4ad222a548152549351a643f6b850a7773cb6ff2809" +checksum = "1cfd2485d4b36ac9c5aa6572d7d35daa63a5b34f517627d6c34d068e616e4a73" dependencies = [ "embedded-io", ] @@ -479,9 +461,9 @@ dependencies = [ [[package]] name = "capnp-rpc" -version = "0.25.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ccca6d26009f4d6c12b741994f33b421da613b5dcf461508e236b53ef862f1" +checksum = "e3c74c337e87f75f3174ffb3513738ab0acc631c04f64cc33b867c60f84771da" dependencies = [ "capnp", "capnp-futures", @@ -499,9 +481,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.57" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a0dd1ca384932ff3641c8718a02769f1698e7563dc6974ffd03346116310423" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "shlex", @@ -540,7 +522,7 @@ dependencies = [ [[package]] name = "channels_sv2" version = "6.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "bitcoin", @@ -569,9 +551,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" dependencies = [ "clap_builder", "clap_derive", @@ -591,9 +573,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" dependencies = [ "heck", "proc-macro2", @@ -610,7 +592,7 @@ checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "codec_sv2" version = "5.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "buffer_sv2", @@ -638,7 +620,7 @@ dependencies = [ [[package]] name = "common_messages_sv2" version = "7.2.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] @@ -693,11 +675,12 @@ dependencies = [ [[package]] name = "const_format" -version = "0.2.35" +version = "0.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" +checksum = "4481a617ad9a412be3b97c5d403fef8ed023103368908b9c50af598ff467cc1e" dependencies = [ "const_format_proc_macros", + "konst", ] [[package]] @@ -780,9 +763,9 @@ dependencies = [ [[package]] name = "dashmap" -version = "6.1.0" +version = "6.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -806,7 +789,7 @@ dependencies = [ [[package]] name = "derive_codec_sv2" version = "1.1.2" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" [[package]] name = "digest" @@ -869,17 +852,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "dlv-list" version = "0.5.2" @@ -935,7 +907,7 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "extensions_sv2" version = "0.1.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] @@ -996,7 +968,7 @@ dependencies = [ [[package]] name = "framing_sv2" version = "6.0.1" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "buffer_sv2", @@ -1131,7 +1103,7 @@ dependencies = [ [[package]] name = "handlers_sv2" version = "0.4.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "common_messages_sv2", @@ -1156,9 +1128,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.1" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "hashlink" @@ -1214,9 +1186,12 @@ dependencies = [ [[package]] name = "hex-conservative" -version = "1.0.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "366fa3443ac84474447710ec17bb00b05dfbd096137817981e86f992f21a2793" +checksum = "35431185f361ccf3ffc58254628af5f1f5d5f28531da2e02e5d6c82bbc282a10" +dependencies = [ + "arrayvec", +] [[package]] name = "hex_lit" @@ -1226,9 +1201,9 @@ checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" [[package]] name = "hotpath" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fde50be006a0fe95cc2fd6d25d884aa6932218e4055d7df2fa0d95c386acf8d" +checksum = "f7d9982fcb4356a5260502f0e646411ec1feb2962cc98c230777104a8d1c5ed3" dependencies = [ "arc-swap", "cfg-if", @@ -1253,9 +1228,9 @@ dependencies = [ [[package]] name = "hotpath-macros" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd884cee056e269e41e1127549458e1c4e309f31897ebbc1416982a74d40a5b5" +checksum = "4398eddb78466298f1ddcc739abbbd8a942e541d1972c7590bd83de364e626e0" dependencies = [ "proc-macro2", "quote", @@ -1264,9 +1239,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0" dependencies = [ "bytes", "itoa", @@ -1309,9 +1284,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.8.1" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", @@ -1323,7 +1298,6 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "pin-utils", "smallvec", "tokio", ] @@ -1343,87 +1317,6 @@ dependencies = [ "tower-service", ] -[[package]] -name = "icu_collections" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" -dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" - -[[package]] -name = "icu_properties" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" -dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" - -[[package]] -name = "icu_provider" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" -dependencies = [ - "displaydoc", - "icu_locale_core", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - [[package]] name = "idna" version = "1.1.0" @@ -1437,12 +1330,22 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "279259b0ac81c89d11c290495fdcfa96ea3643b7df311c138b6fe8ca5237f0f8" dependencies = [ - "icu_normalizer", - "icu_properties", + "idna_mapping", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna_mapping" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11c13906586a4b339310541a274dd927aff6fcbb5b8e3af90634c4b31681c792" +dependencies = [ + "unicode-joining-type", ] [[package]] @@ -1473,12 +1376,12 @@ checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" [[package]] name = "indexmap" -version = "2.13.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "serde", "serde_core", ] @@ -1533,18 +1436,20 @@ dependencies = [ [[package]] name = "job_declaration_sv2" -version = "8.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +version = "7.1.0" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] [[package]] name = "js-sys" -version = "0.3.91" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" +checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" dependencies = [ + "cfg-if", + "futures-util", "once_cell", "wasm-bindgen", ] @@ -1560,6 +1465,21 @@ dependencies = [ "serde", ] +[[package]] +name = "konst" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128133ed7824fcd73d6e7b17957c5eb7bacb885649bd8c69708b2331a10bcefb" +dependencies = [ + "konst_macro_rules", +] + +[[package]] +name = "konst_macro_rules" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4933f3f57a8e9d9da04db23fb153356ecaf00cbd14aee46279c33dc80925c37" + [[package]] name = "lazy_static" version = "1.5.0" @@ -1568,25 +1488,19 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.183" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libredox" -version = "0.1.14" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" +checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ "libc", ] -[[package]] -name = "litemap" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" - [[package]] name = "lock_api" version = "0.4.14" @@ -1598,9 +1512,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "113b30b4cd05f7c06868fdb2854f66a7b9fece9a48425351cd532e810d74024f" [[package]] name = "mach2" @@ -1625,9 +1539,9 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "mime" @@ -1654,20 +1568,20 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "mining_sv2" version = "10.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] [[package]] name = "miniscript" -version = "13.0.0" +version = "13.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "867b1f11e0545ad5ebbddd8a9f18756d9657a6758bf10d96cf15ddd0b726b650" +checksum = "7cfb042402e95bb8a7a2f476bb8896ee1552c2f14224b3d680ac809fb20ff29d" dependencies = [ "bech32", "bitcoin", - "hex-conservative 1.0.1", + "hex-conservative 1.2.0", ] [[package]] @@ -1682,9 +1596,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", @@ -1694,7 +1608,7 @@ dependencies = [ [[package]] name = "noise_sv2" version = "1.4.2" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "aes-gcm", "chacha20poly1305", @@ -1818,7 +1732,7 @@ dependencies = [ [[package]] name = "parsers_sv2" version = "0.4.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "common_messages_sv2", @@ -1890,12 +1804,6 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - [[package]] name = "poly1305" version = "0.8.0" @@ -1919,15 +1827,6 @@ dependencies = [ "universal-hash", ] -[[package]] -name = "potential_utf" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" -dependencies = [ - "zerovec", -] - [[package]] name = "ppv-lite86" version = "0.2.21" @@ -1967,7 +1866,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.8+spec-1.1.0", + "toml_edit 0.25.12+spec-1.1.0", ] [[package]] @@ -2032,9 +1931,9 @@ checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rand" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" dependencies = [ "libc", "rand_chacha", @@ -2224,7 +2123,7 @@ version = "0.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" dependencies = [ - "bitcoin_hashes 0.13.0", + "bitcoin_hashes 0.13.1", "rand", "secp256k1-sys 0.9.2", ] @@ -2235,7 +2134,7 @@ version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" dependencies = [ - "bitcoin_hashes 0.14.1", + "bitcoin_hashes 0.14.100", "secp256k1-sys 0.10.1", ] @@ -2289,9 +2188,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", @@ -2376,9 +2275,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook-registry" @@ -2392,9 +2291,9 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" +checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" [[package]] name = "slab" @@ -2410,20 +2309,14 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys", ] -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - [[package]] name = "static_assertions" version = "1.1.0" @@ -2461,7 +2354,7 @@ dependencies = [ [[package]] name = "stratum-core" version = "0.4.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "bitcoin", @@ -2484,7 +2377,7 @@ dependencies = [ [[package]] name = "stratum_translation" version = "0.3.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "bitcoin", @@ -2509,7 +2402,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sv1_api" version = "4.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "bitcoin_hashes 0.3.2", @@ -2536,17 +2429,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -[[package]] -name = "synstructure" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "tap" version = "1.0.1" @@ -2556,7 +2438,7 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "template_distribution_sv2" version = "5.1.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] @@ -2643,20 +2525,25 @@ dependencies = [ ] [[package]] -name = "tinystr" -version = "0.8.2" +name = "tinyvec" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ - "displaydoc", - "zerovec", + "tinyvec_macros", ] +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "tokio" -version = "1.50.0" +version = "1.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" dependencies = [ "bytes", "libc", @@ -2671,9 +2558,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.6.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", @@ -2717,9 +2604,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "1.1.0+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97251a7c317e03ad83774a8752a7e81fb6067740609f75ea2b585b569a59198f" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" dependencies = [ "serde_core", ] @@ -2740,23 +2627,23 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.8+spec-1.1.0" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16bff38f1d86c47f9ff0647e6838d7bb362522bdf44006c7068c2b1e606f1f3c" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap", - "toml_datetime 1.1.0+spec-1.1.0", + "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow 1.0.0", + "winnow 1.0.3", ] [[package]] name = "toml_parser" -version = "1.1.0+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2334f11ee363607eb04df9b8fc8a13ca1715a72ba8662a26ac285c98aabb4011" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.0", + "winnow 1.0.3", ] [[package]] @@ -2887,9 +2774,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "ucd-trie" @@ -2915,17 +2802,38 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + [[package]] name = "unicode-ident" version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +[[package]] +name = "unicode-joining-type" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8d00a78170970967fdb83f9d49b92f959ab2bb829186b113e4f4604ad98e180" + +[[package]] +name = "unicode-normalization" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" +dependencies = [ + "tinyvec", +] + [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-width" @@ -2975,9 +2883,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "utoipa" -version = "5.4.0" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" +checksum = "8bde15df68e80b16c7d16b9616e80770ad158988daa56a27dccd1e55558b0160" dependencies = [ "indexmap", "serde", @@ -2987,9 +2895,9 @@ dependencies = [ [[package]] name = "utoipa-gen" -version = "5.4.0" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b" +checksum = "6ba0b99ee52df3028635d93840c797102da61f8a7bb3cf751032455895b52ef8" dependencies = [ "proc-macro2", "quote", @@ -3052,9 +2960,9 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasm-bindgen" -version = "0.2.114" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" +checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" dependencies = [ "cfg-if", "once_cell", @@ -3065,9 +2973,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.114" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" +checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3075,9 +2983,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.114" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" +checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" dependencies = [ "bumpalo", "proc-macro2", @@ -3088,18 +2996,18 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.114" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" +checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.91" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" +checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" dependencies = [ "js-sys", "wasm-bindgen", @@ -3162,19 +3070,13 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a90e88e4667264a994d34e6d1ab2d26d398dcdca8b7f52bec8668957517fc7d8" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" dependencies = [ "memchr", ] -[[package]] -name = "writeable" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" - [[package]] name = "wyz" version = "0.5.1" @@ -3195,109 +3097,32 @@ dependencies = [ "hashlink", ] -[[package]] -name = "yoke" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" -dependencies = [ - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - [[package]] name = "zerocopy" -version = "0.8.47" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87" +checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.47" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89" +checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" dependencies = [ "proc-macro2", "quote", "syn", ] -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - [[package]] name = "zeroize" version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" -[[package]] -name = "zerotrie" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "zip" version = "3.0.0" diff --git a/pool-apps/Cargo.lock b/pool-apps/Cargo.lock index 2c5953d12..2e43708cc 100644 --- a/pool-apps/Cargo.lock +++ b/pool-apps/Cargo.lock @@ -131,9 +131,9 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.9.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a07d1f37ff60921c83bdfc7407723bdefe89b44b98a9b772f225c8f9d67141a6" +checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207" dependencies = [ "rustversion", ] @@ -186,15 +186,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "axum" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" +checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" dependencies = [ "axum-core", "bytes", @@ -244,12 +244,11 @@ dependencies = [ [[package]] name = "base58ck" -version = "0.1.0" +version = "0.1.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f" +checksum = "ec5dc7e09f7bb15f0062da7c03086d6b71a2c84e0af4fccbbc7d8c6559847816" dependencies = [ - "bitcoin-internals 0.3.0", - "bitcoin_hashes 0.14.1", + "bitcoin_hashes 0.14.100", ] [[package]] @@ -273,7 +272,7 @@ checksum = "32637268377fc7b10a8c6d51de3e7fba1ce5dd371a96e342b34e6078db558e7f" [[package]] name = "binary_sv2" version = "5.0.1" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "buffer_sv2", "derive_codec_sv2", @@ -281,16 +280,15 @@ dependencies = [ [[package]] name = "bitcoin" -version = "0.32.8" +version = "0.32.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e499f9fc0407f50fe98af744ab44fa67d409f76b6772e1689ec8485eb0c0f66" +checksum = "39581299241111285f3268ba75ddf372746fd041620918b145c1af9d75e91b6c" dependencies = [ "base58ck", "bech32", - "bitcoin-internals 0.3.0", "bitcoin-io", "bitcoin-units", - "bitcoin_hashes 0.14.1", + "bitcoin_hashes 0.14.100", "hex-conservative 0.2.2", "hex_lit", "secp256k1 0.29.1", @@ -306,32 +304,17 @@ dependencies = [ "capnpc", ] -[[package]] -name = "bitcoin-internals" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" - -[[package]] -name = "bitcoin-internals" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bdbe14aa07b06e6cfeffc529a1f099e5fbe249524f8125358604df99a4bed2" - [[package]] name = "bitcoin-io" -version = "0.1.4" +version = "0.1.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dee39a0ee5b4095224a0cfc6bf4cc1baf0f9624b96b367e53b66d974e51d953" +checksum = "11301df0b06f22dea7bb1916403fdd88a371031e495c49b8f96931b28189e175" [[package]] name = "bitcoin-units" -version = "0.1.2" +version = "0.1.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5285c8bcaa25876d07f37e3d30c303f2609179716e11d688f51e8f1fe70063e2" -dependencies = [ - "bitcoin-internals 0.3.0", -] +checksum = "57bad157b78d0d1b22c4cbb6a35a566211fc4d14866a37f2c780652b50f3b845" [[package]] name = "bitcoin_core_sv2" @@ -350,19 +333,18 @@ dependencies = [ [[package]] name = "bitcoin_hashes" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +checksum = "446819536d8121575eeb7e89efdbadb3f055e87e4bb66c6679a6d5cc2f4b64fd" dependencies = [ - "bitcoin-internals 0.2.0", "hex-conservative 0.1.2", ] [[package]] name = "bitcoin_hashes" -version = "0.14.1" +version = "0.14.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26ec84b80c482df901772e931a9a681e26a1b9ee2302edeff23cb30328745c8b" +checksum = "0c9901a56e133a1fc86eeb1113e2591f45f4682451ca893bff494d2f88918e3f" dependencies = [ "bitcoin-io", "hex-conservative 0.2.2", @@ -370,9 +352,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.11.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a" dependencies = [ "serde_core", ] @@ -419,16 +401,16 @@ dependencies = [ [[package]] name = "buffer_sv2" version = "3.0.1" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "aes-gcm", ] [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "byte-slice-cast" @@ -450,9 +432,9 @@ checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "capnp" -version = "0.25.4" +version = "0.25.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63da65e5e9ffc3b8f993d4ad222a548152549351a643f6b850a7773cb6ff2809" +checksum = "1cfd2485d4b36ac9c5aa6572d7d35daa63a5b34f517627d6c34d068e616e4a73" dependencies = [ "embedded-io", ] @@ -470,9 +452,9 @@ dependencies = [ [[package]] name = "capnp-rpc" -version = "0.25.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ccca6d26009f4d6c12b741994f33b421da613b5dcf461508e236b53ef862f1" +checksum = "e3c74c337e87f75f3174ffb3513738ab0acc631c04f64cc33b867c60f84771da" dependencies = [ "capnp", "capnp-futures", @@ -490,9 +472,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.58" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "shlex", @@ -531,7 +513,7 @@ dependencies = [ [[package]] name = "channels_sv2" version = "6.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "bitcoin", @@ -560,9 +542,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" dependencies = [ "clap_builder", "clap_derive", @@ -582,9 +564,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" dependencies = [ "heck", "proc-macro2", @@ -601,7 +583,7 @@ checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "codec_sv2" version = "5.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "buffer_sv2", @@ -629,7 +611,7 @@ dependencies = [ [[package]] name = "common_messages_sv2" version = "7.2.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] @@ -684,11 +666,12 @@ dependencies = [ [[package]] name = "const_format" -version = "0.2.35" +version = "0.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" +checksum = "4481a617ad9a412be3b97c5d403fef8ed023103368908b9c50af598ff467cc1e" dependencies = [ "const_format_proc_macros", + "konst", ] [[package]] @@ -771,9 +754,9 @@ dependencies = [ [[package]] name = "dashmap" -version = "6.1.0" +version = "6.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -797,7 +780,7 @@ dependencies = [ [[package]] name = "derive_codec_sv2" version = "1.1.2" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" [[package]] name = "digest" @@ -860,17 +843,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "dlv-list" version = "0.5.2" @@ -926,7 +898,7 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "extensions_sv2" version = "0.1.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] @@ -987,7 +959,7 @@ dependencies = [ [[package]] name = "framing_sv2" version = "6.0.1" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "buffer_sv2", @@ -1122,7 +1094,7 @@ dependencies = [ [[package]] name = "handlers_sv2" version = "0.4.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "common_messages_sv2", @@ -1147,9 +1119,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.1" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "hashlink" @@ -1205,9 +1177,12 @@ dependencies = [ [[package]] name = "hex-conservative" -version = "1.0.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "366fa3443ac84474447710ec17bb00b05dfbd096137817981e86f992f21a2793" +checksum = "35431185f361ccf3ffc58254628af5f1f5d5f28531da2e02e5d6c82bbc282a10" +dependencies = [ + "arrayvec", +] [[package]] name = "hex_lit" @@ -1255,9 +1230,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0" dependencies = [ "bytes", "itoa", @@ -1300,9 +1275,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.8.1" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", @@ -1314,7 +1289,6 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "pin-utils", "smallvec", "tokio", ] @@ -1334,87 +1308,6 @@ dependencies = [ "tower-service", ] -[[package]] -name = "icu_collections" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" -dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" - -[[package]] -name = "icu_properties" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" -dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" - -[[package]] -name = "icu_provider" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" -dependencies = [ - "displaydoc", - "icu_locale_core", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - [[package]] name = "idna" version = "1.1.0" @@ -1428,12 +1321,22 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279259b0ac81c89d11c290495fdcfa96ea3643b7df311c138b6fe8ca5237f0f8" +dependencies = [ + "idna_mapping", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna_mapping" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "11c13906586a4b339310541a274dd927aff6fcbb5b8e3af90634c4b31681c792" dependencies = [ - "icu_normalizer", - "icu_properties", + "unicode-joining-type", ] [[package]] @@ -1464,12 +1367,12 @@ checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" [[package]] name = "indexmap" -version = "2.13.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "serde", "serde_core", ] @@ -1523,18 +1426,20 @@ dependencies = [ [[package]] name = "job_declaration_sv2" -version = "8.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +version = "7.1.0" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] [[package]] name = "js-sys" -version = "0.3.92" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc4c90f45aa2e6eacbe8645f77fdea542ac97a494bcd117a67df9ff4d611f995" +checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" dependencies = [ + "cfg-if", + "futures-util", "once_cell", "wasm-bindgen", ] @@ -1550,6 +1455,21 @@ dependencies = [ "serde", ] +[[package]] +name = "konst" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128133ed7824fcd73d6e7b17957c5eb7bacb885649bd8c69708b2331a10bcefb" +dependencies = [ + "konst_macro_rules", +] + +[[package]] +name = "konst_macro_rules" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4933f3f57a8e9d9da04db23fb153356ecaf00cbd14aee46279c33dc80925c37" + [[package]] name = "lazy_static" version = "1.5.0" @@ -1558,25 +1478,19 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.183" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libredox" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08" +checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ "libc", ] -[[package]] -name = "litemap" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" - [[package]] name = "lock_api" version = "0.4.14" @@ -1588,9 +1502,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "113b30b4cd05f7c06868fdb2854f66a7b9fece9a48425351cd532e810d74024f" [[package]] name = "mach2" @@ -1615,9 +1529,9 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "mime" @@ -1644,20 +1558,20 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "mining_sv2" version = "10.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] [[package]] name = "miniscript" -version = "13.0.0" +version = "13.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "867b1f11e0545ad5ebbddd8a9f18756d9657a6758bf10d96cf15ddd0b726b650" +checksum = "7cfb042402e95bb8a7a2f476bb8896ee1552c2f14224b3d680ac809fb20ff29d" dependencies = [ "bech32", "bitcoin", - "hex-conservative 1.0.1", + "hex-conservative 1.2.0", ] [[package]] @@ -1672,9 +1586,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", @@ -1684,7 +1598,7 @@ dependencies = [ [[package]] name = "noise_sv2" version = "1.4.2" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "aes-gcm", "chacha20poly1305", @@ -1808,7 +1722,7 @@ dependencies = [ [[package]] name = "parsers_sv2" version = "0.4.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "common_messages_sv2", @@ -1880,12 +1794,6 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - [[package]] name = "poly1305" version = "0.8.0" @@ -1926,15 +1834,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "potential_utf" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" -dependencies = [ - "zerovec", -] - [[package]] name = "ppv-lite86" version = "0.2.21" @@ -1974,7 +1873,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.8+spec-1.1.0", + "toml_edit 0.25.12+spec-1.1.0", ] [[package]] @@ -2039,9 +1938,9 @@ checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rand" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" dependencies = [ "libc", "rand_chacha", @@ -2231,7 +2130,7 @@ version = "0.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" dependencies = [ - "bitcoin_hashes 0.13.0", + "bitcoin_hashes 0.13.1", "rand", "secp256k1-sys 0.9.2", ] @@ -2242,7 +2141,7 @@ version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" dependencies = [ - "bitcoin_hashes 0.14.1", + "bitcoin_hashes 0.14.100", "secp256k1-sys 0.10.1", ] @@ -2296,9 +2195,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", @@ -2383,9 +2282,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook-registry" @@ -2417,20 +2316,14 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys", ] -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - [[package]] name = "static_assertions" version = "1.1.0" @@ -2468,7 +2361,7 @@ dependencies = [ [[package]] name = "stratum-core" version = "0.4.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "bitcoin", @@ -2515,17 +2408,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -[[package]] -name = "synstructure" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "tap" version = "1.0.1" @@ -2535,7 +2417,7 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "template_distribution_sv2" version = "5.1.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] @@ -2622,20 +2504,25 @@ dependencies = [ ] [[package]] -name = "tinystr" -version = "0.8.2" +name = "tinyvec" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ - "displaydoc", - "zerovec", + "tinyvec_macros", ] +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "tokio" -version = "1.50.0" +version = "1.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" dependencies = [ "bytes", "libc", @@ -2650,9 +2537,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.6.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", @@ -2696,9 +2583,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "1.1.0+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97251a7c317e03ad83774a8752a7e81fb6067740609f75ea2b585b569a59198f" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" dependencies = [ "serde_core", ] @@ -2719,23 +2606,23 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.8+spec-1.1.0" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16bff38f1d86c47f9ff0647e6838d7bb362522bdf44006c7068c2b1e606f1f3c" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap", - "toml_datetime 1.1.0+spec-1.1.0", + "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow 1.0.0", + "winnow 1.0.3", ] [[package]] name = "toml_parser" -version = "1.1.0+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2334f11ee363607eb04df9b8fc8a13ca1715a72ba8662a26ac285c98aabb4011" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.0", + "winnow 1.0.3", ] [[package]] @@ -2847,9 +2734,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "ucd-trie" @@ -2875,17 +2762,38 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + [[package]] name = "unicode-ident" version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +[[package]] +name = "unicode-joining-type" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8d00a78170970967fdb83f9d49b92f959ab2bb829186b113e4f4604ad98e180" + +[[package]] +name = "unicode-normalization" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" +dependencies = [ + "tinyvec", +] + [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-width" @@ -2935,9 +2843,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "utoipa" -version = "5.4.0" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" +checksum = "8bde15df68e80b16c7d16b9616e80770ad158988daa56a27dccd1e55558b0160" dependencies = [ "indexmap", "serde", @@ -2947,9 +2855,9 @@ dependencies = [ [[package]] name = "utoipa-gen" -version = "5.4.0" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b" +checksum = "6ba0b99ee52df3028635d93840c797102da61f8a7bb3cf751032455895b52ef8" dependencies = [ "proc-macro2", "quote", @@ -3012,9 +2920,9 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasm-bindgen" -version = "0.2.115" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6523d69017b7633e396a89c5efab138161ed5aafcbc8d3e5c5a42ae38f50495a" +checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" dependencies = [ "cfg-if", "once_cell", @@ -3025,9 +2933,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.115" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3a6c758eb2f701ed3d052ff5737f5bfe6614326ea7f3bbac7156192dc32e67" +checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3035,9 +2943,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.115" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "921de2737904886b52bcbb237301552d05969a6f9c40d261eb0533c8b055fedf" +checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" dependencies = [ "bumpalo", "proc-macro2", @@ -3048,18 +2956,18 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.115" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a93e946af942b58934c604527337bad9ae33ba1d5c6900bbb41c2c07c2364a93" +checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.92" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84cde8507f4d7cfcb1185b8cb5890c494ffea65edbe1ba82cfd63661c805ed94" +checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" dependencies = [ "js-sys", "wasm-bindgen", @@ -3122,19 +3030,13 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a90e88e4667264a994d34e6d1ab2d26d398dcdca8b7f52bec8668957517fc7d8" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" dependencies = [ "memchr", ] -[[package]] -name = "writeable" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" - [[package]] name = "wyz" version = "0.5.1" @@ -3155,68 +3057,24 @@ dependencies = [ "hashlink", ] -[[package]] -name = "yoke" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" -dependencies = [ - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - [[package]] name = "zerocopy" -version = "0.8.47" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87" +checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" dependencies = [ "proc-macro2", "quote", "syn", - "synstructure", ] [[package]] @@ -3225,39 +3083,6 @@ version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" -[[package]] -name = "zerotrie" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "zip" version = "3.0.0" diff --git a/stratum-apps/Cargo.lock b/stratum-apps/Cargo.lock index 2bdd3f698..b99fbe754 100644 --- a/stratum-apps/Cargo.lock +++ b/stratum-apps/Cargo.lock @@ -121,9 +121,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "axum" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" +checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" dependencies = [ "axum-core", "bytes", @@ -173,12 +173,11 @@ dependencies = [ [[package]] name = "base58ck" -version = "0.1.0" +version = "0.1.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f" +checksum = "ec5dc7e09f7bb15f0062da7c03086d6b71a2c84e0af4fccbbc7d8c6559847816" dependencies = [ - "bitcoin-internals 0.3.0", - "bitcoin_hashes 0.14.1", + "bitcoin_hashes 0.14.100", ] [[package]] @@ -202,7 +201,7 @@ checksum = "32637268377fc7b10a8c6d51de3e7fba1ce5dd371a96e342b34e6078db558e7f" [[package]] name = "binary_sv2" version = "5.0.1" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "buffer_sv2", "derive_codec_sv2", @@ -210,47 +209,31 @@ dependencies = [ [[package]] name = "bitcoin" -version = "0.32.8" +version = "0.32.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e499f9fc0407f50fe98af744ab44fa67d409f76b6772e1689ec8485eb0c0f66" +checksum = "39581299241111285f3268ba75ddf372746fd041620918b145c1af9d75e91b6c" dependencies = [ "base58ck", "bech32", - "bitcoin-internals 0.3.0", "bitcoin-io", "bitcoin-units", - "bitcoin_hashes 0.14.1", + "bitcoin_hashes 0.14.100", "hex-conservative 0.2.2", "hex_lit", "secp256k1 0.29.1", ] -[[package]] -name = "bitcoin-internals" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" - -[[package]] -name = "bitcoin-internals" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bdbe14aa07b06e6cfeffc529a1f099e5fbe249524f8125358604df99a4bed2" - [[package]] name = "bitcoin-io" -version = "0.1.4" +version = "0.1.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dee39a0ee5b4095224a0cfc6bf4cc1baf0f9624b96b367e53b66d974e51d953" +checksum = "11301df0b06f22dea7bb1916403fdd88a371031e495c49b8f96931b28189e175" [[package]] name = "bitcoin-units" -version = "0.1.2" +version = "0.1.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5285c8bcaa25876d07f37e3d30c303f2609179716e11d688f51e8f1fe70063e2" -dependencies = [ - "bitcoin-internals 0.3.0", -] +checksum = "57bad157b78d0d1b22c4cbb6a35a566211fc4d14866a37f2c780652b50f3b845" [[package]] name = "bitcoin_hashes" @@ -263,19 +246,18 @@ dependencies = [ [[package]] name = "bitcoin_hashes" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +checksum = "446819536d8121575eeb7e89efdbadb3f055e87e4bb66c6679a6d5cc2f4b64fd" dependencies = [ - "bitcoin-internals 0.2.0", "hex-conservative 0.1.2", ] [[package]] name = "bitcoin_hashes" -version = "0.14.1" +version = "0.14.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26ec84b80c482df901772e931a9a681e26a1b9ee2302edeff23cb30328745c8b" +checksum = "0c9901a56e133a1fc86eeb1113e2591f45f4682451ca893bff494d2f88918e3f" dependencies = [ "bitcoin-io", "hex-conservative 0.2.2", @@ -283,9 +265,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.11.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a" dependencies = [ "serde_core", ] @@ -332,16 +314,16 @@ dependencies = [ [[package]] name = "buffer_sv2" version = "3.0.1" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "aes-gcm", ] [[package]] name = "bumpalo" -version = "3.20.1" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6f81257d10a0f602a294ae4182251151ff97dbb504ef9afcdda4a64b24d9b4" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "byte-slice-cast" @@ -363,9 +345,9 @@ checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "cc" -version = "1.2.56" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "shlex", @@ -404,7 +386,7 @@ dependencies = [ [[package]] name = "channels_sv2" version = "6.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "bitcoin", @@ -428,7 +410,7 @@ dependencies = [ [[package]] name = "codec_sv2" version = "5.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "buffer_sv2", @@ -441,7 +423,7 @@ dependencies = [ [[package]] name = "common_messages_sv2" version = "7.2.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] @@ -496,11 +478,12 @@ dependencies = [ [[package]] name = "const_format" -version = "0.2.35" +version = "0.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" +checksum = "4481a617ad9a412be3b97c5d403fef8ed023103368908b9c50af598ff467cc1e" dependencies = [ "const_format_proc_macros", + "konst", ] [[package]] @@ -574,9 +557,9 @@ dependencies = [ [[package]] name = "dashmap" -version = "6.1.0" +version = "6.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -600,7 +583,7 @@ dependencies = [ [[package]] name = "derive_codec_sv2" version = "1.1.2" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" [[package]] name = "digest" @@ -639,14 +622,14 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -684,7 +667,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -696,7 +679,7 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "extensions_sv2" version = "0.1.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] @@ -747,7 +730,7 @@ dependencies = [ [[package]] name = "framing_sv2" version = "6.0.1" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "buffer_sv2", @@ -882,7 +865,7 @@ dependencies = [ [[package]] name = "handlers_sv2" version = "0.4.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "common_messages_sv2", @@ -907,9 +890,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.1" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "hashlink" @@ -943,9 +926,12 @@ dependencies = [ [[package]] name = "hex-conservative" -version = "1.0.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "366fa3443ac84474447710ec17bb00b05dfbd096137817981e86f992f21a2793" +checksum = "35431185f361ccf3ffc58254628af5f1f5d5f28531da2e02e5d6c82bbc282a10" +dependencies = [ + "arrayvec", +] [[package]] name = "hex_lit" @@ -955,9 +941,9 @@ checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" [[package]] name = "http" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0" dependencies = [ "bytes", "itoa", @@ -1000,9 +986,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.8.1" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" dependencies = [ "atomic-waker", "bytes", @@ -1014,7 +1000,6 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "pin-utils", "smallvec", "tokio", ] @@ -1036,12 +1021,13 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" dependencies = [ "displaydoc", "potential_utf", + "utf8_iter", "yoke", "zerofrom", "zerovec", @@ -1049,9 +1035,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ "displaydoc", "litemap", @@ -1062,9 +1048,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -1076,15 +1062,15 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" [[package]] name = "icu_properties" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" dependencies = [ "icu_collections", "icu_locale_core", @@ -1096,15 +1082,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" [[package]] name = "icu_provider" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ "displaydoc", "icu_locale_core", @@ -1128,9 +1114,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", "icu_properties", @@ -1158,12 +1144,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.13.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "serde", "serde_core", ] @@ -1179,14 +1165,14 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "job_declaration_sv2" -version = "8.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +version = "7.1.0" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] @@ -1202,6 +1188,21 @@ dependencies = [ "serde", ] +[[package]] +name = "konst" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128133ed7824fcd73d6e7b17957c5eb7bacb885649bd8c69708b2331a10bcefb" +dependencies = [ + "konst_macro_rules", +] + +[[package]] +name = "konst_macro_rules" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4933f3f57a8e9d9da04db23fb153356ecaf00cbd14aee46279c33dc80925c37" + [[package]] name = "lazy_static" version = "1.5.0" @@ -1210,25 +1211,24 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.182" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libredox" -version = "0.1.12" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" +checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ - "bitflags", "libc", ] [[package]] name = "litemap" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "lock_api" @@ -1241,9 +1241,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "113b30b4cd05f7c06868fdb2854f66a7b9fece9a48425351cd532e810d74024f" [[package]] name = "matchers" @@ -1262,9 +1262,9 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "mime" @@ -1291,20 +1291,20 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "mining_sv2" version = "10.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] [[package]] name = "miniscript" -version = "13.0.0" +version = "13.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "867b1f11e0545ad5ebbddd8a9f18756d9657a6758bf10d96cf15ddd0b726b650" +checksum = "7cfb042402e95bb8a7a2f476bb8896ee1552c2f14224b3d680ac809fb20ff29d" dependencies = [ "bech32", "bitcoin", - "hex-conservative 1.0.1", + "hex-conservative 1.2.0", ] [[package]] @@ -1319,19 +1319,19 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "wasi", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] name = "noise_sv2" version = "1.4.2" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "aes-gcm", "chacha20poly1305", @@ -1355,14 +1355,14 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "opaque-debug" @@ -1440,7 +1440,7 @@ dependencies = [ [[package]] name = "parsers_sv2" version = "0.4.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "common_messages_sv2", @@ -1508,15 +1508,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "poly1305" @@ -1543,9 +1537,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" dependencies = [ "zerovec", ] @@ -1572,11 +1566,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.23.10+spec-1.0.0", + "toml_edit 0.25.12+spec-1.1.0", ] [[package]] @@ -1611,9 +1605,9 @@ checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" [[package]] name = "quote" -version = "1.0.44" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -1626,9 +1620,9 @@ checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rand" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" dependencies = [ "libc", "rand_chacha", @@ -1699,9 +1693,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "ron" @@ -1798,7 +1792,7 @@ version = "0.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" dependencies = [ - "bitcoin_hashes 0.13.0", + "bitcoin_hashes 0.13.1", "rand", "secp256k1-sys 0.9.2", ] @@ -1809,7 +1803,7 @@ version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" dependencies = [ - "bitcoin_hashes 0.14.1", + "bitcoin_hashes 0.14.100", "secp256k1-sys 0.10.1", ] @@ -1863,9 +1857,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", @@ -1941,18 +1935,18 @@ dependencies = [ [[package]] name = "shellexpand" -version = "3.1.1" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1fdf65dd6331831494dd616b30351c38e96e45921a27745cf98490458b90bb" +checksum = "32824fab5e16e6c4d86dc1ba84489390419a39f97699852b66480bb87d297ed8" dependencies = [ "dirs", ] [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook-registry" @@ -1966,9 +1960,9 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" +checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" [[package]] name = "slab" @@ -1984,12 +1978,12 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.6.2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys", ] [[package]] @@ -2038,7 +2032,7 @@ dependencies = [ [[package]] name = "stratum-core" version = "0.4.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "bitcoin", @@ -2061,7 +2055,7 @@ dependencies = [ [[package]] name = "stratum_translation" version = "0.3.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "bitcoin", @@ -2080,7 +2074,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sv1_api" version = "4.0.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", "bitcoin_hashes 0.3.2", @@ -2092,9 +2086,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.116" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -2127,7 +2121,7 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "template_distribution_sv2" version = "5.1.0" -source = "git+https://github.com/stratum-mining/stratum?branch=main#e86cb027d911bca20216e3fd5acec993983483eb" +source = "git+https://github.com/marafoundation/stratum?branch=vardiff%2Fsimulation-framework#82c54e489c72e0a44dc5d208f2783b53d5e7392a" dependencies = [ "binary_sv2", ] @@ -2192,9 +2186,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", "zerovec", @@ -2202,9 +2196,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.49.0" +version = "1.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" dependencies = [ "bytes", "libc", @@ -2214,14 +2208,14 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.61.2", + "windows-sys", ] [[package]] name = "tokio-macros" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", @@ -2264,9 +2258,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.5+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" dependencies = [ "serde_core", ] @@ -2282,28 +2276,28 @@ dependencies = [ "serde_spanned", "toml_datetime 0.6.11", "toml_write", - "winnow", + "winnow 0.7.15", ] [[package]] name = "toml_edit" -version = "0.23.10+spec-1.0.0" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap", - "toml_datetime 0.7.5+spec-1.1.0", + "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow", + "winnow 1.0.3", ] [[package]] name = "toml_parser" -version = "1.0.9+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow", + "winnow 1.0.3", ] [[package]] @@ -2386,9 +2380,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.22" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" dependencies = [ "matchers", "nu-ansi-term", @@ -2415,9 +2409,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "ucd-trie" @@ -2451,9 +2445,9 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-xid" @@ -2491,9 +2485,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "utoipa" -version = "5.4.0" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" +checksum = "8bde15df68e80b16c7d16b9616e80770ad158988daa56a27dccd1e55558b0160" dependencies = [ "indexmap", "serde", @@ -2503,9 +2497,9 @@ dependencies = [ [[package]] name = "utoipa-gen" -version = "5.4.0" +version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b" +checksum = "6ba0b99ee52df3028635d93840c797102da61f8a7bb3cf751032455895b52ef8" dependencies = [ "proc-macro2", "quote", @@ -2572,7 +2566,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys", ] [[package]] @@ -2581,15 +2575,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets", -] - [[package]] name = "windows-sys" version = "0.61.2" @@ -2600,84 +2585,28 @@ dependencies = [ ] [[package]] -name = "windows-targets" -version = "0.53.5" +name = "winnow" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" dependencies = [ - "windows-link", - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "memchr", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - [[package]] name = "winnow" -version = "0.7.14" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" dependencies = [ "memchr", ] [[package]] name = "writeable" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "wyz" @@ -2701,9 +2630,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -2712,9 +2641,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", @@ -2724,18 +2653,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.39" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" +checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.39" +version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" +checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" dependencies = [ "proc-macro2", "quote", @@ -2744,18 +2673,18 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", @@ -2771,9 +2700,9 @@ checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" [[package]] name = "zerotrie" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" dependencies = [ "displaydoc", "yoke", @@ -2782,9 +2711,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ "yoke", "zerofrom", @@ -2793,9 +2722,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", @@ -2818,9 +2747,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c745c48e1007337ed136dc99df34128b9faa6ed542d80a1c673cf55a6d7236c8" +checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" [[package]] name = "zmij" diff --git a/stratum-apps/Cargo.toml b/stratum-apps/Cargo.toml index 21eaee9fa..b1051bf4e 100644 --- a/stratum-apps/Cargo.toml +++ b/stratum-apps/Cargo.toml @@ -16,7 +16,7 @@ keywords = ["stratum", "mining", "bitcoin", "protocol", "sv2"] # fetching from github enables synchronizing development workflows across sv2-apps and stratum repos # it MUST be changed before stratum-apps is published to crates.io # with the proper version of stratum-core being fetched from crates.io as well -stratum-core = { git = "https://github.com/stratum-mining/stratum", branch = "main", optional = true } +stratum-core = { git = "https://github.com/marafoundation/stratum", branch = "vardiff/simulation-framework", optional = true } # External dependencies needed by the modules # Network helpers dependencies diff --git a/test-tools/shape-proxy/Cargo.lock b/test-tools/shape-proxy/Cargo.lock new file mode 100644 index 000000000..a1270fdb9 --- /dev/null +++ b/test-tools/shape-proxy/Cargo.lock @@ -0,0 +1,2373 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "anstream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "anstyle-parse" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys", +] + +[[package]] +name = "arraydeque" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "axum" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" +dependencies = [ + "axum-core", + "bytes", + "form_urlencoded", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "serde_core", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "base58ck" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f" +dependencies = [ + "bitcoin-internals", + "bitcoin_hashes 0.14.1", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bech32" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32637268377fc7b10a8c6d51de3e7fba1ce5dd371a96e342b34e6078db558e7f" + +[[package]] +name = "binary_sv2" +version = "5.0.1" +source = "git+https://github.com/stratum-mining/stratum?branch=main#d22856291d79b8085ab12a364b847ef335ea1690" +dependencies = [ + "derive_codec_sv2", +] + +[[package]] +name = "bitcoin" +version = "0.32.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf93e61f2dbc3e3c41234ca26a65e2c0b0975c52e0f069ab9893ebbede584d3" +dependencies = [ + "base58ck", + "bech32", + "bitcoin-internals", + "bitcoin-io", + "bitcoin-units", + "bitcoin_hashes 0.14.1", + "hex-conservative 0.2.2", + "hex_lit", + "secp256k1 0.29.1", +] + +[[package]] +name = "bitcoin-internals" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30bdbe14aa07b06e6cfeffc529a1f099e5fbe249524f8125358604df99a4bed2" + +[[package]] +name = "bitcoin-io" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dee39a0ee5b4095224a0cfc6bf4cc1baf0f9624b96b367e53b66d974e51d953" + +[[package]] +name = "bitcoin-units" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346568ebaab2918487cea76dd55dae13c27bb618cdb737c952e69eb2017c4118" +dependencies = [ + "bitcoin-internals", +] + +[[package]] +name = "bitcoin_hashes" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446819536d8121575eeb7e89efdbadb3f055e87e4bb66c6679a6d5cc2f4b64fd" +dependencies = [ + "hex-conservative 0.1.2", +] + +[[package]] +name = "bitcoin_hashes" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26ec84b80c482df901772e931a9a681e26a1b9ee2302edeff23cb30328745c8b" +dependencies = [ + "bitcoin-io", + "hex-conservative 0.2.2", +] + +[[package]] +name = "bitflags" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +dependencies = [ + "serde_core", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" +dependencies = [ + "sha2 0.9.9", +] + +[[package]] +name = "buffer_sv2" +version = "3.0.1" +source = "git+https://github.com/stratum-mining/stratum?branch=main#d22856291d79b8085ab12a364b847ef335ea1690" +dependencies = [ + "aes-gcm", +] + +[[package]] +name = "byte-slice-cast" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" + +[[package]] +name = "cc" +version = "1.2.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + +[[package]] +name = "channels_sv2" +version = "6.0.0" +source = "git+https://github.com/stratum-mining/stratum?branch=main#d22856291d79b8085ab12a364b847ef335ea1690" +dependencies = [ + "binary_sv2", + "bitcoin", + "mining_sv2", + "primitive-types", + "template_distribution_sv2", + "tracing", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", + "zeroize", +] + +[[package]] +name = "clap" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" + +[[package]] +name = "codec_sv2" +version = "5.0.0" +source = "git+https://github.com/stratum-mining/stratum?branch=main#d22856291d79b8085ab12a364b847ef335ea1690" +dependencies = [ + "binary_sv2", + "buffer_sv2", + "framing_sv2", + "noise_sv2", + "rand", + "tracing", +] + +[[package]] +name = "colorchoice" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" + +[[package]] +name = "common_messages_sv2" +version = "7.2.0" +source = "git+https://github.com/stratum-mining/stratum?branch=main#d22856291d79b8085ab12a364b847ef335ea1690" +dependencies = [ + "binary_sv2", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "config" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68578f196d2a33ff61b27fae256c3164f65e36382648e30666dde05b8cc9dfdf" +dependencies = [ + "async-trait", + "convert_case", + "json5", + "nom", + "pathdiff", + "ron", + "rust-ini", + "serde", + "serde_json", + "toml", + "yaml-rust2", +] + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "const_format" +version = "0.2.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4481a617ad9a412be3b97c5d403fef8ed023103368908b9c50af598ff467cc1e" +dependencies = [ + "const_format_proc_macros", + "konst", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "dashmap" +version = "6.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "derive_codec_sv2" +version = "1.1.2" +source = "git+https://github.com/stratum-mining/stratum?branch=main#d22856291d79b8085ab12a364b847ef335ea1690" + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys", +] + +[[package]] +name = "dlv-list" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" +dependencies = [ + "const-random", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "extensions_sv2" +version = "0.1.0" +source = "git+https://github.com/stratum-mining/stratum?branch=main#d22856291d79b8085ab12a364b847ef335ea1690" +dependencies = [ + "binary_sv2", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "framing_sv2" +version = "6.0.1" +source = "git+https://github.com/stratum-mining/stratum?branch=main#d22856291d79b8085ab12a364b847ef335ea1690" +dependencies = [ + "binary_sv2", + "noise_sv2", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-executor" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" + +[[package]] +name = "futures-macro" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "handlers_sv2" +version = "0.4.0" +source = "git+https://github.com/stratum-mining/stratum?branch=main#d22856291d79b8085ab12a364b847ef335ea1690" +dependencies = [ + "binary_sv2", + "common_messages_sv2", + "extensions_sv2", + "framing_sv2", + "job_declaration_sv2", + "mining_sv2", + "parsers_sv2", + "template_distribution_sv2", + "trait-variant", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-conservative" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" + +[[package]] +name = "hex-conservative" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda06d18ac606267c40c04e41b9947729bf8b9efe74bd4e82b61a5f26a510b9f" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "hex-conservative" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7289f6b628ce69fb1a371d0fdcf8ff38cd93ec00e3010eb055d1e044998c8d1" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "hex_lit" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" + +[[package]] +name = "http" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "bytes", + "http", + "http-body", + "hyper", + "pin-project-lite", + "tokio", + "tower-service", +] + +[[package]] +name = "impl-codec" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d40b9d5e17727407e55028eafc22b2dc68781786e6d7eb8a21103f5058e3a14" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "job_declaration_sv2" +version = "7.1.0" +source = "git+https://github.com/stratum-mining/stratum?branch=main#d22856291d79b8085ab12a364b847ef335ea1690" +dependencies = [ + "binary_sv2", +] + +[[package]] +name = "json5" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + +[[package]] +name = "konst" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128133ed7824fcd73d6e7b17957c5eb7bacb885649bd8c69708b2331a10bcefb" +dependencies = [ + "konst_macro_rules", +] + +[[package]] +name = "konst_macro_rules" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4933f3f57a8e9d9da04db23fb153356ecaf00cbd14aee46279c33dc80925c37" + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "libredox" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" +dependencies = [ + "libc", +] + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matchit" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "mining_sv2" +version = "10.0.0" +source = "git+https://github.com/stratum-mining/stratum?branch=main#d22856291d79b8085ab12a364b847ef335ea1690" +dependencies = [ + "binary_sv2", +] + +[[package]] +name = "miniscript" +version = "13.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "867b1f11e0545ad5ebbddd8a9f18756d9657a6758bf10d96cf15ddd0b726b650" +dependencies = [ + "bech32", + "bitcoin", + "hex-conservative 1.1.0", +] + +[[package]] +name = "mio" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +dependencies = [ + "libc", + "wasi", + "windows-sys", +] + +[[package]] +name = "noise_sv2" +version = "1.4.2" +source = "git+https://github.com/stratum-mining/stratum?branch=main#d22856291d79b8085ab12a364b847ef335ea1690" +dependencies = [ + "aes-gcm", + "chacha20poly1305", + "rand", + "secp256k1 0.28.2", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-multimap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79" +dependencies = [ + "dlv-list", + "hashbrown 0.14.5", +] + +[[package]] +name = "parity-scale-codec" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "parsers_sv2" +version = "0.4.0" +source = "git+https://github.com/stratum-mining/stratum?branch=main#d22856291d79b8085ab12a364b847ef335ea1690" +dependencies = [ + "binary_sv2", + "common_messages_sv2", + "extensions_sv2", + "framing_sv2", + "job_declaration_sv2", + "mining_sv2", + "template_distribution_sv2", +] + +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pest" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" +dependencies = [ + "memchr", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pest_meta" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" +dependencies = [ + "pest", + "sha2 0.10.9", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "primitive-types" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15600a7d856470b7d278b3fe0e311fe28c2526348549f8ef2ff7db3299c87f5" +dependencies = [ + "fixed-hash", + "impl-codec", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit 0.25.11+spec-1.1.0", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prometheus" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot", + "protobuf", + "thiserror 1.0.69", +] + +[[package]] +name = "protobuf" +version = "2.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom", + "libredox", + "thiserror 2.0.18", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" + +[[package]] +name = "ron" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +dependencies = [ + "base64", + "bitflags", + "serde", + "serde_derive", +] + +[[package]] +name = "rust-ini" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0698206bcb8882bf2a9ecb4c1e7785db57ff052297085a6efd4fe42302068a" +dependencies = [ + "cfg-if", + "ordered-multimap", +] + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "secp256k1" +version = "0.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" +dependencies = [ + "bitcoin_hashes 0.13.1", + "rand", + "secp256k1-sys 0.9.2", +] + +[[package]] +name = "secp256k1" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" +dependencies = [ + "bitcoin_hashes 0.14.1", + "secp256k1-sys 0.10.1", +] + +[[package]] +name = "secp256k1-sys" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" +dependencies = [ + "cc", +] + +[[package]] +name = "secp256k1-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" +dependencies = [ + "cc", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +dependencies = [ + "itoa", + "serde", + "serde_core", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "shape-proxy" +version = "0.1.0" +dependencies = [ + "axum", + "clap", + "prometheus", + "serde", + "serde_json", + "stratum-apps", + "tokio", + "toml", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shellexpand" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32824fab5e16e6c4d86dc1ba84489390419a39f97699852b66480bb87d297ed8" +dependencies = [ + "dirs", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "stratum-apps" +version = "0.5.0" +dependencies = [ + "async-channel", + "bs58", + "config", + "dashmap", + "dirs", + "futures", + "miniscript", + "rand", + "rustversion", + "secp256k1 0.28.2", + "serde", + "shellexpand", + "stratum-core", + "tokio", + "tokio-util", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "stratum-core" +version = "0.4.0" +source = "git+https://github.com/stratum-mining/stratum?branch=main#d22856291d79b8085ab12a364b847ef335ea1690" +dependencies = [ + "binary_sv2", + "bitcoin", + "buffer_sv2", + "channels_sv2", + "codec_sv2", + "common_messages_sv2", + "extensions_sv2", + "framing_sv2", + "handlers_sv2", + "job_declaration_sv2", + "mining_sv2", + "noise_sv2", + "parsers_sv2", + "template_distribution_sv2", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "template_distribution_sv2" +version = "5.1.0" +source = "git+https://github.com/stratum-mining/stratum?branch=main#d22856291d79b8085ab12a364b847ef335ea1690" +dependencies = [ + "binary_sv2", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl 2.0.18", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tokio" +version = "1.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys", +] + +[[package]] +name = "tokio-macros" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime 0.6.11", + "toml_write", + "winnow 0.7.15", +] + +[[package]] +name = "toml_edit" +version = "0.25.11+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" +dependencies = [ + "indexmap", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.3", +] + +[[package]] +name = "toml_parser" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +dependencies = [ + "winnow 1.0.3", +] + +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "trait-variant" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "typenum" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "uint" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "909988d098b2f738727b161a106cfc7cab00c539c2687a8836f8e565976fb53e" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-segmentation" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +dependencies = [ + "memchr", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "yaml-rust2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8902160c4e6f2fb145dbe9d6760a75e3c9522d8bf796ed7047c85919ac7115f8" +dependencies = [ + "arraydeque", + "encoding_rs", + "hashlink", +] + +[[package]] +name = "zerocopy" +version = "0.8.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/test-tools/shape-proxy/Cargo.toml b/test-tools/shape-proxy/Cargo.toml new file mode 100644 index 000000000..e3420da3c --- /dev/null +++ b/test-tools/shape-proxy/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "shape-proxy" +version = "0.1.0" +edition = "2021" +authors = ["The Stratum V2 Developers"] +description = "SV2 share-gating proxy for testing pool difficulty adjustment algorithms" +license = "MIT OR Apache-2.0" + +[[bin]] +name = "shape-proxy" +path = "src/main.rs" + +[dependencies] +stratum-apps = { path = "../../stratum-apps", features = ["network", "config"] } + +tokio = { version = "1.44", features = ["full"] } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +toml = "0.8" +tracing = "0.1" +tracing-subscriber = { version = "0.3", features = ["env-filter"] } +clap = { version = "4", features = ["derive"] } +axum = "0.8" +prometheus = "0.13" diff --git a/test-tools/shape-proxy/README.md b/test-tools/shape-proxy/README.md new file mode 100644 index 000000000..e7b738399 --- /dev/null +++ b/test-tools/shape-proxy/README.md @@ -0,0 +1,162 @@ +# Shape-Proxy + +SV2 share-gating proxy for testing pool difficulty adjustment algorithms. Sits +between mining devices and a pool, enabling controlled modification of the share +submission rate without touching mining hardware. + +Modulating share streams against a live pool is otherwise difficult — miners +produce shares at a rate determined by physics, not configuration. This tool +complements the vardiff simulation framework by providing calibration testing +against real pool infrastructure with real miners. + +``` +[Miner(s)] <--SV2/Noise--> [Shape-Proxy] <--SV2/Noise--> [Pool] + | + HTTP API +``` + +## Building + +```bash +cargo build --release --manifest-path test-tools/shape-proxy/Cargo.toml +``` + +## Usage + +```bash +shape-proxy --config config.example.toml +``` + +Set `RUST_LOG=shape_proxy=debug` for verbose output. + +## Configuration + +See [`config.example.toml`](config.example.toml) for all options. Key settings: + +| Field | Description | +|-------|-------------| +| `upstream_address` | Pool's SV2 address | +| `downstream_listen` | Address miners connect to | +| `api_listen` | HTTP API bind address | +| `min_downstream_difficulty` | Difficulty floor (0 = disabled) | + +## HTTP API + +The API has no authentication. Bind `api_listen` to `127.0.0.1` if the +host is network-accessible and you don't want external profile control. + +### `GET /status` + +Returns JSON with upstream connection state and per-channel metrics: + +```json +{ + "upstream_connected": true, + "channels": [{ + "id": 1, + "miner_connected": true, + "profile": {"type": "track", "description": "1.0x supply"}, + "target_spm": 60.0, + "forwarded_spm": 59.8, + "supply_spm": 60.2, + "headroom": "comfortable", + "shares_forwarded": 120, + "shares_gated": 5 + }] +} +``` + +### `POST /profile` + +Set profile for all channels. + +### `POST /channels/{id}/profile` + +Set profile for a specific channel. + +## Rate Profiles + +Profiles control how shares are gated. All values are **supply-relative +multipliers** (e.g., 0.5 = forward 50% of measured hashrate). Set dynamically +via the HTTP API. + +### Track (default) + +Forward a constant fraction of supply. + +```json +{"type": "track", "factor": 1.0} +``` + +### Step + +Instant transition between two factors at a given time. + +```json +{"type": "step", "before": 1.0, "after": 0.5, "at_secs": 300} +``` + +### Ramp + +Linear interpolation between two factors over a duration. + +```json +{"type": "ramp", "from": 0.5, "to": 1.0, "duration_secs": 600} +``` + +### Stall + +Drop to zero for a period, then resume at 100%. + +```json +{"type": "stall", "at_secs": 120, "duration_secs": 60} +``` + +### Burst + +Spike to a higher factor for a period. + +```json +{"type": "burst", "base": 0.8, "peak": 1.5, "at_secs": 180, "duration_secs": 60} +``` + +### Oscillate + +Sinusoidal wave: `factor = base + amp * sin(2pi * t / period)`. + +```json +{"type": "oscillate", "base": 0.9, "amp": 0.1, "period_secs": 300} +``` + +## Architecture + +### Share Gating + +The proxy uses a token bucket to smooth share flow: + +- **Capacity**: 10 seconds of tokens at the target rate (minimum 3) +- **Refill**: target_spm / 60 tokens per second +- **Supply measurement**: count-based window (last 15 shares, difficulty-weighted) + +Each arriving share is immediately ACKed to the miner (decoupling it from +pool behavior), then the gate decides whether to forward or drop. + +### Difficulty Handling + +The proxy forwards `SetTarget` from pool to miner so shares always meet the +pool's current difficulty. Supply is tracked as difficulty-weighted shares +(true hashrate), making relative profiles stable regardless of vardiff changes. + +An optional difficulty floor (`min_downstream_difficulty`) absorbs SetTarget +messages that would lower difficulty below the configured threshold. + +### Connection Resilience + +- **Upstream**: Reconnects with exponential backoff (1s to 30s). Miners stay + connected during pool disconnects; channels are re-opened on reconnect. +- **Downstream**: Each miner runs in its own task. Disconnect cleans up + associated channel mappings. + +## License + +MIT OR Apache-2.0 diff --git a/test-tools/shape-proxy/config.example.toml b/test-tools/shape-proxy/config.example.toml new file mode 100644 index 000000000..6aba5d00f --- /dev/null +++ b/test-tools/shape-proxy/config.example.toml @@ -0,0 +1,27 @@ +# Shape-Proxy Configuration +# See README.md for full documentation. + +# Pool upstream address (SV2 Noise connection) +upstream_address = "127.0.0.1:34254" + +# Address to listen for downstream miners +downstream_listen = "0.0.0.0:34260" + +# HTTP API address for status and profile control +api_listen = "0.0.0.0:8080" + +# Proxy's own Noise keypair (for downstream miners) +# EXAMPLE ONLY — generate unique keys for each deployment +authority_pubkey = "9auqWEzQDVyd2oe1JVGFLMLHZtCo2FFqZwtKA5gd9xbuEu7PH72" +authority_secret = "mkDLTBBRxdBv998612qipDYoTK3YUrqLe8uWw7LfzDJmwMcjdYj" + +# Upstream pool's authority pubkey (optional, omit to skip verification) +# upstream_authority_pubkey = "..." + +# Minimum difficulty floor for downstream miners (0 = disabled). +# When enabled, SetTarget messages below this difficulty are absorbed +# to prevent the pool from lowering difficulty too far. +# min_downstream_difficulty = 1024.0 + +# Certificate validity for downstream Noise handshakes (seconds) +# cert_validity_secs = 86400 diff --git a/test-tools/shape-proxy/src/api.rs b/test-tools/shape-proxy/src/api.rs new file mode 100644 index 000000000..8f8ad864e --- /dev/null +++ b/test-tools/shape-proxy/src/api.rs @@ -0,0 +1,165 @@ +use std::sync::Arc; + +use axum::{ + extract::{Path, State}, + http::StatusCode, + response::Json, + routing::{get, post}, + Router, +}; +use serde::{Deserialize, Serialize}; +use tokio::sync::{mpsc, watch}; + +use crate::profile::RateProfile; + +#[derive(Debug)] +pub enum ApiCommand { + SetProfile { + channel_id: u32, + profile: RateProfile, + }, + SetAllProfiles { + profile: RateProfile, + }, +} + +#[derive(Debug, Clone, Serialize, Default)] +pub struct ProxyStatus { + pub upstream_connected: bool, + pub channels: Vec, +} + +#[derive(Debug, Clone, Serialize)] +pub struct ChannelStatus { + pub id: u32, + pub miner_connected: bool, + pub profile: ProfileInfo, + pub profile_elapsed_secs: f64, + pub profile_duration_secs: Option, + pub target_spm: f64, + pub forwarded_spm: f64, + pub supply_spm: f64, + pub headroom: String, + pub floor_active: bool, + pub pool_difficulty: Option, + pub miner_difficulty: f64, + pub shares_forwarded: u64, + pub shares_gated: u64, +} + +#[derive(Debug, Clone, Serialize)] +pub struct ProfileInfo { + #[serde(rename = "type")] + pub profile_type: String, + pub description: String, +} + +impl ProfileInfo { + pub fn from_profile(p: &RateProfile) -> Self { + match p { + RateProfile::Track { factor } => ProfileInfo { + profile_type: "track".into(), + description: format!("{:.1}× supply", factor), + }, + RateProfile::Step { + before, + after, + at_secs, + } => ProfileInfo { + profile_type: "step".into(), + description: format!("{:.1}× → {:.1}× @ {:.0}s", before, after, at_secs), + }, + RateProfile::Ramp { + from, + to, + duration_secs, + } => ProfileInfo { + profile_type: "ramp".into(), + description: format!("{:.1}× → {:.1}× over {:.0}s", from, to, duration_secs), + }, + RateProfile::Stall { + at_secs, + duration_secs, + } => ProfileInfo { + profile_type: "stall".into(), + description: format!("zero @ {:.0}s for {:.0}s", at_secs, duration_secs), + }, + RateProfile::Burst { + base, + peak, + at_secs, + duration_secs, + } => ProfileInfo { + profile_type: "burst".into(), + description: format!( + "{:.1}× → {:.1}× @ {:.0}s for {:.0}s", + base, peak, at_secs, duration_secs + ), + }, + RateProfile::Oscillate { + base, + amp, + period_secs, + } => ProfileInfo { + profile_type: "oscillate".into(), + description: format!("{:.1}±{:.1}×, period {:.0}s", base, amp, period_secs), + }, + } + } +} + +struct AppState { + status_rx: watch::Receiver, + cmd_tx: mpsc::UnboundedSender, +} + +pub fn create_router( + status_rx: watch::Receiver, + cmd_tx: mpsc::UnboundedSender, +) -> Router { + let state = Arc::new(AppState { status_rx, cmd_tx }); + + Router::new() + .route("/status", get(get_status)) + .route("/channels/{id}/profile", post(set_channel_profile)) + .route("/profile", post(set_all_profiles)) + .with_state(state) +} + +async fn get_status(State(state): State>) -> Json { + Json(state.status_rx.borrow().clone()) +} + +#[derive(Deserialize)] +struct ProfileRequest { + #[serde(flatten)] + profile: RateProfile, +} + +async fn set_channel_profile( + State(state): State>, + Path(id): Path, + Json(req): Json, +) -> StatusCode { + let cmd = ApiCommand::SetProfile { + channel_id: id, + profile: req.profile, + }; + match state.cmd_tx.send(cmd) { + Ok(_) => StatusCode::OK, + Err(_) => StatusCode::INTERNAL_SERVER_ERROR, + } +} + +async fn set_all_profiles( + State(state): State>, + Json(req): Json, +) -> StatusCode { + let cmd = ApiCommand::SetAllProfiles { + profile: req.profile, + }; + match state.cmd_tx.send(cmd) { + Ok(_) => StatusCode::OK, + Err(_) => StatusCode::INTERNAL_SERVER_ERROR, + } +} diff --git a/test-tools/shape-proxy/src/config.rs b/test-tools/shape-proxy/src/config.rs new file mode 100644 index 000000000..9b002b042 --- /dev/null +++ b/test-tools/shape-proxy/src/config.rs @@ -0,0 +1,39 @@ +use std::net::SocketAddr; +use std::path::Path; + +use serde::Deserialize; + +#[derive(Debug, Clone, Deserialize)] +pub struct Config { + pub upstream_address: String, + pub upstream_authority_pubkey: Option, + pub downstream_listen: SocketAddr, + pub authority_pubkey: String, + pub authority_secret: String, + #[serde(default = "default_cert_validity")] + pub cert_validity_secs: u64, + #[serde(default = "default_floor_difficulty")] + pub min_downstream_difficulty: f64, + #[serde(default = "default_api_listen")] + pub api_listen: SocketAddr, +} + +fn default_cert_validity() -> u64 { + 86400 +} + +fn default_floor_difficulty() -> f64 { + 0.0 +} + +fn default_api_listen() -> SocketAddr { + "0.0.0.0:8080".parse().unwrap() +} + +impl Config { + pub fn from_file(path: &Path) -> Result> { + let contents = std::fs::read_to_string(path)?; + let config: Config = toml::from_str(&contents)?; + Ok(config) + } +} diff --git a/test-tools/shape-proxy/src/downstream.rs b/test-tools/shape-proxy/src/downstream.rs new file mode 100644 index 000000000..38476d610 --- /dev/null +++ b/test-tools/shape-proxy/src/downstream.rs @@ -0,0 +1,199 @@ +use std::net::SocketAddr; + +use stratum_apps::{ + key_utils::{Secp256k1PublicKey, Secp256k1SecretKey}, + network_helpers::accept_noise_connection, + stratum_core::{ + codec_sv2::StandardSv2Frame, + common_messages_sv2::{Protocol, SetupConnectionSuccess}, + parsers_sv2::{CommonMessages, Mining}, + }, +}; +use tokio::{net::TcpStream, sync::mpsc}; +use tracing::{debug, error, info, warn}; + +use crate::upstream::{Message, Reader, Writer}; + +pub type DownstreamId = u64; + +pub enum DownstreamEvent { + Connected { + id: DownstreamId, + writer: Writer, + }, + Message { + id: DownstreamId, + msg: Mining<'static>, + }, + Disconnected { + id: DownstreamId, + }, +} + +impl std::fmt::Debug for DownstreamEvent { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Connected { id, .. } => f.debug_struct("Connected").field("id", id).finish(), + Self::Message { id, msg } => f + .debug_struct("Message") + .field("id", id) + .field("msg", msg) + .finish(), + Self::Disconnected { id } => f.debug_struct("Disconnected").field("id", id).finish(), + } + } +} + +pub async fn accept_downstream( + stream: TcpStream, + peer_addr: SocketAddr, + id: DownstreamId, + pub_key: Secp256k1PublicKey, + secret_key: Secp256k1SecretKey, + cert_validity: u64, + event_tx: mpsc::UnboundedSender, +) { + info!(downstream_id = id, %peer_addr, "Accepting downstream connection"); + + let noise_stream = match accept_noise_connection::( + stream, + pub_key, + secret_key, + cert_validity, + ) + .await + { + Ok(s) => s, + Err(e) => { + error!(downstream_id = id, %peer_addr, "Noise handshake failed: {e}"); + return; + } + }; + + let (mut reader, mut writer) = noise_stream.into_split(); + + if let Err(e) = handle_setup_connection(&mut reader, &mut writer, id).await { + error!(downstream_id = id, "SetupConnection handshake failed: {e}"); + return; + } + + info!(downstream_id = id, %peer_addr, "Downstream setup complete"); + + if event_tx + .send(DownstreamEvent::Connected { id, writer }) + .is_err() + { + return; + } + + downstream_read_loop(reader, id, event_tx).await; +} + +async fn handle_setup_connection( + reader: &mut Reader, + writer: &mut Writer, + id: DownstreamId, +) -> Result<(), String> { + let response = reader + .read_frame() + .await + .map_err(|e| format!("Read error waiting for SetupConnection: {e:?}"))?; + + let mut frame: StandardSv2Frame = response + .try_into() + .map_err(|_| "Invalid frame from downstream".to_string())?; + + let msg_type = frame.get_header().unwrap().msg_type(); + let payload = frame.payload(); + + let msg: CommonMessages = (msg_type, payload) + .try_into() + .map_err(|_| format!("Failed to parse message type 0x{msg_type:02x}"))?; + + match msg { + CommonMessages::SetupConnection(setup) => { + if setup.protocol != Protocol::MiningProtocol { + return Err("Downstream requested non-mining protocol".to_string()); + } + info!( + downstream_id = id, + "Downstream SetupConnection: vendor={}, version={}-{}", + setup.vendor.as_utf8_or_hex(), + setup.min_version, + setup.max_version, + ); + } + _ => { + return Err(format!( + "Expected SetupConnection, got msg_type=0x{msg_type:02x}" + )); + } + } + + let success = SetupConnectionSuccess { + used_version: 2, + flags: 0, + }; + let frame: StandardSv2Frame = Message::Common(success.into()) + .try_into() + .map_err(|e| format!("Frame encode error: {e:?}"))?; + writer + .write_frame(frame.into()) + .await + .map_err(|e| format!("Write error: {e:?}"))?; + + info!( + downstream_id = id, + "Sent SetupConnectionSuccess to downstream" + ); + Ok(()) +} + +async fn downstream_read_loop( + mut reader: Reader, + id: DownstreamId, + event_tx: mpsc::UnboundedSender, +) { + loop { + let frame = match reader.read_frame().await { + Ok(f) => f, + Err(e) => { + debug!(downstream_id = id, "Downstream read error: {e:?}"); + let _ = event_tx.send(DownstreamEvent::Disconnected { id }); + return; + } + }; + + let mut sv2_frame: StandardSv2Frame = match frame.try_into() { + Ok(f) => f, + Err(_) => { + warn!(downstream_id = id, "Invalid frame from downstream"); + let _ = event_tx.send(DownstreamEvent::Disconnected { id }); + return; + } + }; + + let msg_type = sv2_frame.get_header().unwrap().msg_type(); + let payload = sv2_frame.payload(); + + let mining_msg: Result, _> = (msg_type, payload).try_into(); + match mining_msg { + Ok(m) => { + let m_static = m.into_static(); + debug!(downstream_id = id, "Downstream mining msg: {m_static}"); + if event_tx + .send(DownstreamEvent::Message { id, msg: m_static }) + .is_err() + { + return; + } + } + Err(_) => { + warn!( + downstream_id = id, + "Unhandled message type 0x{msg_type:02x} from downstream" + ); + } + } + } +} diff --git a/test-tools/shape-proxy/src/main.rs b/test-tools/shape-proxy/src/main.rs new file mode 100644 index 000000000..8de98e8db --- /dev/null +++ b/test-tools/shape-proxy/src/main.rs @@ -0,0 +1,66 @@ +//! SV2 share-gating proxy for testing pool vardiff behavior. + +mod api; +mod config; +mod downstream; +mod metrics; +mod profile; +mod proxy; +mod share_gate; +mod upstream; + +use std::path::PathBuf; + +use clap::Parser; +use tracing::{error, info}; +use tracing_subscriber::{fmt, EnvFilter}; + +#[derive(Parser)] +#[command( + name = "shape-proxy", + about = "SV2 share-gating proxy for vardiff testing" +)] +struct Args { + #[arg(short, long, help = "Path to TOML configuration file")] + config: PathBuf, +} + +#[tokio::main] +async fn main() { + fmt() + .with_env_filter( + EnvFilter::from_default_env().add_directive("shape_proxy=info".parse().unwrap()), + ) + .init(); + + let args = Args::parse(); + + let cfg = match config::Config::from_file(&args.config) { + Ok(c) => c, + Err(e) => { + error!("Failed to load config: {e}"); + std::process::exit(1); + } + }; + + info!("Shape proxy starting"); + info!(" Upstream: {}", cfg.upstream_address); + info!(" Downstream listen: {}", cfg.downstream_listen); + info!(" Difficulty floor: {}", cfg.min_downstream_difficulty); + info!(" API listen: {}", cfg.api_listen); + + let proxy = match proxy::ProxyCore::new(cfg) { + Ok(p) => p, + Err(e) => { + error!("Failed to initialize proxy: {e}"); + std::process::exit(1); + } + }; + + info!("Shape proxy running (upstream connection will be established in background)"); + + if let Err(e) = proxy.run().await { + error!("Proxy exited with error: {e}"); + std::process::exit(1); + } +} diff --git a/test-tools/shape-proxy/src/metrics.rs b/test-tools/shape-proxy/src/metrics.rs new file mode 100644 index 000000000..d6f5ffc94 --- /dev/null +++ b/test-tools/shape-proxy/src/metrics.rs @@ -0,0 +1,154 @@ +use std::collections::VecDeque; +use std::time::Instant; + +const WINDOW_SIZE: usize = 15; + +/// Count-based rolling window: keeps the last N events and computes rate +/// from the time span they cover. Adapts automatically to any share rate — +/// at 10 spm the window spans ~90s, at 120 spm it spans ~7.5s. +pub struct RollingWindow { + events: VecDeque<(Instant, f64)>, + max_events: usize, +} + +impl RollingWindow { + pub fn new() -> Self { + Self { + events: VecDeque::new(), + max_events: WINDOW_SIZE, + } + } + + pub fn record(&mut self, now: Instant) { + self.record_weighted(now, 1.0); + } + + pub fn record_weighted(&mut self, now: Instant, weight: f64) { + self.events.push_back((now, weight)); + while self.events.len() > self.max_events { + self.events.pop_front(); + } + } + + pub fn rate_spm(&self, now: Instant) -> f64 { + if self.events.is_empty() { + return 0.0; + } + let oldest = self.events.front().unwrap().0; + let span = now.duration_since(oldest).as_secs_f64(); + if span < 0.1 { + return 0.0; + } + let sum: f64 = self.events.iter().map(|(_, w)| w).sum(); + (sum / span) * 60.0 + } +} + +#[derive(Debug, Clone, Copy, PartialEq)] +pub enum HeadroomStatus { + Comfortable, + Marginal, + Clamped, + Unknown, +} + +impl HeadroomStatus { + pub fn from_ratio(supply_spm: f64, target_spm: f64) -> Self { + if target_spm <= 0.0 || supply_spm <= 0.0 { + return Self::Unknown; + } + let ratio = supply_spm / target_spm; + if ratio >= 2.0 { + Self::Comfortable + } else if ratio >= 1.0 { + Self::Marginal + } else { + Self::Clamped + } + } + + pub fn as_str(&self) -> &'static str { + match self { + Self::Comfortable => "comfortable", + Self::Marginal => "marginal", + Self::Clamped => "clamped", + Self::Unknown => "unknown", + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::time::Duration; + + #[test] + fn count_based_window_at_low_rate() { + let mut w = RollingWindow::new(); + let start = Instant::now(); + + // Simulate 10 spm (1 share every 6s) + for i in 0..15 { + w.record_weighted(start + Duration::from_secs(i * 6), 1.0); + } + + let now = start + Duration::from_secs(14 * 6); + let rate = w.rate_spm(now); + // 15 shares over 84s = 10.7 spm + assert!(rate > 9.0 && rate < 12.0, "Expected ~10 spm, got {rate}"); + } + + #[test] + fn count_based_window_at_high_rate() { + let mut w = RollingWindow::new(); + let start = Instant::now(); + + // Simulate 120 spm (1 share every 0.5s) + for i in 0..15 { + w.record_weighted(start + Duration::from_millis(i * 500), 1.0); + } + + let now = start + Duration::from_millis(14 * 500); + let rate = w.rate_spm(now); + // 15 shares over 7s = 128.6 spm + assert!( + rate > 100.0 && rate < 150.0, + "Expected ~120 spm, got {rate}" + ); + } + + #[test] + fn window_evicts_oldest_beyond_n() { + let mut w = RollingWindow::new(); + let start = Instant::now(); + + // Record 20 events (only last 15 kept) + for i in 0..20 { + w.record_weighted(start + Duration::from_secs(i), 1.0); + } + + assert_eq!(w.events.len(), WINDOW_SIZE); + assert_eq!(w.events.front().unwrap().0, start + Duration::from_secs(5)); + } + + #[test] + fn bootstrap_with_few_samples() { + let mut w = RollingWindow::new(); + let start = Instant::now(); + + // Only 3 shares (below N=15) + w.record_weighted(start, 1.0); + w.record_weighted(start + Duration::from_secs(6), 1.0); + w.record_weighted(start + Duration::from_secs(12), 1.0); + + let rate = w.rate_spm(start + Duration::from_secs(12)); + // 3 shares over 12s = 15 spm (noisy but responsive) + assert!(rate > 10.0 && rate < 20.0, "Expected ~15 spm, got {rate}"); + } + + #[test] + fn empty_window_returns_zero() { + let w = RollingWindow::new(); + assert_eq!(w.rate_spm(Instant::now()), 0.0); + } +} diff --git a/test-tools/shape-proxy/src/profile.rs b/test-tools/shape-proxy/src/profile.rs new file mode 100644 index 000000000..1867a2db0 --- /dev/null +++ b/test-tools/shape-proxy/src/profile.rs @@ -0,0 +1,222 @@ +use serde::Deserialize; + +#[derive(Debug, Clone, Deserialize)] +#[serde(tag = "type", rename_all = "snake_case")] +pub enum RateProfile { + Track { + #[serde(default = "default_factor")] + factor: f64, + }, + Step { + before: f64, + after: f64, + at_secs: f64, + }, + Ramp { + from: f64, + to: f64, + duration_secs: f64, + }, + Stall { + at_secs: f64, + duration_secs: f64, + }, + Burst { + base: f64, + peak: f64, + at_secs: f64, + duration_secs: f64, + }, + Oscillate { + base: f64, + amp: f64, + period_secs: f64, + }, +} + +fn default_factor() -> f64 { + 1.0 +} + +impl RateProfile { + /// Returns the supply multiplier at the given elapsed time. + pub fn factor_at(&self, elapsed_secs: f64) -> f64 { + match self { + Self::Track { factor } => *factor, + Self::Step { + before, + after, + at_secs, + } => { + if elapsed_secs < *at_secs { + *before + } else { + *after + } + } + Self::Ramp { + from, + to, + duration_secs, + } => { + if elapsed_secs <= 0.0 { + *from + } else if elapsed_secs >= *duration_secs { + *to + } else { + from + (elapsed_secs / duration_secs) * (to - from) + } + } + Self::Stall { + at_secs, + duration_secs, + } => { + if elapsed_secs < *at_secs { + 1.0 + } else if elapsed_secs < at_secs + duration_secs { + 0.0 + } else { + 1.0 + } + } + Self::Burst { + base, + peak, + at_secs, + duration_secs, + } => { + if elapsed_secs < *at_secs { + *base + } else if elapsed_secs < at_secs + duration_secs { + *peak + } else { + *base + } + } + Self::Oscillate { + base, + amp, + period_secs, + } => { + let val = + base + amp * (2.0 * std::f64::consts::PI * elapsed_secs / period_secs).sin(); + val.max(0.0) + } + } + } + + pub fn active_duration_secs(&self) -> Option { + match self { + Self::Track { .. } => None, + Self::Step { at_secs, .. } => Some(*at_secs), + Self::Ramp { duration_secs, .. } => Some(*duration_secs), + Self::Stall { + at_secs, + duration_secs, + .. + } => Some(at_secs + duration_secs), + Self::Burst { + at_secs, + duration_secs, + .. + } => Some(at_secs + duration_secs), + Self::Oscillate { .. } => None, + } + } +} + +impl Default for RateProfile { + fn default() -> Self { + Self::Track { factor: 1.0 } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn track_constant() { + let p = RateProfile::Track { factor: 0.5 }; + assert_eq!(p.factor_at(0.0), 0.5); + assert_eq!(p.factor_at(100.0), 0.5); + } + + #[test] + fn step_transitions() { + let p = RateProfile::Step { + before: 1.0, + after: 0.5, + at_secs: 10.0, + }; + assert_eq!(p.factor_at(0.0), 1.0); + assert_eq!(p.factor_at(9.9), 1.0); + assert_eq!(p.factor_at(10.0), 0.5); + assert_eq!(p.factor_at(100.0), 0.5); + } + + #[test] + fn ramp_linear() { + let p = RateProfile::Ramp { + from: 0.5, + to: 1.0, + duration_secs: 60.0, + }; + assert_eq!(p.factor_at(0.0), 0.5); + assert_eq!(p.factor_at(30.0), 0.75); + assert_eq!(p.factor_at(60.0), 1.0); + assert_eq!(p.factor_at(90.0), 1.0); + } + + #[test] + fn stall_drops_to_zero() { + let p = RateProfile::Stall { + at_secs: 5.0, + duration_secs: 10.0, + }; + assert_eq!(p.factor_at(0.0), 1.0); + assert_eq!(p.factor_at(4.9), 1.0); + assert_eq!(p.factor_at(5.0), 0.0); + assert_eq!(p.factor_at(14.9), 0.0); + assert_eq!(p.factor_at(15.0), 1.0); + } + + #[test] + fn burst_spikes() { + let p = RateProfile::Burst { + base: 0.7, + peak: 1.4, + at_secs: 5.0, + duration_secs: 3.0, + }; + assert_eq!(p.factor_at(0.0), 0.7); + assert_eq!(p.factor_at(5.0), 1.4); + assert_eq!(p.factor_at(7.9), 1.4); + assert_eq!(p.factor_at(8.0), 0.7); + } + + #[test] + fn oscillate_sinusoidal() { + let p = RateProfile::Oscillate { + base: 0.8, + amp: 0.2, + period_secs: 10.0, + }; + assert_eq!(p.factor_at(0.0), 0.8); + let quarter = p.factor_at(2.5); // sin(pi/2) = 1 -> 0.8 + 0.2 = 1.0 + assert!((quarter - 1.0).abs() < 0.01); + let three_quarter = p.factor_at(7.5); // sin(3pi/2) = -1 -> 0.8 - 0.2 = 0.6 + assert!((three_quarter - 0.6).abs() < 0.01); + } + + #[test] + fn oscillate_never_negative() { + let p = RateProfile::Oscillate { + base: 0.1, + amp: 0.5, + period_secs: 10.0, + }; + let bottom = p.factor_at(7.5); // 0.1 - 0.5 = -0.4 -> clamped to 0 + assert_eq!(bottom, 0.0); + } +} diff --git a/test-tools/shape-proxy/src/proxy.rs b/test-tools/shape-proxy/src/proxy.rs new file mode 100644 index 000000000..747f35b7f --- /dev/null +++ b/test-tools/shape-proxy/src/proxy.rs @@ -0,0 +1,945 @@ +use std::collections::HashMap; + +use stratum_apps::{ + key_utils::{Secp256k1PublicKey, Secp256k1SecretKey}, + stratum_core::{ + codec_sv2::StandardSv2Frame, + mining_sv2::{OpenExtendedMiningChannel, SubmitSharesSuccess}, + parsers_sv2::Mining, + }, +}; +use tokio::{net::TcpListener, select, sync::mpsc}; +use tracing::{debug, error, info, warn}; + +use crate::{ + api::{self, ApiCommand, ChannelStatus, ProfileInfo, ProxyStatus}, + config::Config, + downstream::{accept_downstream, DownstreamEvent, DownstreamId}, + metrics::{HeadroomStatus, RollingWindow}, + profile::RateProfile, + share_gate::ShareGate, + upstream::{self, Message, UpstreamEvent, Writer}, +}; + +struct ChannelMapping { + downstream_channel_id: u32, + upstream_channel_id: Option, + downstream_id: DownstreamId, + gate: ShareGate, + floor_active: bool, + pool_difficulty: Option, + miner_difficulty: f64, + shares_forwarded: u64, + shares_gated: u64, + forward_window: RollingWindow, + open_request: Option>, + open_standard_msg: Option>, +} + +struct PendingChannelOpen { + downstream_channel_id: u32, + downstream_id: DownstreamId, +} + +struct DownstreamState { + writer: Writer, +} + +pub struct ProxyCore { + config: Config, + upstream_writer: Option, + upstream_connected: bool, + pub_key: Secp256k1PublicKey, + secret_key: Secp256k1SecretKey, + next_downstream_id: u64, + next_channel_id: u32, + downstreams: HashMap, + channels: HashMap, + /// Keyed by the request_id sent upstream. Since we forward the miner's request_id + /// verbatim and only support one miner, collisions cannot occur in practice. + pending_opens: HashMap, +} + +impl ProxyCore { + pub fn new(config: Config) -> Result { + let pub_key: Secp256k1PublicKey = config + .authority_pubkey + .parse() + .map_err(|e| format!("Invalid authority_pubkey: {e}"))?; + let secret_key: Secp256k1SecretKey = config + .authority_secret + .parse() + .map_err(|e| format!("Invalid authority_secret: {e}"))?; + + Ok(Self { + config, + upstream_writer: None, + upstream_connected: false, + pub_key, + secret_key, + next_downstream_id: 1, + next_channel_id: 1, + downstreams: HashMap::new(), + channels: HashMap::new(), + pending_opens: HashMap::new(), + }) + } + + pub async fn run(mut self) -> Result<(), String> { + let listener = TcpListener::bind(self.config.downstream_listen) + .await + .map_err(|e| format!("Failed to bind downstream listener: {e}"))?; + + info!( + "Downstream listener bound to {}", + self.config.downstream_listen + ); + + let (ds_event_tx, mut ds_event_rx) = mpsc::unbounded_channel::(); + let (upstream_tx, mut upstream_rx) = mpsc::unbounded_channel::(); + + let upstream_config = self.config.clone(); + tokio::spawn(async move { + upstream::upstream_manager_task(upstream_config, upstream_tx).await; + }); + + let (api_cmd_tx, mut api_cmd_rx) = mpsc::unbounded_channel::(); + let (status_tx, status_rx) = tokio::sync::watch::channel(ProxyStatus::default()); + + let api_listen = self.config.api_listen; + let router = api::create_router(status_rx, api_cmd_tx); + tokio::spawn(async move { + let listener = tokio::net::TcpListener::bind(api_listen) + .await + .expect("Failed to bind API listener"); + info!("HTTP API listening on {}", api_listen); + axum::serve(listener, router).await.ok(); + }); + + loop { + let _ = status_tx.send(self.build_status()); + + select! { + accept_result = listener.accept() => { + match accept_result { + Ok((stream, peer_addr)) => { + let id = self.next_downstream_id; + self.next_downstream_id += 1; + let pub_key = self.pub_key; + let secret_key = self.secret_key; + let cert_validity = self.config.cert_validity_secs; + let tx = ds_event_tx.clone(); + tokio::spawn(async move { + accept_downstream( + stream, peer_addr, id, + pub_key, secret_key, cert_validity, tx, + ).await; + }); + } + Err(e) => { + error!("Listener accept error: {e}"); + } + } + } + + Some(event) = ds_event_rx.recv() => { + self.handle_downstream_event(event).await; + } + + Some(event) = upstream_rx.recv() => { + match event { + UpstreamEvent::Connected { writer } => { + info!("Upstream connected"); + self.upstream_writer = Some(writer); + self.upstream_connected = true; + self.reopen_channels().await; + } + UpstreamEvent::Frame { frame } => { + self.handle_upstream_frame(frame).await; + } + UpstreamEvent::Disconnected => { + warn!("Upstream disconnected, will retry in background"); + self.upstream_writer = None; + self.upstream_connected = false; + self.pending_opens.clear(); + for mapping in self.channels.values_mut() { + mapping.upstream_channel_id = None; + } + } + } + } + + Some(cmd) = api_cmd_rx.recv() => { + self.handle_api_command(cmd); + } + } + } + } + + async fn reopen_channels(&mut self) { + struct Reopen { + ds_channel_id: u32, + downstream_id: DownstreamId, + open_request: Option>, + open_standard_msg: Option>, + } + + let reopens: Vec<_> = self + .channels + .values() + .filter(|m| self.downstreams.contains_key(&m.downstream_id)) + .map(|m| Reopen { + ds_channel_id: m.downstream_channel_id, + downstream_id: m.downstream_id, + open_request: m.open_request.clone(), + open_standard_msg: m.open_standard_msg.clone(), + }) + .collect(); + + for Reopen { + ds_channel_id, + downstream_id, + open_request: open_req, + open_standard_msg: open_std_msg, + } in reopens + { + if let Some(open_req) = open_req { + info!( + downstream_id, + ds_channel_id, "Re-opening extended channel after upstream reconnect" + ); + self.pending_opens.insert( + open_req.request_id, + PendingChannelOpen { + downstream_channel_id: ds_channel_id, + downstream_id, + }, + ); + let frame: StandardSv2Frame = + match Message::Mining(Mining::OpenExtendedMiningChannel(open_req)).try_into() { + Ok(f) => f, + Err(e) => { + error!("Failed to encode re-open channel: {e:?}"); + continue; + } + }; + if let Some(ref mut writer) = self.upstream_writer { + if let Err(e) = writer.write_frame(frame.into()).await { + error!("Failed to send re-open channel upstream: {e:?}"); + } + } + } else if let Some(std_msg) = open_std_msg { + info!( + downstream_id, + ds_channel_id, "Re-opening standard channel after upstream reconnect" + ); + if let Mining::OpenStandardMiningChannel(ref m) = std_msg { + let req_id = m.get_request_id_as_u32(); + self.pending_opens.insert( + req_id, + PendingChannelOpen { + downstream_channel_id: ds_channel_id, + downstream_id, + }, + ); + } + let frame: StandardSv2Frame = match Message::Mining(std_msg).try_into() { + Ok(f) => f, + Err(e) => { + error!("Failed to encode re-open standard channel: {e:?}"); + continue; + } + }; + if let Some(ref mut writer) = self.upstream_writer { + if let Err(e) = writer.write_frame(frame.into()).await { + error!("Failed to send re-open standard channel upstream: {e:?}"); + } + } + } + } + } + + fn handle_api_command(&mut self, cmd: ApiCommand) { + match cmd { + ApiCommand::SetProfile { + channel_id, + profile, + } => { + if let Some(mapping) = self.channels.get_mut(&channel_id) { + info!(channel_id, "Setting profile: {:?}", profile); + mapping.gate.set_profile(profile); + } else { + warn!(channel_id, "SetProfile for unknown channel"); + } + } + ApiCommand::SetAllProfiles { profile } => { + info!("Broadcasting profile to all channels: {:?}", profile); + for mapping in self.channels.values_mut() { + mapping.gate.set_profile(profile.clone()); + } + } + } + } + + fn build_status(&self) -> ProxyStatus { + let now = std::time::Instant::now(); + let channels = self + .channels + .values() + .map(|m| { + let supply_spm = m.gate.current_supply_spm(); + let forwarded_spm = m.forward_window.rate_spm(now); + let target_spm = m.gate.current_target_spm(); + let headroom = HeadroomStatus::from_ratio(supply_spm, target_spm); + let profile = m.gate.current_profile(); + let profile_duration = profile.active_duration_secs(); + let profile_elapsed = m.gate.elapsed_secs(); + ChannelStatus { + id: m.downstream_channel_id, + miner_connected: self.downstreams.contains_key(&m.downstream_id), + profile: ProfileInfo::from_profile(profile), + profile_elapsed_secs: profile_elapsed, + profile_duration_secs: profile_duration, + target_spm, + forwarded_spm, + supply_spm, + headroom: headroom.as_str().to_string(), + floor_active: m.floor_active, + pool_difficulty: m.pool_difficulty, + miner_difficulty: m.miner_difficulty, + shares_forwarded: m.shares_forwarded, + shares_gated: m.shares_gated, + } + }) + .collect(); + + ProxyStatus { + upstream_connected: self.upstream_connected, + channels, + } + } + + async fn handle_downstream_event(&mut self, event: DownstreamEvent) { + match event { + DownstreamEvent::Connected { id, writer } => { + info!(downstream_id = id, "Downstream connected and ready"); + self.downstreams.insert(id, DownstreamState { writer }); + } + DownstreamEvent::Message { id, msg } => { + self.handle_downstream_message(id, msg).await; + } + DownstreamEvent::Disconnected { id } => { + info!(downstream_id = id, "Downstream disconnected"); + self.downstreams.remove(&id); + self.channels + .retain(|_, mapping| mapping.downstream_id != id); + self.pending_opens + .retain(|_, pending| pending.downstream_id != id); + } + } + } + + async fn handle_downstream_message(&mut self, id: DownstreamId, msg: Mining<'static>) { + match msg { + Mining::OpenExtendedMiningChannel(open_req) => { + self.handle_open_channel(id, open_req).await; + } + Mining::OpenStandardMiningChannel(ref m) => { + let request_id = m.get_request_id_as_u32(); + let ds_channel_id = self.next_channel_id; + self.next_channel_id += 1; + info!( + downstream_id = id, + ds_channel_id, request_id, "Mirroring OpenStandardMiningChannel to upstream" + ); + if self.pending_opens.contains_key(&request_id) { + warn!( + request_id, + "request_id collision in pending_opens — single-miner assumption violated" + ); + } + self.pending_opens.insert( + request_id, + PendingChannelOpen { + downstream_channel_id: ds_channel_id, + downstream_id: id, + }, + ); + let open_msg_clone = msg.clone(); + let frame: StandardSv2Frame = match Message::Mining(msg).try_into() { + Ok(f) => f, + Err(e) => { + error!("Failed to encode OpenStandardMiningChannel: {e:?}"); + return; + } + }; + if let Some(ref mut writer) = self.upstream_writer { + if let Err(e) = writer.write_frame(frame.into()).await { + error!("Failed to send OpenStandardMiningChannel upstream: {e:?}"); + } + } else { + warn!( + downstream_id = id, + "Upstream not connected, cannot open standard channel" + ); + } + self.channels.insert( + ds_channel_id, + ChannelMapping { + downstream_channel_id: ds_channel_id, + upstream_channel_id: None, + downstream_id: id, + gate: ShareGate::new(RateProfile::default()), + floor_active: false, + pool_difficulty: None, + miner_difficulty: 1.0, + shares_forwarded: 0, + shares_gated: 0, + forward_window: RollingWindow::new(), + open_request: None, + open_standard_msg: Some(open_msg_clone), + }, + ); + } + Mining::SubmitSharesExtended(ref share) => { + self.handle_share_submission(id, share.channel_id, share.sequence_number, msg) + .await; + } + Mining::SubmitSharesStandard(ref share) => { + self.handle_share_submission(id, share.channel_id, share.sequence_number, msg) + .await; + } + other => { + debug!(downstream_id = id, "Forwarding message upstream: {other}"); + let frame: StandardSv2Frame = match Message::Mining(other).try_into() { + Ok(f) => f, + Err(e) => { + warn!(downstream_id = id, "Failed to encode message: {e:?}"); + return; + } + }; + if let Some(ref mut writer) = self.upstream_writer { + if let Err(e) = writer.write_frame(frame.into()).await { + error!("Failed to forward message upstream: {e:?}"); + } + } else { + warn!( + downstream_id = id, + "Upstream not connected, dropping message" + ); + } + } + } + } + + async fn handle_open_channel( + &mut self, + downstream_id: DownstreamId, + open_req: OpenExtendedMiningChannel<'static>, + ) { + let ds_channel_id = self.next_channel_id; + self.next_channel_id += 1; + + let request_id = open_req.request_id; + info!( + downstream_id, + ds_channel_id, + request_id, + user_identity = %open_req.user_identity.as_utf8_or_hex(), + "Mirroring OpenExtendedMiningChannel to upstream" + ); + + if self.pending_opens.contains_key(&request_id) { + warn!( + request_id, + "request_id collision in pending_opens — single-miner assumption violated" + ); + } + self.pending_opens.insert( + request_id, + PendingChannelOpen { + downstream_channel_id: ds_channel_id, + downstream_id, + }, + ); + + self.channels.insert( + ds_channel_id, + ChannelMapping { + downstream_channel_id: ds_channel_id, + upstream_channel_id: None, + downstream_id, + gate: ShareGate::new(RateProfile::default()), + floor_active: false, + pool_difficulty: None, + miner_difficulty: 1.0, + shares_forwarded: 0, + shares_gated: 0, + forward_window: RollingWindow::new(), + open_request: Some(open_req.clone()), + open_standard_msg: None, + }, + ); + + let frame: StandardSv2Frame = + match Message::Mining(Mining::OpenExtendedMiningChannel(open_req)).try_into() { + Ok(f) => f, + Err(e) => { + error!("Failed to encode OpenExtendedMiningChannel: {e:?}"); + return; + } + }; + if let Some(ref mut writer) = self.upstream_writer { + if let Err(e) = writer.write_frame(frame.into()).await { + error!("Failed to send OpenExtendedMiningChannel upstream: {e:?}"); + } + } else { + warn!( + downstream_id, + "Upstream not connected, channel open queued for reconnect" + ); + } + } + + async fn handle_share_submission( + &mut self, + id: DownstreamId, + channel_id: u32, + seq: u32, + msg: Mining<'static>, + ) { + let ack = SubmitSharesSuccess { + channel_id, + last_sequence_number: seq, + new_submits_accepted_count: 1, + new_shares_sum: 0, + }; + self.send_to_downstream(id, Message::Mining(Mining::SubmitSharesSuccess(ack))) + .await; + + let mapping = self.channels.values_mut().find(|m| { + m.downstream_id == id + && (m.downstream_channel_id == channel_id + || m.upstream_channel_id == Some(channel_id)) + }); + + let Some(mapping) = mapping else { + debug!(downstream_id = id, channel_id, "Share for unknown channel"); + return; + }; + + let now = std::time::Instant::now(); + let difficulty = mapping.miner_difficulty; + mapping.gate.record_share_arrived(now, difficulty); + + if !mapping.gate.should_forward() { + mapping.shares_gated += 1; + return; + } + + mapping.shares_forwarded += 1; + mapping.forward_window.record(now); + + if let Some(ref mut writer) = self.upstream_writer { + let frame: StandardSv2Frame = match Message::Mining(msg).try_into() { + Ok(f) => f, + Err(e) => { + warn!(downstream_id = id, "Failed to encode share: {e:?}"); + return; + } + }; + if let Err(e) = writer.write_frame(frame.into()).await { + error!("Failed to forward share upstream: {e:?}"); + } + } + } + + async fn handle_upstream_frame( + &mut self, + frame: stratum_apps::stratum_core::codec_sv2::StandardEitherFrame, + ) { + let mut sv2_frame: StandardSv2Frame = match frame.try_into() { + Ok(f) => f, + Err(_) => { + warn!("Invalid frame from upstream"); + return; + } + }; + + let msg_type = sv2_frame.get_header().unwrap().msg_type(); + let payload = sv2_frame.payload(); + + let mining_msg: Result, _> = (msg_type, payload).try_into(); + match mining_msg { + Ok(m) => { + let m_static = m.into_static(); + self.handle_upstream_mining_message(m_static).await; + } + Err(_) => { + debug!("Upstream non-mining message type 0x{msg_type:02x} (ignored)"); + } + } + } + + async fn handle_upstream_mining_message(&mut self, msg: Mining<'static>) { + match msg { + Mining::OpenExtendedMiningChannelSuccess(ref success) => { + let request_id = success.request_id; + let upstream_channel_id = success.channel_id; + let initial_target_bytes: &[u8] = success.target.inner_as_ref(); + let initial_difficulty = target_to_difficulty(initial_target_bytes); + + if let Some(pending) = self.pending_opens.remove(&request_id) { + info!( + downstream_id = pending.downstream_id, + ds_channel_id = pending.downstream_channel_id, + upstream_channel_id, + initial_difficulty, + "Channel opened successfully" + ); + + if let Some(mapping) = self.channels.get_mut(&pending.downstream_channel_id) { + mapping.upstream_channel_id = Some(upstream_channel_id); + mapping.miner_difficulty = initial_difficulty; + mapping.pool_difficulty = Some(initial_difficulty); + } else { + let gate = ShareGate::new(RateProfile::default()); + self.channels.insert( + pending.downstream_channel_id, + ChannelMapping { + downstream_channel_id: pending.downstream_channel_id, + upstream_channel_id: Some(upstream_channel_id), + downstream_id: pending.downstream_id, + gate, + floor_active: false, + pool_difficulty: Some(initial_difficulty), + miner_difficulty: initial_difficulty, + shares_forwarded: 0, + shares_gated: 0, + forward_window: RollingWindow::new(), + open_request: None, + open_standard_msg: None, + }, + ); + } + + // Forward the success response to the downstream miner. + self.send_to_downstream(pending.downstream_id, Message::Mining(msg)) + .await; + } else { + warn!( + request_id, + "Received OpenExtendedMiningChannelSuccess for unknown request" + ); + } + } + Mining::OpenStandardMiningChannelSuccess(ref success) => { + let request_id = success.get_request_id_as_u32(); + let upstream_channel_id = success.channel_id; + let initial_target_bytes: &[u8] = success.target.inner_as_ref(); + let initial_difficulty = target_to_difficulty(initial_target_bytes); + + if let Some(pending) = self.pending_opens.remove(&request_id) { + let effective_ds_channel_id = upstream_channel_id; + info!( + downstream_id = pending.downstream_id, + effective_ds_channel_id, + upstream_channel_id, + initial_difficulty, + "Standard channel opened successfully" + ); + + let mut mapping = self + .channels + .remove(&pending.downstream_channel_id) + .unwrap_or_else(|| ChannelMapping { + downstream_channel_id: effective_ds_channel_id, + upstream_channel_id: Some(upstream_channel_id), + downstream_id: pending.downstream_id, + gate: ShareGate::new(RateProfile::default()), + floor_active: false, + pool_difficulty: Some(initial_difficulty), + miner_difficulty: initial_difficulty, + shares_forwarded: 0, + shares_gated: 0, + forward_window: RollingWindow::new(), + open_request: None, + open_standard_msg: None, + }); + mapping.downstream_channel_id = effective_ds_channel_id; + mapping.upstream_channel_id = Some(upstream_channel_id); + mapping.miner_difficulty = initial_difficulty; + mapping.pool_difficulty = Some(initial_difficulty); + self.channels.insert(effective_ds_channel_id, mapping); + + self.send_to_downstream(pending.downstream_id, Message::Mining(msg)) + .await; + } else { + warn!( + request_id, + "Received OpenStandardMiningChannelSuccess for unknown request" + ); + } + } + Mining::OpenMiningChannelError(ref err) => { + let request_id = err.request_id; + if let Some(pending) = self.pending_opens.remove(&request_id) { + warn!( + downstream_id = pending.downstream_id, + request_id, + "Channel open rejected by pool: {}", + err.error_code.as_utf8_or_hex() + ); + self.channels.remove(&pending.downstream_channel_id); + self.send_to_downstream(pending.downstream_id, Message::Mining(msg)) + .await; + } else { + warn!( + request_id, + "Received OpenMiningChannelError for unknown request" + ); + } + } + Mining::NewExtendedMiningJob(ref job) => { + let upstream_ch = job.channel_id; + self.forward_to_downstream_by_upstream_channel(upstream_ch, msg) + .await; + } + Mining::NewMiningJob(ref job) => { + let upstream_ch = job.channel_id; + self.forward_to_downstream_by_upstream_channel(upstream_ch, msg) + .await; + } + Mining::SetNewPrevHash(ref prev) => { + let upstream_ch = prev.channel_id; + self.forward_to_downstream_by_upstream_channel(upstream_ch, msg) + .await; + } + Mining::SetTarget(ref target) => { + let upstream_ch = target.channel_id; + let target_bytes: &[u8] = target.maximum_target.inner_as_ref(); + let pool_difficulty = target_to_difficulty(target_bytes); + + if let Some(pair) = self + .channels + .values_mut() + .find(|m| m.upstream_channel_id == Some(upstream_ch)) + { + let prev_difficulty = pair.pool_difficulty.unwrap_or(0.0); + let pct_change = if prev_difficulty > 0.0 { + (pool_difficulty - prev_difficulty) / prev_difficulty * 100.0 + } else { + 0.0 + }; + let profile_elapsed = pair.gate.elapsed_secs(); + let supply = pair.gate.current_supply_spm(); + let target_spm = pair.gate.current_target_spm(); + info!( + upstream_ch, + new_difficulty = pool_difficulty, + prev_difficulty = prev_difficulty, + pct_change = format!("{:+.1}%", pct_change), + profile_elapsed_secs = format!("{:.1}", profile_elapsed), + supply_spm = format!("{:.2}", supply), + target_spm = format!("{:.2}", target_spm), + "Pool vardiff fired" + ); + pair.pool_difficulty = Some(pool_difficulty); + } + + if self.config.min_downstream_difficulty > 0.0 { + self.handle_set_target_with_floor(upstream_ch, target.clone().into_static()) + .await; + } else { + if let Some(pair) = self + .channels + .values_mut() + .find(|m| m.upstream_channel_id == Some(upstream_ch)) + { + pair.miner_difficulty = pool_difficulty; + debug!( + upstream_ch, + difficulty = pool_difficulty, + "SetTarget: forwarding to miner" + ); + } + self.forward_to_downstream_by_upstream_channel(upstream_ch, msg) + .await; + } + } + Mining::SetExtranoncePrefix(ref prefix) => { + let upstream_ch = prefix.channel_id; + self.forward_to_downstream_by_upstream_channel(upstream_ch, msg) + .await; + } + Mining::SubmitSharesSuccess(ref s) => { + debug!( + channel_id = s.channel_id, + last_seq = s.last_sequence_number, + accepted = s.new_submits_accepted_count, + "Pool acknowledged shares" + ); + } + Mining::SubmitSharesError(ref e) => { + warn!( + channel_id = e.channel_id, + seq = e.sequence_number, + error = %e.error_code.as_utf8_or_hex(), + "Pool rejected share" + ); + } + other => { + debug!("Upstream mining message (unhandled): {other}"); + } + } + } + + async fn handle_set_target_with_floor( + &mut self, + upstream_channel_id: u32, + set_target: stratum_apps::stratum_core::mining_sv2::SetTarget<'static>, + ) { + let pair = self + .channels + .values_mut() + .find(|m| m.upstream_channel_id == Some(upstream_channel_id)); + + let Some(pair) = pair else { + debug!( + upstream_channel_id, + "No mapping for SetTarget (floor check)" + ); + return; + }; + + // Convert floor difficulty to a max target: target = 2^256 / difficulty + // For U256 target representation, higher value = easier. + // Pool's target is in set_target.maximum_target (le bytes). + let floor_difficulty = self.config.min_downstream_difficulty; + + // Compare: is pool's target easier (larger) than the floor target? + let pool_target_bytes: &[u8] = set_target.maximum_target.inner_as_ref(); + let pool_target_difficulty = target_to_difficulty(pool_target_bytes); + + if pool_target_difficulty < floor_difficulty { + // Pool's difficulty is below floor -- override with floor. + pair.floor_active = true; + debug!( + upstream_channel_id, + pool_diff = pool_target_difficulty, + floor_diff = floor_difficulty, + "Floor active: pool difficulty below floor, not forwarding SetTarget" + ); + // Don't forward -- miner keeps its current (harder) target. + // miner_difficulty stays unchanged. + } else { + // Pool's difficulty is at or above floor -- forward normally. + pair.floor_active = false; + pair.miner_difficulty = pool_target_difficulty; + debug!( + upstream_channel_id, + difficulty = pool_target_difficulty, + "SetTarget: forwarding to miner (via floor handler)" + ); + let ds_id = pair.downstream_id; + self.send_to_downstream(ds_id, Message::Mining(Mining::SetTarget(set_target))) + .await; + } + } + + async fn forward_to_downstream_by_upstream_channel( + &mut self, + upstream_channel_id: u32, + msg: Mining<'static>, + ) { + let pair = self + .channels + .values() + .find(|m| m.upstream_channel_id == Some(upstream_channel_id)); + + if let Some(pair) = pair { + let ds_id = pair.downstream_id; + self.send_to_downstream(ds_id, Message::Mining(msg)).await; + } else { + // No exact match — broadcast to all connected downstreams. + // This handles group-channel messages (channel_id 0) and cases where + // the pool uses a channel_id the proxy hasn't mapped yet. + let downstream_ids: Vec<_> = self.downstreams.keys().copied().collect(); + for ds_id in downstream_ids { + self.send_to_downstream(ds_id, Message::Mining(msg.clone())) + .await; + } + } + } + + async fn send_to_downstream(&mut self, id: DownstreamId, msg: Message) { + let frame: StandardSv2Frame = match msg.try_into() { + Ok(f) => f, + Err(e) => { + warn!( + downstream_id = id, + "Failed to encode message for downstream: {e:?}" + ); + return; + } + }; + + if let Some(ds) = self.downstreams.get_mut(&id) { + if let Err(e) = ds.writer.write_frame(frame.into()).await { + warn!(downstream_id = id, "Failed to write to downstream: {e:?}"); + self.downstreams.remove(&id); + } + } + } +} + +fn target_to_difficulty(target_le: &[u8]) -> f64 { + let mut msb_index = 31; + while msb_index > 0 && target_le[msb_index] == 0 { + msb_index -= 1; + } + if target_le[msb_index] == 0 { + return f64::MAX; + } + + let mut target_val: f64 = 0.0; + for i in (0..=msb_index).rev() { + target_val = target_val * 256.0 + target_le[i] as f64; + } + + if target_val == 0.0 { + return f64::MAX; + } + + // 2^256 / target via log to avoid overflow + let log_diff = 256.0 * 2.0_f64.ln() - target_val.ln(); + log_diff.exp() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn target_to_difficulty_known_values() { + // All zeros → max difficulty + let zeros = [0u8; 32]; + assert_eq!(target_to_difficulty(&zeros), f64::MAX); + + // All 0xFF → difficulty ~1 (target ≈ 2^256 - 1) + let max_target = [0xFF; 32]; + let diff = target_to_difficulty(&max_target); + assert!(diff > 0.9 && diff < 1.1, "Expected ~1.0, got {diff}"); + + // Target = 1 (LE: [1, 0, 0, ...]) → difficulty = 2^256 + let mut one = [0u8; 32]; + one[0] = 1; + let diff = target_to_difficulty(&one); + let expected = (256.0 * 2.0_f64.ln()).exp(); // 2^256 + let ratio = diff / expected; + assert!( + ratio > 0.99 && ratio < 1.01, + "Expected 2^256, ratio={ratio}" + ); + } +} diff --git a/test-tools/shape-proxy/src/share_gate.rs b/test-tools/shape-proxy/src/share_gate.rs new file mode 100644 index 000000000..7b68030eb --- /dev/null +++ b/test-tools/shape-proxy/src/share_gate.rs @@ -0,0 +1,176 @@ +use std::time::Instant; + +use crate::metrics::RollingWindow; +use crate::profile::RateProfile; + +pub struct ShareGate { + profile: RateProfile, + started_at: Instant, + bucket: f64, + capacity: f64, + last_refill: Instant, + supply_window: RollingWindow, + current_supply_spm: f64, + miner_difficulty: f64, +} + +impl ShareGate { + pub fn new(profile: RateProfile) -> Self { + Self { + profile, + started_at: Instant::now(), + bucket: 3.0, + capacity: 3.0, + last_refill: Instant::now(), + supply_window: RollingWindow::new(), + current_supply_spm: 0.0, + miner_difficulty: 1.0, + } + } + + pub fn record_share_arrived(&mut self, now: Instant, difficulty: f64) { + self.supply_window.record_weighted(now, difficulty); + self.current_supply_spm = self.supply_window.rate_spm(now); + self.miner_difficulty = difficulty; + } + + pub fn should_forward(&mut self) -> bool { + let now = Instant::now(); + self.current_supply_spm = self.supply_window.rate_spm(now); + + // Bootstrap: forward everything until we have supply measurements. + if self.effective_supply_spm() == 0.0 { + return true; + } + + self.refill(now); + + if self.bucket >= 1.0 { + self.bucket -= 1.0; + true + } else { + false + } + } + + pub fn current_target_spm(&self) -> f64 { + let elapsed = self.started_at.elapsed().as_secs_f64(); + let factor = self.profile.factor_at(elapsed); + let effective_supply = self.effective_supply_spm(); + if effective_supply == 0.0 { + 0.0 + } else { + factor * effective_supply + } + } + + pub fn current_supply_spm(&self) -> f64 { + self.effective_supply_spm() + } + + pub fn elapsed_secs(&self) -> f64 { + self.started_at.elapsed().as_secs_f64() + } + + pub fn current_profile(&self) -> &RateProfile { + &self.profile + } + + pub fn set_profile(&mut self, profile: RateProfile) { + let factor = profile.factor_at(0.0); + let effective_supply = self.effective_supply_spm(); + let initial_target = factor * effective_supply; + + self.profile = profile; + self.started_at = Instant::now(); + self.last_refill = Instant::now(); + self.capacity = Self::compute_capacity(initial_target); + self.bucket = self.bucket.min(self.capacity); + } + + fn refill(&mut self, now: Instant) { + let dt = now.duration_since(self.last_refill).as_secs_f64(); + self.last_refill = now; + + let elapsed = now.duration_since(self.started_at).as_secs_f64(); + let factor = self.profile.factor_at(elapsed); + let target_spm = factor * self.effective_supply_spm(); + + self.capacity = Self::compute_capacity(target_spm); + let tokens_earned = (target_spm / 60.0) * dt; + self.bucket = (self.bucket + tokens_earned).min(self.capacity); + } + + fn effective_supply_spm(&self) -> f64 { + if self.miner_difficulty == 0.0 { + return 0.0; + } + self.current_supply_spm / self.miner_difficulty + } + + fn compute_capacity(target_spm: f64) -> f64 { + (target_spm * 10.0 / 60.0).max(3.0) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::time::Duration; + + #[test] + fn track_forwards_all_at_factor_1() { + let mut gate = ShareGate::new(RateProfile::Track { factor: 1.0 }); + let now = Instant::now(); + + // Simulate 10 spm supply, then check forwarding + for i in 0..15 { + gate.record_share_arrived(now + Duration::from_secs(i * 6), 1.0); + } + + // At factor=1.0 with supply established, should forward + assert!(gate.should_forward()); + } + + #[test] + fn stall_profile_reports_zero_target() { + let mut gate = ShareGate::new(RateProfile::Track { factor: 1.0 }); + let now = Instant::now(); + + // Establish supply (10 spm at difficulty 1.0) + for i in 0..15 { + gate.record_share_arrived(now + Duration::from_secs(i * 6), 1.0); + } + + // Verify supply is measured + assert!(gate.current_supply_spm() > 5.0); + + // Switch to stall (immediately active) + gate.set_profile(RateProfile::Stall { + at_secs: 0.0, + duration_secs: 999.0, + }); + + // Target should be 0 during stall (factor=0 * supply) + assert_eq!(gate.current_target_spm(), 0.0); + } + + #[test] + fn track_profile_adapts_to_supply() { + let mut gate = ShareGate::new(RateProfile::Track { factor: 0.5 }); + let now = Instant::now(); + + // Simulate 10 spm supply (1 share/6s at difficulty 1.0) + for i in 0..15 { + gate.record_share_arrived(now + Duration::from_secs(i * 6), 1.0); + } + + let target = gate.current_target_spm(); + // Supply ~10.7 spm, target = 0.5 * supply ~5.4 + assert!( + target > 4.0 && target < 7.0, + "Expected ~5 spm, got {}", + target + ); + } +} diff --git a/test-tools/shape-proxy/src/upstream.rs b/test-tools/shape-proxy/src/upstream.rs new file mode 100644 index 000000000..3dc99f2c1 --- /dev/null +++ b/test-tools/shape-proxy/src/upstream.rs @@ -0,0 +1,157 @@ +use std::time::Duration; + +use stratum_apps::{ + key_utils::Secp256k1PublicKey, + network_helpers::{ + connect_with_noise, + noise_stream::{NoiseTcpReadHalf, NoiseTcpWriteHalf}, + TCP_CONNECT_TIMEOUT, + }, + stratum_core::{ + codec_sv2::StandardSv2Frame, + common_messages_sv2::{Protocol, SetupConnection}, + parsers_sv2::{AnyMessage, CommonMessages}, + }, +}; +use tokio::{net::TcpStream, sync::mpsc}; +use tracing::{error, info, warn}; + +use crate::config::Config; + +pub type Message = AnyMessage<'static>; +pub type Reader = NoiseTcpReadHalf; +pub type Writer = NoiseTcpWriteHalf; + +pub enum UpstreamEvent { + Connected { + writer: Writer, + }, + Frame { + frame: stratum_apps::stratum_core::codec_sv2::StandardEitherFrame, + }, + Disconnected, +} + +pub async fn connect_and_setup(config: &Config) -> Result<(Reader, Writer), String> { + let (mut reader, mut writer) = connect_upstream(config).await?; + setup_connection(&mut reader, &mut writer).await?; + Ok((reader, writer)) +} + +pub async fn upstream_manager_task(config: Config, tx: mpsc::UnboundedSender) { + let mut backoff = Duration::from_secs(1); + loop { + match connect_and_setup(&config).await { + Ok((mut reader, writer)) => { + backoff = Duration::from_secs(1); + info!("Upstream connection established"); + if tx.send(UpstreamEvent::Connected { writer }).is_err() { + return; + } + loop { + match reader.read_frame().await { + Ok(frame) => { + if tx.send(UpstreamEvent::Frame { frame }).is_err() { + return; + } + } + Err(e) => { + warn!("Upstream disconnected: {e:?}"); + if tx.send(UpstreamEvent::Disconnected).is_err() { + return; + } + break; + } + } + } + } + Err(e) => { + warn!("Upstream connection failed: {e}, retrying in {backoff:?}"); + } + } + tokio::time::sleep(backoff).await; + backoff = (backoff * 2).min(Duration::from_secs(30)); + } +} + +pub async fn connect_upstream(config: &Config) -> Result<(Reader, Writer), String> { + info!("Connecting to upstream pool at {}", config.upstream_address); + + let stream = tokio::time::timeout( + TCP_CONNECT_TIMEOUT, + TcpStream::connect(&config.upstream_address), + ) + .await + .map_err(|_| "TCP connect timed out".to_string())? + .map_err(|e| format!("TCP connect failed: {e}"))?; + + info!("TCP connected to {}", config.upstream_address); + + let authority_pub_key: Option = config + .upstream_authority_pubkey + .as_ref() + .map(|s| s.parse::()) + .transpose() + .map_err(|e| format!("Invalid upstream authority pubkey: {e}"))?; + + let noise_stream = connect_with_noise(stream, authority_pub_key) + .await + .map_err(|e| format!("Noise handshake failed: {e:?}"))?; + + info!("Noise handshake complete with upstream"); + Ok(noise_stream.into_split()) +} + +pub async fn setup_connection(reader: &mut Reader, writer: &mut Writer) -> Result<(), String> { + let setup = SetupConnection { + protocol: Protocol::MiningProtocol, + min_version: 2, + max_version: 2, + flags: 0, + endpoint_host: "shape-proxy".to_string().try_into().unwrap(), + endpoint_port: 0, + vendor: "shape-proxy".to_string().try_into().unwrap(), + hardware_version: "".to_string().try_into().unwrap(), + firmware: "".to_string().try_into().unwrap(), + device_id: "shape-proxy-0".to_string().try_into().unwrap(), + }; + + let frame: StandardSv2Frame = Message::Common(setup.into()) + .try_into() + .map_err(|e| format!("Frame encode error: {e:?}"))?; + writer + .write_frame(frame.into()) + .await + .map_err(|e| format!("Write error: {e:?}"))?; + info!("Sent SetupConnection to upstream"); + + let response = reader + .read_frame() + .await + .map_err(|e| format!("Read error: {e:?}"))?; + let mut frame: StandardSv2Frame = response + .try_into() + .map_err(|_| "Invalid frame from upstream".to_string())?; + let msg_type = frame.get_header().unwrap().msg_type(); + let payload = frame.payload(); + + let msg: CommonMessages = (msg_type, payload) + .try_into() + .map_err(|_| format!("Failed to parse message type {msg_type}"))?; + + match msg { + CommonMessages::SetupConnectionSuccess(m) => { + info!( + "Upstream SetupConnectionSuccess: version={}, flags={}", + m.used_version, m.flags + ); + Ok(()) + } + CommonMessages::SetupConnectionError(m) => { + let code = std::str::from_utf8(m.error_code.as_ref()).unwrap_or("unknown"); + error!("Upstream SetupConnectionError: {}", code); + Err(format!("SetupConnectionError: {code}")) + } + _ => Err("Unexpected message type during setup".to_string()), + } +}