diff --git a/Cargo.lock b/Cargo.lock index 36a0b1f..c8d9d2b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -25,9 +25,9 @@ dependencies = [ [[package]] name = "age" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a07d86e4272c093c88caf7864a2d09af52a5159180848ca4832a3cdbd7d014d5" +checksum = "22a9e0aa470b0ca06dcf4bcf513ccce90301df1cad9bd08221e4377c653aef13" dependencies = [ "age-core", "base64 0.21.7", @@ -133,9 +133,9 @@ checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" [[package]] name = "arc-swap" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207" +checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" dependencies = [ "rustversion", ] @@ -148,9 +148,9 @@ checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "async-trait" @@ -343,9 +343,9 @@ checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "bitvec" -version = "1.0.1" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +checksum = "ddcec3d12c579d40898fe0a9a358a803c23e9c52ca3c425707f81c9436211837" dependencies = [ "funty", "radium", @@ -439,9 +439,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cbc" @@ -454,9 +454,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.63" +version = "1.2.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "e17dd265a7d0f31ef544e1b20e03add05d3b45b491b633b10d67145d2acc1a38" dependencies = [ "find-msvc-tools", "shlex", @@ -612,18 +612,18 @@ checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" [[package]] name = "crossbeam-channel" -version = "0.5.15" +version = "0.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -640,9 +640,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" [[package]] name = "crunchy" @@ -706,9 +706,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.21.3" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" dependencies = [ "darling_core", "darling_macro", @@ -716,11 +716,10 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.21.3" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" dependencies = [ - "fnv", "ident_case", "proc-macro2", "quote", @@ -730,9 +729,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.21.3" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core", "quote", @@ -741,12 +740,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.11" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", -] +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" [[package]] name = "derive-getters" @@ -822,7 +818,8 @@ checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" [[package]] name = "equihash" version = "0.3.0" -source = "git+https://github.com/zcash/librustzcash?rev=1105d8203eb595c28c39929fba65569de9696851#1105d8203eb595c28c39929fba65569de9696851" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "306286e8dcc39ab3dfceb74c792ce8baffdab90591321d3ffaae64829734c37f" dependencies = [ "blake2b_simd", "corez", @@ -847,7 +844,8 @@ dependencies = [ [[package]] name = "f4jumble" version = "0.1.1" -source = "git+https://github.com/zcash/librustzcash?rev=1105d8203eb595c28c39929fba65569de9696851#1105d8203eb595c28c39929fba65569de9696851" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d42773cb15447644d170be20231a3268600e0c4cea8987d013b93ac973d3cf7" dependencies = [ "blake2b_simd", ] @@ -974,12 +972,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - [[package]] name = "foldhash" version = "0.1.5" @@ -1163,24 +1155,21 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi", - "wasip2", - "wasip3", ] [[package]] name = "getset" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912" +checksum = "6cf442baaabe4213ce7d1239afc26c039180b6456da2cededa316ae2c8a77a77" dependencies = [ - "proc-macro-error2", "proc-macro2", "quote", "syn", @@ -1519,12 +1508,6 @@ dependencies = [ "syn", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "ident_case" version = "1.0.1" @@ -1534,7 +1517,8 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "incrementalmerkletree" version = "0.8.2" -source = "git+https://github.com/zcash/incrementalmerkletree?rev=7b23adb67044d2a9f4a68759f1e6340c3fc4735a#7b23adb67044d2a9f4a68759f1e6340c3fc4735a" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30821f91f0fa8660edca547918dc59812893b497d07c1144f326f07fdd94aba9" dependencies = [ "either", ] @@ -1557,8 +1541,6 @@ checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", "hashbrown 0.17.1", - "serde", - "serde_core", ] [[package]] @@ -1618,9 +1600,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.100" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ "cfg-if", "futures-util", @@ -1659,12 +1641,6 @@ dependencies = [ "spin", ] -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" version = "0.2.186" @@ -1720,9 +1696,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.32" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "matchers" @@ -1751,9 +1727,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "memuse" @@ -1835,9 +1811,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" dependencies = [ "num-integer", "num-traits", @@ -1845,9 +1821,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-integer" @@ -1898,9 +1874,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "orchard" -version = "0.15.0-pre.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77752de9c2865ca4a0d962b201b473d60bbe438d53a964a8707ec4bd401d631" +checksum = "cca2ede6a4a77bd729eed3be9303d98a08b217edc85190dcf4dbe004086d5a65" dependencies = [ "aes", "bitvec", @@ -2003,8 +1979,9 @@ dependencies = [ [[package]] name = "pczt" -version = "0.7.0" -source = "git+https://github.com/zcash/librustzcash?rev=1105d8203eb595c28c39929fba65569de9696851#1105d8203eb595c28c39929fba65569de9696851" +version = "0.8.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8fb3f5ea64b891d40cff8182aca0bd7d063c9460920546fe7066860b781de91" dependencies = [ "blake2b_simd", "bls12_381", @@ -2221,9 +2198,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.45" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ "proc-macro2", ] @@ -2242,9 +2219,9 @@ checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rand" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" dependencies = [ "libc", "rand_chacha", @@ -2342,9 +2319,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.4" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" +checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2" dependencies = [ "aho-corasick", "memchr", @@ -2354,9 +2331,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" dependencies = [ "aho-corasick", "memchr", @@ -2445,9 +2422,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -2473,9 +2450,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "ryu" @@ -2709,11 +2686,12 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.17.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "381b283ce7bc6b476d903296fb59d0d36633652b633b27f64db4fb46dcbfc3b9" +checksum = "76a5c54c7310e7b8b9577c286d7e399ddd876c3e12b3ed917a8aabc4b96e9e8c" dependencies = [ "base64 0.22.1", + "bs58", "chrono", "hex", "serde_core", @@ -2724,9 +2702,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.17.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6d4e30573c8cb306ed6ab1dca8423eec9a463ea0e155f45399455e0368b27e0" +checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660" dependencies = [ "darling", "proc-macro2", @@ -2746,9 +2724,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8" dependencies = [ "cfg-if", "cpufeatures", @@ -2788,8 +2766,9 @@ dependencies = [ [[package]] name = "shardtree" -version = "0.6.2" -source = "git+https://github.com/zcash/incrementalmerkletree?rev=7b23adb67044d2a9f4a68759f1e6340c3fc4735a#7b23adb67044d2a9f4a68759f1e6340c3fc4735a" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cc96e9b6b1c307749019e7e2cf9dd29881b1928ce6866e3702a02a4800aa345" dependencies = [ "bitflags", "either", @@ -2832,9 +2811,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] name = "socket2" @@ -2881,9 +2860,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ "proc-macro2", "quote", @@ -2909,7 +2888,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.4.3", "once_cell", "rustix", "windows-sys 0.61.2", @@ -2957,39 +2936,38 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" dependencies = [ "cfg-if", ] [[package]] name = "time" -version = "0.3.37" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" dependencies = [ "deranged", - "itoa", "num-conv", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.19" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f" dependencies = [ "num-conv", "time-core", @@ -3008,9 +2986,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" dependencies = [ "tinyvec_macros", ] @@ -3241,7 +3219,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" dependencies = [ - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", ] [[package]] @@ -3296,12 +3274,6 @@ dependencies = [ "tinyvec", ] -[[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" @@ -3320,11 +3292,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.3" +version = "1.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" +checksum = "ea5fab0d6c3c01ae70085a09cb03d4c7a1d6314e2b3e075392783396d724ca0a" dependencies = [ - "getrandom 0.4.2", + "getrandom 0.4.3", "js-sys", "serde_core", "wasm-bindgen", @@ -3434,29 +3406,11 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasip2" -version = "1.0.3+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" -dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", -] - [[package]] name = "wasm-bindgen" -version = "0.2.123" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ "cfg-if", "once_cell", @@ -3467,9 +3421,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.123" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3477,9 +3431,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.123" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ "bumpalo", "proc-macro2", @@ -3490,52 +3444,18 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.123" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap 2.14.0", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags", - "hashbrown 0.15.5", - "indexmap 2.14.0", - "semver", -] - [[package]] name = "which" -version = "8.0.3" +version = "8.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c789537cf2f7f55be8e6192f92e464174ee55f91af622777f7f1ceb0dbccd03e" +checksum = "48d7cd18d4acb58fb3cdfe9ea54e6cd96a4e7d4cc45c56338b236e82dad47248" dependencies = [ "libc", ] @@ -3646,100 +3566,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen" -version = "0.57.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" - -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap 2.14.0", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags", - "indexmap 2.14.0", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap 2.14.0", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "wyz" version = "0.5.1" @@ -3769,8 +3595,9 @@ checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" [[package]] name = "zcash_address" -version = "0.13.0-pre.0" -source = "git+https://github.com/zcash/librustzcash?rev=1105d8203eb595c28c39929fba65569de9696851#1105d8203eb595c28c39929fba65569de9696851" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a854b28c07dba372f4410ea8ad62b4bf7d5c2bf8be32fc4b31bc0db6521a975" dependencies = [ "bech32 0.11.1", "bs58", @@ -3782,8 +3609,9 @@ dependencies = [ [[package]] name = "zcash_client_backend" -version = "0.23.0" -source = "git+https://github.com/zcash/librustzcash?rev=1105d8203eb595c28c39929fba65569de9696851#1105d8203eb595c28c39929fba65569de9696851" +version = "0.24.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb0d78dcc345c36086112886223f6f1d6d224802808f15ac4f3ef144677029a1" dependencies = [ "base64 0.22.1", "bech32 0.11.1", @@ -3814,7 +3642,6 @@ dependencies = [ "shardtree", "subtle", "time", - "time-core", "tonic-prost-build", "tracing", "which", @@ -3832,8 +3659,9 @@ dependencies = [ [[package]] name = "zcash_client_sqlite" -version = "0.21.1" -source = "git+https://github.com/zcash/librustzcash?rev=1105d8203eb595c28c39929fba65569de9696851#1105d8203eb595c28c39929fba65569de9696851" +version = "0.22.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa9b039e66a3b79f2de45ebf86cd82545232d332631a84f7c017ae21572b8de" dependencies = [ "bip32", "bitflags", @@ -3879,7 +3707,8 @@ dependencies = [ [[package]] name = "zcash_encoding" version = "0.4.0" -source = "git+https://github.com/zcash/librustzcash?rev=1105d8203eb595c28c39929fba65569de9696851#1105d8203eb595c28c39929fba65569de9696851" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1440921903cdb86133fb9e2fe800be488015db2939a30bedb413078a1acb0306" dependencies = [ "corez", "hex", @@ -3888,8 +3717,9 @@ dependencies = [ [[package]] name = "zcash_keys" -version = "0.15.0-pre.0" -source = "git+https://github.com/zcash/librustzcash?rev=1105d8203eb595c28c39929fba65569de9696851#1105d8203eb595c28c39929fba65569de9696851" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36391ebfce7df2510c6564f79e608ed93f1c0692c6464e2397b248e06dae3912" dependencies = [ "bech32 0.11.1", "bip32", @@ -3917,9 +3747,9 @@ dependencies = [ [[package]] name = "zcash_note_encryption" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77efec759c3798b6e4d829fcc762070d9b229b0f13338c40bf993b7b609c2272" +checksum = "e1cb1b9170c94370e3d66c5cc0877661db743337588b64de7711239eed462198" dependencies = [ "chacha20", "chacha20poly1305", @@ -3930,8 +3760,9 @@ dependencies = [ [[package]] name = "zcash_primitives" -version = "0.29.0-pre.0" -source = "git+https://github.com/zcash/librustzcash?rev=1105d8203eb595c28c39929fba65569de9696851#1105d8203eb595c28c39929fba65569de9696851" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdbeccc05bfe63b6dee9e989c6ff5027421741562a4853c36504dd621f6a81b1" dependencies = [ "blake2b_simd", "block-buffer 0.11.0-rc.3", @@ -3960,8 +3791,9 @@ dependencies = [ [[package]] name = "zcash_proofs" -version = "0.29.0-pre.0" -source = "git+https://github.com/zcash/librustzcash?rev=1105d8203eb595c28c39929fba65569de9696851#1105d8203eb595c28c39929fba65569de9696851" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91fb0b420fb66a765f1fa92ab7a6b631aa54c08415415ef6185256826e74fbd" dependencies = [ "bellman", "blake2b_simd", @@ -3982,8 +3814,9 @@ dependencies = [ [[package]] name = "zcash_protocol" -version = "0.10.0-pre.0" -source = "git+https://github.com/zcash/librustzcash?rev=1105d8203eb595c28c39929fba65569de9696851#1105d8203eb595c28c39929fba65569de9696851" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2973d210e74ebd81adc50828fbbb284ab6aaa099308097c42c47dc63cf3420fc" dependencies = [ "corez", "document-features", @@ -4020,8 +3853,9 @@ dependencies = [ [[package]] name = "zcash_transparent" -version = "0.9.0-pre.0" -source = "git+https://github.com/zcash/librustzcash?rev=1105d8203eb595c28c39929fba65569de9696851#1105d8203eb595c28c39929fba65569de9696851" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72e0f8c142bed366ed5886dcfa8772ec90b5420cc127e6cdb76b6744c53a287b" dependencies = [ "bip32", "bs58", @@ -4100,18 +3934,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.51" +version = "0.8.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5361301a1d9e5dd94c524eb99365fbaed5b237e831d7f45e2ddea11ffe8627" +checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.51" +version = "0.8.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422033a2245cb4b6ff8def11b2dfaf184a2ab2573f5af28082a163a68889af0e" +checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" dependencies = [ "proc-macro2", "quote", @@ -4126,18 +3960,18 @@ checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" +checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", @@ -4169,8 +4003,9 @@ dependencies = [ [[package]] name = "zip321" -version = "0.8.0" -source = "git+https://github.com/zcash/librustzcash?rev=1105d8203eb595c28c39929fba65569de9696851#1105d8203eb595c28c39929fba65569de9696851" +version = "0.9.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb464491970d9b61889e4f2b7b00fb9f471a33692e5c0de3122fdc575d8067ab" dependencies = [ "base64 0.22.1", "nom", @@ -4181,6 +4016,6 @@ dependencies = [ [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/Cargo.toml b/Cargo.toml index d8cad0f..641ad10 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -70,32 +70,32 @@ uuid = { version = "1", features = ["v4", "serde"] } # `circuit` exposes `orchard::circuit::{ProvingKey, VerifyingKey}` so we can build the Orchard # proving key once at startup and reuse it for every send (the PCZT prove path), instead of # librustzcash's fused builder which rebuilds it per transaction. -orchard = { version = "=0.15.0-pre.2", default-features = false, features = ["circuit"] } -zcash_address = "0.13.0-pre.0" +orchard = { version = "0.15", default-features = false, features = ["circuit"] } +zcash_address = "0.13" # `CompactSize` builds the length-prefixed preimage for the `signmessage`/`verifymessage` # message hash (magic + message, each CompactSize-prefixed, double-SHA256), byte-identical to -# zcashd's `rpc/misc.cpp` and zallet. Pinned to the librustzcash rev in `[patch]` (0.4.0 there). +# zcashd's `rpc/misc.cpp` and zallet. zcash_encoding = "0.4" # `transparent-inputs` lets transparent receivers surface in getrawtransaction/getaddressinfo # and the received-by-address read paths; zecd's own wallets never expose transparent receivers. # `pczt` exposes `create_pczt_from_proposal` / `extract_and_store_transaction_from_pczt`, the # build/prove/store seam that lets the proving step take a cached Orchard proving key. -zcash_client_backend = { version = "0.23", features = ["orchard", "transparent-inputs", "pczt"] } -zcash_client_sqlite = { version = "0.21", features = ["unstable", "orchard", "serde", "transparent-inputs"] } -zcash_keys = { version = "0.15.0-pre.0", features = ["unstable", "orchard"] } -zcash_primitives = "0.29.0-pre.0" -zcash_proofs = { version = "0.29.0-pre.0", features = ["bundled-prover"] } -zcash_protocol = { version = "0.10.0-pre.0", features = ["local-consensus"] } -zcash_transparent = "0.9.0-pre.0" +zcash_client_backend = { version = "0.24.0-rc.1", features = ["orchard", "transparent-inputs", "pczt"] } +zcash_client_sqlite = { version = "0.22.0-rc.1", features = ["unstable", "orchard", "serde", "transparent-inputs"] } +zcash_keys = { version = "0.15", features = ["unstable", "orchard"] } +zcash_primitives = "0.29" +zcash_proofs = { version = "0.29", features = ["bundled-prover"] } +zcash_protocol = { version = "0.10", features = ["local-consensus"] } +zcash_transparent = "0.9" # Script asm rendering + standard-script solver for `getrawtransaction` (already in the # tree via zcash_transparent; same crate Zallet uses for this). zcash_script = "0.4.5" sapling = { package = "sapling-crypto", version = "0.7" } # PCZT roles (Prover/Signer) for the cached-proving-key send path. Versions track the -# zcash_client_backend `pczt` feature's own pin (0.7). -pczt = { version = "0.7", default-features = false, features = ["prover", "signer", "orchard", "sapling"] } +# zcash_client_backend `pczt` feature's own pin (0.8.0-rc.1). +pczt = { version = "0.8.0-rc.1", default-features = false, features = ["prover", "signer", "orchard", "sapling"] } zip32 = "0.2" -zip321 = "0.8" +zip321 = "0.9.0-rc.1" libc = "0.2.186" # Single-instance guard: an advisory exclusive lock on `/.lock` so two zecd processes # can't operate on the same data directory at once (mirrors zallet / zcashd). Linux only needs @@ -119,112 +119,65 @@ mimalloc = ["dep:mimalloc"] # mitigations that swapping out musl's `malloc-ng` would otherwise drop. `mimalloc` (non-secure) # remains available for anyone who wants the last few percent. See FINDINGS.md. mimalloc-secure = ["mimalloc", "mimalloc/secure"] -# NB: Ironwood (NU6.3 / V6) is **no longer a cargo feature** - it is compiled unconditionally (this -# RC branch pins the ironwood librustzcash line, which exposes the ironwood APIs unconditionally). +# NB: Ironwood (NU6.3 / V6) is **no longer a cargo feature** - it is compiled unconditionally (the +# published ironwood librustzcash line exposes the ironwood APIs unconditionally). # Activation is purely consensus-height driven via `is_nu_active(NetworkUpgrade::Nu6_3, ...)`: OFF on # mainnet (protocol has no NU6.3 height), ON on testnet at height 4_134_000, and opt-in on regtest # via the `ZECD_REGTEST_NU63_HEIGHT` env var (the ironwood harness sets it to 8; the standard harness -# leaves it unset). So ironwood is "always built, testnet-on, mainnet-off" with no build flag. This -# is an RC posture - the real release will pin published crates.io librustzcash instead of the git rev. +# leaves it unset). So ironwood is "always built, testnet-on, mainnet-off" with no build flag. The +# wallet crates are pinned to crates.io **release candidates** (see the version reqs above); move to +# the finals when they publish. [dev-dependencies] tempfile = "3" # Frontier bookkeeping for the fabricated-chain reorg test (matches librustzcash's version). incrementalmerkletree = "0.8" -# Patched dependencies. +# Dependency notes. # -# 1. i18n-embed-fl: a vendored 0.9.4 with the deterministic-argument-order fix from -# kellpossible/cargo-i18n#151 backported, so `age`'s fl! macro expansions (and therefore the -# reproducible Docker builds) stop being a per-build coin flip. Remove when an `age` release -# depends on i18n-embed-fl 0.10+. +# The ironwood / NU6.3 librustzcash line is now consumed **straight from crates.io** - the leaf +# crates as finals (`zcash_primitives`/`zcash_proofs 0.29.0`, `orchard 0.15.0`, `zcash_protocol +# 0.10.0`, `zcash_keys 0.15.0`, `zcash_address 0.13.0`, `zcash_transparent 0.9.0`) and the wallet +# crates as release candidates (`zcash_client_backend 0.24.0-rc.1`, `zcash_client_sqlite +# 0.22.0-rc.1`, `pczt 0.8.0-rc.1`, `zip321 0.9.0-rc.1`), published 2026-07-12. This replaced the +# previous all-or-nothing `[patch.crates-io]` git pin of the whole librustzcash workspace to the +# `dw/ironwood-scan-model` rev `1105d8203` (zcash/librustzcash#2539), which existed only because the +# wallet crates had no ironwood release yet. The shardtree/incrementalmerkletree git pins went with +# it: this line depends on published `shardtree 0.7` / `incrementalmerkletree 0.8.2`, which carry the +# explicit-checkpoint-retention APIs and the `clear_flags` checkpoint-pruning panic fix the old pins +# existed for. Zecd carries **no librustzcash fork and no git pins** - move the RC reqs to the finals +# when they publish. # -# 2. librustzcash → the OFFICIAL zcash/librustzcash repo, pinned by **git rev** to the ironwood / -# NU6.3 line (`dw/ironwood-scan-model` HEAD, rev `1105d8203`; zcash/librustzcash#2539) - the same -# ironwood line the confirmed-working reference wallet **zcash-devtool** builds against. This is a -# **plain upstream pin: zecd no longer carries a librustzcash fork.** (Previously it pinned -# `zecrocks/librustzcash` = this rev + one cherry-pick, "Backfill received-note memos for own -# self-sends". That cherry-pick was DROPPED here to move off the fork - see below - and is being -# submitted upstream separately.) The ironwood leaf crates are published to crates.io as release -# candidates (`zcash_primitives 0.29.0-pre.0`, `orchard 0.15.0-pre.2`, `zcash_protocol 0.10.0-pre.0`, -# `zcash_keys 0.15.0-pre.0`, `zcash_address 0.13.0-pre.0`, `zcash_transparent 0.9.0-pre.0`, -# `zcash_proofs 0.29.0-pre.0`), so `orchard` comes straight from crates.io (no git patch); but the -# wallet crates (`zcash_client_backend`/`zcash_client_sqlite`/`pczt`/`zip321`/`zcash_encoding`) are -# NOT yet published with the ironwood changes, so the whole librustzcash set stays git-pinned to the -# rev above. Repin straight to crates.io once the ironwood wallet crates are published. +# Still-relevant notes inherited from the git-pin era (they describe the published line too): # -# **Dropped cherry-pick - self-send memo backfill (fe9c4144).** It added a `zcash_client_sqlite` -# `put_blocks` pass that re-decrypts the wallet's own mined txs to fill a received note's NULL memo: -# a shielded self-payment is a `Recipient::External` (no received note at send time), the block -# scanner later creates the note with a NULL memo (compact outputs carry none), and enhancement -# skips the wallet's own txs (raw pre-stored → Status-only). The regtest suite showed this gap is -# **narrow and self-healing**: the live mempool path fills the memo on the authoring node in the -# common case, and a from-seed restore (no pre-stored raw → enhancement runs) recovers it - so it -# only bites the *authoring* node when the mempool missed its own self-send, and a rescan fixes it. -# Guarded by an ironwood-tier regtest that forces the block-scan-only path (send → stop → mine while -# down → restart same datadir); that test FAILS on this fork-free pin and PASSES with the cherry-pick, -# which is why it lives on a branch that carries the fix. Once the fix merges upstream, bump the rev. -# Not carried either: the create_pczt Ironwood-build (librustzcash#2543) - upstream -# `create_pczt_from_proposal` at this rev still rejects Ironwood PCZTs (`step_uses_ironwood`), so -# zecd routes **Ironwood sends through the fused `create_proposed_transactions` path** via the -# `ironwood_forces_fused` gate in `actor.rs` (~4.5 s/send keygen; drop the gate to reclaim the PCZT -# cache once upstream removes its guard). -# The upstream line carries the rest of the ironwood API zecd uses: ironwood receive **memos** -# (`decrypt_transaction` decrypts the Ironwood bundle), `ironwood_balance`, `Note::pool()`, the -# ironwood `ChainState`, and (for the fused send path) native Ironwood build+prove. NB the line -# pins **orchard `0.15.0-pre.2`** and needs the explicit-checkpoint-retention **shardtree** APIs plus -# a `clear_flags` checkpoint-pruning panic fix, so shardtree + incrementalmerkletree are git-patched -# below to **upstream `zcash/incrementalmerkletree`** (main, rev `7b23adb6`) - also not a fork. +# - **Self-send memo backfill is NOT in this line.** A cherry-pick (submitted upstream separately) +# filled a received note's NULL memo for the wallet's *own* mined self-sends via a `put_blocks` +# re-decryption pass. The gap is narrow and self-healing (the live mempool path fills the memo on +# the authoring node; a from-seed restore recovers it via enhancement) - it only bites the +# authoring node when the mempool missed its own self-send, and a rescan fixes it. Re-check when +# bumping to the next RC/final. +# - **Ironwood sends route through the fused `create_proposed_transactions` path** via the +# `ironwood_forces_fused` gate in `actor.rs` (~4.5 s/send keygen). NB the published RC now BUILDS +# Ironwood PCZTs (librustzcash#2543 landed - the old git rev rejected them), so the gate is a +# conservative choice, not an upstream constraint; drop it (and reclaim the PCZT proving-key cache) +# once the cached path is validated against an NU6.3-active chain. +# - **Single-pool-group input selection** (upstream `00c789f9`): shielded inputs come from one of +# two mutually-exclusive groups - {Orchard} or {Sapling+Ironwood}, never mixed - the NU6.3 +# migration model (past NU6.3 a new Orchard-address output becomes an ironwood V3 note, so Orchard +# V2 is a legacy drain-only pool). Applied *unconditionally* (pre-NU6.3 too), so the default +# (NU6.2) build no longer combines Sapling+Orchard inputs in one transaction; the `regtest_sapling` +# e2e was updated to the turnstile model to match. +# - **Ironwood model** (matches devtool): ironwood notes are **Orchard V3 notes** - same key tree, +# same key derivation, scanned by the existing Orchard path, stored in `ironwood_received_notes` +# and surfaced in `v_received_outputs` with pool code 4; balances roll up via +# `AccountBalance::ironwood_balance()`. **Sends**: the proposal auto-routes Orchard payment/change +# into the ironwood bundle past NU6.3, and the prover adds an ironwood proof step +# (`requires_ironwood_proof`/`create_ironwood_proof`) using a `PostNu6_3` proving key (see +# `actor.rs`; mirrors devtool's `pczt/prove.rs`). # -# This rev **includes `00c789f9`** ("Select shielded inputs from a single pool group"): shielded -# inputs are selected from one of two mutually-exclusive groups - {Orchard} or {Sapling+Ironwood}, -# never mixed - the NU6.3 migration model (past NU6.3 a new Orchard-address output becomes an -# ironwood V3 note, so Orchard V2 is a legacy drain-only pool). It is applied *unconditionally* -# (pre-NU6.3 too), so zecd's default (NU6.2) build no longer combines Sapling+Orchard inputs in one -# transaction; the `regtest_sapling` e2e was updated to the turnstile model to match (fund Orchard -# 2 ZEC / Sapling 1 ZEC; a 1.5-ZEC payment to the Sapling receiver draws the Orchard group and -# produces an Orchard->Sapling turnstile). We accept this to stay lock-step with devtool/upstream. -# A `[patch]` git-workspace must be all-or-nothing (a git crate's path-siblings would otherwise -# conflict with the same crates.io versions), so the whole librustzcash set is pinned to this one -# rev. `[patch]` is global (cargo can't feature-gate it), but upstream exposes the ironwood types -# unconditionally (no `cfg(zcash_unstable = "nu6.3")` gating remains upstream), and NU6.3 stays -# inactive without the `ironwood` cargo feature, so the default build is released-equivalent. -# Pinned by **git rev** (not a sibling path) so CI - which has no sibling checkout - can fetch it. -# -# Ironwood model at this rev (matches devtool, differs from the old valar fork): ironwood notes are -# **Orchard V3 notes** - same key tree, same key derivation, scanned by the existing Orchard path, -# stored in `ironwood_received_notes` and surfaced in `v_received_outputs` with pool code 4; -# balances roll up via `AccountBalance::ironwood_balance()`. **Sends**: the proposal auto-routes -# Orchard payment/change into the ironwood bundle past NU6.3, and the prover adds an ironwood proof -# step (`requires_ironwood_proof`/`create_ironwood_proof`) using a `PostNu6_3` proving key (see -# `actor.rs`; mirrors devtool's `pczt/prove.rs`). Bump this rev (and the crates.io `-pre` version -# reqs above) as the upstream branch advances. NOT threaded into the Docker/release pipeline -# (intentionally - would ship unreleased WIP into reproducible images). +# The only remaining patch: i18n-embed-fl, a vendored 0.9.4 with the deterministic-argument-order +# fix from kellpossible/cargo-i18n#151 backported, so `age`'s fl! macro expansions (and therefore the +# reproducible Docker builds) stop being a per-build coin flip. Remove when an `age` release depends +# on i18n-embed-fl 0.10+. [patch.crates-io] i18n-embed-fl = { path = "vendor/i18n-embed-fl" } -# equihash + f4jumble are leaf crates in the librustzcash workspace that the patched crates depend -# on; patch them to the same rev so a git-workspace sibling can't clash with a crates.io copy (matches -# zcash-devtool's ironwood-valar patch set). -equihash = { git = "https://github.com/zcash/librustzcash", rev = "1105d8203eb595c28c39929fba65569de9696851" } -f4jumble = { git = "https://github.com/zcash/librustzcash", rev = "1105d8203eb595c28c39929fba65569de9696851" } -zcash_address = { git = "https://github.com/zcash/librustzcash", rev = "1105d8203eb595c28c39929fba65569de9696851" } -zcash_encoding = { git = "https://github.com/zcash/librustzcash", rev = "1105d8203eb595c28c39929fba65569de9696851" } -zcash_protocol = { git = "https://github.com/zcash/librustzcash", rev = "1105d8203eb595c28c39929fba65569de9696851" } -zip321 = { git = "https://github.com/zcash/librustzcash", rev = "1105d8203eb595c28c39929fba65569de9696851" } -pczt = { git = "https://github.com/zcash/librustzcash", rev = "1105d8203eb595c28c39929fba65569de9696851" } -zcash_keys = { git = "https://github.com/zcash/librustzcash", rev = "1105d8203eb595c28c39929fba65569de9696851" } -zcash_client_backend = { git = "https://github.com/zcash/librustzcash", rev = "1105d8203eb595c28c39929fba65569de9696851" } -zcash_client_sqlite = { git = "https://github.com/zcash/librustzcash", rev = "1105d8203eb595c28c39929fba65569de9696851" } -zcash_primitives = { git = "https://github.com/zcash/librustzcash", rev = "1105d8203eb595c28c39929fba65569de9696851" } -zcash_proofs = { git = "https://github.com/zcash/librustzcash", rev = "1105d8203eb595c28c39929fba65569de9696851" } -zcash_transparent = { git = "https://github.com/zcash/librustzcash", rev = "1105d8203eb595c28c39929fba65569de9696851" } -# The ironwood librustzcash line requires the explicit-checkpoint-retention shardtree APIs -# (`ensure_retained`/`retained_checkpoints`/`remove_retained_checkpoint`) plus the `clear_flags` -# checkpoint-pruning panic fix. Both are in upstream `zcash/incrementalmerkletree` **main** but not -# in a published shardtree release compatible with this line (the librustzcash rev requires -# `shardtree ^0.6.2`; published 0.6.2 lacks the APIs and 0.7.0 breaks that req), so pin both crates -# to upstream main by git rev - **upstream, not a fork.** Mirror this exact rev on both crates. Drop -# once a shardtree release carrying these APIs lands within the `^0.6` line (or the librustzcash line -# moves to `shardtree 0.7`). -shardtree = { git = "https://github.com/zcash/incrementalmerkletree", rev = "7b23adb67044d2a9f4a68759f1e6340c3fc4735a" } -incrementalmerkletree = { git = "https://github.com/zcash/incrementalmerkletree", rev = "7b23adb67044d2a9f4a68759f1e6340c3fc4735a" } diff --git a/src/wallet/actor.rs b/src/wallet/actor.rs index 4538a4f..45e278d 100644 --- a/src/wallet/actor.rs +++ b/src/wallet/actor.rs @@ -2798,13 +2798,13 @@ impl WalletActor { /// separable). True for the default Orchard-only wallet with `cache_proving_key` on. A /// Sapling-spending wallet (or `cache_proving_key` off) uses the fused path, which has no /// prove/store seam - see [`Self::do_send_fused`]. Also forced off once NU6.3/Ironwood is active - /// (see [`Self::ironwood_forces_fused`]): upstream `create_pczt_from_proposal` still rejects a - /// built PCZT carrying an Ironwood bundle (`step_uses_ironwood`/`pczt_parts.ironwood.is_some()` -> - /// `ProposalNotSupported`), so post-NU6.3 sends ride the fused `create_proposed_transactions` - /// path, which upstream fully supports for Ironwood. NB this gates on the *wallet's* pools, not - /// the send's recipients: even when this is true, an individual send that pays a Sapling output - /// is still diverted to the fused path (`request_pays_sapling_output`), because the cached - /// path's extractor is handed no Sapling verifying key. + /// (see [`Self::ironwood_forces_fused`]): post-NU6.3 sends ride the fused + /// `create_proposed_transactions` path, which is validated end-to-end for Ironwood. + /// + /// NB this gates on the *wallet's* pools (and consensus), not the send's recipients: even when + /// this is true, an individual send that pays a Sapling output is still diverted to the fused + /// path (`request_pays_sapling_output`), because the cached path's extractor is handed no + /// Sapling verifying key. fn cached_pczt_path(&self) -> bool { self.orchard_keys.is_some() && !self.enabled_pools.contains(Pool::Sapling) @@ -2813,12 +2813,14 @@ impl WalletActor { /// Whether NU6.3/Ironwood is active as of the next block, forcing sends onto the fused build /// path. Post-NU6.3 an Orchard-pool spend routes its payment/change into the Ironwood (V6) - /// bundle, which the cached PCZT prove path cannot build - upstream `create_pczt_from_proposal` - /// hard-errors on an Ironwood bundle (`ProposalNotSupported`). Upstream's fused - /// `create_proposed_transactions` builds and proves Ironwood natively, so Ironwood sends take it. - /// TODO(upstream): drop this once `create_pczt_from_proposal` accepts Ironwood bundles - then - /// Ironwood sends ride the cached PCZT path and reuse the `PostNu6_3` key (the paired - /// `create_ironwood_proof` step in `prove_sign_pczt` is the ready other half). + /// bundle. Historically the gate was mandatory - the git-pinned `create_pczt_from_proposal` + /// hard-errored on an Ironwood bundle (`ProposalNotSupported`). The published + /// `zcash_client_backend 0.24.0-rc.1` now BUILDS Ironwood PCZTs (librustzcash#2543 landed), so + /// the gate is a conservative choice, not an upstream constraint: the fused + /// `create_proposed_transactions` path is the one validated end-to-end by the ironwood regtest + /// tier. TODO: drop this once the cached PCZT path (build -> `prove_sign_pczt` with the + /// `PostNu6_3` key + `create_ironwood_proof` (the ready other half) -> extract) is validated + /// against an NU6.3-active chain; Ironwood sends then reclaim the cached-proving-key speedup. fn ironwood_forces_fused(&self) -> bool { use zcash_protocol::consensus::{NetworkUpgrade, Parameters}; self.tip_height @@ -2894,6 +2896,9 @@ impl WalletActor { // `None` lets librustzcash derive the expiry from the proposal's target height, // matching the fused build path (and the pre-#2412 behaviour). None, + // The change strategy above uses padded (default) Orchard bundles, so the bundle + // type must be `DEFAULT` to match (see `with_unpadded_orchard_pool_bundles`). + orchard::builder::BundleType::DEFAULT, ) .map_err(|e| enrich_insufficient_funds(db, policy, classify_pczt_err(e)))?; Ok((pczt, shape, start.elapsed())) @@ -3100,7 +3105,6 @@ impl WalletActor { &SpendingKeys::from_unified_spending_key(usk), OvkPolicy::Sender, &proposal, - None, ) .map_err(|e| enrich_insufficient_funds(db, policy, classify_err(e)))?; if txids.len() > 1 { @@ -3456,6 +3460,7 @@ impl WalletActor { // unconditionally; this is a transparent-only send (no shielded spends), // so there's no anchor. ironwood_anchor: None, + orchard_pool_bundle_type: orchard::builder::BundleType::DEFAULT, }, ); @@ -4137,16 +4142,16 @@ fn prove_sign_pczt( }; // Ironwood (V6) proof step. A V6 transaction past NU6.3 carries a separate Ironwood bundle // needing its own proof, produced from the same `PostNu6_3` proving key as the Orchard proof - // (mirrors devtool's `pczt/prove.rs`). Only compiled under the `ironwood` feature, whose - // `ProvingKeyCache` builds the `PostNu6_3` key. + // (mirrors devtool's `pczt/prove.rs`). // // DEAD CODE TODAY (kept intentionally): `do_send` routes every post-NU6.3 send to the fused // `create_proposed_transactions` path (see `ironwood_forces_fused` in `cached_pczt_path`) and - // never reaches this PCZT prover for such a tx, because upstream `create_pczt_from_proposal` - // rejects Ironwood PCZTs. So `requires_ironwood_proof()` is always false here (the branch is - // dead but compiled). This step is the ready other half: once upstream lets the PCZT path build - // Ironwood bundles, dropping the `ironwood_forces_fused` gate routes Ironwood sends back through - // here - reusing the cached key instead of the fused path's per-send `ProvingKey::build()`. + // never reaches this PCZT prover for such a tx. So `requires_ironwood_proof()` is always false + // here (the branch is dead but compiled). This step is the ready other half: upstream's + // published RC now builds Ironwood PCZTs (librustzcash#2543), so dropping the + // `ironwood_forces_fused` gate - once the cached path is validated on an NU6.3-active chain - + // routes Ironwood sends back through here, reusing the cached key instead of the fused path's + // per-send `ProvingKey::build()`. let prover = if prover.requires_ironwood_proof() { prover .create_ironwood_proof(&keys.orchard_pk)