From 9eadd525a541c15ce75d1ead6e03171ae9f9a4aa Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Wed, 22 Apr 2020 10:43:50 -0600 Subject: [PATCH 1/3] make-release.py: Versioning changes for 2.1.2. --- README.md | 2 +- configure.ac | 2 +- contrib/gitian-descriptors/gitian-linux.yml | 2 +- src/clientversion.h | 2 +- src/deprecation.h | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 73d856993..7d904fb22 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Zcash 2.1.2-rc1 +Zcash 2.1.2 =========== diff --git a/configure.ac b/configure.ac index 533fc48cd..d45e0a470 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 2) define(_CLIENT_VERSION_MINOR, 1) define(_CLIENT_VERSION_REVISION, 2) -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/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml index 403fd8d10..2bbc5e72b 100644 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -1,5 +1,5 @@ --- -name: "zcash-2.1.2-rc1" +name: "zcash-2.1.2" enable_cache: true distro: "debian" suites: diff --git a/src/clientversion.h b/src/clientversion.h index ba3740e07..e2ab2c2ff 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -18,7 +18,7 @@ #define CLIENT_VERSION_MAJOR 2 #define CLIENT_VERSION_MINOR 1 #define CLIENT_VERSION_REVISION 2 -#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/deprecation.h b/src/deprecation.h index 176debf3c..5041b6b4a 100644 --- a/src/deprecation.h +++ b/src/deprecation.h @@ -8,7 +8,7 @@ // Deprecation policy: // * Shut down 16 weeks' worth of blocks after the estimated release block height. // * A warning is shown during the 2 weeks' worth of blocks prior to shut down. -static const int APPROX_RELEASE_HEIGHT = 798142; +static const int APPROX_RELEASE_HEIGHT = 805837; static const int WEEKS_UNTIL_DEPRECATION = 16; static const int DEPRECATION_HEIGHT = APPROX_RELEASE_HEIGHT + (WEEKS_UNTIL_DEPRECATION * 7 * 24 * 48); From bfb0e4d985bf5baf15fffad3aaa9f831eed7b323 Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Wed, 22 Apr 2020 10:46:06 -0600 Subject: [PATCH 2/3] make-release.py: Updated manpages for 2.1.2. --- doc/man/zcash-cli.1 | 6 +++--- doc/man/zcash-tx.1 | 6 +++--- doc/man/zcashd.1 | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/man/zcash-cli.1 b/doc/man/zcash-cli.1 index 909959257..ea9d753c9 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.47.13. -.TH ZCASH-CLI "1" "April 2020" "zcash-cli v2.1.2-rc1" "User Commands" +.TH ZCASH-CLI "1" "April 2020" "zcash-cli v2.1.2" "User Commands" .SH NAME -zcash-cli \- manual page for zcash-cli v2.1.2-rc1 +zcash-cli \- manual page for zcash-cli v2.1.2 .SH DESCRIPTION -Zcash RPC client version v2.1.2\-rc1 +Zcash RPC client version v2.1.2 .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 a7bbf05f8..524328c2f 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.47.13. -.TH ZCASH-TX "1" "April 2020" "zcash-tx v2.1.2-rc1" "User Commands" +.TH ZCASH-TX "1" "April 2020" "zcash-tx v2.1.2" "User Commands" .SH NAME -zcash-tx \- manual page for zcash-tx v2.1.2-rc1 +zcash-tx \- manual page for zcash-tx v2.1.2 .SH DESCRIPTION -Zcash zcash\-tx utility version v2.1.2\-rc1 +Zcash zcash\-tx utility version v2.1.2 .SS "Usage:" .TP zcash\-tx [options] [commands] diff --git a/doc/man/zcashd.1 b/doc/man/zcashd.1 index 8601d7818..d454cc99d 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.47.13. -.TH ZCASHD "1" "April 2020" "zcashd v2.1.2-rc1" "User Commands" +.TH ZCASHD "1" "April 2020" "zcashd v2.1.2" "User Commands" .SH NAME -zcashd \- manual page for zcashd v2.1.2-rc1 +zcashd \- manual page for zcashd v2.1.2 .SH DESCRIPTION -Zcash Daemon version v2.1.2\-rc1 +Zcash Daemon version v2.1.2 .PP In order to ensure you are adequately protecting your privacy when using Zcash, please see . From fdf34cefac5dda776c5600fdee016a2304751ede Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Wed, 22 Apr 2020 10:46:06 -0600 Subject: [PATCH 3/3] make-release.py: Updated release notes and changelog for 2.1.2. --- contrib/debian/changelog | 6 + doc/authors.md | 63 ++- doc/release-notes.md | 182 ------- doc/release-notes/release-notes-2.1.2.md | 623 +++++++++++++++++++++++ 4 files changed, 667 insertions(+), 207 deletions(-) create mode 100644 doc/release-notes/release-notes-2.1.2.md diff --git a/contrib/debian/changelog b/contrib/debian/changelog index 509d9f398..db4b428a1 100644 --- a/contrib/debian/changelog +++ b/contrib/debian/changelog @@ -1,3 +1,9 @@ +zcash (2.1.2) stable; urgency=medium + + * 2.1.2 release. + + -- Electric Coin Company Wed, 22 Apr 2020 10:46:06 -0600 + zcash (2.1.2~rc1) stable; urgency=medium * 2.1.2-rc1 release. diff --git a/doc/authors.md b/doc/authors.md index 0221cf1e3..10b8dec11 100644 --- a/doc/authors.md +++ b/doc/authors.md @@ -1,63 +1,70 @@ Zcash Contributors ================== -Jack Grigg (925) +Jack Grigg (1020) Simon Liu (460) -Sean Bowe (291) -Eirik Ogilvie-Wigley (212) -Daira Hopwood (155) -Wladimir J. van der Laan (89) +Sean Bowe (306) +Eirik Ogilvie-Wigley (214) +Daira Hopwood (180) +Taylor Hornby (99) +Marshall Gaucher (99) +Wladimir J. van der Laan (96) Jay Graber (89) -Taylor Hornby (84) Jonas Schnelli (71) -Pieter Wuille (63) +Pieter Wuille (66) +Alfredo Garcia (59) Nathan Wilcox (56) -Larry Ruane (41) +Larry Ruane (43) +Cory Fields (41) Kevin Gallagher (38) -Cory Fields (38) Marco Falke (31) -Marshall Gaucher (25) -Matt Corallo (23) -Alfredo Garcia (19) +Matt Corallo (25) +Dimitris Apostolou (21) Jonathan "Duke" Leto (17) Luke Dashjr (16) syd (15) +avnish (14) Jorge Timón (14) -Dimitris Apostolou (13) +Gregory Maxwell (12) Paige Peterson (11) Ariel Gabizon (11) +practicalswift (9) nomnombtc (9) Benjamin Winston (9) kozyilmaz (8) fanquake (8) Peter Todd (8) -Gregory Maxwell (8) +Pavel Janík (7) Jeff Garzik (7) Charlie O'Keefe (7) Marius Kjærstad (6) +Karl-Johan Alm (6) David Mercer (6) Daniel Cousens (6) +ca333 (5) Suhas Daftuar (5) -Karl-Johan Alm (5) +Philip Kaufmann (5) +Patrick Strateman (5) Johnathan Corgan (5) +Gavin Andresen (5) Gareth Davies (5) Alex Morcos (5) sandakersmann (4) +gladcow (4) WO (4) -Philip Kaufmann (4) -Pavel Janík (4) -Patrick Strateman (4) João Barbosa (4) +Jeremy Rubin (4) +James O'Beirne (4) George Tankersley (4) Daniel Kraft (4) +zancas (3) lpescher (3) -ca333 (3) Per Grön (3) Patick Strateman (3) +NikVolf (3) +MeshCollider (3) Jim Posen (3) Jason Davies (3) -James O'Beirne (3) -Gavin Andresen (3) Alfie John (3) rofl0r (2) mruddy (2) @@ -76,7 +83,10 @@ Kaz Wesley (2) Joe Turgeon (2) Jack Gavigan (2) ITH4Coinomia (2) +Evan Klitzke (2) +Dagur Valberg Johannsson (2) Casey Rodarmor (2) +Carl Dong (2) Bryant Eisenbach (2) Brad Miller (2) Bjorn Hjortsberg (2) @@ -85,7 +95,8 @@ Alex Tsankov (2) zathras-crypto (1) unsystemizer (1) tpantin (1) -practicalswift (1) +ptschip (1) +murrayn (1) mrbandrews (1) kazcw (1) jeff-liang (1) @@ -98,7 +109,9 @@ daniel (1) codetriage-readme-bot (1) calebogden (1) ayleph (1) +avnish98 (1) Za Wilcox (1) +Yuri Zhykin (1) William M Peaster (1) Ulrich Kempken (1) Tom Ritter (1) @@ -114,6 +127,7 @@ Peter Pratscher (1) Pedro Branco (1) Paul Georgiou (1) Paragon Initiative Enterprises, LLC (1) +NicolasDorier (1) Nicolas DORIER (1) Nathaniel Mahieu (1) Murilo Santana (1) @@ -122,12 +136,12 @@ Maxwell Gubler (1) Matt Quinn (1) Mark Friedenbach (1) Louis Nyffenegger (1) +LitecoinZ (1) Leo Arias (1) Lauda (1) Lars-Magnus Skog (1) Kevin Pan (1) Jonas Nick (1) -Jeremy Rubin (1) Jeffrey Walton (1) Jainan-Tandel (1) Ian T (1) @@ -141,10 +155,9 @@ Ethan Heilman (1) Eran Tromer (1) Denis Lukianov (1) David Llop (1) -Dagur Valberg Johannsson (1) +Chun Kuan Lee (1) Christian von Roques (1) Chirag Davé (1) -Carl Dong (1) Cameron Boehmer (1) Bryan Stitt (1) Bruno Arueira (1) diff --git a/doc/release-notes.md b/doc/release-notes.md index f99ca0ddd..a29094b51 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -4,185 +4,3 @@ release-notes at release time) Notable changes =============== -Network Upgrade 3: Heartwood ----------------------------- - -The code preparations for the Heartwood network upgrade are finished and -included in this release. The following ZIPs are being deployed: - -- [ZIP 213: Shielded Coinbase](https://zips.z.cash/zip-0213) -- [ZIP 221: FlyClient - Consensus-Layer Changes](https://zips.z.cash/zip-0221) - -Heartwood will activate on testnet at height 903800, and can also be activated -at a specific height in regtest mode by setting the config option -`-nuparams=f5b9230b:HEIGHT`. - -As a reminder, because the Heartwood activation height is not yet specified for -mainnet, version 2.1.2 will behave similarly as other pre-Heartwood releases -even after a future activation of Heartwood on the network. Upgrading from 2.1.2 -will be required in order to follow the Heartwood network upgrade on mainnet. - -See [ZIP 250](https://zips.z.cash/zip-0250) for additional information about the -deployment process for Heartwood. - -### Mining to Sapling addresses - -Miners and mining pools that wish to test the new "shielded coinbase" support on -the Heartwood testnet can generate a new Sapling address with `z_getnewaddress`, -add the config option `mineraddress=SAPLING_ADDRESS` to their `zcash.conf` file, -and then restart their `zcashd` node. `getblocktemplate` will then return -coinbase transactions containing a shielded miner output. - -Note that `mineraddress` should only be set to a Sapling address after the -Heartwood network upgrade has activated; setting a Sapling address prior to -Heartwood activation will cause `getblocktemplate` to return block templates -that cannot be mined. - -Sapling viewing keys support ----------------------------- - -Support for Sapling viewing keys (specifically, Sapling extended full viewing -keys, as described in [ZIP 32](https://zips.z.cash/zip-0032)), has been added to -the wallet. Nodes will track both sent and received transactions for any Sapling -addresses associated with the imported Sapling viewing keys. - -- Use the `z_exportviewingkey` RPC method to obtain the viewing key for a - shielded address in a node's wallet. For Sapling addresses, these always begin - with "zxviews" (or "zxviewtestsapling" for testnet addresses). - -- Use `z_importviewingkey` to import a viewing key into another node. Imported - Sapling viewing keys will be stored in the wallet, and remembered across - restarts. - -- `z_getbalance` will show the balance of a Sapling address associated with an - imported Sapling viewing key. Balances for Sapling viewing keys will be - included in the output of `z_gettotalbalance` when the `includeWatchonly` - parameter is set to `true`. - -- RPC methods for viewing shielded transaction information (such as - `z_listreceivedbyaddress`) will return information for Sapling addresses - associated with imported Sapling viewing keys. - -Details about what information can be viewed with these Sapling viewing keys, -and what guarantees you have about that information, can be found in -[ZIP 310](https://zips.z.cash/zip-0310). - -Removal of time adjustment and the -maxtimeadjustment= option -------------------------------------------------------------- - -Prior to v2.1.1-1, `zcashd` would adjust the local time that it used by up -to 70 minutes, according to a median of the times sent by the first 200 peers -to connect to it. This mechanism was inherently insecure, since an adversary -making multiple connections to the node could effectively control its time -within that +/- 70 minute window (this is called a "timejacking attack"). - -In the v2.1.1-1 security release, in addition to other mitigations for -timejacking attacks, the maximum time adjustment was set to zero by default. -This effectively disabled time adjustment; however, a `-maxtimeadjustment=` -option was provided to override this default. - -As a simplification the time adjustment code has now been completely removed, -together with `-maxtimeadjustment=`. Node operators should instead ensure that -their local time is set reasonably accurately. - -If it appears that the node has a significantly different time than its peers, -a warning will still be logged and indicated on the metrics screen if enabled. - -View shielded information in wallet transactions ------------------------------------------------- - -In previous `zcashd` versions, to obtain information about shielded transactions -you would use either the `z_listreceivedbyaddress` RPC method (which returns all -notes received by an address) or `z_listunspent` (which returns unspent notes, -optionally filtered by addresses). There were no RPC methods that directly -returned details about spends, or anything equivalent to the `gettransaction` -method (which returns transparent information about in-wallet transactions). - -This release introduces a new RPC method `z_viewtransaction` to fill that gap. -Given the ID of a transaction in the wallet, it decrypts the transaction and -returns detailed shielded information for all decryptable new and spent notes, -including: - -- The address that each note belongs to. -- Values in both decimal ZEC and zatoshis. -- The ID of the transaction that each spent note was received in. -- An `outgoing` flag on each new note, which will be `true` if the output is not - for an address in the wallet. -- A `memoStr` field for each new note, containing its text memo (if its memo - field contains a valid UTF-8 string). - -Information will be shown for any address that appears in `z_listaddresses`; -this includes watch-only addresses linked to viewing keys imported with -`z_importviewingkey`, as well as addresses with spending keys (both generated -with `z_getnewaddress` and imported with `z_importkey`). - -Better error messages for rejected transactions after network upgrades ----------------------------------------------------------------------- - -The Zcash network upgrade process includes several features designed to protect -users. One of these is the "consensus branch ID", which prevents transactions -created after a network upgrade has activated from being replayed on another -chain (that might have occurred due to, for example, a -[friendly fork](https://electriccoin.co/blog/future-friendly-fork/)). This is -known as "two-way replay protection", and is a core requirement by -[various](https://blog.bitgo.com/bitgos-approach-to-handling-a-hard-fork-71e572506d7d?gi=3b80c02e027e) -[members](https://trezor.io/support/general/hard-forks/) of the cryptocurrency -ecosystem for supporting "hard fork"-style changes like our network upgrades. - -One downside of the way replay protection is implemented in Zcash, is that there -is no visible difference between a transaction being rejected by a `zcashd` node -due to targeting a different branch, and being rejected due to an invalid -signature. This has caused issues in the past when a user had not upgraded their -wallet software, or when a wallet lacked support for the new network upgrade's -consensus branch ID; the resulting error messages when users tried to create -transactions were non-intuitive, and particularly cryptic for transparent -transactions. - -Starting from this release, `zcashd` nodes will re-verify invalid transparent -and Sprout signatures against the consensus branch ID from before the most -recent network upgrade. If the signature then becomes valid, the transaction -will be rejected with the error message `old-consensus-branch-id`. This error -can be handled specifically by wallet providers to inform the user that they -need to upgrade their wallet software. - -Wallet software can also automatically obtain the latest consensus branch ID -from their (up-to-date) `zcashd` node, by calling `getblockchaininfo` and -looking at `{'consensus': {'nextblock': BRANCH_ID, ...}, ...}` in the JSON -output. - -Expired transactions notifications ----------------------------------- - -A new config option `-txexpirynotify` has been added that will cause `zcashd` to -execute a command when a transaction in the mempool expires. This can be used to -notify external systems about transaction expiry, similar to the existing -`-blocknotify` config option that notifies when the chain tip changes. - -RPC methods ------------ - -- The `z_importkey` and `z_importviewingkey` RPC methods now return the type of - the imported spending or viewing key (`sprout` or `sapling`), and the - corresponding payment address. - -- Negative heights are now permitted in `getblock` and `getblockhash`, to select - blocks backwards from the chain tip. A height of `-1` corresponds to the last - known valid block on the main chain. - -- A new RPC method `getexperimentalfeatures` returns the list of enabled - experimental features. - -Build system ------------- - -- The `--enable-lcov`, `--disable-tests`, and `--disable-mining` flags for - `zcutil/build.sh` have been removed. You can pass these flags instead by using - the `CONFIGURE_FLAGS` environment variable. For example, to enable coverage - instrumentation (thus enabling "make cov" to work), call: - - ``` - CONFIGURE_FLAGS="--enable-lcov --disable-hardening" ./zcutil/build.sh - ``` - -- The build system no longer defaults to verbose output. You can re-enable - verbose output with `./zcutil/build.sh V=1` diff --git a/doc/release-notes/release-notes-2.1.2.md b/doc/release-notes/release-notes-2.1.2.md new file mode 100644 index 000000000..0a4aa45d4 --- /dev/null +++ b/doc/release-notes/release-notes-2.1.2.md @@ -0,0 +1,623 @@ +Notable changes +=============== + +Network Upgrade 3: Heartwood +---------------------------- + +The code preparations for the Heartwood network upgrade are finished and +included in this release. The following ZIPs are being deployed: + +- [ZIP 213: Shielded Coinbase](https://zips.z.cash/zip-0213) +- [ZIP 221: FlyClient - Consensus-Layer Changes](https://zips.z.cash/zip-0221) + +Heartwood will activate on testnet at height 903800, and can also be activated +at a specific height in regtest mode by setting the config option +`-nuparams=f5b9230b:HEIGHT`. + +As a reminder, because the Heartwood activation height is not yet specified for +mainnet, version 2.1.2 will behave similarly as other pre-Heartwood releases +even after a future activation of Heartwood on the network. Upgrading from 2.1.2 +will be required in order to follow the Heartwood network upgrade on mainnet. + +See [ZIP 250](https://zips.z.cash/zip-0250) for additional information about the +deployment process for Heartwood. + +### Mining to Sapling addresses + +Miners and mining pools that wish to test the new "shielded coinbase" support on +the Heartwood testnet can generate a new Sapling address with `z_getnewaddress`, +add the config option `mineraddress=SAPLING_ADDRESS` to their `zcash.conf` file, +and then restart their `zcashd` node. `getblocktemplate` will then return +coinbase transactions containing a shielded miner output. + +Note that `mineraddress` should only be set to a Sapling address after the +Heartwood network upgrade has activated; setting a Sapling address prior to +Heartwood activation will cause `getblocktemplate` to return block templates +that cannot be mined. + +Sapling viewing keys support +---------------------------- + +Support for Sapling viewing keys (specifically, Sapling extended full viewing +keys, as described in [ZIP 32](https://zips.z.cash/zip-0032)), has been added to +the wallet. Nodes will track both sent and received transactions for any Sapling +addresses associated with the imported Sapling viewing keys. + +- Use the `z_exportviewingkey` RPC method to obtain the viewing key for a + shielded address in a node's wallet. For Sapling addresses, these always begin + with "zxviews" (or "zxviewtestsapling" for testnet addresses). + +- Use `z_importviewingkey` to import a viewing key into another node. Imported + Sapling viewing keys will be stored in the wallet, and remembered across + restarts. + +- `z_getbalance` will show the balance of a Sapling address associated with an + imported Sapling viewing key. Balances for Sapling viewing keys will be + included in the output of `z_gettotalbalance` when the `includeWatchonly` + parameter is set to `true`. + +- RPC methods for viewing shielded transaction information (such as + `z_listreceivedbyaddress`) will return information for Sapling addresses + associated with imported Sapling viewing keys. + +Details about what information can be viewed with these Sapling viewing keys, +and what guarantees you have about that information, can be found in +[ZIP 310](https://zips.z.cash/zip-0310). + +Removal of time adjustment and the -maxtimeadjustment= option +------------------------------------------------------------- + +Prior to v2.1.1-1, `zcashd` would adjust the local time that it used by up +to 70 minutes, according to a median of the times sent by the first 200 peers +to connect to it. This mechanism was inherently insecure, since an adversary +making multiple connections to the node could effectively control its time +within that +/- 70 minute window (this is called a "timejacking attack"). + +In the v2.1.1-1 security release, in addition to other mitigations for +timejacking attacks, the maximum time adjustment was set to zero by default. +This effectively disabled time adjustment; however, a `-maxtimeadjustment=` +option was provided to override this default. + +As a simplification the time adjustment code has now been completely removed, +together with `-maxtimeadjustment=`. Node operators should instead ensure that +their local time is set reasonably accurately. + +If it appears that the node has a significantly different time than its peers, +a warning will still be logged and indicated on the metrics screen if enabled. + +View shielded information in wallet transactions +------------------------------------------------ + +In previous `zcashd` versions, to obtain information about shielded transactions +you would use either the `z_listreceivedbyaddress` RPC method (which returns all +notes received by an address) or `z_listunspent` (which returns unspent notes, +optionally filtered by addresses). There were no RPC methods that directly +returned details about spends, or anything equivalent to the `gettransaction` +method (which returns transparent information about in-wallet transactions). + +This release introduces a new RPC method `z_viewtransaction` to fill that gap. +Given the ID of a transaction in the wallet, it decrypts the transaction and +returns detailed shielded information for all decryptable new and spent notes, +including: + +- The address that each note belongs to. +- Values in both decimal ZEC and zatoshis. +- The ID of the transaction that each spent note was received in. +- An `outgoing` flag on each new note, which will be `true` if the output is not + for an address in the wallet. +- A `memoStr` field for each new note, containing its text memo (if its memo + field contains a valid UTF-8 string). + +Information will be shown for any address that appears in `z_listaddresses`; +this includes watch-only addresses linked to viewing keys imported with +`z_importviewingkey`, as well as addresses with spending keys (both generated +with `z_getnewaddress` and imported with `z_importkey`). + +Better error messages for rejected transactions after network upgrades +---------------------------------------------------------------------- + +The Zcash network upgrade process includes several features designed to protect +users. One of these is the "consensus branch ID", which prevents transactions +created after a network upgrade has activated from being replayed on another +chain (that might have occurred due to, for example, a +[friendly fork](https://electriccoin.co/blog/future-friendly-fork/)). This is +known as "two-way replay protection", and is a core requirement by +[various](https://blog.bitgo.com/bitgos-approach-to-handling-a-hard-fork-71e572506d7d?gi=3b80c02e027e) +[members](https://trezor.io/support/general/hard-forks/) of the cryptocurrency +ecosystem for supporting "hard fork"-style changes like our network upgrades. + +One downside of the way replay protection is implemented in Zcash, is that there +is no visible difference between a transaction being rejected by a `zcashd` node +due to targeting a different branch, and being rejected due to an invalid +signature. This has caused issues in the past when a user had not upgraded their +wallet software, or when a wallet lacked support for the new network upgrade's +consensus branch ID; the resulting error messages when users tried to create +transactions were non-intuitive, and particularly cryptic for transparent +transactions. + +Starting from this release, `zcashd` nodes will re-verify invalid transparent +and Sprout signatures against the consensus branch ID from before the most +recent network upgrade. If the signature then becomes valid, the transaction +will be rejected with the error message `old-consensus-branch-id`. This error +can be handled specifically by wallet providers to inform the user that they +need to upgrade their wallet software. + +Wallet software can also automatically obtain the latest consensus branch ID +from their (up-to-date) `zcashd` node, by calling `getblockchaininfo` and +looking at `{'consensus': {'nextblock': BRANCH_ID, ...}, ...}` in the JSON +output. + +Expired transactions notifications +---------------------------------- + +A new config option `-txexpirynotify` has been added that will cause `zcashd` to +execute a command when a transaction in the mempool expires. This can be used to +notify external systems about transaction expiry, similar to the existing +`-blocknotify` config option that notifies when the chain tip changes. + +RPC methods +----------- + +- The `z_importkey` and `z_importviewingkey` RPC methods now return the type of + the imported spending or viewing key (`sprout` or `sapling`), and the + corresponding payment address. + +- Negative heights are now permitted in `getblock` and `getblockhash`, to select + blocks backwards from the chain tip. A height of `-1` corresponds to the last + known valid block on the main chain. + +- A new RPC method `getexperimentalfeatures` returns the list of enabled + experimental features. + +Build system +------------ + +- The `--enable-lcov`, `--disable-tests`, and `--disable-mining` flags for + `zcutil/build.sh` have been removed. You can pass these flags instead by using + the `CONFIGURE_FLAGS` environment variable. For example, to enable coverage + instrumentation (thus enabling "make cov" to work), call: + + ``` + CONFIGURE_FLAGS="--enable-lcov --disable-hardening" ./zcutil/build.sh + ``` + +- The build system no longer defaults to verbose output. You can re-enable + verbose output with `./zcutil/build.sh V=1` + +Changelog +========= + +Alfredo Garcia (40): + remove SignatureHash from python rpc tests + add negative height to getblock + allow negative index to getblockhash + update docs + add additional tests to rpc_wallet_z_getnewaddress + change convention + change regex + Return address and type of imported key in z_importkey + Delete travis file + dedup decode keys and addresses + remove unused imports + add txexpirynotify + fix rpx_wallet_tests + remove debug noise from 2 gtests + make type and size a pair in DecodeAny arguments + add missing calls to DecodeAny + add destination wrappers + change tuples to classes + change cm() to cmu() in SaplingNote class + change the cm member of OutputDescription to cmu + change maybe_cm to maybe_cmu + add getexperimentalfeatures rpc call + refactor experimental features + make fInsightExplorer a local + add check_node_log utility function + remove space after new line + move check_node_log framework test to a new file + use check_node_log in turnstile.py + add stop_node argument to check_node_log, use it in shieldingcoinbase + change constructors + minor comment fix + preserve test semantics + remove unused import + multiple debug categories documentation + return address info in z_importviewingkey + add expected address check to tests + change unclear wording in z_import calls address returned + Lock with cs_main inside gtests that call chainActive.Height() + add -lightwalletd experimental option + compute more structures in mempool DynamicMemoryUsage + +Carl Dong (1): + autoconf: Sane --enable-debug defaults. + +Chun Kuan Lee (1): + Reset default -g -O2 flags when enable debug + +Cory Fields (3): + bench: switch to std::chrono for time measurements + bench: prefer a steady clock if the resolution is no worse + build: Split hardening/fPIE options out + +Dagur Valberg Johannsson (1): + Improve z_getnewaddress tests + +Daira Hopwood (25): + Add missing cases for Blossom in ContextualCheckBlock tests. + Revert "Add -maxtimeadjustment with default of 0 instead of the 4200 seconds used in Bitcoin Core." + Remove uses of GetTimeOffset(). + Replace time adjustment with warning only. + Update GetAdjustedTime() to GetTime(). + Sort entries in zcash_gtest_SOURCES (other than test_tautology which is deliberately first). + Add release notes for removal of -maxtimeadjustment. + Resolve a race condition on `chainActive.Tip()` in initialization (introduced in #4379). + Setting a std::atomic variable in a signal handler only has defined behaviour if it is lock-free. + Add comment to `MilliSleep` documenting that it is an interruption point. + Exit init early if we request shutdown before having loaded the genesis block. + Fix typos/minor errors in comments, and wrap some lines. + Avoid a theoretical possibility of division-by-zero introduced in #4368. + Make the memo a mandatory argument for SendManyRecipient + Add a `zcutil/clean.sh` script that works (unlike `make clean`). + Split into clean.sh and distclean.sh. + Minor refactoring. + Executables end with .exe on Windows. + Avoid spurious error messages when cleaning up directories. + Address review comments. + Use `SA_RESTART` in `sa_flags` when setting up signal handlers. + Remove a redundant `rm -f` command. + Refer to altitude instead of height for history tree peaks + Address review comments: `target` and `depends/work` should be cleaned by clean.sh. + Clarify definition of NETWORK_UPGRADE_PEER_PREFERENCE_BLOCK_PERIOD. + +Dimitris Apostolou (8): + Fix Boost compilation on macOS + Remove libsnark preprocessor flags + Fix typo + End diff with LF character + Remove stale comment + Point at support community on Discord + Update documentation info + Fix typos + +Eirik Ogilvie-Wigley (2): + Include shielded transaction data when calculating RecursiveDynamicUsage of transactions + Account for malloc overhead + +Evan Klitzke (2): + Add --with-sanitizers option to configure + Make --enable-debug to pick better options + +Gavin Andresen (2): + Simple benchmarking framework + Support very-fast-running benchmarks + +Gregory Maxwell (4): + Avoid integer division in the benchmark inner-most loop. + Move GetWarnings and related globals to util. + Eliminate data races for strMiscWarning and fLargeWork*Found. + Move GetWarnings() into its own file. + +Jack Grigg (95): + Revert "Add configure flags for enabling ASan/UBSan and TSan" + configure: Re-introduce additional sanitizer flags + RPC: z_viewtransaction + depends: Add utfcpp to dependencies + RPC: Display valid UTF-8 memos in z_viewtransaction + RPC: Use OutgoingViewingKeys to recover non-wallet Sapling outputs + test: Check z_viewtransaction output in wallet_listreceived RPC test + Benchmark Zcash verification operations + Simulate worst-case block verification + zcutil/build.sh: Remove lcov and mining flags + configure: Change default Proton to match build.sh + zcutil/build.sh: Turn off verbosity by default + Make -fwrapv conditional on --enable-debug=no + Move default -g flag into configure.ac behind --enable-debug=no + Add build system changes to release notes + test: Hard-code hex memo in wallet_listreceived for Python3 compatibility + test: Fix pyflakes warnings + bench: "Use" result of crypto_sign_verify_detached + Add test vectors for small-order Ed25519 pubkeys + Patch libsodium 1.0.15 pubkey validation onto 1.0.18 + Patch libsodium 1.0.15 signature validation onto 1.0.18 + Add release notes for z_viewtransaction + Deduplicate some wallet keystore logic + Move Sprout and Sapling address logic into separate files + Move ZIP 32 classes inside zcash/Address.hpp + SaplingFullViewingKey -> SaplingExtendedFullViewingKey in keystore maps + Remove default address parameter from Sapling keystore methods + test: Add test for CBasicKeyStore::AddSaplingFullViewingKey + Add encoding and decoding for Sapling extended full viewing keys + Add Sapling ExtFVK support to z_exportviewingkey + Add in-memory Sapling ExtFVK support to z_importviewingkey + Store imported Sapling ExtFVKs in wallet database + OutputDescriptionInfo::Build() + ZIP 213 consensus rules + Add support for Sapling addresses in -mineraddress + wallet: Include coinbase txs in Sapling note selection + Add regtest-only -nurejectoldversions option + test: Minor tweaks to comments in LibsodiumPubkeyValidation + test: RPC test for shielded coinbase + Adjust comments on ZIP 213 logic + Use DoS level constants and parameters for ZIP 213 rejections + test: Check that shielded coinbase can be spent to a t-address + init: Inform on error that -mineraddress must be Sapling or transparent + test: Explicitly check Sapling consensus rules apply to shielded coinbase + Migrate GitHub issue template to new format + Add GitHub issue templates for feature requests and UX reports + depends: Remove comments from libsodium signature validation patch + Bring in librustzcash crate + Bring in Cargo.lock from librustzcash repo + rust: Pin toolchain to 1.36.0, matching depends system + rust: Adjust Cargo.toml so that it compiles + Update .gitignore for Rust code + Replace librustzcash from depends system with src/rust + Move root of Rust crate into repo root + depends: Remove unused vendored crates + Fix Rust static library linking for Windows builds + test: Rename FakeCoinsViewDB -> ValidationFakeCoinsViewDB + test: Modify ValidationFakeCoinsViewDB to optionally contain a coin + test: Add missing parameter selection to Validation.ReceivedBlockTransactions + mempool: Check transparent signatures against the previous network upgrade + mempool: Remove duplicate consensusBranchId from AcceptToMemoryPool + test: Add Overwinter and Sapling support to GetValidTransaction() helper + consensus: Check JoinSplit signatures against the previous network upgrade + depends: Use Rust 1.42.0 toolchain + Bring in updates to librustzcash crate + depends: Define Rust target in a single location + depends: Hard-code Rust target for all Darwin hosts + Add ZIP 221 logic to block index + Add ZIP 221 support to miner and getblocktemplate + Implement ZIP 221 consensus rules + Return the correct root from librustzcash_mmr_{append, delete} + Use a C array for HistoryEntry instead of std::array + test: Verify ZIP 221 logic against reference implementation + build: Move cargo arguments into RUST_BUILD_OPTS + build: Correctly remove generated files from .cargo + test: Build Rust tests as part of qa/zcash/full_test_suite.py + build: Connect cargo verbosity to make verbosity + test: Assert that GetValidTransaction supports the given branch ID + Comment tweaks and cleanups + test: Add an extra assertion to feature_zip221.py + Remove unnecessary else case in CCoinsViewCache::PreloadHistoryTree + Improve documentation of CCoinsViewCache::PreloadHistoryTree + Truncate HistoryCache.appends correctly for zero-indexed entries + Comment clarifications and fixes + Make peak_pos zero-indexed in CCoinsViewCache::PreloadHistoryTree + test: Ignore timestamps in addressindex checks + test: Add a second Sapling note to WalletTests.ClearNoteWitnessCache + test: Run Equihash test vectors on both C++ and Rust validators + Pass the block height through to CheckEquihashSolution() + consensus: From Heartwood activation, use Rust Equihash validator + zcutil/make-release.py: Fix to run with Python 3 + zcutil/make-release.py: Check for release dependencies + Update release notes for v2.1.2 + zcutil/release-notes.py: Add Python 3 execution header + Set hashFinalSaplingRoot and hashChainHistoryRoot in AddToBlockIndex + +James O'Beirne (1): + Add basic coverage reporting for RPC tests + +Jeremy Rubin (3): + Add Basic CheckQueue Benchmark + Address ryanofsky feedback on CCheckQueue benchmarks. Eliminated magic numbers, fixed scoping of vectors (and memory movement component of benchmark). + Add prevector destructor benchmark + +Karl-Johan Alm (1): + Refactoring: Removed using namespace from bench/ and test/ source files. + +Larry Ruane (2): + zcutil/fetch-params.sh unneeded --testnet arg should warn user + util: CBufferedFile fixes + +LitecoinZ (1): + Fix issue #3772 + +Marshall Gaucher (1): + Update qa/rpc-tests/addressindex.py + +Matt Corallo (2): + Remove countMaskInv caching in bench framework + Require a steady clock for bench with at least micro precision + +MeshCollider (3): + Fix race for mapBlockIndex in AppInitMain + Make fReindex atomic to avoid race + Consistent parameter names in txdb.h + +NicolasDorier (1): + [qa] assert_start_raises_init_error + +NikVolf (3): + push/pop history with tests + update chain history in ConnectBlock and DisconnectBlock + use iterative platform-independent log2i + +Patrick Strateman (1): + Acquire lock to check for genesis block. + +Pavel Janík (3): + Rewrite help texts for features enabled by default. + Ignore bench_bitcoin binary. + Prevent warning: variable 'x' is uninitialized + +Philip Kaufmann (1): + [Trivial] ensure minimal header conventions + +Pieter Wuille (3): + Benchmark rolling bloom filter + Introduce FastRandomContext::randbool() + FastRandom benchmark + +Sean Bowe (15): + Initialize ThreadNotifyWallets before additional blocks are imported. + Handle case of fresh wallets in ThreadNotifyWallets. + Clarify comment + Add librustzcash tests to the full test suite. + Add release profile optimizations and turn off panic unwinding in librustzcash. + Minor typo fixes. + Simplification for MacOS in rust-test. + make-release.py: Versioning changes for 2.1.2-rc1. + make-release.py: Updated manpages for 2.1.2-rc1. + make-release.py: Updated release notes and changelog for 2.1.2-rc1. + Add Rust resources to distribution tarball. + Add test_random.h to distribution tarball. + Set Heartwood activation height for testnet to 903800. + make-release.py: Versioning changes for 2.1.2. + make-release.py: Updated manpages for 2.1.2. + +Taylor Hornby (15): + Make the equihash validator macro set its output to false when throwing an exception. + Add test for unused bits in the Equihash solution encoding. + Add Python script for checking if dependencies have updates. + Add GitHub API credential + Update list of dependencies to check + Wrap long lines + Cache releases to reduce network usage and improve performance + Make updatecheck.py compatible with python2 + Have make clean delete temporary AFL build directory + Add AFL build directory to .gitignore + Have make clean delete AFL output directories. + Fix bug in updatecheck.py and add utfcpp to its dependency list + Fix typo in updatecheck.py + Update updatecheck.py with the new Rust dependencies and improve the error message in case the untracked dependency list becomes out of date. + Fix undefined behavior in CScriptNum + +Wladimir J. van der Laan (7): + bench: Add crypto hash benchmarks + Kill insecure_random and associated global state + bench: Fix subtle counting issue when rescaling iteration count + bench: Add support for measuring CPU cycles + bench: Fix initialization order in registration + util: Don't set strMiscWarning on every exception + test_framework: detect failure of bitcoind startup + +Yuri Zhykin (1): + bench: Added base58 encoding/decoding benchmarks + +avnish (14): + changed block_test to BlockTests + changed test names from _ to CamelCase + changed header_size_is_expected to HeaderSizeIsExpected + changed "equihash_tests" to EquihashTests + changed founders_reward_test to FoundersRewardTest + changes tests to camelcase + chnged keystore_tests to KeystoreTests + changed libzcash_utils to LibzcashUtils + changed test to CamelCase + changed test to CamelCase + changed test to CamelCase + changed seven_eq_seven to SevenEqSeven + changed txid_tests to TxidTests + changed wallet_zkeys_test to WalletZkeysTest + +avnish98 (1): + requested changes are rectified + +ca333 (2): + update libsodium to v1.0.18 + fix dead openssl download path + +gladcow (4): + Show reindex state in metrics + Use processed file size as progress in metrics during reindex + Byte sizes format + Move reindex progress globals to metrics.h/cpp + +Marshall Gaucher (74): + update /usr/bin/env; fix print conventions + update test_framework modules + Update rpc-test/test_framework to Py3 convention,modules,encoding + Update ignored testScriptsExt to Python3 + Update python3 env path, remove python 2.7 assert + Update hexlify for encoding, update to py3 io module + Update py3 env path, remove py2 assert + Update py2 conventions to py3, remove py2 env and assert + Update py2 conventions to py3, update Decimal calls + Update py2 env path, remove py2 assert + Update py2 env path, remove py2 assert + Update py2 env path, remove py2 assert, update filter to return list for py3 + Update py2 env path, remove py2 assert, update http module and assert encoding + Update cmp to py3 functions, update map return to list for py3 + Standard py2 to py3 updates + Update py2 modules to py3, update encoding to be py3 compatible + Update to py3 conventions, update decimal calls to be consistent + Update to py3 conventions, update filter to return list + update to py3 conventions, update range to return list for py3 + update to py3 convention, update execfile to py3 call + update to py3 conventions, update cmp to be py3 compatible, update map to return list for py3 + update to py3 conventions, preserve ipv6 patch + update str cast to prevent address assert issues + clean up binascii call + Add keyerror execption + update to py3 env path + update to py3 conventions, update functions to be upstream consistent + update to py3 conventions, clean up code to be upstream consistent + update to py3 encodings + update encoding, decoding, serialize funcs for py3 + Update type to be decimal + update to py3 conventions, BUG with last assert_equal + Update io modules for py3, ISSUE with create_transaction function + Update to py3, ISSUE with encoding + Update to py3, ISSUE with encoding + Update to py3, ISSUE with encoding in create_block + Update to py3, ISSUE with encoding in create_block + Clean up code not needed from upstream + update io module, fix py3 division, and string encoding + update remaining encoding issues, add pyblake2 + Use more meaningful assert_equal from our original codebase + Clean up code from upstream we dont use + fix except bug for undefined url + Remove semi colons + make import urlparse module consistent,httplib update to py3 + correct update to python3 + clean-up imports, keep string notation consistent, remove spacing + clean up + Use upstream encoding for encodeDecimal + fix type issue + fix initialize statements for imports + clean up initiliaze statements from imports + update type for decimal 0 + remove debug lines from prior commits + clean up to minimize diff + remove u encoding + Fix decimal 0 issues + Clean up import calls + clean up + clean up + clean up + fix url and port issue + cleanups and fixing odd casting + Update json to simplejson to remove unicode and str issue from py2 to py3 + Update py3 division + fix pyflakes errors + clean up conventions and whitespace + fix string pattern issue on byte object + update comment regarding prior py2 exception + Fix remaining python3 conventions + Update remaining Python3 conventions + Updating remaining python3 conventions + Update #! env for python3 + Update RPCs to support cross platform paths and libs + +murrayn (1): + Add build support for 'gprof' profiling. + +practicalswift (8): + build: Show enabled sanitizers in configure output + Add -ftrapv to DEBUG_CXXFLAGS when --enable-debug is used + Assert that what might look like a possible division by zero is actually unreachable + Replace boost::function with std::function (C++11) + Avoid static analyzer warnings regarding uninitialized arguments + Restore default format state of cout after printing with std::fixed/setprecision + Initialize recently introduced non-static class member lastCycles to zero in constructor + Replace boost::function with std::function (C++11) + +ptschip (1): + Enable python tests for Native Windows + +zancas (3): + update comment, to correctly specify number of methods injected + replace "virtual" with "override" in subclasses + Remove remaining instances of boost::function +