Merge remote-tracking branch 'upstream/master' into feature/wallet_unified_addresses

This commit is contained in:
Kris Nuttycombe 2022-01-05 18:20:31 -07:00
commit 98967e2ec7
36 changed files with 1095 additions and 347 deletions

View File

@ -1,29 +1,9 @@
[source.crates-io] [source.crates-io]
replace-with = "vendored-sources" replace-with = "vendored-sources"
[source."https://github.com/ZcashFoundation/ed25519-zebra.git"]
git = "https://github.com/ZcashFoundation/ed25519-zebra.git"
rev = "d3512400227a362d08367088ffaa9bd4142a69c7"
replace-with = "vendored-sources"
[source."https://github.com/str4d/redjubjub.git"]
git = "https://github.com/str4d/redjubjub.git"
rev = "416a6a8ebf8bd42c114c938883016c04f338de72"
replace-with = "vendored-sources"
[source."https://github.com/zcash/incrementalmerkletree"]
git = "https://github.com/zcash/incrementalmerkletree"
rev = "b7bd6246122a6e9ace8edb51553fbf5228906cbb"
replace-with = "vendored-sources"
[source."https://github.com/zcash/librustzcash.git"] [source."https://github.com/zcash/librustzcash.git"]
git = "https://github.com/zcash/librustzcash.git" git = "https://github.com/zcash/librustzcash.git"
rev = "53d0a51d33a421cb76d3e3124d1e4c1c9036068e" rev = "5622b060b1f57de7afc3d0b4e425b9b4b22482a0"
replace-with = "vendored-sources"
[source."https://github.com/zcash/orchard.git"]
git = "https://github.com/zcash/orchard.git"
rev = "2c8241f25b943aa05203eacf9905db117c69bd29"
replace-with = "vendored-sources" replace-with = "vendored-sources"
[source.vendored-sources] [source.vendored-sources]

299
Cargo.lock generated
View File

