diff --git a/.cargo/config.toml.offline b/.cargo/config.toml.offline index 704f9f3ea6d..8b7762d20bf 100644 --- a/.cargo/config.toml.offline +++ b/.cargo/config.toml.offline @@ -4,25 +4,5 @@ linker = "aarch64-linux-gnu-gcc" [source.crates-io] replace-with = "vendored-sources" -[source."https://github.com/zcash/incrementalmerkletree"] -git = "https://github.com/zcash/incrementalmerkletree" -rev = "ffe4234788fd22662b937ba7c6ea01535fcc1293" -replace-with = "vendored-sources" - -[source."https://github.com/zcash/orchard"] -git = "https://github.com/zcash/orchard" -rev = "55fb089a335bbbc1cda186c706bc037073df8eb7" -replace-with = "vendored-sources" - -[source."https://github.com/zcash/sapling-crypto"] -git = "https://github.com/zcash/sapling-crypto" -rev = "b1ad3694ee13a2fc5d291ad04721a6252da0993c" -replace-with = "vendored-sources" - -[source."https://github.com/zcash/librustzcash.git"] -git = "https://github.com/zcash/librustzcash.git" -rev = "1410f1449100a417bfbc4f6c7167aa9808e38792" -replace-with = "vendored-sources" - [source.vendored-sources] # The directory for this source is set to RUST_VENDORED_SOURCES by src/Makefile.am diff --git a/Cargo.lock b/Cargo.lock index 4f9fe5c3067..605b9360aba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -259,7 +259,8 @@ dependencies = [ [[package]] name = "bridgetree" version = "0.6.0" -source = "git+https://github.com/zcash/incrementalmerkletree?rev=ffe4234788fd22662b937ba7c6ea01535fcc1293#ffe4234788fd22662b937ba7c6ea01535fcc1293" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cef977c7f8e75aa81fc589064c121ab8d32448b7939d34d58df479aa93e65ea5" dependencies = [ "incrementalmerkletree", ] @@ -592,7 +593,8 @@ checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "equihash" version = "0.2.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=1410f1449100a417bfbc4f6c7167aa9808e38792#1410f1449100a417bfbc4f6c7167aa9808e38792" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab579d7cf78477773b03e80bc2f89702ef02d7112c711d54ca93dcdce68533d5" dependencies = [ "blake2b_simd", "byteorder", @@ -611,7 +613,8 @@ dependencies = [ [[package]] name = "f4jumble" version = "0.1.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=1410f1449100a417bfbc4f6c7167aa9808e38792#1410f1449100a417bfbc4f6c7167aa9808e38792" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a83e8d7fd0c526af4aad893b7c9fe41e2699ed8a776a6c74aecdeafe05afc75" dependencies = [ "blake2b_simd", ] @@ -921,7 +924,8 @@ dependencies = [ [[package]] name = "incrementalmerkletree" version = "0.7.0" -source = "git+https://github.com/zcash/incrementalmerkletree?rev=ffe4234788fd22662b937ba7c6ea01535fcc1293#ffe4234788fd22662b937ba7c6ea01535fcc1293" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d45063fbc4b0a37837f6bfe0445f269d13d730ad0aa3b5a7f74aa7bf27a0f4df" dependencies = [ "either", "proptest", @@ -1350,8 +1354,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "orchard" -version = "0.9.1" -source = "git+https://github.com/zcash/orchard?rev=55fb089a335bbbc1cda186c706bc037073df8eb7#55fb089a335bbbc1cda186c706bc037073df8eb7" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f18e997fa121de5c73e95cdc7e8512ae43b7de38904aeea5e5713cc48f3c0ba" dependencies = [ "aes", "bitvec", @@ -1803,8 +1808,9 @@ dependencies = [ [[package]] name = "sapling-crypto" -version = "0.2.0" -source = "git+https://github.com/zcash/sapling-crypto?rev=b1ad3694ee13a2fc5d291ad04721a6252da0993c#b1ad3694ee13a2fc5d291ad04721a6252da0993c" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfff8cfce16aeb38da50b8e2ed33c9018f30552beff2210c266662a021b17f38" dependencies = [ "aes", "bellman", @@ -2538,8 +2544,9 @@ checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546" [[package]] name = "zcash_address" -version = "0.5.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=1410f1449100a417bfbc4f6c7167aa9808e38792#1410f1449100a417bfbc4f6c7167aa9808e38792" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ff95eac82f71286a79c750e674550d64fb2b7aadaef7b89286b2917f645457d" dependencies = [ "bech32", "bs58", @@ -2551,7 +2558,8 @@ dependencies = [ [[package]] name = "zcash_encoding" version = "0.2.1" -source = "git+https://github.com/zcash/librustzcash.git?rev=1410f1449100a417bfbc4f6c7167aa9808e38792#1410f1449100a417bfbc4f6c7167aa9808e38792" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "052d8230202f0a018cd9b5d1b56b94cd25e18eccc2d8665073bcea8261ab87fc" dependencies = [ "byteorder", "nonempty", @@ -2560,7 +2568,8 @@ dependencies = [ [[package]] name = "zcash_history" version = "0.4.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=1410f1449100a417bfbc4f6c7167aa9808e38792#1410f1449100a417bfbc4f6c7167aa9808e38792" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fde17bf53792f9c756b313730da14880257d7661b5bfc69d0571c3a7c11a76d" dependencies = [ "blake2b_simd", "byteorder", @@ -2582,8 +2591,9 @@ dependencies = [ [[package]] name = "zcash_primitives" -version = "0.17.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=1410f1449100a417bfbc4f6c7167aa9808e38792#1410f1449100a417bfbc4f6c7167aa9808e38792" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ab47d526d7fd6f88b3a2854ad81b54757a80c2aeadd1d8b06f690556af9743c" dependencies = [ "aes", "bip32", @@ -2621,8 +2631,9 @@ dependencies = [ [[package]] name = "zcash_proofs" -version = "0.17.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=1410f1449100a417bfbc4f6c7167aa9808e38792#1410f1449100a417bfbc4f6c7167aa9808e38792" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daba607872e60d91a09248d8e1ea3d6801c819fb80d67016d9de02d81323c10d" dependencies = [ "bellman", "blake2b_simd", @@ -2643,8 +2654,9 @@ dependencies = [ [[package]] name = "zcash_protocol" -version = "0.3.0" -source = "git+https://github.com/zcash/librustzcash.git?rev=1410f1449100a417bfbc4f6c7167aa9808e38792#1410f1449100a417bfbc4f6c7167aa9808e38792" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bc22b9155b2c7eb20105cd06de170d188c1bc86489b92aa3fda7b8da8d96acf" dependencies = [ "document-features", "incrementalmerkletree", diff --git a/Cargo.toml b/Cargo.toml index 2f4b524b7ca..a6ca7f7ef17 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -50,8 +50,8 @@ libc = "0.2" jubjub = "0.10" memuse = "0.2" nonempty = "0.7" -orchard = "0.9" -sapling = { package = "sapling-crypto", version = "0.2", features = ["temporary-zcashd"] } +orchard = "0.10" +sapling = { package = "sapling-crypto", version = "0.3", features = ["temporary-zcashd"] } secp256k1 = "0.27" subtle = "2.2" rand_core = "0.6" @@ -59,13 +59,13 @@ redjubjub = "0.7" tracing = "0.1" tracing-core = "0.1" tracing-appender = "0.2" -zcash_address = "0.5" +zcash_address = "0.6" zcash_encoding = "0.2.1" zcash_history = "0.4" zcash_note_encryption = "0.4" -zcash_primitives = { version = "0.17", features = ["temporary-zcashd", "transparent-inputs"] } -zcash_proofs = { version = "0.17", features = ["directories"] } -zcash_protocol = { version = "0.3", features = ["local-consensus"] } +zcash_primitives = { version = "0.19", features = ["temporary-zcashd", "transparent-inputs"] } +zcash_proofs = { version = "0.19", features = ["directories"] } +zcash_protocol = { version = "0.4", features = ["local-consensus"] } ed25519-zebra = "4" zeroize = "1.4.2" wagyu-zcash-parameters = "0.2" @@ -100,7 +100,7 @@ time = { version = "0.3", features = ["formatting", "macros"] } [dev-dependencies] incrementalmerkletree = { version = "0.7", features = ["test-dependencies"] } proptest = "1.0.0" -zcash_primitives = { version = "0.17", features = ["temporary-zcashd", "transparent-inputs", "test-dependencies"] } +zcash_primitives = { version = "0.19", features = ["temporary-zcashd", "transparent-inputs", "test-dependencies"] } [dependencies.tracing-subscriber] version = "0.3" @@ -111,16 +111,3 @@ features = ["ansi", "env-filter", "fmt", "time"] lto = 'thin' panic = 'abort' codegen-units = 1 - -[patch.crates-io] -bridgetree = { git = "https://github.com/zcash/incrementalmerkletree", rev = "ffe4234788fd22662b937ba7c6ea01535fcc1293" } -incrementalmerkletree = { git = "https://github.com/zcash/incrementalmerkletree", rev = "ffe4234788fd22662b937ba7c6ea01535fcc1293" } -orchard = { git = "https://github.com/zcash/orchard", rev = "55fb089a335bbbc1cda186c706bc037073df8eb7" } -sapling-crypto = { git = "https://github.com/zcash/sapling-crypto", rev = "b1ad3694ee13a2fc5d291ad04721a6252da0993c" } -equihash = { git = "https://github.com/zcash/librustzcash.git", rev = "1410f1449100a417bfbc4f6c7167aa9808e38792" } -zcash_address = { git = "https://github.com/zcash/librustzcash.git", rev = "1410f1449100a417bfbc4f6c7167aa9808e38792" } -zcash_encoding = { git = "https://github.com/zcash/librustzcash.git", rev = "1410f1449100a417bfbc4f6c7167aa9808e38792" } -zcash_history = { git = "https://github.com/zcash/librustzcash.git", rev = "1410f1449100a417bfbc4f6c7167aa9808e38792" } -zcash_primitives = { git = "https://github.com/zcash/librustzcash.git", rev = "1410f1449100a417bfbc4f6c7167aa9808e38792" } -zcash_proofs = { git = "https://github.com/zcash/librustzcash.git", rev = "1410f1449100a417bfbc4f6c7167aa9808e38792" } -zcash_protocol = { git = "https://github.com/zcash/librustzcash.git", rev = "1410f1449100a417bfbc4f6c7167aa9808e38792" } diff --git a/README.md b/README.md index 6be5f24eb2d..66c3eb9e9de 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Zcash 6.0.0-rc1 +Zcash 6.0.0 =========== diff --git a/configure.ac b/configure.ac index 93d06d2f30b..3a45d46757f 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 6) define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_REVISION, 0) -define(_CLIENT_VERSION_BUILD, 25) +define(_CLIENT_VERSION_BUILD, 50) define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50))) define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1))) define(_CLIENT_VERSION_IS_RELEASE, true) diff --git a/contrib/debian/changelog b/contrib/debian/changelog index d1f72b85f40..8ea0a87060e 100644 --- a/contrib/debian/changelog +++ b/contrib/debian/changelog @@ -1,3 +1,9 @@ +zcash (6.0.0) stable; urgency=high + + * 6.0.0 release. + + -- Electric Coin Company Wed, 02 Oct 2024 20:45:09 +0000 + zcash (6.0.0~rc1) stable; urgency=medium * 6.0.0-rc1 release. diff --git a/contrib/gitian-descriptors/gitian-linux-parallel.yml b/contrib/gitian-descriptors/gitian-linux-parallel.yml index d1ca5d0eeb6..ced83a7a1c5 100644 --- a/contrib/gitian-descriptors/gitian-linux-parallel.yml +++ b/contrib/gitian-descriptors/gitian-linux-parallel.yml @@ -1,5 +1,5 @@ --- -name: "zcash-6.0.0-rc1" +name: "zcash-6.0.0" enable_cache: true distro: "debian" suites: diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml index abaec372f96..e0ab81a022e 100644 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -1,5 +1,5 @@ --- -name: "zcash-6.0.0-rc1" +name: "zcash-6.0.0" enable_cache: true distro: "debian" suites: diff --git a/doc/authors.md b/doc/authors.md index 977adc2e67b..85b752f175f 100644 --- a/doc/authors.md +++ b/doc/authors.md @@ -1,9 +1,9 @@ Zcash Contributors ================== -* Jack Grigg (2157) -* Kris Nuttycombe (750) -* Daira-Emma Hopwood (483) +* Jack Grigg (2181) +* Kris Nuttycombe (751) +* Daira-Emma Hopwood (492) * Simon Liu (464) * Sean Bowe (413) * Eirik Ogilvie-Wigley (273) @@ -88,6 +88,7 @@ Zcash Contributors * Evan Klitzke (4) * DeckerSU (4) * Ben Woosley (4) +* y4ssi (3) * mruddy (3) * lpescher (3) * isle2983 (3) @@ -152,7 +153,6 @@ Zcash Contributors * Akio Nakamura (2) * ロハン ダル (1) * zathras-crypto (1) -* y4ssi (1) * vim88 (1) * user (1) * unsystemizer (1) diff --git a/doc/book/src/user/release-support.md b/doc/book/src/user/release-support.md index 9d938a53d96..52f62788950 100644 --- a/doc/book/src/user/release-support.md +++ b/doc/book/src/user/release-support.md @@ -45,4 +45,5 @@ time, and may shift due to changes in network solution power. | 5.10.0-rc1 | 2024-08-22 | 2700600 | 2024-10-31 | | 5.10.0 | 2024-08-27 | 2706540 | 2024-11-05 | | 6.0.0-rc1 | 2024-09-27 | 2710272 | 2024-11-08 | +| 6.0.0 | 2024-10-02 | 2796400 | 2025-01-22 | diff --git a/doc/man/zcash-cli.1 b/doc/man/zcash-cli.1 index 0962d4c3ca8..d9878345d00 100644 --- a/doc/man/zcash-cli.1 +++ b/doc/man/zcash-cli.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1. -.TH ZCASH-CLI "1" "September 2024" "zcash-cli v6.0.0-rc1" "User Commands" +.TH ZCASH-CLI "1" "October 2024" "zcash-cli v6.0.0" "User Commands" .SH NAME -zcash-cli \- manual page for zcash-cli v6.0.0-rc1 +zcash-cli \- manual page for zcash-cli v6.0.0 .SH DESCRIPTION -Zcash RPC client version v6.0.0\-rc1 +Zcash RPC client version v6.0.0 .PP In order to ensure you are adequately protecting your privacy when using Zcash, please see . diff --git a/doc/man/zcash-tx.1 b/doc/man/zcash-tx.1 index a905807c015..cffaa517bc7 100644 --- a/doc/man/zcash-tx.1 +++ b/doc/man/zcash-tx.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1. -.TH ZCASH-TX "1" "September 2024" "zcash-tx v6.0.0-rc1" "User Commands" +.TH ZCASH-TX "1" "October 2024" "zcash-tx v6.0.0" "User Commands" .SH NAME -zcash-tx \- manual page for zcash-tx v6.0.0-rc1 +zcash-tx \- manual page for zcash-tx v6.0.0 .SH DESCRIPTION -Zcash zcash\-tx utility version v6.0.0\-rc1 +Zcash zcash\-tx utility version v6.0.0 .SS "Usage:" .TP zcash\-tx [options] [commands] diff --git a/doc/man/zcashd-wallet-tool.1 b/doc/man/zcashd-wallet-tool.1 index b6184533de8..54314e1d750 100644 --- a/doc/man/zcashd-wallet-tool.1 +++ b/doc/man/zcashd-wallet-tool.1 @@ -1,7 +1,7 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1. -.TH ZCASHD-WALLET-TOOL "1" "September 2024" "zcashd-wallet-tool v6.0.0-rc1" "User Commands" +.TH ZCASHD-WALLET-TOOL "1" "October 2024" "zcashd-wallet-tool v6.0.0" "User Commands" .SH NAME -zcashd-wallet-tool \- manual page for zcashd-wallet-tool v6.0.0-rc1 +zcashd-wallet-tool \- manual page for zcashd-wallet-tool v6.0.0 .SH SYNOPSIS .B zcashd-wallet-tool [\fI\,OPTIONS\/\fR] diff --git a/doc/man/zcashd.1 b/doc/man/zcashd.1 index dc509792cf9..9da9ecaf635 100644 --- a/doc/man/zcashd.1 +++ b/doc/man/zcashd.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1. -.TH ZCASHD "1" "September 2024" "zcashd v6.0.0-rc1" "User Commands" +.TH ZCASHD "1" "October 2024" "zcashd v6.0.0" "User Commands" .SH NAME -zcashd \- manual page for zcashd v6.0.0-rc1 +zcashd \- manual page for zcashd v6.0.0 .SH DESCRIPTION -Zcash Daemon version v6.0.0\-rc1 +Zcash Daemon version v6.0.0 .PP In order to ensure you are adequately protecting your privacy when using Zcash, please see . @@ -484,7 +484,7 @@ Maximum size of data in data carrier transactions we relay and mine \fB\-txunpaidactionlimit=\fR .IP Transactions with more than this number of unpaid actions will not be -accepted to the mempool or relayed (default: 50) +accepted to the mempool or relayed (default: 0) .PP Block creation options: .HP @@ -495,7 +495,7 @@ Set maximum block size in bytes (default: 2000000) \fB\-blockunpaidactionlimit=\fR .IP Set the limit on unpaid actions that will be accepted in a block for -transactions paying less than the ZIP 317 fee (default: 50) +transactions paying less than the ZIP 317 fee (default: 0) .PP Mining options: .HP diff --git a/doc/release-notes.md b/doc/release-notes.md index 93368dacc84..a29094b5174 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -4,18 +4,3 @@ release-notes at release time) Notable changes =============== -Mining ------- - -- The default setting of `-blockunpaidactionlimit` is now zero, which has - the effect of no longer allowing "unpaid actions" in [block production]. - This adapts to current network conditions. If you have overridden this - setting as a miner, we recommend removing the override. This configuration - option may be removed entirely in a future release. - -[block production]: https://zips.z.cash/zip-0317#block-production - -Platform Support ----------------- - -- Windows builds have been fixed. diff --git a/doc/release-notes/release-notes-6.0.0.md b/doc/release-notes/release-notes-6.0.0.md new file mode 100644 index 00000000000..b53e8f1ce8b --- /dev/null +++ b/doc/release-notes/release-notes-6.0.0.md @@ -0,0 +1,84 @@ +Notable changes +=============== + +The mainnet activation of the NU6 network upgrade is supported by the 6.0.0 +release, with an activation height of 2726400, which should occur on +approximately November 23, 2024. Please upgrade to this release, or any +subsequent release, in order to follow the NU6 network upgrade. + +The following ZIPs are being deployed, or have been updated, as part of this upgrade: + +* [ZIP 207: Funding Streams (updated)](https://zips.z.cash/zip-0207) +* [ZIP 214: Consensus rules for a Zcash Development Fund (updated)](https://zips.z.cash/zip-0214) +* [ZIP 236: Blocks should balance exactly](https://zips.z.cash/zip-0236) +* [ZIP 253: Deployment of the NU6 Network Upgrade](https://zips.z.cash/zip-0253) +* [ZIP 1015: Block Reward Allocation for Non-Direct Development Funding](https://zips.z.cash/zip-1015) +* [ZIP 2001: Lockbox Funding Streams](https://zips.z.cash/zip-2001) + +In order to help the ecosystem prepare for the mainnet activation, NU6 has +already been activated on the Zcash testnet. Any node version 5.10.0 or higher, +including this release, supports the NU6 activation on testnet. + +Mining +------ + +- The default setting of `-blockunpaidactionlimit` is now zero, which has + the effect of no longer allowing "unpaid actions" in [block production]. + This adapts to current network conditions. If you have overridden this + setting as a miner, we recommend removing the override. This configuration + option may be removed entirely in a future release. + +[block production]: https://zips.z.cash/zip-0317#block-production + +Platform Support +---------------- + +- Windows builds have been fixed. + +Changelog +========= + +Daira-Emma Hopwood (9): + Ensure out-reference parameters of `CWallet::CreateTransaction` are initialized. + Rename ecc_addresses to bp_addresses in chainparams.cpp. + Make DEFAULT_BLOCK_UNPAID_ACTION_LIMIT zero. fixes #6899 (see that issue for rationale) + Add more detail to the "tx unpaid action limit exceeded" message. + Use at least the ZIP 317 fee for Sprout->Sapling migration. + Repair the RPC tests. + Add a regression test for the ZIP 317 default fee bug (#6956), and make the tests pass for now. + Code of Conduct: update email addresses and remove Sean as a contact. + Code of Conduct: add Kris and Str4d as contacts. + +Jack Grigg (24): + depends: Update Rust to 1.81.0 + depends: native_cmake 3.30.3 + depends: cxx 1.0.128 + cargo vet prune + cargo update + qa: Postpone Boost, LevelDB, and Clang updates + Fix clippy lints for 1.81 + Remove `#[should_panic]` tests of `extern "C"` functions + depends: Fix incompatibility between libsodium 1.0.20 and Clang 18 + depends: Downgrade libc++ for MinGW to 18.1.6-1 + Migrate to latest revision of Zcash Rust crates + depends: native_cmake 3.30.4 + Update release notes + Decrease support window to 6 weeks for 6.0.0-rc1 + make-release.py: Versioning changes for 6.0.0-rc1. + make-release.py: Updated manpages for 6.0.0-rc1. + make-release.py: Updated release notes and changelog for 6.0.0-rc1. + make-release.py: Updated book for 6.0.0-rc1. + qa: Add latest Clang release to postponed updates + Migrate to librustzcash crates revision right before NU6 mainnet height + Set support window back to the usual 16 weeks + Update release notes for 6.0.0 + make-release.py: Versioning changes for 6.0.0. + make-release.py: Updated manpages for 6.0.0. + +Kris Nuttycombe (1): + Use scopes to make it more obvious that certain variables are never used. + +y4ssi (2): + fix gitian-descriptors + Simplify Dockerfile (#6906) + diff --git a/qa/supply-chain/audits.toml b/qa/supply-chain/audits.toml index 56b015f4722..1b1a7c9f7d4 100644 --- a/qa/supply-chain/audits.toml +++ b/qa/supply-chain/audits.toml @@ -3044,7 +3044,7 @@ end = "2024-09-21" criteria = "safe-to-deploy" user-id = 169181 # Kris Nuttycombe (nuttycom) start = "2022-07-22" -end = "2024-09-21" +end = "2025-10-02" [[trusted.equihash]] criteria = "safe-to-deploy" @@ -3092,13 +3092,13 @@ end = "2024-09-21" criteria = "safe-to-deploy" user-id = 169181 # Kris Nuttycombe (nuttycom) start = "2023-02-28" -end = "2024-09-21" +end = "2025-10-02" [[trusted.incrementalmerkletree-testing]] criteria = "safe-to-deploy" user-id = 169181 # Kris Nuttycombe (nuttycom) -start = "2024-09-27" -end = "2025-09-27" +start = "2024-09-25" +end = "2025-10-02" [[trusted.orchard]] criteria = ["safe-to-deploy", "crypto-reviewed", "license-reviewed"] @@ -3112,12 +3112,24 @@ user-id = 1244 # ebfull start = "2022-10-19" end = "2024-09-21" +[[trusted.orchard]] +criteria = "safe-to-deploy" +user-id = 169181 # Kris Nuttycombe (nuttycom) +start = "2024-08-12" +end = "2025-10-02" + [[trusted.sapling-crypto]] criteria = ["safe-to-deploy", "crypto-reviewed", "license-reviewed"] user-id = 6289 # Jack Grigg (str4d) start = "2024-01-26" end = "2025-03-18" +[[trusted.sapling-crypto]] +criteria = ["safe-to-deploy", "crypto-reviewed"] +user-id = 169181 # Kris Nuttycombe (nuttycom) +start = "2024-08-12" +end = "2025-10-02" + [[trusted.windows-sys]] criteria = "safe-to-deploy" user-id = 64539 # Kenny Kerr (kennykerr) @@ -3238,6 +3250,12 @@ user-id = 169181 # Kris Nuttycombe (nuttycom) start = "2024-08-20" end = "2025-08-26" +[[trusted.zcash_primitives]] +criteria = "safe-to-deploy" +user-id = 6289 # Jack Grigg (str4d) +start = "2021-03-26" +end = "2025-10-02" + [[trusted.zcash_proofs]] criteria = ["safe-to-deploy", "crypto-reviewed", "license-reviewed"] user-id = 6289 # Jack Grigg (str4d) @@ -3250,6 +3268,12 @@ user-id = 169181 # Kris Nuttycombe (nuttycom) start = "2024-08-20" end = "2025-08-26" +[[trusted.zcash_proofs]] +criteria = "safe-to-deploy" +user-id = 6289 # Jack Grigg (str4d) +start = "2021-03-26" +end = "2025-10-02" + [[trusted.zcash_protocol]] criteria = "safe-to-deploy" user-id = 169181 # Kris Nuttycombe (nuttycom) diff --git a/qa/supply-chain/config.toml b/qa/supply-chain/config.toml index 2346b168bdc..41aaf9eae09 100644 --- a/qa/supply-chain/config.toml +++ b/qa/supply-chain/config.toml @@ -346,10 +346,6 @@ criteria = "safe-to-deploy" version = "1.17.0" criteria = "safe-to-deploy" -[[exemptions.orchard]] -version = "0.9.0" -criteria = "safe-to-deploy" - [[exemptions.pairing]] version = "0.22.0" criteria = "safe-to-deploy" @@ -466,10 +462,6 @@ criteria = "safe-to-deploy" version = "0.3.0" criteria = "safe-to-deploy" -[[exemptions.sapling-crypto]] -version = "0.2.0" -criteria = "safe-to-deploy" - [[exemptions.secp256k1]] version = "0.26.0" criteria = "safe-to-deploy" @@ -570,10 +562,6 @@ criteria = "safe-to-deploy" version = "0.9.5" criteria = "safe-to-deploy" -[[exemptions.visibility]] -version = "0.1.1" -criteria = "safe-to-deploy" - [[exemptions.wait-timeout]] version = "0.2.0" criteria = "safe-to-deploy" @@ -638,10 +626,6 @@ criteria = "safe-to-deploy" version = "2.5.0" criteria = "safe-to-deploy" -[[exemptions.zcash_encoding]] -version = "0.2.1" -criteria = "safe-to-deploy" - [[exemptions.zerocopy]] version = "0.7.35" criteria = "safe-to-deploy" diff --git a/qa/supply-chain/imports.lock b/qa/supply-chain/imports.lock index 3e06744ca14..efc9dcdc94a 100644 --- a/qa/supply-chain/imports.lock +++ b/qa/supply-chain/imports.lock @@ -2,8 +2,8 @@ # cargo-vet imports lock [[publisher.bridgetree]] -version = "0.5.0" -when = "2024-08-12" +version = "0.6.0" +when = "2024-09-25" user-id = 169181 user-login = "nuttycom" user-name = "Kris Nuttycombe" @@ -49,15 +49,29 @@ user-id = 1244 user-login = "ebfull" [[publisher.incrementalmerkletree]] -version = "0.6.0" -when = "2024-08-12" +version = "0.7.0" +when = "2024-09-25" user-id = 169181 user-login = "nuttycom" user-name = "Kris Nuttycombe" [[publisher.incrementalmerkletree-testing]] version = "0.1.0" -when = "2024-09-27" +when = "2024-09-25" +user-id = 169181 +user-login = "nuttycom" +user-name = "Kris Nuttycombe" + +[[publisher.orchard]] +version = "0.10.0" +when = "2024-10-02" +user-id = 169181 +user-login = "nuttycom" +user-name = "Kris Nuttycombe" + +[[publisher.sapling-crypto]] +version = "0.3.0" +when = "2024-10-02" user-id = 169181 user-login = "nuttycom" user-name = "Kris Nuttycombe" @@ -140,11 +154,17 @@ user-login = "kennykerr" user-name = "Kenny Kerr" [[publisher.zcash_address]] -version = "0.5.0" -when = "2024-08-26" -user-id = 169181 -user-login = "nuttycom" -user-name = "Kris Nuttycombe" +version = "0.6.0" +when = "2024-10-02" +user-id = 6289 +user-login = "str4d" +user-name = "Jack Grigg" + +[[publisher.zcash_encoding]] +version = "0.2.0" +when = "2022-10-19" +user-id = 1244 +user-login = "ebfull" [[publisher.zcash_history]] version = "0.4.0" @@ -161,22 +181,22 @@ user-login = "nuttycom" user-name = "Kris Nuttycombe" [[publisher.zcash_primitives]] -version = "0.17.0" -when = "2024-08-26" -user-id = 169181 -user-login = "nuttycom" -user-name = "Kris Nuttycombe" +version = "0.19.0" +when = "2024-10-02" +user-id = 6289 +user-login = "str4d" +user-name = "Jack Grigg" [[publisher.zcash_proofs]] -version = "0.17.0" -when = "2024-08-26" -user-id = 169181 -user-login = "nuttycom" -user-name = "Kris Nuttycombe" +version = "0.19.0" +when = "2024-10-02" +user-id = 6289 +user-login = "str4d" +user-name = "Jack Grigg" [[publisher.zcash_protocol]] -version = "0.3.0" -when = "2024-08-26" +version = "0.4.0" +when = "2024-10-02" user-id = 169181 user-login = "nuttycom" user-name = "Kris Nuttycombe" @@ -1677,3 +1697,21 @@ who = "Jack Grigg " criteria = "safe-to-deploy" delta = "1.0.61 -> 1.0.63" aggregated-from = "https://raw.githubusercontent.com/zcash/librustzcash/main/supply-chain/audits.toml" + +[[audits.zcash.audits.visibility]] +who = "Kris Nuttycombe " +criteria = "safe-to-deploy" +version = "0.1.1" +notes = """ +- Crate has no unsafe code, and sets `#![forbid(unsafe_code)]`. +- Crate has no powerful imports, and exclusively provides a proc macro + that safely malleates a visibility modifier. +""" +aggregated-from = "https://raw.githubusercontent.com/zcash/librustzcash/main/supply-chain/audits.toml" + +[[audits.zcash.audits.zcash_encoding]] +who = "Kris Nuttycombe " +criteria = "safe-to-deploy" +delta = "0.2.0 -> 0.2.1" +notes = "This release adds minor convenience methods and involves no unsafe code." +aggregated-from = "https://raw.githubusercontent.com/zcash/librustzcash/main/supply-chain/audits.toml" diff --git a/qa/zcash/postponed-updates.txt b/qa/zcash/postponed-updates.txt index fb99d734174..8b50e16962d 100644 --- a/qa/zcash/postponed-updates.txt +++ b/qa/zcash/postponed-updates.txt @@ -14,7 +14,9 @@ native_b2 1.86.0 2024-12-15 # Clang and Rust are currently pinned to LLVM 18 libcxx 19.1.0 2024-12-15 +libcxx 19.1.1 2024-12-15 native_clang 19.1.0 2024-12-15 +native_clang 19.1.1 2024-12-15 # We follow upstream Bitcoin Core's LevelDB updates leveldb 1.23 2024-12-15 diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 091c47d6aef..276ed3bfed7 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -140,8 +140,7 @@ class CMainParams : public CChainParams { consensus.vUpgrades[Consensus::UPGRADE_NU5].hashActivationBlock = uint256S("0000000000d723156d9b65ffcf4984da7a19675ed7e2f06d9e5d5188af087bf8"); consensus.vUpgrades[Consensus::UPGRADE_NU6].nProtocolVersion = 170120; - consensus.vUpgrades[Consensus::UPGRADE_NU6].nActivationHeight = - Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; + consensus.vUpgrades[Consensus::UPGRADE_NU6].nActivationHeight = 2726400; consensus.vUpgrades[Consensus::UPGRADE_ZFUTURE].nProtocolVersion = 0x7FFFFFFF; consensus.vUpgrades[Consensus::UPGRADE_ZFUTURE].nActivationHeight = Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; @@ -172,6 +171,10 @@ class CMainParams : public CChainParams { keyConstants.bech32mHRPs[TEX_ADDRESS] = "tex"; { + auto canopyActivation = consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight; + auto nu6Activation = consensus.vUpgrades[Consensus::UPGRADE_NU6].nActivationHeight; + + // ZIP 214 Revision 0 std::vector bp_addresses = { "t3LmX1cxWPPPqL4TZHx42HU3U5ghbFjRiif", "t3Toxk1vJQ6UjWQ42tUJz2rV2feUWkpbTDs", @@ -231,18 +234,37 @@ class CMainParams : public CChainParams { consensus.AddZIP207FundingStream( keyConstants, Consensus::FS_ZIP214_BP, - consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight, 2726400, + canopyActivation, + nu6Activation, bp_addresses); consensus.AddZIP207FundingStream( keyConstants, Consensus::FS_ZIP214_ZF, - consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight, 2726400, + canopyActivation, + nu6Activation, zf_addresses); consensus.AddZIP207FundingStream( keyConstants, Consensus::FS_ZIP214_MG, - consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight, 2726400, + canopyActivation, + nu6Activation, mg_addresses); + + // ZIP 214 Revision 1 + // FPF uses a single address repeated 12 times, once for each funding period. + std::vector fpf_addresses(12, "t3cFfPt1Bcvgez9ZbMBFWeZsskxTkPzGCow"); + + consensus.AddZIP207FundingStream( + keyConstants, + Consensus::FS_FPF_ZCG, + nu6Activation, + 3146400, + fpf_addresses); + consensus.AddZIP207LockboxStream( + keyConstants, + Consensus::FS_DEFERRED, + nu6Activation, + 3146400); } // The best chain should have at least this much work. @@ -473,6 +495,10 @@ class CTestNetParams : public CChainParams { // Testnet funding streams { + auto canopyActivation = consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight; + auto nu6Activation = consensus.vUpgrades[Consensus::UPGRADE_NU6].nActivationHeight; + + // ZIP 214 Revision 0 std::vector bp_addresses = { "t26ovBdKAJLtrvBsE2QGF4nqBkEuptuPFZz", "t26ovBdKAJLtrvBsE2QGF4nqBkEuptuPFZz", @@ -534,27 +560,32 @@ class CTestNetParams : public CChainParams { consensus.AddZIP207FundingStream( keyConstants, Consensus::FS_ZIP214_BP, - consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight, 2796000, + canopyActivation, + 2796000, // *not* the NU6 activation height bp_addresses); consensus.AddZIP207FundingStream( keyConstants, Consensus::FS_ZIP214_ZF, - consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight, 2796000, + canopyActivation, + 2796000, // *not* the NU6 activation height zf_addresses); consensus.AddZIP207FundingStream( keyConstants, Consensus::FS_ZIP214_MG, - consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight, 2796000, + canopyActivation, + 2796000, // *not* the NU6 activation height mg_addresses); - auto nu6Activation = consensus.vUpgrades[Consensus::UPGRADE_NU6].nActivationHeight; - std::vector zcg_addresses(13, "t2HifwjUj9uyxr9bknR8LFuQbc98c3vkXtu"); + // ZIP 214 Revision 1 + // FPF uses a single address repeated 13 times, once for each funding period. + // There are 13 periods because the start height does not align with a period boundary. + std::vector fpf_addresses(13, "t2HifwjUj9uyxr9bknR8LFuQbc98c3vkXtu"); consensus.AddZIP207FundingStream( keyConstants, Consensus::FS_FPF_ZCG, nu6Activation, 3396000, - zcg_addresses); + fpf_addresses); consensus.AddZIP207LockboxStream( keyConstants, Consensus::FS_DEFERRED, diff --git a/src/clientversion.h b/src/clientversion.h index f4702c1d3fa..4a98a917342 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -18,7 +18,7 @@ #define CLIENT_VERSION_MAJOR 6 #define CLIENT_VERSION_MINOR 0 #define CLIENT_VERSION_REVISION 0 -#define CLIENT_VERSION_BUILD 25 +#define CLIENT_VERSION_BUILD 50 //! Set to true for release, false for prerelease or test build #define CLIENT_VERSION_IS_RELEASE true diff --git a/src/consensus/params.cpp b/src/consensus/params.cpp index 490d8ad95e6..f8bd2df7134 100644 --- a/src/consensus/params.cpp +++ b/src/consensus/params.cpp @@ -43,7 +43,7 @@ namespace Consensus { }, { .recipient = "Lockbox NU6", - .specification = "https://zips.z.cash/draft-nuttycom-funding-allocation", + .specification = "https://zips.z.cash/zip-0214", .valueNumerator = 12, .valueDenominator = 100, } @@ -342,16 +342,16 @@ namespace Consensus { } } - std::vector Params::GetActiveFundingStreams(int nHeight) const + std::vector> Params::GetActiveFundingStreams(int nHeight) const { - std::vector activeStreams; + std::vector> activeStreams; // Funding streams are disabled if Canopy is not active. if (NetworkUpgradeActive(nHeight, Consensus::UPGRADE_CANOPY)) { for (uint32_t idx = Consensus::FIRST_FUNDING_STREAM; idx < Consensus::MAX_FUNDING_STREAMS; idx++) { auto fs = vFundingStreams[idx]; if (fs && nHeight >= fs.value().GetStartHeight() && nHeight < fs.value().GetEndHeight()) { - activeStreams.push_back(FundingStreamInfo[idx]); + activeStreams.push_back(std::make_pair(FundingStreamInfo[idx], fs.value())); } } } diff --git a/src/consensus/params.h b/src/consensus/params.h index efcdfcaa59d..62eee52a368 100644 --- a/src/consensus/params.h +++ b/src/consensus/params.h @@ -347,7 +347,7 @@ struct Params { /** * Returns the vector of active funding streams as of the given height. */ - std::vector GetActiveFundingStreams(int nHeight) const; + std::vector> GetActiveFundingStreams(int nHeight) const; /** * Returns the vector of active funding stream elements as of the given height. diff --git a/src/deprecation.h b/src/deprecation.h index 6c41e29d3a1..8b477dff7c1 100644 --- a/src/deprecation.h +++ b/src/deprecation.h @@ -14,8 +14,8 @@ // Shut down nodes running this version of code, `RELEASE_TO_DEPRECATION_WEEKS` weeks' worth // of blocks after the estimated release block height. A warning is shown during the 14 days' // worth of blocks prior to shut down. -static const int APPROX_RELEASE_HEIGHT = 2661888; -static const int RELEASE_TO_DEPRECATION_WEEKS = 6; +static const int APPROX_RELEASE_HEIGHT = 2667376; +static const int RELEASE_TO_DEPRECATION_WEEKS = 16; static const int EXPECTED_BLOCKS_PER_HOUR = 3600 / Consensus::POST_BLOSSOM_POW_TARGET_SPACING; static_assert(EXPECTED_BLOCKS_PER_HOUR == 48, "The value of Consensus::POST_BLOSSOM_POW_TARGET_SPACING was chosen such that this assertion holds."); static const int ACTIVATION_TO_DEPRECATION_BLOCKS = (RELEASE_TO_DEPRECATION_WEEKS * 7 * 24 * EXPECTED_BLOCKS_PER_HOUR); diff --git a/src/miner.cpp b/src/miner.cpp index 878c23a1df9..84a41a1d6dc 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -75,6 +75,7 @@ int64_t UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParam nNewTime = std::min(nNewTime, medianTimePast + MAX_FUTURE_BLOCK_TIME_MTP); } + // The timestamp of a given block template should not go backwards. if (nOldTime < nNewTime) pblock->nTime = nNewTime; @@ -366,7 +367,11 @@ CBlockTemplate* BlockAssembler::CreateNewBlock( if (chainparams.MineBlocksOnDemand()) pblock->nVersion = GetArg("-blockversion", pblock->nVersion); - pblock->nTime = GetTime(); + // Setting nTime to 0 and then calling UpdateTime ensures that it is set to the + // nearest timestamp to the current time in the consensus-valid range (see #6960). + pblock->nTime = 0; + UpdateTime(pblock, chainparams.GetConsensus(), pindexPrev); + const int64_t nMedianTimePast = pindexPrev->GetMedianTimePast(); CCoinsViewCache view(pcoinsTip); diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 4b133f311ec..59c36d2af63 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -968,7 +968,7 @@ UniValue getblocksubsidy(const UniValue& params, bool fHelp) UniValue lockboxstreams(UniValue::VARR); auto fsinfos = consensus.GetActiveFundingStreams(nHeight); for (int idx = 0; idx < fsinfos.size(); idx++) { - const auto& fsinfo = fsinfos[idx]; + const auto& fsinfo = fsinfos[idx].first; CAmount nStreamAmount = fsinfo.Value(nBlockSubsidy); UniValue fsobj(UniValue::VOBJ); @@ -977,8 +977,8 @@ UniValue getblocksubsidy(const UniValue& params, bool fHelp) fsobj.pushKV("value", ValueFromAmount(nStreamAmount)); fsobj.pushKV("valueZat", nStreamAmount); - auto fs = consensus.vFundingStreams[idx]; - auto recipient = fs.value().Recipient(consensus, nHeight); + auto fs = fsinfos[idx].second; + auto recipient = fs.Recipient(consensus, nHeight); examine(recipient, match { [&](const CScript& scriptPubKey) { diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp index 1141e7c8036..e73714b7840 100644 --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -372,18 +372,44 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) // Stop here if we needed to mine more blocks. assert(nblocks == sizeof(blockinfo)/sizeof(*blockinfo)); + auto nTime = pblocktemplate->block.nTime; + delete pblocktemplate; + // Set the clock to be just ahead of the last "mined" block, to ensure we satisfy the // future timestamp soft fork rule. - auto curTime = GetTime(); - OffsetClock::SetGlobal(); - OffsetClock::Instance()->Set(std::chrono::seconds(-curTime + pblocktemplate->block.nTime)); + FixedClock::SetGlobal(); + FixedClock::Instance()->Set(std::chrono::seconds(nTime)); + // Just to make sure we can still make simple blocks + BOOST_CHECK(pblocktemplate = BlockAssembler(chainparams).CreateNewBlock(scriptPubKey)); + BOOST_CHECK_EQUAL(pblocktemplate->block.nTime, nTime); + + auto mtp = chainActive.Tip()->GetMedianTimePast(); delete pblocktemplate; + auto minTime = mtp + 1; + auto maxTime = mtp + MAX_FUTURE_BLOCK_TIME_MTP; - // Just to make sure we can still make simple blocks + // Set the clock to be too far ahead of the MTP, violating the future timestamp rule. + FixedClock::Instance()->Set(std::chrono::seconds(maxTime + 1)); + + // This should succeed, and nTime should be clamped to the maximum consensus-valid value. + BOOST_CHECK(pblocktemplate = BlockAssembler(chainparams).CreateNewBlock(scriptPubKey)); + BOOST_CHECK_EQUAL(pblocktemplate->block.nTime, maxTime); + delete pblocktemplate; + + // Set the clock to be equal to the median-time-past, violating the rule that it must + // be after the MTP. + FixedClock::Instance()->Set(std::chrono::seconds(minTime - 1)); + + // This should succeed, and nTime should be clamped to the minimum consensus-valid value. BOOST_CHECK(pblocktemplate = BlockAssembler(chainparams).CreateNewBlock(scriptPubKey)); + BOOST_CHECK_EQUAL(pblocktemplate->block.nTime, minTime); delete pblocktemplate; + auto curTime = GetTime(); + OffsetClock::SetGlobal(); + OffsetClock::Instance()->Set(std::chrono::seconds(-curTime + nTime)); + TestMemPoolEntryHelper entry; entry.nFee = 0; entry.nHeight = 0; diff --git a/src/version.h b/src/version.h index 1cf9cb7711e..6c9b0d40bf9 100644 --- a/src/version.h +++ b/src/version.h @@ -10,7 +10,7 @@ * network protocol versioning */ -static const int PROTOCOL_VERSION = 170110; +static const int PROTOCOL_VERSION = 170120; //! initial proto version, to be increased after version/verack negotiation static const int INIT_PROTO_VERSION = 209; diff --git a/src/wallet/test/rpc_wallet_tests.cpp b/src/wallet/test/rpc_wallet_tests.cpp index b64f8db12d3..ecbe5a8f69a 100644 --- a/src/wallet/test/rpc_wallet_tests.cpp +++ b/src/wallet/test/rpc_wallet_tests.cpp @@ -315,8 +315,25 @@ BOOST_AUTO_TEST_CASE(rpc_wallet) } }; + auto check_lockbox_streams = [](UniValue obj, std::vector recipients, std::vector amounts) { + size_t n = recipients.size(); + BOOST_REQUIRE_EQUAL(amounts.size(), n); + UniValue lockboxstreams = find_value(obj, "lockboxstreams"); + BOOST_CHECK_EQUAL(lockboxstreams.size(), n); + if (lockboxstreams.size() != n) return; + + for (int i = 0; i < n; i++) { + UniValue fsobj = lockboxstreams[i]; + BOOST_CHECK_EQUAL(find_value(fsobj, "recipient").get_str(), recipients[i]); + BOOST_CHECK_EQUAL(find_value(fsobj, "specification").get_str(), "https://zips.z.cash/zip-0214"); + BOOST_CHECK_EQUAL(find_value(fsobj, "value").get_real(), amounts[i]); + } + }; + bool canopyEnabled = Params().GetConsensus().vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight != Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; + bool nu6Enabled = + Params().GetConsensus().vUpgrades[Consensus::UPGRADE_NU6].nActivationHeight != Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; // slow start + blossom activation + (pre blossom halving - blossom activation) * 2 BOOST_CHECK_NO_THROW(retValue = CallRPC("getblocksubsidy 1046400")); @@ -332,6 +349,7 @@ BOOST_AUTO_TEST_CASE(rpc_wallet) "t3XyYW8yBFRuMnfvm5KLGFbEVz25kckZXym" }); } + BOOST_CHECK(find_value(obj, "lockboxstreams").empty()); BOOST_CHECK_NO_THROW(retValue = CallRPC("getblocksubsidy 2726399")); obj = retValue.get_obj(); @@ -346,9 +364,27 @@ BOOST_AUTO_TEST_CASE(rpc_wallet) "t3XyYW8yBFRuMnfvm5KLGFbEVz25kckZXym" }); } + BOOST_CHECK(find_value(obj, "lockboxstreams").empty()); BOOST_CHECK_NO_THROW(retValue = CallRPC("getblocksubsidy 2726400")); obj = retValue.get_obj(); + BOOST_CHECK_EQUAL(find_value(obj, "miner").get_real(), nu6Enabled ? 1.25 : 1.5625); + BOOST_CHECK_EQUAL(find_value(obj, "founders").get_real(), 0.0); + if (nu6Enabled) { + check_funding_streams(obj, { "Zcash Community Grants NU6" }, + { 0.125, }, + { + "t3cFfPt1Bcvgez9ZbMBFWeZsskxTkPzGCow" + }); + check_lockbox_streams(obj, { "Lockbox NU6" }, + { 0.1875, }); + } else { + BOOST_CHECK(find_value(obj, "fundingstreams").empty()); + BOOST_CHECK(find_value(obj, "lockboxstreams").empty()); + } + + BOOST_CHECK_NO_THROW(retValue = CallRPC("getblocksubsidy 3146400")); + obj = retValue.get_obj(); BOOST_CHECK_EQUAL(find_value(obj, "miner").get_real(), 1.5625); BOOST_CHECK_EQUAL(find_value(obj, "founders").get_real(), 0.0); BOOST_CHECK(find_value(obj, "fundingstreams").empty());