@ -17,7 +17,7 @@ version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
"cipher", "cipher",
"cpufeatures", "cpufeatures",
"opaque-debug", "opaque-debug",
@ -72,11 +72,11 @@ checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
[[package]] [[package]]
name = "atomic-shim" name = "atomic-shim"
version = "0.1.0" version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d20fdac7156779a1a30d970e838195558b4810dd06aa69e7c7461bdc518edf9b" checksum = "67cd4b51d303cf3501c301e8125df442128d3c6d7c69f71b27833d253de47e77"
dependencies = [ dependencies = [
"crossbeam", "crossbeam-utils",
] ]
[[package]] [[package]]
@ -104,9 +104,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0944d18a9a37691b87733b39c9360c9950af9aa5f97e2455bc108d8eb64fc1c1" checksum = "0944d18a9a37691b87733b39c9360c9950af9aa5f97e2455bc108d8eb64fc1c1"
dependencies = [ dependencies = [
"bitvec", "bitvec",
"blake2s_simd", "blake2s_simd 0.5.11",
"byteorder", "byteorder",
"crossbeam-channel 0.5.1", "crossbeam-channel",
"ff", "ff",
"group", "group",
"lazy_static", "lazy_static",
@ -171,6 +171,17 @@ dependencies = [
"constant_time_eq", "constant_time_eq",
] ]
[[package]]
name = "blake2b_simd"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72936ee4afc7f8f736d1c38383b56480b5497b4617b4a77bdbf1d2ababc76127"
dependencies = [
"arrayref",
"arrayvec 0.7.2",
"constant_time_eq",
]
[[package]] [[package]]
name = "blake2s_simd" name = "blake2s_simd"
version = "0.5.11" version = "0.5.11"
@ -182,6 +193,17 @@ dependencies = [
"constant_time_eq", "constant_time_eq",
] ]
[[package]]
name = "blake2s_simd"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db539cc2b5f6003621f1cd9ef92d7ded8ea5232c7de0f9faa2de251cd98730d4"
dependencies = [
"arrayref",
"arrayvec 0.7.2",
"constant_time_eq",
]
[[package]] [[package]]
name = "block-buffer" name = "block-buffer"
version = "0.9.0" version = "0.9.0"
@ -247,12 +269,6 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
[[package]]
name = "cfg-if"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
version = "1.0.0" version = "1.0.0"
@ -265,7 +281,7 @@ version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01b72a433d0cf2aef113ba70f62634c56fddb0f244e6377185c56a7cadbd8f91" checksum = "01b72a433d0cf2aef113ba70f62634c56fddb0f244e6377185c56a7cadbd8f91"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
"cipher", "cipher",
"cpufeatures", "cpufeatures",
"zeroize", "zeroize",
@ -308,49 +324,14 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "crossbeam"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69323bff1fb41c635347b8ead484a5ca6c3f11914d784170b158d8449ab07f8e"
dependencies = [
"cfg-if 0.1.10",
"crossbeam-channel 0.4.4",
"crossbeam-deque 0.7.4",
"crossbeam-epoch 0.8.2",
"crossbeam-queue",
"crossbeam-utils 0.7.2",
]
[[package]]
name = "crossbeam-channel"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87"
dependencies = [
"crossbeam-utils 0.7.2",
"maybe-uninit",
]
[[package]] [[package]]
name = "crossbeam-channel" name = "crossbeam-channel"
version = "0.5.1" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
"crossbeam-utils 0.8.5", "crossbeam-utils",
]
[[package]]
name = "crossbeam-deque"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed"
dependencies = [
"crossbeam-epoch 0.8.2",
"crossbeam-utils 0.7.2",
"maybe-uninit",
] ]
[[package]] [[package]]
@ -359,24 +340,9 @@ version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
"crossbeam-epoch 0.9.5", "crossbeam-epoch",
"crossbeam-utils 0.8.5", "crossbeam-utils",
]
[[package]]
name = "crossbeam-epoch"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"
dependencies = [
"autocfg",
"cfg-if 0.1.10",
"crossbeam-utils 0.7.2",
"lazy_static",
"maybe-uninit",
"memoffset 0.5.6",
"scopeguard",
] ]
[[package]] [[package]]
@ -385,42 +351,20 @@ version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
"crossbeam-utils 0.8.5", "crossbeam-utils",
"lazy_static", "lazy_static",
"memoffset 0.6.4", "memoffset",
"scopeguard", "scopeguard",
] ]
[[package]]
name = "crossbeam-queue"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570"
dependencies = [
"cfg-if 0.1.10",
"crossbeam-utils 0.7.2",
"maybe-uninit",
]
[[package]]
name = "crossbeam-utils"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
dependencies = [
"autocfg",
"cfg-if 0.1.10",
"lazy_static",
]
[[package]] [[package]]
name = "crossbeam-utils" name = "crossbeam-utils"
version = "0.8.5" version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
"lazy_static", "lazy_static",
] ]
@ -459,7 +403,7 @@ version = "4.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
"num_cpus", "num_cpus",
] ]
@ -494,8 +438,9 @@ dependencies = [
[[package]] [[package]]
name = "ed25519-zebra" name = "ed25519-zebra"
version = "2.2.0" version = "3.0.0"
source = "git+https://github.com/ZcashFoundation/ed25519-zebra.git?rev=d3512400227a362d08367088ffaa9bd4142a69c7#d3512400227a362d08367088ffaa9bd4142a69c7" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "403ef3e961ab98f0ba902771d29f842058578bb1ce7e3c59dad5a6a93e784c69"
dependencies = [ dependencies = [
"curve25519-dalek", "curve25519-dalek",
"hex", "hex",
@ -521,18 +466,18 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
[[package]] [[package]]
name = "equihash" name = "equihash"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/zcash/librustzcash.git?rev=69c3b4b5e143bb349cca76c677b7cd0a8556b28f#69c3b4b5e143bb349cca76c677b7cd0a8556b28f" source = "git+https://github.com/zcash/librustzcash.git?rev=5622b060b1f57de7afc3d0b4e425b9b4b22482a0#5622b060b1f57de7afc3d0b4e425b9b4b22482a0"
dependencies = [ dependencies = [
"blake2b_simd", "blake2b_simd 1.0.0",
"byteorder", "byteorder",
] ]
[[package]] [[package]]
name = "f4jumble" name = "f4jumble"
version = "0.0.0" version = "0.0.0"
source = "git+https://github.com/zcash/librustzcash.git?rev=69c3b4b5e143bb349cca76c677b7cd0a8556b28f#69c3b4b5e143bb349cca76c677b7cd0a8556b28f" source = "git+https://github.com/zcash/librustzcash.git?rev=5622b060b1f57de7afc3d0b4e425b9b4b22482a0#5622b060b1f57de7afc3d0b4e425b9b4b22482a0"
dependencies = [ dependencies = [
"blake2b_simd", "blake2b_simd 1.0.0",
] ]
[[package]] [[package]]
@ -622,7 +567,7 @@ version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
"libc", "libc",
"wasi 0.9.0+wasi-snapshot-preview1", "wasi 0.9.0+wasi-snapshot-preview1",
] ]
@ -633,7 +578,7 @@ version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
"libc", "libc",
"wasi 0.10.2+wasi-snapshot-preview1", "wasi 0.10.2+wasi-snapshot-preview1",
] ]
@ -656,7 +601,7 @@ version = "0.1.0-beta.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f186b85ed81082fb1cf59d52b0111f02915e89a4ac61d292b38d075e570f3a9" checksum = "0f186b85ed81082fb1cf59d52b0111f02915e89a4ac61d292b38d075e570f3a9"
dependencies = [ dependencies = [
"blake2b_simd", "blake2b_simd 0.5.11",
"ff", "ff",
"group", "group",
"pasta_curves", "pasta_curves",
@ -757,8 +702,9 @@ dependencies = [
[[package]] [[package]]
name = "incrementalmerkletree" name = "incrementalmerkletree"
version = "0.1.0" version = "0.2.0"
source = "git+https://github.com/zcash/incrementalmerkletree?rev=b7bd6246122a6e9ace8edb51553fbf5228906cbb#b7bd6246122a6e9ace8edb51553fbf5228906cbb" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "186fd3ab92aeac865d4b80b410de9a7b341d31ba8281373caed0b6d17b2b5e96"
dependencies = [ dependencies = [
"serde", "serde",
] ]
@ -779,7 +725,7 @@ version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
] ]
[[package]] [[package]]
@ -825,9 +771,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.106" version = "0.2.112"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a60553f9a9e039a333b4e9b20573b9e9b9c0bb3a11e201ccc48ef4283456d673" checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125"
[[package]] [[package]]
name = "libm" name = "libm"
@ -840,8 +786,8 @@ name = "librustzcash"
version = "0.2.0" version = "0.2.0"
dependencies = [ dependencies = [
"bellman", "bellman",
"blake2b_simd", "blake2b_simd 1.0.0",
"blake2s_simd", "blake2s_simd 1.0.0",
"bls12_381", "bls12_381",
"byteorder", "byteorder",
"ed25519-zebra", "ed25519-zebra",
@ -887,7 +833,7 @@ version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
] ]
[[package]] [[package]]
@ -908,12 +854,6 @@ dependencies = [
"regex-automata", "regex-automata",
] ]
[[package]]
name = "maybe-uninit"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
[[package]] [[package]]
name = "memchr" name = "memchr"
version = "2.4.1" version = "2.4.1"
@ -922,18 +862,9 @@ checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
[[package]] [[package]]
name = "memoffset" name = "memoffset"
version = "0.5.6" version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
dependencies = [
"autocfg",
]
[[package]]
name = "memoffset"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9"
dependencies = [ dependencies = [
"autocfg", "autocfg",
] ]
@ -990,15 +921,15 @@ dependencies = [
[[package]] [[package]]
name = "metrics-util" name = "metrics-util"
version = "0.10.1" version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74c9b6aee519e1461b678952d3671652bb341d0664b1188f895a436a4e2e6ffa" checksum = "1174223789e331d9d47a4a953dac36e397db60fa8d2a111ac505388c6c7fe32e"
dependencies = [ dependencies = [
"ahash", "ahash",
"aho-corasick", "aho-corasick",
"atomic-shim", "atomic-shim",
"crossbeam-epoch 0.9.5", "crossbeam-epoch",
"crossbeam-utils 0.8.5", "crossbeam-utils",
"dashmap", "dashmap",
"hashbrown", "hashbrown",
"indexmap", "indexmap",
@ -1099,9 +1030,9 @@ dependencies = [
[[package]] [[package]]
name = "once_cell" name = "once_cell"
version = "1.8.0" version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
[[package]] [[package]]
name = "opaque-debug" name = "opaque-debug"
@ -1111,14 +1042,15 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
[[package]] [[package]]
name = "orchard" name = "orchard"
version = "0.0.0" version = "0.1.0-beta.1"
source = "git+https://github.com/zcash/orchard.git?rev=68b790c7dadade049f44ad4aafa0ff71a3a10e91#68b790c7dadade049f44ad4aafa0ff71a3a10e91" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e31f03b6d0aee6d993cac35388b818e04f076ded0ab284979e4d7cd5a8b3c2be"
dependencies = [ dependencies = [
"aes", "aes",
"arrayvec 0.7.2", "arrayvec 0.7.2",
"bigint", "bigint",
"bitvec", "bitvec",
"blake2b_simd", "blake2b_simd 1.0.0",
"ff", "ff",
"fpe", "fpe",
"group", "group",
@ -1170,7 +1102,7 @@ version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
"instant", "instant",
"libc", "libc",
"redox_syscall", "redox_syscall",
@ -1195,7 +1127,7 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d647d91972bad78120fd61e06b225fcda117805c9bbf17676b51bd03a251278b" checksum = "d647d91972bad78120fd61e06b225fcda117805c9bbf17676b51bd03a251278b"
dependencies = [ dependencies = [
"blake2b_simd", "blake2b_simd 0.5.11",
"ff", "ff",
"group", "group",
"lazy_static", "lazy_static",
@ -1271,9 +1203,9 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.32" version = "1.0.34"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" checksum = "2f84e92c0f7c9d58328b85a78557813e4bd845130db68d7184635344399423b1"
dependencies = [ dependencies = [
"unicode-xid", "unicode-xid",
] ]
@ -1284,7 +1216,7 @@ version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20afe714292d5e879d8b12740aa223c6a88f118af41870e8b6196e39a02238a8" checksum = "20afe714292d5e879d8b12740aa223c6a88f118af41870e8b6196e39a02238a8"
dependencies = [ dependencies = [
"crossbeam-utils 0.8.5", "crossbeam-utils",
"libc", "libc",
"mach", "mach",
"once_cell", "once_cell",
@ -1384,7 +1316,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90"
dependencies = [ dependencies = [
"autocfg", "autocfg",
"crossbeam-deque 0.8.1", "crossbeam-deque",
"either", "either",
"rayon-core", "rayon-core",
] ]
@ -1395,9 +1327,9 @@ version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e"
dependencies = [ dependencies = [
"crossbeam-channel 0.5.1", "crossbeam-channel",
"crossbeam-deque 0.8.1", "crossbeam-deque",
"crossbeam-utils 0.8.5", "crossbeam-utils",
"lazy_static", "lazy_static",
"num_cpus", "num_cpus",
] ]
@ -1408,7 +1340,7 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a90e2c94bca3445cae0d55dff7370e29c24885d2403a1665ce19c106c79455e6" checksum = "a90e2c94bca3445cae0d55dff7370e29c24885d2403a1665ce19c106c79455e6"
dependencies = [ dependencies = [
"blake2b_simd", "blake2b_simd 0.5.11",
"byteorder", "byteorder",
"digest", "digest",
"group", "group",
@ -1473,18 +1405,18 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.130" version = "1.0.131"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" checksum = "b4ad69dfbd3e45369132cc64e6748c2d65cdfb001a2b1c232d128b4ad60561c1"
dependencies = [ dependencies = [
"serde_derive", "serde_derive",
] ]
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.130" version = "1.0.131"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" checksum = "b710a83c4e0dff6a3d511946b95274ad9ca9e5d3ae497b63fda866ac955358d2"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -1498,7 +1430,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa"
dependencies = [ dependencies = [
"block-buffer", "block-buffer",
"cfg-if 1.0.0", "cfg-if",
"cpufeatures", "cpufeatures",
"digest", "digest",
"opaque-debug", "opaque-debug",
@ -1531,7 +1463,7 @@ version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
"libc", "libc",
"winapi", "winapi",
] ]
@ -1550,9 +1482,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.81" version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966" checksum = "8daf5dd0bb60cbd4137b1b587d2fc0ae729bc07cf01cd70b36a1ed5ade3b9d59"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -1608,9 +1540,9 @@ dependencies = [
[[package]] [[package]]
name = "time" name = "time"
version = "0.3.4" version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99beeb0daeac2bd1e86ac2c21caddecb244b39a093594da1a661ec2060c7aedd" checksum = "41effe7cfa8af36f439fac33861b66b049edc6f9a32331e2312660529c1c24ad"
dependencies = [ dependencies = [
"itoa", "itoa",
"libc", "libc",
@ -1618,9 +1550,9 @@ dependencies = [
[[package]] [[package]]
name = "tinyvec" name = "tinyvec"
version = "1.5.0" version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f83b2a3d4d9091d0abd7eba4dc2710b1718583bd4d8992e2190720ea38f391f7" checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
dependencies = [ dependencies = [
"tinyvec_macros", "tinyvec_macros",
] ]
@ -1633,11 +1565,10 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
[[package]] [[package]]
name = "tokio" name = "tokio"
version = "1.13.0" version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "588b2d10a336da58d877567cd8fb8a14b463e2104910f8132cd054b4b96e29ee" checksum = "fbbf1c778ec206785635ce8ad57fe52b3009ae9e0c9f574a728f3049d3e55838"
dependencies = [ dependencies = [
"autocfg",
"libc", "libc",
"mio", "mio",
"pin-project-lite", "pin-project-lite",
@ -1647,9 +1578,9 @@ dependencies = [
[[package]] [[package]]
name = "tokio-macros" name = "tokio-macros"
version = "1.5.1" version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "114383b041aa6212c579467afa0075fbbdd0718de036100bc0ba7961d8cb9095" checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -1668,7 +1599,7 @@ version = "0.1.29"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
"pin-project-lite", "pin-project-lite",
"tracing-attributes", "tracing-attributes",
"tracing-core", "tracing-core",
@ -1680,7 +1611,7 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94571df2eae3ed4353815ea5a90974a594a1792d8782ff2cbcc9392d1101f366" checksum = "94571df2eae3ed4353815ea5a90974a594a1792d8782ff2cbcc9392d1101f366"
dependencies = [ dependencies = [
"crossbeam-channel 0.5.1", "crossbeam-channel",
"time", "time",
"tracing-subscriber", "tracing-subscriber",
] ]
@ -1707,9 +1638,9 @@ dependencies = [
[[package]] [[package]]
name = "tracing-subscriber" name = "tracing-subscriber"
version = "0.3.1" version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "80a4ddde70311d8da398062ecf6fc2c309337de6b0f77d6c27aff8d53f6fca52" checksum = "245da694cc7fc4729f3f418b304cb57789f1bed2a78c575407ab8a23f53cb4d3"
dependencies = [ dependencies = [
"ansi_term", "ansi_term",
"lazy_static", "lazy_static",
@ -1793,7 +1724,7 @@ version = "0.2.78"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
"wasm-bindgen-macro", "wasm-bindgen-macro",
] ]
@ -1885,10 +1816,10 @@ dependencies = [
[[package]] [[package]]
name = "zcash_address" name = "zcash_address"
version = "0.0.0" version = "0.0.0"
source = "git+https://github.com/zcash/librustzcash.git?rev=69c3b4b5e143bb349cca76c677b7cd0a8556b28f#69c3b4b5e143bb349cca76c677b7cd0a8556b28f" source = "git+https://github.com/zcash/librustzcash.git?rev=5622b060b1f57de7afc3d0b4e425b9b4b22482a0#5622b060b1f57de7afc3d0b4e425b9b4b22482a0"
dependencies = [ dependencies = [
"bech32", "bech32",
"blake2b_simd", "blake2b_simd 1.0.0",
"bs58", "bs58",
"f4jumble", "f4jumble",
"zcash_encoding", "zcash_encoding",
@ -1897,7 +1828,7 @@ dependencies = [
[[package]] [[package]]
name = "zcash_encoding" name = "zcash_encoding"
version = "0.0.0" version = "0.0.0"
source = "git+https://github.com/zcash/librustzcash.git?rev=69c3b4b5e143bb349cca76c677b7cd0a8556b28f#69c3b4b5e143bb349cca76c677b7cd0a8556b28f" source = "git+https://github.com/zcash/librustzcash.git?rev=5622b060b1f57de7afc3d0b4e425b9b4b22482a0#5622b060b1f57de7afc3d0b4e425b9b4b22482a0"
dependencies = [ dependencies = [
"byteorder", "byteorder",
"nonempty", "nonempty",
@ -1906,24 +1837,20 @@ dependencies = [
[[package]] [[package]]
name = "zcash_history" name = "zcash_history"
version = "0.2.0" version = "0.2.0"
source = "git+https://github.com/zcash/librustzcash.git?rev=69c3b4b5e143bb349cca76c677b7cd0a8556b28f#69c3b4b5e143bb349cca76c677b7cd0a8556b28f" source = "git+https://github.com/zcash/librustzcash.git?rev=5622b060b1f57de7afc3d0b4e425b9b4b22482a0#5622b060b1f57de7afc3d0b4e425b9b4b22482a0"
dependencies = [ dependencies = [
"bigint", "bigint",
"blake2b_simd", "blake2b_simd 1.0.0",
"byteorder", "byteorder",
] ]
[[package]] [[package]]
name = "zcash_note_encryption" name = "zcash_note_encryption"
version = "0.0.0" version = "0.1.0"
source = "git+https://github.com/zcash/librustzcash.git?rev=69c3b4b5e143bb349cca76c677b7cd0a8556b28f#69c3b4b5e143bb349cca76c677b7cd0a8556b28f" source = "git+https://github.com/zcash/librustzcash.git?rev=5622b060b1f57de7afc3d0b4e425b9b4b22482a0#5622b060b1f57de7afc3d0b4e425b9b4b22482a0"
dependencies = [ dependencies = [
"blake2b_simd",
"byteorder",
"chacha20", "chacha20",
"chacha20poly1305", "chacha20poly1305",
"ff",
"group",
"rand_core 0.6.3", "rand_core 0.6.3",
"subtle", "subtle",
] ]
@ -1931,13 +1858,13 @@ dependencies = [
[[package]] [[package]]
name = "zcash_primitives" name = "zcash_primitives"
version = "0.5.0" version = "0.5.0"
source = "git+https://github.com/zcash/librustzcash.git?rev=69c3b4b5e143bb349cca76c677b7cd0a8556b28f#69c3b4b5e143bb349cca76c677b7cd0a8556b28f" source = "git+https://github.com/zcash/librustzcash.git?rev=5622b060b1f57de7afc3d0b4e425b9b4b22482a0#5622b060b1f57de7afc3d0b4e425b9b4b22482a0"
dependencies = [ dependencies = [
"aes", "aes",
"bip0039", "bip0039",
"bitvec", "bitvec",
"blake2b_simd", "blake2b_simd 1.0.0",
"blake2s_simd", "blake2s_simd 1.0.0",
"bls12_381", "bls12_381",
"byteorder", "byteorder",
"chacha20poly1305", "chacha20poly1305",
@ -1965,10 +1892,10 @@ dependencies = [
[[package]] [[package]]
name = "zcash_proofs" name = "zcash_proofs"
version = "0.5.0" version = "0.5.0"
source = "git+https://github.com/zcash/librustzcash.git?rev=69c3b4b5e143bb349cca76c677b7cd0a8556b28f#69c3b4b5e143bb349cca76c677b7cd0a8556b28f" source = "git+https://github.com/zcash/librustzcash.git?rev=5622b060b1f57de7afc3d0b4e425b9b4b22482a0#5622b060b1f57de7afc3d0b4e425b9b4b22482a0"
dependencies = [ dependencies = [
"bellman", "bellman",
"blake2b_simd", "blake2b_simd 1.0.0",
"bls12_381", "bls12_381",
"byteorder", "byteorder",
"directories", "directories",

View File

@ -27,17 +27,17 @@ crate-type = ["staticlib"]
[dependencies] [dependencies]
bellman = "0.11" bellman = "0.11"
blake2b_simd = "0.5" blake2b_simd = "1"
blake2s_simd = "0.5" blake2s_simd = "1"
bls12_381 = "0.6" bls12_381 = "0.6"
byteorder = "1" byteorder = "1"
group = "0.11" group = "0.11"
incrementalmerkletree = "0.1" incrementalmerkletree = "0.2"
libc = "0.2" libc = "0.2"
jubjub = "0.8" jubjub = "0.8"
memuse = "0.2" memuse = "0.2"
nonempty = "0.7" nonempty = "0.7"
orchard = "0.0" orchard = "=0.1.0-beta.1"
subtle = "2.2" subtle = "2.2"
rand_core = "0.6" rand_core = "0.6"
tracing = "0.1" tracing = "0.1"
@ -45,10 +45,10 @@ tracing-core = "0.1"
tracing-appender = "0.2" tracing-appender = "0.2"
zcash_address = "0.0" zcash_address = "0.0"
zcash_history = "0.2" zcash_history = "0.2"
zcash_note_encryption = "0.0" zcash_note_encryption = "0.1"
zcash_primitives = "0.5" zcash_primitives = "0.5"
zcash_proofs = "0.5" zcash_proofs = "0.5"
ed25519-zebra = "2.2.0" ed25519-zebra = "3"
zeroize = "1.4.2" zeroize = "1.4.2"
# Metrics # Metrics
@ -70,11 +70,8 @@ panic = 'abort'
codegen-units = 1 codegen-units = 1
[patch.crates-io] [patch.crates-io]
ed25519-zebra = { git = "https://github.com/ZcashFoundation/ed25519-zebra.git", rev = "d3512400227a362d08367088ffaa9bd4142a69c7" } zcash_address = { git = "https://github.com/zcash/librustzcash.git", rev = "5622b060b1f57de7afc3d0b4e425b9b4b22482a0" }
incrementalmerkletree = { git = "https://github.com/zcash/incrementalmerkletree", rev = "b7bd6246122a6e9ace8edb51553fbf5228906cbb" } zcash_history = { git = "https://github.com/zcash/librustzcash.git", rev = "5622b060b1f57de7afc3d0b4e425b9b4b22482a0" }
orchard = { git = "https://github.com/zcash/orchard.git", rev = "68b790c7dadade049f44ad4aafa0ff71a3a10e91" } zcash_note_encryption = { git = "https://github.com/zcash/librustzcash.git", rev = "5622b060b1f57de7afc3d0b4e425b9b4b22482a0" }
zcash_address = { git = "https://github.com/zcash/librustzcash.git", rev = "69c3b4b5e143bb349cca76c677b7cd0a8556b28f" } zcash_primitives = { git = "https://github.com/zcash/librustzcash.git", rev = "5622b060b1f57de7afc3d0b4e425b9b4b22482a0" }
zcash_history = { git = "https://github.com/zcash/librustzcash.git", rev = "69c3b4b5e143bb349cca76c677b7cd0a8556b28f" } zcash_proofs = { git = "https://github.com/zcash/librustzcash.git", rev = "5622b060b1f57de7afc3d0b4e425b9b4b22482a0" }
zcash_note_encryption = { git = "https://github.com/zcash/librustzcash.git", rev = "69c3b4b5e143bb349cca76c677b7cd0a8556b28f" }
zcash_primitives = { git = "https://github.com/zcash/librustzcash.git", rev = "69c3b4b5e143bb349cca76c677b7cd0a8556b28f" }
zcash_proofs = { git = "https://github.com/zcash/librustzcash.git", rev = "69c3b4b5e143bb349cca76c677b7cd0a8556b28f" }

View File

@ -1,4 +1,4 @@
Zcash 4.5.1-1 Zcash 4.6.0-1
<img align="right" width="120" height="80" src="doc/imgs/logo.png"> <img align="right" width="120" height="80" src="doc/imgs/logo.png">
=========== ===========

View File

@ -1,8 +1,8 @@
dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
AC_PREREQ([2.60]) AC_PREREQ([2.60])
define(_CLIENT_VERSION_MAJOR, 4) define(_CLIENT_VERSION_MAJOR, 4)
define(_CLIENT_VERSION_MINOR, 5) define(_CLIENT_VERSION_MINOR, 6)
define(_CLIENT_VERSION_REVISION, 1) define(_CLIENT_VERSION_REVISION, 0)
define(_CLIENT_VERSION_BUILD, 51) define(_CLIENT_VERSION_BUILD, 51)
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(_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_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)))

View File

@ -1,3 +1,21 @@
zcash (4.6.0+1) stable; urgency=medium
* 4.6.0-1 release.
-- Electric Coin Company <team@electriccoin.co> Wed, 05 Jan 2022 20:18:43 +0000
zcash (4.6.0) stable; urgency=medium
* 4.6.0 release.
-- Electric Coin Company <team@electriccoin.co> Thu, 23 Dec 2021 00:35:41 +0000
zcash (4.6.0~rc1) stable; urgency=medium
* 4.6.0-rc1 release.
-- Electric Coin Company <team@electriccoin.co> Sat, 18 Dec 2021 04:25:50 +0000
zcash (4.5.1+1) stable; urgency=medium zcash (4.5.1+1) stable; urgency=medium
* 4.5.1-1 release. * 4.5.1-1 release.

View File

@ -0,0 +1,37 @@
#!/usr/bin/env bash
export LC_ALL=C
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
RUST_PACKAGE="$SCRIPT_DIR/../../depends/packages/native_rust.mk"
RUST_VERSION=$( cat $RUST_PACKAGE | grep -oP "_version=\K.*" )
update_hash() {
url="https://static.rust-lang.org/dist/$1-$RUST_VERSION-$2.tar.gz"
echo "Fetching $url"
hash=$( curl $url | sha256sum | awk '{print $1}' )
sed -i "/\$(package)_$3_$4=/c\\\$(package)_$3_$4=$hash" $RUST_PACKAGE
}
update_rust_hash() {
update_hash rust $1 sha256_hash $2
}
update_stdlib_hash() {
update_hash rust-std $1 rust_std_sha256_hash $1
}
# For native targets
# update_rust_hash RUST_TARGET MAKEFILE_PACKAGE_IDENTIFIER
update_rust_hash aarch64-unknown-linux-gnu aarch64_linux
update_rust_hash x86_64-apple-darwin darwin
update_rust_hash x86_64-unknown-linux-gnu linux
update_rust_hash x86_64-unknown-freebsd freebsd
# For cross-compilation targets
# update_stdlib_hash RUST_TARGET
update_stdlib_hash aarch64-unknown-linux-gnu
update_stdlib_hash x86_64-apple-darwin
update_stdlib_hash x86_64-pc-windows-gnu
update_stdlib_hash x86_64-unknown-freebsd

View File

@ -76,7 +76,7 @@ mkdir {./zcash-params-dir,./zcash-data-dir}
sudo chown -R 2001.2001 {./zcash-params-dir,./zcash-data-dir} sudo chown -R 2001.2001 {./zcash-params-dir,./zcash-data-dir}
docker run -d --name my_zcashd \ docker run -d --name my_zcashd \
-v $(pwd)/zcash-data-dir:/srv/zcashd/.zcash \ -v $(pwd)/zcash-data-dir:/srv/zcashd/.zcash \
-v $(pwd)/zcash-params-dir/srv/zcashd/.zcash-params \ -v $(pwd)/zcash-params-dir:/srv/zcashd/.zcash-params \
electriccoinco/zcashd electriccoinco/zcashd
``` ```

View File

@ -1,5 +1,5 @@
--- ---
name: "zcash-4.5.1-1" name: "zcash-4.6.0-1"
enable_cache: true enable_cache: true
distro: "debian" distro: "debian"
suites: suites:
@ -18,6 +18,7 @@ packages:
- "g++-multilib" - "g++-multilib"
- "git-core" - "git-core"
- "libc6-dev" - "libc6-dev"
- "libtinfo5"
- "libtool" - "libtool"
- "libxml2" - "libxml2"
- "m4" - "m4"

View File

@ -1,8 +1,8 @@
package=boost package=boost
$(package)_version=1_77_0 $(package)_version=1_78_0
$(package)_download_path=https://boostorg.jfrog.io/artifactory/main/release/$(subst _,.,$($(package)_version))/source/ $(package)_download_path=https://boostorg.jfrog.io/artifactory/main/release/$(subst _,.,$($(package)_version))/source/
$(package)_file_name=boost_$($(package)_version).tar.bz2 $(package)_file_name=boost_$($(package)_version).tar.bz2
$(package)_sha256_hash=fc9f85fc030e233142908241af7a846e60630aa7388de9a5fafb1f3a26840854 $(package)_sha256_hash=8681f175d4bdb26c52222665793eef08490d7758529330f98d3b29dd0735bccc
$(package)_dependencies=native_b2 $(package)_dependencies=native_b2
ifneq ($(host_os),darwin) ifneq ($(host_os),darwin)

View File

@ -1,14 +1,14 @@
package=native_rust package=native_rust
$(package)_version=1.56.1 $(package)_version=1.57.0
$(package)_download_path=https://static.rust-lang.org/dist $(package)_download_path=https://static.rust-lang.org/dist
$(package)_file_name_linux=rust-$($(package)_version)-x86_64-unknown-linux-gnu.tar.gz $(package)_file_name_linux=rust-$($(package)_version)-x86_64-unknown-linux-gnu.tar.gz
$(package)_sha256_hash_linux=a6be5d045183a0b12dddf0d81633e2a64e63e4c2dfa44eb7593970c1ef93a98f $(package)_sha256_hash_linux=ea0253784b2e5c22659ff148d492a68d2e11da734491714ebc61cc93896efcda
$(package)_file_name_darwin=rust-$($(package)_version)-x86_64-apple-darwin.tar.gz $(package)_file_name_darwin=rust-$($(package)_version)-x86_64-apple-darwin.tar.gz
$(package)_sha256_hash_darwin=8d65ef02a123c23be00101fb204d28b60498b9145dd2ee8edabf0afde6e01e55 $(package)_sha256_hash_darwin=15ceffc4743434c19d08f73fb4edd6642b7fd8162ed7101d3e6ca2c691fcb699
$(package)_file_name_freebsd=rust-$($(package)_version)-x86_64-unknown-freebsd.tar.gz $(package)_file_name_freebsd=rust-$($(package)_version)-x86_64-unknown-freebsd.tar.gz
$(package)_sha256_hash_freebsd=94e2c8b44af125ca8ba1a1ded7e7b9c5acb27e52acec4ab483d5ed9a8528c5a9 $(package)_sha256_hash_freebsd=ebe96fa1f15e8d70c91e81aab7e0c341717b909225029f37d52fbdfa506e3fab
$(package)_file_name_aarch64_linux=rust-$($(package)_version)-aarch64-unknown-linux-gnu.tar.gz $(package)_file_name_aarch64_linux=rust-$($(package)_version)-aarch64-unknown-linux-gnu.tar.gz
$(package)_sha256_hash_aarch64_linux=69792887357c8dd78c5424f0b4a624578296796d99edf6c30ebe2acc2b939aa3 $(package)_sha256_hash_aarch64_linux=d66847f7cf7b548ecb328c400ac4f691ee2aea6ff5cd9286ad8733239569556c
# Mapping from GCC canonical hosts to Rust targets # Mapping from GCC canonical hosts to Rust targets
# If a mapping is not present, we assume they are identical, unless $host_os is # If a mapping is not present, we assume they are identical, unless $host_os is
@ -17,9 +17,10 @@ $(package)_rust_target_x86_64-pc-linux-gnu=x86_64-unknown-linux-gnu
$(package)_rust_target_x86_64-w64-mingw32=x86_64-pc-windows-gnu $(package)_rust_target_x86_64-w64-mingw32=x86_64-pc-windows-gnu
# Mapping from Rust targets to SHA-256 hashes # Mapping from Rust targets to SHA-256 hashes
$(package)_rust_std_sha256_hash_aarch64-unknown-linux-gnu=d577c25879cf160ec1a04d5101971dd684f9b4f87b3cb463a7521b676dc3df89 $(package)_rust_std_sha256_hash_aarch64-unknown-linux-gnu=4c70901d1cbddec9ea99fbd62b20f454d30e1ffbb48a21169ac823b3f02a1fbc
$(package)_rust_std_sha256_hash_x86_64-apple-darwin=a1cedfaea1508bf3bfc8a77d82d15c693b41e70e56fad930d24f21f0bce5052a $(package)_rust_std_sha256_hash_x86_64-apple-darwin=c1eb892ddb50ebeed288b7aa8171ad46d62362bb26b2d82d2b463dfd45606dc2
$(package)_rust_std_sha256_hash_x86_64-pc-windows-gnu=8c5d425d2882a93827850672a70bfc2e643cae425aaffa9dafa6808fcd4bc798 $(package)_rust_std_sha256_hash_x86_64-pc-windows-gnu=75c910899ed36a90b155e3a01c21b863000675867efc56f2b68c44edd4b7e18c
$(package)_rust_std_sha256_hash_x86_64-unknown-freebsd=1528a4bc7e3ba42da164bcc7b952dfa73048333c5b9254ce2d03db6bab6081e8
define rust_target define rust_target
$(if $($(1)_rust_target_$(2)),$($(1)_rust_target_$(2)),$(if $(findstring darwin,$(3)),x86_64-apple-darwin,$(if $(findstring freebsd,$(3)),x86_64-unknown-freebsd,$(2)))) $(if $($(1)_rust_target_$(2)),$($(1)_rust_target_$(2)),$(if $(findstring darwin,$(3)),x86_64-apple-darwin,$(if $(findstring freebsd,$(3)),x86_64-unknown-freebsd,$(2))))

View File

@ -1,29 +1,29 @@
Zcash Contributors Zcash Contributors
================== ==================
Jack Grigg (1123) Jack Grigg (1127)
Simon Liu (460) Simon Liu (460)
Sean Bowe (367) Sean Bowe (367)
Daira Hopwood (270) Daira Hopwood (270)
Eirik Ogilvie-Wigley (216) Eirik Ogilvie-Wigley (216)
Kris Nuttycombe (174) Kris Nuttycombe (181)
Wladimir J. van der Laan (150) Wladimir J. van der Laan (150)
Alfredo Garcia (116) Alfredo Garcia (116)
Taylor Hornby (114) Taylor Hornby (114)
Marshall Gaucher (110) Marshall Gaucher (111)
Pieter Wuille (102) Pieter Wuille (102)
Jonas Schnelli (89) Jonas Schnelli (89)
Jay Graber (89) Jay Graber (89)
Marco Falke (81) Marco Falke (82)
Cory Fields (75) Cory Fields (75)
Larry Ruane (61) Larry Ruane (72)
Ying Tong Lai (56) Ying Tong Lai (56)
Nathan Wilcox (56) Nathan Wilcox (56)
Matt Corallo (52) Matt Corallo (52)
practicalswift (38) practicalswift (38)
Kevin Gallagher (38) Kevin Gallagher (38)
fanquake (36) fanquake (36)
Dimitris Apostolou (34) Dimitris Apostolou (35)
Carl Dong (26) Carl Dong (26)
Gregory Maxwell (23) Gregory Maxwell (23)
Jorge Timón (22) Jorge Timón (22)
@ -46,12 +46,13 @@ Alex Morcos (11)
Philip Kaufmann (10) Philip Kaufmann (10)
Peter Todd (10) Peter Todd (10)
João Barbosa (10) João Barbosa (10)
Charlie O'Keefe (10)
nomnombtc (9) nomnombtc (9)
Marius Kjærstad (9) Marius Kjærstad (9)
teor (8)
kozyilmaz (8) kozyilmaz (8)
Jeremy Rubin (8) Jeremy Rubin (8)
Jeff Garzik (8) Jeff Garzik (8)
Charlie O'Keefe (8)
Ben Wilson (8) Ben Wilson (8)
Karl-Johan Alm (7) Karl-Johan Alm (7)
ying tong (6) ying tong (6)
@ -63,6 +64,7 @@ Chun Kuan Lee (6)
Casey Rodarmor (6) Casey Rodarmor (6)
jnewbery (5) jnewbery (5)
ca333 (5) ca333 (5)
Sasha (5)
MeshCollider (5) MeshCollider (5)
Johnathan Corgan (5) Johnathan Corgan (5)
George Tankersley (5) George Tankersley (5)
@ -75,6 +77,7 @@ WO (4)
Sjors Provoost (4) Sjors Provoost (4)
Russell Yanofsky (4) Russell Yanofsky (4)
Nate Wilcox (4) Nate Wilcox (4)
Alex Wied (4)
mruddy (3) mruddy (3)
lpescher (3) lpescher (3)
isle2983 (3) isle2983 (3)
@ -90,7 +93,6 @@ Eric Lombrozo (3)
Danny Willems (3) Danny Willems (3)
Anthony Towns (3) Anthony Towns (3)
Alfie John (3) Alfie John (3)
Alex Wied (3)
whythat (2) whythat (2)
rofl0r (2) rofl0r (2)
ptschip (2) ptschip (2)
@ -134,7 +136,7 @@ vim88 (1)
unsystemizer (1) unsystemizer (1)
tulip (1) tulip (1)
tpantin (1) tpantin (1)
teor (1) sgmoore (1)
randy-waterhouse (1) randy-waterhouse (1)
plutoforever (1) plutoforever (1)
murrayn (1) murrayn (1)
@ -202,6 +204,7 @@ Josh Ellithorpe (1)
Jonas Nick (1) Jonas Nick (1)
Jesse Cohen (1) Jesse Cohen (1)
Jeffrey Walton (1) Jeffrey Walton (1)
Janito Vaqueiro Ferreira Filho (1)
Jainan-Tandel (1) Jainan-Tandel (1)
Igor Cota (1) Igor Cota (1)
Ian T (1) Ian T (1)

View File

@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13. .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
.TH ZCASH-CLI "1" "October 2021" "zcash-cli v4.5.1-1" "User Commands" .TH ZCASH-CLI "1" "January 2022" "zcash-cli v4.6.0-1" "User Commands"
.SH NAME .SH NAME
zcash-cli \- manual page for zcash-cli v4.5.1-1 zcash-cli \- manual page for zcash-cli v4.6.0-1
.SH DESCRIPTION .SH DESCRIPTION
Zcash RPC client version v4.5.1\-1 Zcash RPC client version v4.6.0\-1
.PP .PP
In order to ensure you are adequately protecting your privacy when using Zcash, In order to ensure you are adequately protecting your privacy when using Zcash,
please see <https://z.cash/support/security/>. please see <https://z.cash/support/security/>.

View File

@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13. .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
.TH ZCASH-TX "1" "October 2021" "zcash-tx v4.5.1-1" "User Commands" .TH ZCASH-TX "1" "January 2022" "zcash-tx v4.6.0-1" "User Commands"
.SH NAME .SH NAME
zcash-tx \- manual page for zcash-tx v4.5.1-1 zcash-tx \- manual page for zcash-tx v4.6.0-1
.SH DESCRIPTION .SH DESCRIPTION
Zcash zcash\-tx utility version v4.5.1\-1 Zcash zcash\-tx utility version v4.6.0\-1
.SS "Usage:" .SS "Usage:"
.TP .TP
zcash\-tx [options] <hex\-tx> [commands] zcash\-tx [options] <hex\-tx> [commands]

View File

@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13. .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
.TH ZCASHD "1" "October 2021" "zcashd v4.5.1-1" "User Commands" .TH ZCASHD "1" "January 2022" "zcashd v4.6.0-1" "User Commands"
.SH NAME .SH NAME
zcashd \- manual page for zcashd v4.5.1-1 zcashd \- manual page for zcashd v4.6.0-1
.SH DESCRIPTION .SH DESCRIPTION
Zcash Daemon version v4.5.1\-1 Zcash Daemon version v4.6.0\-1
.PP .PP
In order to ensure you are adequately protecting your privacy when using Zcash, In order to ensure you are adequately protecting your privacy when using Zcash,
please see <https://z.cash/support/security/>. please see <https://z.cash/support/security/>.

View File

@ -0,0 +1,37 @@
`getblocktemplate` regression fix
=================================
We added support for the NU5 consensus rules in v4.5.0, which alters the
block header to contain a `hashBlockCommitments` value instead of the
chain history root. However, the output of `getblocktemplate` wasn't
returning this value; once NU5 activated, the `blockcommitmentshash`
field was being set to "null" (all-zeroes).
In v4.6.0 we added full NU5 support to `getblocktemplate`, by adding a
`defaultroots` field that gave default values for `hashBlockCommitments`
and the components required to derive it. However, in doing so we
introduced a regression in the (now-deprecated) legacy fields, where
prior to NU5 activation they contained nonsense.
This release fixes the output of `getblocktemplate` to have the intended
semantics for all fields:
- The `blockcommitmentshash` and `authdataroot` fields in `defaultroots`
are now omitted from block templates for heights before NU5 activation.
- The legacy fields now always contain the default value to be placed
into the block header (regaining their previous semantics).
Changelog
=========
Jack Grigg (3):
rpc: Fix regression in getblocktemplate output
make-release.py: Versioning changes for 4.6.0-1.
make-release.py: Updated manpages for 4.6.0-1.
Larry Ruane (3):
assert that the return value of submitblock is None
test: check getblocktemplate output before and after NU5
test: Fix ZIP 244 implementation

View File

@ -0,0 +1,111 @@
Notable changes
===============
Wallet
------
From this release, newly-created wallets will save the chain name ("Zcash") and
network identifier (e.g. "main") to the `wallet.dat` file. This will enable the
`zcashd` node to check on subsequent starts that the `wallet.dat` file matches
the node's configuration. Existing wallets will start saving this information in
a later release.
`libzcash_script`
-----------------
Two new APIs have been added to this library (`zcash_script_legacy_sigop_count`
and `zcash_script_legacy_sigop_count_precomputed`), for counting the number of
signature operations in the transparent inputs and outputs of a transaction.
The presence of these APIs is indicated by a library API version of 2.
Updated RPCs
------------
- Fixed an issue where `ERROR: spent index not enabled` would be logged
unnecessarily on nodes that have either insightexplorer or lightwalletd
configuration options enabled.
- The `getmininginfo` RPC now omits `currentblockize` and `currentblocktx`
when a block was never assembled via RPC on this node during its current
process instantiation. (#5404)
Changelog
=========
Alex Wied (1):
Update support for FreeBSD
Charlie O'Keefe (1):
Add buster to the list of suites used by gitian
Dimitris Apostolou (1):
Fix typos
Jack Grigg (22):
contrib: Update Debian copyright file to follow the v1 format
contrib: Add license information for libc++ and libevent
cargo update
tracing-subscriber 0.3
Bump all postponed dependencies
depends: Update Rust to 1.56.1
depends: Update Clang / libcxx to LLVM 13
rust: Move `incremental_sinsemilla_tree_ffi` into crate root
CI: Add Pyflakes to lints workflow
cargo update
ed25519-zebra 3
cargo update
cargo update
depends: Update Boost to 1.78.0
depends Update Rust to 1.57.0
qa: Postpone recent CCache releases
Revert "lint: Fix false positive"
rust: Remove misleading log message
Migrate to latest revisions of Zcash Rust crates
Update release notes
make-release.py: Versioning changes for 4.6.0-rc1.
make-release.py: Updated manpages for 4.6.0-rc1.
Janito Vaqueiro Ferreira Filho (1):
Move `CurrentTxVersionInfo` into a new file
Kris Nuttycombe (7):
Add BIP 44 coin type to persisted wallet state.
Persist network id string instead of bip44 coin type.
Add a check to test that wallet load fails if we're on the wrong network.
Remove unused `AddDestData` method.
Fix wallet-related wording in doc/reduce-traffic.md
Rename OrchardMerkleTree -> OrchardMerkleFrontier
Batch-verify Orchard transactions at the block level.
Larry Ruane (6):
add TestSetIBD(bool) for testing
Disable IBD for all boost tests
better wallet network info error handling
test: automatically add missing nuparams
Don't log 'ERROR: spent index not enabled'
getblocktemplate: add NU5 commitments to new `defaultroots` section
Marco Falke (1):
[rpc] mining: Omit uninitialized currentblockweight, currentblocktx
Marshall Gaucher (1):
Update entrypoint.sh
Sasha (1):
fix typo in docker run's volume argument
sgmoore (1):
Update reduce-traffic.md - add one word
Jack Grigg (1):
contrib: Add space between URL and period
teor (7):
Add sigop count functions to zcash_script library
Increment the zcash_script API version
Remove an unused header
Use correct copyright header
Remove redundant variable
Explain UINT_MAX error return value
Explain how to get rid of a tiny duplicated function

View File

@ -0,0 +1,126 @@
Notable changes
===============
Wallet
------
From this release, newly-created wallets will save the chain name ("Zcash") and
network identifier (e.g. "main") to the `wallet.dat` file. This will enable the
`zcashd` node to check on subsequent starts that the `wallet.dat` file matches
the node's configuration. Existing wallets will start saving this information in
a later release.
`libzcash_script`
-----------------
Two new APIs have been added to this library (`zcash_script_legacy_sigop_count`
and `zcash_script_legacy_sigop_count_precomputed`), for counting the number of
signature operations in the transparent inputs and outputs of a transaction.
The presence of these APIs is indicated by a library API version of 2.
Updated RPCs
------------
- The `getblocktemplate` RPC method output now includes a `defaultroots` field,
which provides various tree roots and block commitments matching the contents
of the block template. If any part of the block template marked as `mutable`
in the RPC method output is mutated, these roots may need to be recomputed.
For more information on the derivation process, see the block header changes
in [ZIP 244](https://zips.z.cash/zip-0244#block-header-changes).
- Fixed an issue where `ERROR: spent index not enabled` would be logged
unnecessarily on nodes that have either `-insightexplorer` or `-lightwalletd`
configuration options enabled.
- The `getmininginfo` RPC now omits `currentblocksize` and `currentblocktx`
when a block was never assembled via RPC on this node during its current
process instantiation. (#5404)
Changelog
=========
Alex Wied (1):
Update support for FreeBSD
Charlie O'Keefe (2):
Add buster to the list of suites used by gitian
Add libtinfo5 to gitian packages list
Dimitris Apostolou (1):
Fix typos
Jack Grigg (23):
contrib: Update Debian copyright file to follow the v1 format
contrib: Add license information for libc++ and libevent
cargo update
tracing-subscriber 0.3
Bump all postponed dependencies
depends: Update Rust to 1.56.1
depends: Update Clang / libcxx to LLVM 13
rust: Move `incremental_sinsemilla_tree_ffi` into crate root
CI: Add Pyflakes to lints workflow
cargo update
ed25519-zebra 3
cargo update
cargo update
depends: Update Boost to 1.78.0
depends Update Rust to 1.57.0
qa: Postpone recent CCache releases
Revert "lint: Fix false positive"
rust: Remove misleading log message
Migrate to latest revisions of Zcash Rust crates
Update release notes
make-release.py: Versioning changes for 4.6.0-rc1.
make-release.py: Updated manpages for 4.6.0-rc1.
make-release.py: Updated release notes and changelog for 4.6.0-rc1.
Janito Vaqueiro Ferreira Filho (1):
Move `CurrentTxVersionInfo` into a new file
Kris Nuttycombe (7):
Add BIP 44 coin type to persisted wallet state.
Persist network id string instead of bip44 coin type.
Add a check to test that wallet load fails if we're on the wrong network.
Remove unused `AddDestData` method.
Fix wallet-related wording in doc/reduce-traffic.md
Rename OrchardMerkleTree -> OrchardMerkleFrontier
Batch-verify Orchard transactions at the block level.
Larry Ruane (8):
add TestSetIBD(bool) for testing
Disable IBD for all boost tests
better wallet network info error handling
test: automatically add missing nuparams
Don't log 'ERROR: spent index not enabled'
getblocktemplate: add NU5 commitments to new `defaultroots` section
test: fix bugs in test framework
test: Use result of getblocktemplate to submitblock
Marco Falke (1):
[rpc] mining: Omit uninitialized currentblockweight, currentblocktx
Marshall Gaucher (1):
Update entrypoint.sh
Sasha (5):
fix typo in docker run's volume argument
update hash for librustzcash
only librustzcash in config.offline
make-release.py: Versioning changes for 4.6.0.
make-release.py: Updated manpages for 4.6.0.
sgmoore (1):
Update reduce-traffic.md - add one word
Jack Grigg (1):
contrib: Add space between URL and period
teor (7):
Add sigop count functions to zcash_script library
Increment the zcash_script API version
Remove an unused header
Use correct copyright header
Remove redundant variable
Explain UINT_MAX error return value
Explain how to get rid of a tiny duplicated function

View File

@ -103,6 +103,7 @@ BASE_SCRIPTS= [
'disablewallet.py', 'disablewallet.py',
'keypool.py', 'keypool.py',
'getblocktemplate.py', 'getblocktemplate.py',
'getmininginfo.py',
'bip65-cltv-p2p.py', 'bip65-cltv-p2p.py',
'bipdersig-p2p.py', 'bipdersig-p2p.py',
'invalidblockrequest.py', 'invalidblockrequest.py',
@ -122,6 +123,7 @@ BASE_SCRIPTS= [
'feature_zip239.py', 'feature_zip239.py',
'feature_zip244_blockcommitments.py', 'feature_zip244_blockcommitments.py',
'upgrade_golden.py', 'upgrade_golden.py',
'nuparams.py',
'post_heartwood_rollback.py', 'post_heartwood_rollback.py',
'feature_logging.py', 'feature_logging.py',
'feature_walletfile.py', 'feature_walletfile.py',

View File

@ -3,63 +3,185 @@
# Distributed under the MIT software license, see the accompanying # Distributed under the MIT software license, see the accompanying
# file COPYING or https://www.opensource.org/licenses/mit-license.php . # file COPYING or https://www.opensource.org/licenses/mit-license.php .
from io import BytesIO
import codecs
from test_framework.test_framework import BitcoinTestFramework from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import assert_equal, connect_nodes_bi, \ from test_framework.util import (
start_nodes assert_equal,
CANOPY_BRANCH_ID,
NU5_BRANCH_ID,
hex_str_to_bytes,
nuparams,
start_nodes,
wait_and_assert_operationid_status,
)
from test_framework.mininode import (
CTransaction,
uint256_from_str,
)
from test_framework.blocktools import (
create_block
)
from decimal import Decimal
class GetBlockTemplateTest(BitcoinTestFramework): class GetBlockTemplateTest(BitcoinTestFramework):
''' '''
Test getblocktemplate. Test getblocktemplate, ensure that a block created from its result
can be submitted and accepted.
''' '''
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.num_nodes = 2 self.num_nodes = 1
self.setup_clean_chain = True self.setup_clean_chain = True
def setup_network(self, split=False): def setup_network(self, split=False):
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir) args = [
connect_nodes_bi(self.nodes,0,1) nuparams(CANOPY_BRANCH_ID, 115),
self.is_network_split=False nuparams(NU5_BRANCH_ID, 130),
]
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, [args] * self.num_nodes)
self.is_network_split = False
self.node = self.nodes[0]
def add_nu5_v4_tx_to_mempool(self):
node = self.node
# sprout to transparent (v4)
recipients = [{"address": self.transparent_addr, "amount": Decimal('0.1')}]
myopid = node.z_sendmany(self.sprout_addr, recipients)
wait_and_assert_operationid_status(node, myopid)
def add_transparent_tx_to_mempool(self):
node = self.node
# transparent to transparent (v5 after nu5)
outputs = {self.transparent_addr: 0.1}
node.sendmany('', outputs)
def gbt_submitblock(self, nu5_active):
node = self.node
mempool_tx_list = node.getrawmempool()
gbt = node.getblocktemplate()
# make sure no transactions were left out (or added)
assert_equal(len(mempool_tx_list), len(gbt['transactions']))
assert_equal(set(mempool_tx_list), set([tx['hash'] for tx in gbt['transactions']]))
prevhash = int(gbt['previousblockhash'], 16)
nTime = gbt['mintime']
nBits = int(gbt['bits'], 16)
if nu5_active:
blockcommitmentshash = int(gbt['defaultroots']['blockcommitmentshash'], 16)
else:
blockcommitmentshash = int(gbt['defaultroots']['chainhistoryroot'], 16)
assert 'blockcommitmentshash' not in gbt['defaultroots']
# Confirm that the legacy fields match this default value.
assert_equal(blockcommitmentshash, int(gbt['blockcommitmentshash'], 16))
assert_equal(blockcommitmentshash, int(gbt['lightclientroothash'], 16))
assert_equal(blockcommitmentshash, int(gbt['finalsaplingroothash'], 16))
f = BytesIO(hex_str_to_bytes(gbt['coinbasetxn']['data']))
coinbase = CTransaction()
coinbase.deserialize(f)
coinbase.calc_sha256()
assert_equal(coinbase.hash, gbt['coinbasetxn']['hash'])
assert_equal(coinbase.auth_digest_hex, gbt['coinbasetxn']['authdigest'])
block = create_block(prevhash, coinbase, nTime, nBits, blockcommitmentshash)
# copy the non-coinbase transactions from the block template to the block
for gbt_tx in gbt['transactions']:
f = BytesIO(hex_str_to_bytes(gbt_tx['data']))
tx = CTransaction()
tx.deserialize(f)
tx.calc_sha256()
assert_equal(tx.auth_digest_hex, node.getrawtransaction(tx.hash, 1)['authdigest'])
block.vtx.append(tx)
block.hashMerkleRoot = int(gbt['defaultroots']['merkleroot'], 16)
assert_equal(block.hashMerkleRoot, block.calc_merkle_root(), "merkleroot")
assert_equal(len(block.vtx), len(gbt['transactions']) + 1, "number of transactions")
assert_equal(block.hashPrevBlock, int(gbt['previousblockhash'], 16), "prevhash")
if nu5_active:
assert_equal(uint256_from_str(block.calc_auth_data_root()), int(gbt['defaultroots']['authdataroot'], 16))
else:
assert 'authdataroot' not in gbt['defaultroots']
block.solve()
block.calc_sha256()
submitblock_reply = node.submitblock(codecs.encode(block.serialize(), 'hex_codec'))
assert_equal(None, submitblock_reply)
assert_equal(block.hash, node.getbestblockhash())
# Wait until the wallet has been notified of all blocks, so that it doesn't try to
# double-spend transparent coins in subsequent test phases.
self.sync_all() self.sync_all()
def run_test(self): def run_test(self):
node = self.nodes[0] node = self.node
node.generate(1) # Mine a block to leave initial block download
# Test 1: Default to coinbasetxn # Generate Sprout funds before Canopy activates; using the Sprout address will
tmpl = node.getblocktemplate() # force the generation of v4 transactions from NU5.
assert('coinbasetxn' in tmpl) print("Generating pre-Canopy blocks to create sprout funds")
assert('coinbasevalue' not in tmpl) # coinbase only becomes mature after 100 blocks, so make one mature.
node.generate(105)
# Test 2: Get coinbasetxn if requested self.sprout_addr = node.z_getnewaddress('sprout')
tmpl = node.getblocktemplate({'capabilities': ['coinbasetxn']}) myopid = node.z_shieldcoinbase('*', self.sprout_addr)['opid']
assert('coinbasetxn' in tmpl) wait_and_assert_operationid_status(node, myopid)
assert('coinbasevalue' not in tmpl)
# Test 3: coinbasevalue not supported if requested self.transparent_addr = node.getnewaddress()
tmpl = node.getblocktemplate({'capabilities': ['coinbasevalue']}) node.generate(15)
assert('coinbasetxn' in tmpl)
assert('coinbasevalue' not in tmpl)
# Test 4: coinbasevalue not supported if both requested # at height 120, NU5 is not active
tmpl = node.getblocktemplate({'capabilities': ['coinbasetxn', 'coinbasevalue']}) assert_equal(node.getblockchaininfo()['upgrades']['37519621']['status'], 'pending')
assert('coinbasetxn' in tmpl)
assert('coinbasevalue' not in tmpl)
# Test 5: General checks print("Testing getblocktemplate for pre-NU5")
tmpl = node.getblocktemplate()
assert_equal(16, len(tmpl['noncerange']))
# Test 6: coinbasetxn checks # Only the coinbase; this covers the case where the Merkle root
assert('foundersreward' in tmpl['coinbasetxn']) # is equal to the coinbase txid.
assert(tmpl['coinbasetxn']['required']) print("- only coinbase")
self.gbt_submitblock(False)
# Adding one transaction triggering a single Merkle digest.
print("- one transaction (plus coinbase)")
self.add_transparent_tx_to_mempool()
self.gbt_submitblock(False)
# Adding two transactions to trigger hash Merkle root edge case.
print("- two transactions (plus coinbase)")
self.add_transparent_tx_to_mempool()
self.add_transparent_tx_to_mempool()
self.gbt_submitblock(False)
# Activate NU5, repeat the above cases
node.generate(7)
assert_equal(node.getblockchaininfo()['upgrades']['37519621']['status'], 'active')
print("Testing getblocktemplate for post-NU5")
# Only the coinbase; this covers the case where the block authdata root
# is equal to the coinbase authdata
print("- only coinbase")
self.gbt_submitblock(True)
# Adding one transaction triggering a single Merkle digest.
print("- one transaction (plus coinbase)")
self.add_transparent_tx_to_mempool()
self.gbt_submitblock(True)
# Adding two transactions to trigger hash Merkle root edge case.
print("- two transactions (plus coinbase)")
self.add_transparent_tx_to_mempool()
self.add_transparent_tx_to_mempool()
self.gbt_submitblock(True)
# Adding both v4 and v5 to cover legacy auth digest.
print("- both v4 and v5 transactions (plus coinbase)")
self.add_nu5_v4_tx_to_mempool()
self.add_transparent_tx_to_mempool()
self.add_transparent_tx_to_mempool()
self.gbt_submitblock(True)
# Test 7: hashFinalSaplingRoot checks
assert('finalsaplingroothash' in tmpl)
finalsaplingroothash = '3e49b5f954aa9d3545bc6c37744661eea48d7c34e3000d82b7f0010c30f4c2fb'
assert_equal(finalsaplingroothash, tmpl['finalsaplingroothash'])
if __name__ == '__main__': if __name__ == '__main__':
GetBlockTemplateTest().main() GetBlockTemplateTest().main()

47
qa/rpc-tests/getmininginfo.py Executable file
View File

@ -0,0 +1,47 @@
#!/usr/bin/env python3
# Copyright (c) 2021 The Zcash developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or https://www.opensource.org/licenses/mit-license.php .
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import start_nodes
class GetMiningInfoTest(BitcoinTestFramework):
'''
Test getmininginfo.
'''
def __init__(self):
super().__init__()
self.num_nodes = 1
self.setup_clean_chain = True
def setup_network(self, split=False):
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir)
self.is_network_split = False
self.sync_all()
def run_test(self):
node = self.nodes[0]
info = node.getmininginfo()
assert(info['blocks'] == 0)
# No blocks have been mined yet, so these fields should not be present.
assert('currentblocksize' not in info)
assert('currentblocktx' not in info)
node.generate(1)
info = node.getmininginfo()
assert(info['blocks'] == 1)
# One block has been mined, so these fields should now be present.
assert('currentblocksize' in info)
assert('currentblocktx' in info)
assert(info['currentblocksize'] > 0)
# The transaction count doesn't include the coinbase
assert(info['currentblocktx'] == 0)
if __name__ == '__main__':
GetMiningInfoTest().main()

217
qa/rpc-tests/nuparams.py Executable file
View File

@ -0,0 +1,217 @@
#!/usr/bin/env python3
# Copyright (c) 2021 The Zcash developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or https://www.opensource.org/licenses/mit-license.php .
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import (
assert_equal,
start_nodes,
nuparams,
HEARTWOOD_BRANCH_ID,
NU5_BRANCH_ID,
)
class NuparamsTest(BitcoinTestFramework):
'''
Test that unspecified network upgrades are activated automatically;
this is really more of a test of the test framework.
'''
def __init__(self):
super().__init__()
self.num_nodes = 1
self.setup_clean_chain = True
def setup_network(self, split=False):
args = [[
nuparams(HEARTWOOD_BRANCH_ID, 3),
nuparams(NU5_BRANCH_ID, 5),
] * self.num_nodes]
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, args)
self.is_network_split = False
self.sync_all()
def run_test(self):
node = self.nodes[0]
# No blocks have been created, only the genesis block exists (height 0)
bci = node.getblockchaininfo()
assert_equal(bci['blocks'], 0)
upgrades = bci['upgrades']
overwinter = upgrades['5ba81b19']
assert_equal(overwinter['name'], 'Overwinter')
assert_equal(overwinter['activationheight'], 1)
assert_equal(overwinter['status'], 'pending')
sapling = upgrades['76b809bb']
assert_equal(sapling['name'], 'Sapling')
assert_equal(sapling['activationheight'], 1)
assert_equal(sapling['status'], 'pending')
blossom = upgrades['2bb40e60']
assert_equal(blossom['name'], 'Blossom')
assert_equal(blossom['activationheight'], 3)
assert_equal(blossom['status'], 'pending')
heartwood = upgrades['f5b9230b']
assert_equal(heartwood['name'], 'Heartwood')
assert_equal(heartwood['activationheight'], 3)
assert_equal(heartwood['status'], 'pending')
canopy = upgrades['e9ff75a6']
assert_equal(canopy['name'], 'Canopy')
assert_equal(canopy['activationheight'], 5)
assert_equal(canopy['status'], 'pending')
nu5 = upgrades['37519621']
assert_equal(nu5['name'], 'NU5')
assert_equal(nu5['activationheight'], 5)
assert_equal(nu5['status'], 'pending')
node.generate(1)
# start_node() hardcodes Sapling and Overwinter to activate a height 1
bci = node.getblockchaininfo()
assert_equal(bci['blocks'], 1)
upgrades = bci['upgrades']
overwinter = upgrades['5ba81b19']
assert_equal(overwinter['name'], 'Overwinter')
assert_equal(overwinter['activationheight'], 1)
assert_equal(overwinter['status'], 'active')
sapling = upgrades['76b809bb']
assert_equal(sapling['name'], 'Sapling')
assert_equal(sapling['activationheight'], 1)
assert_equal(sapling['status'], 'active')
blossom = upgrades['2bb40e60']
assert_equal(blossom['name'], 'Blossom')
assert_equal(blossom['activationheight'], 3)
assert_equal(blossom['status'], 'pending')
heartwood = upgrades['f5b9230b']
assert_equal(heartwood['name'], 'Heartwood')
assert_equal(heartwood['activationheight'], 3)
assert_equal(heartwood['status'], 'pending')
canopy = upgrades['e9ff75a6']
assert_equal(canopy['name'], 'Canopy')
assert_equal(canopy['activationheight'], 5)
assert_equal(canopy['status'], 'pending')
nu5 = upgrades['37519621']
assert_equal(nu5['name'], 'NU5')
assert_equal(nu5['activationheight'], 5)
assert_equal(nu5['status'], 'pending')
node.generate(1)
bci = node.getblockchaininfo()
assert_equal(bci['blocks'], 2)
upgrades = bci['upgrades']
overwinter = upgrades['5ba81b19']
assert_equal(overwinter['name'], 'Overwinter')
assert_equal(overwinter['activationheight'], 1)
assert_equal(overwinter['status'], 'active')
sapling = upgrades['76b809bb']
assert_equal(sapling['name'], 'Sapling')
assert_equal(sapling['activationheight'], 1)
assert_equal(sapling['status'], 'active')
blossom = upgrades['2bb40e60']
assert_equal(blossom['name'], 'Blossom')
assert_equal(blossom['activationheight'], 3)
assert_equal(blossom['status'], 'pending')
heartwood = upgrades['f5b9230b']
assert_equal(heartwood['name'], 'Heartwood')
assert_equal(heartwood['activationheight'], 3)
assert_equal(heartwood['status'], 'pending')
canopy = upgrades['e9ff75a6']
assert_equal(canopy['name'], 'Canopy')
assert_equal(canopy['activationheight'], 5)
assert_equal(canopy['status'], 'pending')
nu5 = upgrades['37519621']
assert_equal(nu5['name'], 'NU5')
assert_equal(nu5['activationheight'], 5)
assert_equal(nu5['status'], 'pending')
node.generate(2)
bci = node.getblockchaininfo()
assert_equal(bci['blocks'], 4)
upgrades = bci['upgrades']
overwinter = upgrades['5ba81b19']
assert_equal(overwinter['name'], 'Overwinter')
assert_equal(overwinter['activationheight'], 1)
assert_equal(overwinter['status'], 'active')
sapling = upgrades['76b809bb']
assert_equal(sapling['name'], 'Sapling')
assert_equal(sapling['activationheight'], 1)
assert_equal(sapling['status'], 'active')
blossom = upgrades['2bb40e60']
assert_equal(blossom['name'], 'Blossom')
assert_equal(blossom['activationheight'], 3)
assert_equal(blossom['status'], 'active')
heartwood = upgrades['f5b9230b']
assert_equal(heartwood['name'], 'Heartwood')
assert_equal(heartwood['activationheight'], 3)
assert_equal(heartwood['status'], 'active')
canopy = upgrades['e9ff75a6']
assert_equal(canopy['name'], 'Canopy')
assert_equal(canopy['activationheight'], 5)
assert_equal(canopy['status'], 'pending')
nu5 = upgrades['37519621']
assert_equal(nu5['name'], 'NU5')
assert_equal(nu5['activationheight'], 5)
assert_equal(nu5['status'], 'pending')
node.generate(1)
bci = node.getblockchaininfo()
assert_equal(bci['blocks'], 5)
upgrades = bci['upgrades']
overwinter = upgrades['5ba81b19']
assert_equal(overwinter['name'], 'Overwinter')
assert_equal(overwinter['activationheight'], 1)
assert_equal(overwinter['status'], 'active')
sapling = upgrades['76b809bb']
assert_equal(sapling['name'], 'Sapling')
assert_equal(sapling['activationheight'], 1)
assert_equal(sapling['status'], 'active')
blossom = upgrades['2bb40e60']
assert_equal(blossom['name'], 'Blossom')
assert_equal(blossom['activationheight'], 3)
assert_equal(blossom['status'], 'active')
heartwood = upgrades['f5b9230b']
assert_equal(heartwood['name'], 'Heartwood')
assert_equal(heartwood['activationheight'], 3)
assert_equal(heartwood['status'], 'active')
canopy = upgrades['e9ff75a6']
assert_equal(canopy['name'], 'Canopy')
assert_equal(canopy['activationheight'], 5)
assert_equal(canopy['status'], 'active')
nu5 = upgrades['37519621']
assert_equal(nu5['name'], 'NU5')
assert_equal(nu5['activationheight'], 5)
assert_equal(nu5['status'], 'active')
if __name__ == '__main__':
NuparamsTest().main()

View File

@ -660,7 +660,7 @@ class OutputDescription(object):
self.encCiphertext = f.read(580) self.encCiphertext = f.read(580)
self.outCiphertext = f.read(80) self.outCiphertext = f.read(80)
self.zkproof = Groth16Proof() self.zkproof = Groth16Proof()
self.zkproof.deserialize() self.zkproof.deserialize(f)
def serialize(self): def serialize(self):
r = b"" r = b""
@ -971,6 +971,8 @@ class CTransaction(object):
self.nLockTime = 0 self.nLockTime = 0
self.nExpiryHeight = 0 self.nExpiryHeight = 0
self.valueBalance = 0 self.valueBalance = 0
self.saplingBundle = SaplingBundle()
self.orchardBundle = OrchardBundle()
self.shieldedSpends = [] self.shieldedSpends = []
self.shieldedOutputs = [] self.shieldedOutputs = []
self.vJoinSplit = [] self.vJoinSplit = []
@ -988,6 +990,8 @@ class CTransaction(object):
self.nLockTime = tx.nLockTime self.nLockTime = tx.nLockTime
self.nExpiryHeight = tx.nExpiryHeight self.nExpiryHeight = tx.nExpiryHeight
self.valueBalance = tx.valueBalance self.valueBalance = tx.valueBalance
self.saplingBundle = copy.deepcopy(tx.saplingBundle)
self.orchardBundle = copy.deepcopy(tx.orchardBundle)
self.shieldedSpends = copy.deepcopy(tx.shieldedSpends) self.shieldedSpends = copy.deepcopy(tx.shieldedSpends)
self.shieldedOutputs = copy.deepcopy(tx.shieldedOutputs) self.shieldedOutputs = copy.deepcopy(tx.shieldedOutputs)
self.vJoinSplit = copy.deepcopy(tx.vJoinSplit) self.vJoinSplit = copy.deepcopy(tx.vJoinSplit)
@ -1075,6 +1079,7 @@ class CTransaction(object):
# Common transaction fields # Common transaction fields
r += struct.pack("<I", header) r += struct.pack("<I", header)
r += struct.pack("<I", self.nVersionGroupId)
r += struct.pack("<I", self.nConsensusBranchId) r += struct.pack("<I", self.nConsensusBranchId)
r += struct.pack("<I", self.nLockTime) r += struct.pack("<I", self.nLockTime)
r += struct.pack("<I", self.nExpiryHeight) r += struct.pack("<I", self.nExpiryHeight)
@ -1121,11 +1126,14 @@ class CTransaction(object):
if self.nVersion >= 5: if self.nVersion >= 5:
from . import zip244 from . import zip244
txid = zip244.txid_digest(self) txid = zip244.txid_digest(self)
self.auth_digest = zip244.auth_digest(self)
else: else:
txid = hash256(self.serialize()) txid = hash256(self.serialize())
self.auth_digest = b'\xFF'*32
if self.sha256 is None: if self.sha256 is None:
self.sha256 = uint256_from_str(txid) self.sha256 = uint256_from_str(txid)
self.hash = encode(txid[::-1], 'hex_codec').decode('ascii') self.hash = encode(txid[::-1], 'hex_codec').decode('ascii')
self.auth_digest_hex = encode(self.auth_digest[::-1], 'hex_codec').decode('ascii')
def is_valid(self): def is_valid(self):
self.calc_sha256() self.calc_sha256()
@ -1258,6 +1266,27 @@ class CBlock(CBlockHeader):
hashes = newhashes hashes = newhashes
return uint256_from_str(hashes[0]) return uint256_from_str(hashes[0])
def calc_auth_data_root(self):
hashes = []
nleaves = 0
for tx in self.vtx:
tx.calc_sha256()
hashes.append(tx.auth_digest)
nleaves += 1
# Continue adding leaves (of zeros) until reaching a power of 2
while nleaves & (nleaves-1) > 0:
hashes.append(b'\x00'*32)
nleaves += 1
while len(hashes) > 1:
newhashes = []
for i in range(0, len(hashes), 2):
digest = blake2b(digest_size=32, person=b'ZcashAuthDatHash')
digest.update(hashes[i])
digest.update(hashes[i+1])
newhashes.append(digest.digest())
hashes = newhashes
return hashes[0]
def is_valid(self, n=48, k=5): def is_valid(self, n=48, k=5):
# H(I||... # H(I||...
digest = blake2b(digest_size=(512//n)*n//8, person=zcash_person(n, k)) digest = blake2b(digest_size=(512//n)*n//8, person=zcash_person(n, k))

View File

@ -15,7 +15,7 @@ import struct
from pyblake2 import blake2b from pyblake2 import blake2b
from .mininode import ser_uint256 from .mininode import ser_string, ser_uint256
from .script import ( from .script import (
SIGHASH_ANYONECANPAY, SIGHASH_ANYONECANPAY,
SIGHASH_NONE, SIGHASH_NONE,
@ -41,7 +41,7 @@ def transparent_digest(tx):
def transparent_scripts_digest(tx): def transparent_scripts_digest(tx):
digest = blake2b(digest_size=32, person=b'ZTxAuthTransHash') digest = blake2b(digest_size=32, person=b'ZTxAuthTransHash')
for x in tx.vin: for x in tx.vin:
digest.update(bytes(x.scriptSig)) digest.update(ser_string(x.scriptSig))
return digest.digest() return digest.digest()
# Sapling # Sapling
@ -52,7 +52,7 @@ def sapling_digest(saplingBundle):
if len(saplingBundle.spends) + len(saplingBundle.outputs) > 0: if len(saplingBundle.spends) + len(saplingBundle.outputs) > 0:
digest.update(sapling_spends_digest(saplingBundle)) digest.update(sapling_spends_digest(saplingBundle))
digest.update(sapling_outputs_digest(saplingBundle)) digest.update(sapling_outputs_digest(saplingBundle))
digest.update(struct.pack('<Q', saplingBundle.valueBalance)) digest.update(struct.pack('<q', saplingBundle.valueBalance))
return digest.digest() return digest.digest()
@ -126,7 +126,7 @@ def sapling_outputs_noncompact_digest(saplingBundle):
for desc in saplingBundle.outputs: for desc in saplingBundle.outputs:
digest.update(ser_uint256(desc.cv)) digest.update(ser_uint256(desc.cv))
digest.update(desc.encCiphertext[564:]) digest.update(desc.encCiphertext[564:])
digest.update(desc.outCipherText) digest.update(desc.outCiphertext)
return digest.digest() return digest.digest()
# Orchard # Orchard
@ -139,7 +139,7 @@ def orchard_digest(orchardBundle):
digest.update(orchard_actions_memos_digest(orchardBundle)) digest.update(orchard_actions_memos_digest(orchardBundle))
digest.update(orchard_actions_noncompact_digest(orchardBundle)) digest.update(orchard_actions_noncompact_digest(orchardBundle))
digest.update(struct.pack('<B', orchardBundle.flags())) digest.update(struct.pack('<B', orchardBundle.flags()))
digest.update(struct.pack('<Q', orchardBundle.valueBalance)) digest.update(struct.pack('<q', orchardBundle.valueBalance))
digest.update(bytes(orchardBundle.anchor)) digest.update(bytes(orchardBundle.anchor))
return digest.digest() return digest.digest()
@ -288,7 +288,7 @@ def outputs_sig_digest(tx, nHashType, txin):
def txin_sig_digest(tx, txin): def txin_sig_digest(tx, txin):
digest = blake2b(digest_size=32, person=b'Zcash___TxInHash') digest = blake2b(digest_size=32, person=b'Zcash___TxInHash')
digest.update(bytes(tx.vin[txin.nIn].prevout)) digest.update(bytes(tx.vin[txin.nIn].prevout))
digest.update(bytes(txin.scriptCode)) digest.update(ser_string(txin.scriptCode))
digest.update(struct.pack('<Q', txin.amount)) digest.update(struct.pack('<Q', txin.amount))
digest.update(struct.pack('<I', tx.vin[txin.nIn].nSequence)) digest.update(struct.pack('<I', tx.vin[txin.nIn].nSequence))
return digest.digest() return digest.digest()

View File

@ -13,6 +13,8 @@ native_ccache 4.3 2022-02-01
native_ccache 4.4 2022-02-01 native_ccache 4.4 2022-02-01
native_ccache 4.4.1 2022-02-01 native_ccache 4.4.1 2022-02-01
native_ccache 4.4.2 2022-02-01 native_ccache 4.4.2 2022-02-01
native_ccache 4.5 2022-02-01
native_ccache 4.5.1 2022-02-01
# Clang is currently pinned to LLVM 13 # Clang is currently pinned to LLVM 13

View File

@ -16,8 +16,8 @@
//! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it //! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it
#define CLIENT_VERSION_MAJOR 4 #define CLIENT_VERSION_MAJOR 4
#define CLIENT_VERSION_MINOR 5 #define CLIENT_VERSION_MINOR 6
#define CLIENT_VERSION_REVISION 1 #define CLIENT_VERSION_REVISION 0
#define CLIENT_VERSION_BUILD 51 #define CLIENT_VERSION_BUILD 51
//! Set to true for release, false for prerelease or test build //! Set to true for release, false for prerelease or test build

View File

@ -10,7 +10,7 @@
// Per https://zips.z.cash/zip-0200 // Per https://zips.z.cash/zip-0200
// Shut down nodes running this version of code, 16 weeks' worth of blocks after the estimated // Shut down nodes running this version of code, 16 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. // release block height. A warning is shown during the 14 days' worth of blocks prior to shut down.
static const int APPROX_RELEASE_HEIGHT = 1396476; static const int APPROX_RELEASE_HEIGHT = 1504042;
static const int RELEASE_TO_DEPRECATION_WEEKS = 16; static const int RELEASE_TO_DEPRECATION_WEEKS = 16;
static const int EXPECTED_BLOCKS_PER_HOUR = 3600 / Consensus::POST_BLOSSOM_POW_TARGET_SPACING; 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_assert(EXPECTED_BLOCKS_PER_HOUR == 48, "The value of Consensus::POST_BLOSSOM_POW_TARGET_SPACING was chosen such that this assertion holds.");

View File

@ -4,6 +4,7 @@
#include "chain.h" #include "chain.h"
#include "chainparams.h" #include "chainparams.h"
#include "clientversion.h" #include "clientversion.h"
#include "main.h"
#include "primitives/block.h" #include "primitives/block.h"
#include "rpc/server.h" #include "rpc/server.h"
#include "streams.h" #include "streams.h"
@ -23,6 +24,7 @@ TEST(rpc, CheckBlockToJSONReturnsMinifiedSolution) {
CBlockIndex index {block}; CBlockIndex index {block};
index.nHeight = 1391; index.nHeight = 1391;
LOCK(cs_main);
UniValue obj = blockToJSON(block, &index); UniValue obj = blockToJSON(block, &index);
EXPECT_EQ("009f44ff7505d789b964d6817734b8ce1377d456255994370d06e59ac99bd5791b6ad174a66fd71c70e60cfc7fd88243ffe06f80b1ad181625f210779c745524629448e25348a5fce4f346a1735e60fdf53e144c0157dbc47c700a21a236f1efb7ee75f65b8d9d9e29026cfd09048233175202b211b9a49de4ab46f1cac71b6ea57a686377bd612378746e70c61a659c9cd683269e9c2a5cbc1d19f1149345302bbd0a1e62bf4bab01e9caeea789a1519441a61b146de35a4cc75dbdf01029127e311ad5073e7e96397f47226a7df9df66b2086b70756db013bbaeb068260157014b2602fc7dc71336e1439c887d2742d9730b4e79b08ec7839c3e2a037ae1565d04e05e351bb3531e5ef42cf7b71ca1482a9205245dd41f4db0f71644f8bdb88e845558537c03834c06ac83f336651e54e2edfc12e15ea9b7ea2c074e6155654d44c4d3bd90d9511050e9ad87d170db01448e5be6f45419cd86008978db5e3ceab79890234f992648d69bf1053855387db646ccdee5575c65f81dd0f670b016d9f9a84707d91f77b862f697b8bb08365ba71fbe6bfa47af39155a75ebdcb1e5d69f59c40c9e3a64988c1ec26f7f5159eef5c244d504a9e46125948ecc389c2ec3028ac4ff39ffd66e7743970819272b21e0c2df75b308bc62896873952147e57ed79446db4cdb5a563e76ec4c25899d41128afb9a5f8fc8063621efb7a58b9dd666d30c73e318cdcf3393bfec200e160f500e645f7baac263db99fa4a7c1cb4fea219fc512193102034d379f244c21a81821301b8d47c90247713a3e902c762d7bafa6cdb744eeb6d3b50dd175599d02b6e9f5bbda59366e04862aa765135968426e7ac0116de7351940dc57c0ae451d63f667e39891bc81e09e6c76f6f8a7582f7447c6f5945f717b0e52a7e3dd0c6db4061362123cc53fd8ede4abed4865201dc4d8eb4e5d48baa565183b69a5304a44c0600bb24dcaeee9d95ceebd27c1b0a33e0b46f23797d7d7907300b2bb7d62ef2fc5aa139250c73930c621bb5f41fc235534ee8014dfaddd5245aeb01198420ba7b5c076545329c94d54fa725a8e807579f5f0cc9d98170598023268f5930893620190275e6b3c6f5181e36310a9a475208316911d78f917d724c5946c553b7ec042c563c540114b6b78bd4c6e808ee391a4a9d93e127032983c5b3708037b14aa604cfb034e7c8b0ffdd6936446fe80216178506a87402653a373926eeff66e704daf992a0a9a5c3ad80566c0339be9e5b8e35b3b3226b2f7767e20d992ea6c3d6e322eca37b0c7f7e60060802f5abcc1975841365cadbdc3867063addfc803766ae525375ecddee61f9df9ffcd20343c83ab82b0e91de039c59cb435c8d3159cc338b4901f40c9b5c27043bcf2bd5fa9b685b65c9ba5a1e11a51dd3f773051560341f9ec81d05bf259e2d4b7161f896fbb6812cfc924a32120b7367d5e40439e267adda6a1315bb0d6200ce6a503174c8d2a638ea6fd6b1f486d68db11bdca63c4f4a725d1ab6231ea875484e70b27d293c05803386924f283d4c12bb953474d92b7dd43d2d97193bd96281ebb63fa075d2f9ecd310c70ee1d97b5330bd8fb5791c5943ecf084e5f2c83915acac57519c46b166136068d6f9ec0dd598616e32c591128ce13705a283ca39d5b211409600e07b3713113374d9700207a45394eac5b3b7afc9b1b2bad7d89fd3f35f6b2413ce615ee7869b3569009403b96fdacdb32ef0a7e5229e2b666d51e95bdfb009b892e88bde70621a9b6509f068781392df4bdbc5723bb15071993f0d9a11575af5ff6ef85eaea39bc86805b35d8beee91b779354147f2d85304b8b49d053e7444fdd3deb9d16de331f2552af5b3be7766bb8f3f6a78c62148efb231f2268", find_value(obj, "solution").get_str()); EXPECT_EQ("009f44ff7505d789b964d6817734b8ce1377d456255994370d06e59ac99bd5791b6ad174a66fd71c70e60cfc7fd88243ffe06f80b1ad181625f210779c745524629448e25348a5fce4f346a1735e60fdf53e144c0157dbc47c700a21a236f1efb7ee75f65b8d9d9e29026cfd09048233175202b211b9a49de4ab46f1cac71b6ea57a686377bd612378746e70c61a659c9cd683269e9c2a5cbc1d19f1149345302bbd0a1e62bf4bab01e9caeea789a1519441a61b146de35a4cc75dbdf01029127e311ad5073e7e96397f47226a7df9df66b2086b70756db013bbaeb068260157014b2602fc7dc71336e1439c887d2742d9730b4e79b08ec7839c3e2a037ae1565d04e05e351bb3531e5ef42cf7b71ca1482a9205245dd41f4db0f71644f8bdb88e845558537c03834c06ac83f336651e54e2edfc12e15ea9b7ea2c074e6155654d44c4d3bd90d9511050e9ad87d170db01448e5be6f45419cd86008978db5e3ceab79890234f992648d69bf1053855387db646ccdee5575c65f81dd0f670b016d9f9a84707d91f77b862f697b8bb08365ba71fbe6bfa47af39155a75ebdcb1e5d69f59c40c9e3a64988c1ec26f7f5159eef5c244d504a9e46125948ecc389c2ec3028ac4ff39ffd66e7743970819272b21e0c2df75b308bc62896873952147e57ed79446db4cdb5a563e76ec4c25899d41128afb9a5f8fc8063621efb7a58b9dd666d30c73e318cdcf3393bfec200e160f500e645f7baac263db99fa4a7c1cb4fea219fc512193102034d379f244c21a81821301b8d47c90247713a3e902c762d7bafa6cdb744eeb6d3b50dd175599d02b6e9f5bbda59366e04862aa765135968426e7ac0116de7351940dc57c0ae451d63f667e39891bc81e09e6c76f6f8a7582f7447c6f5945f717b0e52a7e3dd0c6db4061362123cc53fd8ede4abed4865201dc4d8eb4e5d48baa565183b69a5304a44c0600bb24dcaeee9d95ceebd27c1b0a33e0b46f23797d7d7907300b2bb7d62ef2fc5aa139250c73930c621bb5f41fc235534ee8014dfaddd5245aeb01198420ba7b5c076545329c94d54fa725a8e807579f5f0cc9d98170598023268f5930893620190275e6b3c6f5181e36310a9a475208316911d78f917d724c5946c553b7ec042c563c540114b6b78bd4c6e808ee391a4a9d93e127032983c5b3708037b14aa604cfb034e7c8b0ffdd6936446fe80216178506a87402653a373926eeff66e704daf992a0a9a5c3ad80566c0339be9e5b8e35b3b3226b2f7767e20d992ea6c3d6e322eca37b0c7f7e60060802f5abcc1975841365cadbdc3867063addfc803766ae525375ecddee61f9df9ffcd20343c83ab82b0e91de039c59cb435c8d3159cc338b4901f40c9b5c27043bcf2bd5fa9b685b65c9ba5a1e11a51dd3f773051560341f9ec81d05bf259e2d4b7161f896fbb6812cfc924a32120b7367d5e40439e267adda6a1315bb0d6200ce6a503174c8d2a638ea6fd6b1f486d68db11bdca63c4f4a725d1ab6231ea875484e70b27d293c05803386924f283d4c12bb953474d92b7dd43d2d97193bd96281ebb63fa075d2f9ecd310c70ee1d97b5330bd8fb5791c5943ecf084e5f2c83915acac57519c46b166136068d6f9ec0dd598616e32c591128ce13705a283ca39d5b211409600e07b3713113374d9700207a45394eac5b3b7afc9b1b2bad7d89fd3f35f6b2413ce615ee7869b3569009403b96fdacdb32ef0a7e5229e2b666d51e95bdfb009b892e88bde70621a9b6509f068781392df4bdbc5723bb15071993f0d9a11575af5ff6ef85eaea39bc86805b35d8beee91b779354147f2d85304b8b49d053e7444fdd3deb9d16de331f2552af5b3be7766bb8f3f6a78c62148efb231f2268", find_value(obj, "solution").get_str());
} }

View File

@ -1149,6 +1149,29 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
return InitError(strprintf("Invalid network upgrade (%s)", vDeploymentParams[0])); return InitError(strprintf("Invalid network upgrade (%s)", vDeploymentParams[0]));
} }
} }
// To make testing easier (this code path is active only for regtest), activate missing network versions,
// so for example, if a Python (RPC) test does:
// extra_args = [
// nuparams(BLOSSOM_BRANCH_ID, 205),
// nuparams(HEARTWOOD_BRANCH_ID, 205),
// nuparams(CANOPY_BRANCH_ID, 205),
// nuparams(NU5_BRANCH_ID, 210),
// ]
//
// This can be simplified to:
// extra_args = [
// nuparams(CANOPY_BRANCH_ID, 205),
// nuparams(NU5_BRANCH_ID, 210),
// ]
const auto& consensus = chainparams.GetConsensus();
int nActivationHeight = Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT;
for (auto i = Consensus::MAX_NETWORK_UPGRADES-1; i >= Consensus::BASE_SPROUT + 1; --i) {
if (consensus.vUpgrades[i].nActivationHeight == Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT) {
UpdateNetworkUpgradeParameters(Consensus::UpgradeIndex(i), nActivationHeight);
}
nActivationHeight = consensus.vUpgrades[i].nActivationHeight;
}
} }
if (mapArgs.count("-nurejectoldversions")) { if (mapArgs.count("-nurejectoldversions")) {

View File

@ -2019,27 +2019,31 @@ bool AcceptToMemoryPool(
bool GetTimestampIndex(unsigned int high, unsigned int low, bool fActiveOnly, bool GetTimestampIndex(unsigned int high, unsigned int low, bool fActiveOnly,
std::vector<std::pair<uint256, unsigned int> > &hashes) std::vector<std::pair<uint256, unsigned int> > &hashes)
{ {
if (!fTimestampIndex) if (!fTimestampIndex) {
return error("Timestamp index not enabled"); LogPrint("rpc", "Timestamp index not enabled");
return false;
if (!pblocktree->ReadTimestampIndex(high, low, fActiveOnly, hashes)) }
return error("Unable to get hashes for timestamps"); if (!pblocktree->ReadTimestampIndex(high, low, fActiveOnly, hashes)) {
LogPrint("rpc", "Unable to get hashes for timestamps");
return false;
}
return true; return true;
} }
bool GetSpentIndex(CSpentIndexKey &key, CSpentIndexValue &value) bool GetSpentIndex(CSpentIndexKey &key, CSpentIndexValue &value)
{ {
AssertLockHeld(cs_main); AssertLockHeld(cs_main);
if (!fSpentIndex) if (!fSpentIndex) {
return error("Spent index not enabled"); LogPrint("rpc", "Spent index not enabled");
return false;
}
if (mempool.getSpentIndex(key, value)) if (mempool.getSpentIndex(key, value))
return true; return true;
if (!pblocktree->ReadSpentIndex(key, value)) if (!pblocktree->ReadSpentIndex(key, value)) {
return error("Unable to get spent index information"); LogPrint("rpc", "Unable to get spent index information");
return false;
}
return true; return true;
} }
@ -2047,24 +2051,28 @@ bool GetAddressIndex(const uint160& addressHash, int type,
std::vector<CAddressIndexDbEntry>& addressIndex, std::vector<CAddressIndexDbEntry>& addressIndex,
int start, int end) int start, int end)
{ {
if (!fAddressIndex) if (!fAddressIndex) {
return error("address index not enabled"); LogPrint("rpc", "address index not enabled");
return false;
if (!pblocktree->ReadAddressIndex(addressHash, type, addressIndex, start, end)) }
return error("unable to get txids for address"); if (!pblocktree->ReadAddressIndex(addressHash, type, addressIndex, start, end)) {
LogPrint("rpc", "unable to get txids for address");
return false;
}
return true; return true;
} }
bool GetAddressUnspent(const uint160& addressHash, int type, bool GetAddressUnspent(const uint160& addressHash, int type,
std::vector<CAddressUnspentDbEntry>& unspentOutputs) std::vector<CAddressUnspentDbEntry>& unspentOutputs)
{ {
if (!fAddressIndex) if (!fAddressIndex) {
return error("address index not enabled"); LogPrint("rpc", "address index not enabled");
return false;
if (!pblocktree->ReadAddressUnspentIndex(addressHash, type, unspentOutputs)) }
return error("unable to get txids for address"); if (!pblocktree->ReadAddressUnspentIndex(addressHash, type, unspentOutputs)) {
LogPrint("rpc", "unable to get txids for address");
return false;
}
return true; return true;
} }
@ -5374,12 +5382,13 @@ bool CVerifyDB::VerifyDB(const CChainParams& chainparams, CCoinsView *coinsview,
// Flags used to permit skipping checks for efficiency // Flags used to permit skipping checks for efficiency
auto verifier = ProofVerifier::Disabled(); // No need to verify JoinSplits twice auto verifier = ProofVerifier::Disabled(); // No need to verify JoinSplits twice
bool fCheckTransactions = true; bool fCheckTransactions = true;
for (CBlockIndex* pindex = chainActive.Tip(); pindex && pindex->pprev; pindex = pindex->pprev)
{
// We may as well check Orchard authorizations if we are checking // We may as well check Orchard authorizations if we are checking
// transactions, since we can batch-validate them. // transactions, since we can batch-validate them.
auto orchardAuth = orchard::AuthValidator::Batch(); auto orchardAuth = orchard::AuthValidator::Batch();
for (CBlockIndex* pindex = chainActive.Tip(); pindex && pindex->pprev; pindex = pindex->pprev)
{
boost::this_thread::interruption_point(); boost::this_thread::interruption_point();
uiInterface.ShowProgress(_("Verifying blocks..."), std::max(1, std::min(99, (int)(((double)(chainActive.Height() - pindex->nHeight)) / (double)nCheckDepth * (nCheckLevel >= 4 ? 50 : 100))))); uiInterface.ShowProgress(_("Verifying blocks..."), std::max(1, std::min(99, (int)(((double)(chainActive.Height() - pindex->nHeight)) / (double)nCheckDepth * (nCheckLevel >= 4 ? 50 : 100)))));
if (pindex->nHeight < chainActive.Height()-nCheckDepth) if (pindex->nHeight < chainActive.Height()-nCheckDepth)
@ -5421,6 +5430,10 @@ bool CVerifyDB::VerifyDB(const CChainParams& chainparams, CCoinsView *coinsview,
} }
} }
if (!orchardAuth.Validate()) {
return error("VerifyDB(): Orchard batch validation failed for block at height %d", pindex->nHeight);
}
if (ShutdownRequested()) if (ShutdownRequested())
return true; return true;
} }

View File

@ -157,8 +157,8 @@ extern CCriticalSection cs_main;
extern CTxMemPool mempool; extern CTxMemPool mempool;
typedef boost::unordered_map<uint256, CBlockIndex*, BlockHasher> BlockMap; typedef boost::unordered_map<uint256, CBlockIndex*, BlockHasher> BlockMap;
extern BlockMap mapBlockIndex; extern BlockMap mapBlockIndex;
extern uint64_t nLastBlockTx; extern std::optional<uint64_t> last_block_num_txs;
extern uint64_t nLastBlockSize; extern std::optional<uint64_t> last_block_size;
extern const std::string strMessageMagic; extern const std::string strMessageMagic;
extern CWaitableCriticalSection csBestBlock; extern CWaitableCriticalSection csBestBlock;
extern CConditionVariable cvBlockChange; extern CConditionVariable cvBlockChange;

View File

@ -71,8 +71,8 @@ public:
} }
}; };
uint64_t nLastBlockTx = 0; std::optional<uint64_t> last_block_num_txs;
uint64_t nLastBlockSize = 0; std::optional<uint64_t> last_block_size;
// We want to sort transactions by priority and fee rate, so: // We want to sort transactions by priority and fee rate, so:
typedef boost::tuple<double, CFeeRate, const CTransaction*> TxPriority; typedef boost::tuple<double, CFeeRate, const CTransaction*> TxPriority;
@ -610,8 +610,8 @@ CBlockTemplate* CreateNewBlock(const CChainParams& chainparams, const MinerAddre
} }
} }
nLastBlockTx = nBlockTx; last_block_num_txs = nBlockTx;
nLastBlockSize = nBlockSize; last_block_size = nBlockSize;
LogPrintf("CreateNewBlock(): total size %u\n", nBlockSize); LogPrintf("CreateNewBlock(): total size %u\n", nBlockSize);
// Create coinbase tx // Create coinbase tx
@ -642,14 +642,38 @@ CBlockTemplate* CreateNewBlock(const CChainParams& chainparams, const MinerAddre
pblock->hashPrevBlock = pindexPrev->GetBlockHash(); pblock->hashPrevBlock = pindexPrev->GetBlockHash();
if (chainparams.GetConsensus().NetworkUpgradeActive(nHeight, Consensus::UPGRADE_NU5)) { if (chainparams.GetConsensus().NetworkUpgradeActive(nHeight, Consensus::UPGRADE_NU5)) {
// hashBlockCommitments depends on the block transactions, so we have to // hashBlockCommitments depends on the block transactions, so we have to
// update it whenever the coinbase transaction changes. Leave it unset here, // update it whenever the coinbase transaction changes.
// like hashMerkleRoot, and instead cache what we will need to calculate it. //
// - For the internal miner (either directly or via the `generate` RPC), this
// will occur in `IncrementExtraNonce()`, like for `hashMerkleRoot`.
// - For `getblocktemplate`, we have two sets of fields to handle:
// - The `defaultroots` fields, which contain both the default value (if
// nothing in the template is altered), and the roots that can be used to
// recalculate it (if some or all of the template is altered).
// - The legacy `finalsaplingroothash`, `lightclientroothash`, and
// `blockcommitmentshash` fields, which had the semantics of "place this
// value into the block header and things will work" (except for in
// v4.6.0 where they were accidentally set to always be the NU5 value).
//
// To accommodate all use cases, we calculate the `hashBlockCommitments`
// default value here (unlike `hashMerkleRoot`), and additionally cache the
// values necessary to recalculate it.
pblocktemplate->hashChainHistoryRoot = view.GetHistoryRoot(prevConsensusBranchId); pblocktemplate->hashChainHistoryRoot = view.GetHistoryRoot(prevConsensusBranchId);
pblocktemplate->hashAuthDataRoot = pblock->BuildAuthDataMerkleTree();
pblock->hashBlockCommitments = DeriveBlockCommitmentsHash(
pblocktemplate->hashChainHistoryRoot,
pblocktemplate->hashAuthDataRoot);
} else if (IsActivationHeight(nHeight, chainparams.GetConsensus(), Consensus::UPGRADE_HEARTWOOD)) { } else if (IsActivationHeight(nHeight, chainparams.GetConsensus(), Consensus::UPGRADE_HEARTWOOD)) {
pblocktemplate->hashChainHistoryRoot.SetNull();
pblocktemplate->hashAuthDataRoot.SetNull();
pblock->hashBlockCommitments.SetNull(); pblock->hashBlockCommitments.SetNull();
} else if (chainparams.GetConsensus().NetworkUpgradeActive(nHeight, Consensus::UPGRADE_HEARTWOOD)) { } else if (chainparams.GetConsensus().NetworkUpgradeActive(nHeight, Consensus::UPGRADE_HEARTWOOD)) {
pblock->hashBlockCommitments = view.GetHistoryRoot(prevConsensusBranchId); pblocktemplate->hashChainHistoryRoot = view.GetHistoryRoot(prevConsensusBranchId);
pblocktemplate->hashAuthDataRoot.SetNull();
pblock->hashBlockCommitments = pblocktemplate->hashChainHistoryRoot;
} else { } else {
pblocktemplate->hashChainHistoryRoot.SetNull();
pblocktemplate->hashAuthDataRoot.SetNull();
pblock->hashBlockCommitments = sapling_tree.root(); pblock->hashBlockCommitments = sapling_tree.root();
} }
UpdateTime(pblock, chainparams.GetConsensus(), pindexPrev); UpdateTime(pblock, chainparams.GetConsensus(), pindexPrev);
@ -727,9 +751,10 @@ void IncrementExtraNonce(
pblock->vtx[0] = txCoinbase; pblock->vtx[0] = txCoinbase;
pblock->hashMerkleRoot = pblock->BuildMerkleTree(); pblock->hashMerkleRoot = pblock->BuildMerkleTree();
if (consensusParams.NetworkUpgradeActive(nHeight, Consensus::UPGRADE_NU5)) { if (consensusParams.NetworkUpgradeActive(nHeight, Consensus::UPGRADE_NU5)) {
pblocktemplate->hashAuthDataRoot = pblock->BuildAuthDataMerkleTree();
pblock->hashBlockCommitments = DeriveBlockCommitmentsHash( pblock->hashBlockCommitments = DeriveBlockCommitmentsHash(
pblocktemplate->hashChainHistoryRoot, pblocktemplate->hashChainHistoryRoot,
pblock->BuildAuthDataMerkleTree()); pblocktemplate->hashAuthDataRoot);
} }
} }

View File

@ -110,6 +110,10 @@ struct CBlockTemplate
// Cached whenever we update `block`, so we can update hashBlockCommitments // Cached whenever we update `block`, so we can update hashBlockCommitments
// when we change the coinbase transaction. // when we change the coinbase transaction.
uint256 hashChainHistoryRoot; uint256 hashChainHistoryRoot;
// Cached whenever we update `block`, so we can return it from `getblocktemplate`
// (enabling the caller to update `hashBlockCommitments` when they change
// `hashPrevBlock`).
uint256 hashAuthDataRoot;
std::vector<CAmount> vTxFees; std::vector<CAmount> vTxFees;
std::vector<int64_t> vTxSigOps; std::vector<int64_t> vTxSigOps;
}; };

View File

@ -322,8 +322,8 @@ UniValue getmininginfo(const UniValue& params, bool fHelp)
"\nResult:\n" "\nResult:\n"
"{\n" "{\n"
" \"blocks\": nnn, (numeric) The current block\n" " \"blocks\": nnn, (numeric) The current block\n"
" \"currentblocksize\": nnn, (numeric) The last block size\n" " \"currentblocksize\": nnn, (numeric, optional) The block size of the last assembled block (only present if a block was ever assembled)\n"
" \"currentblocktx\": nnn, (numeric) The last block transaction\n" " \"currentblocktx\": nnn, (numeric, optional) The number of block non-coinbase transactions of the last assembled block (only present if a block was ever assembled)\n"
" \"difficulty\": xxx.xxxxx (numeric) The current difficulty\n" " \"difficulty\": xxx.xxxxx (numeric) The current difficulty\n"
" \"errors\": \"...\" (string) Current errors\n" " \"errors\": \"...\" (string) Current errors\n"
" \"generate\": true|false (boolean) If the generation is on or off (see getgenerate or setgenerate calls)\n" " \"generate\": true|false (boolean) If the generation is on or off (see getgenerate or setgenerate calls)\n"
@ -344,8 +344,8 @@ UniValue getmininginfo(const UniValue& params, bool fHelp)
UniValue obj(UniValue::VOBJ); UniValue obj(UniValue::VOBJ);
obj.pushKV("blocks", (int)chainActive.Height()); obj.pushKV("blocks", (int)chainActive.Height());
obj.pushKV("currentblocksize", (uint64_t)nLastBlockSize); if (last_block_size.has_value()) obj.pushKV("currentblocksize", last_block_size.value());
obj.pushKV("currentblocktx", (uint64_t)nLastBlockTx); if (last_block_num_txs.has_value()) obj.pushKV("currentblocktx", last_block_num_txs.value());
obj.pushKV("difficulty", (double)GetNetworkDifficulty()); obj.pushKV("difficulty", (double)GetNetworkDifficulty());
auto warnings = GetWarnings("statusbar"); auto warnings = GetWarnings("statusbar");
obj.pushKV("errors", warnings.first); obj.pushKV("errors", warnings.first);
@ -428,6 +428,11 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
"amounts, use 'getblocksubsidy HEIGHT' passing in the height returned\n" "amounts, use 'getblocksubsidy HEIGHT' passing in the height returned\n"
"by this API.\n" "by this API.\n"
"\nThe roots returned in 'defaultroots' are only valid if the block template is\n"
"used unmodified. If any part of the block template marked as 'mutable' in the\n"
"output is mutated, these roots may need to be recomputed. For more information\n"
"on the derivation process, see ZIP 244.\n"
"\nArguments:\n" "\nArguments:\n"
"1. \"jsonrequestobject\" (string, optional) A json object in the following spec\n" "1. \"jsonrequestobject\" (string, optional) A json object in the following spec\n"
" {\n" " {\n"
@ -444,9 +449,15 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
"{\n" "{\n"
" \"version\" : n, (numeric) The block version\n" " \"version\" : n, (numeric) The block version\n"
" \"previousblockhash\" : \"xxxx\", (string) The hash of current highest block\n" " \"previousblockhash\" : \"xxxx\", (string) The hash of current highest block\n"
" \"blockcommitmentshash\" : \"xxxx\", (string) The hash of the block commitments field in the block header\n" " \"blockcommitmentshash\" : \"xxxx\", (string) (DEPRECATED) The hash of the block commitments field in the block header\n"
" \"lightclientroothash\" : \"xxxx\", (string) (DEPRECATED) The hash of the light client root field in the block header\n" " \"lightclientroothash\" : \"xxxx\", (string) (DEPRECATED) The hash of the light client root field in the block header\n"
" \"finalsaplingroothash\" : \"xxxx\", (string) (DEPRECATED) The hash of the light client root field in the block header\n" " \"finalsaplingroothash\" : \"xxxx\", (string) (DEPRECATED) The hash of the light client root field in the block header\n"
" \"defaultroots\" : { (json object) root hashes that need to be recomputed if the transaction set is modified\n"
" \"merkleroot\" : \"xxxx\" (string) The hash of the transactions in the block header\n"
" \"chainhistoryroot\" : \"xxxx\" (string) The hash of the chain history\n"
" \"authdataroot\" : \"xxxx\" (string) (From NU5) The hash of the authorizing data merkel tree\n"
" \"blockcommitmentshash\" : \"xxxx\" (string) (From NU5) The hash of the block commitments field in the block header\n"
" }\n"
" \"transactions\" : [ (array) contents of non-coinbase transactions that should be included in the next block\n" " \"transactions\" : [ (array) contents of non-coinbase transactions that should be included in the next block\n"
" {\n" " {\n"
" \"data\" : \"xxxx\", (string) transaction data encoded in hexadecimal (byte-for-byte)\n" " \"data\" : \"xxxx\", (string) transaction data encoded in hexadecimal (byte-for-byte)\n"
@ -712,6 +723,7 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
entry.pushKV("data", EncodeHexTx(tx)); entry.pushKV("data", EncodeHexTx(tx));
entry.pushKV("hash", txHash.GetHex()); entry.pushKV("hash", txHash.GetHex());
entry.pushKV("authdigest", tx.GetAuthDigest().GetHex());
UniValue deps(UniValue::VARR); UniValue deps(UniValue::VARR);
for (const CTxIn &in : tx.vin) for (const CTxIn &in : tx.vin)
@ -757,11 +769,23 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
result.pushKV("capabilities", aCaps); result.pushKV("capabilities", aCaps);
result.pushKV("version", pblock->nVersion); result.pushKV("version", pblock->nVersion);
result.pushKV("previousblockhash", pblock->hashPrevBlock.GetHex()); result.pushKV("previousblockhash", pblock->hashPrevBlock.GetHex());
// The following 3 are deprecated; remove in a future release.
result.pushKV("blockcommitmentshash", pblock->hashBlockCommitments.GetHex()); result.pushKV("blockcommitmentshash", pblock->hashBlockCommitments.GetHex());
// Deprecated; remove in a future release.
result.pushKV("lightclientroothash", pblock->hashBlockCommitments.GetHex()); result.pushKV("lightclientroothash", pblock->hashBlockCommitments.GetHex());
// Deprecated; remove in a future release.
result.pushKV("finalsaplingroothash", pblock->hashBlockCommitments.GetHex()); result.pushKV("finalsaplingroothash", pblock->hashBlockCommitments.GetHex());
{
// These are items in the result object that are valid only if the
// block template returned by this RPC is used unmodified. Otherwise,
// these values must be recomputed.
UniValue defaults(UniValue::VOBJ);
defaults.pushKV("merkleroot", pblock->BuildMerkleTree().GetHex());
defaults.pushKV("chainhistoryroot", pblocktemplate->hashChainHistoryRoot.GetHex());
if (consensus.NetworkUpgradeActive(pindexPrev->nHeight+1, Consensus::UPGRADE_NU5)) {
defaults.pushKV("authdataroot", pblocktemplate->hashAuthDataRoot.GetHex());
defaults.pushKV("blockcommitmentshash", pblock->hashBlockCommitments.GetHex());
}
result.pushKV("defaultroots", defaults);
}
result.pushKV("transactions", transactions); result.pushKV("transactions", transactions);
if (coinbasetxn) { if (coinbasetxn) {
assert(txCoinbase.isObject()); assert(txCoinbase.isObject());

View File

@ -142,8 +142,8 @@ pub extern "C" fn zcash_address_parse_unified(
let ua: UnifiedAddressHelper = match addr.convert() { let ua: UnifiedAddressHelper = match addr.convert() {
Ok(ua) => ua, Ok(ua) => ua,
Err(e) => { Err(_) => {
tracing::error!("{}", e); // `KeyIO::DecodePaymentAddress` handles the rest of the address kinds.
return false; return false;
} }
}; };

View File

@ -21,7 +21,7 @@ DOWNLOAD_URL="https://download.z.cash/downloads"
IPFS_HASH="/ipfs/QmXRHVGLQBiKwvNq7c2vPxAKz1zRVmMYbmt7G5TQss7tY7" IPFS_HASH="/ipfs/QmXRHVGLQBiKwvNq7c2vPxAKz1zRVmMYbmt7G5TQss7tY7"
SHA256CMD="$(command -v sha256sum || echo shasum)" SHA256CMD="$(command -v sha256sum || echo shasum)"
SHA256ARGS="$(command -v sha256sum >/dev/null || echo \"-a 256\")" SHA256ARGS="$(command -v sha256sum >/dev/null || echo '-a 256')"
WGETCMD="$(command -v wget || echo '')" WGETCMD="$(command -v wget || echo '')"
IPFSCMD="$(command -v ipfs || echo '')" IPFSCMD="$(command -v ipfs || echo '')"