diff --git a/.gitignore b/.gitignore index 3a976fd49..7594c69c5 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ src/zcash-cli src/zcash-gtest src/zcash-tx src/test/test_bitcoin +zcutil/bin/ *zcashTest.pk *zcashTest.vk @@ -54,6 +55,7 @@ src/univalue/gen *.o-* .zcash *.a +*.lib *.pb.cc *.pb.h .vscode @@ -116,5 +118,6 @@ libzcashconsensus.pc contrib/debian/files contrib/debian/substvars +src/fuzzing/*/input src/fuzzing/*/output src/fuzz.cpp diff --git a/COPYING b/COPYING index f8fc375ea..139db196b 100644 --- a/COPYING +++ b/COPYING @@ -29,11 +29,6 @@ source code is not considered a derived work of these Autoconf macros or of the dependencies. For further details see 'contrib/debian/copyright'. -This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit (https://www.openssl.org/). This product includes cryptographic -software written by Eric Young (eay@cryptsoft.com). - - Although almost all of the Zcash code is licensed under "permissive" open source licenses, users and distributors should note that when built using the default build options, Zcash depends on Oracle Berkeley DB 6.2.x, which is licensed diff --git a/Cargo.lock b/Cargo.lock index a9334fd0e..3558f6d27 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,64 +2,76 @@ # It is not intended for manual editing. [[package]] name = "aes" -version = "0.3.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54eb1d8fe354e5fc611daf4f2ea97dd45a765f4f1e4512306ec183ae2e8f20c9" +checksum = "dd2bc6d3f370b5666245ff421e231cba4353df936e26986d2918e61a8fd6aef6" dependencies = [ "aes-soft", "aesni", - "block-cipher-trait", + "block-cipher", ] [[package]] name = "aes-soft" -version = "0.3.3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd7e7ae3f9a1fb5c03b389fc6bb9a51400d0c13053f0dca698c832bfd893a0d" +checksum = "63dd91889c49327ad7ef3b500fd1109dbd3c509a03db0d4a9ce413b79f575cb6" dependencies = [ - "block-cipher-trait", + "block-cipher", "byteorder", "opaque-debug", ] [[package]] name = "aesni" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f70a6b5f971e473091ab7cfb5ffac6cde81666c4556751d8d5620ead8abf100" +checksum = "0a6fe808308bb07d393e2ea47780043ec47683fcf19cf5efc8ca51c50cc8c68a" dependencies = [ - "block-cipher-trait", + "block-cipher", "opaque-debug", ] [[package]] -name = "arrayref" -version = "0.3.5" +name = "ansi_term" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee" - -[[package]] -name = "arrayvec" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8d73f9beda665eaa98ab9e4f7442bd4e7de6652587de55b2525e52e29c1b0ba" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ - "nodrop", + "winapi", ] [[package]] -name = "autocfg" -version = "0.1.6" +name = "arrayref" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" [[package]] name = "bellman" -version = "0.6.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2be536193834affcd8a6d362963e66dec8c6bca4d2009f5bac55ec9002776ff2" +checksum = "7089887635778eabf0038a166f586eee5413fb85c8fa6c9a754914f0f644f49f" dependencies = [ - "bit-vec", + "bitvec", "blake2s_simd", "byteorder", "crossbeam", @@ -70,29 +82,35 @@ dependencies = [ "num_cpus", "pairing", "rand_core", + "subtle", ] [[package]] name = "bigint" -version = "4.4.1" +version = "4.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebecac13b3c745150d7b6c3ea7572d372f09d627c2077e893bf26c5c7f70d282" +checksum = "c0e8c8a600052b52482eff2cf4d810e462fdff1f656ac1ecb6232132a1ed7def" dependencies = [ "byteorder", "crunchy", ] [[package]] -name = "bit-vec" -version = "0.4.4" +name = "bitvec" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b4ff8b16e6076c3e14220b39fbc1fabb6737522281a388998046859400895f" +checksum = "1d2838fdd79e8776dbe07a106c784b0f8dda571a21b2750a092cc4cbaa653c8e" +dependencies = [ + "funty", + "radium", + "wyz", +] [[package]] name = "blake2b_simd" -version = "0.5.8" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5850aeee1552f495dd0250014cf64b82b7c8879a89d83b33bbdace2cc4f63182" +checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" dependencies = [ "arrayref", "arrayvec", @@ -101,9 +119,9 @@ dependencies = [ [[package]] name = "blake2s_simd" -version = "0.5.8" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "979da0ce13c897d6be19e005ea77ac12b0fea0157aeeee7feb8c49f91386f0ea" +checksum = "9e461a7034e85b211a4acb57ee2e6730b32912b06c08cc242243c39fc21ae6a2" dependencies = [ "arrayref", "arrayvec", @@ -112,75 +130,108 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.7.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "block-padding", - "byte-tools", - "byteorder", "generic-array", ] [[package]] -name = "block-cipher-trait" -version = "0.6.2" +name = "block-cipher" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c924d49bd09e7c06003acda26cd9742e796e34282ec6c1189404dee0c1f4774" +checksum = "f337a3e6da609650eb74e02bc9fac7b735049f7623ab12f2e4c719316fcc7e80" dependencies = [ "generic-array", ] +[[package]] +name = "block-modes" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9b14fd8a4739e6548d4b6018696cf991dcf8c6effd9ef9eb33b29b8a650972" +dependencies = [ + "block-cipher", + "block-padding", +] + [[package]] name = "block-padding" -version = "0.1.4" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09" -dependencies = [ - "byte-tools", -] +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] -name = "byte-tools" +name = "bls12_381" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +checksum = "4caf0101205582491f772d60a6fcb6bcec19963e68209cb631851eeadb01421f" +dependencies = [ + "bitvec", + "ff", + "group", + "pairing", + "rand_core", + "subtle", +] [[package]] name = "byteorder" -version = "1.3.2" +version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" [[package]] -name = "c2-chacha" -version = "0.2.2" +name = "cc" +version = "1.0.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d64d04786e0f528460fc884753cf8dddcc466be308f6026f8e355c41a0e4101" -dependencies = [ - "lazy_static", - "ppv-lite86", -] +checksum = "f1770ced377336a88a67c473594ccc14eca6f4559217c34f64aac8f83d641b40" [[package]] name = "cfg-if" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] [[package]] name = "constant_time_eq" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "995a44c877f9212528ccc74b21a232f66ad69001e40ede5bcee2ac9ef2657120" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "cpuid-bool" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" [[package]] name = "crossbeam" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d818a4990769aac0c7ff1360e233ef3a41adcb009ebb2036bf6915eb0f6b23c" +checksum = "69323bff1fb41c635347b8ead484a5ca6c3f11914d784170b158d8449ab07f8e" dependencies = [ - "cfg-if", + "cfg-if 0.1.10", "crossbeam-channel", "crossbeam-deque", "crossbeam-epoch", @@ -190,53 +241,59 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.3.9" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa" +checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87" dependencies = [ "crossbeam-utils", + "maybe-uninit", ] [[package]] name = "crossbeam-deque" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71" +checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" dependencies = [ "crossbeam-epoch", "crossbeam-utils", + "maybe-uninit", ] [[package]] name = "crossbeam-epoch" -version = "0.7.2" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9" +checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" dependencies = [ - "arrayvec", - "cfg-if", + "autocfg", + "cfg-if 0.1.10", "crossbeam-utils", "lazy_static", + "maybe-uninit", "memoffset", "scopeguard", ] [[package]] name = "crossbeam-queue" -version = "0.1.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" +checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" dependencies = [ + "cfg-if 0.1.10", "crossbeam-utils", + "maybe-uninit", ] [[package]] name = "crossbeam-utils" -version = "0.6.6" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" dependencies = [ - "cfg-if", + "autocfg", + "cfg-if 0.1.10", "lazy_static", ] @@ -254,81 +311,114 @@ checksum = "2f855e87e75a4799e18b8529178adcde6fd4f97c1449ff4821e747ff728bb102" [[package]] name = "crypto_api_chachapoly" -version = "0.2.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b2ad7cab08fd71addba81df5077c49df208effdfb3118a1519f9cdeac5aaf2" +checksum = "d930b6a026ce9d358a17f9c9046c55d90b14bb847f36b6ebb6b19365d4feffb8" dependencies = [ "crypto_api", ] [[package]] -name = "digest" -version = "0.8.1" +name = "curve25519-dalek" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +checksum = "c8492de420e9e60bc9a1d66e2dbb91825390b738a388606600663fc529b4b307" +dependencies = [ + "byteorder", + "digest", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ "generic-array", ] [[package]] name = "directories" -version = "1.0.2" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d337a64190607d4fcca2cb78982c5dd57f4916e19696b48a575fa746b6cb0f" +checksum = "f8fed639d60b58d0f53498ab13d26f621fd77569cc6edb031f4cc36a2ad9da0f" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a" dependencies = [ "libc", + "redox_users", "winapi", ] [[package]] -name = "fake-simd" -version = "0.1.2" +name = "ed25519-zebra" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" - -[[package]] -name = "ff" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4b967a3ee6ae993f0094174257d404a5818f58be79d67a1aea1ec8996d28906" +checksum = "0a128b76af6dd4b427e34a6fd43dc78dbfe73672ec41ff615a2414c1a0ad0409" dependencies = [ - "byteorder", - "ff_derive", + "curve25519-dalek", + "hex", "rand_core", + "serde", + "sha2", + "thiserror", ] [[package]] -name = "ff_derive" -version = "0.6.0" +name = "equihash" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3776aaf60a45037a9c3cabdd8542b38693acaa3e241ff957181b72579d29feb" +checksum = "4127688f6177e3f57521881cb1cfd90d1228214f9dc43b8efe6f6c6948cd8280" dependencies = [ - "num-bigint", - "num-integer", - "num-traits", - "proc-macro2", - "quote", - "syn", + "blake2b_simd", + "byteorder", +] + +[[package]] +name = "ff" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01646e077d4ebda82b73f1bca002ea1e91561a77df2431a9e79729bcc31950ef" +dependencies = [ + "bitvec", + "rand_core", + "subtle", ] [[package]] name = "fpe" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21988a326139165b75e3196bc6962ca638e5fb0c95102fbf152a3743174b01e4" +checksum = "ef2196a22f6d98bbde79ae510eb4f397bd446cfbd6c26425e25ec81442a31bab" dependencies = [ "aes", - "byteorder", + "block-modes", "num-bigint", "num-integer", "num-traits", ] [[package]] -name = "futures" -version = "0.1.29" +name = "funty" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" +checksum = "0ba62103ce691c2fd80fbae2213dfdda9ce60804973ac6b6e97de818ea7f52c8" + +[[package]] +name = "futures" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7e4c2612746b0df8fed4ce0c69156021b704c9aefa360311c04e6e9e002eed" [[package]] name = "futures-cpupool" @@ -341,41 +431,85 @@ dependencies = [ ] [[package]] -name = "generic-array" -version = "0.12.3" +name = "generator" +version = "0.6.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" +checksum = "8cdc09201b2e8ca1b19290cf7e65de2246b8e91fb6874279722189c4de7b94dc" +dependencies = [ + "cc", + "libc", + "log", + "rustc_version", + "winapi", +] + +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" dependencies = [ "typenum", + "version_check", ] [[package]] name = "getrandom" -version = "0.1.12" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "473a1265acc8ff1e808cd0a1af8cee3c2ee5200916058a2ca113c29f2d903571" +checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" dependencies = [ - "cfg-if", + "cfg-if 0.1.10", "libc", - "wasi", + "wasi 0.9.0+wasi-snapshot-preview1", ] [[package]] name = "group" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f15be54742789e36f03307c8fdf0621201e1345e94f1387282024178b5e9ec8c" +checksum = "cc11f9f5fbf1943b48ae7c2bf6846e7d827a512d1be4f23af708f5ca5d01dde1" dependencies = [ + "byteorder", "ff", - "rand", - "rand_xorshift", + "rand_core", + "subtle", +] + +[[package]] +name = "hermit-abi" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +dependencies = [ + "libc", ] [[package]] name = "hex" -version = "0.3.2" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" +checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" + +[[package]] +name = "itoa" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" + +[[package]] +name = "jubjub" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "620638af3b80d23f4df0cae21e3cc9809ac8826767f345066f010bcea66a2c55" +dependencies = [ + "bitvec", + "bls12_381", + "ff", + "group", + "rand_core", + "subtle", +] [[package]] name = "lazy_static" @@ -385,9 +519,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.62" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba" +checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" [[package]] name = "librustzcash" @@ -396,11 +530,17 @@ dependencies = [ "bellman", "blake2b_simd", "blake2s_simd", - "ff", - "lazy_static", + "bls12_381", + "ed25519-zebra", + "group", + "jubjub", "libc", - "pairing", "rand_core", + "subtle", + "tracing", + "tracing-appender", + "tracing-core", + "tracing-subscriber", "zcash_history", "zcash_primitives", "zcash_proofs", @@ -408,33 +548,55 @@ dependencies = [ [[package]] name = "log" -version = "0.4.8" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" +checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" dependencies = [ - "cfg-if", + "cfg-if 0.1.10", ] +[[package]] +name = "loom" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0e8460f2f2121162705187214720353c517b97bdfb3494c0b1e33d83ebe4bed" +dependencies = [ + "cfg-if 0.1.10", + "generator", + "scoped-tls", + "serde", + "serde_json", +] + +[[package]] +name = "matchers" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + [[package]] name = "memoffset" -version = "0.5.1" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6075db033bbbb7ee5a0bbd3a3186bbae616f57fb001c485c7ff77955f8177f" +checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" dependencies = [ - "rustc_version", + "autocfg", ] -[[package]] -name = "nodrop" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" - [[package]] name = "num-bigint" -version = "0.2.3" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9c3f34cdd24f334cb265d9bf8bfa8a241920d026916785747a92f0e55541a1a" +checksum = "5e9a41747ae4633fce5adffb4d2e81ffc5e89593cb19917f8fb2cc5ff76507bf" dependencies = [ "autocfg", "num-integer", @@ -443,9 +605,9 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" dependencies = [ "autocfg", "num-traits", @@ -453,69 +615,80 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.8" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.10.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" dependencies = [ + "hermit-abi", "libc", ] [[package]] name = "opaque-debug" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "pairing" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8290dea210a712682cd65031dc2b34fd132cf2729def3df7ee08f0737ff5ed6" +checksum = "4f702cdbee9e0a6272452c20dec82465bc821116598b4eeb63e9a71a69dbf7fd" dependencies = [ - "byteorder", "ff", "group", - "rand_core", ] [[package]] -name = "ppv-lite86" -version = "0.2.5" +name = "pin-project-lite" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3cbf9f658cdb5000fcf6f362b8ea2ba154b9f146a61c7a20d647034c6b6561b" +checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" + +[[package]] +name = "ppv-lite86" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" [[package]] name = "proc-macro2" -version = "1.0.3" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e98a83a9f9b331f54b924e68a66acb1bb35cb01fb0a23645139967abefb697e8" +checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" dependencies = [ "unicode-xid", ] [[package]] name = "quote" -version = "1.0.2" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" +checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" dependencies = [ "proc-macro2", ] [[package]] -name = "rand" -version = "0.7.0" +name = "radium" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d47eab0e83d9693d40f825f86948aa16eff6750ead4bdffc4ab95b8b3a7f052c" +checksum = "64de9a0c5361e034f1aefc9f71a86871ec870e766fe31a009734a989b329286a" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ "getrandom", "libc", @@ -526,11 +699,11 @@ dependencies = [ [[package]] name = "rand_chacha" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" dependencies = [ - "c2-chacha", + "ppv-lite86", "rand_core", ] @@ -553,12 +726,57 @@ dependencies = [ ] [[package]] -name = "rand_xorshift" -version = "0.2.0" +name = "redox_syscall" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77d416b86801d23dde1aa643023b775c3a462efc0ed96443add11546cdf1dca8" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" + +[[package]] +name = "redox_users" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" dependencies = [ - "rand_core", + "getrandom", + "redox_syscall", + "rust-argon2", +] + +[[package]] +name = "regex" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" +dependencies = [ + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4" +dependencies = [ + "byteorder", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" + +[[package]] +name = "rust-argon2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dab61250775933275e84053ac235621dfb739556d5c54a2f2e9313b7cf43a19" +dependencies = [ + "base64", + "blake2b_simd", + "constant_time_eq", + "crossbeam-utils", ] [[package]] @@ -571,10 +789,22 @@ dependencies = [ ] [[package]] -name = "scopeguard" +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "scoped-tls" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" +checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "semver" @@ -592,22 +822,70 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] -name = "sha2" -version = "0.8.0" +name = "serde" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4d8bfd0e469f417657573d8451fb33d16cfe0989359b93baf3a1ffc639543d" +checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e7aab86fe2149bad8c507606bdb3f4ef5e7b2380eb92350f56122cca72a42a8" dependencies = [ "block-buffer", + "cfg-if 1.0.0", + "cpuid-bool", "digest", - "fake-simd", "opaque-debug", ] [[package]] -name = "syn" -version = "1.0.5" +name = "sharded-slab" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf" +checksum = "7b4921be914e16899a80adefb821f8ddb7974e3f1250223575a44ed994882127" +dependencies = [ + "lazy_static", + "loom", +] + +[[package]] +name = "subtle" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "343f3f510c2915908f155e94f17220b19ccfacf2a64a2a5d8004f2c3e311e7fd" + +[[package]] +name = "syn" +version = "1.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac" dependencies = [ "proc-macro2", "quote", @@ -615,28 +893,140 @@ dependencies = [ ] [[package]] -name = "typenum" -version = "1.11.2" +name = "thiserror" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" +checksum = "0e9ae34b84616eedaaf1e9dd6026dbe00dcafa92aa0c8077cb69df1fcfe5e53e" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ba20f23e85b10754cd195504aebf6a27e2e6cbe28c17778a0c930724628dd56" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "tracing" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0987850db3733619253fe60e17cb59b82d37c7e6c0236bb81e4d6b87c879f27" +dependencies = [ + "cfg-if 0.1.10", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-appender" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aa52d56cc0d79ab604e8a022a1cebc4de33cf09dc9933c94353bea2e00d6e88" +dependencies = [ + "chrono", + "crossbeam-channel", + "tracing-subscriber", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e0ccfc3378da0cce270c946b676a376943f5cd16aeba64568e7939806f4ada" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1fa8f0c8f4c594e4fc9debc1990deab13238077271ba84dd853d54902ee3401" +dependencies = [ + "ansi_term", + "chrono", + "lazy_static", + "matchers", + "regex", + "sharded-slab", + "thread_local", + "tracing", + "tracing-core", +] + +[[package]] +name = "typenum" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" [[package]] name = "unicode-xid" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" +checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" + +[[package]] +name = "version_check" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" [[package]] name = "wasi" -version = "0.7.0" +version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "winapi" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ "winapi-i686-pc-windows-gnu", "winapi-x86_64-pc-windows-gnu", @@ -654,6 +1044,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "wyz" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" + [[package]] name = "zcash_history" version = "0.2.0" @@ -667,38 +1063,52 @@ dependencies = [ [[package]] name = "zcash_primitives" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f33b9e4f3b4db97234fc79ea67b12f2d5778bde8f3eab6dbba52eb54c596585" +checksum = "45ab71b5765cb89a423e3a2f0de596dc8e581bf5bbf9d933bc8c22833886d13c" dependencies = [ "aes", + "bitvec", "blake2b_simd", "blake2s_simd", + "bls12_381", "byteorder", "crypto_api_chachapoly", + "equihash", "ff", "fpe", + "group", "hex", + "jubjub", "lazy_static", "log", - "pairing", "rand", "rand_core", "sha2", + "subtle", ] [[package]] name = "zcash_proofs" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2011f78f14d5121248d3b4f921434207b1d870fb3bf2efc7d784cae79b19bfbc" +checksum = "902845afb8636c4f88c0fd2a8bf338b645474488cb60676194fbf7713a3b9cc0" dependencies = [ "bellman", "blake2b_simd", + "bls12_381", "byteorder", "directories", "ff", - "pairing", + "group", + "jubjub", + "lazy_static", "rand_core", "zcash_primitives", ] + +[[package]] +name = "zeroize" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f33972566adbd2d3588b0491eb94b98b43695c4ef897903470ede4f3f5a28a" diff --git a/Cargo.toml b/Cargo.toml index 663af314f..3392ee916 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,17 +20,27 @@ path = "src/rust/src/rustzcash.rs" crate-type = ["staticlib"] [dependencies] -bellman = "0.6" +bellman = "0.8" blake2b_simd = "0.5" blake2s_simd = "0.5" -ff = "0.6" +bls12_381 = "0.3" +group = "0.8" libc = "0.2" -pairing = "0.16" -lazy_static = "1" +jubjub = "0.5" +subtle = "2.2" rand_core = "0.5.1" +tracing = "0.1" +tracing-core = "0.1" +tracing-appender = "0.1" zcash_history = "0.2" -zcash_primitives = "0.2" -zcash_proofs = "0.2" +zcash_primitives = "0.4" +zcash_proofs = "0.4" +ed25519-zebra = "2.0.0" + +[dependencies.tracing-subscriber] +version = "0.2" +default-features = false +features = ["ansi", "chrono", "env-filter"] [profile.release] lto = true diff --git a/Makefile.am b/Makefile.am index 7f32fc576..82c06c641 100644 --- a/Makefile.am +++ b/Makefile.am @@ -33,18 +33,8 @@ COVERAGE_INFO = baseline_filtered_combined.info baseline.info \ zcash-gtest.info zcash-gtest_filtered.info zcash-gtest_coverage.info dist-hook: - -$(MAKE) -C $(top_distdir)/src/leveldb clean - -$(MAKE) -C $(top_distdir)/src/secp256k1 distclean -$(GIT) archive --format=tar HEAD -- src/clientversion.cpp | $(AMTAR) -C $(top_distdir) -xf - -distcheck-hook: - $(MKDIR_P) $(top_distdir)/_build/src/leveldb - cp -rf $(top_srcdir)/src/leveldb/* $(top_distdir)/_build/src/leveldb/ - -$(MAKE) -C $(top_distdir)/_build/src/leveldb clean - -distcleancheck: - @: - $(if $(findstring src/,$(MAKECMDGOALS)),$(MAKECMDGOALS), none): FORCE $(MAKE) -C src $(patsubst src/%,%,$@) @@ -61,10 +51,10 @@ baseline.info: baseline_filtered.info: baseline.info $(LCOV) -r $< "/usr/include/*" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/*.h" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/boost/*" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/gmock/*" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/gtest/*" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/*.h" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/boost/*" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/gmock/*" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/gtest/*" \ "$(abs_builddir)/src/gtest/*" \ "$(abs_builddir)/src/test/*" \ "$(abs_builddir)/src/wallet/gtest/*" \ @@ -76,10 +66,10 @@ leveldb_baseline.info: baseline_filtered.info leveldb_baseline_filtered.info: leveldb_baseline.info $(LCOV) -r $< "/usr/include/*" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/*.h" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/boost/*" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/gmock/*" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/gtest/*" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/*.h" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/boost/*" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/gmock/*" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/gtest/*" \ "$(abs_builddir)/src/gtest/*" \ "$(abs_builddir)/src/test/*" \ "$(abs_builddir)/src/wallet/gtest/*" \ @@ -97,10 +87,10 @@ test_bitcoin.info: baseline_filtered_combined.info test_bitcoin_filtered.info: test_bitcoin.info $(LCOV) -r $< "/usr/include/*" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/*.h" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/boost/*" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/gmock/*" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/gtest/*" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/*.h" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/boost/*" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/gmock/*" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/gtest/*" \ "$(abs_builddir)/src/gtest/*" \ "$(abs_builddir)/src/test/*" \ "$(abs_builddir)/src/wallet/gtest/*" \ @@ -115,10 +105,10 @@ zcash-gtest.info: baseline_filtered_combined.info zcash-gtest_filtered.info: zcash-gtest.info $(LCOV) -r $< "/usr/include/*" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/*.h" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/boost/*" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/gmock/*" \ - "$(abs_builddir)/depends/x86_64-unknown-linux-gnu/include/gtest/*" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/*.h" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/boost/*" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/gmock/*" \ + "$(abs_builddir)/depends/x86_64-pc-linux-gnu/include/gtest/*" \ "$(abs_builddir)/src/gtest/*" \ "$(abs_builddir)/src/test/*" \ "$(abs_builddir)/src/wallet/gtest/*" \ @@ -169,3 +159,7 @@ DISTCHECK_CONFIGURE_FLAGS = --enable-man clean-local: rm -rf test_bitcoin.coverage/ zcash-gtest.coverage/ total.coverage/ rm -rf afl-temp + +distclean-local: + rm -f zcutil/bin/db_* + rmdir zcutil/bin 2>/dev/null || true diff --git a/README.md b/README.md index fefc37421..83e82fd9b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Zcash 3.0.0 +Zcash 4.1.1 =========== @@ -56,7 +56,9 @@ Build Zcash along with most dependencies from source by running the following co ./zcutil/build.sh -j$(nproc) ``` -Currently, Zcash is only officially supported on Debian and Ubuntu. +Currently, Zcash is only officially supported on Debian and Ubuntu. See the +[Debian / Ubuntu build](https://zcash.readthedocs.io/en/latest/rtd_pages/Debian-Ubuntu-build.html) +for detailed instructions. License ------- diff --git a/autogen.sh b/autogen.sh index a7f054752..69a20dc46 100755 --- a/autogen.sh +++ b/autogen.sh @@ -5,10 +5,11 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or https://www.opensource.org/licenses/mit-license.php . +export LC_ALL=C set -e srcdir="$(dirname $0)" cd "$srcdir" -if [ -z ${LIBTOOLIZE} ] && GLIBTOOLIZE="`which glibtoolize 2>/dev/null`"; then +if [ -z ${LIBTOOLIZE} ] && GLIBTOOLIZE="$(command -v glibtoolize)"; then LIBTOOLIZE="${GLIBTOOLIZE}" export LIBTOOLIZE fi diff --git a/build-aux/m4/ax_cxx_compile_stdcxx.m4 b/build-aux/m4/ax_cxx_compile_stdcxx.m4 index f147cee3b..43087b2e6 100644 --- a/build-aux/m4/ax_cxx_compile_stdcxx.m4 +++ b/build-aux/m4/ax_cxx_compile_stdcxx.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html +# https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html # =========================================================================== # # SYNOPSIS @@ -33,21 +33,23 @@ # Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov # Copyright (c) 2015 Paul Norman # Copyright (c) 2015 Moritz Klammler +# Copyright (c) 2016, 2018 Krzesimir Nowak +# Copyright (c) 2019 Enji Cooper # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. -#serial 4 +#serial 11 dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro dnl (serial version number 13). AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl - m4_if([$1], [11], [], - [$1], [14], [], - [$1], [17], [m4_fatal([support for C++17 not yet implemented in AX_CXX_COMPILE_STDCXX])], + m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"], + [$1], [14], [ax_cxx_compile_alternatives="14 1y"], + [$1], [17], [ax_cxx_compile_alternatives="17 1z"], [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl m4_if([$2], [], [], [$2], [ext], [], @@ -57,26 +59,13 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true], [$3], [optional], [ax_cxx_compile_cxx$1_required=false], [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])]) - m4_if([$4], [], [ax_cxx_compile_cxx$1_try_default=true], - [$4], [default], [ax_cxx_compile_cxx$1_try_default=true], - [$4], [nodefault], [ax_cxx_compile_cxx$1_try_default=false], - [m4_fatal([invalid fourth argument `$4' to AX_CXX_COMPILE_STDCXX])]) AC_LANG_PUSH([C++])dnl ac_success=no - m4_if([$4], [nodefault], [], [dnl - AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, - ax_cv_cxx_compile_cxx$1, - [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], - [ax_cv_cxx_compile_cxx$1=yes], - [ax_cv_cxx_compile_cxx$1=no])]) - if test x$ax_cv_cxx_compile_cxx$1 = xyes; then - ac_success=yes - fi]) - m4_if([$2], [noext], [], [dnl if test x$ac_success = xno; then - for switch in -std=gnu++$1 -std=gnu++0x; do + for alternative in ${ax_cxx_compile_alternatives}; do + switch="-std=gnu++${alternative}" cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, $cachevar, @@ -102,22 +91,27 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl dnl HP's aCC needs +std=c++11 according to: dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf dnl Cray's crayCC needs "-h std=c++11" - for switch in -std=c++$1 -std=c++0x +std=c++$1 "-h std=c++$1"; do - cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) - AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, - $cachevar, - [ac_save_CXX="$CXX" - CXX="$CXX $switch" - AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], - [eval $cachevar=yes], - [eval $cachevar=no]) - CXX="$ac_save_CXX"]) - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, + $cachevar, + [ac_save_CXX="$CXX" + CXX="$CXX $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXX="$ac_save_CXX"]) + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break fi - ac_success=yes + done + if test x$ac_success = xyes; then break fi done @@ -154,6 +148,11 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14], _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 ) +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_17 +) dnl Tests for new features in C++11 @@ -191,11 +190,13 @@ namespace cxx11 struct Base { + virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { + virtual ~Derived() override {} virtual void f() override {} }; @@ -524,7 +525,7 @@ namespace cxx14 } - namespace test_digit_seperators + namespace test_digit_separators { constexpr auto ten_million = 100'000'000; @@ -566,3 +567,385 @@ namespace cxx14 #endif // __cplusplus >= 201402L ]]) + + +dnl Tests for new features in C++17 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[ + +// If the compiler admits that it is not ready for C++17, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201703L + +#error "This is not a C++17 compiler" + +#else + +#include +#include +#include + +namespace cxx17 +{ + + namespace test_constexpr_lambdas + { + + constexpr int foo = [](){return 42;}(); + + } + + namespace test::nested_namespace::definitions + { + + } + + namespace test_fold_expression + { + + template + int multiply(Args... args) + { + return (args * ... * 1); + } + + template + bool all(Args... args) + { + return (args && ...); + } + + } + + namespace test_extended_static_assert + { + + static_assert (true); + + } + + namespace test_auto_brace_init_list + { + + auto foo = {5}; + auto bar {5}; + + static_assert(std::is_same, decltype(foo)>::value); + static_assert(std::is_same::value); + } + + namespace test_typename_in_template_template_parameter + { + + template typename X> struct D; + + } + + namespace test_fallthrough_nodiscard_maybe_unused_attributes + { + + int f1() + { + return 42; + } + + [[nodiscard]] int f2() + { + [[maybe_unused]] auto unused = f1(); + + switch (f1()) + { + case 17: + f1(); + [[fallthrough]]; + case 42: + f1(); + } + return f1(); + } + + } + + namespace test_extended_aggregate_initialization + { + + struct base1 + { + int b1, b2 = 42; + }; + + struct base2 + { + base2() { + b3 = 42; + } + int b3; + }; + + struct derived : base1, base2 + { + int d; + }; + + derived d1 {{1, 2}, {}, 4}; // full initialization + derived d2 {{}, {}, 4}; // value-initialized bases + + } + + namespace test_general_range_based_for_loop + { + + struct iter + { + int i; + + int& operator* () + { + return i; + } + + const int& operator* () const + { + return i; + } + + iter& operator++() + { + ++i; + return *this; + } + }; + + struct sentinel + { + int i; + }; + + bool operator== (const iter& i, const sentinel& s) + { + return i.i == s.i; + } + + bool operator!= (const iter& i, const sentinel& s) + { + return !(i == s); + } + + struct range + { + iter begin() const + { + return {0}; + } + + sentinel end() const + { + return {5}; + } + }; + + void f() + { + range r {}; + + for (auto i : r) + { + [[maybe_unused]] auto v = i; + } + } + + } + + namespace test_lambda_capture_asterisk_this_by_value + { + + struct t + { + int i; + int foo() + { + return [*this]() + { + return i; + }(); + } + }; + + } + + namespace test_enum_class_construction + { + + enum class byte : unsigned char + {}; + + byte foo {42}; + + } + + namespace test_constexpr_if + { + + template + int f () + { + if constexpr(cond) + { + return 13; + } + else + { + return 42; + } + } + + } + + namespace test_selection_statement_with_initializer + { + + int f() + { + return 13; + } + + int f2() + { + if (auto i = f(); i > 0) + { + return 3; + } + + switch (auto i = f(); i + 4) + { + case 17: + return 2; + + default: + return 1; + } + } + + } + + namespace test_template_argument_deduction_for_class_templates + { + + template + struct pair + { + pair (T1 p1, T2 p2) + : m1 {p1}, + m2 {p2} + {} + + T1 m1; + T2 m2; + }; + + void f() + { + [[maybe_unused]] auto p = pair{13, 42u}; + } + + } + + namespace test_non_type_auto_template_parameters + { + + template + struct B + {}; + + B<5> b1; + B<'a'> b2; + + } + + namespace test_structured_bindings + { + + int arr[2] = { 1, 2 }; + std::pair pr = { 1, 2 }; + + auto f1() -> int(&)[2] + { + return arr; + } + + auto f2() -> std::pair& + { + return pr; + } + + struct S + { + int x1 : 2; + volatile double y1; + }; + + S f3() + { + return {}; + } + + auto [ x1, y1 ] = f1(); + auto& [ xr1, yr1 ] = f1(); + auto [ x2, y2 ] = f2(); + auto& [ xr2, yr2 ] = f2(); + const auto [ x3, y3 ] = f3(); + + } + + namespace test_exception_spec_type_system + { + + struct Good {}; + struct Bad {}; + + void g1() noexcept; + void g2(); + + template + Bad + f(T*, T*); + + template + Good + f(T1*, T2*); + + static_assert (std::is_same_v); + + } + + namespace test_inline_variables + { + + template void f(T) + {} + + template inline T g(T) + { + return T{}; + } + + template<> inline void f<>(int) + {} + + template<> int g<>(int) + { + return 5; + } + + } + +} // namespace cxx17 + +#endif // __cplusplus < 201703L + +]]) diff --git a/code_of_conduct.md b/code_of_conduct.md index ceb5f506d..07e751de7 100644 --- a/code_of_conduct.md +++ b/code_of_conduct.md @@ -13,6 +13,10 @@ body size, race, ethnicity, age, religion, or nationality. Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery +* The use of language or imagery that originates with, or has been + adopted as a symbol or "dog-whistle" for, any of: right-wing extremism, + anti-Semitism, Islamophobia, white supremacism, eugenics, homophobia, or + transphobia (whether or not the use by itself falls into those categories) * Personal attacks * Trolling or insulting/derogatory comments * Public or private harassment diff --git a/configure.ac b/configure.ac index c2570d3cb..18cf11222 100644 --- a/configure.ac +++ b/configure.ac @@ -1,8 +1,8 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) AC_PREREQ([2.60]) -define(_CLIENT_VERSION_MAJOR, 3) -define(_CLIENT_VERSION_MINOR, 0) -define(_CLIENT_VERSION_REVISION, 0) +define(_CLIENT_VERSION_MAJOR, 4) +define(_CLIENT_VERSION_MINOR, 1) +define(_CLIENT_VERSION_REVISION, 1) define(_CLIENT_VERSION_BUILD, 50) define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50))) define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1))) @@ -61,8 +61,8 @@ case $host in lt_cv_deplibs_check_method="pass_all" ;; esac -dnl Require C++11 compiler (no GNU extensions) -AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory], [nodefault]) +dnl Require C++17 compiler (no GNU extensions) +AX_CXX_COMPILE_STDCXX([17], [noext], [mandatory]) dnl Check if -latomic is required for CHECK_ATOMIC @@ -105,12 +105,6 @@ AC_ARG_ENABLE([mining], [enable_mining=$enableval], [enable_mining=yes]) -AC_ARG_ENABLE([proton], - [AS_HELP_STRING([--enable-proton], - [enable Proton (AMQP messaging) (default is no)])], - [use_proton=$enableval], - [use_proton=no]) - AC_ARG_ENABLE(tests, AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]), [use_tests=$enableval], @@ -298,7 +292,36 @@ if test "x$CXXFLAGS_overridden" = "xno"; then AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]]) AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]]) AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]]) + + # Check for optional instruction set support. Enabling these does _not_ imply that all code will + # be compiled with them, rather that specific objects/libs may use them after checking for runtime + # compatibility. + AX_CHECK_COMPILE_FLAG([-msse4.2],[[SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]]) + fi + +TEMP_CXXFLAGS="$CXXFLAGS" +CXXFLAGS="$CXXFLAGS $SSE42_CXXFLAGS" +AC_MSG_CHECKING(for assembler crc32 support) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #if defined(_MSC_VER) + #include + #elif defined(__GNUC__) && defined(__SSE4_2__) + #include + #endif + ]],[[ + uint64_t l = 0; + l = _mm_crc32_u8(l, 0); + l = _mm_crc32_u32(l, 0); + l = _mm_crc32_u64(l, 0); + return l; + ]])], + [ AC_MSG_RESULT(yes); enable_hwcrc32=yes], + [ AC_MSG_RESULT(no)] +) +CXXFLAGS="$TEMP_CXXFLAGS" + CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS" AC_ARG_WITH([utils], @@ -362,7 +385,7 @@ case $host in fi CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB" - LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE" + LEVELDB_TARGET_FLAGS="-DOS_WINDOWS" if test "x$CXXFLAGS_overridden" = "xno"; then CXXFLAGS="$CXXFLAGS -w" fi @@ -384,7 +407,7 @@ case $host in ;; *darwin*) TARGET_OS=darwin - LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin" + LEVELDB_TARGET_FLAGS="-DOS_MACOSX" if test x$cross_compiling != xyes; then BUILD_OS=darwin AC_CHECK_PROG([PORT],port, port) @@ -406,12 +429,7 @@ case $host in dnl It's safe to add these paths even if the functionality is disabled by dnl the user (--without-wallet for example). - openssl_prefix=`$BREW --prefix openssl 2>/dev/null` bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null` - if test x$openssl_prefix != x; then - PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH" - export PKG_CONFIG_PATH - fi if test x$bdb_prefix != x; then CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include" LIBS="$LIBS -L$bdb_prefix/lib" @@ -441,9 +459,11 @@ case $host in OBJCXXFLAGS="$CXXFLAGS" ;; *linux*) - TARGET_OS=linux + LEVELDB_TARGET_FLAGS="-DOS_LINUX" ;; *) + OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'` + LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}" ;; esac @@ -666,31 +686,6 @@ if test x$enable_wallet != xno; then BITCOIN_FIND_BDB62 fi -dnl Check Qpid Proton headers and library exist -if test x$use_proton = xyes; then - AC_CHECK_HEADERS([proton/connection.hpp], - [], - [AC_MSG_WARN([Proton headers not found, disabling Proton support]) - use_proton=no]) - AC_CHECK_LIB([qpid-proton-cpp-static], [main], - [PROTON_LIBS="-lqpid-proton-cpp-static"], - [AC_MSG_WARN([Proton qpid-proton-cpp-static library not found, disabling Proton support]) - use_proton=no]) - AC_CHECK_LIB([qpid-proton-core-static], [main], - [PROTON_LIBS+=" -lqpid-proton-core-static"], - [AC_MSG_WARN([Proton qpid-proton-core-static library not found, disabling Proton support]) - use_proton=no]) - AC_CHECK_LIB([qpid-proton-static], [main], - [PROTON_LIBS+=" -lqpid-proton-static"], - [AC_MSG_WARN([Proton qpid-proton-static library not found, disabling Proton support]) - use_proton=no]) -fi -if test x$use_proton = xyes; then - AC_DEFINE(ENABLE_PROTON, 1, [Define to 1 to enable Proton functions]) -else - AC_DEFINE(ENABLE_PROTON, 0, [Define to 1 to enable Proton functions]) -fi - if test x$build_bitcoin_utils$build_bitcoind$use_tests = xnonono; then use_boost=no else @@ -756,8 +751,6 @@ if test x$use_pkgconfig = xyes; then m4_ifdef( [PKG_CHECK_MODULES], [ - PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)]) - PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)]) if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)]) if test x$TARGET_OS != xwindows; then @@ -777,14 +770,6 @@ if test x$use_pkgconfig = xyes; then ] ) else - # BUG: Fix this: - echo 'BUG: configure does not yet check for the following dependencies if pkg-config is not on the system: libcrypto++' - - AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing)) - AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing)) - - AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),) - AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing)) if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),) @@ -832,7 +817,7 @@ esac AX_CHECK_COMPILE_FLAG([-fno-strict-aliasing],[CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"]) AX_CHECK_COMPILE_FLAG([-Wno-builtin-declaration-mismatch],[CXXFLAGS="$CXXFLAGS -Wno-builtin-declaration-mismatch"],,[[$CXXFLAG_WERROR]]) -LIBZCASH_LIBS="$BOOST_SYSTEM_LIB -lcrypto -lsodium $RUST_LIBS" +LIBZCASH_LIBS="$BOOST_SYSTEM_LIB -lsodium $RUST_LIBS" AC_MSG_CHECKING([whether to build bitcoind]) AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes]) @@ -894,8 +879,6 @@ fi AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"]) -AM_CONDITIONAL([ENABLE_PROTON], [test "x$use_proton" = "xyes"]) - AC_MSG_CHECKING([whether to build test_bitcoin]) if test x$use_tests = xyes; then AC_MSG_RESULT([yes]) @@ -926,6 +909,7 @@ AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes]) AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes]) AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes]) AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes]) +AM_CONDITIONAL([ENABLE_HWCRC32],[test x$enable_hwcrc32 = xyes]) AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version]) AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version]) @@ -958,17 +942,15 @@ AC_SUBST(PIC_FLAGS) AC_SUBST(PIE_FLAGS) AC_SUBST(SANITIZER_CXXFLAGS) AC_SUBST(SANITIZER_LDFLAGS) +AC_SUBST(SSE42_CXXFLAGS) AC_SUBST(LIBTOOL_APP_LDFLAGS) AC_SUBST(BOOST_LIBS) AC_SUBST(TESTDEFS) AC_SUBST(LEVELDB_TARGET_FLAGS) -AC_SUBST(CRYPTO_LIBS) -AC_SUBST(SSL_LIBS) AC_SUBST(EVENT_LIBS) AC_SUBST(EVENT_PTHREADS_LIBS) AC_SUBST(ZMQ_LIBS) AC_SUBST(LIBZCASH_LIBS) -AC_SUBST(PROTON_LIBS) AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile src/test/buildenv.py]) AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh]) AC_CONFIG_FILES([qa/pull-tester/tests-config.sh],[chmod +x qa/pull-tester/tests-config.sh]) @@ -996,7 +978,7 @@ PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR" unset PKG_CONFIG_LIBDIR PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP" -ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery" +ac_configure_args="${ac_configure_args} --disable-shared --with-pic --enable-benchmark=no --with-bignum=no --enable-module-recovery" AC_CONFIG_SUBDIRS([src/secp256k1 src/univalue]) AC_OUTPUT @@ -1015,7 +997,6 @@ esac echo echo "Options used to compile and link:" echo " with wallet = $enable_wallet" -echo " with proton = $use_proton" echo " with zmq = $use_zmq" echo " with test = $use_tests" echo " sanitizers = $use_sanitizers" diff --git a/contrib/README.md b/contrib/README.md index 70378d100..4ec9fffa5 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -6,11 +6,6 @@ Wallet Tools ### [BitRPC](/contrib/bitrpc) ### Allows for sending of all standard Bitcoin commands via RPC rather than as command line args. -### [SpendFrom](/contrib/spendfrom) ### - -Use the raw transactions API to send coins received on a particular -address (or addresses). - Repository Tools --------------------- @@ -18,9 +13,6 @@ Repository Tools Specific tools for developers working on this repository. Contains the script `github-merge.sh` for merging github pull requests securely and signing them using GPG. -### [Verify-Commits](/contrib/verify-commits) ### -Tool to verify that every merge commit was signed by a developer using the above `github-merge.sh` script. - ### [Linearize](/contrib/linearize) ### Construct a linear, no-fork, best version of the blockchain. @@ -44,18 +36,8 @@ Gavin's notes on getting gitian builds up and running using KVM. ### [Gitian-downloader](/contrib/gitian-downloader) Various PGP files of core developers. -### [MacDeploy](/contrib/macdeploy) ### -Scripts and notes for Mac builds. - Test and Verify Tools --------------------- ### [TestGen](/contrib/testgen) ### -Utilities to generate test vectors for the data-driven Bitcoin tests. - -### [Test Patches](/contrib/test-patches) ### -These patches are applied when the automated pull-tester -tests each pull and when master is tested using jenkins. - -### [Verify SF Binaries](/contrib/verifysfbinaries) ### -This script attempts to download and verify the signature file SHA256SUMS.asc from SourceForge. +Utilities to generate test vectors for the data-driven Bitcoin tests. \ No newline at end of file diff --git a/contrib/amqp/amqp_sub.py b/contrib/amqp/amqp_sub.py deleted file mode 100644 index 707c5f466..000000000 --- a/contrib/amqp/amqp_sub.py +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env python2 -# Copyright (c) 2017-2019 The Zcash developers -# Distributed under the MIT software license, see the accompanying -# file COPYING or https://www.opensource.org/licenses/mit-license.php . - -# Requirements: -# pip install python-qpid-proton - -import binascii -from proton.handlers import MessagingHandler -from proton.reactor import Container - -port = 5672 - -class Server(MessagingHandler): - def __init__(self, url): - super(Server, self).__init__() - self.url = url - self.senders = {} - - def on_start(self, event): - print "Listening on:", self.url - self.container = event.container - self.acceptor = event.container.listen(self.url) - - def on_message(self, event): - m = event.message - topic = m.subject - body = m.body - sequence = str( m.properties['x-opt-sequence-number'] ) - if topic == "hashablock": - print '- HASH BLOCK ('+sequence+') -' - print binascii.hexlify(body) - elif topic == "hashtx": - print '- HASH TX ('+sequence+') -' - print binascii.hexlify(body) - elif topic == "rawblock": - print '- RAW BLOCK HEADER ('+sequence+') -' - print binascii.hexlify(body[:80]) - elif topic == "rawtx": - print '- RAW TX ('+sequence+') -' - print binascii.hexlify(body) - -try: - Container(Server("127.0.0.1:%i" % port)).run() -except KeyboardInterrupt: - pass - diff --git a/contrib/ci-builders/Dockerfile-bbworker.apt b/contrib/ci-builders/Dockerfile-bbworker.apt index 89e00ffb1..40ee4b8a4 100644 --- a/contrib/ci-builders/Dockerfile-bbworker.apt +++ b/contrib/ci-builders/Dockerfile-bbworker.apt @@ -1,6 +1,6 @@ ARG FROMBASEOS ARG FROMBASEOS_BUILD_TAG=latest -FROM electriccoinco/zcashd-build:$FROMBASEOS$FROMBASEOS_BUILD_TAG +FROM electriccoinco/zcashd-build-$FROMBASEOS$FROMBASEOS_BUILD_TAG ARG DUMBINIT_VERSION=1.2.2 RUN wget -O /usr/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v${DUMBINIT_VERSION}/dumb-init_${DUMBINIT_VERSION}_amd64 diff --git a/contrib/ci-builders/Dockerfile-bbworker.arch b/contrib/ci-builders/Dockerfile-bbworker.arch index 0f81aa386..c3e6ff9d7 100644 --- a/contrib/ci-builders/Dockerfile-bbworker.arch +++ b/contrib/ci-builders/Dockerfile-bbworker.arch @@ -1,17 +1,4 @@ -ARG ARCHLINUX_TAG=20200205 -FROM archlinux:$ARCHLINUX_TAG - -RUN pacman -Syyu --noconfirm \ - && pacman -S --noconfirm \ - base-devel \ - git \ - python3 \ - python-pip \ - wget - -RUN wget -O /usr/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64 -RUN chmod +x /usr/bin/dumb-init -RUN python -m pip install virtualenv +FROM electriccoinco/zcashd-build-arch # Buildbot user ARG BUILDBOT_USER=zcbbworker @@ -25,15 +12,11 @@ RUN useradd --home-dir /home/$BUILDBOT_USER \ USER $BUILDBOT_USER WORKDIR /home/$BUILDBOT_USER +ADD bbworker-requirements.txt requirements.txt RUN python -m venv venv \ && . venv/bin/activate \ - && python -m pip install \ - buildbot-worker \ - pyflakes \ - pyblake2 \ - pyzmq \ - requests \ - twisted[tls] + && python -m pip install wheel \ + && python -m pip install -r requirements.txt # Buildbot worker ARG BUILDBOT_WORKER_NAME=arch-docker @@ -46,7 +29,7 @@ RUN venv/bin/buildbot-worker create-worker $BUILDBOT_WORKER_NAME \ $BUILDBOT_MASTER_HOST:$BUILDBOT_MASTER_PORT \ $BUILDBOT_WORKER_NAME $BUILDBOT_WORKER_PASS \ && echo "OS: Centos 8" > $BUILDBOT_WORKER_NAME/info/host -ADD buildbot.tac $BUILDBOT_WORKER_NAME/buildbot.tac +ADD bbworker-buildbot.tac $BUILDBOT_WORKER_NAME/buildbot.tac WORKDIR /home/$BUILDBOT_USER/$BUILDBOT_WORKER_NAME CMD ["/usr/bin/dumb-init", "../venv/bin/twistd", "--pidfile=", "-ny", "buildbot.tac"] diff --git a/contrib/ci-builders/Dockerfile-bbworker.centos8 b/contrib/ci-builders/Dockerfile-bbworker.centos8 index 79adaf860..fbc02101b 100644 --- a/contrib/ci-builders/Dockerfile-bbworker.centos8 +++ b/contrib/ci-builders/Dockerfile-bbworker.centos8 @@ -1,16 +1,4 @@ -FROM centos:8 - -RUN yum update -y \ - && dnf group install -y "Development Tools" \ - && yum install -y \ - python3 \ - python3-devel \ - wget - -RUN wget -O /usr/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64 -RUN chmod +x /usr/bin/dumb-init -RUN alternatives --set python /usr/bin/python3 \ - && python3 -m pip install virtualenv +FROM electriccoinco/zcashd-build-centos8 # Buildbot user ARG BUILDBOT_USER=zcbbworker @@ -24,15 +12,11 @@ RUN useradd --home-dir /home/$BUILDBOT_USER \ USER $BUILDBOT_USER WORKDIR /home/$BUILDBOT_USER +ADD bbworker-requirements.txt requirements.txt RUN python3 -m venv venv \ && . venv/bin/activate \ - && python3 -m pip install \ - buildbot-worker \ - pyflakes \ - pyblake2 \ - pyzmq \ - requests \ - twisted[tls] + && python -m pip install wheel \ + && python -m pip install -r requirements.txt # Buildbot worker ARG BUILDBOT_WORKER_NAME=centos8-docker @@ -45,7 +29,7 @@ RUN venv/bin/buildbot-worker create-worker $BUILDBOT_WORKER_NAME \ $BUILDBOT_MASTER_HOST:$BUILDBOT_MASTER_PORT \ $BUILDBOT_WORKER_NAME $BUILDBOT_WORKER_PASS \ && echo "OS: Centos 8" > $BUILDBOT_WORKER_NAME/info/host -ADD buildbot.tac $BUILDBOT_WORKER_NAME/buildbot.tac +ADD bbworker-buildbot.tac $BUILDBOT_WORKER_NAME/buildbot.tac WORKDIR /home/$BUILDBOT_USER/$BUILDBOT_WORKER_NAME CMD ["/usr/bin/dumb-init", "../venv/bin/twistd", "--pidfile=", "-ny", "buildbot.tac"] diff --git a/contrib/ci-builders/Dockerfile-build-python.apt b/contrib/ci-builders/Dockerfile-build-python.apt new file mode 100644 index 000000000..8b73e9bb7 --- /dev/null +++ b/contrib/ci-builders/Dockerfile-build-python.apt @@ -0,0 +1,30 @@ +ARG FROMBASEOS +ARG FROMBASEOS_BUILD_TAG +FROM $FROMBASEOS:$FROMBASEOS_BUILD_TAG +ARG DEBIAN_FRONTEND=noninteractive + +ADD apt-package-list.txt /tmp/apt-package-list.txt +RUN apt-get update \ + && apt-get install -y $(tr "\n" " " < /tmp/apt-package-list.txt) \ + && update-alternatives --install /usr/bin/python python /usr/bin/python3 1 + +ARG PYTHONVERSION=3.7.5 +RUN apt-get install -y \ + build-essential \ + zlib1g-dev \ + libncurses5-dev \ + libgdbm-dev \ + libnss3-dev \ + libssl-dev \ + libreadline-dev \ + libffi-dev \ + curl +WORKDIR /tmp +RUN curl https://www.python.org/ftp/python/$PYTHONVERSION/Python-$PYTHONVERSION.tar.xz -o python.tar.xz \ + && tar -xf python.tar.xz \ + && cd Python-$PYTHONVERSION \ + && ./configure --enable-optimizations \ + && make -j 8 \ + && make altinstall \ + && update-alternatives --install /usr/bin/python python /usr/local/bin/python3.7 1 +RUN update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.7 1 \ No newline at end of file diff --git a/contrib/ci-builders/Dockerfile-build.arch b/contrib/ci-builders/Dockerfile-build.arch new file mode 100644 index 000000000..c75f5a190 --- /dev/null +++ b/contrib/ci-builders/Dockerfile-build.arch @@ -0,0 +1,23 @@ +ARG ARCHLINUX_TAG +FROM archlinux:$ARCHLINUX_TAG + +RUN pacman -Syyu --noconfirm \ + && pacman -S --noconfirm \ + base-devel \ + git \ + python3 \ + python-pip \ + wget + +RUN wget -O /usr/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64 +RUN chmod +x /usr/bin/dumb-init +RUN python -m pip install virtualenv +# AUR for libtinfo5 Source: https://dev.to/cloudx/testing-our-package-build-in-the-docker-world-34p0 +RUN useradd builduser -m \ + && passwd -d builduser \ + && cd /home/builduser \ + && git clone "https://aur.archlinux.org/ncurses5-compat-libs.git" ncurses5-compat-libs \ + && chown builduser -R ncurses5-compat-libs \ + && (printf 'builduser ALL=(ALL) ALL\n' | tee -a /etc/sudoers) \ + && sudo -u builduser bash -c 'gpg --keyserver pool.sks-keyservers.net --recv-keys 702353E0F7E48EDB' \ + && sudo -u builduser bash -c 'cd ~/ncurses5-compat-libs && makepkg -si --noconfirm' \ No newline at end of file diff --git a/contrib/ci-builders/Dockerfile-build.centos8 b/contrib/ci-builders/Dockerfile-build.centos8 new file mode 100644 index 000000000..b5fb3eb20 --- /dev/null +++ b/contrib/ci-builders/Dockerfile-build.centos8 @@ -0,0 +1,14 @@ +FROM centos:8 + +RUN yum update -y \ + && dnf group install -y "Development Tools" \ + && yum install -y \ + ncurses-compat-libs \ + python3 \ + python3-devel \ + wget + +RUN wget -O /usr/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64 +RUN chmod +x /usr/bin/dumb-init +RUN alternatives --set python /usr/bin/python3 \ + && python3 -m pip install virtualenv diff --git a/contrib/ci-builders/Dockerfile-gitian.apt b/contrib/ci-builders/Dockerfile-gitian.apt index 247262c17..5ca2a8757 100644 --- a/contrib/ci-builders/Dockerfile-gitian.apt +++ b/contrib/ci-builders/Dockerfile-gitian.apt @@ -1,6 +1,6 @@ ARG FROMBASEOS ARG FROMBASEOS_BUILD_TAG=latest -FROM electriccoinco/zcashd-build:$FROMBASEOS$FROMBASEOS_BUILD_TAG +FROM electriccoinco/zcashd-build-$FROMBASEOS$FROMBASEOS_BUILD_TAG RUN useradd -ms /bin/bash -U debian USER debian:debian diff --git a/contrib/ci-builders/apt-package-list.txt b/contrib/ci-builders/apt-package-list.txt index c1725b15a..c7813dfdc 100644 --- a/contrib/ci-builders/apt-package-list.txt +++ b/contrib/ci-builders/apt-package-list.txt @@ -3,11 +3,17 @@ bsdmainutils build-essential cmake curl +g++-aarch64-linux-gnu git lcov +libcap-dev libffi-dev +libtinfo5 libtool libssl-dev +libz-dev +libbz2-dev +mingw-w64 pkg-config python3 python3-dev diff --git a/contrib/ci-builders/bbworker-requirements.txt b/contrib/ci-builders/bbworker-requirements.txt index d5492aaa8..012268cae 100644 --- a/contrib/ci-builders/bbworker-requirements.txt +++ b/contrib/ci-builders/bbworker-requirements.txt @@ -1,7 +1,6 @@ buildbot-worker pyblake2 pyflakes -python-qpid-proton pyutil pyzmq requests diff --git a/contrib/ci-builders/docker-build.sh b/contrib/ci-builders/docker-build.sh old mode 100644 new mode 100755 index 6a37027af..58af6de30 --- a/contrib/ci-builders/docker-build.sh +++ b/contrib/ci-builders/docker-build.sh @@ -1,37 +1,52 @@ -# Debian -docker build . -f Dockerfile-build.apt --build-arg FROMBASEOS=debian --build-arg FROMBASEOS_BUILD_TAG=9 -t electriccoinco/zcashd-build:debian9 -docker build . -f Dockerfile-build.apt --build-arg FROMBASEOS=debian --build-arg FROMBASEOS_BUILD_TAG=10 -t electriccoinco/zcashd-build:debian10 +#!/usr/bin/env bash -docker push electriccoinco/zcashd-build:debian9 -docker push electriccoinco/zcashd-build:debian10 +export LC_ALL=C +set -exo pipefail -docker build . -f Dockerfile-gitian.apt --build-arg FROMBASEOS=debian --build-arg FROMBASEOS_BUILD_TAG=9 -t electriccoinco/zcashd-gitian:debian9 -docker build . -f Dockerfile-gitian.apt --build-arg FROMBASEOS=debian --build-arg FROMBASEOS_BUILD_TAG=10 -t electriccoinco/zcashd-gitian:debian10 +# Debian 9 +docker build . -f Dockerfile-build-python.apt --build-arg FROMBASEOS=debian --build-arg FROMBASEOS_BUILD_TAG=9 -t electriccoinco/zcashd-build-debian9 +docker push electriccoinco/zcashd-build-debian9 +docker build . -f Dockerfile-bbworker.apt --build-arg BASEOS=debian --build-arg FROMBASEOS=debian --build-arg FROMBASEOS_BUILD_TAG=9 -t electriccoinco/zcashd-bbworker-debian9 +docker push electriccoinco/zcashd-bbworker-debian9 -docker push electriccoinco/zcashd-gitian:debian9 -docker push electriccoinco/zcashd-gitian:debian10 +# Debian 10 +docker build . -f Dockerfile-build.apt --build-arg FROMBASEOS=debian --build-arg FROMBASEOS_BUILD_TAG=10 -t electriccoinco/zcashd-build-debian10 +docker push electriccoinco/zcashd-build-debian10 +docker build . -f Dockerfile-gitian.apt --build-arg FROMBASEOS=debian --build-arg FROMBASEOS_BUILD_TAG=10 -t electriccoinco/zcashd-gitian-debian10 +docker push electriccoinco/zcashd-gitian-debian10 +docker build . -f Dockerfile-bbworker.apt --build-arg BASEOS=debian --build-arg FROMBASEOS=debian --build-arg FROMBASEOS_BUILD_TAG=10 -t electriccoinco/zcashd-bbworker-debian10 +docker push electriccoinco/zcashd-bbworker-debian10 -docker build . -f Dockerfile-bbworker.apt --build-arg BASEOS=debian --build-arg FROMBASEOS=debian --build-arg FROMBASEOS_BUILD_TAG=9 -t electriccoinco/zcashd-bbworker:debian9 -docker build . -f Dockerfile-bbworker.apt --build-arg BASEOS=debian --build-arg FROMBASEOS=debian --build-arg FROMBASEOS_BUILD_TAG=10 -t electriccoinco/zcashd-bbworker:debian10 +# Ubuntu 16.04 +docker build . -f Dockerfile-build.apt --build-arg FROMBASEOS=ubuntu --build-arg FROMBASEOS_BUILD_TAG=16.04 -t electriccoinco/zcashd-build-ubuntu1604 +docker push electriccoinco/zcashd-build-ubuntu1604 +docker build . -f Dockerfile-gitian.apt --build-arg FROMBASEOS=ubuntu --build-arg FROMBASEOS_BUILD_TAG=1604 -t electriccoinco/zcashd-gitian-ubuntu1604 +docker push electriccoinco/zcashd-gitian-ubuntu1604 +docker build . -f Dockerfile-bbworker.apt --build-arg BASEOS=ubuntu --build-arg FROMBASEOS=ubuntu --build-arg FROMBASEOS_BUILD_TAG=1604 -t electriccoinco/zcashd-bbworker-ubuntu1604 +docker push electriccoinco/zcashd-bbworker-ubuntu1604 -docker push electriccoinco/zcashd-bbworker:debian9 -docker push electriccoinco/zcashd-bbworker:debian10 +# Ubuntu 18.04, 20.04 +docker build . -f Dockerfile-build.apt --build-arg FROMBASEOS=ubuntu --build-arg FROMBASEOS_BUILD_TAG=18.04 -t electriccoinco/zcashd-build-ubuntu1804 +docker build . -f Dockerfile-build.apt --build-arg FROMBASEOS=ubuntu --build-arg FROMBASEOS_BUILD_TAG=20.04 -t electriccoinco/zcashd-build-ubuntu2004 +docker push electriccoinco/zcashd-build-ubuntu1804 +docker push electriccoinco/zcashd-build-ubuntu2004 +docker build . -f Dockerfile-gitian.apt --build-arg FROMBASEOS=ubuntu --build-arg FROMBASEOS_BUILD_TAG=1804 -t electriccoinco/zcashd-gitian-ubuntu1804 +docker build . -f Dockerfile-gitian.apt --build-arg FROMBASEOS=ubuntu --build-arg FROMBASEOS_BUILD_TAG=2004 -t electriccoinco/zcashd-gitian-ubuntu2004 +docker push electriccoinco/zcashd-gitian-ubuntu1804 +docker push electriccoinco/zcashd-gitian-ubuntu2004 +docker build . -f Dockerfile-bbworker.apt --build-arg BASEOS=ubuntu --build-arg FROMBASEOS=ubuntu --build-arg FROMBASEOS_BUILD_TAG=1804 -t electriccoinco/zcashd-bbworker-ubuntu1804 +docker build . -f Dockerfile-bbworker.apt --build-arg BASEOS=ubuntu --build-arg FROMBASEOS=ubuntu --build-arg FROMBASEOS_BUILD_TAG=2004 -t electriccoinco/zcashd-bbworker-ubuntu2004 +docker push electriccoinco/zcashd-bbworker-ubuntu1804 +docker push electriccoinco/zcashd-bbworker-ubuntu2004 -# Ubuntu -docker build . -f Dockerfile-build.apt --build-arg FROMBASEOS=ubuntu --build-arg FROMBASEOS_BUILD_TAG=18.04 -t electriccoinco/zcashd-build:ubuntu18.04 -docker build . -f Dockerfile-build.apt --build-arg FROMBASEOS=ubuntu --build-arg FROMBASEOS_BUILD_TAG=20.04 -t electriccoinco/zcashd-build:ubuntu20.04 +# Centos8 +docker build . -f Dockerfile-build.centos8 -t electriccoinco/zcashd-build-centos8 +docker build . -f Dockerfile-bbworker.centos8 -t electriccoinco/zcashd-bbworker-centos8 +docker push electriccoinco/zcashd-build-centos8 +docker push electriccoinco/zcashd-bbworker-centos8 -docker push electriccoinco/zcashd-build:ubuntu18.04 -docker push electriccoinco/zcashd-build:ubuntu20.04 - -docker build . -f Dockerfile-gitian.apt --build-arg FROMBASEOS=ubuntu --build-arg FROMBASEOS_BUILD_TAG=18.04 -t electriccoinco/zcashd-gitian:ubuntu18.04 -docker build . -f Dockerfile-gitian.apt --build-arg FROMBASEOS=ubuntu --build-arg FROMBASEOS_BUILD_TAG=20.04 -t electriccoinco/zcashd-gitian:ubuntu20.04 - -docker push electriccoinco/zcashd-gitian:ubuntu18.04 -docker push electriccoinco/zcashd-gitian:ubuntu20.04 - -docker build . -f Dockerfile-bbworker.apt --build-arg BASEOS=ubuntu --build-arg FROMBASEOS=ubuntu --build-arg FROMBASEOS_BUILD_TAG=18.04 -t electriccoinco/zcashd-bbworker:ubuntu18.04 -docker build . -f Dockerfile-bbworker.apt --build-arg BASEOS=ubuntu --build-arg FROMBASEOS=ubuntu --build-arg FROMBASEOS_BUILD_TAG=20.04 -t electriccoinco/zcashd-bbworker:ubuntu20.04 - -docker push electriccoinco/zcashd-bbworker:ubuntu18.04 -docker push electriccoinco/zcashd-bbworker:ubuntu20.04 \ No newline at end of file +# Arch 20200908 +docker build . -f Dockerfile-build.arch --build-arg ARCHLINUX_TAG=20200908 -t electriccoinco/zcashd-build-arch +docker build . -f Dockerfile-bbworker.arch -t electriccoinco/zcashd-bbworker-arch +docker push electriccoinco/zcashd-build-arch +docker push electriccoinco/zcashd-bbworker-arch \ No newline at end of file diff --git a/contrib/debian/changelog b/contrib/debian/changelog index 4711b8e81..bf6d4705b 100644 --- a/contrib/debian/changelog +++ b/contrib/debian/changelog @@ -1,3 +1,51 @@ +zcash (4.1.1) stable; urgency=medium + + * 4.1.1 release. + + -- Electric Coin Company Mon, 16 Nov 2020 10:23:40 -0700 + +zcash (4.1.0) stable; urgency=medium + + * 4.1.0 release. + + -- Electric Coin Company Mon, 02 Nov 2020 13:40:54 -0700 + +zcash (4.1.0~rc1) stable; urgency=medium + + * 4.1.0-rc1 release. + + -- Electric Coin Company Wed, 28 Oct 2020 02:51:45 +0800 + +zcash (4.0.0) stable; urgency=medium + + * 4.0.0 release. + + -- Electric Coin Company Tue, 01 Sep 2020 13:31:19 -0600 + +zcash (4.0.0~rc1) stable; urgency=medium + + * 4.0.0-rc1 release. + + -- Electric Coin Company Wed, 26 Aug 2020 10:17:07 -0600 + +zcash (3.1.0) stable; urgency=medium + + * 3.1.0 release. + + -- Electric Coin Company Tue, 28 Jul 2020 07:02:06 +0800 + +zcash (3.1.0~rc2) stable; urgency=medium + + * 3.1.0-rc2 release. + + -- Electric Coin Company Wed, 15 Jul 2020 21:51:09 +0800 + +zcash (3.1.0~rc1) stable; urgency=medium + + * 3.1.0-rc1 release. + + -- Electric Coin Company Tue, 14 Jul 2020 14:38:11 +0800 + zcash (3.0.0) stable; urgency=medium * 3.0.0 release. diff --git a/contrib/debian/copyright b/contrib/debian/copyright index dfc6da637..6a142c3a1 100644 --- a/contrib/debian/copyright +++ b/contrib/debian/copyright @@ -54,6 +54,8 @@ Copyright: 2008, Benjamin Kosnik 2014-2015, Google Inc.; contributed by Alexey Sokolov 2015, Paul Norman 2015, Moritz Klammler + 2016, 2018 Krzesimir Nowak + 2019 Enji Cooper License: GNU-All-permissive-License Files: build-aux/m4/ax_gcc_func_attribute.m4 @@ -77,7 +79,9 @@ Copyright: 2008, Steven G. Johnson License: GPLv3-or-later-with-Autoconf-exception Files: qa/zcash/checksec.sh -Copyright: 2009-2011, Tobias Klein +Copyright: 2014-2015, Brian Davis + 2013, Robin David + 2009-2011, Tobias Klein License: BSD-3clause-Tobias-Klein Files: depends/sources/libsodium-*.tar.gz @@ -95,10 +99,6 @@ Copyright: 1990, 2016 Oracle and/or its affiliates; 2000-2005 INRIA, France Telecom License: BDB -Files: depends/sources/openssl-*.tar.gz -Copyright: 1998-2016 The OpenSSL Project and 1995-1998 Eric Young -License: OpenSSL+SSLeay - Files: depends/sources/zeromq-*.tar.gz Copyright: 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. @@ -116,14 +116,28 @@ Files: depends/sources/google*.tar.gz Copyright: 2008 Google Inc. License: BSD-3clause-Google -Files: depends/sources/qpid-proton-*.tar.gz -Copyright: 2012-2017 The Apache Software Foundation -License: Apache-Qpid-Proton-with-BSD-Subcomponents - Files: depends/sources/utfcpp-*.tar.gz Copyright: 2006 Nemanja Trifunovic License: Boost-Software-License-1.0 +Files: src/crypto/ctaes/* +Copyright: Copyright (c) 2016 Pieter Wuille +License: Expat + +Files: src/rust/include/tracing.h + src/rust/src/tracing_ffi.rs +Copyright: Copyright (c) 2020 Jack Grigg +License: Expat + +Files: src/rust/include/tracing/map.h +Copyright: Copyright (c) 2012 William Swanson +License: Expat-with-advertising-clause + +Files: src/secp256k1/* +Copyright: Copyright (c) 2013 Pieter Wuille +License: Expat +Comment: This copyright entry excludes files explicitly listed below. + Files: src/secp256k1/build-aux/m4/ax_jni_include_dir.m4 Copyright: 2008 Don Anderson License: GNU-All-permissive-License @@ -919,128 +933,6 @@ License: BDB * THE POSSIBILITY OF SUCH DAMAGE. */ -License: OpenSSL+SSLeay - The OpenSSL toolkit stays under a dual license, i.e. both the conditions of - the OpenSSL License and the original SSLeay license apply to the toolkit. - See below for the actual license texts. - . - OpenSSL License - --------------- - . - /* ==================================================================== - * Copyright (c) 1998-2016 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - . - Original SSLeay License - ----------------------- - . - /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - License: BSD-3clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -1195,222 +1087,6 @@ Comment: You should have received a copy of the GNU General Public License along with this program. If not, see . -License: Apache-Qpid-Proton-with-BSD-Subcomponents - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - . - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - . - 1. Definitions. - . - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - . - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - . - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - . - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - . - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - . - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - . - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - . - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - . - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - . - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - . - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - . - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - . - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - . - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - . - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - . - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - . - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - . - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - . - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - . - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - . - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - . - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - . - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - . - END OF TERMS AND CONDITIONS - . - APPENDIX: How to apply the Apache License to your work. - . - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - . - Copyright [yyyy] [name of copyright owner] - . - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - . - http://www.apache.org/licenses/LICENSE-2.0 - . - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - . - . - PROTON SUBCOMPONENTS: - . - Proton includes freegetopt with a separate BSD license. Your use - of the source code for freegetopt is subject to the terms and - conditions of its license in examples/include/pncompat/internal/LICENSE. - . - The setup scripts for the python bindings include files derived by - PyZMQ and are licensed with a separate Modified BSD license. Use of - the source code in these setup files are subject to the terms and - conditions in the license: - proton-c/bindings/python/setuputils/PYZMQ_LICENSE.BSD. - License: GNU-All-permissive-License Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice @@ -1446,3 +1122,28 @@ License: GPLv3-or-later-with-Autoconf-exception Comment: The "special exception" is extended to the versions of files covered by this license that are distributed with this software. + +License: Expat-with-advertising-clause + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the names of the authors or + their institutions shall not be used in advertising or otherwise to + promote the sale, use or other dealings in this Software without + prior written authorization from the authors. diff --git a/contrib/devtools/fix-copyright-headers.py b/contrib/devtools/fix-copyright-headers.py index 5e8495254..14b6de706 100755 --- a/contrib/devtools/fix-copyright-headers.py +++ b/contrib/devtools/fix-copyright-headers.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 ''' Run this script inside of src/ and it will look for all the files that were changed this year that still have the last year in the @@ -46,7 +46,7 @@ for extension in extensions: filePath = os.getcwd() + filePath modifiedTime = getLastGitModifiedDate(filePath) if len(modifiedTime) > 0 and str(year) in modifiedTime: - print n,"Last Git Modified: ", modifiedTime, " - ", filePath + print(n,"Last Git Modified: ", modifiedTime, " - ", filePath) os.popen(command % (last_year,year,filePath)) n = n + 1 diff --git a/contrib/devtools/gen-manpages.sh b/contrib/devtools/gen-manpages.sh index be54bc1dd..37b75ebf7 100755 --- a/contrib/devtools/gen-manpages.sh +++ b/contrib/devtools/gen-manpages.sh @@ -1,5 +1,6 @@ -#!/bin/sh +#!/usr/bin/env bash +export LC_ALL=C TOPDIR=${TOPDIR:-$(git rev-parse --show-toplevel)} SRCDIR=${SRCDIR:-$TOPDIR/src} MANDIR=${MANDIR:-$TOPDIR/doc/man} @@ -11,9 +12,9 @@ ZCASHTX=${ZCASHTX:-$SRCDIR/zcash-tx} [ ! -x $ZCASHD ] && echo "$ZCASHD not found or not executable." && exit 1 # The autodetected version git tag can screw up manpage output a little bit -ZECVERSTR=$($ZCASHCLI --version | head -n1 | awk '{ print $NF }') -ZECVER=$(echo $ZECVERSTR | awk -F- '{ OFS="-"; NF--; print $0; }') -ZECCOMMIT=$(echo $ZECVERSTR | awk -F- '{ print $NF }') +read -r -a ZECVERSTR <<< "$($ZCASHCLI --version | head -n1 | awk '{ print $NF }')" +read -r -a ZECVER <<< "$(echo $ZECVERSTR | awk -F- '{ OFS="-"; NF--; print $0; }')" +read -r -a ZECCOMMIT <<< "$(echo $ZECVERSTR | awk -F- '{ print $NF }')" # Create a footer file with copyright content. # This gets autodetected fine for zcashd if --version-string is not set, diff --git a/contrib/devtools/optimize-pngs.py b/contrib/devtools/optimize-pngs.py index 38aaa00f3..3cfd10d24 100755 --- a/contrib/devtools/optimize-pngs.py +++ b/contrib/devtools/optimize-pngs.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import os import sys @@ -44,30 +44,30 @@ for folder in folders: [pngcrush, "-brute", "-ow", "-rem", "gAMA", "-rem", "cHRM", "-rem", "iCCP", "-rem", "sRGB", "-rem", "alla", "-rem", "text", file_path], stderr=subprocess.STDOUT).rstrip('\n') except: - print "pngcrush is not installed, aborting..." + print("pngcrush is not installed, aborting...") sys.exit(0) #verify if "Not a PNG file" in subprocess.check_output([pngcrush, "-n", "-v", file_path], stderr=subprocess.STDOUT): - print "PNG file "+file+" is corrupted after crushing, check out pngcursh version" + print("PNG file "+file+" is corrupted after crushing, check out pngcursh version") sys.exit(1) fileMetaMap['sha256New'] = file_hash(file_path) fileMetaMap['contentHashPost'] = content_hash(file_path) if fileMetaMap['contentHashPre'] != fileMetaMap['contentHashPost']: - print "Image contents of PNG file "+file+" before and after crushing don't match" + print("Image contents of PNG file "+file+" before and after crushing don't match") sys.exit(1) fileMetaMap['psize'] = os.path.getsize(file_path) outputArray.append(fileMetaMap) print("done\n"), -print "summary:\n+++++++++++++++++" +print("summary:\n+++++++++++++++++") for fileDict in outputArray: oldHash = fileDict['sha256Old'] newHash = fileDict['sha256New'] totalSaveBytes += fileDict['osize'] - fileDict['psize'] - print fileDict['file']+"\n size diff from: "+str(fileDict['osize'])+" to: "+str(fileDict['psize'])+"\n old sha256: "+oldHash+"\n new sha256: "+newHash+"\n" + print(fileDict['file']+"\n size diff from: "+str(fileDict['osize'])+" to: "+str(fileDict['psize'])+"\n old sha256: "+oldHash+"\n new sha256: "+newHash+"\n") -print "completed. Total reduction: "+str(totalSaveBytes)+" bytes" +print("completed. Total reduction: "+str(totalSaveBytes)+" bytes") diff --git a/contrib/devtools/symbol-check.py b/contrib/devtools/symbol-check.py index 5b83ba97b..6bedea5ac 100755 --- a/contrib/devtools/symbol-check.py +++ b/contrib/devtools/symbol-check.py @@ -1,12 +1,12 @@ #!/usr/bin/env python # Copyright (c) 2014 Wladimir J. van der Laan -# Copyright (c) 2016-2019 The Zcash developers +# Copyright (c) 2016-2020 The Zcash developers # Distributed under the MIT software license, see the accompanying # file COPYING or https://www.opensource.org/licenses/mit-license.php . ''' A script to check that the (Linux) executables produced by gitian only contain -allowed gcc, glibc and libstdc++ version symbols. This makes sure they are -still compatible with the minimum supported Linux distribution versions. +allowed gcc and glibc version symbols. This makes sure they are still compatible +with the minimum supported Linux distribution versions. Example usage: @@ -18,55 +18,83 @@ import re import sys import os -# Debian 6.0.9 (Squeeze) has: +# Ubuntu 16.04 LTS (Xenial Xerus; End of Standard Support April 2021, EOL April 2022) has: # -# - g++ version 4.4.5 (https://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=names&keywords=g%2B%2B) -# - libc version 2.11.3 (https://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=names&keywords=libc6) -# - libstdc++ version 4.4.5 (https://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=names&keywords=libstdc%2B%2B6) +# - g++ version 4.5.3 (https://packages.ubuntu.com/search?suite=all&searchon=names&keywords=g%2B%2B) +# - libc6 version 2.23 (https://packages.ubuntu.com/search?suite=all&searchon=names&keywords=libc6) # -# Ubuntu 10.04.4 (Lucid Lynx) has: +# Debian 9 (Stretch; EOL 2020-07-06, LTS EOL in 2022) has: # -# - g++ version 4.4.3 (http://packages.ubuntu.com/search?keywords=g%2B%2B&searchon=names&suite=lucid§ion=all) -# - libc version 2.11.1 (http://packages.ubuntu.com/search?keywords=libc6&searchon=names&suite=lucid§ion=all) -# - libstdc++ version 4.4.3 (http://packages.ubuntu.com/search?suite=lucid§ion=all&arch=any&keywords=libstdc%2B%2B&searchon=names) +# - g++ version 6.3.0 (https://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=names&keywords=g%2B%2B) +# - libc6 version 2.24 (https://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=names&keywords=libc6) # -# Taking the minimum of these as our target. +# RedHat Enterprise Linux 8 (EOL: long and complicated) is based on Fedora 28 (EOL 2019-05-28) and uses the same base packages: # -# According to GNU ABI document (http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html) this corresponds to: -# GCC 4.4.0: GCC_4.4.0 -# GCC 4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3 -# (glibc) GLIBC_2_11 +# - g++ version 8.0.1 (https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/28/Everything/x86_64/os/Packages/g/ search for gcc-) +# - libc6 version 2.27 (https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/28/Everything/x86_64/os/Packages/g/ search for glibc) # +# CentOS 8 (Full update EOL May 2024, Maintenance EOL 2029-05-31) has: +# +# - g++ version 8.3.1 (http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/ search for libgcc) +# - libc6 version 2.28 (http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/ search for glibc) +# +# Fedora 31 (EOL ~November 2020) has: +# +# - g++ version 9.2.1 (https://dl.fedoraproject.org/pub/fedora/linux/releases/31/Everything/x86_64/os/Packages/g/ search for gcc-) +# - libc6 version 2.30 (https://dl.fedoraproject.org/pub/fedora/linux/releases/31/Everything/x86_64/os/Packages/g/ search for glibc) +# +# Arch is a rolling release, and as of October 2020 has packages for: +# +# - g++ version 8.4.0 / 9.3.0 / 10.2.0 (https://www.archlinux.org/packages/?q=gcc) +# - libc6 version 2.32 (https://www.archlinux.org/packages/?q=glibc) +# +# We take the minimum of these as our target. In practice, if we build on Xenial without +# upgrading GCC or libc, then we should get a binary that works for all these systems, and +# later ones. +# +# According to the GNU ABI document (http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html) this corresponds to: +# GCC 4.5.3: GCC_4.5.0, GLIBCXX_3.4.14, CXXABI_1.3.4 +# libc6: GLIBC_2_23 + +# We statically link libc++ and libc++abi in our builds. Set this to allow dynamic linking to libstdc++. +ALLOW_DYNAMIC_LIBSTDCXX = False + MAX_VERSIONS = { -'GCC': (4,4,0), -'CXXABI': (1,3,3), -'GLIBCXX': (3,4,13), -'GLIBC': (2,11) + 'GCC': (4,5,0), + 'GLIBC': (2,23), } +if ALLOW_DYNAMIC_LIBSTDCXX: + MAX_VERSIONS.update({ + 'GLIBCXX': (3,4,14), + 'CXXABI': (1,3,4), + }) + # See here for a description of _IO_stdin_used: # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=634261#109 # Ignore symbols that are exported as part of every executable IGNORE_EXPORTS = { -'_edata', '_end', '_init', '__bss_start', '_fini', '_IO_stdin_used' + '_edata', '_end', '_init', '__bss_start', '_fini', '_IO_stdin_used' } READELF_CMD = os.getenv('READELF', '/usr/bin/readelf') CPPFILT_CMD = os.getenv('CPPFILT', '/usr/bin/c++filt') + # Allowed NEEDED libraries ALLOWED_LIBRARIES = { -# zcashd -'libgcc_s.so.1', # GCC base support -'libc.so.6', # C library -'libstdc++.so.6', # C++ standard library -'libpthread.so.0', # threading -'libanl.so.1', # DNS resolve -'libm.so.6', # math library -'librt.so.1', # real-time (clock) -'libgomp.so.1', # OpenMP support library -'ld-linux-x86-64.so.2', # 64-bit dynamic linker -'ld-linux.so.2', # 32-bit dynamic linker -'libdl.so.2' # programming interface to dynamic linker + # zcashd + 'libgcc_s.so.1', # GCC support library (also used by clang) + 'libc.so.6', # C library + 'libpthread.so.0', # threading + 'libanl.so.1', # DNS resolver + 'libm.so.6', # math library + 'librt.so.1', # real-time (POSIX compatibility) + 'ld-linux-x86-64.so.2', # 64-bit dynamic linker + 'ld-linux.so.2', # 32-bit dynamic linker + 'libdl.so.2' # programming interface to dynamic linker } +if ALLOW_DYNAMIC_LIBSTDCXX: + ALLOWED_LIBRARIES.add('libstdc++.so.6') # C++ standard library + class CPPFilt(object): ''' @@ -138,6 +166,7 @@ if __name__ == '__main__': cppfilt = CPPFilt() retval = 0 for filename in sys.argv[1:]: + print("Checking %s..." % (filename,)) # Check imported symbols for sym,version in read_symbols(filename, True): if version and not check_version(MAX_VERSIONS, version): @@ -154,7 +183,12 @@ if __name__ == '__main__': if library_name not in ALLOWED_LIBRARIES: print('%s: NEEDED library %s is not allowed' % (filename, library_name)) retval = 1 + print() + + if retval == 0: + print("Everything OK") + else: + print("Note: this script is intended to ensure that Gitian builds meet our compatibility policy.") + print("The above warnings do not necessarily mean the program(s) will not work on your system.") exit(retval) - - diff --git a/contrib/devtools/test-security-check.py b/contrib/devtools/test-security-check.py index 324b7bcd8..fa12cdfb0 100755 --- a/contrib/devtools/test-security-check.py +++ b/contrib/devtools/test-security-check.py @@ -1,14 +1,16 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 +# Copyright (c) 2015-2017 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. ''' Test script for security-check.py ''' -from __future__ import division,print_function import subprocess import sys import unittest def write_testcode(filename): - with open(filename, 'w') as f: + with open(filename, 'w', encoding="utf8") as f: f.write(''' #include int main() @@ -20,7 +22,7 @@ def write_testcode(filename): def call_security_check(cc, source, executable, options): subprocess.check_call([cc,source,'-o',executable] + options) - p = subprocess.Popen(['./security-check.py',executable], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) + p = subprocess.Popen(['./security-check.py',executable], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, universal_newlines=True) (stdout, stderr) = p.communicate() return (p.returncode, stdout.rstrip()) diff --git a/contrib/docker/README.md b/contrib/docker/README.md index ce871f42e..912604517 100644 --- a/contrib/docker/README.md +++ b/contrib/docker/README.md @@ -65,10 +65,6 @@ This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING or . - -This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written -by Eric Young. ``` ### Persist data to the host diff --git a/contrib/docker/entrypoint.sh b/contrib/docker/entrypoint.sh index 984ec3e49..0dc336851 100755 --- a/contrib/docker/entrypoint.sh +++ b/contrib/docker/entrypoint.sh @@ -1,5 +1,6 @@ -#!/bin/bash +#!/usr/bin/env bash +export LC_ALL=C set -eo pipefail if [[ ${1} == "--version" ]];then diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml index 921cee24b..b8a8c7f2c 100644 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -1,9 +1,8 @@ --- -name: "zcash-3.0.0" +name: "zcash-4.1.1" enable_cache: true distro: "debian" suites: -- "jessie" - "stretch" architectures: - "amd64" @@ -32,13 +31,13 @@ remotes: files: [] script: | WRAP_DIR=$HOME/wrapped - HOSTS="x86_64-unknown-linux-gnu" - CONFIGFLAGS="--enable-glibc-back-compat --enable-reduce-exports --disable-bench --enable-hardening" + HOSTS="x86_64-linux-gnu" + CONFIGFLAGS="--enable-glibc-back-compat --enable-reduce-exports --disable-bench --enable-hardening --enable-werror" MAKEOPTS="V=1" FAKETIME_HOST_PROGS="" FAKETIME_PROGS="date ar ranlib nm strip objcopy" - HOST_CFLAGS="-fwrapv -fno-strict-aliasing -Werror -g" - HOST_CXXFLAGS="-fwrapv -fno-strict-aliasing -Werror -g" + HOST_CFLAGS="" + HOST_CXXFLAGS="" HOST_LDFLAGS=-static-libstdc++ export QT_RCC_TEST=0 @@ -55,7 +54,7 @@ script: | function create_global_faketime_wrappers { for prog in ${FAKETIME_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${prog} echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog} echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${prog} @@ -67,7 +66,7 @@ script: | function create_per-host_faketime_wrappers { for i in $HOSTS; do for prog in ${FAKETIME_HOST_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${i}-${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}-${prog} echo "REAL=\`which -a ${i}-${prog} | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog} echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${i}-${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog} @@ -87,7 +86,7 @@ script: | BASEPREFIX=`pwd`/depends # Build dependencies for each host for i in $HOSTS; do - NO_PROTON="x" make ${MAKEOPTS} -C ${BASEPREFIX} HOST="${i}" + make ${MAKEOPTS} -C ${BASEPREFIX} HOST="${i}" done # Faketime for binaries diff --git a/contrib/gitian-descriptors/gitian-osx-signer.yml b/contrib/gitian-descriptors/gitian-osx-signer.yml index b00eb2fb9..73a2f12f3 100644 --- a/contrib/gitian-descriptors/gitian-osx-signer.yml +++ b/contrib/gitian-descriptors/gitian-osx-signer.yml @@ -20,7 +20,7 @@ script: | # Create global faketime wrappers for prog in ${FAKETIME_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${prog} echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog} echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${prog} echo "export FAKETIME=\"${REFERENCE_DATETIME}\"" >> ${WRAP_DIR}/${prog} diff --git a/contrib/gitian-descriptors/gitian-osx.yml b/contrib/gitian-descriptors/gitian-osx.yml index 794a82af8..3b030bb1a 100644 --- a/contrib/gitian-descriptors/gitian-osx.yml +++ b/contrib/gitian-descriptors/gitian-osx.yml @@ -24,10 +24,10 @@ remotes: - "url": "https://github.com/bitcoin/bitcoin.git" "dir": "bitcoin" files: -- "MacOSX10.9.sdk.tar.gz" +- "Xcode-11.3.1-11C505-extracted-SDK-with-libcxx-headers.tar.gz" script: | WRAP_DIR=$HOME/wrapped - HOSTS="x86_64-apple-darwin11" + HOSTS="x86_64-apple-darwin16" CONFIGFLAGS="--enable-reduce-exports --disable-bench GENISOIMAGE=$WRAP_DIR/genisoimage" FAKETIME_HOST_PROGS="" FAKETIME_PROGS="ar ranlib date dmg genisoimage" @@ -48,7 +48,7 @@ script: | function create_global_faketime_wrappers { for prog in ${FAKETIME_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${prog} echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog} echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${prog} @@ -60,7 +60,7 @@ script: | function create_per-host_faketime_wrappers { for i in $HOSTS; do for prog in ${FAKETIME_HOST_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${i}-${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}-${prog} echo "REAL=\`which -a ${i}-${prog} | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog} echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${i}-${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog} @@ -80,7 +80,7 @@ script: | BASEPREFIX=`pwd`/depends mkdir -p ${BASEPREFIX}/SDKs - tar -C ${BASEPREFIX}/SDKs -xf ${BUILD_DIR}/MacOSX10.9.sdk.tar.gz + tar -C ${BASEPREFIX}/SDKs -xf ${BUILD_DIR}/Xcode-11.3.1-11C505-extracted-SDK-with-libcxx-headers.tar.gz # Build dependencies for each host for i in $HOSTS; do diff --git a/contrib/gitian-descriptors/gitian-win.yml b/contrib/gitian-descriptors/gitian-win.yml index 44fc4e356..cab6187fa 100644 --- a/contrib/gitian-descriptors/gitian-win.yml +++ b/contrib/gitian-descriptors/gitian-win.yml @@ -47,7 +47,7 @@ script: | function create_global_faketime_wrappers { for prog in ${FAKETIME_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${prog} echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog} echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${prog} @@ -59,7 +59,7 @@ script: | function create_per-host_faketime_wrappers { for i in $HOSTS; do for prog in ${FAKETIME_HOST_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${i}-${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}-${prog} echo "REAL=\`which -a ${i}-${prog} | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog} echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${i}-${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog} @@ -75,14 +75,14 @@ script: | for i in $HOSTS; do mkdir -p ${WRAP_DIR}/${i} for prog in collect2; do - echo '#!/bin/bash' > ${WRAP_DIR}/${i}/${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}/${prog} REAL=$(${i}-gcc -print-prog-name=${prog}) echo "export MALLOC_PERTURB_=255" >> ${WRAP_DIR}/${i}/${prog} echo "${REAL} \$@" >> $WRAP_DIR/${i}/${prog} chmod +x ${WRAP_DIR}/${i}/${prog} done for prog in gcc g++; do - echo '#!/bin/bash' > ${WRAP_DIR}/${i}-${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}-${prog} echo "REAL=\`which -a ${i}-${prog} | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog} echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${i}-${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog} diff --git a/contrib/init/README.md b/contrib/init/README.md deleted file mode 100644 index 0d19da303..000000000 --- a/contrib/init/README.md +++ /dev/null @@ -1,11 +0,0 @@ -Sample configuration files for: - -SystemD: bitcoind.service -Upstart: bitcoind.conf -OpenRC: bitcoind.openrc - bitcoind.openrcconf -CentOS: bitcoind.init - -have been made available to assist packagers in creating node packages here. - -See doc/init.md for more information. diff --git a/contrib/init/bitcoind.conf b/contrib/init/bitcoind.conf deleted file mode 100644 index f9554eecd..000000000 --- a/contrib/init/bitcoind.conf +++ /dev/null @@ -1,65 +0,0 @@ -description "Bitcoin Core Daemon" - -start on runlevel [2345] -stop on starting rc RUNLEVEL=[016] - -env BITCOIND_BIN="/usr/bin/bitcoind" -env BITCOIND_USER="bitcoin" -env BITCOIND_GROUP="bitcoin" -env BITCOIND_PIDDIR="/var/run/bitcoind" -# upstart can't handle variables constructed with other variables -env BITCOIND_PIDFILE="/var/run/bitcoind/bitcoind.pid" -env BITCOIND_CONFIGFILE="/etc/bitcoin/bitcoin.conf" -env BITCOIND_DATADIR="/var/lib/bitcoind" - -expect fork - -respawn -respawn limit 5 120 -kill timeout 60 - -pre-start script - # this will catch non-existent config files - # bitcoind will check and exit with this very warning, but it can do so - # long after forking, leaving upstart to think everything started fine. - # since this is a commonly encountered case on install, just check and - # warn here. - if ! grep -qs '^rpcpassword=' "$BITCOIND_CONFIGFILE" ; then - echo "ERROR: You must set a secure rpcpassword to run bitcoind." - echo "The setting must appear in $BITCOIND_CONFIGFILE" - echo - echo "This password is security critical to securing wallets " - echo "and must not be the same as the rpcuser setting." - echo "You can generate a suitable random password using the following" - echo "command from the shell:" - echo - echo "bash -c 'tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo'" - echo - echo "It is also recommended that you also set alertnotify so you are " - echo "notified of problems:" - echo - echo "ie: alertnotify=echo %%s | mail -s \"Bitcoin Alert\"" \ - "admin@foo.com" - echo - exit 1 - fi - - mkdir -p "$BITCOIND_PIDDIR" - chmod 0755 "$BITCOIND_PIDDIR" - chown $BITCOIND_USER:$BITCOIND_GROUP "$BITCOIND_PIDDIR" - chown $BITCOIND_USER:$BITCOIND_GROUP "$BITCOIND_CONFIGFILE" - chmod 0660 "$BITCOIND_CONFIGFILE" -end script - -exec start-stop-daemon \ - --start \ - --pidfile "$BITCOIND_PIDFILE" \ - --chuid $BITCOIND_USER:$BITCOIND_GROUP \ - --exec "$BITCOIND_BIN" \ - -- \ - -pid="$BITCOIND_PIDFILE" \ - -conf="$BITCOIND_CONFIGFILE" \ - -datadir="$BITCOIND_DATADIR" \ - -disablewallet \ - -daemon - diff --git a/contrib/init/bitcoind.init b/contrib/init/bitcoind.init deleted file mode 100644 index db5061874..000000000 --- a/contrib/init/bitcoind.init +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash -# -# bitcoind The bitcoin core server. -# -# -# chkconfig: 345 80 20 -# description: bitcoind -# processname: bitcoind -# - -# Source function library. -. /etc/init.d/functions - -# you can override defaults in /etc/sysconfig/bitcoind, see below -if [ -f /etc/sysconfig/bitcoind ]; then - . /etc/sysconfig/bitcoind -fi - -RETVAL=0 - -prog=bitcoind -# you can override the lockfile via BITCOIND_LOCKFILE in /etc/sysconfig/bitcoind -lockfile=${BITCOIND_LOCKFILE-/var/lock/subsys/bitcoind} - -# bitcoind defaults to /usr/bin/bitcoind, override with BITCOIND_BIN -bitcoind=${BITCOIND_BIN-/usr/bin/bitcoind} - -# bitcoind opts default to -disablewallet, override with BITCOIND_OPTS -bitcoind_opts=${BITCOIND_OPTS--disablewallet} - -start() { - echo -n $"Starting $prog: " - daemon $DAEMONOPTS $bitcoind $bitcoind_opts - RETVAL=$? - echo - [ $RETVAL -eq 0 ] && touch $lockfile - return $RETVAL -} - -stop() { - echo -n $"Stopping $prog: " - killproc $prog - RETVAL=$? - echo - [ $RETVAL -eq 0 ] && rm -f $lockfile - return $RETVAL -} - -case "$1" in - start) - start - ;; - stop) - stop - ;; - status) - status $prog - ;; - restart) - stop - start - ;; - *) - echo "Usage: service $prog {start|stop|status|restart}" - exit 1 - ;; -esac diff --git a/contrib/init/bitcoind.openrc b/contrib/init/bitcoind.openrc deleted file mode 100644 index eda1a96fb..000000000 --- a/contrib/init/bitcoind.openrc +++ /dev/null @@ -1,92 +0,0 @@ -#!/sbin/runscript - -# backward compatibility for existing gentoo layout -# -if [ -d "/var/lib/bitcoin/.bitcoin" ]; then - BITCOIND_DEFAULT_DATADIR="/var/lib/bitcoin/.bitcoin" -else - BITCOIND_DEFAULT_DATADIR="/var/lib/bitcoind" -fi - -BITCOIND_CONFIGFILE=${BITCOIND_CONFIGFILE:-/etc/bitcoin/bitcoin.conf} -BITCOIND_PIDDIR=${BITCOIND_PIDDIR:-/var/run/bitcoind} -BITCOIND_PIDFILE=${BITCOIND_PIDFILE:-${BITCOIND_PIDDIR}/bitcoind.pid} -BITCOIND_DATADIR=${BITCOIND_DATADIR:-${BITCOIND_DEFAULT_DATADIR}} -BITCOIND_USER=${BITCOIND_USER:-${BITCOIN_USER:-bitcoin}} -BITCOIND_GROUP=${BITCOIND_GROUP:-bitcoin} -BITCOIND_BIN=${BITCOIND_BIN:-/usr/bin/bitcoind} -BITCOIND_NICE=${BITCOIND_NICE:-${NICELEVEL:-0}} -BITCOIND_OPTS="${BITCOIND_OPTS:-${BITCOIN_OPTS}}" - -name="Bitcoin Core Daemon" -description="Bitcoin cryptocurrency P2P network daemon" - -command="/usr/bin/bitcoind" -command_args="-pid=\"${BITCOIND_PIDFILE}\" \ - -conf=\"${BITCOIND_CONFIGFILE}\" \ - -datadir=\"${BITCOIND_DATADIR}\" \ - -daemon \ - ${BITCOIND_OPTS}" - -required_files="${BITCOIND_CONFIGFILE}" -start_stop_daemon_args="-u ${BITCOIND_USER} \ - -N ${BITCOIND_NICE} -w 2000" -pidfile="${BITCOIND_PIDFILE}" - -# The retry schedule to use when stopping the daemon. Could be either -# a timeout in seconds or multiple signal/timeout pairs (like -# "SIGKILL/180 SIGTERM/300") -retry="${BITCOIND_SIGTERM_TIMEOUT}" - -depend() { - need localmount net -} - -# verify -# 1) that the datadir exists and is writable (or create it) -# 2) that a directory for the pid exists and is writable -# 3) ownership and permissions on the config file -start_pre() { - checkpath \ - -d \ - --mode 0750 \ - --owner "${BITCOIND_USER}:${BITCOIND_GROUP}" \ - "${BITCOIND_DATADIR}" - - checkpath \ - -d \ - --mode 0755 \ - --owner "${BITCOIND_USER}:${BITCOIND_GROUP}" \ - "${BITCOIND_PIDDIR}" - - checkpath -f \ - -o ${BITCOIND_USER}:${BITCOIND_GROUP} \ - -m 0660 \ - ${BITCOIND_CONFIGFILE} - - checkconfig || return 1 -} - -checkconfig() -{ - if ! grep -qs '^rpcpassword=' "${BITCOIND_CONFIGFILE}" ; then - eerror "" - eerror "ERROR: You must set a secure rpcpassword to run bitcoind." - eerror "The setting must appear in ${BITCOIND_CONFIGFILE}" - eerror "" - eerror "This password is security critical to securing wallets " - eerror "and must not be the same as the rpcuser setting." - eerror "You can generate a suitable random password using the following" - eerror "command from the shell:" - eerror "" - eerror "bash -c 'tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo'" - eerror "" - eerror "It is also recommended that you also set alertnotify so you are " - eerror "notified of problems:" - eerror "" - eerror "ie: alertnotify=echo %%s | mail -s \"Bitcoin Alert\"" \ - "admin@foo.com" - eerror "" - return 1 - fi -} diff --git a/contrib/init/bitcoind.openrcconf b/contrib/init/bitcoind.openrcconf deleted file mode 100644 index 0cbff6d30..000000000 --- a/contrib/init/bitcoind.openrcconf +++ /dev/null @@ -1,33 +0,0 @@ -# /etc/conf.d/bitcoind: config file for /etc/init.d/bitcoind - -# Config file location -#BITCOIND_CONFIGFILE="/etc/bitcoin/bitcoin.conf" - -# What directory to write pidfile to? (created and owned by $BITCOIND_USER) -#BITCOIND_PIDDIR="/var/run/bitcoind" - -# What filename to give the pidfile -#BITCOIND_PIDFILE="${BITCOIND_PIDDIR}/bitcoind.pid" - -# Where to write bitcoind data (be mindful that the blockchain is large) -#BITCOIND_DATADIR="/var/lib/bitcoind" - -# User and group to own bitcoind process -#BITCOIND_USER="bitcoin" -#BITCOIND_GROUP="bitcoin" - -# Path to bitcoind executable -#BITCOIND_BIN="/usr/bin/bitcoind" - -# Nice value to run bitcoind under -#BITCOIND_NICE=0 - -# Additional options (avoid -conf and -datadir, use flags above) -BITCOIND_OPTS="-disablewallet" - -# The timeout in seconds OpenRC will wait for bitcoind to terminate -# after a SIGTERM has been raised. -# Note that this will be mapped as argument to start-stop-daemon's -# '--retry' option, which means you can specify a retry schedule -# here. For more information see man 8 start-stop-daemon. -BITCOIND_SIGTERM_TIMEOUT=60 diff --git a/contrib/init/bitcoind.service b/contrib/init/bitcoind.service deleted file mode 100644 index 9132957c3..000000000 --- a/contrib/init/bitcoind.service +++ /dev/null @@ -1,22 +0,0 @@ -[Unit] -Description=Bitcoin's distributed currency daemon -After=network.target - -[Service] -User=bitcoin -Group=bitcoin - -Type=forking -PIDFile=/var/lib/bitcoind/bitcoind.pid -ExecStart=/usr/bin/bitcoind -daemon -pid=/var/lib/bitcoind/bitcoind.pid \ --conf=/etc/bitcoin/bitcoin.conf -datadir=/var/lib/bitcoind -disablewallet - -Restart=always -PrivateTmp=true -TimeoutStopSec=60s -TimeoutStartSec=2s -StartLimitInterval=120s -StartLimitBurst=5 - -[Install] -WantedBy=multi-user.target diff --git a/contrib/linearize/linearize-data.py b/contrib/linearize/linearize-data.py index 7bc7eb023..bd2fd3b5d 100755 --- a/contrib/linearize/linearize-data.py +++ b/contrib/linearize/linearize-data.py @@ -71,7 +71,7 @@ def get_blk_dt(blk_hdr): def get_block_hashes(settings): blkindex = [] - f = open(settings['hashlist'], "r") + f = open(settings['hashlist'], "r", encoding="utf8") for line in f: line = line.rstrip() blkindex.append(line) @@ -251,7 +251,7 @@ if __name__ == '__main__': print("Usage: linearize-data.py CONFIG-FILE") sys.exit(1) - f = open(sys.argv[1]) + f = open(sys.argv[1], encoding="utf8") for line in f: # skip comment lines m = re.search('^\s*#', line) diff --git a/contrib/linearize/linearize-hashes.py b/contrib/linearize/linearize-hashes.py index 68da06188..d8229f53e 100755 --- a/contrib/linearize/linearize-hashes.py +++ b/contrib/linearize/linearize-hashes.py @@ -79,7 +79,7 @@ if __name__ == '__main__': print("Usage: linearize-hashes.py CONFIG-FILE") sys.exit(1) - f = open(sys.argv[1]) + f = open(sys.argv[1], encoding="utf8") for line in f: # skip comment lines m = re.search('^\s*#', line) diff --git a/contrib/macdeploy/Base.lproj/InfoPlist.strings b/contrib/macdeploy/Base.lproj/InfoPlist.strings deleted file mode 100644 index b259ea141..000000000 --- a/contrib/macdeploy/Base.lproj/InfoPlist.strings +++ /dev/null @@ -1 +0,0 @@ -{ CFBundleDisplayName = "Bitcoin Core"; CFBundleName = "Bitcoin Core"; } diff --git a/contrib/macdeploy/DS_Store b/contrib/macdeploy/DS_Store deleted file mode 100644 index db9d16f1d..000000000 Binary files a/contrib/macdeploy/DS_Store and /dev/null differ diff --git a/contrib/macdeploy/LICENSE b/contrib/macdeploy/LICENSE deleted file mode 100644 index 94a9ed024..000000000 --- a/contrib/macdeploy/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/contrib/macdeploy/README.md b/contrib/macdeploy/README.md index 6163734e6..ab670c6e4 100644 --- a/contrib/macdeploy/README.md +++ b/contrib/macdeploy/README.md @@ -1,15 +1,123 @@ -### MacDeploy ### +# MacOS Deployment -For Snow Leopard (which uses [Python 2.6](http://www.python.org/download/releases/2.6/)), you will need the param_parser package: - - sudo easy_install argparse +## SDK Extraction -This script should not be run manually, instead, after building as usual: +### Step 1: Obtaining `Xcode.app` - make deploy +Our current macOS SDK +(`Xcode-11.3.1-11C505-extracted-SDK-with-libcxx-headers.tar.gz`) can be +extracted from +[Xcode_11.3.1.xip](https://download.developer.apple.com/Developer_Tools/Xcode_11.3.1/Xcode_11.3.1.xip). +In order to download this, you may need to first +[log in with an Apple ID here](https://developer.apple.com/download/more/). -During the process, the disk image window will pop up briefly where the fancy -settings are applied. This is normal, please do not interfere. +The file is ~7.8 GB. -When finished, it will produce `Bitcoin-Core.dmg`. +After Xcode version 7.x, Apple started shipping the `Xcode.app` in a `.xip` +archive. This makes the SDK less-trivial to extract on non-macOS machines. One +approach (tested on Debian Buster) is outlined below: +```bash +# Install/clone tools needed for extracting Xcode.app +apt install cpio +git clone https://github.com/bitcoin-core/apple-sdk-tools.git + +# Unpack Xcode_11.3.1.xip and place the resulting Xcode.app in your current +# working directory +python3 apple-sdk-tools/extract_xcode.py -f Xcode_11.3.1.xip | cpio -d -i +``` + +On macOS the process is more straightforward: + +```bash +xip -x Xcode_11.3.1.xip +``` + +The extracted files require ~17 GB of disk space. + +### Step 2: Generating `Xcode-11.3.1-11C505-extracted-SDK-with-libcxx-headers.tar.gz` from `Xcode.app` + +To generate `Xcode-11.3.1-11C505-extracted-SDK-with-libcxx-headers.tar.gz`, run +the script [`gen-sdk`](./gen-sdk) with the path to `Xcode.app` (extracted in the +previous stage) as the first argument. + +```bash +# Generate a Xcode-11.3.1-11C505-extracted-SDK-with-libcxx-headers.tar.gz from +# the supplied Xcode.app +./contrib/macdeploy/gen-sdk '/path/to/Xcode.app' +``` + +## Deterministic macOS DMG Notes +Working macOS DMGs are created in Linux by combining a recent `clang`, the Apple +`binutils` (`ld`, `ar`, etc) and DMG authoring tools. + +Apple uses `clang` extensively for development and has upstreamed the necessary +functionality so that a vanilla clang can take advantage. It supports the use of `-F`, +`-target`, `-mmacosx-version-min`, and `--sysroot`, which are all necessary when +building for macOS. + +Apple's version of `binutils` (called `cctools`) contains lots of functionality missing in the +FSF's `binutils`. In addition to extra linker options for frameworks and sysroots, several +other tools are needed as well such as `install_name_tool`, `lipo`, and `nmedit`. These +do not build under Linux, so they have been patched to do so. The work here was used as +a starting point: [mingwandroid/toolchain4](https://github.com/mingwandroid/toolchain4). + +In order to build a working toolchain, the following source packages are needed from +Apple: `cctools`, `dyld`, and `ld64`. + +These tools inject timestamps by default, which produce non-deterministic binaries. The +`ZERO_AR_DATE` environment variable is used to disable that. + +This version of `cctools` has been patched to use the current version of `clang`'s headers +and its `libLTO.so` rather than those from `llvmgcc`, as it was originally done in `toolchain4`. + +To complicate things further, all builds must target a macOS SDK. These SDKs are free to +download, but are contained in an Xcode archive that is not redistributable. Instructions +on how to obtain this archive (Xcode_11.3.1.xip) were given earlier. + +This file is many gigabytes in size, but most (but not all) of what we need is +contained only in a single directory: + +```bash +Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk +``` + +See the SDK Extraction notes above for how to obtain it. + +The Gitian descriptors build 2 sets of files: Linux tools, then Apple binaries which are +created using these tools. The build process has been designed to avoid including the +SDK's files in Gitian's outputs. All interim tarballs are fully deterministic and may be freely +redistributed. + +Note: the documentation below may be outdated. + +`genisoimage` is used to create the initial DMG. It is not deterministic as-is, so it has been +patched. A system `genisoimage` will work fine, but it will not be deterministic because +the file-order will change between invocations. The patch can be seen here: [cdrkit-deterministic.patch](https://github.com/bitcoin/bitcoin/blob/master/depends/patches/native_cdrkit/cdrkit-deterministic.patch). +No effort was made to fix this cleanly, so it likely leaks memory badly, however it's only used for +a single invocation, so that's no real concern. + +`genisoimage` cannot compress DMGs, so afterwards, the DMG tool from the +`libdmg-hfsplus` project is used to compress it. There are several bugs in this tool and its +maintainer has seemingly abandoned the project. + +The DMG tool has the ability to create DMGs from scratch as well, but this functionality is +broken. Only the compression feature is currently used. Ideally, the creation could be fixed +and `genisoimage` would no longer be necessary. + +Background images and other features can be added to DMG files by inserting a +`.DS_Store` before creation. This is generated by the script `contrib/macdeploy/custom_dsstore.py`. + +As of OS X 10.9 Mavericks, using an Apple-blessed key to sign binaries is a requirement in +order to satisfy the new Gatekeeper requirements. Because this private key cannot be +shared, we'll have to be a bit creative in order for the build process to remain somewhat +deterministic. Here's how it works: + +- Builders use Gitian to create an unsigned release. This outputs an unsigned DMG which + users may choose to bless and run. It also outputs an unsigned app structure in the form + of a tarball, which also contains all of the tools that have been previously (deterministically) + built in order to create a final DMG. +- The Apple keyholder uses this unsigned app to create a detached signature, using the + script that is also included there. Detached signatures are available from this [repository](https://github.com/bitcoin-core/bitcoin-detached-sigs). +- Builders feed the unsigned app + detached signature back into Gitian. It uses the + pre-built tools to recombine the pieces into a deterministic DMG. diff --git a/contrib/macdeploy/background.png b/contrib/macdeploy/background.png deleted file mode 100644 index f88a2ae74..000000000 Binary files a/contrib/macdeploy/background.png and /dev/null differ diff --git a/contrib/macdeploy/background.psd b/contrib/macdeploy/background.psd deleted file mode 100644 index fdc4f4ca4..000000000 Binary files a/contrib/macdeploy/background.psd and /dev/null differ diff --git a/contrib/macdeploy/background.tiff b/contrib/macdeploy/background.tiff deleted file mode 100644 index 4b44ac672..000000000 Binary files a/contrib/macdeploy/background.tiff and /dev/null differ diff --git a/contrib/macdeploy/background@2x.png b/contrib/macdeploy/background@2x.png deleted file mode 100644 index 4858183f7..000000000 Binary files a/contrib/macdeploy/background@2x.png and /dev/null differ diff --git a/contrib/macdeploy/detached-sig-apply.sh b/contrib/macdeploy/detached-sig-apply.sh deleted file mode 100755 index 781fe315e..000000000 --- a/contrib/macdeploy/detached-sig-apply.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/sh -set -e - -UNSIGNED="$1" -SIGNATURE="$2" -ARCH=x86_64 -ROOTDIR=dist -TEMPDIR=signed.temp -OUTDIR=signed-app - -if [ -z "$UNSIGNED" ]; then - echo "usage: $0 " - exit 1 -fi - -if [ -z "$SIGNATURE" ]; then - echo "usage: $0 " - exit 1 -fi - -rm -rf ${TEMPDIR} && mkdir -p ${TEMPDIR} -tar -C ${TEMPDIR} -xf ${UNSIGNED} -cp -rf "${SIGNATURE}"/* ${TEMPDIR} - -if [ -z "${PAGESTUFF}" ]; then - PAGESTUFF=${TEMPDIR}/pagestuff -fi - -if [ -z "${CODESIGN_ALLOCATE}" ]; then - CODESIGN_ALLOCATE=${TEMPDIR}/codesign_allocate -fi - -find ${TEMPDIR} -name "*.sign" | while read i; do - SIZE=`stat -c %s "${i}"` - TARGET_FILE="`echo "${i}" | sed 's/\.sign$//'`" - - echo "Allocating space for the signature of size ${SIZE} in ${TARGET_FILE}" - ${CODESIGN_ALLOCATE} -i "${TARGET_FILE}" -a ${ARCH} ${SIZE} -o "${i}.tmp" - - OFFSET=`${PAGESTUFF} "${i}.tmp" -p | tail -2 | grep offset | sed 's/[^0-9]*//g'` - if [ -z ${QUIET} ]; then - echo "Attaching signature at offset ${OFFSET}" - fi - - dd if="$i" of="${i}.tmp" bs=1 seek=${OFFSET} count=${SIZE} 2>/dev/null - mv "${i}.tmp" "${TARGET_FILE}" - rm "${i}" - echo "Success." -done -mv ${TEMPDIR}/${ROOTDIR} ${OUTDIR} -rm -rf ${TEMPDIR} -echo "Signed: ${OUTDIR}" diff --git a/contrib/macdeploy/detached-sig-create.sh b/contrib/macdeploy/detached-sig-create.sh deleted file mode 100755 index 89a2da32f..000000000 --- a/contrib/macdeploy/detached-sig-create.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -set -e - -ROOTDIR=dist -BUNDLE="${ROOTDIR}/Bitcoin-Qt.app" -CODESIGN=codesign -TEMPDIR=sign.temp -TEMPLIST=${TEMPDIR}/signatures.txt -OUT=signature.tar.gz -OUTROOT=osx - -if [ ! -n "$1" ]; then - echo "usage: $0 " - echo "example: $0 -s MyIdentity" - exit 1 -fi - -rm -rf ${TEMPDIR} ${TEMPLIST} -mkdir -p ${TEMPDIR} - -${CODESIGN} -f --file-list ${TEMPLIST} "$@" "${BUNDLE}" - -grep -v CodeResources < "${TEMPLIST}" | while read i; do - TARGETFILE="${BUNDLE}/`echo "${i}" | sed "s|.*${BUNDLE}/||"`" - SIZE=`pagestuff "$i" -p | tail -2 | grep size | sed 's/[^0-9]*//g'` - OFFSET=`pagestuff "$i" -p | tail -2 | grep offset | sed 's/[^0-9]*//g'` - SIGNFILE="${TEMPDIR}/${OUTROOT}/${TARGETFILE}.sign" - DIRNAME="`dirname "${SIGNFILE}"`" - mkdir -p "${DIRNAME}" - echo "Adding detached signature for: ${TARGETFILE}. Size: ${SIZE}. Offset: ${OFFSET}" - dd if="$i" of="${SIGNFILE}" bs=1 skip=${OFFSET} count=${SIZE} 2>/dev/null -done - -grep CodeResources < "${TEMPLIST}" | while read i; do - TARGETFILE="${BUNDLE}/`echo "${i}" | sed "s|.*${BUNDLE}/||"`" - RESOURCE="${TEMPDIR}/${OUTROOT}/${TARGETFILE}" - DIRNAME="`dirname "${RESOURCE}"`" - mkdir -p "${DIRNAME}" - echo "Adding resource for: "${TARGETFILE}"" - cp "${i}" "${RESOURCE}" -done - -rm ${TEMPLIST} - -tar -C "${TEMPDIR}" -czf "${OUT}" . -rm -rf "${TEMPDIR}" -echo "Created ${OUT}" diff --git a/contrib/macdeploy/fancy.plist b/contrib/macdeploy/fancy.plist deleted file mode 100644 index ef277a7f1..000000000 --- a/contrib/macdeploy/fancy.plist +++ /dev/null @@ -1,32 +0,0 @@ - - - - - window_bounds - - 300 - 300 - 800 - 620 - - background_picture - background.tiff - icon_size - 96 - applications_symlink - - items_position - - Applications - - 370 - 156 - - Bitcoin-Qt.app - - 128 - 156 - - - - diff --git a/contrib/macdeploy/gen-sdk b/contrib/macdeploy/gen-sdk new file mode 100755 index 000000000..7af726937 --- /dev/null +++ b/contrib/macdeploy/gen-sdk @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 +import argparse +import plistlib +import pathlib +import sys +import tarfile +import gzip +import os +import contextlib + +@contextlib.contextmanager +def cd(path): + """Context manager that restores PWD even if an exception was raised.""" + old_pwd = os.getcwd() + os.chdir(str(path)) + try: + yield + finally: + os.chdir(old_pwd) + +def run(): + parser = argparse.ArgumentParser( + description=__doc__, formatter_class=argparse.RawTextHelpFormatter) + + parser.add_argument('xcode_app', metavar='XCODEAPP', nargs=1) + parser.add_argument("-o", metavar='OUTSDKTGZ', nargs=1, dest='out_sdktgz', required=False) + + args = parser.parse_args() + + xcode_app = pathlib.Path(args.xcode_app[0]).resolve() + assert xcode_app.is_dir(), "The supplied Xcode.app path '{}' either does not exist or is not a directory".format(xcode_app) + + xcode_app_plist = xcode_app.joinpath("Contents/version.plist") + with xcode_app_plist.open('rb') as fp: + pl = plistlib.load(fp) + xcode_version = pl['CFBundleShortVersionString'] + xcode_build_id = pl['ProductBuildVersion'] + print("Found Xcode (version: {xcode_version}, build id: {xcode_build_id})".format(xcode_version=xcode_version, xcode_build_id=xcode_build_id)) + + sdk_dir = xcode_app.joinpath("Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk") + sdk_plist = sdk_dir.joinpath("System/Library/CoreServices/SystemVersion.plist") + with sdk_plist.open('rb') as fp: + pl = plistlib.load(fp) + sdk_version = pl['ProductVersion'] + sdk_build_id = pl['ProductBuildVersion'] + print("Found MacOSX SDK (version: {sdk_version}, build id: {sdk_build_id})".format(sdk_version=sdk_version, sdk_build_id=sdk_build_id)) + + out_name = "Xcode-{xcode_version}-{xcode_build_id}-extracted-SDK-with-libcxx-headers".format(xcode_version=xcode_version, xcode_build_id=xcode_build_id) + + xcode_libcxx_dir = xcode_app.joinpath("Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1") + assert xcode_libcxx_dir.is_dir() + + if args.out_sdktgz: + out_sdktgz_path = pathlib.Path(args.out_sdktgz_path) + else: + # Construct our own out_sdktgz if not specified on the command line + out_sdktgz_path = pathlib.Path("./{}.tar.gz".format(out_name)) + + def tarfp_add_with_base_change(tarfp, dir_to_add, alt_base_dir): + """Add all files in dir_to_add to tarfp, but prepend MEMBERPREFIX to the files' + names + + e.g. if the only file under /root/bazdir is /root/bazdir/qux, invoking: + + tarfp_add_with_base_change(tarfp, "foo/bar", "/root/bazdir") + + would result in the following members being added to tarfp: + + foo/bar/ -> corresponding to /root/bazdir + foo/bar/qux -> corresponding to /root/bazdir/qux + + """ + def change_tarinfo_base(tarinfo): + if tarinfo.name and tarinfo.name.startswith("./"): + tarinfo.name = str(pathlib.Path(alt_base_dir, tarinfo.name)) + if tarinfo.linkname and tarinfo.linkname.startswith("./"): + tarinfo.linkname = str(pathlib.Path(alt_base_dir, tarinfo.linkname)) + return tarinfo + with cd(dir_to_add): + tarfp.add(".", recursive=True, filter=change_tarinfo_base) + + print("Creating output .tar.gz file...") + with out_sdktgz_path.open("wb") as fp: + with gzip.GzipFile(fileobj=fp, compresslevel=9, mtime=0) as gzf: + with tarfile.open(mode="w", fileobj=gzf) as tarfp: + print("Adding MacOSX SDK {} files...".format(sdk_version)) + tarfp_add_with_base_change(tarfp, sdk_dir, out_name) + print("Adding libc++ headers...") + tarfp_add_with_base_change(tarfp, xcode_libcxx_dir, "{}/usr/include/c++/v1".format(out_name)) + print("Done! Find the resulting gzipped tarball at:") + print(out_sdktgz_path.resolve()) + +if __name__ == '__main__': + run() diff --git a/contrib/qos/tc.sh b/contrib/qos/tc.sh index 37ec77451..2376013b5 100644 --- a/contrib/qos/tc.sh +++ b/contrib/qos/tc.sh @@ -1,3 +1,10 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2017 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://www.opensource.org/licenses/mit-license.php . + +export LC_ALL=C #network interface on which to limit traffic IF="eth0" #limit of the network interface in question diff --git a/contrib/seeds/README.md b/contrib/seeds/README.md index 63647fa11..0a9d59d88 100644 --- a/contrib/seeds/README.md +++ b/contrib/seeds/README.md @@ -1,8 +1,4 @@ ### Seeds ### Utility to generate the seeds.txt list that is compiled into the client -(see [src/chainparamsseeds.h](/src/chainparamsseeds.h) and other utilities in [contrib/seeds](/contrib/seeds)). - -The 512 seeds compiled into the 0.10 release were created from sipa's DNS seed data, like this: - - curl -s http://bitcoin.sipa.be/seeds.txt | makeseeds.py +(see [src/chainparamsseeds.h](/src/chainparamsseeds.h) and other utilities in [contrib/seeds](/contrib/seeds)). \ No newline at end of file diff --git a/contrib/seeds/generate-seeds.py b/contrib/seeds/generate-seeds.py index 5142a1dd7..5c9bd5475 100755 --- a/contrib/seeds/generate-seeds.py +++ b/contrib/seeds/generate-seeds.py @@ -126,10 +126,10 @@ def main(): g.write(' * Each line contains a 16-byte IPv6 address and a port.\n') g.write(' * IPv4 as well as onion addresses are wrapped inside a IPv6 address accordingly.\n') g.write(' */\n') - with open(os.path.join(indir,'nodes_main.txt'),'r') as f: + with open(os.path.join(indir,'nodes_main.txt'),'r', encoding="utf8") as f: process_nodes(g, f, 'pnSeed6_main', 8233) g.write('\n') - with open(os.path.join(indir,'nodes_test.txt'),'r') as f: + with open(os.path.join(indir,'nodes_test.txt'),'r', encoding="utf8") as f: process_nodes(g, f, 'pnSeed6_test', 18233) g.write('#endif // BITCOIN_CHAINPARAMSSEEDS_H\n') diff --git a/contrib/seeds/nodes_main.txt b/contrib/seeds/nodes_main.txt deleted file mode 100644 index 17339d514..000000000 --- a/contrib/seeds/nodes_main.txt +++ /dev/null @@ -1,879 +0,0 @@ -1.34.168.128:8333 -1.202.128.218:8333 -2.30.0.210:8333 -5.9.96.203:8333 -5.45.71.130:8333 -5.45.98.141:8333 -5.102.145.68:8333 -5.135.160.77:8333 -5.189.134.246:8333 -5.199.164.132:8333 -5.249.135.102:8333 -8.19.44.110:8333 -8.22.230.8:8333 -14.200.200.145:8333 -18.228.0.188:8333 -18.228.0.200:8333 -23.24.168.97:8333 -23.28.35.227:8333 -23.92.76.170:8333 -23.99.64.119:8333 -23.228.166.128:8333 -23.229.45.32:8333 -24.8.105.128:8333 -24.16.69.137:8333 -24.94.98.96:8333 -24.102.118.7:8333 -24.118.166.228:8333 -24.122.133.49:8333 -24.166.97.162:8333 -24.213.235.242:8333 -24.226.107.64:8333 -24.228.192.171:8333 -27.140.133.18:8333 -31.41.40.25:8333 -31.43.101.59:8333 -31.184.195.181:8333 -31.193.139.66:8333 -37.200.70.102:8333 -37.205.10.151:8333 -42.3.106.227:8333 -42.60.133.106:8333 -45.56.85.231:8333 -45.56.102.228:8333 -45.79.130.235:8333 -46.28.204.61:11101 -46.38.235.229:8333 -46.59.2.74:8333 -46.101.132.37:8333 -46.101.168.50:8333 -46.163.76.230:8333 -46.166.161.103:8333 -46.182.132.100:8333 -46.223.36.94:8333 -46.227.66.132:8333 -46.227.66.138:8333 -46.239.107.74:8333 -46.249.39.100:8333 -46.250.98.108:8333 -50.7.37.114:8333 -50.81.53.151:8333 -50.115.43.253:8333 -50.116.20.87:8333 -50.116.33.92:8333 -50.125.167.245:8333 -50.143.9.51:8333 -50.188.192.133:8333 -54.77.162.76:8333 -54.153.97.109:8333 -54.165.192.125:8333 -58.96.105.85:8333 -59.167.196.135:8333 -60.29.227.163:8333 -61.35.225.19:8333 -62.43.130.178:8333 -62.109.49.26:8333 -62.202.0.97:8333 -62.210.66.227:8333 -62.210.192.169:8333 -64.74.98.205:8333 -64.156.193.100:8333 -64.203.102.86:8333 -64.229.142.48:8333 -65.96.193.165:8333 -66.30.3.7:8333 -66.114.33.49:8333 -66.118.133.194:8333 -66.135.10.126:8333 -66.172.10.4:8333 -66.194.38.250:8333 -66.194.38.253:8333 -66.215.192.104:8333 -67.60.98.115:8333 -67.164.35.36:8333 -67.191.162.244:8333 -67.207.195.77:8333 -67.219.233.140:8333 -67.221.193.55:8333 -67.228.162.228:8333 -68.50.67.199:8333 -68.62.3.203:8333 -68.65.205.226:9000 -68.106.42.191:8333 -68.150.181.198:8333 -68.196.196.106:8333 -68.224.194.81:8333 -69.46.5.194:8333 -69.50.171.238:8333 -69.64.43.152:8333 -69.65.41.13:8333 -69.90.132.200:8333 -69.143.1.243:8333 -69.146.98.216:8333 -69.165.246.38:8333 -69.207.6.135:8333 -69.251.208.26:8333 -70.38.1.101:8333 -70.38.9.66:8333 -70.90.2.18:8333 -71.58.228.226:8333 -71.199.11.189:8333 -71.199.193.202:8333 -71.205.232.181:8333 -71.236.200.162:8333 -72.24.73.186:8333 -72.52.130.110:8333 -72.53.111.37:8333 -72.235.38.70:8333 -73.31.171.149:8333 -73.32.137.72:8333 -73.137.133.238:8333 -73.181.192.103:8333 -73.190.2.60:8333 -73.195.192.137:8333 -73.222.35.117:8333 -74.57.199.180:8333 -74.82.233.205:8333 -74.85.66.82:8333 -74.101.224.127:8333 -74.113.69.16:8333 -74.122.235.68:8333 -74.193.68.141:8333 -74.208.164.219:8333 -75.100.37.122:8333 -75.145.149.169:8333 -75.168.34.20:8333 -76.20.44.240:8333 -76.100.70.17:8333 -76.168.3.239:8333 -76.186.140.103:8333 -77.92.68.221:8333 -77.109.101.142:8333 -77.110.11.86:8333 -77.242.108.18:8333 -78.46.96.150:9020 -78.84.100.95:8333 -79.132.230.144:8333 -79.133.43.63:8333 -79.160.76.153:8333 -79.169.34.24:8333 -79.188.7.78:8333 -80.217.226.25:8333 -80.223.100.179:8333 -80.240.129.221:8333 -81.1.173.243:8333 -81.7.11.50:8333 -81.7.16.17:8333 -81.66.111.3:8333 -81.80.9.71:8333 -81.140.43.138:8333 -81.171.34.37:8333 -81.174.247.50:8333 -81.181.155.53:8333 -81.184.5.253:8333 -81.187.69.130:8333 -81.230.3.84:8333 -82.42.128.51:8333 -82.74.226.21:8333 -82.142.75.50:8333 -82.199.102.10:8333 -82.200.205.30:8333 -82.221.108.21:8333 -82.221.128.35:8333 -82.238.124.41:8333 -82.242.0.245:8333 -83.76.123.110:8333 -83.150.9.196:8333 -83.162.196.192:8333 -83.162.234.224:8333 -83.170.104.91:8333 -83.255.66.118:8334 -84.2.34.104:8333 -84.45.98.91:8333 -84.47.161.150:8333 -84.212.192.131:8333 -84.215.169.101:8333 -84.238.140.176:8333 -84.245.71.31:8333 -85.17.4.212:8333 -85.114.128.134:8333 -85.159.237.191:8333 -85.166.130.189:8333 -85.199.4.228:8333 -85.214.66.168:8333 -85.214.195.210:8333 -85.229.0.73:8333 -86.21.96.45:8333 -87.48.42.199:8333 -87.81.143.82:8333 -87.81.251.72:8333 -87.104.24.185:8333 -87.104.168.104:8333 -87.117.234.71:8333 -87.118.96.197:8333 -87.145.12.57:8333 -87.159.170.190:8333 -88.150.168.160:8333 -88.208.0.79:8333 -88.208.0.149:8333 -88.214.194.226:8343 -89.1.11.32:8333 -89.36.235.108:8333 -89.67.96.2:15321 -89.98.16.41:8333 -89.108.72.195:8333 -89.156.35.157:8333 -89.163.227.28:8333 -89.212.33.237:8333 -89.212.160.165:8333 -89.231.96.83:8333 -89.248.164.64:8333 -90.149.193.199:8333 -91.77.239.245:8333 -91.106.194.97:8333 -91.126.77.77:8333 -91.134.38.195:8333 -91.156.97.181:8333 -91.207.68.144:8333 -91.209.77.101:8333 -91.214.200.205:8333 -91.220.131.242:8333 -91.220.163.18:8333 -91.233.23.35:8333 -92.13.96.93:8333 -92.14.74.114:8333 -92.27.7.209:8333 -92.221.228.13:8333 -92.255.207.73:8333 -93.72.167.148:8333 -93.74.163.234:8333 -93.123.174.66:8333 -93.152.166.29:8333 -93.181.45.188:8333 -94.19.12.244:8333 -94.190.227.112:8333 -94.198.135.29:8333 -94.224.162.65:8333 -94.226.107.86:8333 -94.242.198.161:8333 -95.31.10.209:8333 -95.65.72.244:8333 -95.84.162.95:8333 -95.90.139.46:8333 -95.183.49.27:8005 -95.215.47.133:8333 -96.23.67.85:8333 -96.44.166.190:8333 -97.93.225.74:8333 -98.26.0.34:8333 -98.27.225.102:8333 -98.229.117.229:8333 -98.249.68.125:8333 -98.255.5.155:8333 -99.101.240.114:8333 -101.100.174.138:8333 -101.251.203.6:8333 -103.3.60.61:8333 -103.30.42.189:8333 -103.224.165.48:8333 -104.36.83.233:8333 -104.37.129.22:8333 -104.54.192.251:8333 -104.128.228.252:8333 -104.128.230.185:8334 -104.130.161.47:8333 -104.131.33.60:8333 -104.143.0.156:8333 -104.156.111.72:8333 -104.167.111.84:8333 -104.193.40.248:8333 -104.197.7.174:8333 -104.197.8.250:8333 -104.223.1.133:8333 -104.236.97.140:8333 -104.238.128.214:8333 -104.238.130.182:8333 -106.38.234.84:8333 -106.185.36.204:8333 -107.6.4.145:8333 -107.150.2.6:8333 -107.150.40.234:8333 -107.155.108.130:8333 -107.161.182.115:8333 -107.170.66.231:8333 -107.190.128.226:8333 -107.191.106.115:8333 -108.16.2.61:8333 -109.70.4.168:8333 -109.162.35.196:8333 -109.163.235.239:8333 -109.190.196.220:8333 -109.191.39.60:8333 -109.234.106.191:8333 -109.238.81.82:8333 -114.76.147.27:8333 -115.28.224.127:8333 -115.68.110.82:18333 -118.97.79.218:8333 -118.189.207.197:8333 -119.228.96.233:8333 -120.147.178.81:8333 -121.41.123.5:8333 -121.67.5.230:8333 -122.107.143.110:8333 -123.2.170.98:8333 -123.110.65.94:8333 -123.193.139.19:8333 -125.239.160.41:8333 -128.101.162.193:8333 -128.111.73.10:8333 -128.140.229.73:8333 -128.175.195.31:8333 -128.199.107.63:8333 -128.199.192.153:8333 -128.253.3.193:20020 -129.123.7.7:8333 -130.89.160.234:8333 -131.72.139.164:8333 -131.191.112.98:8333 -133.1.134.162:8333 -134.19.132.53:8333 -137.226.34.42:8333 -141.41.2.172:8333 -141.255.128.204:8333 -142.217.12.106:8333 -143.215.129.126:8333 -146.0.32.101:8337 -147.229.13.199:8333 -149.210.133.244:8333 -149.210.162.187:8333 -150.101.163.241:8333 -151.236.11.189:8333 -153.121.66.211:8333 -154.20.2.139:8333 -159.253.23.132:8333 -162.209.106.123:8333 -162.210.198.184:8333 -162.218.65.121:8333 -162.222.161.49:8333 -162.243.132.6:8333 -162.243.132.58:8333 -162.248.99.164:53011 -162.248.102.117:8333 -163.158.35.110:8333 -164.15.10.189:8333 -164.40.134.171:8333 -166.230.71.67:8333 -167.160.161.199:8333 -168.103.195.250:8333 -168.144.27.112:8333 -168.158.129.29:8333 -170.75.162.86:8333 -172.90.99.174:8333 -172.245.5.156:8333 -173.23.166.47:8333 -173.32.11.194:8333 -173.34.203.76:8333 -173.171.1.52:8333 -173.175.136.13:8333 -173.230.228.139:8333 -173.247.193.70:8333 -174.49.132.28:8333 -174.52.202.72:8333 -174.53.76.87:8333 -174.109.33.28:8333 -176.28.12.169:8333 -176.35.182.214:8333 -176.36.33.113:8333 -176.36.33.121:8333 -176.58.96.173:8333 -176.121.76.84:8333 -178.62.70.16:8333 -178.62.111.26:8333 -178.76.169.59:8333 -178.79.131.32:8333 -178.162.199.216:8333 -178.175.134.35:8333 -178.248.111.4:8333 -178.254.1.170:8333 -178.254.34.161:8333 -179.43.143.120:8333 -179.208.156.198:8333 -180.200.128.58:8333 -183.78.169.108:8333 -183.96.96.152:8333 -184.68.2.46:8333 -184.73.160.160:8333 -184.94.227.58:8333 -184.152.68.163:8333 -185.7.35.114:8333 -185.28.76.179:8333 -185.31.160.202:8333 -185.45.192.129:8333 -185.66.140.15:8333 -186.2.167.23:8333 -186.220.101.142:8333 -188.26.5.33:8333 -188.75.136.146:8333 -188.120.194.140:8333 -188.121.5.150:8333 -188.138.0.114:8333 -188.138.33.239:8333 -188.166.0.82:8333 -188.182.108.129:8333 -188.191.97.208:8333 -188.226.198.102:8001 -190.10.9.217:8333 -190.75.143.144:8333 -190.139.102.146:8333 -191.237.64.28:8333 -192.3.131.61:8333 -192.99.225.3:8333 -192.110.160.122:8333 -192.146.137.1:8333 -192.183.198.204:8333 -192.203.228.71:8333 -193.0.109.3:8333 -193.12.238.204:8333 -193.91.200.85:8333 -193.234.225.156:8333 -194.6.233.38:8333 -194.63.143.136:8333 -194.126.100.246:8333 -195.134.99.195:8333 -195.159.111.98:8333 -195.159.226.139:8333 -195.197.175.190:8333 -198.48.199.108:8333 -198.57.208.134:8333 -198.57.210.27:8333 -198.62.109.223:8333 -198.167.140.8:8333 -198.167.140.18:8333 -199.91.173.234:8333 -199.127.226.245:8333 -199.180.134.116:8333 -200.7.96.99:8333 -201.160.106.86:8333 -202.55.87.45:8333 -202.60.68.242:8333 -202.60.69.232:8333 -202.124.109.103:8333 -203.30.197.77:8333 -203.88.160.43:8333 -203.151.140.14:8333 -203.219.14.204:8333 -205.147.40.62:8333 -207.235.39.214:8333 -207.244.73.8:8333 -208.12.64.225:8333 -208.76.200.200:8333 -209.40.96.121:8333 -209.126.107.176:8333 -209.141.40.149:8333 -209.190.75.59:8333 -209.208.111.142:8333 -210.54.34.164:8333 -211.72.66.229:8333 -212.51.144.42:8333 -212.112.33.157:8333 -212.116.72.63:8333 -212.126.14.122:8333 -213.66.205.194:8333 -213.111.196.21:8333 -213.122.107.102:8333 -213.136.75.175:8333 -213.155.7.24:8333 -213.163.64.31:8333 -213.163.64.208:8333 -213.165.86.136:8333 -213.184.8.22:8333 -216.15.78.182:8333 -216.55.143.154:8333 -216.115.235.32:8333 -216.126.226.166:8333 -216.145.67.87:8333 -216.169.141.169:8333 -216.249.92.230:8333 -216.250.138.230:8333 -217.20.171.43:8333 -217.23.2.71:8333 -217.23.2.242:8333 -217.25.9.76:8333 -217.40.226.169:8333 -217.123.98.9:8333 -217.155.36.62:8333 -217.172.32.18:20993 -218.61.196.202:8333 -218.231.205.41:8333 -220.233.77.200:8333 -223.18.226.85:8333 -223.197.203.82:8333 -223.255.166.142:8333 -[2001:1291:2bf:1::100]:8333 -[2001:1418:100:5c2::2]:8333 -[2001:16d8:dd24:0:86c9:681e:f931:256]:8333 -[2001:19f0:1624:e6::579d:9428]:8333 -[2001:19f0:300:1340:225:90ff:fec9:2b6d]:8333 -[2001:19f0:4009:1405::64]:8333 -[2001:1b40:5000:2e::3fb0:6571]:8333 -[2001:410:a000:4050:8463:90b0:fffb:4e58]:8333 -[2001:410:a002:cafe:8463:90b0:fffb:4e58]:8333 -[2001:41d0:1:541e::1]:8333 -[2001:41d0:1:6a34::3]:8333 -[2001:41d0:1:6cd3::]:8333 -[2001:41d0:1:8b26::1]:8333 -[2001:41d0:1:a33d::1]:8333 -[2001:41d0:1:b855::1]:8333 -[2001:41d0:1:c139::1]:8333 -[2001:41d0:1:c8d7::1]:8333 -[2001:41d0:1:dd3f::1]:8333 -[2001:41d0:1:e29d::1]:8333 -[2001:41d0:1:f59f::33]:8333 -[2001:41d0:1:f7cc::1]:8333 -[2001:41d0:1:ff87::1]:8333 -[2001:41d0:2:2f05::1]:8333 -[2001:41d0:2:37c3::]:8200 -[2001:41d0:2:3e13::1]:8333 -[2001:41d0:2:8619::]:8333 -[2001:41d0:2:9c94::1]:8333 -[2001:41d0:2:a24f::]:8333 -[2001:41d0:2:adbf::]:8333 -[2001:41d0:2:b721::1]:8333 -[2001:41d0:2:ee52::1]:8333 -[2001:41d0:2:f1a5::]:8333 -[2001:41d0:2:fa54::1]:8333 -[2001:41d0:51:1::2036]:8333 -[2001:41d0:52:a00::1a1]:8333 -[2001:41d0:52:cff::6f5]:8333 -[2001:41d0:52:d00::2c0]:8333 -[2001:41d0:52:d00::cf2]:8333 -[2001:41d0:8:1087::1]:8333 -[2001:41d0:8:4a3c::b7c]:8333 -[2001:41d0:8:6728::]:8333 -[2001:41d0:8:b779::1]:8333 -[2001:41d0:8:c30f::1]:8333 -[2001:41d0:8:d2b2::1]:8333 -[2001:41d0:8:d5c3::1]:8333 -[2001:41d0:8:eb8b::]:8333 -[2001:41d0:a:16d0::1]:8333 -[2001:41d0:a:2b18::1]:8333 -[2001:41d0:a:3a9c::1]:8333 -[2001:41d0:a:4903::]:8333 -[2001:41d0:a:57b::1]:8333 -[2001:41d0:a:5c7a::]:8333 -[2001:41d0:a:6c29::1]:8333 -[2001:41d0:a:f482::1]:8333 -[2001:41d0:b:854:b7c:b7c:b7c:b7c]:8333 -[2001:41d0:d:111c::]:8333 -[2001:44b8:4116:7801:4216:7eff:fe78:3fe4]:8333 -[2001:470:1f08:837::2]:8333 -[2001:470:1f08:c33::2]:8333 -[2001:470:1f09:bca:218:7dff:fe10:be33]:8333 -[2001:470:1f0f:22d::212:26]:8333 -[2001:470:1f11:12d5::ae1:5611]:8333 -[2001:470:1f14:57a::2]:8333 -[2001:470:1f14:7d::2]:8333 -[2001:470:1f15:57c::1]:8333 -[2001:470:1f15:dda:3d9a:3f11:9a56:ed64]:8333 -[2001:470:25:482::2]:8333 -[2001:470:25:e4::2]:8333 -[2001:470:4:26b::2]:8333 -[2001:470:5f:5f::232]:8333 -[2001:470:66:119::2]:8333 -[2001:470:67:39d::71]:8333 -[2001:470:6c4f::cafe]:8333 -[2001:470:8:2e1::43]:8333 -[2001:470:90a7:96::afe:6021]:8333 -[2001:470:95c1::2]:8333 -[2001:470:b1d0:ffff::1000]:8333 -[2001:470:c1f2:3::201]:8333 -[2001:470:d00d:0:3664:a9ff:fe9a:5150]:8333 -[2001:470:e250:0:211:11ff:feb9:924c]:8333 -[2001:4800:7817:101:be76:4eff:fe04:dc52]:8333 -[2001:4800:7819:104:be76:4eff:fe04:7809]:8333 -[2001:4800:7819:104:be76:4eff:fe05:c828]:8333 -[2001:4802:7800:2:30d7:1775:ff20:1858]:8333 -[2001:4802:7802:101:be76:4eff:fe20:256]:8333 -[2001:4802:7802:103:be76:4eff:fe20:2de8]:8333 -[2001:4830:1100:2e8::2]:8333 -[2001:4ba0:fff7:181:dead::1]:8333 -[2001:4ba0:fffa:5d::93]:8333 -[2001:4ba0:ffff:1be:1:1005:0:1]:8335 -[2001:4c48:110:101:216:3eff:fe24:1162]:8333 -[2001:4dd0:f101::32]:8333 -[2001:4dd0:ff00:867f::3]:8333 -[2001:4dd0:ff00:9a67::9]:8333 -[2001:4dd0:ff00:9c55:c23f:d5ff:fe6c:7ee9]:8333 -[2001:5c0:1400:b::3cc7]:8333 -[2001:5c0:1400:b::3d01]:8333 -[2001:5c0:1400:b::8df]:8333 -[2001:5c0:1501:300::3]:8333 -[2001:610:1b19::3]:8333 -[2001:620:500:fff0:f21f:afff:fecf:91cc]:8333 -[2001:67c:1220:80c:ad:8de2:f7e2:c784]:8333 -[2001:67c:21ec:1000::b]:8333 -[2001:6f8:1296:0:76d4:35ff:feba:1d26]:8333 -[2001:840:f000:4250:3e4a:92ff:fe6d:145f]:8333 -[2001:8d8:840:500::39:1ae]:8333 -[2001:980:efd8:0:21:de4a:2709:912]:8333 -[2001:981:46:1::3]:8333 -[2001:981:9319:2:c0:a8:c8:8]:8333 -[2001:9d8:cafe:3::91]:8333 -[2001:ad0:1:1:26be:5ff:fe25:959d]:8333 -[2001:ba8:1f1:f34c::2]:8333 -[2001:bc8:381c:100::1]:8333 -[2002:175c:4caa::175c:4caa]:8333 -[2002:4404:82f1:0:8d55:8fbb:15fa:f4e0]:8333 -[2002:4475:2233:0:21f:5bff:fe33:9f70]:8333 -[2002:596c:48c3::596c:48c3]:8333 -[2002:8c6d:6521:9617:12bf:48ff:fed8:1724]:8333 -[2002:a646:5e6a::1:2]:8333 -[2002:b009:20c5::b009:20c5]:8333 -[2400:8900::f03c:91ff:fe6e:823e]:8333 -[2400:8900::f03c:91ff:fe70:d164]:8333 -[2400:8901::f03c:91ff:fe37:9761]:8333 -[2403:4200:403:2::ff]:8333 -[2403:b800:1000:64:40a:e9ff:fe5f:94c1]:8333 -[2403:b800:1000:64:9879:17ff:fe6a:a59f]:8333 -[2600:3c00::f03c:91ff:fe18:59b2]:8333 -[2600:3c00::f03c:91ff:fe37:a4b1]:8333 -[2600:3c00::f03c:91ff:fe56:2973]:8333 -[2600:3c00::f03c:91ff:fe6e:7297]:8333 -[2600:3c00::f03c:91ff:fe84:8a6e]:8333 -[2600:3c01::f03c:91ff:fe18:6adf]:8333 -[2600:3c01::f03c:91ff:fe18:e217]:8333 -[2600:3c01::f03c:91ff:fe33:1b31]:8333 -[2600:3c01::f03c:91ff:fe33:2fe1]:8333 -[2600:3c01::f03c:91ff:fe33:a03f]:8333 -[2600:3c01::f03c:91ff:fe50:5e06]:8333 -[2600:3c01::f03c:91ff:fe56:d645]:8333 -[2600:3c01::f03c:91ff:fe6e:a3dc]:8333 -[2600:3c01::f03c:91ff:fe89:a659]:8333 -[2600:3c02::f03c:91ff:fe6e:6f0b]:8333 -[2600:3c03::f03c:91ff:fe33:f6fb]:8333 -[2600:3c03::f03c:91ff:fe50:5fa7]:8333 -[2600:3c03::f03c:91ff:fe6e:1803]:8333 -[2600:3c03::f03c:91ff:fe6e:4ac0]:8333 -[2601:6:4800:47f:1e4e:1f4d:332c:3bf6]:8333 -[2601:d:5400:fed:8d54:c1e8:7ed7:d45e]:8333 -[2602:100:4b8f:6d2a:20c:29ff:feaf:c4c2]:8333 -[2602:ffc5:1f::1f:2d61]:8333 -[2602:ffc5:1f::1f:9211]:8333 -[2602:ffc5::ffc5:b844]:8333 -[2602:ffe8:100:2::457:936b]:8333 -[2602:ffea:1001:125::2ad4]:8333 -[2602:ffea:1001:6ff::837d]:8333 -[2602:ffea:1001:72b::578b]:8333 -[2602:ffea:1001:77a::9cae]:8333 -[2602:ffea:1:2fe::6bc8]:8333 -[2602:ffea:1:701::7968]:8333 -[2602:ffea:1:70d::82ec]:8333 -[2602:ffea:1:9ff::e957]:8333 -[2602:ffea:1:a5d::4acb]:8333 -[2602:ffea:a::24c4:d9fd]:8333 -[2602:ffea:a::c06:ae32]:8333 -[2604:0:c1:100:1ec1:deff:fe54:2235]:8333 -[2604:180:1:1af::42a9]:8333 -[2604:180::b208:398]:8333 -[2604:2880::6072:aed]:8333 -[2604:4080:1114:0:3285:a9ff:fe93:850c]:8333 -[2604:7c00:17:3d0::5a4d]:8333 -[2604:9a00:2100:a009:2::]:8333 -[2604:a880:1:20::22a:4001]:8333 -[2604:a880:800:10::752:f001]:8333 -[2604:c00:88:32:216:3eff:fee4:fcca]:8333 -[2604:c00:88:32:216:3eff:fef5:bc21]:8333 -[2605:7980:1:2::1761:3d4e]:8333 -[2605:e000:1417:4068:223:32ff:fe96:e2d]:8333 -[2606:6000:a441:9903:5054:ff:fe78:66ff]:8333 -[2606:df00:2::ae85:8fc6]:8333 -[2607:5300:100:200::e7f]:8333 -[2607:5300:10::a1]:8333 -[2607:5300:60:116e::1]:8333 -[2607:5300:60:1535::]:8333 -[2607:5300:60:1b32::1]:8333 -[2607:5300:60:2337::1]:8333 -[2607:5300:60:2b90::1]:8333 -[2607:5300:60:2d99::1]:8333 -[2607:5300:60:3cb::1]:8333 -[2607:5300:60:4a85::]:8333 -[2607:5300:60:5112:0:2:4af5:63fe]:8333 -[2607:5300:60:6dd5::]:8333 -[2607:5300:60:a91::1]:8333 -[2607:f1c0:820:1500::7f:3f44]:8333 -[2607:f1c0:848:1000::48:943c]:8333 -[2607:f948:0:1::7]:8333 -[2607:fcd0:100:2300::4ad:e594]:8333 -[2607:fcd0:100:2300::659e:9cb3]:8333 -[2607:fcd0:100:2300::c74b:a8ae]:8333 -[2607:fcd0:100:2300::d82:d8c2]:8333 -[2607:fcd0:100:4300::8795:2fa8]:8333 -[2607:fcd0:daaa:901::9561:e043]:8333 -[2a00:1178:2:43:5054:ff:fee7:2eb6]:8333 -[2a00:1328:e100:cc42:230:48ff:fe92:55d]:8333 -[2a00:14f0:e000:80d2:cd1a::1]:8333 -[2a00:16d8:c::5b6a:c261]:8333 -[2a00:61e0:4083:6d01:6852:1376:e972:2091]:8333 -[2a00:c98:2030:a02f:2::2]:8333 -[2a01:1b0:7999:402::131]:8333 -[2a01:1e8:e100:811c:700f:65f0:f72a:1084]:8333 -[2a01:238:42da:c500:6546:1293:5422:ab40]:8333 -[2a01:348:6:473::2]:8333 -[2a01:368:e010:2::2]:8333 -[2a01:430:17:1::ffff:549]:8333 -[2a01:430:17:1::ffff:830]:8333 -[2a01:488:66:1000:53a9:d04:0:1]:8333 -[2a01:488:66:1000:57e6:578c:0:1]:8333 -[2a01:488:66:1000:b01c:178d:0:1]:8333 -[2a01:488:67:1000:523:fdce:0:1]:8333 -[2a01:488:67:1000:b01c:30ab:0:1]:8333 -[2a01:4f8:100:24aa::2]:8333 -[2a01:4f8:100:44e7::2]:8333 -[2a01:4f8:100:5128::2]:8333 -[2a01:4f8:100:84a7::1:1]:8333 -[2a01:4f8:110:516c::2]:8333 -[2a01:4f8:110:536e::2]:8333 -[2a01:4f8:120:62e6::2]:8333 -[2a01:4f8:120:702e::2]:8333 -[2a01:4f8:120:8005::2]:8333 -[2a01:4f8:120:8203::2]:8333 -[2a01:4f8:120:8422::2]:8333 -[2a01:4f8:121:11eb::2]:8333 -[2a01:4f8:121:261::2]:8333 -[2a01:4f8:130:242b::10]:8333 -[2a01:4f8:130:242b::5]:8333 -[2a01:4f8:130:2468::3]:8333 -[2a01:4f8:130:632c::2]:8333 -[2a01:4f8:130:6366::2]:8333 -[2a01:4f8:130:6426::2]:8333 -[2a01:4f8:130:934f::2]:8333 -[2a01:4f8:131:2070::2]:8333 -[2a01:4f8:131:54a2::2]:8333 -[2a01:4f8:140:80ad::2]:8333 -[2a01:4f8:141:186::2]:8333 -[2a01:4f8:150:210b::2]:8333 -[2a01:4f8:150:2263::5]:8333 -[2a01:4f8:150:2349::2]:8333 -[2a01:4f8:150:61ee::2]:8333 -[2a01:4f8:150:7088:5054:ff:fe45:bff2]:8333 -[2a01:4f8:150:8324::2]:9001 -[2a01:4f8:151:1d8::2]:8333 -[2a01:4f8:151:5128::2]:8333 -[2a01:4f8:151:6347::2]:9001 -[2a01:4f8:161:526d::2]:8333 -[2a01:4f8:161:9349::2]:8333 -[2a01:4f8:162:23c6::2]:8333 -[2a01:4f8:162:4348::2]:8333 -[2a01:4f8:162:7345::2]:8333 -[2a01:4f8:162:7383::2]:8333 -[2a01:4f8:162:74e3::2]:8333 -[2a01:4f8:190:6065::2]:8333 -[2a01:4f8:190:6349::2]:8333 -[2a01:4f8:190:64c9::2]:8333 -[2a01:4f8:190:91ce::2]:8333 -[2a01:4f8:191:2194::83]:8333 -[2a01:4f8:191:40a1::2]:8333 -[2a01:4f8:191:4a7::2]:8333 -[2a01:4f8:191:63b4:5000::1]:8333 -[2a01:4f8:191:7121::2]:8333 -[2a01:4f8:191:83a2::2]:8333 -[2a01:4f8:191:93c4::2]:8333 -[2a01:4f8:192:60a9:0:1:5:2]:8333 -[2a01:4f8:192:73b2::2]:8333 -[2a01:4f8:192:8098::2]:8333 -[2a01:4f8:192:db::2]:8333 -[2a01:4f8:200:1012::2]:8333 -[2a01:4f8:200:22e3::2]:8333 -[2a01:4f8:200:414e::2]:8333 -[2a01:4f8:200:63af::222]:8333 -[2a01:4f8:200:71e3:78b4:f3ff:fead:e8cf]:8333 -[2a01:4f8:201:5164::2]:8333 -[2a01:4f8:201:6011::4]:8333 -[2a01:4f8:201:60d5::2]:8333 -[2a01:4f8:202:53c3::2]:8333 -[2a01:4f8:210:24aa::2]:8333 -[2a01:4f8:210:502f::2]:8333 -[2a01:4f8:211:14cf::2]:8333 -[2a01:4f8:211:1a59::2]:8333 -[2a01:4f8:211:2ac1::2]:8333 -[2a01:4f8:211:cca::2]:8333 -[2a01:4f8:a0:22a5::2]:8333 -[2a01:4f8:a0:5023::2]:8333 -[2a01:4f8:a0:5243::2]:8333 -[2a01:4f8:a0:74c8::2]:8333 -[2a01:4f8:a0:8227::2]:8333 -[2a01:4f8:a0:822d::2]:8333 -[2a01:4f8:d13:2183::2]:8333 -[2a01:608:ffff:a009:8bf5:879d:e51a:f837]:8333 -[2a01:79d:469e:ed94:c23f:d5ff:fe65:20c5]:8333 -[2a01:7c8:aab5:3e6:5054:ff:fed7:4e54]:8333 -[2a01:7e00::f03c:91ff:fe18:301e]:8333 -[2a01:7e00::f03c:91ff:fe18:7749]:8333 -[2a01:7e00::f03c:91ff:fe33:2d67]:8333 -[2a01:7e00::f03c:91ff:fe33:347c]:8333 -[2a01:7e00::f03c:91ff:fe33:ae50]:8333 -[2a01:7e00::f03c:91ff:fe56:6b5c]:8333 -[2a01:7e00::f03c:91ff:fe56:bee6]:8333 -[2a01:7e00::f03c:91ff:fe69:4895]:8333 -[2a01:7e00::f03c:91ff:fe69:9912]:8333 -[2a01:7e00::f03c:91ff:fe6e:26ee]:8333 -[2a01:7e00::f03c:91ff:fe73:42f1]:8333 -[2a01:7e00::f03c:91ff:fe84:434f]:8333 -[2a01:7e00::f03c:91ff:fe84:b36b]:8333 -[2a01:7e00::f03c:91ff:fe89:1faa]:8333 -[2a01:7e00::f03c:91ff:fe98:816]:8333 -[2a01:7e00::f03c:91ff:fedb:352e]:8333 -[2a01:7e00::f03c:91ff:fedb:4a1d]:8333 -[2a01:e34:edbb:6750:224:1dff:fe89:3897]:8333 -[2a01:e35:2f1d:3fb0:7187:c7ba:bcfc:80ce]:8333 -[2a01:e35:8787:96f0:9032:9297:39ae:496d]:8333 -[2a01:e35:8a3f:47c0:c617:feff:fe3c:9fbd]:8333 -[2a01:e35:8b66:6a0:4900:9dfd:d841:d025]:8333 -[2a02:168:4a01::39]:8333 -[2a02:168:5404:2:c23f:d5ff:fe6a:512e]:8333 -[2a02:180:1:1::5b8f:538c]:8333 -[2a02:2028:1016::2]:8333 -[2a02:2528:503:2::14]:8333 -[2a02:2528:503:2::15]:8333 -[2a02:2528:ff00:81a6:21e:c5ff:fe8d:f9a5]:8333 -[2a02:2770:5:0:21a:4aff:fee4:c7db]:8333 -[2a02:2770:8:0:21a:4aff:fe7b:3dcd]:8333 -[2a02:348:5e:5a29::1]:8333 -[2a02:7aa0:1619::202f:c06a]:8333 -[2a02:8109:8e40:35fc:ba27:ebff:feae:cf16]:8333 -[2a02:af8:6:1500::1:130]:8333 -[2a02:c200:0:10:1:0:6314:2222]:8333 -[2a02:c200:0:10:2:3:3295:1]:8332 -[2a02:c200:0:10:3:0:5449:1]:8333 -[2a02:c200:1:10:2:3:5899:1]:8333 -[2a02:c200:1:10::2705:1]:8333 -[2a02:ce80:0:20::1]:8333 -[2a02:fe0:c321:27e0:6ef0:49ff:fe11:a61d]:8333 -[2a03:4000:2:496::8]:8333 -[2a03:b0c0:0:1010::62:f001]:8333 -[2a03:f80:ed16:ca7:ea75:b12d:2af:9e2a]:8333 -3ffk7iumtx3cegbi.onion:8333 -3hshaantu6ot4upz.onion:8333 -45c5lc77qgpikafy.onion:8333 -77mx2jsxaoyesz2p.onion:8333 -7g7j54btiaxhtsiy.onion:8333 -b6fr7dlbu2kpiysf.onion:8333 -bitcoincfqcssig5.onion:8333 -bitcoinostk4e4re.onion:8333 -bmutjfrj5btseddb.onion:8333 -drp4pvejybx2ejdr.onion:8333 -gixnv56d63buypan.onion:8333 -h2vlpudzphzqxutd.onion:8333 -hhiv5pnxenvbf4am.onion:8333 -lzxpkn6ptp3ohh63.onion:8333 -msphsgfiqfq5stne.onion:8333 -ncwk3lutemffcpc4.onion:8333 -okdzjarwekbshnof.onion:8333 -sjdomi4yb2dwkjbc.onion:8333 -uvwozwxlihntigbb.onion:8333 -v6ylz45dn5ybpk4d.onion:8333 -vk3qjdehyy4dwcxw.onion:8333 -vqpye2k5rcqvj5mq.onion:8333 -xudkoztdfrsuyyou.onion:8333 -z55v4ostefnwfy32.onion:8333 diff --git a/contrib/seeds/nodes_test.txt b/contrib/seeds/nodes_test.txt deleted file mode 100644 index 98365ee50..000000000 --- a/contrib/seeds/nodes_test.txt +++ /dev/null @@ -1,11 +0,0 @@ -# List of fixed seed nodes for testnet - -# Onion nodes -thfsmmn2jbitcoin.onion -it2pj4f7657g3rhi.onion -nkf5e6b7pl4jfd4a.onion -4zhkir2ofl7orfom.onion -t6xj6wilh4ytvcs7.onion -i6y6ivorwakd7nw3.onion -ubqj4rsu3nqtxmtp.onion - diff --git a/contrib/spendfrom/README.md b/contrib/spendfrom/README.md deleted file mode 100644 index c0a9c9ccf..000000000 --- a/contrib/spendfrom/README.md +++ /dev/null @@ -1,35 +0,0 @@ -### SpendFrom ### - -Use the raw transactions API to send coins received on a particular -address (or addresses). - -### Usage: ### -Depends on [jsonrpc](http://json-rpc.org/). - - spendfrom.py --from=FROMADDRESS1[,FROMADDRESS2] --to=TOADDRESS --amount=amount \ - --fee=fee --datadir=/path/to/.bitcoin --testnet --dry_run - -With no arguments, outputs a list of amounts associated with addresses. - -With arguments, sends coins received by the `FROMADDRESS` addresses to the `TOADDRESS`. - -### Notes ### - -- You may explicitly specify how much fee to pay (a fee more than 1% of the amount -will fail, though, to prevent bitcoin-losing accidents). Spendfrom may fail if -it thinks the transaction would never be confirmed (if the amount being sent is -too small, or if the transaction is too many bytes for the fee). - -- If a change output needs to be created, the change will be sent to the last -`FROMADDRESS` (if you specify just one `FROMADDRESS`, change will go back to it). - -- If `--datadir` is not specified, the default datadir is used. - -- The `--dry_run` option will just create and sign the transaction and print -the transaction data (as hexadecimal), instead of broadcasting it. - -- If the transaction is created and broadcast successfully, a transaction id -is printed. - -- If this was a tool for end-users and not programmers, it would have much friendlier -error-handling. diff --git a/contrib/spendfrom/setup.py b/contrib/spendfrom/setup.py deleted file mode 100644 index 01b9768a5..000000000 --- a/contrib/spendfrom/setup.py +++ /dev/null @@ -1,9 +0,0 @@ -from distutils.core import setup -setup(name='btcspendfrom', - version='1.0', - description='Command-line utility for bitcoin "coin control"', - author='Gavin Andresen', - author_email='gavin@bitcoinfoundation.org', - requires=['jsonrpc'], - scripts=['spendfrom.py'], - ) diff --git a/contrib/spendfrom/spendfrom.py b/contrib/spendfrom/spendfrom.py deleted file mode 100755 index 0729234eb..000000000 --- a/contrib/spendfrom/spendfrom.py +++ /dev/null @@ -1,267 +0,0 @@ -#!/usr/bin/env python -# -# Use the raw transactions API to spend bitcoins received on particular addresses, -# and send any change back to that same address. -# -# Example usage: -# spendfrom.py # Lists available funds -# spendfrom.py --from=ADDRESS --to=ADDRESS --amount=11.00 -# -# Assumes it will talk to a bitcoind or Bitcoin-Qt running -# on localhost. -# -# Depends on jsonrpc -# - -from decimal import * -import getpass -import math -import os -import os.path -import platform -import sys -import time -from jsonrpc import ServiceProxy, json - -BASE_FEE=Decimal("0.001") - -def check_json_precision(): - """Make sure json library being used does not lose precision converting BTC values""" - n = Decimal("20000000.00000003") - satoshis = int(json.loads(json.dumps(float(n)))*1.0e8) - if satoshis != 2000000000000003: - raise RuntimeError("JSON encode/decode loses precision") - -def determine_db_dir(): - """Return the default location of the bitcoin data directory""" - if platform.system() == "Darwin": - return os.path.expanduser("~/Library/Application Support/Bitcoin/") - elif platform.system() == "Windows": - return os.path.join(os.environ['APPDATA'], "Bitcoin") - return os.path.expanduser("~/.bitcoin") - -def read_bitcoin_config(dbdir): - """Read the bitcoin.conf file from dbdir, returns dictionary of settings""" - from ConfigParser import SafeConfigParser - - class FakeSecHead(object): - def __init__(self, fp): - self.fp = fp - self.sechead = '[all]\n' - def readline(self): - if self.sechead: - try: return self.sechead - finally: self.sechead = None - else: - s = self.fp.readline() - if s.find('#') != -1: - s = s[0:s.find('#')].strip() +"\n" - return s - - config_parser = SafeConfigParser() - config_parser.readfp(FakeSecHead(open(os.path.join(dbdir, "bitcoin.conf")))) - return dict(config_parser.items("all")) - -def connect_JSON(config): - """Connect to a bitcoin JSON-RPC server""" - testnet = config.get('testnet', '0') - testnet = (int(testnet) > 0) # 0/1 in config file, convert to True/False - if not 'rpcport' in config: - config['rpcport'] = 18232 if testnet else 8232 - connect = "http://%s:%s@127.0.0.1:%s"%(config['rpcuser'], config['rpcpassword'], config['rpcport']) - try: - result = ServiceProxy(connect) - # ServiceProxy is lazy-connect, so send an RPC command mostly to catch connection errors, - # but also make sure the bitcoind we're talking to is/isn't testnet: - if result.getmininginfo()['testnet'] != testnet: - sys.stderr.write("RPC server at "+connect+" testnet setting mismatch\n") - sys.exit(1) - return result - except: - sys.stderr.write("Error connecting to RPC server at "+connect+"\n") - sys.exit(1) - -def unlock_wallet(bitcoind): - info = bitcoind.getinfo() - if 'unlocked_until' not in info: - return True # wallet is not encrypted - t = int(info['unlocked_until']) - if t <= time.time(): - try: - passphrase = getpass.getpass("Wallet is locked; enter passphrase: ") - bitcoind.walletpassphrase(passphrase, 5) - except: - sys.stderr.write("Wrong passphrase\n") - - info = bitcoind.getinfo() - return int(info['unlocked_until']) > time.time() - -def list_available(bitcoind): - address_summary = dict() - - address_to_account = dict() - for info in bitcoind.listreceivedbyaddress(0): - address_to_account[info["address"]] = info["account"] - - unspent = bitcoind.listunspent(0) - for output in unspent: - # listunspent doesn't give addresses, so: - rawtx = bitcoind.getrawtransaction(output['txid'], 1) - vout = rawtx["vout"][output['vout']] - pk = vout["scriptPubKey"] - - # This code only deals with ordinary pay-to-bitcoin-address - # or pay-to-script-hash outputs right now; anything exotic is ignored. - if pk["type"] != "pubkeyhash" and pk["type"] != "scripthash": - continue - - address = pk["addresses"][0] - if address in address_summary: - address_summary[address]["total"] += vout["value"] - address_summary[address]["outputs"].append(output) - else: - address_summary[address] = { - "total" : vout["value"], - "outputs" : [output], - "account" : address_to_account.get(address, "") - } - - return address_summary - -def select_coins(needed, inputs): - # Feel free to improve this, this is good enough for my simple needs: - outputs = [] - have = Decimal("0.0") - n = 0 - while have < needed and n < len(inputs): - outputs.append({ "txid":inputs[n]["txid"], "vout":inputs[n]["vout"]}) - have += inputs[n]["amount"] - n += 1 - return (outputs, have-needed) - -def create_tx(bitcoind, fromaddresses, toaddress, amount, fee): - all_coins = list_available(bitcoind) - - total_available = Decimal("0.0") - needed = amount+fee - potential_inputs = [] - for addr in fromaddresses: - if addr not in all_coins: - continue - potential_inputs.extend(all_coins[addr]["outputs"]) - total_available += all_coins[addr]["total"] - - if total_available < needed: - sys.stderr.write("Error, only %f BTC available, need %f\n"%(total_available, needed)); - sys.exit(1) - - # - # Note: - # Python's json/jsonrpc modules have inconsistent support for Decimal numbers. - # Instead of wrestling with getting json.dumps() (used by jsonrpc) to encode - # Decimals, I'm casting amounts to float before sending them to bitcoind. - # - outputs = { toaddress : float(amount) } - (inputs, change_amount) = select_coins(needed, potential_inputs) - if change_amount > BASE_FEE: # don't bother with zero or tiny change - change_address = fromaddresses[-1] - if change_address in outputs: - outputs[change_address] += float(change_amount) - else: - outputs[change_address] = float(change_amount) - - rawtx = bitcoind.createrawtransaction(inputs, outputs) - signed_rawtx = bitcoind.signrawtransaction(rawtx) - if not signed_rawtx["complete"]: - sys.stderr.write("signrawtransaction failed\n") - sys.exit(1) - txdata = signed_rawtx["hex"] - - return txdata - -def compute_amount_in(bitcoind, txinfo): - result = Decimal("0.0") - for vin in txinfo['vin']: - in_info = bitcoind.getrawtransaction(vin['txid'], 1) - vout = in_info['vout'][vin['vout']] - result = result + vout['value'] - return result - -def compute_amount_out(txinfo): - result = Decimal("0.0") - for vout in txinfo['vout']: - result = result + vout['value'] - return result - -def sanity_test_fee(bitcoind, txdata_hex, max_fee): - class FeeError(RuntimeError): - pass - try: - txinfo = bitcoind.decoderawtransaction(txdata_hex) - total_in = compute_amount_in(bitcoind, txinfo) - total_out = compute_amount_out(txinfo) - if total_in-total_out > max_fee: - raise FeeError("Rejecting transaction, unreasonable fee of "+str(total_in-total_out)) - - tx_size = len(txdata_hex)/2 - kb = tx_size/1000 # integer division rounds down - if kb > 1 and fee < BASE_FEE: - raise FeeError("Rejecting no-fee transaction, larger than 1000 bytes") - if total_in < 0.01 and fee < BASE_FEE: - raise FeeError("Rejecting no-fee, tiny-amount transaction") - # Exercise for the reader: compute transaction priority, and - # warn if this is a very-low-priority transaction - - except FeeError as err: - sys.stderr.write((str(err)+"\n")) - sys.exit(1) - -def main(): - import optparse - - parser = optparse.OptionParser(usage="%prog [options]") - parser.add_option("--from", dest="fromaddresses", default=None, - help="addresses to get bitcoins from") - parser.add_option("--to", dest="to", default=None, - help="address to get send bitcoins to") - parser.add_option("--amount", dest="amount", default=None, - help="amount to send") - parser.add_option("--fee", dest="fee", default="0.0", - help="fee to include") - parser.add_option("--datadir", dest="datadir", default=determine_db_dir(), - help="location of bitcoin.conf file with RPC username/password (default: %default)") - parser.add_option("--testnet", dest="testnet", default=False, action="store_true", - help="Use the test network") - parser.add_option("--dry_run", dest="dry_run", default=False, action="store_true", - help="Don't broadcast the transaction, just create and print the transaction data") - - (options, args) = parser.parse_args() - - check_json_precision() - config = read_bitcoin_config(options.datadir) - if options.testnet: config['testnet'] = True - bitcoind = connect_JSON(config) - - if options.amount is None: - address_summary = list_available(bitcoind) - for address,info in address_summary.iteritems(): - n_transactions = len(info['outputs']) - if n_transactions > 1: - print("%s %.8f %s (%d transactions)"%(address, info['total'], info['account'], n_transactions)) - else: - print("%s %.8f %s"%(address, info['total'], info['account'])) - else: - fee = Decimal(options.fee) - amount = Decimal(options.amount) - while unlock_wallet(bitcoind) == False: - pass # Keep asking for passphrase until they get it right - txdata = create_tx(bitcoind, options.fromaddresses.split(","), options.to, amount, fee) - sanity_test_fee(bitcoind, txdata, amount*Decimal("0.01")) - if options.dry_run: - print(txdata) - else: - txid = bitcoind.sendrawtransaction(txdata) - print(txid) - -if __name__ == '__main__': - main() diff --git a/contrib/test-patches/README.md b/contrib/test-patches/README.md deleted file mode 100644 index def40b0d6..000000000 --- a/contrib/test-patches/README.md +++ /dev/null @@ -1,7 +0,0 @@ -### Test Patches ### - -These patches are applied when the automated pull-tester -tests each pull and when master is tested using jenkins. -You can find more information about the tests run at -[http://jenkins.bluematt.me/pull-tester/files/ -](http://jenkins.bluematt.me/pull-tester/files/) \ No newline at end of file diff --git a/contrib/test-patches/temp-revert-2.patch b/contrib/test-patches/temp-revert-2.patch deleted file mode 100644 index 1cd043d0d..000000000 --- a/contrib/test-patches/temp-revert-2.patch +++ /dev/null @@ -1,20 +0,0 @@ -commit cfae26916dba311f6f75d444301c1f9362267c3e -Author: Matt Corallo -Date: Sun Mar 24 20:45:50 2013 -0400 - - Revert "Checkpoint at first block in 11 March chain fork" - - This reverts commit f817c496a1482d05b22c8e539de67f07db1c09d9. - -diff --git a/src/checkpoints.cpp b/src/checkpoints.cpp -index 62234b9..9b11f0b 100644 ---- a/src/checkpoints.cpp -+++ b/src/checkpoints.cpp -@@ -44,7 +44,6 @@ namespace Checkpoints - (193000, uint256("0x000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317")) - (210000, uint256("0x000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e")) - (216116, uint256("0x00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e")) -- (225430, uint256("0x00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932")) - ; - static const CCheckpointData data = { - &mapCheckpoints, diff --git a/contrib/tidy_datadir.sh b/contrib/tidy_datadir.sh index 5d6d82644..b845b34e4 100755 --- a/contrib/tidy_datadir.sh +++ b/contrib/tidy_datadir.sh @@ -1,7 +1,10 @@ #!/bin/bash +# Copyright (c) 2013 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. if [ -d "$1" ]; then - cd "$1" + cd "$1" || exit 1 else echo "Usage: $0 " >&2 echo "Removes obsolete Bitcoin database files" >&2 diff --git a/contrib/verify-commits/gpg.sh b/contrib/verify-commits/gpg.sh deleted file mode 100755 index 6b5137e7b..000000000 --- a/contrib/verify-commits/gpg.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -INPUT=$(/dev/null); do - case "$LINE" in "[GNUPG:] VALIDSIG"*) - while read KEY; do - case "$LINE" in "[GNUPG:] VALIDSIG $KEY "*) VALID=true;; esac - done < ./contrib/verify-commits/trusted-keys - esac -done -if ! $VALID; then - exit 1 -fi -echo "$INPUT" | gpg --trust-model always "$@" 2>/dev/null diff --git a/contrib/verify-commits/pre-push-hook.sh b/contrib/verify-commits/pre-push-hook.sh deleted file mode 100755 index 607c0cac4..000000000 --- a/contrib/verify-commits/pre-push-hook.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -if ! [[ "$2" =~ [git@]?[www.]?github.com[:|/]bitcoin/bitcoin[.git]? ]]; then - exit 0 -fi - -while read LINE; do - set -- A $LINE - if [ "$4" != "refs/heads/master" ]; then - continue - fi - if ! ./contrib/verify-commits/verify-commits.sh $3 > /dev/null 2>&1; then - echo "ERROR: A commit is not signed, can't push" - ./contrib/verify-commits/verify-commits.sh - exit 1 - fi -done < /dev/stdin diff --git a/contrib/verify-commits/trusted-git-root b/contrib/verify-commits/trusted-git-root deleted file mode 100644 index eb13f8762..000000000 --- a/contrib/verify-commits/trusted-git-root +++ /dev/null @@ -1 +0,0 @@ -053038e5ba116cb319fb85f3cb3e062cf1b3df15 diff --git a/contrib/verify-commits/trusted-keys b/contrib/verify-commits/trusted-keys deleted file mode 100644 index 658ad0375..000000000 --- a/contrib/verify-commits/trusted-keys +++ /dev/null @@ -1,5 +0,0 @@ -71A3B16735405025D447E8F274810B012346C9A6 -1F4410F6A89268CE3197A84C57896D2FF8F0B657 -01CDF4627A3B88AAE4A571C87588242FBE38D3A8 -AF8BE07C7049F3A26B239D5325B3083201782B2F -81291FA67D2C379A006A053FEAB5AF94D9E9ABE7 diff --git a/contrib/verify-commits/verify-commits.sh b/contrib/verify-commits/verify-commits.sh deleted file mode 100755 index 5841fa207..000000000 --- a/contrib/verify-commits/verify-commits.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/sh - -DIR=$(dirname "$0") - -echo "Please verify all commits in the following list are not evil:" -git log "$DIR" - -VERIFIED_ROOT=$(cat "${DIR}/trusted-git-root") - -HAVE_FAILED=false -IS_SIGNED () { - if [ $1 = $VERIFIED_ROOT ]; then - return 0; - fi - if ! git -c "gpg.program=${DIR}/gpg.sh" verify-commit $1 > /dev/null 2>&1; then - return 1; - fi - local PARENTS=$(git show -s --format=format:%P $1) - for PARENT in $PARENTS; do - if IS_SIGNED $PARENT > /dev/null; then - return 0; - fi - done - if ! "$HAVE_FAILED"; then - echo "No parent of $1 was signed with a trusted key!" > /dev/stderr - echo "Parents are:" > /dev/stderr - for PARENT in $PARENTS; do - git show -s $PARENT > /dev/stderr - done - HAVE_FAILED=true - fi - return 1; -} - -if [ x"$1" = "x" ]; then - TEST_COMMIT="HEAD" -else - TEST_COMMIT="$1" -fi - -IS_SIGNED "$TEST_COMMIT" -RES=$? -if [ "$RES" = 1 ]; then - if ! "$HAVE_FAILED"; then - echo "$TEST_COMMIT was not signed with a trusted key!" - fi -else - echo "There is a valid path from $TEST_COMMIT to $VERIFIED_ROOT where all commits are signed!" -fi - -exit $RES diff --git a/contrib/verifysfbinaries/README.md b/contrib/verifysfbinaries/README.md deleted file mode 100644 index 1db3fe52f..000000000 --- a/contrib/verifysfbinaries/README.md +++ /dev/null @@ -1,6 +0,0 @@ -### Verify Binaries ### -This script attempts to download the signature file `SHA256SUMS.asc` from https://bitcoin.org. - -It first checks if the signature passes, and then downloads the files specified in the file, and checks if the hashes of these files match those that are specified in the signature file. - -The script returns 0 if everything passes the checks. It returns 1 if either the signature check or the hash check doesn't pass. If an error occurs the return value is 2. diff --git a/contrib/verifysfbinaries/verify.sh b/contrib/verifysfbinaries/verify.sh deleted file mode 100755 index 3eb469388..000000000 --- a/contrib/verifysfbinaries/verify.sh +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/bash - -### This script attempts to download the signature file SHA256SUMS.asc from bitcoin.org -### It first checks if the signature passes, and then downloads the files specified in -### the file, and checks if the hashes of these files match those that are specified -### in the signature file. -### The script returns 0 if everything passes the checks. It returns 1 if either the -### signature check or the hash check doesn't pass. If an error occurs the return value is 2 - -function clean_up { - for file in $* - do - rm "$file" 2> /dev/null - done -} - -WORKINGDIR="/tmp/bitcoin" -TMPFILE="hashes.tmp" - -#this URL is used if a version number is not specified as an argument to the script -SIGNATUREFILE="https://bitcoin.org/bin/0.9.2.1/SHA256SUMS.asc" - -SIGNATUREFILENAME="SHA256SUMS.asc" -RCSUBDIR="test/" -BASEDIR="https://bitcoin.org/bin/" -VERSIONPREFIX="bitcoin-" -RCVERSIONSTRING="rc" - -if [ ! -d "$WORKINGDIR" ]; then - mkdir "$WORKINGDIR" -fi - -cd "$WORKINGDIR" - -#test if a version number has been passed as an argument -if [ -n "$1" ]; then - #let's also check if the version number includes the prefix 'bitcoin-', - # and add this prefix if it doesn't - if [[ $1 == "$VERSIONPREFIX"* ]]; then - VERSION="$1" - else - VERSION="$VERSIONPREFIX$1" - fi - - #now let's see if the version string contains "rc", and strip it off if it does - # and simultaneously add RCSUBDIR to BASEDIR, where we will look for SIGNATUREFILENAME - if [[ $VERSION == *"$RCVERSIONSTRING"* ]]; then - BASEDIR="$BASEDIR${VERSION/%-$RCVERSIONSTRING*}/" - BASEDIR="$BASEDIR$RCSUBDIR" - else - BASEDIR="$BASEDIR$VERSION/" - fi - - SIGNATUREFILE="$BASEDIR$SIGNATUREFILENAME" -else - BASEDIR="${SIGNATUREFILE%/*}/" -fi - -#first we fetch the file containing the signature -WGETOUT=$(wget -N "$BASEDIR$SIGNATUREFILENAME" 2>&1) - -#and then see if wget completed successfully -if [ $? -ne 0 ]; then - echo "Error: couldn't fetch signature file. Have you specified the version number in the following format?" - echo "[bitcoin-]-[rc[0-9]] (example: bitcoin-0.9.2-rc1)" - echo "wget output:" - echo "$WGETOUT"|sed 's/^/\t/g' - exit 2 -fi - -#then we check it -GPGOUT=$(gpg --yes --decrypt --output "$TMPFILE" "$SIGNATUREFILENAME" 2>&1) - -#return value 0: good signature -#return value 1: bad signature -#return value 2: gpg error - -RET="$?" -if [ $RET -ne 0 ]; then - if [ $RET -eq 1 ]; then - #and notify the user if it's bad - echo "Bad signature." - elif [ $RET -eq 2 ]; then - #or if a gpg error has occurred - echo "gpg error. Do you have Gavin's code signing key installed?" - fi - - echo "gpg output:" - echo "$GPGOUT"|sed 's/^/\t/g' - clean_up $SIGNATUREFILENAME $TMPFILE - exit "$RET" -fi - -#here we extract the filenames from the signature file -FILES=$(awk '{print $2}' "$TMPFILE") - -#and download these one by one -for file in in $FILES -do - wget --quiet -N "$BASEDIR$file" -done - -#check hashes -DIFF=$(diff <(sha256sum $FILES) "$TMPFILE") - -if [ $? -eq 1 ]; then - echo "Hashes don't match." - echo "Offending files:" - echo "$DIFF"|grep "^<"|awk '{print "\t"$3}' - exit 1 -elif [ $? -gt 1 ]; then - echo "Error executing 'diff'" - exit 2 -fi - -#everything matches! clean up the mess -clean_up $FILES $SIGNATUREFILENAME $TMPFILE - -exit 0 diff --git a/depends/Makefile b/depends/Makefile index 524c8eb93..1a69d3e66 100644 --- a/depends/Makefile +++ b/depends/Makefile @@ -4,7 +4,7 @@ SOURCES_PATH ?= $(BASEDIR)/sources BASE_CACHE ?= $(BASEDIR)/built SDK_PATH ?= $(BASEDIR)/SDKs NO_WALLET ?= -PRIORITY_DOWNLOAD_PATH ?= https://download.z.cash/depends-sources +FALLBACK_DOWNLOAD_PATH ?= https://download.z.cash/depends-sources BUILD ?= $(shell ./config.guess) HOST ?= $(BUILD) @@ -14,8 +14,7 @@ HASH_LENGTH:=11 DOWNLOAD_CONNECT_TIMEOUT:=10 DOWNLOAD_RETRIES:=3 CRATE_REGISTRY:=vendored-sources - -LIBRUSTZCASH_OVERRIDE ?= +CRATE_ARCHIVE = $(SOURCES_PATH)/vendored-crates.tar.gz host:=$(BUILD) ifneq ($(HOST),) @@ -78,19 +77,18 @@ include packages/packages.mk wallet_packages_$(NO_WALLET) = $(wallet_packages) -NO_PROTON_$(WITH_PROTON) = 1 -proton_packages_$(NO_PROTON_) = $(proton_packages) - -packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(rust_packages) $(proton_packages_) $(wallet_packages_) +packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(wallet_packages_) native_packages += $($(host_arch)_$(host_os)_native_packages) $($(host_os)_native_packages) all_packages = $(packages) $(native_packages) -meta_depends = Makefile funcs.mk builders/default.mk hosts/default.mk hosts/$(host_os).mk builders/$(build_os).mk cargo-checksum.sh +meta_depends = Makefile funcs.mk builders/default.mk hosts/default.mk hosts/$(host_os).mk builders/$(build_os).mk +$(host_arch)_$(host_os)_native_binutils?=$($(host_os)_native_binutils) $(host_arch)_$(host_os)_native_toolchain?=$($(host_os)_native_toolchain) include funcs.mk +binutils_path=$($($(host_arch)_$(host_os)_native_binutils)_prefixbin) toolchain_path=$($($(host_arch)_$(host_os)_native_toolchain)_prefixbin) final_build_id_long+=$(shell $(build_SHA256SUM) config.site.in) final_build_id+=$(shell echo -n $(final_build_id_long) | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH)) @@ -100,6 +98,12 @@ $(host_prefix)/.stamp_$(final_build_id): $(native_packages) $(packages) $(AT)echo copying packages: $^ $(AT)echo to: $(@D) $(AT)cd $(@D); $(foreach package,$^, tar xf $($(package)_cached); ) + $(AT)if test -f "$(CRATE_ARCHIVE)"; \ + then echo Extracting pre-vendored crates from $(CRATE_ARCHIVE)...; \ + tar xf $(CRATE_ARCHIVE) -C $(@D); \ + else echo Vendoring crates...; \ + $(@D)/native/bin/cargo vendor --locked --manifest-path $(BASEDIR)/../Cargo.toml $(@D)/$(CRATE_REGISTRY); \ + fi $(AT)touch $@ $(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_build_id) @@ -107,17 +111,17 @@ $(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_ $(AT)sed -e 's|@HOST@|$(host)|' \ -e 's|@CC@|$(toolchain_path)$(host_CC)|' \ -e 's|@CXX@|$(toolchain_path)$(host_CXX)|' \ - -e 's|@AR@|$(toolchain_path)$(host_AR)|' \ - -e 's|@RANLIB@|$(toolchain_path)$(host_RANLIB)|' \ - -e 's|@NM@|$(toolchain_path)$(host_NM)|' \ - -e 's|@STRIP@|$(toolchain_path)$(host_STRIP)|' \ + -e 's|@AR@|$(binutils_path)$(host_AR)|' \ + -e 's|@RANLIB@|$(binutils_path)$(host_RANLIB)|' \ + -e 's|@NM@|$(binutils_path)$(host_NM)|' \ + -e 's|@STRIP@|$(binutils_path)$(host_STRIP)|' \ -e 's|@build_os@|$(build_os)|' \ -e 's|@host_os@|$(host_os)|' \ -e 's|@CFLAGS@|$(strip $(host_CFLAGS) $(host_$(release_type)_CFLAGS))|' \ -e 's|@CXXFLAGS@|$(strip $(host_CXXFLAGS) $(host_$(release_type)_CXXFLAGS))|' \ -e 's|@CPPFLAGS@|$(strip $(host_CPPFLAGS) $(host_$(release_type)_CPPFLAGS))|' \ -e 's|@LDFLAGS@|$(strip $(host_LDFLAGS) $(host_$(release_type)_LDFLAGS))|' \ - -e 's|@rust_target@|$(call rust_target,rust,$(canonical_host),$(host_os))|' \ + -e 's|@rust_target@|$(call rust_target,native_rust,$(canonical_host),$(host_os))|' \ -e 's|@no_wallet@|$(NO_WALLET)|' \ -e 's|@debug@|$(DEBUG)|' \ $< > $@ @@ -134,14 +138,18 @@ endef define check_or_remove_sources mkdir -p $($(package)_source_dir); cd $($(package)_source_dir); \ $(build_SHA256SUM) -c $($(package)_fetched) >/dev/null 2>/dev/null || \ - ( if test -f $($(package)_all_sources); then echo "Checksum missing or mismatched for $(package) source. Forcing re-download."; fi; \ + ( test -z "$($(package)_all_sources)" || ( echo $($(package)_all_sources) | xargs -n 1 test ! -f ) || echo "Checksum missing or mismatched for $(package) source. Forcing re-download."; \ rm -f $($(package)_all_sources) $($(1)_fetched)) endef check-packages: - @$(foreach package,$(all_packages),$(call check_or_remove_cached,$(package));) + @$(foreach package,$(packages),$(call check_or_remove_cached,$(package));) + @$(foreach package,$(rust_crates),$(call check_or_remove_cached,$(package));) + @$(foreach package,$(native_packages),$(call check_or_remove_cached,$(package));) check-sources: - @$(foreach package,$(all_packages),$(call check_or_remove_sources,$(package));) + @$(foreach package,$(packages),$(call check_or_remove_sources,$(package));) + @$(foreach package,$(rust_crates),$(call check_or_remove_sources,$(package));) + @$(foreach package,$(native_packages),$(call check_or_remove_sources,$(package));) $(host_prefix)/share/config.site: check-packages @@ -150,14 +158,25 @@ check-packages: check-sources install: check-packages $(host_prefix)/share/config.site +crates_download_dir=$(base_download_dir)/crates +download-crates: native_rust + $(AT)echo Vendoring crates... + $(AT)mkdir -p $(SOURCES_PATH) + $(AT)rm -rf $(crates_download_dir) + $(AT)mkdir -p $(crates_download_dir) + $(AT)tar xf $(native_rust_cached) -C $(crates_download_dir) + $(AT)$(crates_download_dir)/native/bin/cargo vendor --locked --manifest-path $(BASEDIR)/../Cargo.toml $(crates_download_dir)/$(CRATE_REGISTRY) + $(AT)cd $(crates_download_dir); find $(CRATE_REGISTRY) | sort | tar --no-recursion -czf $(CRATE_ARCHIVE) -T - + $(AT)rm -rf $(crates_download_dir) + download-one: check-sources $(all_sources) download-osx: - @$(MAKE) -s HOST=x86_64-apple-darwin11 download-one + @$(MAKE) -s HOST=x86_64-apple-darwin14 download-one download-linux: - @$(MAKE) -s HOST=x86_64-unknown-linux-gnu download-one + @$(MAKE) -s HOST=x86_64-pc-linux-gnu download-one download-win: @$(MAKE) -s HOST=x86_64-w64-mingw32 download-one -download: download-osx download-linux download-win +download: download-crates download-osx download-linux download-win -.PHONY: install cached download-one download-osx download-linux download-win download check-packages check-sources +.PHONY: install cached download-crates download-one download-osx download-linux download-win download check-packages check-sources diff --git a/depends/README.md b/depends/README.md index 1b976af7e..df312aabd 100644 --- a/depends/README.md +++ b/depends/README.md @@ -22,8 +22,11 @@ Common `host-platform-triplets` for cross compilation are: - `i686-w64-mingw32` for Win32 - `x86_64-w64-mingw32` for Win64 -- `x86_64-apple-darwin11` for MacOSX -- `arm-linux-gnueabihf` for Linux ARM +- `x86_64-apple-darwin16` for macOS +- `arm-linux-gnueabihf` for Linux ARM 32 bit +- `aarch64-linux-gnu` for Linux ARM 64 bit +- `riscv32-linux-gnu` for Linux RISC-V 32 bit +- `riscv64-linux-gnu` for Linux RISC-V 64 bit No other options are needed, the paths are automatically configured. @@ -33,10 +36,9 @@ The following can be set when running make: make FOO=bar SOURCES_PATH: downloaded sources will be placed here BASE_CACHE: built packages will be placed here SDK_PATH: Path where sdk's can be found (used by OSX) - PRIORITY_DOWNLOAD_PATH: Try fetching source files from here before using their own URLs + FALLBACK_DOWNLOAD_PATH: If a source file can't be fetched, try here before giving up NO_WALLET: Don't download/build/cache libs needed to enable the wallet DEBUG: disable some optimizations and enable more runtime checking - LIBRUSTZCASH_OVERRIDE: Path to a local librustzcash repository If some packages are not built, for example `make NO_WALLET=1`, the appropriate options will be passed to bitcoin's configure. In this case, `--disable-wallet`. diff --git a/depends/builders/darwin.mk b/depends/builders/darwin.mk index f8ff4e23a..bcb02b782 100644 --- a/depends/builders/darwin.mk +++ b/depends/builders/darwin.mk @@ -19,4 +19,5 @@ darwin_LIBTOOL:=$(shell xcrun -f libtool) darwin_OTOOL:=$(shell xcrun -f otool) darwin_NM:=$(shell xcrun -f nm) darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool) +darwin_native_binutils= darwin_native_toolchain= diff --git a/depends/cargo-checksum.sh b/depends/cargo-checksum.sh deleted file mode 100755 index 535cc0bfd..000000000 --- a/depends/cargo-checksum.sh +++ /dev/null @@ -1,13 +0,0 @@ -echo "{\"files\":{$( -find . -type f | # Get list of file paths -grep -v $1 | # Exclude Makefile hashes -grep -v '[.]stamp_' | # Exclude Makefile stamps -sed 's|^[.]/||' | # Remove leading ./ -sort | # Sort (for uniformity) -xargs $2 | # Get SHA256 hashes (assumes standard 'H(A) A' format) -awk -v OFS='":"' '{print $2, $1}' | # 'H(A) A' -> 'A":"H(A)' -sed 's|^|"|' | # 'A":"H(A)' -> '"A":"H(A)' -sed 's|$|"|' | # '"A":"H(A)' -> '"A":"H(A)"' -tr '\n' ',' | # Concatenate lines with commas -sed 's|,$||' # Remove any trailing comma (to fit JSON spec) -)},\"package\":$3}" > .cargo-checksum.json diff --git a/depends/config.guess b/depends/config.guess index f357ec6c8..8d70ec2b2 100755 --- a/depends/config.guess +++ b/depends/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2015 Free Software Foundation, Inc. +# Copyright 1992-2020 Free Software Foundation, Inc. -timestamp='2015-03-04' +timestamp='2020-09-19' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ timestamp='2015-03-04' # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -27,7 +27,7 @@ timestamp='2015-03-04' # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . @@ -39,7 +39,7 @@ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2015 Free Software Foundation, Inc. +Copyright 1992-2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -84,8 +84,6 @@ if test $# != 0; then exit 1 fi -trap 'exit 1' 1 2 15 - # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a @@ -96,34 +94,40 @@ trap 'exit 1' 1 2 15 # Portable tmp directory creation inspired by the Autoconf team. -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + # prevent multiple calls if $tmp is already set + test "$tmp" && return 0 + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039 + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD="$driver" + break + fi + done + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then +if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi @@ -132,30 +136,35 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -case "${UNAME_SYSTEM}" in +case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu - eval $set_cc_for_build - cat <<-EOF > $dummy.c + set_cc_for_build + cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else + #include + #ifdef __DEFINED_va_list + LIBC=musl + #else LIBC=gnu #endif + #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" ;; esac # Note: order is significant - the case branches are not exclusive. -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in +case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, @@ -169,27 +178,30 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ - /sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || \ + "/sbin/$sysctl" 2>/dev/null || \ + "/usr/sbin/$sysctl" 2>/dev/null || \ echo unknown)` - case "${UNAME_MACHINE_ARCH}" in + case "$UNAME_MACHINE_ARCH" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) - arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` - endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` - machine=${arch}${endian}-unknown + arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` + machine="${arch}${endian}"-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + *) machine="$UNAME_MACHINE_ARCH"-unknown ;; esac # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build + # to ELF recently (or will in the future) and ABI. + case "$UNAME_MACHINE_ARCH" in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then @@ -205,10 +217,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ;; esac # Determine ABI tags. - case "${UNAME_MACHINE_ARCH}" in + case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' - abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release @@ -216,38 +228,60 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in + case "$UNAME_VERSION" in Debian*) release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}${abi}" + echo "$machine-${os}${release}${abi-}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" + exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" + exit ;; + *:OS108:*:*) + echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:Sortix:*:*) + echo "$UNAME_MACHINE"-unknown-sortix + exit ;; + *:Twizzler:*:*) + echo "$UNAME_MACHINE"-unknown-twizzler + exit ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in @@ -265,63 +299,54 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; + UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; + UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; + UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; + UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; + UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; + UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; + UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; + UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; + UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos + echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos + echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition @@ -333,7 +358,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} + echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos @@ -360,38 +385,38 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} + echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" + set_cc_for_build + SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then - SUN_ARCH="x86_64" + SUN_ARCH=x86_64 fi fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in @@ -400,25 +425,25 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} + echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) - echo m68k-sun-sunos${UNAME_RELEASE} + echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) - echo sparc-sun-sunos${UNAME_RELEASE} + echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} + echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not @@ -429,44 +454,44 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} + echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} + echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} + echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} + echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} + echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} + echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} + echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} + echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { @@ -475,23 +500,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} + echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax @@ -517,17 +542,17 @@ EOF AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ + test "$TARGET_BINARY_INTERFACE"x = x then - echo m88k-dg-dgux${UNAME_RELEASE} + echo m88k-dg-dgux"$UNAME_RELEASE" else - echo m88k-dg-dguxbcs${UNAME_RELEASE} + echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else - echo i586-dg-dgux${UNAME_RELEASE} + echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) @@ -544,7 +569,7 @@ EOF echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id @@ -553,17 +578,17 @@ EOF echo i386-ibm-aix exit ;; ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then + if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #include main() @@ -574,7 +599,7 @@ EOF exit(0); } EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else @@ -588,27 +613,27 @@ EOF exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi - if [ -x /usr/bin/lslpp ] ; then + if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx @@ -623,28 +648,28 @@ EOF echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + case "$UNAME_MACHINE" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then + if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + case "$sc_cpu_version" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + case "$sc_kernel_bits" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + if test "$HP_ARCH" = ""; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include @@ -677,13 +702,13 @@ EOF exit (0); } EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = "hppa2.0w" ] + if test "$HP_ARCH" = hppa2.0w then - eval $set_cc_for_build + set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler @@ -694,23 +719,23 @@ EOF # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then - HP_ARCH="hppa2.0w" + HP_ARCH=hppa2.0w else - HP_ARCH="hppa64" + HP_ARCH=hppa64 fi fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} + echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #include int main () @@ -735,11 +760,11 @@ EOF exit (0); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) @@ -748,17 +773,17 @@ EOF *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk + if test -x /usr/sbin/sysversion ; then + echo "$UNAME_MACHINE"-unknown-osf1mk else - echo ${UNAME_MACHINE}-unknown-osf1 + echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) @@ -783,130 +808,123 @@ EOF echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} + echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" + exit ;; + arm:FreeBSD:*:*) + UNAME_PROCESSOR=`uname -p` + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi + else + echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf + fi exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in + case "$UNAME_PROCESSOR" in amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; esac + echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin + echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) - echo ${UNAME_MACHINE}-pc-mingw64 + echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 + echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 + echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 + echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) - case ${UNAME_MACHINE} in + case "$UNAME_MACHINE" in x86) - echo i586-pc-interix${UNAME_RELEASE} + echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} + echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) - echo ia64-unknown-interix${UNAME_RELEASE} + echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin + echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin + echo x86_64-pc-cygwin exit ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix + *:Minix:*:*) + echo "$UNAME_MACHINE"-unknown-minix exit ;; aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; @@ -916,132 +934,179 @@ EOF EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) - eval $set_cc_for_build + set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + k1om:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 + sed 's/^ //' << EOF > "$dummy.c" #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el + #undef mips + #undef mipsel + #undef mips64 + #undef mips64el + #if ${IS_GLIBC} && defined(_ABI64) + LIBCABI=gnuabi64 + #else + #if ${IS_GLIBC} && defined(_ABIN32) + LIBCABI=gnuabin32 + #else + LIBCABI=${LIBC} + #endif + #endif + + #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa64r6 + #else + #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa32r6 + #else + #if defined(__mips64) + CPU=mips64 + #else + CPU=mips + #endif + #endif + #endif + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el + MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} + MIPS_ENDIAN= #else - CPU= + MIPS_ENDIAN= #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`" + test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; + mips64el:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; openrisc*:Linux:*:*) - echo or1k-unknown-linux-${LIBC} + echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) - echo sparc-unknown-linux-${LIBC} + echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} + echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; - PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; - *) echo hppa-unknown-linux-${LIBC} ;; + PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-${LIBC} + echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} + echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-${LIBC} + echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) - echo powerpcle-unknown-linux-${LIBC} + echo powerpcle-unknown-linux-"$LIBC" + exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-${LIBC} + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + set_cc_for_build + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_X32 >/dev/null + then + LIBCABI="$LIBC"x32 + fi + fi + echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI" exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. @@ -1055,34 +1120,34 @@ EOF # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx + echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop + echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos + echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable + echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} + echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp + echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + i*86:*:4.*:*) + UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) @@ -1092,12 +1157,12 @@ EOF *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 @@ -1107,9 +1172,9 @@ EOF && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv32 + echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) @@ -1129,9 +1194,9 @@ EOF exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) @@ -1151,9 +1216,9 @@ EOF test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; @@ -1162,28 +1227,28 @@ EOF test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} + echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} + echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} + echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} + echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} + echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 @@ -1194,7 +1259,7 @@ EOF *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 + echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi @@ -1214,23 +1279,23 @@ EOF exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos + echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} + echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} + if test -d /usr/nec; then + echo mips-nec-sysv"$UNAME_RELEASE" else - echo mips-unknown-sysv${UNAME_RELEASE} + echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. @@ -1249,77 +1314,97 @@ EOF echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} + echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} + echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} + echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} + echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} + echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} + echo sx8r-nec-superux"$UNAME_RELEASE" + exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} + echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" + exit ;; + arm64:Darwin:*:*) + echo aarch64-apple-darwin"$UNAME_RELEASE" exit ;; *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc + UNAME_PROCESSOR=`uname -p` + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + if command -v xcode-select > /dev/null 2> /dev/null && \ + ! xcode-select --print-path > /dev/null 2> /dev/null ; then + # Avoid executing cc if there is no toolchain installed as + # cc will be a stub that puts up a graphical alert + # prompting the user to install developer tools. + CC_FOR_BUILD=no_compiler_found + else + set_cc_for_build fi - if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then - # Avoid executing cc on OS X 10.9, as it ships with a stub - # that puts up a graphical alert prompting to install - # developer tools. Any system running Mac OS X 10.7 or - # later (Darwin 11 and later) is required to have a 64-bit - # processor. This is not true of the ARM version of Darwin - # that Apple uses in portable devices. - UNAME_PROCESSOR=x86_64 + # uname -m returns i386 or x86_64 + UNAME_PROCESSOR=$UNAME_MACHINE fi - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then + if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} + echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} + NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux @@ -1328,18 +1413,19 @@ EOF echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - if test "$cputype" = "386"; then + # shellcheck disable=SC2154 + if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi - echo ${UNAME_MACHINE}-unknown-plan9 + echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 @@ -1360,14 +1446,14 @@ EOF echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} + echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in + case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; @@ -1376,34 +1462,194 @@ EOF echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos + echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros + echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx + echo "$UNAME_MACHINE"-unknown-esx + exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; + *:Unleashed:*:*) + echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" exit ;; esac +# No uname command or uname output not recognized. +set_cc_for_build +cat > "$dummy.c" < +#include +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include +#if defined(_SIZE_T_) || defined(SIGLOST) +#include +#endif +#endif +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname un; + uname (&un); + printf ("vax-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname *un; + uname (&un); + printf ("mips-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("mips-dec-ultrix\n"); exit (0); +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } + +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 < in order to provide the needed -information to handle your system. +year=`echo $timestamp | sed 's,-.*,,'` +# shellcheck disable=SC2003 +if test "`expr "\`date +%Y\`" - "$year"`" -lt 3 ; then + cat >&2 </dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" EOF +fi exit 1 # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/depends/config.site.in b/depends/config.site.in index dbcb7a6e4..2947db997 100644 --- a/depends/config.site.in +++ b/depends/config.site.in @@ -32,7 +32,7 @@ export PKG_CONFIG_LIBDIR=$depends_prefix/lib/pkgconfig export PKG_CONFIG_PATH=$depends_prefix/share/pkgconfig CPPFLAGS="-I$depends_prefix/include/ $CPPFLAGS" -LDFLAGS="-L$depends_prefix/lib $LDFLAGS" +LDFLAGS="-L$depends_prefix/lib $LDFLAGS -static-libstdc++ -lc++abi" CC="@CC@" CXX="@CXX@" diff --git a/depends/config.sub b/depends/config.sub index 8f1229c6f..780c2bbaa 100755 --- a/depends/config.sub +++ b/depends/config.sub @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2015 Free Software Foundation, Inc. +# Copyright 1992-2020 Free Software Foundation, Inc. -timestamp='2015-03-08' +timestamp='2020-09-08' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ timestamp='2015-03-08' # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -33,7 +33,7 @@ timestamp='2015-03-08' # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -53,12 +53,11 @@ timestamp='2015-03-08' me=`echo "$0" | sed -e 's,.*/,,'` usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -68,7 +67,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2015 Free Software Foundation, Inc. +Copyright 1992-2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -90,12 +89,12 @@ while test $# -gt 0 ; do - ) # Use stdin as input. break ;; -* ) - echo "$me: invalid option $1$help" + echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. - echo $1 + echo "$1" exit ;; * ) @@ -111,1231 +110,1167 @@ case $# in exit 1;; esac -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac +# Split fields of configuration type +# shellcheck disable=SC2162 +IFS="-" read field1 field2 field3 field4 <&2 + exit 1 ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 + *-*-*-*) + basic_machine=$field1-$field2 + basic_os=$field3-$field4 ;; - -bluegene*) - os=-cnk + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova*) + basic_machine=$field1 + basic_os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + basic_os=linux-android + ;; + *) + basic_machine=$field1-$field2 + basic_os=$field3 + ;; + esac ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 + *-*) + # A lone config we happen to match not fitting any pattern + case $field1-$field2 in + decstation-3100) + basic_machine=mips-dec + basic_os= + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + basic_os=$field2 + ;; + # Manufacturers + dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ + | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ + | unicom* | ibm* | next | hp | isi* | apollo | altos* \ + | convergent* | ncr* | news | 32* | 3600* | 3100* \ + | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ + | ultra | tti* | harris | dolphin | highlevel | gould \ + | cbm | ns | masscomp | apple | axis | knuth | cray \ + | microblaze* | sim | cisco \ + | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + basic_os= + ;; + *) + basic_machine=$field1 + basic_os=$field2 + ;; + esac + ;; + esac ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*178) - os=-lynxos178 - ;; - -lynx*5) - os=-lynxos5 - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + basic_os=bsd + ;; + a29khif) + basic_machine=a29k-amd + basic_os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + basic_os=scout + ;; + alliant) + basic_machine=fx80-alliant + basic_os= + ;; + altos | altos3068) + basic_machine=m68k-altos + basic_os= + ;; + am29k) + basic_machine=a29k-none + basic_os=bsd + ;; + amdahl) + basic_machine=580-amdahl + basic_os=sysv + ;; + amiga) + basic_machine=m68k-unknown + basic_os= + ;; + amigaos | amigados) + basic_machine=m68k-unknown + basic_os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + basic_os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + basic_os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + basic_os=bsd + ;; + aros) + basic_machine=i386-pc + basic_os=aros + ;; + aux) + basic_machine=m68k-apple + basic_os=aux + ;; + balance) + basic_machine=ns32k-sequent + basic_os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + basic_os=linux + ;; + cegcc) + basic_machine=arm-unknown + basic_os=cegcc + ;; + convex-c1) + basic_machine=c1-convex + basic_os=bsd + ;; + convex-c2) + basic_machine=c2-convex + basic_os=bsd + ;; + convex-c32) + basic_machine=c32-convex + basic_os=bsd + ;; + convex-c34) + basic_machine=c34-convex + basic_os=bsd + ;; + convex-c38) + basic_machine=c38-convex + basic_os=bsd + ;; + cray) + basic_machine=j90-cray + basic_os=unicos + ;; + crds | unos) + basic_machine=m68k-crds + basic_os= + ;; + da30) + basic_machine=m68k-da30 + basic_os= + ;; + decstation | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + basic_os= + ;; + delta88) + basic_machine=m88k-motorola + basic_os=sysv3 + ;; + dicos) + basic_machine=i686-pc + basic_os=dicos + ;; + djgpp) + basic_machine=i586-pc + basic_os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + basic_os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + basic_os=ose + ;; + gmicro) + basic_machine=tron-gmicro + basic_os=sysv + ;; + go32) + basic_machine=i386-pc + basic_os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + basic_os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + basic_os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + basic_os=hms + ;; + harris) + basic_machine=m88k-harris + basic_os=sysv3 + ;; + hp300 | hp300hpux) + basic_machine=m68k-hp + basic_os=hpux + ;; + hp300bsd) + basic_machine=m68k-hp + basic_os=bsd + ;; + hppaosf) + basic_machine=hppa1.1-hp + basic_os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + basic_os=proelf + ;; + i386mach) + basic_machine=i386-mach + basic_os=mach + ;; + isi68 | isi) + basic_machine=m68k-isi + basic_os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + basic_os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + basic_os=sysv + ;; + merlin) + basic_machine=ns32k-utek + basic_os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + basic_os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + basic_os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + basic_os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + basic_os=coff + ;; + morphos) + basic_machine=powerpc-unknown + basic_os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + basic_os=moxiebox + ;; + msdos) + basic_machine=i386-pc + basic_os=msdos + ;; + msys) + basic_machine=i686-pc + basic_os=msys + ;; + mvs) + basic_machine=i370-ibm + basic_os=mvs + ;; + nacl) + basic_machine=le32-unknown + basic_os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + basic_os=sysv4 + ;; + netbsd386) + basic_machine=i386-pc + basic_os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + basic_os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + basic_os=newsos + ;; + news1000) + basic_machine=m68030-sony + basic_os=newsos + ;; + necv70) + basic_machine=v70-nec + basic_os=sysv + ;; + nh3000) + basic_machine=m68k-harris + basic_os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + basic_os=cxux + ;; + nindy960) + basic_machine=i960-intel + basic_os=nindy + ;; + mon960) + basic_machine=i960-intel + basic_os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + basic_os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + basic_os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + basic_os=ose + ;; + os68k) + basic_machine=m68k-none + basic_os=os68k + ;; + paragon) + basic_machine=i860-intel + basic_os=osf + ;; + parisc) + basic_machine=hppa-unknown + basic_os=linux + ;; + psp) + basic_machine=mipsallegrexel-sony + basic_os=psp + ;; + pw32) + basic_machine=i586-unknown + basic_os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + basic_os=rdos + ;; + rdos32) + basic_machine=i386-pc + basic_os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + basic_os=coff + ;; + sa29200) + basic_machine=a29k-amd + basic_os=udi + ;; + sei) + basic_machine=mips-sei + basic_os=seiux + ;; + sequent) + basic_machine=i386-sequent + basic_os= + ;; + sps7) + basic_machine=m68k-bull + basic_os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + basic_os= + ;; + stratus) + basic_machine=i860-stratus + basic_os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + basic_os= + ;; + sun2os3) + basic_machine=m68000-sun + basic_os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + basic_os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + basic_os= + ;; + sun3os3) + basic_machine=m68k-sun + basic_os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + basic_os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + basic_os= + ;; + sun4os3) + basic_machine=sparc-sun + basic_os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + basic_os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + basic_os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + basic_os= + ;; + sv1) + basic_machine=sv1-cray + basic_os=unicos + ;; + symmetry) + basic_machine=i386-sequent + basic_os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + basic_os=unicos + ;; + t90) + basic_machine=t90-cray + basic_os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + basic_os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + basic_os=tpf + ;; + udi29k) + basic_machine=a29k-amd + basic_os=udi + ;; + ultra3) + basic_machine=a29k-nyu + basic_os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + basic_os=none + ;; + vaxv) + basic_machine=vax-dec + basic_os=sysv + ;; + vms) + basic_machine=vax-dec + basic_os=vms + ;; + vsta) + basic_machine=i386-pc + basic_os=vsta + ;; + vxworks960) + basic_machine=i960-wrs + basic_os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + basic_os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + basic_os=vxworks + ;; + xbox) + basic_machine=i686-pc + basic_os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + basic_os=unicos + ;; + *) + basic_machine=$1 + basic_os= + ;; + esac ;; esac -# Decode aliases for certain CPU-COMPANY combinations. +# Decode 1-component or ad-hoc basic machines case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ - | avr | avr32 \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | e2k | epiphany \ - | fido | fr30 | frv | ft32 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | k1om \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 | or1k | or1knd | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pyramid \ - | riscv32 | riscv64 \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | visium \ - | we32k \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown + # Here we handle the default manufacturer of certain CPU types. It is in + # some cases the only manufacturer, in others, it is the most popular. + w89k) + cpu=hppa1.1 + vendor=winbond ;; - c54x) - basic_machine=tic54x-unknown + op50n) + cpu=hppa1.1 + vendor=oki ;; - c55x) - basic_machine=tic55x-unknown + op60c) + cpu=hppa1.1 + vendor=oki ;; - c6x) - basic_machine=tic6x-unknown + ibm*) + cpu=i370 + vendor=ibm + ;; + orion105) + cpu=clipper + vendor=highlevel + ;; + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple + ;; + pmac | pmac-mpw) + cpu=powerpc + vendor=apple + ;; + + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + cpu=m68000 + vendor=att + ;; + 3b*) + cpu=we32k + vendor=att + ;; + bluegene*) + cpu=powerpc + vendor=ibm + basic_os=cnk + ;; + decsystem10* | dec10*) + cpu=pdp10 + vendor=dec + basic_os=tops10 + ;; + decsystem20* | dec20*) + cpu=pdp10 + vendor=dec + basic_os=tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + cpu=m68k + vendor=motorola + ;; + dpx2*) + cpu=m68k + vendor=bull + basic_os=sysv3 + ;; + encore | umax | mmax) + cpu=ns32k + vendor=encore + ;; + elxsi) + cpu=elxsi + vendor=elxsi + basic_os=${basic_os:-bsd} + ;; + fx2800) + cpu=i860 + vendor=alliant + ;; + genix) + cpu=ns32k + vendor=ns + ;; + h3050r* | hiux*) + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + cpu=m68000 + vendor=hp + ;; + hp9k3[2-9][0-9]) + cpu=m68k + vendor=hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + i*86v32) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv32 + ;; + i*86v4*) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv4 + ;; + i*86v) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv + ;; + i*86sol2) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=solaris2 + ;; + j90 | j90-cray) + cpu=j90 + vendor=cray + basic_os=${basic_os:-unicos} + ;; + iris | iris4d) + cpu=mips + vendor=sgi + case $basic_os in + irix*) + ;; + *) + basic_os=irix4 + ;; + esac + ;; + miniframe) + cpu=m68000 + vendor=convergent + ;; + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) + cpu=m68k + vendor=atari + basic_os=mint + ;; + news-3600 | risc-news) + cpu=mips + vendor=sony + basic_os=newsos + ;; + next | m*-next) + cpu=m68k + vendor=next + case $basic_os in + openstep*) + ;; + nextstep*) + ;; + ns2*) + basic_os=nextstep2 + ;; + *) + basic_os=nextstep3 + ;; + esac + ;; + np1) + cpu=np1 + vendor=gould + ;; + op50n-* | op60c-*) + cpu=hppa1.1 + vendor=oki + basic_os=proelf + ;; + pa-hitachi) + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 + ;; + pbd) + cpu=sparc + vendor=tti + ;; + pbb) + cpu=m68k + vendor=tti + ;; + pc532) + cpu=ns32k + vendor=pc532 + ;; + pn) + cpu=pn + vendor=gould + ;; + power) + cpu=power + vendor=ibm + ;; + ps2) + cpu=i386 + vendor=ibm + ;; + rm[46]00) + cpu=mips + vendor=siemens + ;; + rtpc | rtpc-*) + cpu=romp + vendor=ibm + ;; + sde) + cpu=mipsisa32 + vendor=sde + basic_os=${basic_os:-elf} + ;; + simso-wrs) + cpu=sparclite + vendor=wrs + basic_os=vxworks + ;; + tower | tower-32) + cpu=m68k + vendor=ncr + ;; + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu + ;; + w65) + cpu=w65 + vendor=wdc + ;; + w89k-*) + cpu=hppa1.1 + vendor=winbond + basic_os=proelf + ;; + none) + cpu=none + vendor=none ;; leon|leon[3-9]) - basic_machine=sparc-$basic_machine + cpu=sparc + vendor=$basic_machine ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown + leon-*|leon[3-9]-*) + cpu=sparc + vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; - strongarm | thumb | xscale) - basic_machine=arm-unknown + *-*) + # shellcheck disable=SC2162 + IFS="-" read cpu vendor <&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | e2k-* | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | k1om-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pyramid-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | visium-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - asmjs) - basic_machine=asmjs-unknown - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - leon-*|leon[3-9]-*) - basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - moxiebox) - basic_machine=moxie-unknown - os=-moxiebox - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 + cpu=$basic_machine + vendor=pc ;; + # These rules are duplicated from below for sake of the special case above; + # i.e. things that normalized to x86 arches should also default to "pc" pc98) - basic_machine=i386-pc + cpu=i386 + vendor=pc ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + x64 | amd64) + cpu=x86_64 + vendor=pc ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc + # Recognize the basic CPU types without company name. + *) + cpu=$basic_machine + vendor=unknown ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc +esac + +unset -v basic_machine + +# Decode basic machines in the full and proper CPU-Company form. +case $cpu-$vendor in + # Here we handle the default manufacturer of certain CPU types in canonical form. It is in + # some cases the only manufacturer, in others, it is the most popular. + craynv-unknown) + vendor=cray + basic_os=${basic_os:-unicosmp} ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc + c90-unknown | c90-cray) + vendor=cray + basic_os=${Basic_os:-unicos} ;; - pentium4) - basic_machine=i786-pc + fx80-unknown) + vendor=alliant ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + romp-unknown) + vendor=ibm ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + mmix-unknown) + vendor=knuth ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + microblaze-unknown | microblazeel-unknown) + vendor=xilinx ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + rs6000-unknown) + vendor=ibm ;; - pn) - basic_machine=pn-gould + vax-unknown) + vendor=dec ;; - power) basic_machine=power-ibm + pdp11-unknown) + vendor=dec ;; - ppc | ppcbe) basic_machine=powerpc-unknown + we32k-unknown) + vendor=att ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + cydra-unknown) + vendor=cydrome ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown + i370-ibm*) + vendor=ibm ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + orion-unknown) + vendor=highlevel ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos - ;; - rdos32) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - strongarm-* | thumb-*) - basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tile*) - basic_machine=$basic_machine-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - xscale-* | xscalee[bl]-*) - basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none + xps-unknown | xps100-unknown) + cpu=xps100 + vendor=honeywell ;; -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond + # Here we normalize CPU types with a missing or matching vendor + dpx20-unknown | dpx20-bull) + cpu=rs6000 + vendor=bull + basic_os=${basic_os:-bosx} ;; - op50n) - basic_machine=hppa1.1-oki + + # Here we normalize CPU types irrespective of the vendor + amd64-*) + cpu=x86_64 ;; - op60c) - basic_machine=hppa1.1-oki + blackfin-*) + cpu=bfin + basic_os=linux ;; - romp) - basic_machine=romp-ibm + c54x-*) + cpu=tic54x ;; - mmix) - basic_machine=mmix-knuth + c55x-*) + cpu=tic55x ;; - rs6000) - basic_machine=rs6000-ibm + c6x-*) + cpu=tic6x ;; - vax) - basic_machine=vax-dec + e500v[12]-*) + cpu=powerpc + basic_os=${basic_os}"spe" ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown + mips3*-*) + cpu=mips64 ;; - pdp11) - basic_machine=pdp11-dec + ms1-*) + cpu=mt ;; - we32k) - basic_machine=we32k-att + m68knommu-*) + cpu=m68k + basic_os=linux ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown + m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) + cpu=s12z ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun + openrisc-*) + cpu=or32 ;; - cydra) - basic_machine=cydra-cydrome + parisc-*) + cpu=hppa + basic_os=linux ;; - orion) - basic_machine=orion-highlevel + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + cpu=i586 ;; - orion105) - basic_machine=clipper-highlevel + pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*) + cpu=i686 ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + cpu=i686 ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple + pentium4-*) + cpu=i786 ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. + pc98-*) + cpu=i386 ;; + ppc-* | ppcbe-*) + cpu=powerpc + ;; + ppcle-* | powerpclittle-*) + cpu=powerpcle + ;; + ppc64-*) + cpu=powerpc64 + ;; + ppc64le-* | powerpc64little-*) + cpu=powerpc64le + ;; + sb1-*) + cpu=mipsisa64sb1 + ;; + sb1el-*) + cpu=mipsisa64sb1el + ;; + sh5e[lb]-*) + cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` + ;; + spur-*) + cpu=spur + ;; + strongarm-* | thumb-*) + cpu=arm + ;; + tx39-*) + cpu=mipstx39 + ;; + tx39el-*) + cpu=mipstx39el + ;; + x64-*) + cpu=x86_64 + ;; + xscale-* | xscalee[bl]-*) + cpu=`echo "$cpu" | sed 's/^xscale/arm/'` + ;; + arm64-*) + cpu=aarch64 + ;; + + # Recognize the canonical CPU Types that limit and/or modify the + # company names they are paired with. + cr16-*) + basic_os=${basic_os:-elf} + ;; + crisv32-* | etraxfs*-*) + cpu=crisv32 + vendor=axis + ;; + cris-* | etrax*-*) + cpu=cris + vendor=axis + ;; + crx-*) + basic_os=${basic_os:-elf} + ;; + neo-tandem) + cpu=neo + vendor=tandem + ;; + nse-tandem) + cpu=nse + vendor=tandem + ;; + nsr-tandem) + cpu=nsr + vendor=tandem + ;; + nsv-tandem) + cpu=nsv + vendor=tandem + ;; + nsx-tandem) + cpu=nsx + vendor=tandem + ;; + mipsallegrexel-sony) + cpu=mipsallegrexel + vendor=sony + ;; + tile*-*) + basic_os=${basic_os:-linux-gnu} + ;; + *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 + # Recognize the canonical CPU types that are allowed with any + # company name. + case $cpu in + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | abacus \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ + | alphapca5[67] | alpha64pca5[67] \ + | am33_2.0 \ + | amdgcn \ + | arc | arceb \ + | arm | arm[lb]e | arme[lb] | armv* \ + | avr | avr32 \ + | asmjs \ + | ba \ + | be32 | be64 \ + | bfin | bpf | bs2000 \ + | c[123]* | c30 | [cjt]90 | c4x \ + | c8051 | clipper | craynv | csky | cydra \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | elxsi | epiphany \ + | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ + | h8300 | h8500 \ + | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i*86 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle \ + | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ + | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ + | m88110 | m88k | maxq | mb | mcore | mep | metag \ + | microblaze | microblazeel \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64eb | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mmix \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nfp \ + | nios | nios2 | nios2eb | nios2el \ + | none | np1 | ns16k | ns32k | nvptx \ + | open8 \ + | or1k* \ + | or32 \ + | orion \ + | picochip \ + | pdp10 | pdp11 | pj | pjl | pn | power \ + | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ + | pru \ + | pyramid \ + | riscv | riscv32 | riscv64 \ + | rl78 | romp | rs6000 | rx \ + | s390 | s390x \ + | score \ + | sh | shl \ + | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ + | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ + | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ + | spu \ + | tahoe \ + | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ + | tron \ + | ubicom32 \ + | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ + | vax \ + | visium \ + | w65 \ + | wasm32 | wasm64 \ + | we32k \ + | x86 | x86_64 | xc16x | xgate | xps100 \ + | xstormy16 | xtensa* \ + | ymp \ + | z8k | z80) + ;; + + *) + echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 + exit 1 + ;; + esac ;; esac # Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` +case $vendor in + digital*) + vendor=dec ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + commodore*) + vendor=cbm ;; *) ;; @@ -1343,200 +1278,209 @@ esac # Decode manufacturer-specific aliases for certain operating systems. -if [ x"$os" != x"" ] +if test x$basic_os != x then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux + +# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just +# set os. +case $basic_os in + gnu/linux*) + kernel=linux + os=`echo $basic_os | sed -e 's|gnu/linux|gnu|'` ;; - -solaris1 | -solaris1.*) + nto-qnx*) + kernel=nto + os=`echo $basic_os | sed -e 's|nto-qnx|qnx|'` + ;; + *-*) + # shellcheck disable=SC2162 + IFS="-" read kernel os <&2 - exit 1 + # No normalization, but not necessarily accepted, that comes below. ;; esac + else # Here we handle the default operating systems that come with various machines. @@ -1549,261 +1493,352 @@ else # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. -case $basic_machine in +kernel= +case $cpu-$vendor in score-*) - os=-elf + os=elf ;; spu-*) - os=-elf + os=elf ;; *-acorn) - os=-riscix1.2 + os=riscix1.2 ;; arm*-rebel) - os=-linux + kernel=linux + os=gnu ;; arm*-semi) - os=-aout + os=aout ;; c4x-* | tic4x-*) - os=-coff + os=coff ;; c8051-*) - os=-elf + os=elf + ;; + clipper-intergraph) + os=clix ;; hexagon-*) - os=-elf + os=elf ;; tic54x-*) - os=-coff + os=coff ;; tic55x-*) - os=-coff + os=coff ;; tic6x-*) - os=-coff + os=coff ;; # This must come before the *-dec entry. pdp10-*) - os=-tops20 + os=tops20 ;; pdp11-*) - os=-none + os=none ;; *-dec | vax-*) - os=-ultrix4.2 + os=ultrix4.2 ;; m68*-apollo) - os=-domain + os=domain ;; i386-sun) - os=-sunos4.0.2 + os=sunos4.0.2 ;; m68000-sun) - os=-sunos3 + os=sunos3 ;; m68*-cisco) - os=-aout + os=aout ;; mep-*) - os=-elf + os=elf ;; mips*-cisco) - os=-elf + os=elf ;; mips*-*) - os=-elf + os=elf ;; or32-*) - os=-coff + os=coff ;; *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 + os=sysv3 ;; sparc-* | *-sun) - os=-sunos4.1.1 + os=sunos4.1.1 + ;; + pru-*) + os=elf ;; *-be) - os=-beos - ;; - *-haiku) - os=-haiku + os=beos ;; *-ibm) - os=-aix + os=aix ;; *-knuth) - os=-mmixware + os=mmixware ;; *-wec) - os=-proelf + os=proelf ;; *-winbond) - os=-proelf + os=proelf ;; *-oki) - os=-proelf + os=proelf ;; *-hp) - os=-hpux + os=hpux ;; *-hitachi) - os=-hiux + os=hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv + os=sysv ;; *-cbm) - os=-amigaos + os=amigaos ;; *-dg) - os=-dgux + os=dgux ;; *-dolphin) - os=-sysv3 + os=sysv3 ;; m68k-ccur) - os=-rtu + os=rtu ;; m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs + os=luna ;; *-next) - os=-nextstep3 + os=nextstep + ;; + *-sequent) + os=ptx + ;; + *-crds) + os=unos + ;; + *-ns) + os=genix + ;; + i370-*) + os=mvs ;; *-gould) - os=-sysv + os=sysv ;; *-highlevel) - os=-bsd + os=bsd ;; *-encore) - os=-bsd + os=bsd ;; *-sgi) - os=-irix + os=irix ;; *-siemens) - os=-sysv4 + os=sysv4 ;; *-masscomp) - os=-rtu + os=rtu ;; f30[01]-fujitsu | f700-fujitsu) - os=-uxpv + os=uxpv ;; *-rom68k) - os=-coff + os=coff ;; *-*bug) - os=-coff + os=coff ;; *-apple) - os=-macos + os=macos ;; *-atari*) - os=-mint + os=mint + ;; + *-wrs) + os=vxworks ;; *) - os=-none + os=none ;; esac + fi +# Now, validate our (potentially fixed-up) OS. +case $os in + # Sometimes we do "kernel-abi", so those need to count as OSes. + musl* | newlib* | uclibc*) + ;; + # Likewise for "kernel-libc" + eabi | eabihf | gnueabi | gnueabihf) + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ + | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ + | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ + | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ + | hiux* | abug | nacl* | netware* | windows* \ + | os9* | macos* | osx* | ios* \ + | mpw* | magic* | mmixware* | mon960* | lnews* \ + | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ + | aos* | aros* | cloudabi* | sortix* | twizzler* \ + | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ + | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ + | mirbsd* | netbsd* | dicos* | openedition* | ose* \ + | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \ + | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ + | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ + | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | udi* | lites* | ieee* | go32* | aux* | hcos* \ + | chorusrdb* | cegcc* | glidix* \ + | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | midipix* | mingw32* | mingw64* | mint* \ + | uxpv* | beos* | mpeix* | udk* | moxiebox* \ + | interix* | uwin* | mks* | rhapsody* | darwin* \ + | openstep* | oskit* | conix* | pw32* | nonstopux* \ + | storm-chaos* | tops10* | tenex* | tops20* | its* \ + | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ + | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ + | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ + | skyos* | haiku* | rdos* | toppers* | drops* | es* \ + | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ + | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ + | nsk* | powerunix* | genode* | zvmoe* | qnx* ) + ;; + # This one is extra strict with allowed versions + sco3.2v2 | sco3.2v[4-9]* | sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + ;; + none) + ;; + *) + echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2 + exit 1 + ;; +esac + +# As a final step for OS-related things, validate the OS-kernel combination +# (given a valid OS), if there is a kernel. +case $kernel-$os in + linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* ) + ;; + -dietlibc* | -newlib* | -musl* | -uclibc* ) + # These are just libc implementations, not actual OSes, and thus + # require a kernel. + echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 + exit 1 + ;; + kfreebsd*-gnu* | kopensolaris*-gnu*) + ;; + nto-qnx*) + ;; + *-eabi* | *-gnueabi*) + ;; + -*) + # Blank kernel with real OS is always fine. + ;; + *-*) + echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 + exit 1 + ;; +esac + # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) +case $vendor in + unknown) + case $cpu-$os in + *-riscix*) vendor=acorn ;; - -sunos*) + *-sunos*) vendor=sun ;; - -cnk*|-aix*) + *-cnk* | *-aix*) vendor=ibm ;; - -beos*) + *-beos*) vendor=be ;; - -hpux*) + *-hpux*) vendor=hp ;; - -mpeix*) + *-mpeix*) vendor=hp ;; - -hiux*) + *-hiux*) vendor=hitachi ;; - -unos*) + *-unos*) vendor=crds ;; - -dgux*) + *-dgux*) vendor=dg ;; - -luna*) + *-luna*) vendor=omron ;; - -genix*) + *-genix*) vendor=ns ;; - -mvs* | -opened*) + *-clix*) + vendor=intergraph + ;; + *-mvs* | *-opened*) vendor=ibm ;; - -os400*) + *-os400*) vendor=ibm ;; - -ptx*) + s390-* | s390x-*) + vendor=ibm + ;; + *-ptx*) vendor=sequent ;; - -tpf*) + *-tpf*) vendor=ibm ;; - -vxsim* | -vxworks* | -windiss*) + *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; - -aux*) + *-aux*) vendor=apple ;; - -hms*) + *-hms*) vendor=hitachi ;; - -mpw* | -macos*) + *-mpw* | *-macos*) vendor=apple ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; - -vos*) + *-vos*) vendor=stratus ;; esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac -echo $basic_machine$os +echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/depends/funcs.mk b/depends/funcs.mk index 35ca5abcf..0649fae1c 100644 --- a/depends/funcs.mk +++ b/depends/funcs.mk @@ -19,32 +19,19 @@ define int_get_all_dependencies $(sort $(foreach dep,$(2),$(2) $(call int_get_all_dependencies,$(1),$($(dep)_dependencies)))) endef +define download_and_check_file +($(build_DOWNLOAD) "$(1)/$(2).temp" $(3) && echo "$(4) $(1)/$(2).temp" > $(1)/.$(2).hash && $(build_SHA256SUM) -c $(1)/.$(2).hash) +endef + define fetch_file (test -f $$($(1)_source_dir)/$(4) || \ ( mkdir -p $$($(1)_download_dir) && echo Fetching $(1)... && \ - ( $(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(PRIORITY_DOWNLOAD_PATH)/$(4)" || \ - $(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(2)/$(3)" ) && \ - echo "$(5) $$($(1)_download_dir)/$(4).temp" > $$($(1)_download_dir)/.$(4).hash && \ - $(build_SHA256SUM) -c $$($(1)_download_dir)/.$(4).hash && \ + ( $(call download_and_check_file,$$($(1)_download_dir),$(4),"$(2)/$(3)",$(5)) || \ + $(call download_and_check_file,$$($(1)_download_dir),$(4),"$(FALLBACK_DOWNLOAD_PATH)/$(4)",$(5)) ) && \ mv $$($(1)_download_dir)/$(4).temp $$($(1)_source_dir)/$(4) && \ rm -rf $$($(1)_download_dir) )) endef -define generate_crate_checksum -$(BASEDIR)/cargo-checksum.sh "$($(1)_file_name)" "$(build_SHA256SUM)" "\"$($(1)_sha256_hash)\"" -endef - -define generate_unpackaged_crate_checksum -$(BASEDIR)/cargo-checksum.sh "$($(1)_file_name)" "$(build_SHA256SUM)" "null" -endef - -define vendor_crate_source -mkdir -p $($(1)_staging_prefix_dir)/$(CRATE_REGISTRY) && \ -cp -r $($(1)_extract_dir) $($(1)_staging_prefix_dir)/$(CRATE_REGISTRY)/$($(1)_crate_versioned_name) && \ -cd $($(1)_staging_prefix_dir)/$(CRATE_REGISTRY)/$($(1)_crate_versioned_name) && \ -rm -r `basename $($(1)_patch_dir)` .stamp_* .$($(1)_file_name).hash -endef - define int_get_build_recipe_hash $(eval $(1)_all_file_checksums:=$(shell $(build_SHA256SUM) $(meta_depends) packages/$(1).mk $(addprefix $(PATCHES_PATH)/$(1)/,$($(1)_patches)) | cut -d" " -f1)) $(eval $(1)_recipe_hash:=$(shell echo -n "$($(1)_all_file_checksums)" | $(build_SHA256SUM) | cut -d" " -f1)) @@ -52,19 +39,19 @@ endef define int_get_build_id $(eval $(1)_dependencies += $($(1)_$(host_arch)_$(host_os)_dependencies) $($(1)_$(host_os)_dependencies)) -$(eval $(1)_all_dependencies:=$(call int_get_all_dependencies,$(1),$($($(1)_type)_native_toolchain) $($(1)_dependencies))) +$(eval $(1)_all_dependencies:=$(call int_get_all_dependencies,$(1),$($($(1)_type)_native_toolchain) $($($(1)_type)_native_binutils) $($(1)_dependencies))) $(foreach dep,$($(1)_all_dependencies),$(eval $(1)_build_id_deps+=$(dep)-$($(dep)_version)-$($(dep)_recipe_hash))) $(eval $(1)_build_id_long:=$(1)-$($(1)_version)-$($(1)_recipe_hash)-$(release_type) $($(1)_build_id_deps)) $(eval $(1)_build_id:=$(shell echo -n "$($(1)_build_id_long)" | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH))) final_build_id_long+=$($(package)_build_id_long) #override platform specific files and hashes -$(eval $(1)_file_name=$(if $($(1)_exact_file_name),$($(1)_exact_file_name),$(if $($(1)_file_name_$(host_os)),$($(1)_file_name_$(host_os)),$($(1)_file_name)))) -$(eval $(1)_sha256_hash=$(if $($(1)_exact_sha256_hash),$($(1)_exact_sha256_hash),$(if $($(1)_sha256_hash_$(host_os)),$($(1)_sha256_hash_$(host_os)),$($(1)_sha256_hash)))) +$(eval $(1)_file_name=$(if $($(1)_exact_file_name),$($(1)_exact_file_name),$(if $($(1)_file_name_$(host_arch)_$(host_os)),$($(1)_file_name_$(host_arch)_$(host_os)),$(if $($(1)_file_name_$(host_os)),$($(1)_file_name_$(host_os)),$($(1)_file_name))))) +$(eval $(1)_sha256_hash=$(if $($(1)_exact_sha256_hash),$($(1)_exact_sha256_hash),$(if $($(1)_sha256_hash_$(host_arch)_$(host_os)),$($(1)_sha256_hash_$(host_arch)_$(host_os)),$(if $($(1)_sha256_hash_$(host_os)),$($(1)_sha256_hash_$(host_os)),$($(1)_sha256_hash))))) +$(eval $(1)_download_file=$(if $($(1)_exact_download_file),$($(1)_exact_download_file),$(if $($(1)_download_file_$(host_arch)_$(host_os)),$($(1)_download_file_$(host_arch)_$(host_os)),$(if $($(1)_download_file_$(host_os)),$($(1)_download_file_$(host_os)),$(if $($(1)_download_file),$($(1)_download_file),$($(1)_file_name)))))) #compute package-specific paths $(1)_build_subdir?=. -$(1)_download_file?=$($(1)_file_name) $(1)_source_dir:=$(SOURCES_PATH) $(1)_source:=$$($(1)_source_dir)/$($(1)_file_name) $(1)_staging_dir=$(base_staging_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id) @@ -148,7 +135,7 @@ $(1)_config_env+=PKG_CONFIG_PATH=$($($(1)_type)_prefix)/share/pkgconfig $(1)_config_env+=PATH="$(build_prefix)/bin:$(PATH)" $(1)_build_env+=PATH="$(build_prefix)/bin:$(PATH)" $(1)_stage_env+=PATH="$(build_prefix)/bin:$(PATH)" -$(1)_autoconf=./configure --host=$($($(1)_type)_host) --disable-dependency-tracking --prefix=$($($(1)_type)_prefix) $$($(1)_config_opts) CC="$$($(1)_cc)" CXX="$$($(1)_cxx)" +$(1)_autoconf=./configure --host=$($($(1)_type)_host) --prefix=$($($(1)_type)_prefix) $$($(1)_config_opts) CC="$$($(1)_cc)" CXX="$$($(1)_cxx)" ifneq ($($(1)_nm),) $(1)_autoconf += NM="$$($(1)_nm)" @@ -258,4 +245,4 @@ $(foreach package,$(all_packages),$(eval $(call int_config_attach_build_config,$ $(foreach package,$(all_packages),$(eval $(call int_add_cmds,$(package)))) #special exception: if a toolchain package exists, all non-native packages depend on it -$(foreach package,$(packages),$(eval $($(package)_unpacked): |$($($(host_arch)_$(host_os)_native_toolchain)_cached) )) +$(foreach package,$(packages),$(eval $($(package)_unpacked): |$($($(host_arch)_$(host_os)_native_toolchain)_cached) $($($(host_arch)_$(host_os)_native_binutils)_cached) )) diff --git a/depends/hosts/darwin.mk b/depends/hosts/darwin.mk index 939988197..7c0ad99df 100644 --- a/depends/hosts/darwin.mk +++ b/depends/hosts/darwin.mk @@ -1,17 +1,44 @@ -OSX_MIN_VERSION=10.8 -OSX_SDK_VERSION=10.11 -OSX_SDK=$(SDK_PATH)/MacOSX$(OSX_SDK_VERSION).sdk -LD64_VERSION=253.9 -darwin_CC=clang -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION) -darwin_CXX=clang++ -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION) -stdlib=libc++ +OSX_MIN_VERSION=10.12 +OSX_SDK_VERSION=10.15.1 +XCODE_VERSION=11.3.1 +XCODE_BUILD_ID=11C505 +LD64_VERSION=530 + +OSX_SDK=$(SDK_PATH)/Xcode-$(XCODE_VERSION)-$(XCODE_BUILD_ID)-extracted-SDK-with-libcxx-headers + +# Flag explanations: +# +# -mlinker-version +# +# Ensures that modern linker features are enabled. See here for more +# details: https://github.com/bitcoin/bitcoin/pull/19407. +# +# -B$(build_prefix)/bin +# +# Explicitly point to our binaries (e.g. cctools) so that they are +# ensured to be found and preferred over other possibilities. +# +# -nostdinc++ -isystem $(OSX_SDK)/usr/include/c++/v1 +# +# Forces clang to use the libc++ headers from our SDK and completely +# forget about the libc++ headers from the standard directories +# +# TODO: Once we start requiring a clang version that has the +# -stdlib++-isystem flag first introduced here: +# https://reviews.llvm.org/D64089, we should use that instead. Read the +# differential summary there for more details. +# +darwin_CC=clang -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION) -B$(build_prefix)/bin +darwin_CXX=clang++ -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -stdlib=libc++ -mlinker-version=$(LD64_VERSION) -B$(build_prefix)/bin -nostdinc++ -isystem $(OSX_SDK)/usr/include/c++/v1 darwin_CFLAGS=-pipe darwin_CXXFLAGS=$(darwin_CFLAGS) -darwin_release_CFLAGS=-O1 +darwin_release_CFLAGS=-O3 darwin_release_CXXFLAGS=$(darwin_release_CFLAGS) darwin_debug_CFLAGS=-O1 darwin_debug_CXXFLAGS=$(darwin_debug_CFLAGS) +darwin_native_binutils=native_cctools darwin_native_toolchain=native_cctools diff --git a/depends/hosts/default.mk b/depends/hosts/default.mk index 6f60d6b3f..a6f0f3a56 100644 --- a/depends/hosts/default.mk +++ b/depends/hosts/default.mk @@ -1,12 +1,22 @@ -default_host_CC = $(host_toolchain)gcc -default_host_CXX = $(host_toolchain)g++ -default_host_AR = $(host_toolchain)ar -default_host_RANLIB = $(host_toolchain)ranlib -default_host_STRIP = $(host_toolchain)strip +# Flag explanations: +# +# -B$(build_prefix)/bin +# +# Explicitly point to our binaries (e.g. cctools) so that they are +# ensured to be found and preferred over other possibilities. +# +default_host_CC = clang -target $(host) -B$(build_prefix)/bin +default_host_CXX = clang++ -target $(host) -B$(build_prefix)/bin -stdlib=libc++ +default_host_AR = llvm-ar +default_host_RANLIB = llvm-ranlib +default_host_STRIP = llvm-strip default_host_LIBTOOL = $(host_toolchain)libtool default_host_INSTALL_NAME_TOOL = $(host_toolchain)install_name_tool default_host_OTOOL = $(host_toolchain)otool -default_host_NM = $(host_toolchain)nm +default_host_NM = llvm-nm + +$(host_os)_native_binutils?=native_clang +$(host_os)_native_toolchain?=native_clang define add_host_tool_func $(host_os)_$1?=$$(default_host_$1) diff --git a/depends/hosts/freebsd.mk b/depends/hosts/freebsd.mk index 07436aef8..964d21033 100644 --- a/depends/hosts/freebsd.mk +++ b/depends/hosts/freebsd.mk @@ -1,7 +1,7 @@ freebsd_CFLAGS=-pipe freebsd_CXXFLAGS=$(freebsd_CFLAGS) -freebsd_release_CFLAGS=-O1 +freebsd_release_CFLAGS=-O3 freebsd_release_CXXFLAGS=$(freebsd_release_CFLAGS) freebsd_debug_CFLAGS=-O1 @@ -9,23 +9,12 @@ freebsd_debug_CXXFLAGS=$(freebsd_debug_CFLAGS) freebsd_debug_CPPFLAGS=-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC -ifeq (86,$(findstring 86,$(build_arch))) -i686_freebsd_CC=gcc -m32 -i686_freebsd_CXX=g++ -m32 -i686_freebsd_AR=ar -i686_freebsd_RANLIB=ranlib -i686_freebsd_NM=nm -i686_freebsd_STRIP=strip +# Changes below have not been tested. If you try to build on FreeBSD, +# please let us know how it goes. + +freebsd_LDFLAGS?=-fuse-ld=lld -x86_64_freebsd_CC=gcc -m64 -x86_64_freebsd_CXX=g++ -m64 -x86_64_freebsd_AR=ar -x86_64_freebsd_RANLIB=ranlib -x86_64_freebsd_NM=nm -x86_64_freebsd_STRIP=strip -else i686_freebsd_CC=$(default_host_CC) -m32 i686_freebsd_CXX=$(default_host_CXX) -m32 x86_64_freebsd_CC=$(default_host_CC) -m64 x86_64_freebsd_CXX=$(default_host_CXX) -m64 -endif diff --git a/depends/hosts/linux.mk b/depends/hosts/linux.mk index 31748d662..50d30e384 100644 --- a/depends/hosts/linux.mk +++ b/depends/hosts/linux.mk @@ -1,7 +1,7 @@ linux_CFLAGS=-pipe linux_CXXFLAGS=$(linux_CFLAGS) -linux_release_CFLAGS=-O1 +linux_release_CFLAGS=-O3 linux_release_CXXFLAGS=$(linux_release_CFLAGS) linux_debug_CFLAGS=-O1 @@ -9,23 +9,17 @@ linux_debug_CXXFLAGS=$(linux_debug_CFLAGS) linux_debug_CPPFLAGS=-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC -ifeq (86,$(findstring 86,$(build_arch))) -i686_linux_CC=gcc -m32 -i686_linux_CXX=g++ -m32 -i686_linux_AR=ar -i686_linux_RANLIB=ranlib -i686_linux_NM=nm -i686_linux_STRIP=strip +linux_LDFLAGS?=-fuse-ld=lld -x86_64_linux_CC=gcc -m64 -x86_64_linux_CXX=g++ -m64 -x86_64_linux_AR=ar -x86_64_linux_RANLIB=ranlib -x86_64_linux_NM=nm -x86_64_linux_STRIP=strip -else i686_linux_CC=$(default_host_CC) -m32 i686_linux_CXX=$(default_host_CXX) -m32 x86_64_linux_CC=$(default_host_CC) -m64 x86_64_linux_CXX=$(default_host_CXX) -m64 + +# Clang doesn't appear to find these multilib paths by default, +# so help it out if we are cross-compiling. +ifneq ($(canonical_host),$(build)) + # CFLAGS is copied to CXXFLAGS after it is fully-evaluated. + linux_CFLAGS += -idirafter /usr/$(host)/include + linux_LDFLAGS += -L/usr/$(host)/lib endif diff --git a/depends/hosts/mingw32.mk b/depends/hosts/mingw32.mk index 2248973a1..bf26c2cb1 100644 --- a/depends/hosts/mingw32.mk +++ b/depends/hosts/mingw32.mk @@ -1,7 +1,9 @@ mingw32_CFLAGS=-pipe -mingw32_CXXFLAGS=$(mingw32_CFLAGS) +mingw32_CXXFLAGS=$(mingw32_CFLAGS) -isystem $(host_prefix)/include/c++/v1 -mingw32_release_CFLAGS=-O1 +mingw32_LDFLAGS?=-fuse-ld=lld + +mingw32_release_CFLAGS=-O3 mingw32_release_CXXFLAGS=$(mingw32_release_CFLAGS) mingw32_debug_CFLAGS=-O1 diff --git a/depends/packages.md b/depends/packages.md index 7d2bd4670..14bb8f3d9 100644 --- a/depends/packages.md +++ b/depends/packages.md @@ -5,6 +5,9 @@ The package "mylib" will be used here as an example General tips: - mylib_foo is written as $(package)_foo in order to make recipes more similar. +- Secondary dependency packages relative to the Zcash binaries/libraries (i.e. + those not in `ALLOWED_LIBRARIES` in `contrib/devtools/symbol-check.py`) should + be built statically. See [below](#secondary-dependencies) for more details. ## Identifiers Each package is required to define at least these variables: @@ -146,3 +149,38 @@ $($(package)_config_opts) will be appended. Most autotools projects can be properly staged using: $(MAKE) DESTDIR=$($(package)_staging_dir) install + +## Build outputs: + +In general, the output of a depends package should not contain any libtool +archives. Instead, the package should output `.pc` (`pkg-config`) files where +possible. + +From the [Gentoo Wiki entry](https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Handling_Libtool_Archives): + +> Libtool pulls in all direct and indirect dependencies into the .la files it +> creates. This leads to massive overlinking, which is toxic to the Gentoo +> ecosystem, as it leads to a massive number of unnecessary rebuilds. + +## Secondary dependencies: + +Secondary dependency packages relative to the Zcash binaries/libraries (i.e. +those not in `ALLOWED_LIBRARIES` in `contrib/devtools/symbol-check.py`) +should be built statically. The arguments for statically linking secondary +dependencies are similar to those for primary dependencies: it is preferable +for promptness of security updates; consensus compatibility; ease of +debugging and reproduction of user issues; avoiding unintended breakage +due to incompatible changes; and portability across OS distributions. It also +improves general build reliability as illustrated by the following example: + +When linking an executable against a shared library `libprimary` that has its +own shared dependency `libsecondary`, we may need to specify the path to +`libsecondary` on the link command using the `-rpath/-rpath-link` options, it is +not sufficient to just say `libprimary`. + +For us, it's much easier to just link a static `libsecondary` into a shared +`libprimary`. Especially because in our case, we are linking against a dummy +`libprimary` anyway that we'll throw away. We don't care if the end-user has a +static or dynamic `libseconday`, that's not our concern. With a static +`libseconday`, when we need to link `libprimary` into our executable, there's no +dependency chain to worry about as `libprimary` has all the symbols. diff --git a/depends/packages/bdb.mk b/depends/packages/bdb.mk index 539fa873e..5a5950059 100644 --- a/depends/packages/bdb.mk +++ b/depends/packages/bdb.mk @@ -4,9 +4,14 @@ $(package)_download_path=https://download.oracle.com/berkeley-db $(package)_file_name=db-$($(package)_version).tar.gz $(package)_sha256_hash=47612c8991aa9ac2f6be721267c8d3cdccf5ac83105df8e50809daea24e95dc7 $(package)_build_subdir=build_unix +$(package)_patches=winioctl-and-atomic_init_db.patch + +ifneq ($(host_os),darwin) +$(package)_dependencies=libcxx +endif define $(package)_set_vars -$(package)_config_opts=--disable-shared --enable-cxx --disable-replication +$(package)_config_opts=--disable-shared --enable-cxx --disable-replication --enable-option-checking $(package)_config_opts_mingw32=--enable-mingw $(package)_config_opts_linux=--with-pic $(package)_config_opts_freebsd=--with-pic @@ -14,13 +19,12 @@ ifneq ($(build_os),darwin) $(package)_config_opts_darwin=--disable-atomicsupport endif $(package)_config_opts_aarch64=--disable-atomicsupport -$(package)_cxxflags=-std=c++11 +$(package)_cxxflags+=-std=c++17 +$(package)_ldflags+=-static-libstdc++ -lc++abi endef define $(package)_preprocess_cmds - sed -i.old 's/WinIoCtl.h/winioctl.h/g' src/dbinc/win_db.h && \ - sed -i.old 's/__atomic_compare_exchange\\(/__atomic_compare_exchange_db(/' src/dbinc/atomic.h && \ - sed -i.old 's/atomic_init/atomic_init_db/' src/dbinc/atomic.h src/mp/mp_region.c src/mp/mp_mvcc.c src/mp/mp_fget.c src/mutex/mut_method.c src/mutex/mut_tas.c + patch -p1 <$($(package)_patch_dir)/winioctl-and-atomic_init_db.patch endef define $(package)_config_cmds @@ -32,5 +36,11 @@ define $(package)_build_cmds endef define $(package)_stage_cmds - $(MAKE) DESTDIR=$($(package)_staging_dir) install_lib install_include + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + cd $(BASEDIR)/../zcutil && \ + mkdir -p bin && \ + mv -f $($(package)_staging_dir)$(host_prefix)/bin/db_* bin endef diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk index ff0deb9be..c99846d0c 100644 --- a/depends/packages/boost.mk +++ b/depends/packages/boost.mk @@ -1,9 +1,13 @@ package=boost -$(package)_version=1_70_0 -$(package)_download_path=https://dl.bintray.com/boostorg/release/1.70.0/source +$(package)_version=1_74_0 +$(package)_download_path=https://dl.bintray.com/boostorg/release/1.74.0/source $(package)_file_name=$(package)_$($(package)_version).tar.bz2 -$(package)_sha256_hash=430ae8354789de4fd19ee52f3b1f739e1fba576f0aded0897c3c2bc00fb38778 -$(package)_patches=darwin.diff +$(package)_sha256_hash=83bfc1507731a0906e387fc28b7ef5417d591429e51e788417fe9ff025e116b1 +$(package)_patches=iostreams-106.patch signals2-noise.patch + +ifneq ($(host_os),darwin) +$(package)_dependencies=libcxx +endif define $(package)_set_vars $(package)_config_opts_release=variant=release @@ -16,18 +20,20 @@ $(package)_config_opts_mingw32=binary-format=pe target-os=windows threadapi=win3 $(package)_config_opts_x86_64_mingw32=address-model=64 $(package)_config_opts_i686_mingw32=address-model=32 $(package)_config_opts_i686_linux=address-model=32 architecture=x86 -$(package)_toolset_$(host_os)=gcc +$(package)_toolset_$(host_os)=clang $(package)_archiver_$(host_os)=$($(package)_ar) $(package)_toolset_darwin=darwin $(package)_archiver_darwin=$($(package)_libtool) $(package)_config_libraries=chrono,filesystem,program_options,system,thread,test -$(package)_cxxflags=-std=c++11 -fvisibility=hidden +$(package)_cxxflags+=-std=c++17 -fvisibility=hidden $(package)_cxxflags_linux=-fPIC $(package)_cxxflags_freebsd=-fPIC +$(package)_ldflags+=-static-libstdc++ -lc++abi endef define $(package)_preprocess_cmds - patch -p1 < $($(package)_patch_dir)/darwin.diff + patch -p2 < $($(package)_patch_dir)/iostreams-106.patch && \ + patch -p2 < $($(package)_patch_dir)/signals2-noise.patch endef define $(package)_config_cmds @@ -42,3 +48,12 @@ endef define $(package)_stage_cmds ./b2 -d0 -j4 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) install endef + +# Boost uses the MSVC convention of libboost_foo.lib as the naming pattern when +# compiling for Windows, even though we use MinGW which follows the libfoo.a +# convention. This causes issues with lld, so we rename all .lib files to .a. +ifeq ($(host_os),mingw32) +define $(package)_postprocess_cmds + for f in lib/*.lib; do mv -- "$$$$f" "$$$${f%.lib}.a"; done +endef +endif diff --git a/depends/packages/crate_aes.mk b/depends/packages/crate_aes.mk deleted file mode 100644 index 0e2a29392..000000000 --- a/depends/packages/crate_aes.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_aes -$(package)_crate_name=aes -$(package)_version=0.3.2 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=54eb1d8fe354e5fc611daf4f2ea97dd45a765f4f1e4512306ec183ae2e8f20c9 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_aes_soft.mk b/depends/packages/crate_aes_soft.mk deleted file mode 100644 index 5dcd153ee..000000000 --- a/depends/packages/crate_aes_soft.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_aes_soft -$(package)_crate_name=aes-soft -$(package)_version=0.3.3 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=cfd7e7ae3f9a1fb5c03b389fc6bb9a51400d0c13053f0dca698c832bfd893a0d -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_aesni.mk b/depends/packages/crate_aesni.mk deleted file mode 100644 index dfd93bce2..000000000 --- a/depends/packages/crate_aesni.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_aesni -$(package)_crate_name=aesni -$(package)_version=0.6.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=2f70a6b5f971e473091ab7cfb5ffac6cde81666c4556751d8d5620ead8abf100 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_arrayref.mk b/depends/packages/crate_arrayref.mk deleted file mode 100644 index 186f5e77b..000000000 --- a/depends/packages/crate_arrayref.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_arrayref -$(package)_crate_name=arrayref -$(package)_version=0.3.5 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_arrayvec.mk b/depends/packages/crate_arrayvec.mk deleted file mode 100644 index faa3b4f55..000000000 --- a/depends/packages/crate_arrayvec.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_arrayvec -$(package)_crate_name=arrayvec -$(package)_version=0.4.11 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=b8d73f9beda665eaa98ab9e4f7442bd4e7de6652587de55b2525e52e29c1b0ba -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_autocfg.mk b/depends/packages/crate_autocfg.mk deleted file mode 100644 index 1b36846ed..000000000 --- a/depends/packages/crate_autocfg.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_autocfg -$(package)_crate_name=autocfg -$(package)_version=0.1.6 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_bellman.mk b/depends/packages/crate_bellman.mk deleted file mode 100644 index 49f63e5b4..000000000 --- a/depends/packages/crate_bellman.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_bellman -$(package)_crate_name=bellman -$(package)_version=0.6.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=2be536193834affcd8a6d362963e66dec8c6bca4d2009f5bac55ec9002776ff2 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_bigint.mk b/depends/packages/crate_bigint.mk deleted file mode 100644 index 6dae98362..000000000 --- a/depends/packages/crate_bigint.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_bigint -$(package)_crate_name=bigint -$(package)_version=4.4.1 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=ebecac13b3c745150d7b6c3ea7572d372f09d627c2077e893bf26c5c7f70d282 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_bit_vec.mk b/depends/packages/crate_bit_vec.mk deleted file mode 100644 index 40575088e..000000000 --- a/depends/packages/crate_bit_vec.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_bit_vec -$(package)_crate_name=bit-vec -$(package)_version=0.4.4 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=02b4ff8b16e6076c3e14220b39fbc1fabb6737522281a388998046859400895f -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_blake2b_simd.mk b/depends/packages/crate_blake2b_simd.mk deleted file mode 100644 index c9e3ce0c8..000000000 --- a/depends/packages/crate_blake2b_simd.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_blake2b_simd -$(package)_crate_name=blake2b_simd -$(package)_version=0.5.8 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=5850aeee1552f495dd0250014cf64b82b7c8879a89d83b33bbdace2cc4f63182 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_blake2s_simd.mk b/depends/packages/crate_blake2s_simd.mk deleted file mode 100644 index bea01c9b1..000000000 --- a/depends/packages/crate_blake2s_simd.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_blake2s_simd -$(package)_crate_name=blake2s_simd -$(package)_version=0.5.8 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=979da0ce13c897d6be19e005ea77ac12b0fea0157aeeee7feb8c49f91386f0ea -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_block_buffer.mk b/depends/packages/crate_block_buffer.mk deleted file mode 100644 index 26d0b5e48..000000000 --- a/depends/packages/crate_block_buffer.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_block_buffer -$(package)_crate_name=block-buffer -$(package)_version=0.7.3 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_block_cipher_trait.mk b/depends/packages/crate_block_cipher_trait.mk deleted file mode 100644 index 553bd52a9..000000000 --- a/depends/packages/crate_block_cipher_trait.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_block_cipher_trait -$(package)_crate_name=block-cipher-trait -$(package)_version=0.6.2 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=1c924d49bd09e7c06003acda26cd9742e796e34282ec6c1189404dee0c1f4774 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_block_padding.mk b/depends/packages/crate_block_padding.mk deleted file mode 100644 index 310a14cf6..000000000 --- a/depends/packages/crate_block_padding.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_block_padding -$(package)_crate_name=block-padding -$(package)_version=0.1.4 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_byte_tools.mk b/depends/packages/crate_byte_tools.mk deleted file mode 100644 index a5dff7279..000000000 --- a/depends/packages/crate_byte_tools.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_byte_tools -$(package)_crate_name=byte-tools -$(package)_version=0.3.1 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_byteorder.mk b/depends/packages/crate_byteorder.mk deleted file mode 100644 index cd991687d..000000000 --- a/depends/packages/crate_byteorder.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_byteorder -$(package)_crate_name=byteorder -$(package)_version=1.3.2 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_c2_chacha.mk b/depends/packages/crate_c2_chacha.mk deleted file mode 100644 index fe29c2101..000000000 --- a/depends/packages/crate_c2_chacha.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_c2_chacha -$(package)_crate_name=c2-chacha -$(package)_version=0.2.2 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=7d64d04786e0f528460fc884753cf8dddcc466be308f6026f8e355c41a0e4101 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_cfg_if.mk b/depends/packages/crate_cfg_if.mk deleted file mode 100644 index af67660f9..000000000 --- a/depends/packages/crate_cfg_if.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_cfg_if -$(package)_crate_name=cfg-if -$(package)_version=0.1.9 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_constant_time_eq.mk b/depends/packages/crate_constant_time_eq.mk deleted file mode 100644 index 2ed631238..000000000 --- a/depends/packages/crate_constant_time_eq.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_constant_time_eq -$(package)_crate_name=constant_time_eq -$(package)_version=0.1.4 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=995a44c877f9212528ccc74b21a232f66ad69001e40ede5bcee2ac9ef2657120 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_crossbeam.mk b/depends/packages/crate_crossbeam.mk deleted file mode 100644 index 144f35007..000000000 --- a/depends/packages/crate_crossbeam.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_crossbeam -$(package)_crate_name=crossbeam -$(package)_version=0.7.2 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=2d818a4990769aac0c7ff1360e233ef3a41adcb009ebb2036bf6915eb0f6b23c -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_crossbeam_channel.mk b/depends/packages/crate_crossbeam_channel.mk deleted file mode 100644 index 618268f41..000000000 --- a/depends/packages/crate_crossbeam_channel.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_crossbeam_channel -$(package)_crate_name=crossbeam-channel -$(package)_version=0.3.9 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_crossbeam_deque.mk b/depends/packages/crate_crossbeam_deque.mk deleted file mode 100644 index 881a2c75b..000000000 --- a/depends/packages/crate_crossbeam_deque.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_crossbeam_deque -$(package)_crate_name=crossbeam-deque -$(package)_version=0.7.1 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_crossbeam_epoch.mk b/depends/packages/crate_crossbeam_epoch.mk deleted file mode 100644 index b68701642..000000000 --- a/depends/packages/crate_crossbeam_epoch.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_crossbeam_epoch -$(package)_crate_name=crossbeam-epoch -$(package)_version=0.7.2 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_crossbeam_queue.mk b/depends/packages/crate_crossbeam_queue.mk deleted file mode 100644 index 70616caf5..000000000 --- a/depends/packages/crate_crossbeam_queue.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_crossbeam_queue -$(package)_crate_name=crossbeam-queue -$(package)_version=0.1.2 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_crossbeam_utils.mk b/depends/packages/crate_crossbeam_utils.mk deleted file mode 100644 index eabfa26c4..000000000 --- a/depends/packages/crate_crossbeam_utils.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_crossbeam_utils -$(package)_crate_name=crossbeam-utils -$(package)_version=0.6.6 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_crunchy.mk b/depends/packages/crate_crunchy.mk deleted file mode 100644 index d984ba848..000000000 --- a/depends/packages/crate_crunchy.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_crunchy -$(package)_crate_name=crunchy -$(package)_version=0.1.6 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_crypto_api.mk b/depends/packages/crate_crypto_api.mk deleted file mode 100644 index e65f6a659..000000000 --- a/depends/packages/crate_crypto_api.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_crypto_api -$(package)_crate_name=crypto_api -$(package)_version=0.2.2 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=2f855e87e75a4799e18b8529178adcde6fd4f97c1449ff4821e747ff728bb102 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_crypto_api_chachapoly.mk b/depends/packages/crate_crypto_api_chachapoly.mk deleted file mode 100644 index 5ae64dcac..000000000 --- a/depends/packages/crate_crypto_api_chachapoly.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_crypto_api_chachapoly -$(package)_crate_name=crypto_api_chachapoly -$(package)_version=0.2.2 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=95b2ad7cab08fd71addba81df5077c49df208effdfb3118a1519f9cdeac5aaf2 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_digest.mk b/depends/packages/crate_digest.mk deleted file mode 100644 index 63d7c74e1..000000000 --- a/depends/packages/crate_digest.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_digest -$(package)_crate_name=digest -$(package)_version=0.8.1 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_directories.mk b/depends/packages/crate_directories.mk deleted file mode 100644 index 7a3a93d53..000000000 --- a/depends/packages/crate_directories.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_directories -$(package)_crate_name=directories -$(package)_version=1.0.2 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=72d337a64190607d4fcca2cb78982c5dd57f4916e19696b48a575fa746b6cb0f -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_fake_simd.mk b/depends/packages/crate_fake_simd.mk deleted file mode 100644 index 44331b71a..000000000 --- a/depends/packages/crate_fake_simd.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_fake_simd -$(package)_crate_name=fake-simd -$(package)_version=0.1.2 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_ff.mk b/depends/packages/crate_ff.mk deleted file mode 100644 index 05372070e..000000000 --- a/depends/packages/crate_ff.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_ff -$(package)_crate_name=ff -$(package)_version=0.6.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=c4b967a3ee6ae993f0094174257d404a5818f58be79d67a1aea1ec8996d28906 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_ff_derive.mk b/depends/packages/crate_ff_derive.mk deleted file mode 100644 index 2d3440472..000000000 --- a/depends/packages/crate_ff_derive.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_ff_derive -$(package)_crate_name=ff_derive -$(package)_version=0.6.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=a3776aaf60a45037a9c3cabdd8542b38693acaa3e241ff957181b72579d29feb -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_fpe.mk b/depends/packages/crate_fpe.mk deleted file mode 100644 index 12baf031c..000000000 --- a/depends/packages/crate_fpe.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_fpe -$(package)_crate_name=fpe -$(package)_version=0.2.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=21988a326139165b75e3196bc6962ca638e5fb0c95102fbf152a3743174b01e4 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_futures.mk b/depends/packages/crate_futures.mk deleted file mode 100644 index fba10a2a4..000000000 --- a/depends/packages/crate_futures.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_futures -$(package)_crate_name=futures -$(package)_version=0.1.29 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_futures_cpupool.mk b/depends/packages/crate_futures_cpupool.mk deleted file mode 100644 index 0ff2069ed..000000000 --- a/depends/packages/crate_futures_cpupool.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_futures_cpupool -$(package)_crate_name=futures-cpupool -$(package)_version=0.1.8 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_generic_array.mk b/depends/packages/crate_generic_array.mk deleted file mode 100644 index c84854ab8..000000000 --- a/depends/packages/crate_generic_array.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_generic_array -$(package)_crate_name=generic-array -$(package)_version=0.12.3 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_getrandom.mk b/depends/packages/crate_getrandom.mk deleted file mode 100644 index 460ab8b15..000000000 --- a/depends/packages/crate_getrandom.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_getrandom -$(package)_crate_name=getrandom -$(package)_version=0.1.12 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=473a1265acc8ff1e808cd0a1af8cee3c2ee5200916058a2ca113c29f2d903571 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_group.mk b/depends/packages/crate_group.mk deleted file mode 100644 index 6931c7a51..000000000 --- a/depends/packages/crate_group.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_group -$(package)_crate_name=group -$(package)_version=0.6.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=f15be54742789e36f03307c8fdf0621201e1345e94f1387282024178b5e9ec8c -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_hex.mk b/depends/packages/crate_hex.mk deleted file mode 100644 index f93417a30..000000000 --- a/depends/packages/crate_hex.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_hex -$(package)_crate_name=hex -$(package)_version=0.3.2 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_lazy_static.mk b/depends/packages/crate_lazy_static.mk deleted file mode 100644 index 50f4f6ffc..000000000 --- a/depends/packages/crate_lazy_static.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_lazy_static -$(package)_crate_name=lazy_static -$(package)_version=1.4.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_libc.mk b/depends/packages/crate_libc.mk deleted file mode 100644 index a8752b964..000000000 --- a/depends/packages/crate_libc.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_libc -$(package)_crate_name=libc -$(package)_version=0.2.62 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_log.mk b/depends/packages/crate_log.mk deleted file mode 100644 index 3bc1ec01a..000000000 --- a/depends/packages/crate_log.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_log -$(package)_crate_name=log -$(package)_version=0.4.8 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_memoffset.mk b/depends/packages/crate_memoffset.mk deleted file mode 100644 index c4e9fcd27..000000000 --- a/depends/packages/crate_memoffset.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_memoffset -$(package)_crate_name=memoffset -$(package)_version=0.5.1 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=ce6075db033bbbb7ee5a0bbd3a3186bbae616f57fb001c485c7ff77955f8177f -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_nodrop.mk b/depends/packages/crate_nodrop.mk deleted file mode 100644 index 70d589b5c..000000000 --- a/depends/packages/crate_nodrop.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_nodrop -$(package)_crate_name=nodrop -$(package)_version=0.1.13 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_num_bigint.mk b/depends/packages/crate_num_bigint.mk deleted file mode 100644 index 3b97d94f7..000000000 --- a/depends/packages/crate_num_bigint.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_num_bigint -$(package)_crate_name=num-bigint -$(package)_version=0.2.3 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=f9c3f34cdd24f334cb265d9bf8bfa8a241920d026916785747a92f0e55541a1a -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_num_cpus.mk b/depends/packages/crate_num_cpus.mk deleted file mode 100644 index 63e07acfa..000000000 --- a/depends/packages/crate_num_cpus.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_num_cpus -$(package)_crate_name=num_cpus -$(package)_version=1.10.1 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_num_integer.mk b/depends/packages/crate_num_integer.mk deleted file mode 100644 index 5e9c455a5..000000000 --- a/depends/packages/crate_num_integer.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_num_integer -$(package)_crate_name=num-integer -$(package)_version=0.1.41 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_num_traits.mk b/depends/packages/crate_num_traits.mk deleted file mode 100644 index 19d87838f..000000000 --- a/depends/packages/crate_num_traits.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_num_traits -$(package)_crate_name=num-traits -$(package)_version=0.2.8 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_opaque_debug.mk b/depends/packages/crate_opaque_debug.mk deleted file mode 100644 index 7c493bba3..000000000 --- a/depends/packages/crate_opaque_debug.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_opaque_debug -$(package)_crate_name=opaque-debug -$(package)_version=0.2.3 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_pairing.mk b/depends/packages/crate_pairing.mk deleted file mode 100644 index 454b8f106..000000000 --- a/depends/packages/crate_pairing.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_pairing -$(package)_crate_name=pairing -$(package)_version=0.16.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=b8290dea210a712682cd65031dc2b34fd132cf2729def3df7ee08f0737ff5ed6 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_ppv_lite86.mk b/depends/packages/crate_ppv_lite86.mk deleted file mode 100644 index 30641f95a..000000000 --- a/depends/packages/crate_ppv_lite86.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_ppv_lite86 -$(package)_crate_name=ppv-lite86 -$(package)_version=0.2.5 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=e3cbf9f658cdb5000fcf6f362b8ea2ba154b9f146a61c7a20d647034c6b6561b -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_proc_macro2.mk b/depends/packages/crate_proc_macro2.mk deleted file mode 100644 index 4e59111aa..000000000 --- a/depends/packages/crate_proc_macro2.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_proc_macro2 -$(package)_crate_name=proc-macro2 -$(package)_version=1.0.3 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=e98a83a9f9b331f54b924e68a66acb1bb35cb01fb0a23645139967abefb697e8 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_quote.mk b/depends/packages/crate_quote.mk deleted file mode 100644 index 48e0c8ea1..000000000 --- a/depends/packages/crate_quote.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_quote -$(package)_crate_name=quote -$(package)_version=1.0.2 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_rand.mk b/depends/packages/crate_rand.mk deleted file mode 100644 index 7832db1b3..000000000 --- a/depends/packages/crate_rand.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_rand -$(package)_crate_name=rand -$(package)_version=0.7.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=d47eab0e83d9693d40f825f86948aa16eff6750ead4bdffc4ab95b8b3a7f052c -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_rand_chacha.mk b/depends/packages/crate_rand_chacha.mk deleted file mode 100644 index ed2953fab..000000000 --- a/depends/packages/crate_rand_chacha.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_rand_chacha -$(package)_crate_name=rand_chacha -$(package)_version=0.2.1 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_rand_core.mk b/depends/packages/crate_rand_core.mk deleted file mode 100644 index 230b257c9..000000000 --- a/depends/packages/crate_rand_core.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_rand_core -$(package)_crate_name=rand_core -$(package)_version=0.5.1 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_rand_hc.mk b/depends/packages/crate_rand_hc.mk deleted file mode 100644 index 3d5155359..000000000 --- a/depends/packages/crate_rand_hc.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_rand_hc -$(package)_crate_name=rand_hc -$(package)_version=0.2.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_rand_xorshift.mk b/depends/packages/crate_rand_xorshift.mk deleted file mode 100644 index 6daa22805..000000000 --- a/depends/packages/crate_rand_xorshift.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_rand_xorshift -$(package)_crate_name=rand_xorshift -$(package)_version=0.2.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=77d416b86801d23dde1aa643023b775c3a462efc0ed96443add11546cdf1dca8 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_rustc_version.mk b/depends/packages/crate_rustc_version.mk deleted file mode 100644 index f3c7410ee..000000000 --- a/depends/packages/crate_rustc_version.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_rustc_version -$(package)_crate_name=rustc_version -$(package)_version=0.2.3 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_scopeguard.mk b/depends/packages/crate_scopeguard.mk deleted file mode 100644 index a3a778dc4..000000000 --- a/depends/packages/crate_scopeguard.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_scopeguard -$(package)_crate_name=scopeguard -$(package)_version=1.0.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_semver.mk b/depends/packages/crate_semver.mk deleted file mode 100644 index 2ef1ba869..000000000 --- a/depends/packages/crate_semver.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_semver -$(package)_crate_name=semver -$(package)_version=0.9.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_semver_parser.mk b/depends/packages/crate_semver_parser.mk deleted file mode 100644 index 9316860ac..000000000 --- a/depends/packages/crate_semver_parser.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_semver_parser -$(package)_crate_name=semver-parser -$(package)_version=0.7.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_sha2.mk b/depends/packages/crate_sha2.mk deleted file mode 100644 index 344582dbb..000000000 --- a/depends/packages/crate_sha2.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_sha2 -$(package)_crate_name=sha2 -$(package)_version=0.8.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=7b4d8bfd0e469f417657573d8451fb33d16cfe0989359b93baf3a1ffc639543d -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_syn.mk b/depends/packages/crate_syn.mk deleted file mode 100644 index 37593b2e1..000000000 --- a/depends/packages/crate_syn.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_syn -$(package)_crate_name=syn -$(package)_version=1.0.5 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_typenum.mk b/depends/packages/crate_typenum.mk deleted file mode 100644 index f02fa5001..000000000 --- a/depends/packages/crate_typenum.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_typenum -$(package)_crate_name=typenum -$(package)_version=1.11.2 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_unicode_xid.mk b/depends/packages/crate_unicode_xid.mk deleted file mode 100644 index 16f7be517..000000000 --- a/depends/packages/crate_unicode_xid.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_unicode_xid -$(package)_crate_name=unicode-xid -$(package)_version=0.2.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_wasi.mk b/depends/packages/crate_wasi.mk deleted file mode 100644 index 613c52627..000000000 --- a/depends/packages/crate_wasi.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_wasi -$(package)_crate_name=wasi -$(package)_version=0.7.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_winapi.mk b/depends/packages/crate_winapi.mk deleted file mode 100644 index b8f86a00b..000000000 --- a/depends/packages/crate_winapi.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_winapi -$(package)_crate_name=winapi -$(package)_version=0.3.8 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_winapi_i686_pc_windows_gnu.mk b/depends/packages/crate_winapi_i686_pc_windows_gnu.mk deleted file mode 100644 index ff8c5e76f..000000000 --- a/depends/packages/crate_winapi_i686_pc_windows_gnu.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_winapi_i686_pc_windows_gnu -$(package)_crate_name=winapi-i686-pc-windows-gnu -$(package)_version=0.4.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_winapi_x86_64_pc_windows_gnu.mk b/depends/packages/crate_winapi_x86_64_pc_windows_gnu.mk deleted file mode 100644 index 725baf00f..000000000 --- a/depends/packages/crate_winapi_x86_64_pc_windows_gnu.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_winapi_x86_64_pc_windows_gnu -$(package)_crate_name=winapi-x86_64-pc-windows-gnu -$(package)_version=0.4.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_zcash_history.mk b/depends/packages/crate_zcash_history.mk deleted file mode 100644 index fd5570fa4..000000000 --- a/depends/packages/crate_zcash_history.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_zcash_history -$(package)_crate_name=zcash_history -$(package)_version=0.2.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=abfbab9accba014bbf3098d5aa66c1714d0db4abe25b999b8400bbd626ccd2f4 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_zcash_primitives.mk b/depends/packages/crate_zcash_primitives.mk deleted file mode 100644 index 8d22560ff..000000000 --- a/depends/packages/crate_zcash_primitives.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_zcash_primitives -$(package)_crate_name=zcash_primitives -$(package)_version=0.2.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=8f33b9e4f3b4db97234fc79ea67b12f2d5778bde8f3eab6dbba52eb54c596585 -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/crate_zcash_proofs.mk b/depends/packages/crate_zcash_proofs.mk deleted file mode 100644 index c3e40b0f3..000000000 --- a/depends/packages/crate_zcash_proofs.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_zcash_proofs -$(package)_crate_name=zcash_proofs -$(package)_version=0.2.0 -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=2011f78f14d5121248d3b4f921434207b1d870fb3bf2efc7d784cae79b19bfbc -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/googletest.mk b/depends/packages/googletest.mk index 377f6ff27..857f75789 100644 --- a/depends/packages/googletest.mk +++ b/depends/packages/googletest.mk @@ -1,14 +1,19 @@ package=googletest -$(package)_version=1.8.0 +$(package)_version=1.8.1 $(package)_download_path=https://github.com/google/$(package)/archive/ $(package)_file_name=$(package)-$($(package)_version).tar.gz $(package)_download_file=release-$($(package)_version).tar.gz -$(package)_sha256_hash=58a6f4277ca2bc8565222b3bbd58a177609e9c488e8a72649359ba51450db7d8 +$(package)_sha256_hash=9bf1fe5182a604b4135edc1a425ae356c9ad15e9b23f9f12a02e80184c3a249c + +ifneq ($(host_os),darwin) +$(package)_dependencies=libcxx +endif define $(package)_set_vars -$(package)_cxxflags+=-std=c++11 +$(package)_cxxflags+=-std=c++17 $(package)_cxxflags_linux=-fPIC $(package)_cxxflags_freebsd=-fPIC +$(package)_ldflags+=-static-libstdc++ -lc++abi endef define $(package)_build_cmds diff --git a/depends/packages/libcxx.mk b/depends/packages/libcxx.mk new file mode 100644 index 000000000..18df88905 --- /dev/null +++ b/depends/packages/libcxx.mk @@ -0,0 +1,73 @@ +package=libcxx +$(package)_version=$(native_clang_version) + +ifneq ($(canonical_host),$(build)) +ifneq ($(host_os),mingw32) +# Clang is provided pre-compiled for a bunch of targets; fetch the one we need +# and stage its copies of the static libraries. +$(package)_download_path=https://releases.llvm.org/$($(package)_version) +$(package)_download_file_aarch64_linux=clang+llvm-$($(package)_version)-aarch64-linux-gnu.tar.xz +$(package)_file_name_aarch64_linux=clang-llvm-$($(package)_version)-aarch64-linux-gnu.tar.xz +$(package)_sha256_hash_aarch64_linux=998e9ae6e89bd3f029ed031ad9355c8b43441302c0e17603cf1de8ee9939e5c9 +$(package)_download_file_linux=clang+llvm-$($(package)_version)-x86_64-linux-gnu-ubuntu-14.04.tar.xz +$(package)_file_name_linux=clang-llvm-$($(package)_version)-x86_64-linux-gnu-ubuntu-14.04.tar.xz +$(package)_sha256_hash_linux=9ef854b71949f825362a119bf2597f744836cb571131ae6b721cd102ffea8cd0 + +define $(package)_stage_cmds + mkdir -p $($(package)_staging_prefix_dir)/lib && \ + cp lib/libc++.a $($(package)_staging_prefix_dir)/lib && \ + cp lib/libc++abi.a $($(package)_staging_prefix_dir)/lib +endef + +else +# For Windows cross-compilation, use the MSYS2 binaries. +$(package)_download_path=http://repo.msys2.org/mingw/x86_64 +$(package)_download_file=mingw-w64-x86_64-libc++-9.0.1-1-any.pkg.tar.xz +$(package)_file_name=mingw-w64-x86_64-libcxx-9.0.1-1-any.pkg.tar.xz +$(package)_sha256_hash=04e77c5d0e3a9efc9cc8ca3b6549af9a9eef6e20d53076295efbdfba76c5f5de + +$(package)_libcxxabi_download_file=mingw-w64-x86_64-libc++abi-9.0.1-1-any.pkg.tar.xz +$(package)_libcxxabi_file_name=mingw-w64-x86_64-libc++abi-9.0.1-1-any.pkg.tar.xz +$(package)_libcxxabi_sha256_hash=e8a38084dc05c9f6bd4ded4fe1cdbbe16f7280d66426a76b2c3c23d0575aad5c + +$(package)_extra_sources += $($(package)_libcxxabi_file_name) + +define $(package)_fetch_cmds +$(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) && \ +$(call fetch_file,$(package),$($(package)_download_path),$($(package)_libcxxabi_download_file),$($(package)_libcxxabi_file_name),$($(package)_libcxxabi_sha256_hash)) +endef + +define $(package)_extract_cmds + mkdir -p $($(package)_extract_dir) && \ + echo "$($(package)_sha256_hash) $($(package)_source)" > $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + echo "$($(package)_libcxxabi_sha256_hash) $($(package)_source_dir)/$($(package)_libcxxabi_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + $(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + mkdir -p libcxxabi && \ + tar --no-same-owner --strip-components=1 -C libcxxabi -xf $($(package)_source_dir)/$($(package)_libcxxabi_file_name) && \ + tar --no-same-owner --strip-components=1 -xf $($(package)_source) +endef + +define $(package)_stage_cmds + mkdir -p $($(package)_staging_prefix_dir)/lib && \ + mv include/ $($(package)_staging_prefix_dir) && \ + cp lib/libc++.a $($(package)_staging_prefix_dir)/lib && \ + cp libcxxabi/lib/libc++abi.a $($(package)_staging_prefix_dir)/lib +endef +endif + +else +# For native compilation, use the static libraries from native_clang. +# We explicitly stage them so that subsequent dependencies don't link to the +# shared libraries distributed with Clang. +define $(package)_fetch_cmds +endef + +define $(package)_extract_cmds +endef + +define $(package)_stage_cmds + mkdir -p $($(package)_staging_prefix_dir)/lib && \ + cp $(build_prefix)/lib/libc++.a $($(package)_staging_prefix_dir)/lib && \ + cp $(build_prefix)/lib/libc++abi.a $($(package)_staging_prefix_dir)/lib +endef +endif diff --git a/depends/packages/libevent.mk b/depends/packages/libevent.mk index 7119176f2..2930b5e96 100644 --- a/depends/packages/libevent.mk +++ b/depends/packages/libevent.mk @@ -1,19 +1,17 @@ package=libevent -$(package)_version=2.1.8 +$(package)_version=2.1.12 $(package)_download_path=https://github.com/libevent/libevent/archive/ $(package)_file_name=$(package)-$($(package)_version).tar.gz $(package)_download_file=release-$($(package)_version)-stable.tar.gz -$(package)_sha256_hash=316ddb401745ac5d222d7c529ef1eada12f58f6376a66c1118eee803cb70f83d -$(package)_patches=detect-arch4random_addrandom.patch detect-arch4random_addrandom-fix.patch +$(package)_sha256_hash=7180a979aaa7000e1264da484f712d403fcf7679b1e9212c4e3d09f5c93efc24 define $(package)_preprocess_cmds - patch -p1 <$($(package)_patch_dir)/detect-arch4random_addrandom.patch && \ - patch -p1 <$($(package)_patch_dir)/detect-arch4random_addrandom-fix.patch && \ ./autogen.sh endef define $(package)_set_vars $(package)_config_opts=--disable-shared --disable-openssl --disable-libevent-regress + $(package)_config_opts += --disable-dependency-tracking --enable-option-checking $(package)_config_opts_release=--disable-debug-mode $(package)_config_opts_linux=--with-pic $(package)_config_opts_freebsd=--with-pic @@ -32,4 +30,5 @@ define $(package)_stage_cmds endef define $(package)_postprocess_cmds + rm lib/*.la endef diff --git a/depends/packages/native_ccache.mk b/depends/packages/native_ccache.mk index b63c18b90..4c5dde76d 100644 --- a/depends/packages/native_ccache.mk +++ b/depends/packages/native_ccache.mk @@ -1,8 +1,8 @@ package=native_ccache -$(package)_version=3.3.1 -$(package)_download_path=https://www.samba.org/ftp/ccache -$(package)_file_name=ccache-$($(package)_version).tar.bz2 -$(package)_sha256_hash=cb6e4bafbb19ba0a2ec43386b123a5f92a20e1e3384c071d5d13e0cb3c84bf73 +$(package)_version=3.7.12 +$(package)_download_path=https://github.com/ccache/ccache/releases/download/v$($(package)_version) +$(package)_file_name=ccache-$($(package)_version).tar.gz +$(package)_sha256_hash=d2abe88d4c283ce960e233583061127b156ffb027c6da3cf10770fc0c7244194 define $(package)_set_vars $(package)_config_opts= diff --git a/depends/packages/native_cctools.mk b/depends/packages/native_cctools.mk index a065256c1..5febaa3b9 100644 --- a/depends/packages/native_cctools.mk +++ b/depends/packages/native_cctools.mk @@ -1,49 +1,53 @@ package=native_cctools -$(package)_version=807d6fd1be5d2224872e381870c0a75387fe05e6 -$(package)_download_path=https://github.com/theuni/cctools-port/archive +$(package)_version=55562e4073dea0fbfd0b20e0bf69ffe6390c7f97 +$(package)_download_path=https://github.com/tpoechtrager/cctools-port/archive $(package)_file_name=$($(package)_version).tar.gz -$(package)_sha256_hash=a09c9ba4684670a0375e42d9d67e7f12c1f62581a27f28f7c825d6d7032ccc6a +$(package)_sha256_hash=e51995a843533a3dac155dd0c71362dd471597a2d23f13dff194c6285362f875 $(package)_build_subdir=cctools -$(package)_clang_version=3.7.1 -$(package)_clang_download_path=https://llvm.org/releases/$($(package)_clang_version) -$(package)_clang_download_file=clang+llvm-$($(package)_clang_version)-x86_64-linux-gnu-ubuntu-14.04.tar.xz -$(package)_clang_file_name=clang-llvm-$($(package)_clang_version)-x86_64-linux-gnu-ubuntu-14.04.tar.xz -$(package)_clang_sha256_hash=99b28a6b48e793705228a390471991386daa33a9717cd9ca007fcdde69608fd9 -$(package)_extra_sources=$($(package)_clang_file_name) +$(package)_dependencies=native_clang +$(package)_patches=ignore-otool.diff + +$(package)_libtapi_version=3efb201881e7a76a21e0554906cf306432539cef +$(package)_libtapi_download_path=https://github.com/tpoechtrager/apple-libtapi/archive +$(package)_libtapi_download_file=$($(package)_libtapi_version).tar.gz +$(package)_libtapi_file_name=$($(package)_libtapi_version).tar.gz +$(package)_libtapi_sha256_hash=380c1ca37cfa04a8699d0887a8d3ee1ad27f3d08baba78887c73b09485c0fbd3 + +$(package)_extra_sources += $($(package)_libtapi_file_name) define $(package)_fetch_cmds $(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) && \ -$(call fetch_file,$(package),$($(package)_clang_download_path),$($(package)_clang_download_file),$($(package)_clang_file_name),$($(package)_clang_sha256_hash)) +$(call fetch_file,$(package),$($(package)_libtapi_download_path),$($(package)_libtapi_download_file),$($(package)_libtapi_file_name),$($(package)_libtapi_sha256_hash)) endef define $(package)_extract_cmds mkdir -p $($(package)_extract_dir) && \ echo "$($(package)_sha256_hash) $($(package)_source)" > $($(package)_extract_dir)/.$($(package)_file_name).hash && \ - echo "$($(package)_clang_sha256_hash) $($(package)_source_dir)/$($(package)_clang_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + echo "$($(package)_libtapi_sha256_hash) $($(package)_source_dir)/$($(package)_libtapi_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ $(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \ - mkdir -p toolchain/bin toolchain/lib/clang/3.5/include && \ - tar --no-same-owner --strip-components=1 -C toolchain -xf $($(package)_source_dir)/$($(package)_clang_file_name) && \ - rm -f toolchain/lib/libc++abi.so* && \ - echo "#!/bin/sh" > toolchain/bin/$(host)-dsymutil && \ - echo "exit 0" >> toolchain/bin/$(host)-dsymutil && \ - chmod +x toolchain/bin/$(host)-dsymutil && \ + mkdir -p libtapi && \ + tar --no-same-owner --strip-components=1 -C libtapi -xf $($(package)_source_dir)/$($(package)_libtapi_file_name) && \ tar --no-same-owner --strip-components=1 -xf $($(package)_source) endef define $(package)_set_vars -$(package)_config_opts=--target=$(host) --disable-lto-support -$(package)_ldflags+=-Wl,-rpath=\\$$$$$$$$\$$$$$$$$ORIGIN/../lib -$(package)_cc=$($(package)_extract_dir)/toolchain/bin/clang -$(package)_cxx=$($(package)_extract_dir)/toolchain/bin/clang++ + $(package)_config_opts=--target=$(host) --with-libtapi=$($(package)_extract_dir) + $(package)_ldflags+=-Wl,-rpath=\\$$$$$$$$\$$$$$$$$ORIGIN/../lib + $(package)_config_opts+=--enable-lto-support --with-llvm-config=$(build_prefix)/bin/llvm-config + $(package)_cc=$(build_prefix)/bin/clang + $(package)_cxx=$(build_prefix)/bin/clang++ endef define $(package)_preprocess_cmds - cd $($(package)_build_subdir); ./autogen.sh && \ - sed -i.old "/define HAVE_PTHREADS/d" ld64/src/ld/InputFiles.h + patch -p1 < $($(package)_patch_dir)/ignore-otool.diff && \ + cd $($(package)_build_subdir); DO_NOT_UPDATE_CONFIG_SCRIPTS=1 ./autogen.sh endef define $(package)_config_cmds - $($(package)_autoconf) + rm -f $(build_prefix)/lib/libc++abi.so* && \ + CC=$($(package)_cc) CXX=$($(package)_cxx) INSTALLPREFIX=$($(package)_extract_dir) ../libtapi/build.sh && \ + CC=$($(package)_cc) CXX=$($(package)_cxx) INSTALLPREFIX=$($(package)_extract_dir) ../libtapi/install.sh && \ + $($(package)_config_env) $($(package)_autoconf) endef define $(package)_build_cmds @@ -52,14 +56,7 @@ endef define $(package)_stage_cmds $(MAKE) DESTDIR=$($(package)_staging_dir) install && \ - cd $($(package)_extract_dir)/toolchain && \ - mkdir -p $($(package)_staging_prefix_dir)/lib/clang/$($(package)_clang_version)/include && \ - mkdir -p $($(package)_staging_prefix_dir)/bin $($(package)_staging_prefix_dir)/include && \ - cp bin/clang $($(package)_staging_prefix_dir)/bin/ &&\ - cp -P bin/clang++ $($(package)_staging_prefix_dir)/bin/ &&\ - cp lib/libLTO.so $($(package)_staging_prefix_dir)/lib/ && \ - cp -rf lib/clang/$($(package)_clang_version)/include/* $($(package)_staging_prefix_dir)/lib/clang/$($(package)_clang_version)/include/ && \ - cp bin/llvm-dsymutil $($(package)_staging_prefix_dir)/bin/$(host)-dsymutil && \ - if `test -d include/c++/`; then cp -rf include/c++/ $($(package)_staging_prefix_dir)/include/; fi && \ - if `test -d lib/c++/`; then cp -rf lib/c++/ $($(package)_staging_prefix_dir)/lib/; fi + mkdir -p $($(package)_staging_prefix_dir)/lib/ && \ + cd $($(package)_extract_dir) && \ + cp lib/libtapi.so.6 $($(package)_staging_prefix_dir)/lib/ endef diff --git a/depends/packages/native_clang.mk b/depends/packages/native_clang.mk new file mode 100644 index 000000000..dfef49f66 --- /dev/null +++ b/depends/packages/native_clang.mk @@ -0,0 +1,37 @@ +package=native_clang +$(package)_major_version=8 +$(package)_version=8.0.0 +$(package)_download_path=https://releases.llvm.org/$($(package)_version) +$(package)_download_file_linux=clang+llvm-$($(package)_version)-x86_64-linux-gnu-ubuntu-14.04.tar.xz +$(package)_file_name_linux=clang-llvm-$($(package)_version)-x86_64-linux-gnu-ubuntu-14.04.tar.xz +$(package)_sha256_hash_linux=9ef854b71949f825362a119bf2597f744836cb571131ae6b721cd102ffea8cd0 +$(package)_download_file_darwin=clang+llvm-$($(package)_version)-x86_64-apple-darwin.tar.xz +$(package)_file_name_darwin=clang-llvm-$($(package)_version)-x86_64-apple-darwin.tar.xz +$(package)_sha256_hash_darwin=94ebeb70f17b6384e052c47fef24a6d70d3d949ab27b6c83d4ab7b298278ad6f + +# Ensure we have clang native to the builder, not the target host +ifneq ($(canonical_host),$(build)) +$(package)_exact_download_file=$($(package)_download_file_$(build_os)) +$(package)_exact_file_name=$($(package)_file_name_$(build_os)) +$(package)_exact_sha256_hash=$($(package)_sha256_hash_$(build_os)) +endif + +define $(package)_stage_cmds + mkdir -p $($(package)_staging_prefix_dir)/bin && \ + cp bin/clang-$($(package)_major_version) $($(package)_staging_prefix_dir)/bin && \ + cp bin/lld $($(package)_staging_prefix_dir)/bin && \ + cp bin/llvm-ar $($(package)_staging_prefix_dir)/bin && \ + cp bin/llvm-config $($(package)_staging_prefix_dir)/bin && \ + cp bin/llvm-nm $($(package)_staging_prefix_dir)/bin && \ + cp bin/llvm-objcopy $($(package)_staging_prefix_dir)/bin && \ + cp -P bin/clang $($(package)_staging_prefix_dir)/bin && \ + cp -P bin/clang++ $($(package)_staging_prefix_dir)/bin && \ + cp -P bin/ld.lld $($(package)_staging_prefix_dir)/bin && \ + cp -P bin/ld64.lld $($(package)_staging_prefix_dir)/bin && \ + cp -P bin/lld-link $($(package)_staging_prefix_dir)/bin && \ + cp -P bin/llvm-ranlib $($(package)_staging_prefix_dir)/bin && \ + cp -P bin/llvm-strip $($(package)_staging_prefix_dir)/bin && \ + mv include/ $($(package)_staging_prefix_dir) && \ + mv lib/ $($(package)_staging_prefix_dir) && \ + mv libexec/ $($(package)_staging_prefix_dir) +endef diff --git a/depends/packages/rust.mk b/depends/packages/native_rust.mk similarity index 73% rename from depends/packages/rust.mk rename to depends/packages/native_rust.mk index 2546a733e..400cef222 100644 --- a/depends/packages/rust.mk +++ b/depends/packages/native_rust.mk @@ -1,22 +1,23 @@ -package=rust -$(package)_version=1.42.0 +package=native_rust +$(package)_version=1.44.1 $(package)_download_path=https://static.rust-lang.org/dist $(package)_file_name_linux=rust-$($(package)_version)-x86_64-unknown-linux-gnu.tar.gz -$(package)_sha256_hash_linux=7d1e07ad9c8a33d8d039def7c0a131c5917aa3ea0af3d0cc399c6faf7b789052 +$(package)_sha256_hash_linux=a41df89a461a580536aeb42755e43037556fba2e527dd13a1e1bb0749de28202 $(package)_file_name_darwin=rust-$($(package)_version)-x86_64-apple-darwin.tar.gz -$(package)_sha256_hash_darwin=db1055c46e0d54b99da05e88c71fea21b3897e74a4f5ff9390e934f3f050c0a8 +$(package)_sha256_hash_darwin=a5464e7bcbce9647607904a4afa8362382f1fc55d39e7bbaf4483ac00eb5d56a $(package)_file_name_freebsd=rust-$($(package)_version)-x86_64-unknown-freebsd.tar.gz -$(package)_sha256_hash_freebsd=230bcf17e4383fba85d3c87fe25d17737459fe561a5f4668fe70dcac2da4e17c +$(package)_sha256_hash_freebsd=36a14498f9d1d7fb50d6fc01740960a99aff3d4c4c3d2e4fff2795ac8042c957 # Mapping from GCC canonical hosts to Rust targets # If a mapping is not present, we assume they are identical, unless $host_os is # "darwin", in which case we assume x86_64-apple-darwin. +$(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 # Mapping from Rust targets to SHA-256 hashes -$(package)_rust_std_sha256_hash_aarch64-unknown-linux-gnu=1343f51fc87049327233cee8941629c3d7dfdc425d359385f93665de3d46711b -$(package)_rust_std_sha256_hash_x86_64-apple-darwin=1d61e9ed5d29e1bb4c18e13d551c6d856c73fb8b410053245dc6e0d3b3a0e92c -$(package)_rust_std_sha256_hash_x86_64-pc-windows-gnu=8a8389f3860df6f42fbf8b76a62ddc7b9b6fe6d0fb526dcfc42faab1005bfb6d +$(package)_rust_std_sha256_hash_aarch64-unknown-linux-gnu=666c6d1f2c65a9bb6e20ae68a6eaa1c5aadee44ff4eb43c593836fe7daba1441 +$(package)_rust_std_sha256_hash_x86_64-apple-darwin=716305d18cfa88151b0446e8c1424e07831affa215d0c9a221c31a918f18b498 +$(package)_rust_std_sha256_hash_x86_64-pc-windows-gnu=d82ee422b024451c0001ee4dd4282e948405df7a3c315b2791880ed68c1ff88b define rust_target $(if $($(1)_rust_target_$(2)),$($(1)_rust_target_$(2)),$(if $(findstring darwin,$(3)),x86_64-apple-darwin,$(2))) @@ -46,12 +47,12 @@ define $(package)_extract_cmds endef define $(package)_stage_cmds - bash ./install.sh --destdir=$($(package)_staging_dir) --prefix=$(host_prefix)/native --disable-ldconfig && \ - ../$(canonical_host)/install.sh --destdir=$($(package)_staging_dir) --prefix=$(host_prefix)/native --disable-ldconfig + bash ./install.sh --destdir=$($(package)_staging_dir) --prefix=$(build_prefix) --disable-ldconfig && \ + ../$(canonical_host)/install.sh --destdir=$($(package)_staging_dir) --prefix=$(build_prefix) --disable-ldconfig endef else define $(package)_stage_cmds - bash ./install.sh --destdir=$($(package)_staging_dir) --prefix=$(host_prefix)/native --disable-ldconfig + bash ./install.sh --destdir=$($(package)_staging_dir) --prefix=$(build_prefix) --disable-ldconfig endef endif diff --git a/depends/packages/openssl.mk b/depends/packages/openssl.mk deleted file mode 100644 index 28ae448ff..000000000 --- a/depends/packages/openssl.mk +++ /dev/null @@ -1,116 +0,0 @@ -package=openssl -$(package)_version=1.1.1a -$(package)_download_path=https://www.openssl.org/source/old/1.1.1 -$(package)_file_name=$(package)-$($(package)_version).tar.gz -$(package)_sha256_hash=fc20130f8b7cbd2fb918b2f14e2f429e109c31ddd0fb38fc5d71d9ffed3f9f41 - -define $(package)_set_vars -$(package)_config_env=AR="$($(package)_ar)" RANLIB="$($(package)_ranlib)" CC="$($(package)_cc)" -$(package)_config_opts=--prefix=$(host_prefix) --openssldir=$(host_prefix)/etc/openssl -$(package)_config_opts+=no-afalgeng -$(package)_config_opts+=no-asm -$(package)_config_opts+=no-async -$(package)_config_opts+=no-bf -$(package)_config_opts+=no-blake2 -$(package)_config_opts+=no-camellia -$(package)_config_opts+=no-capieng -$(package)_config_opts+=no-cast -$(package)_config_opts+=no-chacha -$(package)_config_opts+=no-cmac -$(package)_config_opts+=no-cms -$(package)_config_opts+=no-comp -$(package)_config_opts+=no-crypto-mdebug -$(package)_config_opts+=no-crypto-mdebug-backtrace -$(package)_config_opts+=no-ct -$(package)_config_opts+=no-des -$(package)_config_opts+=no-dgram -$(package)_config_opts+=no-dsa -$(package)_config_opts+=no-dso -$(package)_config_opts+=no-dtls -$(package)_config_opts+=no-dtls1 -$(package)_config_opts+=no-dtls1-method -$(package)_config_opts+=no-dynamic-engine -$(package)_config_opts+=no-ec2m -$(package)_config_opts+=no-ec_nistp_64_gcc_128 -$(package)_config_opts+=no-egd -$(package)_config_opts+=no-engine -$(package)_config_opts+=no-err -$(package)_config_opts+=no-gost -$(package)_config_opts+=no-heartbeats -$(package)_config_opts+=no-idea -$(package)_config_opts+=no-md2 -$(package)_config_opts+=no-md4 -$(package)_config_opts+=no-mdc2 -$(package)_config_opts+=no-multiblock -$(package)_config_opts+=no-nextprotoneg -$(package)_config_opts+=no-ocb -$(package)_config_opts+=no-ocsp -$(package)_config_opts+=no-poly1305 -$(package)_config_opts+=no-posix-io -$(package)_config_opts+=no-psk -$(package)_config_opts+=no-rc2 -$(package)_config_opts+=no-rc4 -$(package)_config_opts+=no-rc5 -$(package)_config_opts+=no-rdrand -$(package)_config_opts+=no-rfc3779 -$(package)_config_opts+=no-rmd160 -$(package)_config_opts+=no-scrypt -$(package)_config_opts+=no-sctp -$(package)_config_opts+=no-seed -$(package)_config_opts+=no-shared -$(package)_config_opts+=no-sock -$(package)_config_opts+=no-srp -$(package)_config_opts+=no-srtp -$(package)_config_opts+=no-ssl -$(package)_config_opts+=no-ssl3 -$(package)_config_opts+=no-ssl3-method -$(package)_config_opts+=no-ssl-trace -$(package)_config_opts+=no-stdio -$(package)_config_opts+=no-tls -$(package)_config_opts+=no-tls1 -$(package)_config_opts+=no-tls1-method -$(package)_config_opts+=no-ts -$(package)_config_opts+=no-ui -$(package)_config_opts+=no-unit-test -$(package)_config_opts+=no-weak-ssl-ciphers -$(package)_config_opts+=no-whirlpool -$(package)_config_opts+=no-zlib -$(package)_config_opts+=no-zlib-dynamic -$(package)_config_opts+=$($(package)_cflags) $($(package)_cppflags) -$(package)_config_opts+=-DPURIFY -$(package)_config_opts_linux=-fPIC -Wa,--noexecstack -$(package)_config_opts_freebsd=-fPIC -Wa,--noexecstack -$(package)_config_opts_x86_64_linux=linux-x86_64 -$(package)_config_opts_i686_linux=linux-generic32 -$(package)_config_opts_arm_linux=linux-generic32 -$(package)_config_opts_aarch64_linux=linux-generic64 -$(package)_config_opts_mipsel_linux=linux-generic32 -$(package)_config_opts_mips_linux=linux-generic32 -$(package)_config_opts_powerpc_linux=linux-generic32 -$(package)_config_opts_x86_64_darwin=darwin64-x86_64-cc -$(package)_config_opts_x86_64_freebsd=BSD-x86_64 -$(package)_config_opts_i686_freebsd=BSD-generic32 -$(package)_config_opts_x86_64_mingw32=mingw64 -$(package)_config_opts_i686_mingw32=mingw -endef - -define $(package)_preprocess_cmds - sed -i.old 's/built on: $$$$date/built on: date not available/' util/mkbuildinf.pl && \ - sed -i.old "s|\"engines\", \"apps\", \"test\"|\"engines\"|" Configure -endef - -define $(package)_config_cmds - ./Configure $($(package)_config_opts) -endef - -define $(package)_build_cmds - $(MAKE) -j1 build_libs libcrypto.pc libssl.pc openssl.pc -endef - -define $(package)_stage_cmds - $(MAKE) DESTDIR=$($(package)_staging_dir) -j1 install_sw -endef - -define $(package)_postprocess_cmds - rm -rf share bin etc -endef diff --git a/depends/packages/packages.mk b/depends/packages/packages.mk index 5826a5133..3ab9925c7 100644 --- a/depends/packages/packages.mk +++ b/depends/packages/packages.mk @@ -1,86 +1,14 @@ -rust_crates := \ - crate_aes \ - crate_aesni \ - crate_aes_soft \ - crate_arrayref \ - crate_arrayvec \ - crate_autocfg \ - crate_bellman \ - crate_bigint \ - crate_bit_vec \ - crate_blake2b_simd \ - crate_blake2s_simd \ - crate_block_buffer \ - crate_block_cipher_trait \ - crate_block_padding \ - crate_byte_tools \ - crate_byteorder \ - crate_c2_chacha \ - crate_cfg_if \ - crate_constant_time_eq \ - crate_crossbeam_channel \ - crate_crossbeam_deque \ - crate_crossbeam_epoch \ - crate_crossbeam_queue \ - crate_crossbeam_utils \ - crate_crossbeam \ - crate_crunchy \ - crate_crypto_api_chachapoly \ - crate_crypto_api \ - crate_digest \ - crate_directories \ - crate_fake_simd \ - crate_ff_derive \ - crate_ff \ - crate_fpe \ - crate_futures_cpupool \ - crate_futures \ - crate_generic_array \ - crate_getrandom \ - crate_group \ - crate_hex \ - crate_lazy_static \ - crate_libc \ - crate_log \ - crate_memoffset \ - crate_nodrop \ - crate_num_bigint \ - crate_num_cpus \ - crate_num_integer \ - crate_num_traits \ - crate_opaque_debug \ - crate_pairing \ - crate_ppv_lite86 \ - crate_proc_macro2 \ - crate_quote \ - crate_rand_chacha \ - crate_rand_core \ - crate_rand_hc \ - crate_rand_xorshift \ - crate_rand \ - crate_rustc_version \ - crate_scopeguard \ - crate_semver_parser \ - crate_semver \ - crate_sha2 \ - crate_syn \ - crate_typenum \ - crate_unicode_xid \ - crate_wasi \ - crate_winapi_i686_pc_windows_gnu \ - crate_winapi \ - crate_winapi_x86_64_pc_windows_gnu \ - crate_zcash_history \ - crate_zcash_primitives \ - crate_zcash_proofs -rust_packages := rust $(rust_crates) -proton_packages := proton zcash_packages := libsodium utfcpp -packages := boost openssl libevent zeromq $(zcash_packages) googletest -native_packages := native_ccache +packages := boost libevent zeromq $(zcash_packages) googletest +native_packages := native_clang native_ccache native_rust wallet_packages=bdb ifneq ($(build_os),darwin) darwin_native_packages=native_cctools endif + +# We use a complete SDK for Darwin, which includes libc++. +ifneq ($(host_os),darwin) +packages += libcxx +endif diff --git a/depends/packages/proton.mk b/depends/packages/proton.mk deleted file mode 100644 index d974fa5fa..000000000 --- a/depends/packages/proton.mk +++ /dev/null @@ -1,24 +0,0 @@ -package=proton -$(package)_version=0.30.0 -$(package)_download_path=https://archive.apache.org/dist/qpid/proton/$($(package)_version) -$(package)_file_name=qpid-proton-$($(package)_version).tar.gz -$(package)_sha256_hash=e37fd8fb13391c3996f927839969a8f66edf35612392d0611eeac6e39e48dd33 -$(package)_patches=minimal-build.patch - -define $(package)_preprocess_cmds - patch -p1 < $($(package)_patch_dir)/minimal-build.patch && \ - mkdir -p build/proton-c/src -endef - -define $(package)_config_cmds - cd build; cmake .. -DCMAKE_CXX_STANDARD=11 -DCMAKE_INSTALL_PREFIX=/ -DSYSINSTALL_BINDINGS=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_PYTHON=OFF -DBUILD_RUBY=OFF -DBUILD_GO=OFF -DBUILD_STATIC_LIBS=ON -DLIB_SUFFIX= -DENABLE_JSONCPP= -endef - -define $(package)_build_cmds - cd build; $(MAKE) VERBOSE=1 -endef - -define $(package)_stage_cmds - cd build; $(MAKE) VERBOSE=1 DESTDIR=$($(package)_staging_prefix_dir) install -endef - diff --git a/depends/packages/utfcpp.mk b/depends/packages/utfcpp.mk index 40e6026f7..915522651 100644 --- a/depends/packages/utfcpp.mk +++ b/depends/packages/utfcpp.mk @@ -1,9 +1,9 @@ package=utfcpp -$(package)_version=3.1 +$(package)_version=3.1.2 $(package)_download_path=https://github.com/nemtrif/$(package)/archive/ $(package)_file_name=$(package)-$($(package)_version).tar.gz $(package)_download_file=v$($(package)_version).tar.gz -$(package)_sha256_hash=ab531c3fd5d275150430bfaca01d7d15e017a188183be932322f2f651506b096 +$(package)_sha256_hash=fea3bfa39fb8bd7368077ea5e1e0db9a8951f7e6fb6d9400b00ab3d92b807c6d define $(package)_stage_cmds cp -a ./source $($(package)_staging_dir)$(host_prefix)/include diff --git a/depends/packages/vendorcrate.mk b/depends/packages/vendorcrate.mk deleted file mode 100644 index 728eb71b5..000000000 --- a/depends/packages/vendorcrate.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=crate_CRATEFILE -$(package)_crate_name=CRATENAME -$(package)_version=CRATEVER -$(package)_download_path=https://static.crates.io/crates/$($(package)_crate_name) -$(package)_file_name=$($(package)_crate_name)-$($(package)_version).crate -$(package)_sha256_hash=CRATEHASH -$(package)_crate_versioned_name=$($(package)_crate_name) - -define $(package)_preprocess_cmds - $(call generate_crate_checksum,$(package)) -endef - -define $(package)_stage_cmds - $(call vendor_crate_source,$(package)) -endef diff --git a/depends/packages/vendorcrate.sh b/depends/packages/vendorcrate.sh deleted file mode 100755 index b76521ae4..000000000 --- a/depends/packages/vendorcrate.sh +++ /dev/null @@ -1,12 +0,0 @@ -pkgdir=$(dirname $0) - -cratefile=$(echo "$1" | tr '-' '_') -cratename=$1 -cratever=$2 -cratehash=$(curl "https://static.crates.io/crates/$cratename/$cratename-$cratever.crate" | sha256sum | awk '{print $1}') - -cat "$pkgdir/vendorcrate.mk" | -sed "s/CRATEFILE/$cratefile/g" | -sed "s/CRATENAME/$cratename/g" | -sed "s/CRATEVER/$cratever/g" | -sed "s/CRATEHASH/$cratehash/g" > "$pkgdir/crate_$cratefile.mk" diff --git a/depends/packages/zeromq.mk b/depends/packages/zeromq.mk index fee9e6e26..afc24ee1e 100644 --- a/depends/packages/zeromq.mk +++ b/depends/packages/zeromq.mk @@ -1,14 +1,27 @@ package=zeromq -$(package)_version=4.3.1 +$(package)_version=4.3.3 $(package)_download_path=https://github.com/zeromq/libzmq/releases/download/v$($(package)_version)/ $(package)_file_name=$(package)-$($(package)_version).tar.gz -$(package)_sha256_hash=bcbabe1e2c7d0eec4ed612e10b94b112dd5f06fcefa994a0c79a45d835cd21eb +$(package)_sha256_hash=9d9285db37ae942ed0780c016da87060497877af45094ff9e1a1ca736e3875a2 +$(package)_patches=windows-unused-variables.diff + +ifneq ($(host_os),darwin) +$(package)_dependencies=libcxx +endif define $(package)_set_vars - $(package)_config_opts=--without-documentation --disable-shared --disable-curve + $(package)_config_opts=--without-docs --disable-shared --disable-curve --disable-curve-keygen --disable-perf + $(package)_config_opts += --without-libgssapi_krb5 --without-pgm --without-norm --without-vmci + $(package)_config_opts += --disable-libunwind --disable-radix-tree --without-gcov --disable-dependency-tracking + $(package)_config_opts += --disable-drafts --enable-option-checking $(package)_config_opts_linux=--with-pic $(package)_config_opts_freebsd=--with-pic - $(package)_cxxflags=-std=c++11 + $(package)_cxxflags+=-std=c++17 + $(package)_ldflags+=-static-libstdc++ -lc++abi +endef + +define $(package)_preprocess_cmds + patch -p1 < $($(package)_patch_dir)/windows-unused-variables.diff endef define $(package)_config_cmds @@ -24,5 +37,5 @@ define $(package)_stage_cmds endef define $(package)_postprocess_cmds - rm -rf bin share + rm -rf bin share lib/*.la endef diff --git a/depends/patches/bdb/winioctl-and-atomic_init_db.patch b/depends/patches/bdb/winioctl-and-atomic_init_db.patch new file mode 100644 index 000000000..788da5be4 --- /dev/null +++ b/depends/patches/bdb/winioctl-and-atomic_init_db.patch @@ -0,0 +1,136 @@ +diff --git a/src/dbinc/atomic.h b/src/dbinc/atomic.h +index e4420aa..4799b5f 100644 +--- a/src/dbinc/atomic.h ++++ b/src/dbinc/atomic.h +@@ -70,7 +70,7 @@ typedef struct { + * These have no memory barriers; the caller must include them when necessary. + */ + #define atomic_read(p) ((p)->value) +-#define atomic_init(p, val) ((p)->value = (val)) ++#define atomic_init_db(p, val) ((p)->value = (val)) + + #ifdef HAVE_ATOMIC_SUPPORT + +@@ -225,7 +225,7 @@ static inline int __atomic_compare_exchange_int( + #define atomic_dec(env, p) (--(p)->value) + #define atomic_compare_exchange(env, p, oldval, newval) \ + (DB_ASSERT(env, atomic_read(p) == (oldval)), \ +- atomic_init(p, (newval)), 1) ++ atomic_init_db(p, (newval)), 1) + #else + #define atomic_inc(env, p) __atomic_inc_int(env, p) + #define atomic_dec(env, p) __atomic_dec_int(env, p) +diff --git a/src/dbinc/win_db.h b/src/dbinc/win_db.h +index f5228f4..6e44659 100644 +--- a/src/dbinc/win_db.h ++++ b/src/dbinc/win_db.h +@@ -51,7 +51,7 @@ + #include + #include + #ifndef DB_WINCE +-#include ++#include + #endif + + #ifdef HAVE_GETADDRINFO +diff --git a/src/mp/mp_fget.c b/src/mp/mp_fget.c +index 59fe9fe..fa4ced7 100644 +--- a/src/mp/mp_fget.c ++++ b/src/mp/mp_fget.c +@@ -654,7 +654,7 @@ alloc: /* Allocate a new buffer header and data space. */ + + /* Initialize enough so we can call __memp_bhfree. */ + alloc_bhp->flags = 0; +- atomic_init(&alloc_bhp->ref, 1); ++ atomic_init_db(&alloc_bhp->ref, 1); + #ifdef DIAGNOSTIC + if ((uintptr_t)alloc_bhp->buf & (sizeof(size_t) - 1)) { + __db_errx(env, DB_STR("3025", +@@ -969,7 +969,7 @@ alloc: /* Allocate a new buffer header and data space. */ + MVCC_MPROTECT(bhp->buf, mfp->pagesize, + PROT_READ); + +- atomic_init(&alloc_bhp->ref, 1); ++ atomic_init_db(&alloc_bhp->ref, 1); + MUTEX_LOCK(env, alloc_bhp->mtx_buf); + alloc_bhp->priority = bhp->priority; + alloc_bhp->pgno = bhp->pgno; +diff --git a/src/mp/mp_mvcc.c b/src/mp/mp_mvcc.c +index 83c4d72..0a47202 100644 +--- a/src/mp/mp_mvcc.c ++++ b/src/mp/mp_mvcc.c +@@ -281,7 +281,7 @@ __memp_bh_freeze(dbmp, infop, hp, bhp, need_frozenp) + #else + memcpy(frozen_bhp, bhp, SSZA(BH, buf)); + #endif +- atomic_init(&frozen_bhp->ref, 0); ++ atomic_init_db(&frozen_bhp->ref, 0); + if (mutex != MUTEX_INVALID) + frozen_bhp->mtx_buf = mutex; + else if ((ret = __mutex_alloc(env, MTX_MPOOL_BH, +@@ -440,7 +440,7 @@ __memp_bh_thaw(dbmp, infop, hp, frozen_bhp, alloc_bhp) + #endif + alloc_bhp->mtx_buf = mutex; + MUTEX_LOCK(env, alloc_bhp->mtx_buf); +- atomic_init(&alloc_bhp->ref, 1); ++ atomic_init_db(&alloc_bhp->ref, 1); + F_CLR(alloc_bhp, BH_FROZEN); + } + +diff --git a/src/mp/mp_region.c b/src/mp/mp_region.c +index 4d95e4f..e97459c 100644 +--- a/src/mp/mp_region.c ++++ b/src/mp/mp_region.c +@@ -278,7 +278,7 @@ __memp_init(env, dbmp, reginfo_off, htab_buckets, max_nreg) + MTX_MPOOL_FILE_BUCKET, 0, &htab[i].mtx_hash)) != 0) + return (ret); + SH_TAILQ_INIT(&htab[i].hash_bucket); +- atomic_init(&htab[i].hash_page_dirty, 0); ++ atomic_init_db(&htab[i].hash_page_dirty, 0); + } + + mtx_base = mtx_prev = MUTEX_INVALID; +@@ -332,7 +332,7 @@ no_prealloc: + DB_MUTEX_SHARED, &hp->mtx_hash)) != 0) + return (ret); + SH_TAILQ_INIT(&hp->hash_bucket); +- atomic_init(&hp->hash_page_dirty, 0); ++ atomic_init_db(&hp->hash_page_dirty, 0); + #ifdef HAVE_STATISTICS + hp->hash_io_wait = 0; + hp->hash_frozen = hp->hash_thawed = hp->hash_frozen_freed = 0; +diff --git a/src/mutex/mut_method.c b/src/mutex/mut_method.c +index 72b34de..a9f9868 100644 +--- a/src/mutex/mut_method.c ++++ b/src/mutex/mut_method.c +@@ -501,7 +501,7 @@ __atomic_compare_exchange_int(env, v, oldval, newval) + MUTEX_LOCK(env, mtx); + ret = atomic_read(v) == oldval; + if (ret) +- atomic_init(v, newval); ++ atomic_init_db(v, newval); + MUTEX_UNLOCK(env, mtx); + + return (ret); +diff --git a/src/mutex/mut_tas.c b/src/mutex/mut_tas.c +index 7899c4b..d9420fa 100644 +--- a/src/mutex/mut_tas.c ++++ b/src/mutex/mut_tas.c +@@ -47,7 +47,7 @@ __db_tas_mutex_init(env, mutex, flags) + + #ifdef HAVE_SHARED_LATCHES + if (F_ISSET(mutexp, DB_MUTEX_SHARED)) +- atomic_init(&mutexp->sharecount, 0); ++ atomic_init_db(&mutexp->sharecount, 0); + else + #endif + if (MUTEX_INIT(&mutexp->tas)) { +@@ -643,7 +643,7 @@ was_not_locked: + F_CLR(mutexp, DB_MUTEX_LOCKED); + /* Flush flag update before zeroing count */ + MEMBAR_EXIT(); +- atomic_init(&mutexp->sharecount, 0); ++ atomic_init_db(&mutexp->sharecount, 0); + } else { + DB_ASSERT(env, sharecount > 0); + MEMBAR_EXIT(); diff --git a/depends/patches/boost/darwin.diff b/depends/patches/boost/darwin.diff deleted file mode 100644 index ec3ed76e4..000000000 --- a/depends/patches/boost/darwin.diff +++ /dev/null @@ -1,27 +0,0 @@ -diff --git a/darwin.jam b/darwin.jam -index 8d47741..641d8bb 100644 ---- a/tools/build/src/tools/darwin.jam -+++ b/tools/build/src/tools/darwin.jam -@@ -138,14 +138,14 @@ rule init ( version ? : command * : options * : requirement * ) - common.handle-options darwin : $(condition) : $(command) : $(options) ; - - # - GCC 4.0 and higher in Darwin does not have -fcoalesce-templates. -- if $(real-version) < "4.0.0" -- { -- flags darwin.compile.c++ OPTIONS $(condition) : -fcoalesce-templates ; -- } -+# if $(real-version) < "4.0.0" -+# { -+# flags darwin.compile.c++ OPTIONS $(condition) : -fcoalesce-templates ; -+# } - # - GCC 4.2 and higher in Darwin does not have -Wno-long-double. -- if $(real-version) < "4.2.0" -- { -- flags darwin.compile OPTIONS $(condition) : -Wno-long-double ; -- } -+# if $(real-version) < "4.2.0" -+# { -+# flags darwin.compile OPTIONS $(condition) : -Wno-long-double ; -+# } - # - GCC on Darwin with -pedantic, suppress unsupported long long warning - flags darwin.compile OPTIONS $(condition)/all : -Wno-long-long ; diff --git a/depends/patches/boost/iostreams-106.patch b/depends/patches/boost/iostreams-106.patch new file mode 100644 index 000000000..dcecd5d0d --- /dev/null +++ b/depends/patches/boost/iostreams-106.patch @@ -0,0 +1,25 @@ +From 4e76f73826fd0a7067b837e4850a9051436f5ec5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jean-Micha=C3=ABl=20Celerier?= + +Date: Sun, 22 Dec 2019 10:26:38 +0100 +Subject: [PATCH] Fix build on windows with libc++ + +Proposed by @SquallATF in #67 +--- + include/boost/iostreams/detail/config/fpos.hpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/include/boost/iostreams/detail/config/fpos.hpp b/include/boost/iostreams/detail/config/fpos.hpp +index c5dc6cf59..a5835421f 100644 +--- a/include/boost/iostreams/detail/config/fpos.hpp ++++ b/include/boost/iostreams/detail/config/fpos.hpp +@@ -26,7 +26,8 @@ + + # if (defined(_YVALS) || defined(_CPPLIB_VER)) && !defined(__SGI_STL_PORT) && \ + !defined(_STLPORT_VERSION) && !defined(__QNX__) && !defined(_VX_CPU) && !defined(__VXWORKS__) \ +- && !((defined(BOOST_MSVC) || defined(BOOST_CLANG)) && _MSVC_STL_VERSION >= 141) ++ && !((defined(BOOST_MSVC) || defined(BOOST_CLANG)) && _MSVC_STL_VERSION >= 141) \ ++ && !defined(_LIBCPP_VERSION) + /**/ + + #include diff --git a/depends/patches/boost/signals2-noise.patch b/depends/patches/boost/signals2-noise.patch new file mode 100644 index 000000000..e0a9ce48f --- /dev/null +++ b/depends/patches/boost/signals2-noise.patch @@ -0,0 +1,23 @@ +From fd27423fea5537bc857c1fa14bb0c25b994f77b3 Mon Sep 17 00:00:00 2001 +From: Frank Mori Hess +Date: Mon, 20 Jul 2020 14:17:05 -0400 +Subject: [PATCH] Fix warning about deprecated + boost/function_output_iterator.hpp + +--- + include/boost/signals2/detail/null_output_iterator.hpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/boost/signals2/detail/null_output_iterator.hpp b/include/boost/signals2/detail/null_output_iterator.hpp +index 9e986959..dee4373c 100644 +--- a/include/boost/signals2/detail/null_output_iterator.hpp ++++ b/include/boost/signals2/detail/null_output_iterator.hpp +@@ -11,7 +11,7 @@ + #ifndef BOOST_SIGNALS2_NULL_OUTPUT_ITERATOR_HPP + #define BOOST_SIGNALS2_NULL_OUTPUT_ITERATOR_HPP + +-#include ++#include + + namespace boost + { diff --git a/depends/patches/libevent/detect-arch4random_addrandom-fix.patch b/depends/patches/libevent/detect-arch4random_addrandom-fix.patch deleted file mode 100644 index 69e55bf11..000000000 --- a/depends/patches/libevent/detect-arch4random_addrandom-fix.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 266f43af7798befa3d27bfabaa9ae699259c3924 Mon Sep 17 00:00:00 2001 -From: Azat Khuzhin -Date: Mon, 27 Mar 2017 15:50:23 +0300 -Subject: [PATCH] Fix arc4random_addrandom() detecting and fallback - (regression) - -But this is kind of hot-fix, we definitelly need more sane arc4random -compat layer. - -Fixes: #488 -Introduced-in: 6541168 ("Detect arch4random_addrandom() existence") ---- - event-config.h.cmake | 3 +++ - include/event2/util.h | 2 +- - 2 files changed, 4 insertions(+), 1 deletion(-) - -diff --git a/event-config.h.cmake b/event-config.h.cmake -index b7f0be57c..5c233a3d9 100644 ---- a/event-config.h.cmake -+++ b/event-config.h.cmake -@@ -53,6 +53,9 @@ - /* Define to 1 if you have the `arc4random_buf' function. */ - #cmakedefine EVENT__HAVE_ARC4RANDOM_BUF 1 - -+/* Define to 1 if you have the `arc4random_addrandom' function. */ -+#cmakedefine EVENT__HAVE_ARC4RANDOM_ADDRANDOM 1 -+ - /* Define if clock_gettime is available in libc */ - #cmakedefine EVENT__DNS_USE_CPU_CLOCK_FOR_ID 1 - -diff --git a/include/event2/util.h b/include/event2/util.h -index c4af2bd60..ca4048944 100644 ---- a/include/event2/util.h -+++ b/include/event2/util.h -@@ -842,7 +842,7 @@ int evutil_secure_rng_init(void); - EVENT2_EXPORT_SYMBOL - int evutil_secure_rng_set_urandom_device_file(char *fname); - --#ifdef EVENT__HAVE_ARC4RANDOM_ADDRANDOM -+#if !defined(EVENT__HAVE_ARC4RANDOM) || defined(EVENT__HAVE_ARC4RANDOM_ADDRANDOM) - /** Seed the random number generator with extra random bytes. - - You should almost never need to call this function; it should be diff --git a/depends/patches/libevent/detect-arch4random_addrandom.patch b/depends/patches/libevent/detect-arch4random_addrandom.patch deleted file mode 100644 index f8f2b947d..000000000 --- a/depends/patches/libevent/detect-arch4random_addrandom.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 6541168d7037457b8e5c51cc354f11bd94e618b6 Mon Sep 17 00:00:00 2001 -From: Marek Sebera -Date: Mon, 6 Mar 2017 00:55:16 +0300 -Subject: [PATCH] Detect arch4random_addrandom() existence - -Refs: #370 -Refs: #475 ---- - CMakeLists.txt | 1 + - configure.ac | 1 + - evutil_rand.c | 2 ++ - include/event2/util.h | 2 ++ - 4 files changed, 6 insertions(+) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index a861e7d96..f609d02d0 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -338,6 +338,7 @@ CHECK_FUNCTION_EXISTS_EX(sysctl EVENT__HAVE_SYSCTL) - CHECK_FUNCTION_EXISTS_EX(accept4 EVENT__HAVE_ACCEPT4) - CHECK_FUNCTION_EXISTS_EX(arc4random EVENT__HAVE_ARC4RANDOM) - CHECK_FUNCTION_EXISTS_EX(arc4random_buf EVENT__HAVE_ARC4RANDOM_BUF) -+CHECK_FUNCTION_EXISTS_EX(arc4random_addrandom EVENT__HAVE_ARC4RANDOM_ADDRANDOM) - CHECK_FUNCTION_EXISTS_EX(epoll_create1 EVENT__HAVE_EPOLL_CREATE1) - CHECK_FUNCTION_EXISTS_EX(getegid EVENT__HAVE_GETEGID) - CHECK_FUNCTION_EXISTS_EX(geteuid EVENT__HAVE_GETEUID) -diff --git a/configure.ac b/configure.ac -index a127bbc91..e73c29b14 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -342,6 +342,7 @@ AC_CHECK_FUNCS([ \ - accept4 \ - arc4random \ - arc4random_buf \ -+ arc4random_addrandom \ - eventfd \ - epoll_create1 \ - fcntl \ -diff --git a/evutil_rand.c b/evutil_rand.c -index 046a14b07..4be0b1c5e 100644 ---- a/evutil_rand.c -+++ b/evutil_rand.c -@@ -192,12 +192,14 @@ evutil_secure_rng_get_bytes(void *buf, size_t n) - ev_arc4random_buf(buf, n); - } - -+#if !defined(EVENT__HAVE_ARC4RANDOM) || defined(EVENT__HAVE_ARC4RANDOM_ADDRANDOM) - void - evutil_secure_rng_add_bytes(const char *buf, size_t n) - { - arc4random_addrandom((unsigned char*)buf, - n>(size_t)INT_MAX ? INT_MAX : (int)n); - } -+#endif - - void - evutil_free_secure_rng_globals_(void) -diff --git a/include/event2/util.h b/include/event2/util.h -index dd4bbb69d..c4af2bd60 100644 ---- a/include/event2/util.h -+++ b/include/event2/util.h -@@ -842,6 +842,7 @@ int evutil_secure_rng_init(void); - EVENT2_EXPORT_SYMBOL - int evutil_secure_rng_set_urandom_device_file(char *fname); - -+#ifdef EVENT__HAVE_ARC4RANDOM_ADDRANDOM - /** Seed the random number generator with extra random bytes. - - You should almost never need to call this function; it should be -@@ -858,6 +859,7 @@ int evutil_secure_rng_set_urandom_device_file(char *fname); - */ - EVENT2_EXPORT_SYMBOL - void evutil_secure_rng_add_bytes(const char *dat, size_t datlen); -+#endif - - #ifdef __cplusplus - } diff --git a/depends/patches/native_cctools/ignore-otool.diff b/depends/patches/native_cctools/ignore-otool.diff new file mode 100644 index 000000000..fdb348ede --- /dev/null +++ b/depends/patches/native_cctools/ignore-otool.diff @@ -0,0 +1,24 @@ +diff -ur cctools-port-55562e4073dea0fbfd0b20e0bf69ffe6390c7f97-orig/cctools/Makefile.am cctools-port-55562e4073dea0fbfd0b20e0bf69ffe6390c7f97/cctools/Makefile.am +--- cctools-port-55562e4073dea0fbfd0b20e0bf69ffe6390c7f97-orig/cctools/Makefile.am 2020-07-30 15:01:05.680000000 +0100 ++++ cctools-port-55562e4073dea0fbfd0b20e0bf69ffe6390c7f97/cctools/Makefile.am 2020-07-30 15:01:34.900000000 +0100 +@@ -1,7 +1,7 @@ + if ISDARWIN +-SUBDIRS=libstuff libmacho ar as misc otool efitools ld64 man ++SUBDIRS=libstuff libmacho ar as misc efitools ld64 man + else +-SUBDIRS=libobjc2 libstuff libmacho ar as misc otool efitools ld64 man ++SUBDIRS=libobjc2 libstuff libmacho ar as misc efitools ld64 man + endif + + ACLOCAL_AMFLAGS = -I m4 +diff -ur cctools-port-55562e4073dea0fbfd0b20e0bf69ffe6390c7f97-orig/cctools/configure.ac cctools-port-55562e4073dea0fbfd0b20e0bf69ffe6390c7f97/cctools/configure.ac +--- cctools-port-55562e4073dea0fbfd0b20e0bf69ffe6390c7f97-orig/cctools/configure.ac 2020-07-30 15:01:05.680000000 +0100 ++++ cctools-port-55562e4073dea0fbfd0b20e0bf69ffe6390c7f97/cctools/configure.ac 2020-07-30 15:01:47.330000000 +0100 +@@ -466,7 +466,6 @@ + AC_CONFIG_FILES([as/ppc64/Makefile]) + AC_CONFIG_FILES([man/Makefile]) + AC_CONFIG_FILES([misc/Makefile]) +-AC_CONFIG_FILES([otool/Makefile]) + AC_CONFIG_FILES([efitools/Makefile]) + AC_CONFIG_FILES([libobjc2/Makefile]) + AC_CONFIG_FILES([ld64/Makefile]) diff --git a/depends/patches/proton/minimal-build.patch b/depends/patches/proton/minimal-build.patch deleted file mode 100644 index dd138d2f6..000000000 --- a/depends/patches/proton/minimal-build.patch +++ /dev/null @@ -1,314 +0,0 @@ -diff -ur a/c/CMakeLists.txt b/c/CMakeLists.txt ---- a/c/CMakeLists.txt 2019-12-09 07:17:00.000000000 -0700 -+++ b/c/CMakeLists.txt 2020-01-08 16:15:26.837987469 -0700 -@@ -428,18 +428,18 @@ - # Can't use target_link_libraries() because cmake 2.8.12 doesn't allow object libraries as the first param - # otherwise for cmake 3.9 and on this would be: - # target_link_libraries (qpid-proton-core-objects ${SSL_LIB} ${SASL_LIB} ${TIME_LIB} ${PLATFORM_LIBS}) --target_compile_definitions(qpid-proton-core-objects PRIVATE $) --target_compile_options (qpid-proton-core-objects PRIVATE $) --target_include_directories(qpid-proton-core-objects PRIVATE $) -- --add_library (qpid-proton-core SHARED $) --target_link_libraries (qpid-proton-core ${SSL_LIB} ${SASL_LIB} ${TIME_LIB} ${PLATFORM_LIBS}) --set_target_properties (qpid-proton-core -- PROPERTIES -- VERSION "${PN_LIB_CORE_VERSION}" -- SOVERSION "${PN_LIB_CORE_MAJOR_VERSION}" -- LINK_FLAGS "${CATCH_UNDEFINED} ${LTO}" --) -+#target_compile_definitions(qpid-proton-core-objects PRIVATE $) -+#target_compile_options (qpid-proton-core-objects PRIVATE $) -+#target_include_directories(qpid-proton-core-objects PRIVATE $) -+ -+#add_library (qpid-proton-core SHARED $) -+#target_link_libraries (qpid-proton-core ${SSL_LIB} ${SASL_LIB} ${TIME_LIB} ${PLATFORM_LIBS}) -+#set_target_properties (qpid-proton-core -+# PROPERTIES -+# VERSION "${PN_LIB_CORE_VERSION}" -+# SOVERSION "${PN_LIB_CORE_MAJOR_VERSION}" -+# LINK_FLAGS "${CATCH_UNDEFINED} ${LTO}" -+#) - - if (BUILD_STATIC_LIBS) - add_library (qpid-proton-core-static STATIC ${qpid-proton-core-src}) -@@ -454,14 +454,14 @@ - ${qpid-proton-include-extra} - ) - --add_library (qpid-proton SHARED $ ${qpid-proton-noncore-src}) --target_link_libraries (qpid-proton LINK_PRIVATE ${SSL_LIB} ${SASL_LIB} ${TIME_LIB} ${PLATFORM_LIBS} ${PROACTOR_LIBS}) --set_target_properties (qpid-proton -- PROPERTIES -- VERSION "${PN_LIB_LEGACY_VERSION}" -- SOVERSION "${PN_LIB_LEGACY_MAJOR_VERSION}" -- LINK_FLAGS "${CATCH_UNDEFINED} ${LTO}" --) -+# add_library (qpid-proton SHARED $ ${qpid-proton-noncore-src}) -+# target_link_libraries (qpid-proton LINK_PRIVATE ${SSL_LIB} ${SASL_LIB} ${TIME_LIB} ${PLATFORM_LIBS} ${PROACTOR_LIBS}) -+# set_target_properties (qpid-proton -+# PROPERTIES -+# VERSION "${PN_LIB_LEGACY_VERSION}" -+# SOVERSION "${PN_LIB_LEGACY_MAJOR_VERSION}" -+# LINK_FLAGS "${CATCH_UNDEFINED} ${LTO}" -+# ) - - if (BUILD_STATIC_LIBS) - add_library(qpid-proton-static STATIC ${qpid-proton-core-src} ${qpid-proton-noncore-src}) -@@ -482,15 +482,15 @@ - - if (qpid-proton-proactor) - set(HAS_PROACTOR True) -- add_library (qpid-proton-proactor SHARED ${qpid-proton-proactor}) -- target_link_libraries (qpid-proton-proactor LINK_PUBLIC qpid-proton-core) -- target_link_libraries (qpid-proton-proactor LINK_PRIVATE ${PLATFORM_LIBS} ${PROACTOR_LIBS}) -- set_target_properties (qpid-proton-proactor -- PROPERTIES -- VERSION "${PN_LIB_PROACTOR_VERSION}" -- SOVERSION "${PN_LIB_PROACTOR_MAJOR_VERSION}" -- LINK_FLAGS "${CATCH_UNDEFINED} ${LTO}" -- ) -+ # add_library (qpid-proton-proactor SHARED ${qpid-proton-proactor}) -+ # target_link_libraries (qpid-proton-proactor LINK_PUBLIC qpid-proton-core) -+ # target_link_libraries (qpid-proton-proactor LINK_PRIVATE ${PLATFORM_LIBS} ${PROACTOR_LIBS}) -+ # set_target_properties (qpid-proton-proactor -+ # PROPERTIES -+ # VERSION "${PN_LIB_PROACTOR_VERSION}" -+ # SOVERSION "${PN_LIB_PROACTOR_MAJOR_VERSION}" -+ # LINK_FLAGS "${CATCH_UNDEFINED} ${LTO}" -+ # ) - if (BUILD_STATIC_LIBS) - add_library (qpid-proton-proactor-static STATIC ${qpid-proton-proactor}) - endif(BUILD_STATIC_LIBS) -@@ -500,11 +500,11 @@ - if (BUILD_STATIC_LIBS) - set(STATIC_LIBS qpid-proton-static qpid-proton-core-static) - endif() --install(TARGETS qpid-proton qpid-proton-core ${STATIC_LIBS} -- EXPORT proton -- RUNTIME DESTINATION bin -- ARCHIVE DESTINATION ${LIB_INSTALL_DIR} -- LIBRARY DESTINATION ${LIB_INSTALL_DIR}) -+# install(TARGETS qpid-proton qpid-proton-core ${STATIC_LIBS} -+# EXPORT proton -+# RUNTIME DESTINATION bin -+# ARCHIVE DESTINATION ${LIB_INSTALL_DIR} -+# LIBRARY DESTINATION ${LIB_INSTALL_DIR}) - - # Install windows pdb files - if (MSVC) -@@ -520,11 +520,11 @@ - if (BUILD_STATIC_LIBS) - set(STATIC_LIBS qpid-proton-proactor-static) - endif() -- install(TARGETS qpid-proton-proactor ${STATIC_LIBS} -- EXPORT proton -- RUNTIME DESTINATION bin -- ARCHIVE DESTINATION ${LIB_INSTALL_DIR} -- LIBRARY DESTINATION ${LIB_INSTALL_DIR}) -+ # install(TARGETS qpid-proton-proactor ${STATIC_LIBS} -+ # EXPORT proton -+ # RUNTIME DESTINATION bin -+ # ARCHIVE DESTINATION ${LIB_INSTALL_DIR} -+ # LIBRARY DESTINATION ${LIB_INSTALL_DIR}) - - # Install windows pdb files - if (MSVC) -@@ -576,10 +576,10 @@ - ${CMAKE_CURRENT_BINARY_DIR}/ProtonConfigVersion.cmake - DESTINATION ${LIB_INSTALL_DIR}/cmake/Proton) - --add_subdirectory(docs) --add_subdirectory(examples) --add_subdirectory(tests) --add_subdirectory(tools) -+# add_subdirectory(docs) -+# add_subdirectory(examples) -+# add_subdirectory(tests) -+# add_subdirectory(tools) - - install (DIRECTORY examples/ - DESTINATION "${PROTON_SHARE}/examples/c" -diff -ur a/CMakeLists.txt b/CMakeLists.txt ---- a/CMakeLists.txt 2019-12-09 07:17:00.000000000 -0700 -+++ b/CMakeLists.txt 2019-12-19 18:11:57.128248724 -0700 -@@ -24,7 +24,7 @@ - set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/tools/cmake/Modules") - set (CMAKE_THREAD_PREFER_PTHREAD TRUE) - --include (CTest) -+# include (CTest) - include (CheckLanguage) - include (CheckLibraryExists) - include (CheckSymbolExists) -@@ -33,13 +33,13 @@ - find_package (OpenSSL) - find_package (Threads) - find_package (PythonInterp REQUIRED) --find_package (SWIG) -+# find_package (SWIG) - find_package (CyrusSASL) - --enable_testing () -+#enable_testing () - - # Set up runtime checks (valgrind, sanitizers etc.) --include(tests/RuntimeCheck.cmake) -+# include(tests/RuntimeCheck.cmake) - - ## Variables used across components - -@@ -260,7 +260,7 @@ - - set (SYSINSTALL_BINDINGS OFF CACHE BOOL "If SYSINSTALL_BINDINGS is OFF then proton bindings will be installed underneath ${BINDINGS_DIR} and each user will need to modify their interpreter configuration to load the appropriate binding. If SYSINSTALL_BINDINGS is ON, then each language interpreter will be queried for the appropriate directory and proton bindings will be installed and available system wide with no additional per user configuration.") - --set (BINDING_LANGS PYTHON RUBY) -+# set (BINDING_LANGS PYTHON RUBY) - - foreach (LANG ${BINDING_LANGS}) - set (SYSINSTALL_${LANG} OFF CACHE BOOL "Install ${LANG} bindings into interpreter specified location.") -@@ -315,7 +315,7 @@ - endif() - - # Prerequisites for Go --find_program(GO_EXE go) -+# find_program(GO_EXE go) - mark_as_advanced(GO_EXE) - if (GO_EXE) - set (DEFAULT_GO ON) -diff -ur a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt ---- a/cpp/CMakeLists.txt 2019-12-09 07:17:00.000000000 -0700 -+++ b/cpp/CMakeLists.txt 2020-01-08 16:20:18.855394195 -0700 -@@ -174,30 +174,30 @@ - set (CMAKE_DEBUG_POSTFIX "d") - endif () - --add_library(qpid-proton-cpp SHARED ${qpid-proton-cpp-source}) -+# add_library(qpid-proton-cpp SHARED ${qpid-proton-cpp-source}) - if(BUILD_STATIC_LIBS) - add_library(qpid-proton-cpp-static STATIC ${qpid-proton-cpp-source}) - set(STATIC_LIBS qpid-proton-cpp-static) - endif(BUILD_STATIC_LIBS) - --target_link_libraries (qpid-proton-cpp LINK_PRIVATE ${PLATFORM_LIBS} qpid-proton-core qpid-proton-proactor ${CONNECT_CONFIG_LIBS}) -+# target_link_libraries (qpid-proton-cpp LINK_PRIVATE ${PLATFORM_LIBS} qpid-proton-core qpid-proton-proactor ${CONNECT_CONFIG_LIBS}) - --set_target_properties ( -- qpid-proton-cpp -- PROPERTIES -- LINKER_LANGUAGE CXX -- VERSION "${PN_LIB_CPP_VERSION}" -- SOVERSION "${PN_LIB_CPP_MAJOR_VERSION}" -- LINK_FLAGS "${CATCH_UNDEFINED} ${LTO}" -- ) -+# set_target_properties ( -+# qpid-proton-cpp -+# PROPERTIES -+# LINKER_LANGUAGE CXX -+# VERSION "${PN_LIB_CPP_VERSION}" -+# SOVERSION "${PN_LIB_CPP_MAJOR_VERSION}" -+# LINK_FLAGS "${CATCH_UNDEFINED} ${LTO}" -+# ) - - ## Install - --install(TARGETS qpid-proton-cpp ${STATIC_LIBS} -- EXPORT proton-cpp -- RUNTIME DESTINATION bin -- ARCHIVE DESTINATION ${LIB_INSTALL_DIR} -- LIBRARY DESTINATION ${LIB_INSTALL_DIR}) -+# install(TARGETS qpid-proton-cpp ${STATIC_LIBS} -+# EXPORT proton-cpp -+# RUNTIME DESTINATION bin -+# ARCHIVE DESTINATION ${LIB_INSTALL_DIR} -+# LIBRARY DESTINATION ${LIB_INSTALL_DIR}) - - # Install windows qpid-proton-cpp pdb files - if (MSVC) -@@ -209,12 +209,12 @@ - - install (DIRECTORY "include/proton" DESTINATION ${INCLUDE_INSTALL_DIR} FILES_MATCHING PATTERN "*.hpp") - install (FILES "${CMAKE_CURRENT_BINARY_DIR}/config_presets.hpp" DESTINATION "${INCLUDE_INSTALL_DIR}/proton/internal") --install (DIRECTORY "examples/" -- DESTINATION "${PROTON_SHARE}/examples/cpp" -- USE_SOURCE_PERMISSIONS -- PATTERN "ProtonCppConfig.cmake" EXCLUDE) -+# install (DIRECTORY "examples/" -+# DESTINATION "${PROTON_SHARE}/examples/cpp" -+# USE_SOURCE_PERMISSIONS -+# PATTERN "ProtonCppConfig.cmake" EXCLUDE) - --add_subdirectory(examples) -+# add_subdirectory(examples) - add_subdirectory(docs) - - # Pkg config file -@@ -268,40 +268,40 @@ - set(test_env ${test_env} "PATH=$") - endif() - --macro(add_cpp_test test) -- add_executable (${test} src/${test}.cpp) -- target_link_libraries (${test} qpid-proton-cpp ${PLATFORM_LIBS}) -- add_test (NAME cpp-${test} -- COMMAND ${PN_ENV_SCRIPT} -- ${test_env} ${TEST_EXE_PREFIX_CMD} $ ${ARGN}) --endmacro(add_cpp_test) -- --add_cpp_test(codec_test) --add_cpp_test(connection_driver_test) --add_cpp_test(interop_test ${CMAKE_SOURCE_DIR}/tests) --add_cpp_test(message_test) --add_cpp_test(map_test) --add_cpp_test(scalar_test) --add_cpp_test(value_test) --add_cpp_test(container_test) --add_cpp_test(reconnect_test) --add_cpp_test(link_test) --add_cpp_test(credit_test) --if (ENABLE_JSONCPP) -- add_cpp_test(connect_config_test) -- target_link_libraries(connect_config_test qpid-proton-core) # For pn_sasl_enabled -- set_tests_properties(cpp-connect_config_test PROPERTIES WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") -- # Test data and output directories for connect_config_test -- file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/testdata" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") --endif() -+# macro(add_cpp_test test) -+# add_executable (${test} src/${test}.cpp) -+# target_link_libraries (${test} qpid-proton-cpp ${PLATFORM_LIBS}) -+# add_test (NAME cpp-${test} -+# COMMAND ${PN_ENV_SCRIPT} -- ${test_env} ${TEST_EXE_PREFIX_CMD} $ ${ARGN}) -+# endmacro(add_cpp_test) -+# -+# add_cpp_test(codec_test) -+# add_cpp_test(connection_driver_test) -+# add_cpp_test(interop_test ${CMAKE_SOURCE_DIR}/tests) -+# add_cpp_test(message_test) -+# add_cpp_test(map_test) -+# add_cpp_test(scalar_test) -+# add_cpp_test(value_test) -+# add_cpp_test(container_test) -+# add_cpp_test(reconnect_test) -+# add_cpp_test(link_test) -+# add_cpp_test(credit_test) -+# if (ENABLE_JSONCPP) -+# add_cpp_test(connect_config_test) -+# target_link_libraries(connect_config_test qpid-proton-core) # For pn_sasl_enabled -+# set_tests_properties(cpp-connect_config_test PROPERTIES WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") -+# # Test data and output directories for connect_config_test -+# file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/testdata" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") -+# endif() - - # TODO aconway 2018-10-31: Catch2 tests - # This is a simple example of a C++ test using the Catch2 framework. - # See c/tests/ for more interesting examples. - # Eventually all the C++ tests will migrate to Catch2. - --include_directories(${CMAKE_SOURCE_DIR}/tests/include) --add_executable(cpp-test src/cpp-test.cpp src/url_test.cpp) --target_link_libraries(cpp-test qpid-proton-cpp ${PLATFORM_LIBS}) -+#include_directories(${CMAKE_SOURCE_DIR}/tests/include) -+#add_executable(cpp-test src/cpp-test.cpp src/url_test.cpp) -+#target_link_libraries(cpp-test qpid-proton-cpp ${PLATFORM_LIBS}) - - macro(add_catch_test tag) - add_test ( diff --git a/depends/patches/zeromq/windows-unused-variables.diff b/depends/patches/zeromq/windows-unused-variables.diff new file mode 100644 index 000000000..f013bab60 --- /dev/null +++ b/depends/patches/zeromq/windows-unused-variables.diff @@ -0,0 +1,17 @@ +diff -ur zeromq-4.3.3-orig/src/clock.cpp zeromq-4.3.3/src/clock.cpp +--- zeromq-4.3.3-orig/src/clock.cpp 2020-10-13 13:44:04.190000000 +0100 ++++ zeromq-4.3.3/src/clock.cpp 2020-10-13 13:47:04.170000000 +0100 +@@ -126,9 +126,13 @@ + init_compatible_get_tick_count64 (); + #endif + ++#ifndef ZMQ_HAVE_WINDOWS + const uint64_t usecs_per_msec = 1000; ++#endif + const uint64_t usecs_per_sec = 1000000; ++#ifndef ZMQ_HAVE_WINDOWS + const uint64_t nsecs_per_usec = 1000; ++#endif + + zmq::clock_t::clock_t () : + _last_tsc (rdtsc ()), diff --git a/doc/amqp.md b/doc/amqp.md deleted file mode 100644 index a603f354b..000000000 --- a/doc/amqp.md +++ /dev/null @@ -1,137 +0,0 @@ -# Block and Transaction Broadcasting With AMQP 1.0 (Experimental Feature) - -[AMQP](https://www.amqp.org/) is an enterprise-level message queuing -protocol for the reliable passing of real-time data and business -transactions between applications. AMQP supports both broker and -brokerless messaging. AMQP 1.0 is an open standard and has been -ratified as ISO/IEC 19464. - -The Zcash daemon can be configured to act as a trusted "border -router", implementing the Zcash P2P protocol and relay, making -consensus decisions, maintaining the local blockchain database, -broadcasting locally generated transactions into the network, and -providing a queryable RPC interface to interact on a polled basis for -requesting blockchain related data. However, there exists only a -limited service to notify external software of events like the arrival -of new blocks or transactions. - -The AMQP facility implements a notification interface through a set -of specific notifiers. Currently there are notifiers that publish -blocks and transactions. This read-only facility requires only the -connection of a corresponding AMQP subscriber port in receiving -software. - -Currently the facility is not authenticated nor is there any two-way -protocol involvement. Therefore, subscribers should validate the -received data since it may be out of date, incomplete or even invalid. - -Because AMQP is message oriented, subscribers receive transactions -and blocks all-at-once and do not need to implement any sort of -buffering or reassembly. - -## Prerequisites - -The AMQP feature in Zcash requires [Qpid Proton](https://qpid.apache.org/proton/) -version 0.17 or newer, which you will need to install if you are not -using the depends system. Typically, it is packaged by distributions as -something like *libqpid-proton*. The C++ wrapper for AMQP *is* required. - -In order to run the example Python client scripts in contrib/ one must -also install *python-qpid-proton*, though this is not necessary for -daemon operation. - -## Security WARNING - -Enabling this feature even on the loopback interface only (e.g. binding -it to localhost or 127.0.0.1) will still expose it to the wilds of the -Internet, because of an attack vector called DNS rebinding. DNS -rebinding allows an attacker located remotely on the Internet to trick -applications that you're running on the same computer as Zcashd to -contact your supposedly localhost-only AMQP port, then, depending on the -program they may be able to attempt to attack it. - -Do not enable this feature unless you are sure that you know what you -are doing, and that you have a strong reason for thinking that you are -not vulnerable to this type of attack. - -## Enabling - -By default, the AMQP feature is automatically compiled in if the -necessary prerequisites are found. To disable, use --disable-proton -during the *configure* step of building zcashd: - - $ ./configure --disable-proton (other options) - -To actually enable operation, one must set the appropriate options on -the commandline or in the configuration file. - -## Usage - -AMQP support is currently an experimental feature, so you must pass -the option: - - -experimentalfeatures - -Currently, the following notifications are supported: - - -amqppubhashtx=address - -amqppubhashblock=address - -amqppubrawblock=address - -amqppubrawtx=address - -The address must be a valid AMQP address, where the same address can be -used in more than notification. Note that SSL and SASL addresses are -not currently supported. - -Launch zcashd like this: - - $ zcashd -amqppubhashtx=amqp://127.0.0.1:5672 - -Or this: - - $ zcashd -amqppubhashtx=amqp://127.0.0.1:5672 \ - -amqppubrawtx=amqp://127.0.0.1:5672 \ - -amqppubrawblock=amqp://127.0.0.1:5672 \ - -amqppubhashblock=amqp://127.0.0.1:5672 \ - -debug=amqp - -The debug category `amqp` enables AMQP-related logging. - -Each notification has a topic and body, where the header corresponds -to the notification type. For instance, for the notification `-amqpubhashtx` -the topic is `hashtx` (no null terminator) and the body is the hexadecimal -transaction hash (32 bytes). This transaction hash and the block hash -found in `hashblock` are in RPC byte order. - -These options can also be provided in zcash.conf. - -Please see `contrib/amqp/amqp_sub.py` for a working example of an -AMQP server listening for messages. - -## Remarks - -From the perspective of zcashd, the local end of an AMQP link is write-only. - -No information is broadcast that wasn't already received from the public -P2P network. - -No authentication or authorization is done on peers that zcashd connects -to; it is assumed that the AMQP link is exposed only to trusted entities, -using other means such as firewalling. - -TLS support may be added once OpenSSL has been removed from the Zcash -project and alternative TLS implementations have been evaluated. - -SASL support may be added in a future update for secure communication. - -Note that when the block chain tip changes, a reorganisation may occur -and just the tip will be notified. It is up to the subscriber to -retrieve the chain from the last known block to the new tip. - -At present, zcashd does not try to resend a notification if there was -a problem confirming receipt. Support for delivery guarantees such as -*at-least-once* and *exactly-once* will be added in in a future update. - -Currently, zcashd appends an up-counting sequence number to each notification -which allows listeners to detect lost notifications. - diff --git a/doc/authors.md b/doc/authors.md index 28b2a3eaf..1ada04d16 100644 --- a/doc/authors.md +++ b/doc/authors.md @@ -1,112 +1,130 @@ Zcash Contributors ================== -Jack Grigg (1027) +Jack Grigg (1064) Simon Liu (460) -Sean Bowe (325) -Eirik Ogilvie-Wigley (214) -Daira Hopwood (183) -Taylor Hornby (101) -Marshall Gaucher (99) -Wladimir J. van der Laan (96) +Sean Bowe (367) +Daira Hopwood (247) +Eirik Ogilvie-Wigley (216) +Wladimir J. van der Laan (122) +Taylor Hornby (112) +Alfredo Garcia (112) +Marshall Gaucher (100) +Kris Nuttycombe (89) Jay Graber (89) -Jonas Schnelli (71) -Alfredo Garcia (71) -Pieter Wuille (66) +Jonas Schnelli (73) +Pieter Wuille (70) +Cory Fields (63) Nathan Wilcox (56) -Larry Ruane (43) -Cory Fields (41) +Larry Ruane (56) +Ying Tong Lai (54) +Marco Falke (38) Kevin Gallagher (38) -Marco Falke (31) +practicalswift (36) +Dimitris Apostolou (28) Matt Corallo (25) -Kris Nuttycombe (25) -Dimitris Apostolou (22) +fanquake (24) +Luke Dashjr (18) Jonathan "Duke" Leto (18) -Luke Dashjr (16) -syd (15) +syd (16) avnish (14) +Per Grön (14) Jorge Timón (14) +Carl Dong (13) Gregory Maxwell (12) +Benjamin Winston (12) +Ariel Gabizon (12) Paige Peterson (11) -Ariel Gabizon (11) -practicalswift (9) nomnombtc (9) -Benjamin Winston (9) +Pavel Janík (9) kozyilmaz (8) -fanquake (8) Peter Todd (8) -Pavel Janík (7) +Charlie O'Keefe (8) +Ben Wilson (8) Jeff Garzik (7) -Charlie O'Keefe (7) +ying tong (6) +Philip Kaufmann (6) Marius Kjærstad (6) Karl-Johan Alm (6) David Mercer (6) Daniel Cousens (6) +jnewbery (5) ca333 (5) Suhas Daftuar (5) -Philip Kaufmann (5) Patrick Strateman (5) +Kaz Wesley (5) +João Barbosa (5) Johnathan Corgan (5) +John Newbery (5) +Jeremy Rubin (5) +George Tankersley (5) Gavin Andresen (5) Gareth Davies (5) Alex Morcos (5) sandakersmann (4) gladcow (4) +Zancas Wilcox (4) WO (4) -João Barbosa (4) -Jeremy Rubin (4) +MeshCollider (4) James O'Beirne (4) -George Tankersley (4) Daniel Kraft (4) -Ben Wilson (4) -zancas (3) +mruddy (3) lpescher (3) -Per Grön (3) +elbandi (3) +Sjors Provoost (3) Patick Strateman (3) NikVolf (3) -MeshCollider (3) +Nate Wilcox (3) +Julian Fleischer (3) Jim Posen (3) Jason Davies (3) +Evan Klitzke (3) +Danny Willems (3) Alfie John (3) rofl0r (2) -mruddy (2) +noname45688@gmail.com (2) kpcyrd (2) +isle2983 (2) face (2) aniemerg (2) UdjinM6 (2) Tim Ruffing (2) +Thomas Snider (2) +Solar Designer (2) Scott (2) Robert C. Seacord (2) Pejvan (2) Pavol Rusnak (2) Pavel Vasin (2) +Mustafa (2) Matthew King (2) Mary Moore-Simmons (2) -Kaz Wesley (2) +Martin Ankerl (2) Joe Turgeon (2) +Jeffrey Czyz (2) Jack Gavigan (2) ITH4Coinomia (2) -Evan Klitzke (2) Dagur Valberg Johannsson (2) Casey Rodarmor (2) -Carl Dong (2) Bryant Eisenbach (2) Brad Miller (2) Bjorn Hjortsberg (2) +Anthony Towns (2) Amgad Abdelhafez (2) Alex Tsankov (2) zathras-crypto (1) +vim88 (1) unsystemizer (1) tpantin (1) -therealyingtong (1) +teor (1) ptschip (1) murrayn (1) mrbandrews (1) kazcw (1) jeff-liang (1) jc (1) -isle2983 (1) instagibbs (1) +ewillbefull@gmail.com (1) emilrus (1) dexX7 (1) daniel (1) @@ -114,16 +132,19 @@ codetriage-readme-bot (1) calebogden (1) ayleph (1) avnish98 (1) +adityapk00 (1) Za Wilcox (1) Yuri Zhykin (1) William M Peaster (1) +Vidar Holen (1) +Vasil Dimov (1) Ulrich Kempken (1) Tom Ritter (1) Tom Harding (1) -Thomas Snider (1) Stephen (1) S. Matthew English (1) Ross Nicoll (1) +Rod Vagg (1) Richard Littauer (1) René Nyffenegger (1) R E Broadley (1) @@ -134,6 +155,7 @@ Paul Georgiou (1) Paragon Initiative Enterprises, LLC (1) NicolasDorier (1) Nicolas DORIER (1) +Nick (1) Nathaniel Mahieu (1) Murilo Santana (1) Miles Manley (1) @@ -141,10 +163,12 @@ Maxwell Gubler (1) Matt Quinn (1) Mark Friedenbach (1) Louis Nyffenegger (1) +LongShao007 (1) LitecoinZ (1) Leo Arias (1) Lauda (1) Lars-Magnus Skog (1) +Kristaps Kaupe (1) Kevin Pan (1) Jonas Nick (1) Jeffrey Walton (1) @@ -152,14 +176,18 @@ Jainan-Tandel (1) Ian T (1) Ian Munoz (1) Ian Kelling (1) +Hennadii Stepanov (1) Gregory Sanders (1) Gaurav Rana (1) Forrest Voight (1) Florian Schmaus (1) Ethan Heilman (1) Eran Tromer (1) +Dimitris Tsapakidis (1) +DesWurstes (1) Denis Lukianov (1) David Llop (1) +Dan Raviv (1) Chun Kuan Lee (1) Christian von Roques (1) Chirag Davé (1) @@ -172,10 +200,13 @@ Bob McElrath (1) Bitcoin Error Log (1) Ben Woosley (1) Ashley Holman (1) -Anthony Towns (1) +Andrew Chow (1) Allan Niemerg (1) Alex van der Peet (1) Alex (1) +Akio Nakamura (1) +Ahmad Kazi (1) +Aditya Kulkarni (1) Adam Weiss (1) Adam Langley (1) Adam Brown (1) diff --git a/doc/bitcoin-release-notes/release-notes-0.10.0.md b/doc/bitcoin-release-notes/release-notes-0.10.0.md deleted file mode 100644 index 986b8832e..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.10.0.md +++ /dev/null @@ -1,762 +0,0 @@ -Bitcoin Core version 0.10.0 is now available from: - - https://bitcoin.org/bin/0.10.0/ - -This is a new major version release, bringing both new features and -bug fixes. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrading warning ---------------------- - -Because release 0.10.0 makes use of headers-first synchronization and parallel -block download (see further), the block files and databases are not -backwards-compatible with older versions of Bitcoin Core or other software: - -* Blocks will be stored on disk out of order (in the order they are -received, really), which makes it incompatible with some tools or -other programs. Reindexing using earlier versions will also not work -anymore as a result of this. - -* The block index database will now hold headers for which no block is -stored on disk, which earlier versions won't support. - -If you want to be able to downgrade smoothly, make a backup of your entire data -directory. Without this your node will need start syncing (or importing from -bootstrap.dat) anew afterwards. It is possible that the data from a completely -synchronised 0.10 node may be usable in older versions as-is, but this is not -supported and may break as soon as the older version attempts to reindex. - -This does not affect wallet forward or backward compatibility. - - -Notable changes -=============== - -Faster synchronization ----------------------- - -Bitcoin Core now uses 'headers-first synchronization'. This means that we first -ask peers for block headers (a total of 27 megabytes, as of December 2014) and -validate those. In a second stage, when the headers have been discovered, we -download the blocks. However, as we already know about the whole chain in -advance, the blocks can be downloaded in parallel from all available peers. - -In practice, this means a much faster and more robust synchronization. On -recent hardware with a decent network link, it can be as little as 3 hours -for an initial full synchronization. You may notice a slower progress in the -very first few minutes, when headers are still being fetched and verified, but -it should gain speed afterwards. - -A few RPCs were added/updated as a result of this: -- `getblockchaininfo` now returns the number of validated headers in addition to -the number of validated blocks. -- `getpeerinfo` lists both the number of blocks and headers we know we have in -common with each peer. While synchronizing, the heights of the blocks that we -have requested from peers (but haven't received yet) are also listed as -'inflight'. -- A new RPC `getchaintips` lists all known branches of the block chain, -including those we only have headers for. - -Transaction fee changes ------------------------ - -This release automatically estimates how high a transaction fee (or how -high a priority) transactions require to be confirmed quickly. The default -settings will create transactions that confirm quickly; see the new -'txconfirmtarget' setting to control the tradeoff between fees and -confirmation times. Fees are added by default unless the 'sendfreetransactions' -setting is enabled. - -Prior releases used hard-coded fees (and priorities), and would -sometimes create transactions that took a very long time to confirm. - -Statistics used to estimate fees and priorities are saved in the -data directory in the `fee_estimates.dat` file just before -program shutdown, and are read in at startup. - -New command line options for transaction fee changes: -- `-txconfirmtarget=n` : create transactions that have enough fees (or priority) -so they are likely to begin confirmation within n blocks (default: 1). This setting -is over-ridden by the -paytxfee option. -- `-sendfreetransactions` : Send transactions as zero-fee transactions if possible -(default: 0) - -New RPC commands for fee estimation: -- `estimatefee nblocks` : Returns approximate fee-per-1,000-bytes needed for -a transaction to begin confirmation within nblocks. Returns -1 if not enough -transactions have been observed to compute a good estimate. -- `estimatepriority nblocks` : Returns approximate priority needed for -a zero-fee transaction to begin confirmation within nblocks. Returns -1 if not -enough free transactions have been observed to compute a good -estimate. - -RPC access control changes --------------------------- - -Subnet matching for the purpose of access control is now done -by matching the binary network address, instead of with string wildcard matching. -For the user this means that `-rpcallowip` takes a subnet specification, which can be - -- a single IP address (e.g. `1.2.3.4` or `fe80::0012:3456:789a:bcde`) -- a network/CIDR (e.g. `1.2.3.0/24` or `fe80::0000/64`) -- a network/netmask (e.g. `1.2.3.4/255.255.255.0` or `fe80::0012:3456:789a:bcde/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`) - -An arbitrary number of `-rpcallow` arguments can be given. An incoming connection will be accepted if its origin address -matches one of them. - -For example: - -| 0.9.x and before | 0.10.x | -|--------------------------------------------|---------------------------------------| -| `-rpcallowip=192.168.1.1` | `-rpcallowip=192.168.1.1` (unchanged) | -| `-rpcallowip=192.168.1.*` | `-rpcallowip=192.168.1.0/24` | -| `-rpcallowip=192.168.*` | `-rpcallowip=192.168.0.0/16` | -| `-rpcallowip=*` (dangerous!) | `-rpcallowip=::/0` (still dangerous!) | - -Using wildcards will result in the rule being rejected with the following error in debug.log: - - Error: Invalid -rpcallowip subnet specification: *. Valid are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). - - -REST interface --------------- - -A new HTTP API is exposed when running with the `-rest` flag, which allows -unauthenticated access to public node data. - -It is served on the same port as RPC, but does not need a password, and uses -plain HTTP instead of JSON-RPC. - -Assuming a local RPC server running on port 8332, it is possible to request: -- Blocks: http://localhost:8332/rest/block/*HASH*.*EXT* -- Blocks without transactions: http://localhost:8332/rest/block/notxdetails/*HASH*.*EXT* -- Transactions (requires `-txindex`): http://localhost:8332/rest/tx/*HASH*.*EXT* - -In every case, *EXT* can be `bin` (for raw binary data), `hex` (for hex-encoded -binary) or `json`. - -For more details, see the `doc/REST-interface.md` document in the repository. - -RPC Server "Warm-Up" Mode -------------------------- - -The RPC server is started earlier now, before most of the expensive -intialisations like loading the block index. It is available now almost -immediately after starting the process. However, until all initialisations -are done, it always returns an immediate error with code -28 to all calls. - -This new behaviour can be useful for clients to know that a server is already -started and will be available soon (for instance, so that they do not -have to start it themselves). - -Improved signing security -------------------------- - -For 0.10 the security of signing against unusual attacks has been -improved by making the signatures constant time and deterministic. - -This change is a result of switching signing to use libsecp256k1 -instead of OpenSSL. Libsecp256k1 is a cryptographic library -optimized for the curve Bitcoin uses which was created by Bitcoin -Core developer Pieter Wuille. - -There exist attacks[1] against most ECC implementations where an -attacker on shared virtual machine hardware could extract a private -key if they could cause a target to sign using the same key hundreds -of times. While using shared hosts and reusing keys are inadvisable -for other reasons, it's a better practice to avoid the exposure. - -OpenSSL has code in their source repository for derandomization -and reduction in timing leaks that we've eagerly wanted to use for a -long time, but this functionality has still not made its -way into a released version of OpenSSL. Libsecp256k1 achieves -significantly stronger protection: As far as we're aware this is -the only deployed implementation of constant time signing for -the curve Bitcoin uses and we have reason to believe that -libsecp256k1 is better tested and more thoroughly reviewed -than the implementation in OpenSSL. - -[1] https://eprint.iacr.org/2014/161.pdf - -Watch-only wallet support -------------------------- - -The wallet can now track transactions to and from wallets for which you know -all addresses (or scripts), even without the private keys. - -This can be used to track payments without needing the private keys online on a -possibly vulnerable system. In addition, it can help for (manual) construction -of multisig transactions where you are only one of the signers. - -One new RPC, `importaddress`, is added which functions similarly to -`importprivkey`, but instead takes an address or script (in hexadecimal) as -argument. After using it, outputs credited to this address or script are -considered to be received, and transactions consuming these outputs will be -considered to be sent. - -The following RPCs have optional support for watch-only: -`getbalance`, `listreceivedbyaddress`, `listreceivedbyaccount`, -`listtransactions`, `listaccounts`, `listsinceblock`, `gettransaction`. See the -RPC documentation for those methods for more information. - -Compared to using `getrawtransaction`, this mechanism does not require -`-txindex`, scales better, integrates better with the wallet, and is compatible -with future block chain pruning functionality. It does mean that all relevant -addresses need to added to the wallet before the payment, though. - -Consensus library ------------------ - -Starting from 0.10.0, the Bitcoin Core distribution includes a consensus library. - -The purpose of this library is to make the verification functionality that is -critical to Bitcoin's consensus available to other applications, e.g. to language -bindings such as [python-bitcoinlib](https://pypi.python.org/pypi/python-bitcoinlib) or -alternative node implementations. - -This library is called `libbitcoinconsensus.so` (or, `.dll` for Windows). -Its interface is defined in the C header [bitcoinconsensus.h](https://github.com/bitcoin/bitcoin/blob/0.10/src/script/bitcoinconsensus.h). - -In its initial version the API includes two functions: - -- `bitcoinconsensus_verify_script` verifies a script. It returns whether the indicated input of the provided serialized transaction -correctly spends the passed scriptPubKey under additional constraints indicated by flags -- `bitcoinconsensus_version` returns the API version, currently at an experimental `0` - -The functionality is planned to be extended to e.g. UTXO management in upcoming releases, but the interface -for existing methods should remain stable. - -Standard script rules relaxed for P2SH addresses ------------------------------------------------- - -The IsStandard() rules have been almost completely removed for P2SH -redemption scripts, allowing applications to make use of any valid -script type, such as "n-of-m OR y", hash-locked oracle addresses, etc. -While the Bitcoin protocol has always supported these types of script, -actually using them on mainnet has been previously inconvenient as -standard Bitcoin Core nodes wouldn't relay them to miners, nor would -most miners include them in blocks they mined. - -bitcoin-tx ----------- - -It has been observed that many of the RPC functions offered by bitcoind are -"pure functions", and operate independently of the bitcoind wallet. This -included many of the RPC "raw transaction" API functions, such as -createrawtransaction. - -bitcoin-tx is a newly introduced command line utility designed to enable easy -manipulation of bitcoin transactions. A summary of its operation may be -obtained via "bitcoin-tx --help" Transactions may be created or signed in a -manner similar to the RPC raw tx API. Transactions may be updated, deleting -inputs or outputs, or appending new inputs and outputs. Custom scripts may be -easily composed using a simple text notation, borrowed from the bitcoin test -suite. - -This tool may be used for experimenting with new transaction types, signing -multi-party transactions, and many other uses. Long term, the goal is to -deprecate and remove "pure function" RPC API calls, as those do not require a -server round-trip to execute. - -Other utilities "bitcoin-key" and "bitcoin-script" have been proposed, making -key and script operations easily accessible via command line. - -Mining and relay policy enhancements ------------------------------------- - -Bitcoin Core's block templates are now for version 3 blocks only, and any mining -software relying on its `getblocktemplate` must be updated in parallel to use -libblkmaker either version 0.4.2 or any version from 0.5.1 onward. -If you are solo mining, this will affect you the moment you upgrade Bitcoin -Core, which must be done prior to BIP66 achieving its 951/1001 status. -If you are mining with the stratum mining protocol: this does not affect you. -If you are mining with the getblocktemplate protocol to a pool: this will affect -you at the pool operator's discretion, which must be no later than BIP66 -achieving its 951/1001 status. - -The `prioritisetransaction` RPC method has been added to enable miners to -manipulate the priority of transactions on an individual basis. - -Bitcoin Core now supports BIP 22 long polling, so mining software can be -notified immediately of new templates rather than having to poll periodically. - -Support for BIP 23 block proposals is now available in Bitcoin Core's -`getblocktemplate` method. This enables miners to check the basic validity of -their next block before expending work on it, reducing risks of accidental -hardforks or mining invalid blocks. - -Two new options to control mining policy: -- `-datacarrier=0/1` : Relay and mine "data carrier" (OP_RETURN) transactions -if this is 1. -- `-datacarriersize=n` : Maximum size, in bytes, we consider acceptable for -"data carrier" outputs. - -The relay policy has changed to more properly implement the desired behavior of not -relaying free (or very low fee) transactions unless they have a priority above the -AllowFreeThreshold(), in which case they are relayed subject to the rate limiter. - -BIP 66: strict DER encoding for signatures ------------------------------------------- - -Bitcoin Core 0.10 implements BIP 66, which introduces block version 3, and a new -consensus rule, which prohibits non-DER signatures. Such transactions have been -non-standard since Bitcoin v0.8.0 (released in February 2013), but were -technically still permitted inside blocks. - -This change breaks the dependency on OpenSSL's signature parsing, and is -required if implementations would want to remove all of OpenSSL from the -consensus code. - -The same miner-voting mechanism as in BIP 34 is used: when 751 out of a -sequence of 1001 blocks have version number 3 or higher, the new consensus -rule becomes active for those blocks. When 951 out of a sequence of 1001 -blocks have version number 3 or higher, it becomes mandatory for all blocks. - -Backward compatibility with current mining software is NOT provided, thus miners -should read the first paragraph of "Mining and relay policy enhancements" above. - -0.10.0 Change log -================= - -Detailed release notes follow. This overview includes changes that affect external -behavior, not code moves, refactors or string updates. - -RPC: -- `f923c07` Support IPv6 lookup in bitcoin-cli even when IPv6 only bound on localhost -- `b641c9c` Fix addnode "onetry": Connect with OpenNetworkConnection -- `171ca77` estimatefee / estimatepriority RPC methods -- `b750cf1` Remove cli functionality from bitcoind -- `f6984e8` Add "chain" to getmininginfo, improve help in getblockchaininfo -- `99ddc6c` Add nLocalServices info to RPC getinfo -- `cf0c47b` Remove getwork() RPC call -- `2a72d45` prioritisetransaction -- `e44fea5` Add an option `-datacarrier` to allow users to disable relaying/mining data carrier transactions -- `2ec5a3d` Prevent easy RPC memory exhaustion attack -- `d4640d7` Added argument to getbalance to include watchonly addresses and fixed errors in balance calculation -- `83f3543` Added argument to listaccounts to include watchonly addresses -- `952877e` Showing 'involvesWatchonly' property for transactions returned by 'listtransactions' and 'listsinceblock'. It is only appended when the transaction involves a watchonly address -- `d7d5d23` Added argument to listtransactions and listsinceblock to include watchonly addresses -- `f87ba3d` added includeWatchonly argument to 'gettransaction' because it affects balance calculation -- `0fa2f88` added includedWatchonly argument to listreceivedbyaddress/...account -- `6c37f7f` `getrawchangeaddress`: fail when keypool exhausted and wallet locked -- `ff6a7af` getblocktemplate: longpolling support -- `c4a321f` Add peerid to getpeerinfo to allow correlation with the logs -- `1b4568c` Add vout to ListTransactions output -- `b33bd7a` Implement "getchaintips" RPC command to monitor blockchain forks -- `733177e` Remove size limit in RPC client, keep it in server -- `6b5b7cb` Categorize rpc help overview -- `6f2c26a` Closely track mempool byte total. Add "getmempoolinfo" RPC -- `aa82795` Add detailed network info to getnetworkinfo RPC -- `01094bd` Don't reveal whether password is <20 or >20 characters in RPC -- `57153d4` rpc: Compute number of confirmations of a block from block height -- `ff36cbe` getnetworkinfo: export local node's client sub-version string -- `d14d7de` SanitizeString: allow '(' and ')' -- `31d6390` Fixed setaccount accepting foreign address -- `b5ec5fe` update getnetworkinfo help with subversion -- `ad6e601` RPC additions after headers-first -- `33dfbf5` rpc: Fix leveldb iterator leak, and flush before `gettxoutsetinfo` -- `2aa6329` Enable customising node policy for datacarrier data size with a -datacarriersize option -- `f877aaa` submitblock: Use a temporary CValidationState to determine accurately the outcome of ProcessBlock -- `e69a587` submitblock: Support for returning specific rejection reasons -- `af82884` Add "warmup mode" for RPC server -- `e2655e0` Add unauthenticated HTTP REST interface to public blockchain data -- `683dc40` Disable SSLv3 (in favor of TLS) for the RPC client and server -- `44b4c0d` signrawtransaction: validate private key -- `9765a50` Implement BIP 23 Block Proposal -- `f9de17e` Add warning comment to getinfo - -Command-line options: -- `ee21912` Use netmasks instead of wildcards for IP address matching -- `deb3572` Add `-rpcbind` option to allow binding RPC port on a specific interface -- `96b733e` Add `-version` option to get just the version -- `1569353` Add `-stopafterblockimport` option -- `77cbd46` Let -zapwallettxes recover transaction meta data -- `1c750db` remove -tor compatibility code (only allow -onion) -- `4aaa017` rework help messages for fee-related options -- `4278b1d` Clarify error message when invalid -rpcallowip -- `6b407e4` -datadir is now allowed in config files -- `bdd5b58` Add option `-sysperms` to disable 077 umask (create new files with system default umask) -- `cbe39a3` Add "bitcoin-tx" command line utility and supporting modules -- `dbca89b` Trigger -alertnotify if network is upgrading without you -- `ad96e7c` Make -reindex cope with out-of-order blocks -- `16d5194` Skip reindexed blocks individually -- `ec01243` --tracerpc option for regression tests -- `f654f00` Change -genproclimit default to 1 -- `3c77714` Make -proxy set all network types, avoiding a connect leak -- `57be955` Remove -printblock, -printblocktree, and -printblockindex -- `ad3d208` remove -maxorphanblocks config parameter since it is no longer functional - -Block and transaction handling: -- `7a0e84d` ProcessGetData(): abort if a block file is missing from disk -- `8c93bf4` LoadBlockIndexDB(): Require block db reindex if any `blk*.dat` files are missing -- `77339e5` Get rid of the static chainMostWork (optimization) -- `4e0eed8` Allow ActivateBestChain to release its lock on cs_main -- `18e7216` Push cs_mains down in ProcessBlock -- `fa126ef` Avoid undefined behavior using CFlatData in CScript serialization -- `7f3b4e9` Relax IsStandard rules for pay-to-script-hash transactions -- `c9a0918` Add a skiplist to the CBlockIndex structure -- `bc42503` Use unordered_map for CCoinsViewCache with salted hash (optimization) -- `d4d3fbd` Do not flush the cache after every block outside of IBD (optimization) -- `ad08d0b` Bugfix: make CCoinsViewMemPool support pruned entries in underlying cache -- `5734d4d` Only remove actualy failed blocks from setBlockIndexValid -- `d70bc52` Rework block processing benchmark code -- `714a3e6` Only keep setBlockIndexValid entries that are possible improvements -- `ea100c7` Reduce maximum coinscache size during verification (reduce memory usage) -- `4fad8e6` Reject transactions with excessive numbers of sigops -- `b0875eb` Allow BatchWrite to destroy its input, reducing copying (optimization) -- `92bb6f2` Bypass reloading blocks from disk (optimization) -- `2e28031` Perform CVerifyDB on pcoinsdbview instead of pcoinsTip (reduce memory usage) -- `ab15b2e` Avoid copying undo data (optimization) -- `341735e` Headers-first synchronization -- `afc32c5` Fix rebuild-chainstate feature and improve its performance -- `e11b2ce` Fix large reorgs -- `ed6d1a2` Keep information about all block files in memory -- `a48f2d6` Abstract context-dependent block checking from acceptance -- `7e615f5` Fixed mempool sync after sending a transaction -- `51ce901` Improve chainstate/blockindex disk writing policy -- `a206950` Introduce separate flushing modes -- `9ec75c5` Add a locking mechanism to IsInitialBlockDownload to ensure it never goes from false to true -- `868d041` Remove coinbase-dependant transactions during reorg -- `723d12c` Remove txn which are invalidated by coinbase maturity during reorg -- `0cb8763` Check against MANDATORY flags prior to accepting to mempool -- `8446262` Reject headers that build on an invalid parent -- `008138c` Bugfix: only track UTXO modification after lookup - -P2P protocol and network code: -- `f80cffa` Do not trigger a DoS ban if SCRIPT_VERIFY_NULLDUMMY fails -- `c30329a` Add testnet DNS seed of Alex Kotenko -- `45a4baf` Add testnet DNS seed of Andreas Schildbach -- `f1920e8` Ping automatically every 2 minutes (unconditionally) -- `806fd19` Allocate receive buffers in on the fly -- `6ecf3ed` Display unknown commands received -- `aa81564` Track peers' available blocks -- `caf6150` Use async name resolving to improve net thread responsiveness -- `9f4da19` Use pong receive time rather than processing time -- `0127a9b` remove SOCKS4 support from core and GUI, use SOCKS5 -- `40f5cb8` Send rejects and apply DoS scoring for errors in direct block validation -- `dc942e6` Introduce whitelisted peers -- `c994d2e` prevent SOCKET leak in BindListenPort() -- `a60120e` Add built-in seeds for .onion -- `60dc8e4` Allow -onlynet=onion to be used -- `3a56de7` addrman: Do not propagate obviously poor addresses onto the network -- `6050ab6` netbase: Make SOCKS5 negotiation interruptible -- `604ee2a` Remove tx from AlreadyAskedFor list once we receive it, not when we process it -- `efad808` Avoid reject message feedback loops -- `71697f9` Separate protocol versioning from clientversion -- `20a5f61` Don't relay alerts to peers before version negotiation -- `b4ee0bd` Introduce preferred download peers -- `845c86d` Do not use third party services for IP detection -- `12a49ca` Limit the number of new addressses to accumulate -- `35e408f` Regard connection failures as attempt for addrman -- `a3a7317` Introduce 10 minute block download timeout -- `3022e7d` Require sufficent priority for relay of free transactions -- `58fda4d` Update seed IPs, based on bitcoin.sipa.be crawler data -- `18021d0` Remove bitnodes.io from dnsseeds. - -Validation: -- `6fd7ef2` Also switch the (unused) verification code to low-s instead of even-s -- `584a358` Do merkle root and txid duplicates check simultaneously -- `217a5c9` When transaction outputs exceed inputs, show the offending amounts so as to aid debugging -- `f74fc9b` Print input index when signature validation fails, to aid debugging -- `6fd59ee` script.h: set_vch() should shift a >32 bit value -- `d752ba8` Add SCRIPT_VERIFY_SIGPUSHONLY (BIP62 rule 2) (test only) -- `698c6ab` Add SCRIPT_VERIFY_MINIMALDATA (BIP62 rules 3 and 4) (test only) -- `ab9edbd` script: create sane error return codes for script validation and remove logging -- `219a147` script: check ScriptError values in script tests -- `0391423` Discourage NOPs reserved for soft-fork upgrades -- `98b135f` Make STRICTENC invalid pubkeys fail the script rather than the opcode -- `307f7d4` Report script evaluation failures in log and reject messages -- `ace39db` consensus: guard against openssl's new strict DER checks -- `12b7c44` Improve robustness of DER recoding code -- `76ce5c8` fail immediately on an empty signature - -Build system: -- `f25e3ad` Fix build in OS X 10.9 -- `65e8ba4` build: Switch to non-recursive make -- `460b32d` build: fix broken boost chrono check on some platforms -- `9ce0774` build: Fix windows configure when using --with-qt-libdir -- `ea96475` build: Add mention of --disable-wallet to bdb48 error messages -- `1dec09b` depends: add shared dependency builder -- `c101c76` build: Add --with-utils (bitcoin-cli and bitcoin-tx, default=yes). Help string consistency tweaks. Target sanity check fix -- `e432a5f` build: add option for reducing exports (v2) -- `6134b43` Fixing condition 'sabotaging' MSVC build -- `af0bd5e` osx: fix signing to make Gatekeeper happy (again) -- `a7d1f03` build: fix dynamic boost check when --with-boost= is used -- `d5fd094` build: fix qt test build when libprotobuf is in a non-standard path -- `2cf5f16` Add libbitcoinconsensus library -- `914868a` build: add a deterministic dmg signer -- `2d375fe` depends: bump openssl to 1.0.1k -- `b7a4ecc` Build: Only check for boost when building code that requires it - -Wallet: -- `b33d1f5` Use fee/priority estimates in wallet CreateTransaction -- `4b7b1bb` Sanity checks for estimates -- `c898846` Add support for watch-only addresses -- `d5087d1` Use script matching rather than destination matching for watch-only -- `d88af56` Fee fixes -- `a35b55b` Dont run full check every time we decrypt wallet -- `3a7c348` Fix make_change to not create half-satoshis -- `f606bb9` fix a possible memory leak in CWalletDB::Recover -- `870da77` fix possible memory leaks in CWallet::EncryptWallet -- `ccca27a` Watch-only fixes -- `9b1627d` [Wallet] Reduce minTxFee for transaction creation to 1000 satoshis -- `a53fd41` Deterministic signing -- `15ad0b5` Apply AreSane() checks to the fees from the network -- `11855c1` Enforce minRelayTxFee on wallet created tx and add a maxtxfee option - -GUI: -- `c21c74b` osx: Fix missing dock menu with qt5 -- `b90711c` Fix Transaction details shows wrong To: -- `516053c` Make links in 'About Bitcoin Core' clickable -- `bdc83e8` Ensure payment request network matches client network -- `65f78a1` Add GUI view of peer information -- `06a91d9` VerifyDB progress reporting -- `fe6bff2` Add BerkeleyDB version info to RPCConsole -- `b917555` PeerTableModel: Fix potential deadlock. #4296 -- `dff0e3b` Improve rpc console history behavior -- `95a9383` Remove CENT-fee-rule from coin control completely -- `56b07d2` Allow setting listen via GUI -- `d95ba75` Log messages with type>QtDebugMsg as non-debug -- `8969828` New status bar Unit Display Control and related changes -- `674c070` seed OpenSSL PNRG with Windows event data -- `509f926` Payment request parsing on startup now only changes network if a valid network name is specified -- `acd432b` Prevent balloon-spam after rescan -- `7007402` Implement SI-style (thin space) thoudands separator -- `91cce17` Use fixed-point arithmetic in amount spinbox -- `bdba2dd` Remove an obscure option no-one cares about -- `bd0aa10` Replace the temporary file hack currently used to change Bitcoin-Qt's dock icon (OS X) with a buffer-based solution -- `94e1b9e` Re-work overviewpage UI -- `8bfdc9a` Better looking trayicon -- `b197bf3` disable tray interactions when client model set to 0 -- `1c5f0af` Add column Watch-only to transactions list -- `21f139b` Fix tablet crash. closes #4854 -- `e84843c` Broken addresses on command line no longer trigger testnet -- `a49f11d` Change splash screen to normal window -- `1f9be98` Disable App Nap on OSX 10.9+ -- `27c3e91` Add proxy to options overridden if necessary -- `4bd1185` Allow "emergency" shutdown during startup -- `d52f072` Don't show wallet options in the preferences menu when running with -disablewallet -- `6093aa1` Qt: QProgressBar CPU-Issue workaround -- `0ed9675` [Wallet] Add global boolean whether to send free transactions (default=true) -- `ed3e5e4` [Wallet] Add global boolean whether to pay at least the custom fee (default=true) -- `e7876b2` [Wallet] Prevent user from paying a non-sense fee -- `c1c9d5b` Add Smartfee to GUI -- `e0a25c5` Make askpassphrase dialog behave more sanely -- `94b362d` On close of splashscreen interrupt verifyDB -- `b790d13` English translation update -- `8543b0d` Correct tooltip on address book page - -Tests: -- `b41e594` Fix script test handling of empty scripts -- `d3a33fc` Test CHECKMULTISIG with m == 0 and n == 0 -- `29c1749` Let tx (in)valid tests use any SCRIPT_VERIFY flag -- `6380180` Add rejection of non-null CHECKMULTISIG dummy values -- `21bf3d2` Add tests for BoostAsioToCNetAddr -- `b5ad5e7` Add Python test for -rpcbind and -rpcallowip -- `9ec0306` Add CODESEPARATOR/FindAndDelete() tests -- `75ebced` Added many rpc wallet tests -- `0193fb8` Allow multiple regression tests to run at once -- `92a6220` Hook up sanity checks -- `3820e01` Extend and move all crypto tests to crypto_tests.cpp -- `3f9a019` added list/get received by address/ account tests -- `a90689f` Remove timing-based signature cache unit test -- `236982c` Add skiplist unit tests -- `f4b00be` Add CChain::GetLocator() unit test -- `b45a6e8` Add test for getblocktemplate longpolling -- `cdf305e` Set -discover=0 in regtest framework -- `ed02282` additional test for OP_SIZE in script_valid.json -- `0072d98` script tests: BOOLAND, BOOLOR decode to integer -- `833ff16` script tests: values that overflow to 0 are true -- `4cac5db` script tests: value with trailing 0x00 is true -- `89101c6` script test: test case for 5-byte bools -- `d2d9dc0` script tests: add tests for CHECKMULTISIG limits -- `d789386` Add "it works" test for bitcoin-tx -- `df4d61e` Add bitcoin-tx tests -- `aa41ac2` Test IsPushOnly() with invalid push -- `6022b5d` Make `script_{valid,invalid}.json` validation flags configurable -- `8138cbe` Add automatic script test generation, and actual checksig tests -- `ed27e53` Add coins_tests with a large randomized CCoinViewCache test -- `9df9cf5` Make SCRIPT_VERIFY_STRICTENC compatible with BIP62 -- `dcb9846` Extend getchaintips RPC test -- `554147a` Ensure MINIMALDATA invalid tests can only fail one way -- `dfeec18` Test every numeric-accepting opcode for correct handling of the numeric minimal encoding rule -- `2b62e17` Clearly separate PUSHDATA and numeric argument MINIMALDATA tests -- `16d78bd` Add valid invert of invalid every numeric opcode tests -- `f635269` tests: enable alertnotify test for Windows -- `7a41614` tests: allow rpc-tests to get filenames for bitcoind and bitcoin-cli from the environment -- `5122ea7` tests: fix forknotify.py on windows -- `fa7f8cd` tests: remove old pull-tester scripts -- `7667850` tests: replace the old (unused since Travis) tests with new rpc test scripts -- `f4e0aef` Do signature-s negation inside the tests -- `1837987` Optimize -regtest setgenerate block generation -- `2db4c8a` Fix node ranges in the test framework -- `a8b2ce5` regression test only setmocktime RPC call -- `daf03e7` RPC tests: create initial chain with specific timestamps -- `8656dbb` Port/fix txnmall.sh regression test -- `ca81587` Test the exact order of CHECKMULTISIG sig/pubkey evaluation -- `7357893` Prioritize and display -testsafemode status in UI -- `f321d6b` Add key generation/verification to ECC sanity check -- `132ea9b` miner_tests: Disable checkpoints so they don't fail the subsidy-change test -- `bc6cb41` QA RPC tests: Add tests block block proposals -- `f67a9ce` Use deterministically generated script tests -- `11d7a7d` [RPC] add rpc-test for http keep-alive (persistent connections) -- `34318d7` RPC-test based on invalidateblock for mempool coinbase spends -- `76ec867` Use actually valid transactions for script tests -- `c8589bf` Add actual signature tests -- `e2677d7` Fix smartfees test for change to relay policy -- `263b65e` tests: run sanity checks in tests too - -Miscellaneous: -- `122549f` Fix incorrect checkpoint data for testnet3 -- `5bd02cf` Log used config file to debug.log on startup -- `68ba85f` Updated Debian example bitcoin.conf with config from wiki + removed some cruft and updated comments -- `e5ee8f0` Remove -beta suffix -- `38405ac` Add comment regarding experimental-use service bits -- `be873f6` Issue warning if collecting RandSeed data failed -- `8ae973c` Allocate more space if necessary in RandSeedAddPerfMon -- `675bcd5` Correct comment for 15-of-15 p2sh script size -- `fda3fed` libsecp256k1 integration -- `2e36866` Show nodeid instead of addresses in log (for anonymity) unless otherwise requested -- `cd01a5e` Enable paranoid corruption checks in LevelDB >= 1.16 -- `9365937` Add comment about never updating nTimeOffset past 199 samples -- `403c1bf` contrib: remove getwork-based pyminer (as getwork API call has been removed) -- `0c3e101` contrib: Added systemd .service file in order to help distributions integrate bitcoind -- `0a0878d` doc: Add new DNSseed policy -- `2887bff` Update coding style and add .clang-format -- `5cbda4f` Changed LevelDB cursors to use scoped pointers to ensure destruction when going out of scope -- `b4a72a7` contrib/linearize: split output files based on new-timestamp-year or max-file-size -- `e982b57` Use explicit fflush() instead of setvbuf() -- `234bfbf` contrib: Add init scripts and docs for Upstart and OpenRC -- `01c2807` Add warning about the merkle-tree algorithm duplicate txid flaw -- `d6712db` Also create pid file in non-daemon mode -- `772ab0e` contrib: use batched JSON-RPC in linarize-hashes (optimization) -- `7ab4358` Update bash-completion for v0.10 -- `6e6a36c` contrib: show pull # in prompt for github-merge script -- `5b9f842` Upgrade leveldb to 1.18, make chainstate databases compatible between ARM and x86 (issue #2293) -- `4e7c219` Catch UTXO set read errors and shutdown -- `867c600` Catch LevelDB errors during flush -- `06ca065` Fix CScriptID(const CScript& in) in empty script case - -Credits -======= - -Thanks to everyone who contributed to this release: - -- 21E14 -- Adam Weiss -- Aitor Pazos -- Alexander Jeng -- Alex Morcos -- Alon Muroch -- Andreas Schildbach -- Andrew Poelstra -- Andy Alness -- Ashley Holman -- Benedict Chan -- Ben Holden-Crowther -- Bryan Bishop -- BtcDrak -- Christian von Roques -- Clinton Christian -- Cory Fields -- Cozz Lovan -- daniel -- Daniel Kraft -- David Hill -- Derek701 -- dexX7 -- dllud -- Dominyk Tiller -- Doug -- elichai -- elkingtowa -- ENikS -- Eric Shaw -- Federico Bond -- Francis GASCHET -- Gavin Andresen -- Giuseppe Mazzotta -- Glenn Willen -- Gregory Maxwell -- gubatron -- HarryWu -- himynameismartin -- Huang Le -- Ian Carroll -- imharrywu -- Jameson Lopp -- Janusz Lenar -- JaSK -- Jeff Garzik -- JL2035 -- Johnathan Corgan -- Jonas Schnelli -- jtimon -- Julian Haight -- Kamil Domanski -- kazcw -- kevin -- kiwigb -- Kosta Zertsekel -- LongShao007 -- Luke Dashjr -- Mark Friedenbach -- Mathy Vanvoorden -- Matt Corallo -- Matthew Bogosian -- Micha -- Michael Ford -- Mike Hearn -- mrbandrews -- mruddy -- ntrgn -- Otto Allmendinger -- paveljanik -- Pavel Vasin -- Peter Todd -- phantomcircuit -- Philip Kaufmann -- Pieter Wuille -- pryds -- randy-waterhouse -- R E Broadley -- Rose Toomey -- Ross Nicoll -- Roy Badami -- Ruben Dario Ponticelli -- Rune K. Svendsen -- Ryan X. Charles -- Saivann -- sandakersmann -- SergioDemianLerner -- shshshsh -- sinetek -- Stuart Cardall -- Suhas Daftuar -- Tawanda Kembo -- Teran McKinney -- tm314159 -- Tom Harding -- Trevin Hofmann -- Whit J -- Wladimir J. van der Laan -- Yoichi Hirai -- Zak Wilcox - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). - diff --git a/doc/bitcoin-release-notes/release-notes-0.10.1.md b/doc/bitcoin-release-notes/release-notes-0.10.1.md deleted file mode 100644 index 8f59f1f68..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.10.1.md +++ /dev/null @@ -1,143 +0,0 @@ -Bitcoin Core version 0.10.1 is now available from: - - - -This is a new minor version release, bringing bug fixes and translation -updates. It is recommended to upgrade to this version. - -Please report bugs using the issue tracker at github: - - - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrade warning ------------------- - -Because release 0.10.0 and later makes use of headers-first synchronization and -parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: - -* Blocks will be stored on disk out of order (in the order they are -received, really), which makes it incompatible with some tools or -other programs. Reindexing using earlier versions will also not work -anymore as a result of this. - -* The block index database will now hold headers for which no block is -stored on disk, which earlier versions won't support. - -If you want to be able to downgrade smoothly, make a backup of your entire data -directory. Without this your node will need start syncing (or importing from -bootstrap.dat) anew afterwards. It is possible that the data from a completely -synchronised 0.10 node may be usable in older versions as-is, but this is not -supported and may break as soon as the older version attempts to reindex. - -This does not affect wallet forward or backward compatibility. - -Notable changes -=============== - -This is a minor release and hence there are no notable changes. -For the notable changes in 0.10, refer to the release notes for the -0.10.0 release at https://github.com/bitcoin/bitcoin/blob/v0.10.0/doc/release-notes.md - -0.10.1 Change log -================= - -Detailed release notes follow. This overview includes changes that affect external -behavior, not code moves, refactors or string updates. - -RPC: -- `7f502be` fix crash: createmultisig and addmultisigaddress -- `eae305f` Fix missing lock in submitblock - -Block (database) and transaction handling: -- `1d2cdd2` Fix InvalidateBlock to add chainActive.Tip to setBlockIndexCandidates -- `c91c660` fix InvalidateBlock to repopulate setBlockIndexCandidates -- `002c8a2` fix possible block db breakage during re-index -- `a1f425b` Add (optional) consistency check for the block chain data structures -- `1c62e84` Keep mempool consistent during block-reorgs -- `57d1f46` Fix CheckBlockIndex for reindex -- `bac6fca` Set nSequenceId when a block is fully linked - -P2P protocol and network code: -- `78f64ef` don't trickle for whitelisted nodes -- `ca301bf` Reduce fingerprinting through timestamps in 'addr' messages. -- `200f293` Ignore getaddr messages on Outbound connections. -- `d5d8998` Limit message sizes before transfer -- `aeb9279` Better fingerprinting protection for non-main-chain getdatas. -- `cf0218f` Make addrman's bucket placement deterministic (countermeasure 1 against eclipse attacks, see http://cs-people.bu.edu/heilman/eclipse/) -- `0c6f334` Always use a 50% chance to choose between tried and new entries (countermeasure 2 against eclipse attacks) -- `214154e` Do not bias outgoing connections towards fresh addresses (countermeasure 2 against eclipse attacks) -- `aa587d4` Scale up addrman (countermeasure 6 against eclipse attacks) -- `139cd81` Cap nAttempts penalty at 8 and switch to pow instead of a division loop - -Validation: -- `d148f62` Acquire CCheckQueue's lock to avoid race condition - -Build system: -- `8752b5c` 0.10 fix for crashes on OSX 10.6 - -Wallet: -- N/A - -GUI: -- `2c08406` some mac specifiy cleanup (memory handling, unnecessary code) -- `81145a6` fix OSX dock icon window reopening -- `786cf72` fix a issue where "command line options"-action overwrite "Preference"-action (on OSX) - -Tests: -- `1117378` add RPC test for InvalidateBlock - -Miscellaneous: -- `c9e022b` Initialization: set Boost path locale in main thread -- `23126a0` Sanitize command strings before logging them. -- `323de27` Initialization: setup environment before starting Qt tests -- `7494e09` Initialization: setup environment before starting tests -- `df45564` Initialization: set fallback locale as environment variable - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alex Morcos -- Cory Fields -- dexX7 -- fsb4000 -- Gavin Andresen -- Gregory Maxwell -- Ivan Pustogarov -- Jonas Schnelli -- Matt Corallo -- mrbandrews -- Pieter Wuille -- Ruben de Vries -- Suhas Daftuar -- Wladimir J. van der Laan - -And all those who contributed additional code review and/or security research: -- 21E14 -- Alison Kendler -- Aviv Zohar -- Ethan Heilman -- Evil-Knievel -- fanquake -- Jeff Garzik -- Jonas Nick -- Luke Dashjr -- Patrick Strateman -- Philip Kaufmann -- Sergio Demian Lerner -- Sharon Goldberg - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/bitcoin-release-notes/release-notes-0.10.2.md b/doc/bitcoin-release-notes/release-notes-0.10.2.md deleted file mode 100644 index 192ed69d2..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.10.2.md +++ /dev/null @@ -1,86 +0,0 @@ -Bitcoin Core version 0.10.2 is now available from: - - - -This is a new minor version release, bringing minor bug fixes and translation -updates. It is recommended to upgrade to this version. - -Please report bugs using the issue tracker at github: - - - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrade warning ------------------- - -Because release 0.10.0 and later makes use of headers-first synchronization and -parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: - -* Blocks will be stored on disk out of order (in the order they are -received, really), which makes it incompatible with some tools or -other programs. Reindexing using earlier versions will also not work -anymore as a result of this. - -* The block index database will now hold headers for which no block is -stored on disk, which earlier versions won't support. - -If you want to be able to downgrade smoothly, make a backup of your entire data -directory. Without this your node will need start syncing (or importing from -bootstrap.dat) anew afterwards. It is possible that the data from a completely -synchronised 0.10 node may be usable in older versions as-is, but this is not -supported and may break as soon as the older version attempts to reindex. - -This does not affect wallet forward or backward compatibility. - -Notable changes -=============== - -This fixes a serious problem on Windows with data directories that have non-ASCII -characters (https://github.com/bitcoin/bitcoin/issues/6078). - -For other platforms there are no notable changes. - -For the notable changes in 0.10, refer to the release notes -at https://github.com/bitcoin/bitcoin/blob/v0.10.0/doc/release-notes.md - -0.10.2 Change log -================= - -Detailed release notes follow. This overview includes changes that affect external -behavior, not code moves, refactors or string updates. - -Wallet: -- `824c011` fix boost::get usage with boost 1.58 - -Miscellaneous: -- `da65606` Avoid crash on start in TestBlockValidity with gen=1. -- `424ae66` don't imbue boost::filesystem::path with locale "C" on windows (fixes #6078) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Cory Fields -- Gregory Maxwell -- Jonas Schnelli -- Wladimir J. van der Laan - -And all those who contributed additional code review and/or security research: - -- dexX7 -- Pieter Wuille -- vayvanne - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/bitcoin-release-notes/release-notes-0.10.3.md b/doc/bitcoin-release-notes/release-notes-0.10.3.md deleted file mode 100644 index 8a110e562..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.10.3.md +++ /dev/null @@ -1,165 +0,0 @@ -Bitcoin Core version 0.10.3 is now available from: - - - -This is a new minor version release, bringing security fixes and translation -updates. It is recommended to upgrade to this version as soon as possible. - -Please report bugs using the issue tracker at github: - - - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrade warning ------------------- - -Because release 0.10.0 and later makes use of headers-first synchronization and -parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: - -* Blocks will be stored on disk out of order (in the order they are -received, really), which makes it incompatible with some tools or -other programs. Reindexing using earlier versions will also not work -anymore as a result of this. - -* The block index database will now hold headers for which no block is -stored on disk, which earlier versions won't support. - -If you want to be able to downgrade smoothly, make a backup of your entire data -directory. Without this your node will need start syncing (or importing from -bootstrap.dat) anew afterwards. It is possible that the data from a completely -synchronised 0.10 node may be usable in older versions as-is, but this is not -supported and may break as soon as the older version attempts to reindex. - -This does not affect wallet forward or backward compatibility. - -Notable changes -=============== - -Fix buffer overflow in bundled upnp ------------------------------------- - -Bundled miniupnpc was updated to 1.9.20151008. This fixes a buffer overflow in -the XML parser during initial network discovery. - -Details can be found here: http://talosintel.com/reports/TALOS-2015-0035/ - -This applies to the distributed executables only, not when building from source or -using distribution provided packages. - -Additionally, upnp has been disabled by default. This may result in a lower -number of reachable nodes on IPv4, however this prevents future libupnpc -vulnerabilities from being a structural risk to the network -(see https://github.com/bitcoin/bitcoin/pull/6795). - -Test for LowS signatures before relaying ------------------------------------------ - -Make the node require the canonical 'low-s' encoding for ECDSA signatures when -relaying or mining. This removes a nuisance malleability vector. - -Consensus behavior is unchanged. - -If widely deployed this change would eliminate the last remaining known vector -for nuisance malleability on SIGHASH_ALL P2PKH transactions. On the down-side -it will block most transactions made by sufficiently out of date software. - -Unlike the other avenues to change txids on transactions this -one was randomly violated by all deployed bitcoin software prior to -its discovery. So, while other malleability vectors where made -non-standard as soon as they were discovered, this one has remained -permitted. Even BIP62 did not propose applying this rule to -old version transactions, but conforming implementations have become -much more common since BIP62 was initially written. - -Bitcoin Core has produced compatible signatures since a28fb70e in -September 2013, but this didn't make it into a release until 0.9 -in March 2014; Bitcoinj has done so for a similar span of time. -Bitcoinjs and electrum have been more recently updated. - -This does not replace the need for BIP62 or similar, as miners can -still cooperate to break transactions. Nor does it replace the -need for wallet software to handle malleability sanely[1]. This -only eliminates the cheap and irritating DOS attack. - -[1] On the Malleability of Bitcoin Transactions -Marcin Andrychowicz, Stefan Dziembowski, Daniel Malinowski, Åukasz Mazurek -http://fc15.ifca.ai/preproceedings/bitcoin/paper_9.pdf - -Minimum relay fee default increase ------------------------------------ - -The default for the `-minrelaytxfee` setting has been increased from `0.00001` -to `0.00005`. - -This is necessitated by the current transaction flooding, causing -outrageous memory usage on nodes due to the mempool ballooning. This is a -temporary measure, bridging the time until a dynamic method for determining -this fee is merged (which will be in 0.12). - -(see https://github.com/bitcoin/bitcoin/pull/6793, as well as the 0.11.0 -release notes, in which this value was suggested) - -0.10.3 Change log -================= - -Detailed release notes follow. This overview includes changes that affect external -behavior, not code moves, refactors or string updates. - -- #6186 `e4a7d51` Fix two problems in CSubnet parsing -- #6153 `ebd7d8d` Parameter interaction: disable upnp if -proxy set -- #6203 `ecc96f5` Remove P2SH coinbase flag, no longer interesting -- #6226 `181771b` json: fail read_string if string contains trailing garbage -- #6244 `09334e0` configure: Detect (and reject) LibreSSL -- #6276 `0fd8464` Fix getbalance * 0 -- #6274 `be64204` Add option `-alerts` to opt out of alert system -- #6319 `3f55638` doc: update mailing list address -- #6438 `7e66e9c` openssl: avoid config file load/race -- #6439 `255eced` Updated URL location of netinstall for Debian -- #6412 `0739e6e` Test whether created sockets are select()able -- #6694 `f696ea1` [QT] fix thin space word wrap line brake issue -- #6704 `743cc9e` Backport bugfixes to 0.10 -- #6769 `1cea6b0` Test LowS in standardness, removes nuisance malleability vector. -- #6789 `093d7b5` Update miniupnpc to 1.9.20151008 -- #6795 `f2778e0` net: Disable upnp by default -- #6797 `91ef4d9` Do not store more than 200 timedata samples -- #6793 `842c48d` Bump minrelaytxfee default - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Adam Weiss -- Alex Morcos -- Casey Rodarmor -- Cory Fields -- fanquake -- Gregory Maxwell -- Jonas Schnelli -- J Ross Nicoll -- Luke Dashjr -- Pavel Vasin -- Pieter Wuille -- randy-waterhouse -- ฿tcDrak -- Tom Harding -- Veres Lajos -- Wladimir J. van der Laan - -And all those who contributed additional code review and/or security research: - -- timothy on IRC for reporting the issue -- Vulnerability in miniupnp discovered by Aleksandar Nikolic of Cisco Talos - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/bitcoin-release-notes/release-notes-0.11.1.md b/doc/bitcoin-release-notes/release-notes-0.11.1.md deleted file mode 100644 index 799205691..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.11.1.md +++ /dev/null @@ -1,172 +0,0 @@ -Bitcoin Core version 0.11.1 is now available from: - - - -This is a new minor version release, bringing security fixes. It is recommended -to upgrade to this version as soon as possible. - -Please report bugs using the issue tracker at github: - - - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrade warning ------------------- - -Because release 0.10.0 and later makes use of headers-first synchronization and -parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: - -* Blocks will be stored on disk out of order (in the order they are -received, really), which makes it incompatible with some tools or -other programs. Reindexing using earlier versions will also not work -anymore as a result of this. - -* The block index database will now hold headers for which no block is -stored on disk, which earlier versions won't support. - -If you want to be able to downgrade smoothly, make a backup of your entire data -directory. Without this your node will need start syncing (or importing from -bootstrap.dat) anew afterwards. It is possible that the data from a completely -synchronised 0.10 node may be usable in older versions as-is, but this is not -supported and may break as soon as the older version attempts to reindex. - -This does not affect wallet forward or backward compatibility. There are no -known problems when downgrading from 0.11.x to 0.10.x. - -Notable changes -=============== - -Fix buffer overflow in bundled upnp ------------------------------------- - -Bundled miniupnpc was updated to 1.9.20151008. This fixes a buffer overflow in -the XML parser during initial network discovery. - -Details can be found here: http://talosintel.com/reports/TALOS-2015-0035/ - -This applies to the distributed executables only, not when building from source or -using distribution provided packages. - -Additionally, upnp has been disabled by default. This may result in a lower -number of reachable nodes on IPv4, however this prevents future libupnpc -vulnerabilities from being a structural risk to the network -(see https://github.com/bitcoin/bitcoin/pull/6795). - -Test for LowS signatures before relaying ------------------------------------------ - -Make the node require the canonical 'low-s' encoding for ECDSA signatures when -relaying or mining. This removes a nuisance malleability vector. - -Consensus behavior is unchanged. - -If widely deployed this change would eliminate the last remaining known vector -for nuisance malleability on SIGHASH_ALL P2PKH transactions. On the down-side -it will block most transactions made by sufficiently out of date software. - -Unlike the other avenues to change txids on transactions this -one was randomly violated by all deployed bitcoin software prior to -its discovery. So, while other malleability vectors where made -non-standard as soon as they were discovered, this one has remained -permitted. Even BIP62 did not propose applying this rule to -old version transactions, but conforming implementations have become -much more common since BIP62 was initially written. - -Bitcoin Core has produced compatible signatures since a28fb70e in -September 2013, but this didn't make it into a release until 0.9 -in March 2014; Bitcoinj has done so for a similar span of time. -Bitcoinjs and electrum have been more recently updated. - -This does not replace the need for BIP62 or similar, as miners can -still cooperate to break transactions. Nor does it replace the -need for wallet software to handle malleability sanely[1]. This -only eliminates the cheap and irritating DOS attack. - -[1] On the Malleability of Bitcoin Transactions -Marcin Andrychowicz, Stefan Dziembowski, Daniel Malinowski, Åukasz Mazurek -http://fc15.ifca.ai/preproceedings/bitcoin/paper_9.pdf - -Minimum relay fee default increase ------------------------------------ - -The default for the `-minrelaytxfee` setting has been increased from `0.00001` -to `0.00005`. - -This is necessitated by the current transaction flooding, causing -outrageous memory usage on nodes due to the mempool ballooning. This is a -temporary measure, bridging the time until a dynamic method for determining -this fee is merged (which will be in 0.12). - -(see https://github.com/bitcoin/bitcoin/pull/6793, as well as the 0.11 -release notes, in which this value was suggested) - -0.11.1 Change log -================= - -Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, refactors and string updates. For convenience in locating -the code changes and accompanying discussion, both the pull request and -git merge commit are mentioned. - -- #6438 `2531438` openssl: avoid config file load/race -- #6439 `980f820` Updated URL location of netinstall for Debian -- #6384 `8e5a969` qt: Force TLS1.0+ for SSL connections -- #6471 `92401c2` Depends: bump to qt 5.5 -- #6224 `93b606a` Be even stricter in processing unrequested blocks -- #6571 `100ac4e` libbitcoinconsensus: avoid a crash in multi-threaded environments -- #6545 `649f5d9` Do not store more than 200 timedata samples. -- #6694 `834e299` [QT] fix thin space word wrap line break issue -- #6703 `1cd7952` Backport bugfixes to 0.11 -- #6750 `5ed8d0b` Recent rejects backport to v0.11 -- #6769 `71cc9d9` Test LowS in standardness, removes nuisance malleability vector. -- #6789 `b4ad73f` Update miniupnpc to 1.9.20151008 -- #6785 `b4dc33e` Backport to v0.11: In (strCommand == "tx"), return if AlreadyHave() -- #6412 `0095b9a` Test whether created sockets are select()able -- #6795 `4dbcec0` net: Disable upnp by default -- #6793 `e7bcc4a` Bump minrelaytxfee default - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Adam Weiss -- Alex Morcos -- Casey Rodarmor -- Cory Fields -- fanquake -- Gregory Maxwell -- Jonas Schnelli -- J Ross Nicoll -- Luke Dashjr -- Pavel Janík -- Pavel Vasin -- Peter Todd -- Pieter Wuille -- randy-waterhouse -- Ross Nicoll -- Suhas Daftuar -- tailsjoin -- ฿tcDrak -- Tom Harding -- Veres Lajos -- Wladimir J. van der Laan - -And those who contributed additional code review and/or security research: - -- timothy on IRC for reporting the issue -- Vulnerability in miniupnp discovered by Aleksandar Nikolic of Cisco Talos - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). - diff --git a/doc/bitcoin-release-notes/release-notes-0.11.2.md b/doc/bitcoin-release-notes/release-notes-0.11.2.md deleted file mode 100644 index 2351b8065..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.11.2.md +++ /dev/null @@ -1,217 +0,0 @@ -Bitcoin Core version 0.11.2 is now available from: - - - -This is a new minor version release, bringing bug fixes, the BIP65 -(CLTV) consensus change, and relay policy preparation for BIP113. It is -recommended to upgrade to this version as soon as possible. - -Please report bugs using the issue tracker at github: - - - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrade warning ------------------- - -Because release 0.10.0 and later makes use of headers-first synchronization and -parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: - -* Blocks will be stored on disk out of order (in the order they are -received, really), which makes it incompatible with some tools or -other programs. Reindexing using earlier versions will also not work -anymore as a result of this. - -* The block index database will now hold headers for which no block is -stored on disk, which earlier versions won't support. - -If you want to be able to downgrade smoothly, make a backup of your entire data -directory. Without this your node will need start syncing (or importing from -bootstrap.dat) anew afterwards. It is possible that the data from a completely -synchronised 0.10 node may be usable in older versions as-is, but this is not -supported and may break as soon as the older version attempts to reindex. - -This does not affect wallet forward or backward compatibility. There are no -known problems when downgrading from 0.11.x to 0.10.x. - -Notable changes since 0.11.1 -============================ - -BIP65 soft fork to enforce OP_CHECKLOCKTIMEVERIFY opcode --------------------------------------------------------- - -This release includes several changes related to the [BIP65][] soft fork -which redefines the existing OP_NOP2 opcode as OP_CHECKLOCKTIMEVERIFY -(CLTV) so that a transaction output can be made unspendable until a -specified point in the future. - -1. This release will only relay and mine transactions spending a CLTV - output if they comply with the BIP65 rules as provided in code. - -2. This release will produce version 4 blocks by default. Please see the - *notice to miners* below. - -3. Once 951 out of a sequence of 1,001 blocks on the local node's best block - chain contain version 4 (or higher) blocks, this release will no - longer accept new version 3 blocks and it will only accept version 4 - blocks if they comply with the BIP65 rules for CLTV. - -For more information about the soft-forking change, please see - - -Graphs showing the progress towards block version 4 adoption may be -found at the URLs below: - -- Block versions over the last 50,000 blocks as progress towards BIP65 - consensus enforcement: - -- Block versions over the last 2,000 blocks showing the days to the - earliest possible BIP65 consensus-enforced block: - -**Notice to miners:** Bitcoin Core’s block templates are now for -version 4 blocks only, and any mining software relying on its -getblocktemplate must be updated in parallel to use libblkmaker either -version 0.4.3 or any version from 0.5.2 onward. - -- If you are solo mining, this will affect you the moment you upgrade - Bitcoin Core, which must be done prior to BIP65 achieving its 951/1001 - status. - -- If you are mining with the stratum mining protocol: this does not - affect you. - -- If you are mining with the getblocktemplate protocol to a pool: this - will affect you at the pool operator’s discretion, which must be no - later than BIP65 achieving its 951/1001 status. - -[BIP65]: https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki - -BIP113 mempool-only locktime enforcement using GetMedianTimePast() ----------------------------------------------------------------- - -Bitcoin transactions currently may specify a locktime indicating when -they may be added to a valid block. Current consensus rules require -that blocks have a block header time greater than the locktime specified -in any transaction in that block. - -Miners get to choose what time they use for their header time, with the -consensus rule being that no node will accept a block whose time is more -than two hours in the future. This creates a incentive for miners to -set their header times to future values in order to include locktimed -transactions which weren't supposed to be included for up to two more -hours. - -The consensus rules also specify that valid blocks may have a header -time greater than that of the median of the 11 previous blocks. This -GetMedianTimePast() time has a key feature we generally associate with -time: it can't go backwards. - -[BIP113][] specifies a soft fork (**not enforced in this release**) that -weakens this perverse incentive for individual miners to use a future -time by requiring that valid blocks have a computed GetMedianTimePast() -greater than the locktime specified in any transaction in that block. - -Mempool inclusion rules currently require transactions to be valid for -immediate inclusion in a block in order to be accepted into the mempool. -This release begins applying the BIP113 rule to received transactions, -so transaction whose time is greater than the GetMedianTimePast() will -no longer be accepted into the mempool. - -**Implication for miners:** you will begin rejecting transactions that -would not be valid under BIP113, which will prevent you from producing -invalid blocks if/when BIP113 is enforced on the network. Any -transactions which are valid under the current rules but not yet valid -under the BIP113 rules will either be mined by other miners or delayed -until they are valid under BIP113. Note, however, that time-based -locktime transactions are more or less unseen on the network currently. - -**Implication for users:** GetMedianTimePast() always trails behind the -current time, so a transaction locktime set to the present time will be -rejected by nodes running this release until the median time moves -forward. To compensate, subtract one hour (3,600 seconds) from your -locktimes to allow those transactions to be included in mempools at -approximately the expected time. - -[BIP113]: https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki - -Windows bug fix for corrupted UTXO database on unclean shutdowns ----------------------------------------------------------------- - -Several Windows users reported that they often need to reindex the -entire blockchain after an unclean shutdown of Bitcoin Core on Windows -(or an unclean shutdown of Windows itself). Although unclean shutdowns -remain unsafe, this release no longer relies on memory-mapped files for -the UTXO database, which significantly reduced the frequency of unclean -shutdowns leading to required reindexes during testing. - -For more information, see: - -Other fixes for database corruption on Windows are expected in the -next major release. - -0.11.2 Change log -================= - -Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, refactors and string updates. For convenience in locating -the code changes and accompanying discussion, both the pull request and -git merge commit are mentioned. - -- #6124 `684636b` Make CScriptNum() take nMaxNumSize as an argument -- #6124 `4fa7a04` Replace NOP2 with CHECKLOCKTIMEVERIFY (BIP65) -- #6124 `6ea5ca4` Enable CHECKLOCKTIMEVERIFY as a standard script verify flag -- #6351 `5e82e1c` Add CHECKLOCKTIMEVERIFY (BIP65) soft-fork logic -- #6353 `ba1da90` Show softfork status in getblockchaininfo -- #6351 `6af25b0` Add BIP65 to getblockchaininfo softforks list -- #6688 `01878c9` Fix locking in GetTransaction -- #6653 `b3eaa30` [Qt] Raise debug window when requested -- #6600 `1e672ae` Debian/Ubuntu: Include bitcoin-tx binary -- #6600 `2394f4d` Debian/Ubuntu: Split bitcoin-tx into its own package -- #5987 `33d6825` Bugfix: Allow mining on top of old tip blocks for testnet -- #6852 `21e58b8` build: make sure OpenSSL heeds noexecstack -- #6846 `af6edac` alias `-h` for `--help` -- #6867 `95a5039` Set TCP_NODELAY on P2P sockets. -- #6856 `dfe55bd` Do not allow blockfile pruning during reindex. -- #6566 `a1d3c6f` Add rules--presently disabled--for using GetMedianTimePast as end point for lock-time calculations -- #6566 `f720c5f` Enable policy enforcing GetMedianTimePast as the end point of lock-time constraints -- #6917 `0af5b8e` leveldb: Win32WritableFile without memory mapping -- #6948 `4e895b0` Always flush block and undo when switching to new file - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alex Morcos -- ฿tcDrak -- Chris Kleeschulte -- Daniel Cousens -- Diego Viola -- Eric Lombrozo -- Esteban Ordano -- Gregory Maxwell -- Luke Dashjr -- Marco Falke -- Mark Friedenbach -- Matt Corallo -- Micha -- Mitchell Cash -- Peter Todd -- Pieter Wuille -- Wladimir J. van der Laan -- Zak Wilcox - -And those who contributed additional code review and/or security research. - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/bitcoin-release-notes/release-notes-0.3.12.md b/doc/bitcoin-release-notes/release-notes-0.3.12.md deleted file mode 100644 index 38715bc75..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.3.12.md +++ /dev/null @@ -1,13 +0,0 @@ -Version 0.3.12 is now available. - -Features: -* json-rpc errors return a more standard error object. (thanks to Gavin Andresen) -* json-rpc command line returns exit codes. -* json-rpc "backupwallet" command. -* Recovers and continues if an exception is caused by a message you received. Other nodes shouldn't be able to cause an exception, and it hasn't happened before, but if a way is found to cause an exception, this would keep it from being used to stop network nodes. - -If you have json-rpc code that checks the contents of the error string, you need to change it to expect error objects of the form {"code":,"message":}, which is the standard. See this thread: -http://www.bitcoin.org/smf/index.php?topic=969.0 - -Download: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.12/ diff --git a/doc/bitcoin-release-notes/release-notes-0.3.13.md b/doc/bitcoin-release-notes/release-notes-0.3.13.md deleted file mode 100644 index 2b95ff233..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.3.13.md +++ /dev/null @@ -1,26 +0,0 @@ -Version 0.3.13 is now available. You should upgrade to prevent potential problems with 0/unconfirmed transactions. Note: 0.3.13 prevents problems if you haven't already spent a 0/unconfirmed transaction, but if that already happened, you need 0.3.13.2. - -Changes: -* Don't count or spend payments until they have 1 confirmation. -* Internal version number from 312 to 31300. -* Only accept transactions sent by IP address if -allowreceivebyip is specified. -* Dropped DB_PRIVATE Berkeley DB flag. -* Fix problem sending the last cent with sub-cent fractional change. -* Auto-detect whether to use 128-bit 4-way SSE2 on Linux. -Gavin Andresen: -* Option -rpcallowip= to accept json-rpc connections from another machine. -* Clean shutdown on SIGTERM on Linux. - -Download: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.13/ - -(Thanks Laszlo for the Mac OSX build!) - -Note: -The SSE2 auto-detect in the Linux 64-bit version doesn't work with AMD in 64-bit mode. Please try this instead and let me know if it gets it right: -http://www.bitcoin.org/download/bitcoin-0.3.13.1-specialbuild-linux64.tar.gz - -You can still control the SSE2 use manually with -4way and -4way=0. - -Version 0.3.13.2 (SVN rev 161) has improvements for the case where you already had 0/unconfirmed transactions that you might have already spent. Here's a Windows build of it: -http://www.bitcoin.org/download/bitcoin-0.3.13.2-win32-setup.exe diff --git a/doc/bitcoin-release-notes/release-notes-0.3.14.md b/doc/bitcoin-release-notes/release-notes-0.3.14.md deleted file mode 100644 index e73052ed9..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.3.14.md +++ /dev/null @@ -1,11 +0,0 @@ -Version 0.3.14 is now available -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.14/ - -Changes: -* Key pool feature for safer wallet backup -Gavin Andresen: -* TEST network mode with switch -testnet -* Option to use SSL for JSON-RPC connections on unix/osx -* validateaddress RPC command -eurekafag: -* Russian translation diff --git a/doc/bitcoin-release-notes/release-notes-0.3.15.md b/doc/bitcoin-release-notes/release-notes-0.3.15.md deleted file mode 100644 index b98052ef5..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.3.15.md +++ /dev/null @@ -1,6 +0,0 @@ -* paytxfee switch is now per KB, so it adds the correct fee for large transactions -* sending avoids using coins with less than 6 confirmations if it can -* BitcoinMiner processes transactions in priority order based on age of dependencies -* make sure generation doesn't start before block 74000 downloaded -* bugfixes by Dean Gores -* testnet, keypoololdest and paytxfee added to getinfo diff --git a/doc/bitcoin-release-notes/release-notes-0.3.16.md b/doc/bitcoin-release-notes/release-notes-0.3.16.md deleted file mode 100644 index 743f84f30..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.3.16.md +++ /dev/null @@ -1 +0,0 @@ -Never released. diff --git a/doc/bitcoin-release-notes/release-notes-0.3.17.md b/doc/bitcoin-release-notes/release-notes-0.3.17.md deleted file mode 100644 index d3604b8f8..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.3.17.md +++ /dev/null @@ -1,12 +0,0 @@ -Version 0.3.17 is now available. - -Changes: -* new getwork, thanks m0mchil -* added transaction fee setting in UI options menu -* free transaction limits -* sendtoaddress returns transaction id instead of "sent" -* getaccountaddress - -The UI transaction fee setting was easy since it was still there from 0.1.5 and all I had to do was re-enable it. - -The accounts-based commands: move, sendfrom and getbalance will be in the next release. We still have some more changes to make first. diff --git a/doc/bitcoin-release-notes/release-notes-0.3.18.md b/doc/bitcoin-release-notes/release-notes-0.3.18.md deleted file mode 100644 index ab1c2e069..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.3.18.md +++ /dev/null @@ -1,11 +0,0 @@ -Changes: -* Fixed a wallet.dat compatibility problem if you downgraded from 0.3.17 and then upgraded again -* IsStandard() check to only include known transaction types in blocks -* Jgarzik's optimisation to speed up the initial block download a little - -The main addition in this release is the Accounts-Based JSON-RPC commands that Gavin's been working on (more details at http://www.bitcoin.org/smf/index.php?topic=1886.0). -* getaccountaddress -* sendfrom -* move -* getbalance -* listtransactions diff --git a/doc/bitcoin-release-notes/release-notes-0.3.19.md b/doc/bitcoin-release-notes/release-notes-0.3.19.md deleted file mode 100644 index fcd867561..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.3.19.md +++ /dev/null @@ -1,9 +0,0 @@ -There's more work to do on DoS, but I'm doing a quick build of what I have so far in case it's needed, before venturing into more complex ideas. The build for this is version 0.3.19. - -- Added some DoS controls -As Gavin and I have said clearly before, the software is not at all resistant to DoS attack. This is one improvement, but there are still more ways to attack than I can count. - -I'm leaving the -limitfreerelay part as a switch for now and it's there if you need it. - -- Removed "safe mode" alerts -"safe mode" alerts was a temporary measure after the 0.3.9 overflow bug. We can say all we want that users can just run with "-disablesafemode", but it's better just not to have it for the sake of appearances. It was never intended as a long term feature. Safe mode can still be triggered by seeing a longer (greater total PoW) invalid block chain. diff --git a/doc/bitcoin-release-notes/release-notes-0.3.20.1.md b/doc/bitcoin-release-notes/release-notes-0.3.20.1.md deleted file mode 100644 index 6c5682ea4..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.3.20.1.md +++ /dev/null @@ -1 +0,0 @@ -Never released or release notes were lost. diff --git a/doc/bitcoin-release-notes/release-notes-0.3.20.2.md b/doc/bitcoin-release-notes/release-notes-0.3.20.2.md deleted file mode 100644 index 09ecb736b..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.3.20.2.md +++ /dev/null @@ -1,17 +0,0 @@ -The maxsendbuffer bug (0.3.20.1 clients not being able to download the block chain from other 0.3.20.1 clients) was only going to get -worse as people upgraded, so I cherry-picked the bug fix and created a minor release yesterday. - -The Amazon Machine Images I used to do the builds are available: - - ami-38a05251 Bitcoin-v0.3.20.2 Mingw (Windows; Administrator password 'bitcoin development') - ami-30a05259 Bitcoin_0.3.20.2 Linux32 - ami-8abc4ee3 Bitcoin_0.3.20.2 Linux64 - -(mac build will be done soon) - -If you have already downloaded version 0.3.20.1, please either add this to your bitcoin.conf file: - - maxsendbuffer=10000 - maxreceivebuffer=10000 - -... or download the new version. diff --git a/doc/bitcoin-release-notes/release-notes-0.3.20.md b/doc/bitcoin-release-notes/release-notes-0.3.20.md deleted file mode 100644 index 9ae21802e..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.3.20.md +++ /dev/null @@ -1,22 +0,0 @@ -Please checkout the git integration branch from: - -https://github.com/bitcoin/bitcoin - -... and help test. The new features that need testing are: - -* -nolisten : https://github.com/bitcoin/bitcoin/pull/11 -* -rescan : scan block chain for missing wallet transactions -* -printtoconsole : https://github.com/bitcoin/bitcoin/pull/37 -* RPC gettransaction details : https://github.com/bitcoin/bitcoin/pull/24 -* listtransactions new features : https://github.com/bitcoin/bitcoin/pull/10 - -Bug fixes that also need testing: - -* -maxconnections= : https://github.com/bitcoin/bitcoin/pull/42 -* RPC listaccounts minconf : https://github.com/bitcoin/bitcoin/pull/27 -* RPC move, add time to output : https://github.com/bitcoin/bitcoin/pull/21 -* ...and several improvements to --help output. - -This needs more testing on Windows! Please drop me a quick private message, email, or IRC message if you are able to do some testing. If you find bugs, please open an issue at: - -https://github.com/bitcoin/bitcoin/issues diff --git a/doc/bitcoin-release-notes/release-notes-0.3.21.md b/doc/bitcoin-release-notes/release-notes-0.3.21.md deleted file mode 100644 index f3b6bc426..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.3.21.md +++ /dev/null @@ -1,20 +0,0 @@ -Binaries for Bitcoin version 0.3.21 are available at: - https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.21/ - -Changes and new features from the 0.3.20 release include: - -* Universal Plug and Play support. Enable automatic opening of a port for incoming connections by running bitcoin or bitcoind with the - -upnp=1 command line switch or using the Options dialog box. - -* Support for full-precision bitcoin amounts. You can now send, and bitcoin will display, bitcoin amounts smaller than 0.01. However, sending fewer than 0.01 bitcoins still requires a 0.01 bitcoin fee (so you can send 1.0001 bitcoins without a fee, but you will be asked to pay a fee if you try to send 0.0001). - -* A new method of finding bitcoin nodes to connect with, via DNS A records. Use the -dnsseed option to enable. - -For developers, changes to bitcoin's remote-procedure-call API: - -* New rpc command "sendmany" to send bitcoins to more than one address in a single transaction. - -* Several bug fixes, including a serious intermittent bug that would sometimes cause bitcoind to stop accepting rpc requests. - -* -logtimestamps option, to add a timestamp to each line in debug.log. - -* Immature blocks (newly generated, under 120 confirmations) are now shown in listtransactions. diff --git a/doc/bitcoin-release-notes/release-notes-0.3.22.md b/doc/bitcoin-release-notes/release-notes-0.3.22.md deleted file mode 100644 index 4c05e3e5e..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.3.22.md +++ /dev/null @@ -1,16 +0,0 @@ -Download URL: https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.22/ - -This is largely a bugfix and TX fee schedule release. We also hope to make 0.3.23 a quick release, to fix problems that the network has seen due to explosive growth in the past week. - -Notable changes: -* Client will accept and relay TX's with 0.0005 BTC fee schedule (users still pay 0.01 BTC per kb, until next version) -* Non-standard transactions accepted on testnet -* Source code tree reorganized (prep for autotools build) -* Remove "Generate Coins" option from GUI, and remove 4way SSE miner. Internal reference CPU miner remains available, but users are directed to external miners for best hash production. -* IRC is overflowing. Client now bootstraps to channels #bitcoin00 - #bitcoin99 -* DNS names now may be used with -addnode, -connect (requires -dns to enable) - -RPC changes: -* 'listtransactions' adds 'from' param, for range queries -* 'move' may take account balances negative -* 'settxfee' added, to manually set TX fee diff --git a/doc/bitcoin-release-notes/release-notes-0.3.23.md b/doc/bitcoin-release-notes/release-notes-0.3.23.md deleted file mode 100644 index c1d520e49..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.3.23.md +++ /dev/null @@ -1,10 +0,0 @@ -Win32, Linux, MacOSX and source releases for bitcoin v0.3.23 have been uploaded to -https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.23/ - -This is another quick bugfix release, trying to deal with the influx of new bitcoin users. - -Main items of note: - -* P2P connect-to-node logic changed to reduce timeout a bit. The network saw a huge influx of new users, who do not permit incoming connections. This change is a short-term hack, to more quickly hunt for useful P2P connections. Better "leaf node" logic is in the works, but this should let us limp along until then. One may use -upnp to properly forward ports, and help the network. -* Transaction fee reduced to 0.0005 for new transactions -* Client will relay transactions with fees as low as 0.0001 BTC diff --git a/doc/bitcoin-release-notes/release-notes-0.3.24.md b/doc/bitcoin-release-notes/release-notes-0.3.24.md deleted file mode 100644 index d35ac66f2..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.3.24.md +++ /dev/null @@ -1,20 +0,0 @@ -Bitcoin v0.3.24 is now available for download at -https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.24/ - -This is another bug fix release. We had hoped to have wallet encryption ready for release, but more urgent fixes for existing clients were needed -- most notably block download problems were getting severe. Wallet encryption is ready for testing at https://github.com/bitcoin/bitcoin/pull/352 for the git-savvy, and hopefully will follow shortly in the next release, v0.4. - -Notable fixes in v0.3.24, and the main reasons for this release: - -F1) Block downloads were failing or taking unreasonable amounts of time to complete, because the increased size of the block chain was bumping up against some earlier buffer-size DoS limits. - -F2) Fix crash caused by loss/lack of network connection. - -Notable changes in v0.3.24: - -C1) DNS seeding enabled by default. - -C2) UPNP enabled by default in the GUI client. The percentage of bitcoin clients that accept incoming connections is quite small, and that is a problem. This should help. bitcoind, and unofficial builds, are unchanged (though we encourage use of "-upnp" to help the network!) - -C3) Initial unit testing framework. Bitcoin sorely needs automated tests, and this is a beginning. Contributions welcome. - -C4) Internal wallet code cleanup. While invisible to an end user, this change provides the basis for v0.4's wallet encryption. diff --git a/doc/bitcoin-release-notes/release-notes-0.4.0.md b/doc/bitcoin-release-notes/release-notes-0.4.0.md deleted file mode 100644 index 145072a36..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.4.0.md +++ /dev/null @@ -1,70 +0,0 @@ -Bitcoin version 0.4.0 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.4.0/ - -The main feature in this release is wallet private key encryption; -you can set a passphrase that must be entered before sending coins. -See below for more information; if you decide to encrypt your wallet, -WRITE DOWN YOUR PASSPHRASE AND PUT IT IN A SECURE LOCATION. If you -forget or lose your wallet passphrase, you lose your bitcoins. -Previous versions of bitcoin are unable to read encrypted wallets, -and will crash on startup if the wallet is encrypted. - -Also note: bitcoin version 0.4 uses a newer version of Berkeley DB -(bdb version 4.8) than previous versions (bdb 4.7). If you upgrade -to version 0.4 and then revert back to an earlier version of bitcoin -the it may be unable to start because bdb 4.7 cannot read bdb 4.8 -"log" files. - - -Notable bug fixes from version 0.3.24: - -Fix several bitcoin-becomes-unresponsive bugs due to multithreading -deadlocks. - -Optimize database writes for large (lots of inputs) transactions -(fixes a potential denial-of-service attack) - - -Wallet Encryption - -Bitcoin supports native wallet encryption so that people who steal your -wallet file don't automatically get access to all of your Bitcoins. -In order to enable this feature, choose "Encrypt Wallet" from the -Options menu. You will be prompted to enter a passphrase, which -will be used as the key to encrypt your wallet and will be needed -every time you wish to send Bitcoins. If you lose this passphrase, -you will lose access to spend all of the bitcoins in your wallet, -no one, not even the Bitcoin developers can recover your Bitcoins. -This means you are responsible for your own security, store your -passphrase in a secure location and do not forget it. - -Remember that the encryption built into bitcoin only encrypts the -actual keys which are required to send your bitcoins, not the full -wallet. This means that someone who steals your wallet file will -be able to see all the addresses which belong to you, as well as the -relevant transactions, you are only protected from someone spending -your coins. - -It is recommended that you backup your wallet file before you -encrypt your wallet. To do this, close the Bitcoin client and -copy the wallet.dat file from ~/.bitcoin/ on Linux, /Users/(user -name)/Application Support/Bitcoin/ on Mac OSX, and %APPDATA%/Bitcoin/ -on Windows (that is /Users/(user name)/AppData/Roaming/Bitcoin on -Windows Vista and 7 and /Documents and Settings/(user name)/Application -Data/Bitcoin on Windows XP). Once you have copied that file to a -safe location, reopen the Bitcoin client and Encrypt your wallet. -If everything goes fine, delete the backup and enjoy your encrypted -wallet. Note that once you encrypt your wallet, you will never be -able to go back to a version of the Bitcoin client older than 0.4. - -Keep in mind that you are always responsible for your own security. -All it takes is a slightly more advanced wallet-stealing trojan which -installs a keylogger to steal your wallet passphrase as you enter it -in addition to your wallet file and you have lost all your Bitcoins. -Wallet encryption cannot keep you safe if you do not practice -good security, such as running up-to-date antivirus software, only -entering your wallet passphrase in the Bitcoin client and using the -same passphrase only as your wallet passphrase. - -See the doc/README file in the bitcoin source for technical details -of wallet encryption. diff --git a/doc/bitcoin-release-notes/release-notes-0.4.1.md b/doc/bitcoin-release-notes/release-notes-0.4.1.md deleted file mode 100644 index ac471a8d7..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.4.1.md +++ /dev/null @@ -1,38 +0,0 @@ -Bitcoin version 0.4.1 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.4.1/ - -This is a bugfix only release based on 0.4.0. - -Please report bugs by replying to this forum thread. - -MAJOR BUG FIX (CVE-2011-4447) - -The wallet encryption feature introduced in Bitcoin version 0.4.0 did not sufficiently secure the private keys. An attacker who -managed to get a copy of your encrypted wallet.dat file might be able to recover some or all of the unencrypted keys and steal the -associated coins. - -If you have a previously encrypted wallet.dat, the first time you run wxbitcoin or bitcoind the wallet will be rewritten, Bitcoin will -shut down, and you will be prompted to restart it to run with the new, properly encrypted file. - -If you had a previously encrypted wallet.dat that might have been copied or stolen (for example, you backed it up to a public -location) you should send all of your bitcoins to yourself using a new bitcoin address and stop using any previously generated addresses. - -Wallets encrypted with this version of Bitcoin are written properly. - -Technical note: the encrypted wallet's 'keypool' will be regenerated the first time you request a new bitcoin address; to be certain that the -new private keys are properly backed up you should: - -1. Run Bitcoin and let it rewrite the wallet.dat file - -2. Run it again, then ask it for a new bitcoin address. -wxBitcoin: new address visible on main window -bitcoind: run the 'walletpassphrase' RPC command to unlock the wallet, then run the 'getnewaddress' RPC command. - -3. If your encrypted wallet.dat may have been copied or stolen, send all of your bitcoins to the new bitcoin address. - -4. Shut down Bitcoin, then backup the wallet.dat file. -IMPORTANT: be sure to request a new bitcoin address before backing up, so that the 'keypool' is regenerated and backed up. - -"Security in depth" is always a good idea, so choosing a secure location for the backup and/or encrypting the backup before uploading it is recommended. And as in previous releases, if your machine is infected by malware there are several ways an attacker might steal your bitcoins. - -Thanks to Alan Reiner (etotheipi) for finding and reporting this bug. diff --git a/doc/bitcoin-release-notes/release-notes-0.4.2.md b/doc/bitcoin-release-notes/release-notes-0.4.2.md deleted file mode 100644 index 6c5682ea4..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.4.2.md +++ /dev/null @@ -1 +0,0 @@ -Never released or release notes were lost. diff --git a/doc/bitcoin-release-notes/release-notes-0.4.3.md b/doc/bitcoin-release-notes/release-notes-0.4.3.md deleted file mode 100644 index fea1ae75b..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.4.3.md +++ /dev/null @@ -1,21 +0,0 @@ -bitcoind version 0.4.3 is now available for download at: -http://luke.dashjr.org/programs/bitcoin/files/bitcoind-0.4.3/ (until Gavin uploads to SourceForge) - -This is a bugfix-only release based on 0.4.0. - -Please note that the wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. - -Please report bugs for the daemon only using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -Stable source code is hosted at Gitorious: -http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.4.3#.tar.gz - -BUG FIXES - -Cease locking memory used by non-sensitive information (this caused a huge performance hit on some platforms, especially noticable during initial blockchain download). -Fixed some address-handling deadlocks (client freezes). -No longer accept inbound connections over the internet when Bitcoin is being used with Tor (identity leak). -Use the correct base transaction fee of 0.0005 BTC for accepting transactions into mined blocks (since 0.4.0, it was incorrectly accepting 0.0001 BTC which was only meant to be relayed). -Add new DNS seeds (maintained by Pieter Wuille and Luke Dashjr). - diff --git a/doc/bitcoin-release-notes/release-notes-0.4.4.md b/doc/bitcoin-release-notes/release-notes-0.4.4.md deleted file mode 100644 index f435ba716..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.4.4.md +++ /dev/null @@ -1,30 +0,0 @@ -Bitcoin version 0.4.4 is now available for download at: -http://luke.dashjr.org/programs/bitcoin/files/bitcoind-0.4.4/ - -This is a bugfix-only release based on 0.4.0. - -Please note that the wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. - -Please report bugs for the daemon only using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -Stable source code is hosted at Gitorious: -http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.4.4#.tar.gz - -BUG FIXES - -Limit the number of orphan transactions stored in memory, to prevent a potential denial-of-service attack by flooding orphan transactions. Also never store invalid transactions at all. -Fix possible buffer overflow on systems with very long application data paths. This is not exploitable. -Resolved multiple bugs preventing long-term unlocking of encrypted wallets (issue #922). -Only send local IP in "version" messages if it is globally routable (ie, not private), and try to get such an IP from UPnP if applicable. -Reannounce UPnP port forwards every 20 minutes, to workaround routers expiring old entries, and allow the -upnp option to override any stored setting. -Various memory leaks and potential null pointer deferences have been -fixed. -Several shutdown issues have been fixed. -Check that keys stored in the wallet are valid at startup, and if not, -report corruption. -Various build fixes. -If no password is specified to bitcoind, recommend a secure password. -Update hard-coded fallback seed nodes, choosing recent ones with long uptime and versions at least 0.4.0. -Add checkpoint at block 168,000. - diff --git a/doc/bitcoin-release-notes/release-notes-0.4.5.md b/doc/bitcoin-release-notes/release-notes-0.4.5.md deleted file mode 100644 index 6c5682ea4..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.4.5.md +++ /dev/null @@ -1 +0,0 @@ -Never released or release notes were lost. diff --git a/doc/bitcoin-release-notes/release-notes-0.4.6.md b/doc/bitcoin-release-notes/release-notes-0.4.6.md deleted file mode 100644 index 07c5e4b69..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.4.6.md +++ /dev/null @@ -1,37 +0,0 @@ -bitcoind version 0.4.6 is now available for download at: -Windows: installer | zip (sig) -Source: tar.gz -bitcoind and Bitcoin-Qt version 0.6.0.7 are also tagged in git, but it is recommended to upgrade to 0.6.1. - -These are bugfix-only releases. - -Please report bugs by replying to this forum thread. Note that the 0.4.x wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. - -BUG FIXES - -Version 0.6.0 allowed importing invalid "private keys", which would be unspendable; 0.6.0.7 will now verify the private key is valid, and refuse to import an invalid one -Verify status of encrypt/decrypt calls to detect failed padding -Check blocks for duplicate transactions earlier. Fixes #1167 -Upgrade Windows builds to OpenSSL 1.0.1b -Set label when selecting an address that already has a label. Fixes #1080 (Bitcoin-Qt) -JSON-RPC listtransactions's from/count handling is now fixed -Optimize and fix multithreaded access, when checking whether we already know about transactions -Fix potential networking deadlock -Proper support for Growl 1.3 notifications -Display an error, rather than crashing, if encoding a QR Code failed (0.6.0.7) -Don't erroneously set "Display addresses" for users who haven't explicitly enabled it (Bitcoin-Qt) -Some non-ASCII input in JSON-RPC expecting hexadecimal may have been misinterpreted rather than rejected -Missing error condition checking added -Do not show green tick unless all known blocks are downloaded. Fixes #921 (Bitcoin-Qt) -Increase time ago of last block for "up to date" status from 30 to 90 minutes -Show a message box when runaway exception happens (Bitcoin-Qt) -Use a messagebox to display the error when -server is provided without providing a rpc password -Show error message instead of exception crash when unable to bind RPC port (Bitcoin-Qt) -Correct sign message bitcoin address tooltip. Fixes #1050 (Bitcoin-Qt) -Removed "(no label)" from QR Code dialog titlebar if we have no label (0.6.0.7) -Removed an ugly line break in tooltip for mature transactions (0.6.0.7) -Add missing tooltip and key shortcut in settings dialog (part of #1088) (Bitcoin-Qt) -Work around issue in boost::program_options that prevents from compiling in clang -Fixed bugs occurring only on platforms with unsigned characters (such as ARM). -Rename make_windows_icon.py to .sh as it is a shell script. Fixes #1099 (Bitcoin-Qt) -Various trivial internal corrections to types used for counting/size loops and warnings diff --git a/doc/bitcoin-release-notes/release-notes-0.5.0.md b/doc/bitcoin-release-notes/release-notes-0.5.0.md deleted file mode 100644 index baa409b5f..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.5.0.md +++ /dev/null @@ -1,70 +0,0 @@ -Bitcoin version 0.5.0 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.0/ - -The major change for this release is a completely new graphical interface that uses the Qt user interface toolkit. - -This release include German, Spanish, Spanish-Castilian, Norwegian and Dutch translations. More translations are welcome; join the project at Transifex if you can help: -https://www.transifex.net/projects/p/bitcoin/ - -Please report bugs using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -For Ubuntu users, there is a new ppa maintained by Matt Corallo which you can add to your system so that it will automatically keep bitcoin up-to-date. Just type "sudo apt-add-repository ppa:bitcoin/bitcoin" in your terminal, then install the bitcoin-qt package. - -MAJOR BUG FIX (CVE-2011-4447) - -The wallet encryption feature introduced in Bitcoin version 0.4.0 did not sufficiently secure the private keys. An attacker who -managed to get a copy of your encrypted wallet.dat file might be able to recover some or all of the unencrypted keys and steal the -associated coins. - -If you have a previously encrypted wallet.dat, the first time you run bitcoin-qt or bitcoind the wallet will be rewritten, Bitcoin will -shut down, and you will be prompted to restart it to run with the new, properly encrypted file. - -If you had a previously encrypted wallet.dat that might have been copied or stolen (for example, you backed it up to a public -location) you should send all of your bitcoins to yourself using a new bitcoin address and stop using any previously generated addresses. - -Wallets encrypted with this version of Bitcoin are written properly. - -Technical note: the encrypted wallet's 'keypool' will be regenerated the first time you request a new bitcoin address; to be certain that the -new private keys are properly backed up you should: - -1. Run Bitcoin and let it rewrite the wallet.dat file - -2. Run it again, then ask it for a new bitcoin address. -Bitcoin-Qt: Address Book, then New Address... -bitcoind: run the 'walletpassphrase' RPC command to unlock the wallet, then run the 'getnewaddress' RPC command. - -3. If your encrypted wallet.dat may have been copied or stolen, send all of your bitcoins to the new bitcoin address. - -4. Shut down Bitcoin, then backup the wallet.dat file. -IMPORTANT: be sure to request a new bitcoin address before backing up, so that the 'keypool' is regenerated and backed up. - -"Security in depth" is always a good idea, so choosing a secure location for the backup and/or encrypting the backup before uploading it is recommended. And as in previous releases, if your machine is infected by malware there are several ways an attacker might steal your bitcoins. - -Thanks to Alan Reiner (etotheipi) for finding and reporting this bug. - -MAJOR GUI CHANGES - -"Splash" graphics at startup that show address/wallet/blockchain loading progress. - -"Synchronizing with network" progress bar to show block-chain download progress. - -Icons at the bottom of the window that show how well connected you are to the network, with tooltips to display details. - -Drag and drop support for bitcoin: URIs on web pages. - -Export transactions as a .csv file. - -Many other GUI improvements, large and small. - -RPC CHANGES - -getmemorypool : new RPC command, provides everything needed to construct a block with a custom generation transaction and submit a solution - -listsinceblock : new RPC command, list transactions since given block - -signmessage/verifymessage : new RPC commands to sign a message with one of your private keys or verify that a message signed by the private key associated with a bitcoin address. - -GENERAL CHANGES - -Faster initial block download. diff --git a/doc/bitcoin-release-notes/release-notes-0.5.1.md b/doc/bitcoin-release-notes/release-notes-0.5.1.md deleted file mode 100644 index d56bff6d9..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.5.1.md +++ /dev/null @@ -1,43 +0,0 @@ -Bitcoin version 0.5.1 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.1/ - -This is a bugfix-only release. - -This release includes 13 translations, including 5 new translations: -Italian, Hungarian, Ukranian, Portuguese (Brazilian) and Simplified Chinese. -More translations are welcome; join the project at Transifex if you can help: -https://www.transifex.net/projects/p/bitcoin/ - -Please report bugs using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -Project source code is hosted at github; we are no longer -distributing .tar.gz files here, you can get them -directly from github: -https://github.com/bitcoin/bitcoin/tarball/v0.5.1 # .tar.gz -https://github.com/bitcoin/bitcoin/zipball/v0.5.1 # .zip - -For Ubuntu users, there is a new ppa maintained by Matt Corallo which -you can add to your system so that it will automatically keep -bitcoin up-to-date. Just type -sudo apt-add-repository ppa:bitcoin/bitcoin -in your terminal, then install the bitcoin-qt package. - - -BUG FIXES - -Re-enable SSL support for the JSON-RPC interface (it was unintentionally -disabled for the 0.5.0 release binaries). - -The code that finds peers via "dns seeds" no longer stops bitcoin startup -if one of the dns seed machines is down. - -Tooltips on the transaction list view were rendering incorrectly (as black boxes -or with a transparent background). - -Prevent a denial-of-service attack involving flooding a bitcoin node with -orphan blocks. - -The wallet passphrase dialog now warns you if the caps lock key was pressed. - -Improved searching in addresses and labels in bitcoin-qt. diff --git a/doc/bitcoin-release-notes/release-notes-0.5.2.md b/doc/bitcoin-release-notes/release-notes-0.5.2.md deleted file mode 100644 index f79816668..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.5.2.md +++ /dev/null @@ -1,22 +0,0 @@ -Bitcoin version 0.5.2 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.2/ - -This is a bugfix-only release based on 0.5.1. - -Please report bugs using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -Stable source code is hosted at Gitorious: -http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.5.2#.tar.gz - -BUG FIXES - -Check all transactions in blocks after the last checkpoint (0.5.0 and 0.5.1 skipped checking ECDSA signatures during initial blockchain download). -Cease locking memory used by non-sensitive information (this caused a huge performance hit on some platforms, especially noticable during initial blockchain download; this was -not a security vulnerability). -Fixed some address-handling deadlocks (client freezes). -No longer accept inbound connections over the internet when Bitcoin is being used with Tor (identity leak). -Re-enable SSL support for the JSON-RPC interface (it was unintentionally disabled for the 0.5.0 and 0.5.1 release Linux binaries). -Use the correct base transaction fee of 0.0005 BTC for accepting transactions into mined blocks (since 0.4.0, it was incorrectly accepting 0.0001 BTC which was only meant to be relayed). -Don't show "IP" for transactions which are not necessarily IP transactions. -Add new DNS seeds (maintained by Pieter Wuille and Luke Dashjr). diff --git a/doc/bitcoin-release-notes/release-notes-0.5.3.md b/doc/bitcoin-release-notes/release-notes-0.5.3.md deleted file mode 100644 index 7c84c5332..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.5.3.md +++ /dev/null @@ -1,42 +0,0 @@ -Bitcoin version 0.5.3 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.3/ - -This is a bugfix-only release based on 0.5.1. -It also includes a few protocol updates. - -Please report bugs using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -Stable source code is hosted at Gitorious: -http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.5.3#.tar.gz - -PROTOCOL UPDATES - -BIP 30: Introduce a new network rule: "a block is not valid if it contains a transaction whose hash already exists in the block chain, unless all that transaction's outputs were already spent before said block" beginning on March 15, 2012, 00:00 UTC. -On testnet, allow mining of min-difficulty blocks if 20 minutes have gone by without mining a regular-difficulty block. This is to make testing Bitcoin easier, and will not affect normal mode. - -BUG FIXES - -Limit the number of orphan transactions stored in memory, to prevent a potential denial-of-service attack by flooding orphan transactions. Also never store invalid transactions at all. -Fix possible buffer overflow on systems with very long application data paths. This is not exploitable. -Resolved multiple bugs preventing long-term unlocking of encrypted wallets -(issue #922). -Only send local IP in "version" messages if it is globally routable (ie, not private), and try to get such an IP from UPnP if applicable. -Reannounce UPnP port forwards every 20 minutes, to workaround routers expiring old entries, and allow the -upnp option to override any stored setting. -Skip splash screen when -min is used, and fix Minimize to Tray function. -Do not blank "label" in Bitcoin-Qt "Send" tab, if the user has already entered something. -Correct various labels and messages. -Various memory leaks and potential null pointer deferences have been fixed. -Handle invalid Bitcoin URIs using "bitcoin://" instead of "bitcoin:". -Several shutdown issues have been fixed. -Revert to "global progress indication", as starting from zero every time was considered too confusing for many users. -Check that keys stored in the wallet are valid at startup, and if not, report corruption. -Enable accessible widgets on Windows, so that people with screen readers such as NVDA can make sense of it. -Various build fixes. -If no password is specified to bitcoind, recommend a secure password. -Automatically focus and scroll to new "Send coins" entries in Bitcoin-Qt. -Show a message box for --help on Windows, for Bitcoin-Qt. -Add missing "About Qt" menu option to show built-in Qt About dialog. -Don't show "-daemon" as an option for Bitcoin-Qt, since it isn't available. -Update hard-coded fallback seed nodes, choosing recent ones with long uptime and versions at least 0.4.0. -Add checkpoint at block 168,000. diff --git a/doc/bitcoin-release-notes/release-notes-0.5.4.md b/doc/bitcoin-release-notes/release-notes-0.5.4.md deleted file mode 100644 index fcde3ac4e..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.5.4.md +++ /dev/null @@ -1,39 +0,0 @@ -Bitcoin version 0.5.4 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.4/ -NOTE: 0.5.4rc3 is being renamed to 0.5.4 final with no changes. - -This is a bugfix-only release in the 0.5.x series, plus a few protocol updates. - -Please report bugs using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -Stable source code is hosted at Gitorious: -http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.5.4#.tar.gz - -PROTOCOL UPDATES - -BIP 16: Special-case "pay to script hash" logic to enable minimal validation of new transactions. -Support for validating message signatures produced with compressed public keys. - -BUG FIXES - -Build with thread-safe MingW libraries for Windows, fixing a dangerous memory corruption scenario when exceptions are thrown. -Fix broken testnet mining. -Stop excess inventory relay during initial block download. -When disconnecting a node, clear the received buffer so that we do not process any already received messages. -Yet another attempt at implementing "minimize to tray" that works on all operating systems. -Fix Bitcoin-Qt notifications under Growl 1.3. -Increase required age of Bitcoin-Qt's "not up to date" status from 30 to 90 minutes. -Implemented missing verifications that led to crash on entering some wrong passphrases for encrypted wallets. -Fix default filename suffixes in GNOME save dialog. -Make the "Send coins" tab use the configured unit type, even on the first attempt. -Print detailed wallet loading errors to debug.log when it is corrupt. -Allocate exactly the amount of space needed for signing transactions, instead of a fixed 10k buffer. -Workaround for improbable memory access violation. -Check wallet's minimum version before trying to load it. -Remove wxBitcoin properly when installing Bitcoin-Qt over it. (Windows) -Detail reorganization information better in debug log. -Use a messagebox to display the error when -server is provided without configuring a RPC password. -Testing suite build now honours provided CXXFLAGS. -Removed an extraneous line-break in mature transaction tooltips. -Fix some grammatical errors in translation process documentation. diff --git a/doc/bitcoin-release-notes/release-notes-0.5.5.md b/doc/bitcoin-release-notes/release-notes-0.5.5.md deleted file mode 100644 index 75ebc3e6b..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.5.5.md +++ /dev/null @@ -1,37 +0,0 @@ -bitcoind and Bitcoin-Qt version 0.5.5 are now available for download at: -Windows: installer | zip (sig) -Source: tar.gz -bitcoind and Bitcoin-Qt version 0.6.0.7 are also tagged in git, but it is recommended to upgrade to 0.6.1. - -These are bugfix-only releases. - -Please report bugs by replying to this forum thread. Note that the 0.4.x wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. - -BUG FIXES - -Version 0.6.0 allowed importing invalid "private keys", which would be unspendable; 0.6.0.7 will now verify the private key is valid, and refuse to import an invalid one -Verify status of encrypt/decrypt calls to detect failed padding -Check blocks for duplicate transactions earlier. Fixes #1167 -Upgrade Windows builds to OpenSSL 1.0.1b -Set label when selecting an address that already has a label. Fixes #1080 (Bitcoin-Qt) -JSON-RPC listtransactions's from/count handling is now fixed -Optimize and fix multithreaded access, when checking whether we already know about transactions -Fix potential networking deadlock -Proper support for Growl 1.3 notifications -Display an error, rather than crashing, if encoding a QR Code failed (0.6.0.7) -Don't erroneously set "Display addresses" for users who haven't explicitly enabled it (Bitcoin-Qt) -Some non-ASCII input in JSON-RPC expecting hexadecimal may have been misinterpreted rather than rejected -Missing error condition checking added -Do not show green tick unless all known blocks are downloaded. Fixes #921 (Bitcoin-Qt) -Increase time ago of last block for "up to date" status from 30 to 90 minutes -Show a message box when runaway exception happens (Bitcoin-Qt) -Use a messagebox to display the error when -server is provided without providing a rpc password -Show error message instead of exception crash when unable to bind RPC port (Bitcoin-Qt) -Correct sign message bitcoin address tooltip. Fixes #1050 (Bitcoin-Qt) -Removed "(no label)" from QR Code dialog titlebar if we have no label (0.6.0.7) -Removed an ugly line break in tooltip for mature transactions (0.6.0.7) -Add missing tooltip and key shortcut in settings dialog (part of #1088) (Bitcoin-Qt) -Work around issue in boost::program_options that prevents from compiling in clang -Fixed bugs occurring only on platforms with unsigned characters (such as ARM). -Rename make_windows_icon.py to .sh as it is a shell script. Fixes #1099 (Bitcoin-Qt) -Various trivial internal corrections to types used for counting/size loops and warnings diff --git a/doc/bitcoin-release-notes/release-notes-0.6.0.md b/doc/bitcoin-release-notes/release-notes-0.6.0.md deleted file mode 100644 index 1963a3625..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.6.0.md +++ /dev/null @@ -1,138 +0,0 @@ -Bitcoin version 0.6.0 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.6.0/test/ - -This release includes more than 20 language localizations. -More translations are welcome; join the -project at Transifex to help: -https://www.transifex.net/projects/p/bitcoin/ - -Please report bugs using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -Project source code is hosted at github; we are no longer -distributing .tar.gz files here, you can get them -directly from github: -https://github.com/bitcoin/bitcoin/tarball/v0.6.0 # .tar.gz -https://github.com/bitcoin/bitcoin/zipball/v0.6.0 # .zip - -For Ubuntu users, there is a ppa maintained by Matt Corallo which -you can add to your system so that it will automatically keep -bitcoin up-to-date. Just type -sudo apt-add-repository ppa:bitcoin/bitcoin -in your terminal, then install the bitcoin-qt package. - - -KNOWN ISSUES - -Shutting down while synchronizing with the network -(downloading the blockchain) can take more than a minute, -because database writes are queued to speed up download -time. - - -NEW FEATURES SINCE BITCOIN VERSION 0.5 - -Initial network synchronization should be much faster -(one or two hours on a typical machine instead of ten or more -hours). - -Backup Wallet menu option. - -Bitcoin-Qt can display and save QR codes for sending -and receiving addresses. - -New context menu on addresses to copy/edit/delete them. - -New Sign Message dialog that allows you to prove that you -own a bitcoin address by creating a digital -signature. - -New wallets created with this version will -use 33-byte 'compressed' public keys instead of -65-byte public keys, resulting in smaller -transactions and less traffic on the bitcoin -network. The shorter keys are already supported -by the network but wallet.dat files containing -short keys are not compatible with earlier -versions of Bitcoin-Qt/bitcoind. - -New command-line argument -blocknotify= -that will spawn a shell process to run -when a new block is accepted. - -New command-line argument -splash=0 to disable -Bitcoin-Qt's initial splash screen - -validateaddress JSON-RPC api command output includes -two new fields for addresses in the wallet: -pubkey : hexadecimal public key -iscompressed : true if pubkey is a short 33-byte key - -New JSON-RPC api commands for dumping/importing -private keys from the wallet (dumprivkey, importprivkey). - -New JSON-RPC api command for getting information about -blocks (getblock, getblockhash). - -New JSON-RPC api command (getmininginfo) for getting -extra information related to mining. The getinfo -JSON-RPC command no longer includes mining-related -information (generate/genproclimit/hashespersec). - - - -NOTABLE CHANGES - -BIP30 implemented (security fix for an attack involving -duplicate "coinbase transactions"). - -The -nolisten, -noupnp and -nodnsseed command-line -options were renamed to -listen, -upnp and -dnsseed, -with a default value of 1. The old names are still -supported for compatibility (so specifying -nolisten -is automatically interpreted as -listen=0; every -boolean argument can now be specified as either --foo or -nofoo). - -The -noirc command-line options was renamed to --irc, with a default value of 0. Run -irc=1 to -get the old behavior. - -Three fill-up-available-memory denial-of-service -attacks were fixed. - - -NOT YET IMPLEMENTED FEATURES - -Support for clicking on bitcoin: URIs and -opening/launching Bitcoin-Qt is available only on Linux, -and only if you configure your desktop to launch -Bitcoin-Qt. All platforms support dragging and dropping -bitcoin: URIs onto the Bitcoin-Qt window to start -payment. - - -PRELIMINARY SUPPORT FOR MULTISIGNATURE TRANSACTIONS - -This release has preliminary support for multisignature -transactions-- transactions that require authorization -from more than one person or device before they -will be accepted by the bitcoin network. - -Prior to this release, multisignature transactions -were considered 'non-standard' and were ignored; -with this release multisignature transactions are -considered standard and will start to be relayed -and accepted into blocks. - -It is expected that future releases of Bitcoin-Qt -will support the creation of multisignature transactions, -once enough of the network has upgraded so relaying -and validating them is robust. - -For this release, creation and testing of multisignature -transactions is limited to the bitcoin test network using -the "addmultisigaddress" JSON-RPC api call. - -Short multisignature address support is included in this -release, as specified in BIP 13 and BIP 16. diff --git a/doc/bitcoin-release-notes/release-notes-0.6.1.md b/doc/bitcoin-release-notes/release-notes-0.6.1.md deleted file mode 100644 index ef7966ecd..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.6.1.md +++ /dev/null @@ -1,2 +0,0 @@ -Never released - diff --git a/doc/bitcoin-release-notes/release-notes-0.6.2.md b/doc/bitcoin-release-notes/release-notes-0.6.2.md deleted file mode 100644 index bb85fb23a..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.6.2.md +++ /dev/null @@ -1,50 +0,0 @@ -Bitcoin version 0.6.2 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.6.2/ - -This is a bug-fix and code-cleanup release, with no major new features. - -Please report bugs using the github issue tracker at: -https://github.com/bitcoin/bitcoin/issues - - -NOTABLE CHANGES - -Much faster shutdowns. However, the blkindex.dat file is no longer -portable to different data directories by default. If you need a -portable blkindex.dat file then run with the new -detachdb=1 option -or the "Detach databases at shutdown" GUI preference. - -Fixed https://github.com/bitcoin/bitcoin/issues/1065, a bug that -could cause long-running nodes to crash. - -Mac and Windows binaries are compiled against OpenSSL 1.0.1b (Linux -binaries are dynamically linked to the version of OpenSSL on the system). - - -CHANGE SUMMARY - -Use 'git shortlog --no-merges v0.6.0..' for a summary of this release. - -Source codebase changes: -- Many source code cleanups and warnings fixes. Close to building with -Wall -- Locking overhaul, and several minor locking fixes -- Several source code portability fixes, e.g. FreeBSD - -JSON-RPC interface changes: -- addmultisigaddress enabled for mainnet (previously only enabled for testnet) - -Network protocol changes: -- protocol version 60001 -- added nonce value to "ping" message (BIP 31) -- added new "pong" message (BIP 31) - -Backend storage changes: -- Less redundant database flushing, especially during initial block download -- Shutdown improvements (see above) - -Qt user interface: -- minor URI handling improvements -- progressbar improvements -- error handling improvements (show message box rather than console exception, -etc.) -- by popular request, make 4th bar of connection icon green diff --git a/doc/bitcoin-release-notes/release-notes-0.6.3.md b/doc/bitcoin-release-notes/release-notes-0.6.3.md deleted file mode 100644 index 28bb20e10..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.6.3.md +++ /dev/null @@ -1,29 +0,0 @@ -Bitcoin version 0.6.3 is now available for download at: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.6.3/ - -This is a bug-fix release, with no new features. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - -CHANGE SUMMARY - -Fixed a serious denial-of-service attack that could cause the -bitcoin process to become unresponsive. Thanks to Sergio Lerner -for finding and responsibly reporting the problem. (CVE-2012-3789) - -Optimized the process of checking transaction signatures, to -speed up processing of new block messages and make propagating -blocks across the network faster. - -Fixed an obscure bug that could cause the bitcoin process to get -stuck on an invalid block-chain, if the invalid chain was -hundreds of blocks long. - -Bitcoin-Qt no longer automatically selects the first address -in the address book (Issue #1384). - -Fixed minimize-to-dock behavior of Bitcon-Qt on the Mac. - -Added a block checkpoint at block 185,333 to speed up initial -blockchain download. diff --git a/doc/bitcoin-release-notes/release-notes-0.7.0.md b/doc/bitcoin-release-notes/release-notes-0.7.0.md deleted file mode 100644 index d33a58f99..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.7.0.md +++ /dev/null @@ -1,169 +0,0 @@ -Bitcoin version 0.7.0 is now available for download at: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.7.0/ - -We recommend that everybody running prior versions of bitcoind/Bitcoin-Qt -upgrade to this release, except for users running Mac OSX 10.5. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - -Project source code is hosted at github; you can get -source-only tarballs/zipballs directly from there: - https://github.com/bitcoin/bitcoin/tarball/v0.7.0 # .tar.gz - https://github.com/bitcoin/bitcoin/zipball/v0.7.0 # .zip - -Ubuntu Linux users can use the "Personal Package Archive" (PPA) -maintained by Matt Corallo to automatically keep -bitcoin up-to-date. Just type - sudo apt-add-repository ppa:bitcoin/bitcoin - sudo apt-get update -in your terminal, then install the bitcoin-qt package: - sudo apt-get install bitcoin-qt - - -How to Upgrade - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -Code: -/Applications/Bitcoin-Qt -(on Mac) or -Code: -bitcoind/bitcoin-qt -(on Linux). - -If you were running on Linux with a version that might have been compiled -with a different version of Berkeley DB (for example, if you were using the -PPA and are switching to the binary release), then run the old version again -with the -detachdb argument and shut it down; if you do not, then the new -version will not be able to read the database files and will exit with an error. - -Incompatible Changes - -* Replaced the 'getmemorypool' RPC command with 'getblocktemplate/submitblock' - and 'getrawmempool' commands. -* Remove deprecated RPC 'getblocknumber' - -Bitcoin Improvement Proposals implemented - -BIP 22 - 'getblocktemplate', 'submitblock' RPCs -BIP 34 - block version 2, height in coinbase -BIP 35 - 'mempool' message, extended 'getdata' message behavior - - -Core bitcoin handling and blockchain database - -* Reduced CPU usage, by eliminating some redundant hash calculations -* Cache signature verifications, to eliminate redundant signature checks -* Transactions with zero-value outputs are considered non-standard -* Mining: when creating new blocks, sort 'paid' area by fee-per-kb -* Database: better validation of on-disk stored data -* Database: minor optimizations and reliability improvements -* -loadblock=FILE will import an external block file -* Additional DoS (denial-of-service) prevention measures -* New blockchain checkpoint at block 193,000 - - -JSON-RPC API - -* Internal HTTP server is now thread-per-connection, rather than - a single-threaded queue that would stall on network I/O. -* Internal HTTP server supports HTTP/1.1, pipelined requests and - connection keep-alive. -* Support JSON-RPC 2.0 batches, to encapsulate multiple JSON-RPC requests - within a single HTTP request. -* IPv6 support -* Added raw transaction API. See https://gist.github.com/2839617 -* Added 'getrawmempool', to list contents of TX memory pool -* Added 'getpeerinfo', to list data about each connected network peer -* Added 'listaddressgroupings' for better coin control -* Rework getblock call. -* Remove deprecated RPC 'getblocknumber' -* Remove superceded RPC 'getmemorypool' (see BIP 22, above) -* listtransactions output now displays "smart" times for transactions, - and 'blocktime' and 'timereceived' fields were added - - -P2P networking - -* IPv6 support -* Tor hidden service support (see doc/Tor.txt) -* Attempts to fix "stuck blockchain download" problems -* Replace BDB database "addr.dat" with internally-managed "peers.dat" - file containing peer address data. -* Lower default send buffer from 10MB to 1MB -* proxy: SOCKS5 by default -* Support connecting by hostnames passed to proxy -* Add -seednode connections, and use this instead of DNS seeds when proxied -* Added -externalip and -discover -* Add -onlynet to connect only to a given network (IPv4, IPv6, or Tor) -* Separate listening sockets, -bind= - - -Qt GUI - -* Add UI RPC console / debug window -* Re-Enable URI handling on Windows, add safety checks and tray-notifications -* Harmonize the use of ellipsis ("...") to be used in menus, but not on buttons -* Add 2 labels to the overviewpage that display Wallet and Transaction status (obsolete or current) -* Extend the optionsdialog (e.g. language selection) and re-work it to a tabbed UI -* Merge sign/verify message into a single window with tabbed UI -* Ensure a changed bitcoin unit immediately updates all GUI elements that use units -* Update QR Code dialog -* Improve error reporting at startup -* Fine-grained UI updates for a much smoother UI during block downloads -* Remove autocorrection of 0/i in addresses in UI -* Reorganize tray icon menu into more logical order -* Persistently poll for balance change when number of blocks changed -* Much better translations -* Override progress bar design on platforms with segmented progress bars to assist with readability -* Added 'immature balance' display on the overview page -* (Windows only): enable ASLR and DEP for bitcoin-qt.exe -* (Windows only): add meta-data to bitcoin-qt.exe (e.g. description) - -Internal codebase - -* Additional unit tests -* Compile warning fixes - - -Miscellaneous - -* Reopen debug.log upon SIGHUP -* Bash programmable completion for bitcoind(1) -* On supported OS's, each thread is given a useful name - - -Thanks to everybody who contributed to this release: - -Chris Moore -Christian von Roques -David Joel Schwartz -Douglas Huff -Fordy -Gavin Andresen -Giel van Schijndel -Gregory Maxwell -Jeff Garzik -Luke Dashjr -Matt Corallo -Michael Ford -Michael Hendricks -Peter Todd -Philip Kaufmann -Pieter Wuille -R E Broadley -Ricardo M. Correia -Rune K. Svendsen -Scott Ellis -Stephane Glondu -Wladimir J. van der Laan -cardpuncher -coderrr -fanquake -grimd34th -sje397 -xanatos - -Thanks to Sergio Lerner for reporting denial-of-service vulnerabilities fixed in this release. diff --git a/doc/bitcoin-release-notes/release-notes-0.7.1.md b/doc/bitcoin-release-notes/release-notes-0.7.1.md deleted file mode 100644 index 22e910c09..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.7.1.md +++ /dev/null @@ -1,110 +0,0 @@ -Bitcoin version 0.7.1 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.7.1/ - -This is a bug-fix minor release. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - -Project source code is hosted at github; you can get -source-only tarballs/zipballs directly from there: - https://github.com/bitcoin/bitcoin/tarball/v0.7.1 # .tar.gz - https://github.com/bitcoin/bitcoin/zipball/v0.7.1 # .zip - -Ubuntu Linux users can use the "Personal Package Archive" (PPA) -maintained by Matt Corallo to automatically keep -up-to-date. Just type: - sudo apt-add-repository ppa:bitcoin/bitcoin - sudo apt-get update -in your terminal, then install the bitcoin-qt package: - sudo apt-get install bitcoin-qt - -KNOWN ISSUES ------------- - -Mac OSX 10.5 is no longer supported. - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you were running on Linux with a version that might have been compiled -with a different version of Berkeley DB (for example, if you were using an -Ubuntu PPA version), then run the old version again with the -detachdb -argument and shut it down; if you do not, then the new version will not -be able to read the database files and will exit with an error. - -Explanation of -detachdb (and the new "stop true" RPC command): -The Berkeley DB database library stores data in both ".dat" and -"log" files, so the database is always in a consistent state, -even in case of power failure or other sudden shutdown. The -format of the ".dat" files is portable between different -versions of Berkeley DB, but the "log" files are not-- even minor -version differences may have incompatible "log" files. The --detachdb option moves any pending changes from the "log" files -to the "blkindex.dat" file for maximum compatibility, but makes -shutdown much slower. Note that the "wallet.dat" file is always -detached, and versions prior to 0.6.0 detached all databases -at shutdown. - -New features ------------- - -* Added a boolean argument to the RPC 'stop' command, if true sets - -detachdb to create standalone database .dat files before shutting down. - -* -salvagewallet command-line option, which moves any existing wallet.dat - to wallet.{timestamp}.dat and then attempts to salvage public/private - keys and master encryption keys (if the wallet is encrypted) into - a new wallet.dat. This should only be used if your wallet becomes - corrupted, and is not intended to replace regular wallet backups. - -* Import $DataDir/bootstrap.dat automatically, if it exists. - -Dependency changes ------------------- - -* Qt 4.8.2 for Windows builds - -* openssl 1.0.1c - -Bug fixes ---------- - -* Clicking on a bitcoin: URI on Windows should now launch Bitcoin-Qt properly. - -* When running -testnet, use RPC port 18332 by default. - -* Better detection and handling of corrupt wallet.dat and blkindex.dat files. - Previous versions would crash with a DB_RUNRECOVERY exception, this - version detects most problems and tells you how to recover if it - cannot recover itself. - -* Fixed an uninitialized variable bug that could cause transactions to - be reported out of order. - -* Fixed a bug that could cause occasional crashes on exit. - -* Warn the user that they need to create fresh wallet backups after they - encrypt their wallet. - ----------------------------------------------------- -Thanks to everybody who contributed to this release: - -Gavin Andresen -Jeff Garzik -Luke Dashjr -Mark Friedenbach -Matt Corallo -Philip Kaufmann -Pieter Wuille -Rune K. Svendsen -Virgil Dupras -Wladimir J. van der Laan -fanquake -kjj2 -xanatos diff --git a/doc/bitcoin-release-notes/release-notes-0.7.2.md b/doc/bitcoin-release-notes/release-notes-0.7.2.md deleted file mode 100644 index 40af34962..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.7.2.md +++ /dev/null @@ -1,68 +0,0 @@ -Bitcoin version 0.7.2 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.7.2 - -This is a bug-fix minor release. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you were running on Linux with a version that might have been compiled -with a different version of Berkeley DB (for example, if you were using an -Ubuntu PPA version), then run the old version again with the -detachdb -argument and shut it down; if you do not, then the new version will not -be able to read the database files and will exit with an error. - -Explanation of -detachdb (and the new "stop true" RPC command): -The Berkeley DB database library stores data in both ".dat" and -"log" files, so the database is always in a consistent state, -even in case of power failure or other sudden shutdown. The -format of the ".dat" files is portable between different -versions of Berkeley DB, but the "log" files are not-- even minor -version differences may have incompatible "log" files. The --detachdb option moves any pending changes from the "log" files -to the "blkindex.dat" file for maximum compatibility, but makes -shutdown much slower. Note that the "wallet.dat" file is always -detached, and versions prior to 0.6.0 detached all databases -at shutdown. - -Bug fixes ---------- - -* Prevent RPC 'move' from deadlocking. This was caused by trying to lock the - database twice. - -* Fix use-after-free problems in initialization and shutdown, the latter of - which caused Bitcoin-Qt to crash on Windows when exiting. - -* Correct library linking so building on Windows natively works. - -* Avoid a race condition and out-of-bounds read in block creation/mining code. - -* Improve platform compatibility quirks, including fix for 100% CPU utilization - on FreeBSD 9. - -* A few minor corrections to error handling, and updated translations. - -* OSX 10.5 supported again - ----------------------------------------------------- -Thanks to everybody who contributed to this release: - -Alex -dansmith -Gavin Andresen -Gregory Maxwell -Jeff Garzik -Luke Dashjr -Philip Kaufmann -Pieter Wuille -Wladimir J. van der Laan -grimd34th diff --git a/doc/bitcoin-release-notes/release-notes-0.8.0.md b/doc/bitcoin-release-notes/release-notes-0.8.0.md deleted file mode 100644 index 4e98a7740..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.8.0.md +++ /dev/null @@ -1,139 +0,0 @@ -Bitcoin-Qt version 0.8.0 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.0/ - -This is a major release designed to improve performance and handle the -increasing volume of transactions on the network. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -The first time you run after the upgrade a re-indexing process will be -started that will take anywhere from 30 minutes to several hours, -depending on the speed of your machine. - -Incompatible Changes --------------------- - -This release no longer maintains a full index of historical transaction ids -by default, so looking up an arbitrary transaction using the getrawtransaction -RPC call will not work. If you need that functionality, you must run once -with -txindex=1 -reindex=1 to rebuild block-chain indices (see below for more -details). - -Improvements ------------- - -Mac and Windows binaries are signed with certificates owned by the Bitcoin -Foundation, to be compatible with the new security features in OSX 10.8 and -Windows 8. - -LevelDB, a fast, open-source, non-relational database from Google, is -now used to store transaction and block indices. LevelDB works much better -on machines with slow I/O and is faster in general. Berkeley DB is now only -used for the wallet.dat file (public and private wallet keys and transactions -relevant to you). - -Pieter Wuille implemented many optimizations to the way transactions are -verified, so a running, synchronized node uses less working memory and does -much less I/O. He also implemented parallel signature checking, so if you -have a multi-CPU machine all CPUs will be used to verify transactions. - -New Features ------------- - -"Bloom filter" support in the network protocol for sending only relevant transactions to -lightweight clients. - -contrib/verifysfbinaries is a shell-script to verify that the binary downloads -at sourceforge have not been tampered with. If you are able, you can help make -everybody's downloads more secure by running this occasionally to check PGP -signatures against download file checksums. - -contrib/spendfrom is a python-language command-line utility that demonstrates -how to use the "raw transactions" JSON-RPC api to send coins received from particular -addresses (also known as "coin control"). - -New/changed settings (command-line or bitcoin.conf file) --------------------------------------------------------- - -dbcache : controls LevelDB memory usage. - -par : controls how many threads to use to validate transactions. Defaults to the number -of CPUs on your machine, use -par=1 to limit to a single CPU. - -txindex : maintains an extra index of old, spent transaction ids so they will be found -by the getrawtransaction JSON-RPC method. - -reindex : rebuild block and transaction indices from the downloaded block data. - -New JSON-RPC API Features -------------------------- - -lockunspent / listlockunspent allow locking transaction outputs for a period of time so -they will not be spent by other processes that might be accessing the same wallet. - -addnode / getaddednodeinfo methods, to connect to specific peers without restarting. - -importprivkey now takes an optional boolean parameter (default true) to control whether -or not to rescan the blockchain for transactions after importing a new private key. - -Important Bug Fixes -------------------- - -Privacy leak: the position of the "change" output in most transactions was not being -properly randomized, making network analysis of the transaction graph to identify -users' wallets easier. - -Zero-confirmation transaction vulnerability: accepting zero-confirmation transactions -(transactions that have not yet been included in a block) from somebody you do not -trust is still not recommended, because there will always be ways for attackers to -double-spend zero-confirmation transactions. However, this release includes a bug -fix that makes it a little bit more difficult for attackers to double-spend a -certain type ("lockTime in the future") of zero-confirmation transaction. - -Dependency Changes ------------------- - -Qt 4.8.3 (compiling against older versions of Qt 4 should continue to work) - - -Thanks to everybody who contributed to this release: ----------------------------------------------------- - -Alexander Kjeldaas -Andrey Alekseenko -Arnav Singh -Christian von Roques -Eric Lombrozo -Forrest Voight -Gavin Andresen -Gregory Maxwell -Jeff Garzik -Luke Dashjr -Matt Corallo -Mike Cassano -Mike Hearn -Peter Todd -Philip Kaufmann -Pieter Wuille -Richard Schwab -Robert Backhaus -Rune K. Svendsen -Sergio Demian Lerner -Wladimir J. van der Laan -burger2 -default -fanquake -grimd34th -justmoon -redshark1802 -tucenaber -xanatos diff --git a/doc/bitcoin-release-notes/release-notes-0.8.1.md b/doc/bitcoin-release-notes/release-notes-0.8.1.md deleted file mode 100644 index 4fd546bee..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.8.1.md +++ /dev/null @@ -1,22 +0,0 @@ -Bitcoin-Qt/bitcoind version 0.8.1 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.1/ - -This is a maintenance release that adds a new network rule to avoid -a chain-forking incompatibility with versions 0.7.2 and earlier. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you -run 0.8.1 your blockchain files will be re-indexed, which will take -anywhere from 30 minutes to several hours, depending on the speed of -your machine. diff --git a/doc/bitcoin-release-notes/release-notes-0.8.2.md b/doc/bitcoin-release-notes/release-notes-0.8.2.md deleted file mode 100644 index eea9ba2a2..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.8.2.md +++ /dev/null @@ -1,137 +0,0 @@ -Bitcoin-Qt version 0.8.2 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.2/ - -This is a maintenance release that fixes many bugs and includes -a few small new features. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - - -How to Upgrade - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you -run 0.8.2 your blockchain files will be re-indexed, which will take -anywhere from 30 minutes to several hours, depending on the speed of -your machine. - -0.8.2 Release notes - -Fee Policy changes - -The default fee for low-priority transactions is lowered from 0.0005 BTC -(for each 1,000 bytes in the transaction; an average transaction is -about 500 bytes) to 0.0001 BTC. - -Payments (transaction outputs) of 0.543 times the minimum relay fee -(0.00005430 BTC) are now considered 'non-standard', because storing them -costs the network more than they are worth and spending them will usually -cost their owner more in transaction fees than they are worth. - -Non-standard transactions are not relayed across the network, are not included -in blocks by most miners, and will not show up in your wallet until they are -included in a block. - -The default fee policy can be overridden using the -mintxfee and -minrelaytxfee -command-line options, but note that we intend to replace the hard-coded fees -with code that automatically calculates and suggests appropriate fees in the -0.9 release and note that if you set a fee policy significantly different from -the rest of the network your transactions may never confirm. - -Bitcoin-Qt changes - -* New icon and splash screen -* Improve reporting of synchronization process -* Remove hardcoded fee recommendations -* Improve metadata of executable on MacOSX and Windows -* Move export button to individual tabs instead of toolbar -* Add "send coins" command to context menu in address book -* Add "copy txid" command to copy transaction IDs from transaction overview -* Save & restore window size and position when showing & hiding window -* New translations: Arabic (ar), Bosnian (bs), Catalan (ca), Welsh (cy), - Esperanto (eo), Interlingua (la), Latvian (lv) and many improvements - to current translations - -MacOSX: -* OSX support for click-to-pay (bitcoin:) links -* Fix GUI disappearing problem on MacOSX (issue #1522) - -Linux/Unix: -* Copy addresses to middle-mouse-button clipboard - - -Command-line options - -* -walletnotify will call a command on receiving transactions that affect the wallet. -* -alertnotify will call a command on receiving an alert from the network. -* -par now takes a negative number, to leave a certain amount of cores free. - -JSON-RPC API changes - -* fixed a getblocktemplate bug that caused excessive CPU creating blocks. -* listunspent now lists account and address information. -* getinfo now also returns the time adjustment estimated from your peers. -* getpeerinfo now returns bytessent, bytesrecv and syncnode. -* gettxoutsetinfo returns statistics about the unspent transaction output database. -* gettxout returns information about a specific unspent transaction output. - - -Networking changes - -* Significant changes to the networking code, reducing latency and memory consumption. -* Avoid initial block download stalling. -* Remove IRC seeding support. -* Performance tweaks. -* Added testnet DNS seeds. - -Wallet compatibility/rescuing - -* Cases where wallets cannot be opened in another version/installation should be reduced. -* -salvagewallet now works for encrypted wallets. - - -Known Bugs - -* Entering the 'getblocktemplate' or 'getwork' RPC commands into the Bitcoin-Qt debug -console will cause Bitcoin-Qt to crash. Run Bitcoin-Qt with the -server command-line -option to workaround. - -Thanks to everybody who contributed to the 0.8.2 release! - -APerson241 -Andrew Poelstra -Calvin Owens -Chuck LeDuc Díaz -Colin Dean -David Griffith -David Serrano -Eric Lombrozo -Gavin Andresen -Gregory Maxwell -Jeff Garzik -Jonas Schnelli -Larry Gilbert -Luke Dashjr -Matt Corallo -Michael Ford -Mike Hearn -Patrick Brown -Peter Todd -Philip Kaufmann -Pieter Wuille -Richard Schwab -Roman Mindalev -Scott Howard -Tariq Bashir -Warren Togami -Wladimir J. van der Laan -freewil -gladoscc -kjj2 -mb300sd -super3 diff --git a/doc/bitcoin-release-notes/release-notes-0.8.3.md b/doc/bitcoin-release-notes/release-notes-0.8.3.md deleted file mode 100644 index 856c20aa3..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.8.3.md +++ /dev/null @@ -1,18 +0,0 @@ -Bitcoin-Qt version 0.8.3 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.3/ - -This is a maintenance release to fix a denial-of-service attack that -can cause nodes to crash. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - -0.8.3 Release notes - -Truncate over-size messages to prevent a memory exhaustion attack. - -Fix a regression that causes excessive re-writing of the 'peers.dat' file. - - -Thanks to Peter Todd for responsibly disclosing the vulnerability -( CVE-2013-4627 ) and creating a fix. diff --git a/doc/bitcoin-release-notes/release-notes-0.8.4.md b/doc/bitcoin-release-notes/release-notes-0.8.4.md deleted file mode 100644 index c6f31f1fa..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.8.4.md +++ /dev/null @@ -1,83 +0,0 @@ -Bitcoin-Qt version 0.8.4 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.4/ - -This is a maintenance release to fix a critical bug and three -security issues; we urge all users to upgrade. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you -run 0.8.4 your blockchain files will be re-indexed, which will take -anywhere from 30 minutes to several hours, depending on the speed of -your machine. - -0.8.4 Release notes -=================== - -Security issues ---------------- - -An attacker could send a series of messages that resulted in -an integer division-by-zero error in the Bloom Filter handling -code, causing the Bitcoin-Qt or bitcoind process to crash. -Bloom filters were introduced with version 0.8, so versions 0.8.0 -through 0.8.3 are vulnerable to this critical denial-of-service attack. - -A constant-time algorithm is now used to check RPC password -guess attempts; fixes https://github.com/bitcoin/bitcoin/issues/2838 -(CVE-2013-4165) - -Implement a better fix for the fill-memory-with-orphan-transactions -attack that was fixed in 0.8.3. See -https://bitslog.wordpress.com/2013/07/18/buggy-cve-2013-4627-patch-open-new-vectors-of-attack/ -for a description of the weaknesses of the previous fix. -(CVE-2013-4627) - -Bugs fixed ----------- - -Fix multi-block reorg transaction resurrection. - -Fix non-standard disconnected transactions causing mempool orphans. -This bug could cause nodes running with the -debug flag to crash. - -OSX: use 'FD_FULLSYNC' with LevelDB, which will (hopefully!) -prevent the database corruption issues many people have -experienced on OSX. - -Linux: clicking on bitcoin: links was broken if you were using -a Gnome-based desktop. - -Fix a hang-at-shutdown bug that only affects users that compile -their own version of Bitcoin against Boost versions 1.50-1.52. - -Other changes -------------- - -Checkpoint at block 250,000 to speed up initial block downloads -and make the progress indicator when downloading more accurate. - - -Thanks to everybody who contributed to the 0.8.4 releases! ----------------------------------------------------------- - -Pieter Wuille -Warren Togami -Patrick Strateman -pakt -Gregory Maxwell -Sergio Demian Lerner -grayleonard -Cory Fields -Matt Corallo -Gavin Andresen diff --git a/doc/bitcoin-release-notes/release-notes-0.8.5.md b/doc/bitcoin-release-notes/release-notes-0.8.5.md deleted file mode 100644 index aa93fe7c7..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.8.5.md +++ /dev/null @@ -1,44 +0,0 @@ -Bitcoin-Qt version 0.8.5 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.5/ - -This is a maintenance release to fix a critical bug; -we urge all users to upgrade. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you -run 0.8.5 your blockchain files will be re-indexed, which will take -anywhere from 30 minutes to several hours, depending on the speed of -your machine. - -0.8.5 Release notes -=================== - -Bugs fixed ----------- - -Transactions with version numbers larger than 0x7fffffff were -incorrectly being relayed and included in blocks. - -Blocks containing transactions with version numbers larger -than 0x7fffffff caused the code that checks for LevelDB database -inconsistencies at startup to erroneously report database -corruption and suggest that you reindex your database. - -This release also contains a non-critical fix to the code that -enforces BIP 34 (block height in the coinbase transaction). - --- - -Thanks to Gregory Maxwell and Pieter Wuille for quickly -identifying and fixing the transaction version number bug. diff --git a/doc/bitcoin-release-notes/release-notes-0.8.6.md b/doc/bitcoin-release-notes/release-notes-0.8.6.md deleted file mode 100644 index 39a45e0db..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.8.6.md +++ /dev/null @@ -1,66 +0,0 @@ -Bitcoin-Qt version 0.8.6 final is now available from: - - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.6/ - -This is a maintenance release to fix a critical bug; we urge all users to upgrade. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade --------------- - -If you already downloaded 0.8.6rc1 you do not need to re-download. This release is exactly the same. - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you -run 0.8.6 your blockchain files will be re-indexed, which will take -anywhere from 30 minutes to several hours, depending on the speed of -your machine. - -0.8.6 Release notes -=================== - -- Default block size increase for miners. - (see https://gist.github.com/gavinandresen/7670433#086-accept-into-block) - -- Remove the all-outputs-must-be-greater-than-CENT-to-qualify-as-free rule for relaying - (see https://gist.github.com/gavinandresen/7670433#086-relaying) - -- Lower maximum size for free transaction creation - (see https://gist.github.com/gavinandresen/7670433#086-wallet) - -- OSX block chain database corruption fixes - - Update leveldb to 1.13 - - Use fcntl with `F_FULLSYNC` instead of fsync on OSX - - Use native Darwin memory barriers - - Replace use of mmap in leveldb for improved reliability (only on OSX) - -- Fix nodes forwarding transactions with empty vins and getting banned - -- Network code performance and robustness improvements - -- Additional debug.log logging for diagnosis of network problems, log timestamps by default - -- Fix Bitcoin-Qt startup crash when clicking dock icon on OSX - -- Fix memory leaks in CKey::SetCompactSignature() and Key::SignCompact() - -- Fix rare GUI crash on send - -- Various small GUI, documentation and build fixes - -Warning -------- - -- There have been frequent reports of users running out of virtual memory on 32-bit systems - during the initial sync. - Hence it is recommended to use a 64-bit executable if possible. - A 64-bit executable for Windows is planned for 0.9. - -Note: Gavin Andresen's GPG signing key for SHA256SUMS.asc has been changed from key id 1FC730C1 to sub key 7BF6E212 (see https://github.com/bitcoin/bitcoin.org/pull/279). diff --git a/doc/bitcoin-release-notes/release-notes-0.9.0.md b/doc/bitcoin-release-notes/release-notes-0.9.0.md deleted file mode 100644 index 170410ca4..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.9.0.md +++ /dev/null @@ -1,411 +0,0 @@ -Bitcoin Core version 0.9.0 is now available from: - - https://bitcoin.org/bin/0.9.0/ - -This is a new major version release, bringing both new features and -bug fixes. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), uninstall all -earlier versions of Bitcoin, then run the installer (on Windows) or just copy -over /Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you run -0.9.0 your blockchain files will be re-indexed, which will take anywhere from -30 minutes to several hours, depending on the speed of your machine. - -On Windows, do not forget to uninstall all earlier versions of the Bitcoin -client first, especially if you are switching to the 64-bit version. - -Windows 64-bit installer -------------------------- - -New in 0.9.0 is the Windows 64-bit version of the client. There have been -frequent reports of users running out of virtual memory on 32-bit systems -during the initial sync. Because of this it is recommended to install the -64-bit version if your system supports it. - -NOTE: Release candidate 2 Windows binaries are not code-signed; use PGP -and the SHA256SUMS.asc file to make sure your binaries are correct. -In the final 0.9.0 release, Windows setup.exe binaries will be code-signed. - -OSX 10.5 / 32-bit no longer supported -------------------------------------- - -0.9.0 drops support for older Macs. The minimum requirements are now: -* A 64-bit-capable CPU (see http://support.apple.com/kb/ht3696); -* Mac OS 10.6 or later (see https://support.apple.com/kb/ht1633). - -Downgrading warnings --------------------- - -The 'chainstate' for this release is not always compatible with previous -releases, so if you run 0.9 and then decide to switch back to a -0.8.x release you might get a blockchain validation error when starting the -old release (due to 'pruned outputs' being omitted from the index of -unspent transaction outputs). - -Running the old release with the -reindex option will rebuild the chainstate -data structures and correct the problem. - -Also, the first time you run a 0.8.x release on a 0.9 wallet it will rescan -the blockchain for missing spent coins, which will take a long time (tens -of minutes on a typical machine). - -Rebranding to Bitcoin Core ---------------------------- - -To reduce confusion between Bitcoin-the-network and Bitcoin-the-software we -have renamed the reference client to Bitcoin Core. - - -OP_RETURN and data in the block chain -------------------------------------- -On OP_RETURN: There was been some confusion and misunderstanding in -the community, regarding the OP_RETURN feature in 0.9 and data in the -blockchain. This change is not an endorsement of storing data in the -blockchain. The OP_RETURN change creates a provably-prunable output, -to avoid data storage schemes -- some of which were already deployed -- -that were storing arbitrary data such as images as forever-unspendable -TX outputs, bloating bitcoin's UTXO database. - -Storing arbitrary data in the blockchain is still a bad idea; it is less -costly and far more efficient to store non-currency data elsewhere. - -Autotools build system ------------------------ - -For 0.9.0 we switched to an autotools-based build system instead of individual -(q)makefiles. - -Using the standard "./autogen.sh; ./configure; make" to build Bitcoin-Qt and -bitcoind makes it easier for experienced open source developers to contribute -to the project. - -Be sure to check doc/build-*.md for your platform before building from source. - -Bitcoin-cli -------------- - -Another change in the 0.9 release is moving away from the bitcoind executable -functioning both as a server and as a RPC client. The RPC client functionality -("tell the running bitcoin daemon to do THIS") was split into a separate -executable, 'bitcoin-cli'. The RPC client code will eventually be removed from -bitcoind, but will be kept for backwards compatibility for a release or two. - -`walletpassphrase` RPC ------------------------ - -The behavior of the `walletpassphrase` RPC when the wallet is already unlocked -has changed between 0.8 and 0.9. - -The 0.8 behavior of `walletpassphrase` is to fail when the wallet is already unlocked: - - > walletpassphrase 1000 - walletunlocktime = now + 1000 - > walletpassphrase 10 - Error: Wallet is already unlocked (old unlock time stays) - -The new behavior of `walletpassphrase` is to set a new unlock time overriding -the old one: - - > walletpassphrase 1000 - walletunlocktime = now + 1000 - > walletpassphrase 10 - walletunlocktime = now + 10 (overriding the old unlock time) - -Transaction malleability-related fixes --------------------------------------- - -This release contains a few fixes for transaction ID (TXID) malleability -issues: - -- -nospendzeroconfchange command-line option, to avoid spending - zero-confirmation change -- IsStandard() transaction rules tightened to prevent relaying and mining of - mutated transactions -- Additional information in listtransactions/gettransaction output to - report wallet transactions that conflict with each other because - they spend the same outputs. -- Bug fixes to the getbalance/listaccounts RPC commands, which would report - incorrect balances for double-spent (or mutated) transactions. -- New option: -zapwallettxes to rebuild the wallet's transaction information - -Transaction Fees ----------------- - -This release drops the default fee required to relay transactions across the -network and for miners to consider the transaction in their blocks to -0.01mBTC per kilobyte. - -Note that getting a transaction relayed across the network does NOT guarantee -that the transaction will be accepted by a miner; by default, miners fill -their blocks with 50 kilobytes of high-priority transactions, and then with -700 kilobytes of the highest-fee-per-kilobyte transactions. - -The minimum relay/mining fee-per-kilobyte may be changed with the -minrelaytxfee option. Note that previous releases incorrectly used -the mintxfee setting to determine which low-priority transactions should -be considered for inclusion in blocks. - -The wallet code still uses a default fee for low-priority transactions of -0.1mBTC per kilobyte. During periods of heavy transaction volume, even this -fee may not be enough to get transactions confirmed quickly; the mintxfee -option may be used to override the default. - -0.9.0 Release notes -======================= - -RPC: - -- New notion of 'conflicted' transactions, reported as confirmations: -1 -- 'listreceivedbyaddress' now provides tx ids -- Add raw transaction hex to 'gettransaction' output -- Updated help and tests for 'getreceivedby(account|address)' -- In 'getblock', accept 2nd 'verbose' parameter, similar to getrawtransaction, - but defaulting to 1 for backward compatibility -- Add 'verifychain', to verify chain database at runtime -- Add 'dumpwallet' and 'importwallet' RPCs -- 'keypoolrefill' gains optional size parameter -- Add 'getbestblockhash', to return tip of best chain -- Add 'chainwork' (the total work done by all blocks since the genesis block) - to 'getblock' output -- Make RPC password resistant to timing attacks -- Clarify help messages and add examples -- Add 'getrawchangeaddress' call for raw transaction change destinations -- Reject insanely high fees by default in 'sendrawtransaction' -- Add RPC call 'decodescript' to decode a hex-encoded transaction script -- Make 'validateaddress' provide redeemScript -- Add 'getnetworkhashps' to get the calculated network hashrate -- New RPC 'ping' command to request ping, new 'pingtime' and 'pingwait' fields - in 'getpeerinfo' output -- Adding new 'addrlocal' field to 'getpeerinfo' output -- Add verbose boolean to 'getrawmempool' -- Add rpc command 'getunconfirmedbalance' to obtain total unconfirmed balance -- Explicitly ensure that wallet is unlocked in `importprivkey` -- Add check for valid keys in `importprivkey` - -Command-line options: - -- New option: -nospendzeroconfchange to never spend unconfirmed change outputs -- New option: -zapwallettxes to rebuild the wallet's transaction information -- Rename option '-tor' to '-onion' to better reflect what it does -- Add '-disablewallet' mode to let bitcoind run entirely without wallet (when - built with wallet) -- Update default '-rpcsslciphers' to include TLSv1.2 -- make '-logtimestamps' default on and rework help-message -- RPC client option: '-rpcwait', to wait for server start -- Remove '-logtodebugger' -- Allow `-noserver` with bitcoind - -Block-chain handling and storage: - -- Update leveldb to 1.15 -- Check for correct genesis (prevent cases where a datadir from the wrong - network is accidentally loaded) -- Allow txindex to be removed and add a reindex dialog -- Log aborted block database rebuilds -- Store orphan blocks in serialized form, to save memory -- Limit the number of orphan blocks in memory to 750 -- Fix non-standard disconnected transactions causing mempool orphans -- Add a new checkpoint at block 279,000 - -Wallet: - -- Bug fixes and new regression tests to correctly compute - the balance of wallets containing double-spent (or mutated) transactions -- Store key creation time. Calculate whole-wallet birthday. -- Optimize rescan to skip blocks prior to birthday -- Let user select wallet file with -wallet=foo.dat -- Consider generated coins mature at 101 instead of 120 blocks -- Improve wallet load time -- Don't count txins for priority to encourage sweeping -- Don't create empty transactions when reading a corrupted wallet -- Fix rescan to start from beginning after importprivkey -- Only create signatures with low S values - -Mining: - -- Increase default -blockmaxsize/prioritysize to 750K/50K -- 'getblocktemplate' does not require a key to create a block template -- Mining code fee policy now matches relay fee policy - -Protocol and network: - -- Drop the fee required to relay a transaction to 0.01mBTC per kilobyte -- Send tx relay flag with version -- New 'reject' P2P message (BIP 0061, see - https://gist.github.com/gavinandresen/7079034 for draft) -- Dump addresses every 15 minutes instead of 10 seconds -- Relay OP_RETURN data TxOut as standard transaction type -- Remove CENT-output free transaction rule when relaying -- Lower maximum size for free transaction creation -- Send multiple inv messages if mempool.size > MAX_INV_SZ -- Split MIN_PROTO_VERSION into INIT_PROTO_VERSION and MIN_PEER_PROTO_VERSION -- Do not treat fFromMe transaction differently when broadcasting -- Process received messages one at a time without sleeping between messages -- Improve logging of failed connections -- Bump protocol version to 70002 -- Add some additional logging to give extra network insight -- Added new DNS seed from bitcoinstats.com - -Validation: - -- Log reason for non-standard transaction rejection -- Prune provably-unspendable outputs, and adapt consistency check for it. -- Detect any sufficiently long fork and add a warning -- Call the -alertnotify script when we see a long or invalid fork -- Fix multi-block reorg transaction resurrection -- Reject non-canonically-encoded serialization sizes -- Reject dust amounts during validation -- Accept nLockTime transactions that finalize in the next block - -Build system: - -- Switch to autotools-based build system -- Build without wallet by passing `--disable-wallet` to configure, this - removes the BerkeleyDB dependency -- Upgrade gitian dependencies (libpng, libz, libupnpc, boost, openssl) to more - recent versions -- Windows 64-bit build support -- Solaris compatibility fixes -- Check integrity of gitian input source tarballs -- Enable full GCC Stack-smashing protection for all OSes - -GUI: - -- Switch to Qt 5.2.0 for Windows build -- Add payment request (BIP 0070) support -- Improve options dialog -- Show transaction fee in new send confirmation dialog -- Add total balance in overview page -- Allow user to choose data directory on first start, when data directory is - missing, or when the -choosedatadir option is passed -- Save and restore window positions -- Add vout index to transaction id in transactions details dialog -- Add network traffic graph in debug window -- Add open URI dialog -- Add Coin Control Features -- Improve receive coins workflow: make the 'Receive' tab into a form to request - payments, and move historical address list functionality to File menu. -- Rebrand to `Bitcoin Core` -- Move initialization/shutdown to a thread. This prevents "Not responding" - messages during startup. Also show a window during shutdown. -- Don't regenerate autostart link on every client startup -- Show and store message of normal bitcoin:URI -- Fix richtext detection hang issue on very old Qt versions -- OS X: Make use of the 10.8+ user notification center to display Growl-like - notifications -- OS X: Added NSHighResolutionCapable flag to Info.plist for better font - rendering on Retina displays. -- OS X: Fix bitcoin-qt startup crash when clicking dock icon -- Linux: Fix Gnome bitcoin: URI handler - -Miscellaneous: - -- Add Linux script (contrib/qos/tc.sh) to limit outgoing bandwidth -- Add '-regtest' mode, similar to testnet but private with instant block - generation with 'setgenerate' RPC. -- Add 'linearize.py' script to contrib, for creating bootstrap.dat -- Add separate bitcoin-cli client - -Credits --------- - -Thanks to everyone who contributed to this release: - -- Andrey -- Ashley Holman -- b6393ce9-d324-4fe1-996b-acf82dbc3d53 -- bitsofproof -- Brandon Dahler -- Calvin Tam -- Christian Decker -- Christian von Roques -- Christopher Latham -- Chuck -- coblee -- constantined -- Cory Fields -- Cozz Lovan -- daniel -- Daniel Larimer -- David Hill -- Dmitry Smirnov -- Drak -- Eric Lombrozo -- fanquake -- fcicq -- Florin -- frewil -- Gavin Andresen -- Gregory Maxwell -- gubatron -- Guillermo Céspedes Tabárez -- Haakon Nilsen -- HaltingState -- Han Lin Yap -- harry -- Ian Kelling -- Jeff Garzik -- Johnathan Corgan -- Jonas Schnelli -- Josh Lehan -- Josh Triplett -- Julian Langschaedel -- Kangmo -- Lake Denman -- Luke Dashjr -- Mark Friedenbach -- Matt Corallo -- Michael Bauer -- Michael Ford -- Michagogo -- Midnight Magic -- Mike Hearn -- Nils Schneider -- Noel Tiernan -- Olivier Langlois -- patrick s -- Patrick Strateman -- paveljanik -- Peter Todd -- phantomcircuit -- phelixbtc -- Philip Kaufmann -- Pieter Wuille -- Rav3nPL -- R E Broadley -- regergregregerrge -- Robert Backhaus -- Roman Mindalev -- Rune K. Svendsen -- Ryan Niebur -- Scott Ellis -- Scott Willeke -- Sergey Kazenyuk -- Shawn Wilkinson -- Sined -- sje -- Subo1978 -- super3 -- Tamas Blummer -- theuni -- Thomas Holenstein -- Timon Rapp -- Timothy Stranex -- Tom Geller -- Torstein Husebø -- Vaclav Vobornik -- vhf / victor felder -- Vinnie Falco -- Warren Togami -- Wil Bown -- Wladimir J. van der Laan diff --git a/doc/bitcoin-release-notes/release-notes-0.9.1.md b/doc/bitcoin-release-notes/release-notes-0.9.1.md deleted file mode 100644 index 0552053d2..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.9.1.md +++ /dev/null @@ -1,53 +0,0 @@ -Bitcoin Core version 0.9.1 is now available from: - - https://bitcoin.org/bin/0.9.1/ - -This is a security update. It is recommended to upgrade to this release -as soon as possible. - -It is especially important to upgrade if you currently have version -0.9.0 installed and are using the graphical interface OR you are using -bitcoind from any pre-0.9.1 version, and have enabled SSL for RPC and -have configured allowip to allow rpc connections from potentially -hostile hosts. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you run -0.9.1 your blockchain files will be re-indexed, which will take anywhere from -30 minutes to several hours, depending on the speed of your machine. - -0.9.1 Release notes -======================= - -No code changes were made between 0.9.0 and 0.9.1. Only the dependencies were changed. - -- Upgrade OpenSSL to 1.0.1g. This release fixes the following vulnerabilities which can - affect the Bitcoin Core software: - - - CVE-2014-0160 ("heartbleed") - A missing bounds check in the handling of the TLS heartbeat extension can - be used to reveal up to 64k of memory to a connected client or server. - - - CVE-2014-0076 - The Montgomery ladder implementation in OpenSSL does not ensure that - certain swap operations have a constant-time behavior, which makes it - easier for local users to obtain ECDSA nonces via a FLUSH+RELOAD cache - side-channel attack. - -- Add statically built executables to Linux build - -Credits --------- - -Credits go to the OpenSSL team for fixing the vulnerabilities quickly. diff --git a/doc/bitcoin-release-notes/release-notes-0.9.2.1.md b/doc/bitcoin-release-notes/release-notes-0.9.2.1.md deleted file mode 100644 index 3168ad1a5..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.9.2.1.md +++ /dev/null @@ -1,207 +0,0 @@ -Bitcoin Core version 0.9.2.1 is now available from: - - https://bitcoin.org/bin/0.9.2.1/ - -This is a new minor version release, bringing mostly bug fixes and some minor -improvements. OpenSSL has been updated because of a security issue (CVE-2014-0224). -Upgrading to this release is recommended. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you run -0.9.2.1 your blockchain files will be re-indexed, which will take anywhere from -30 minutes to several hours, depending on the speed of your machine. - -Downgrading warnings --------------------- - -The 'chainstate' for this release is not always compatible with previous -releases, so if you run 0.9.x and then decide to switch back to a -0.8.x release you might get a blockchain validation error when starting the -old release (due to 'pruned outputs' being omitted from the index of -unspent transaction outputs). - -Running the old release with the -reindex option will rebuild the chainstate -data structures and correct the problem. - -Also, the first time you run a 0.8.x release on a 0.9 wallet it will rescan -the blockchain for missing spent coins, which will take a long time (tens -of minutes on a typical machine). - -Important changes -================== - -Gitian OSX build ------------------ - -The deterministic build system that was already used for Windows and Linux -builds is now used for OSX as well. Although the resulting executables have -been tested quite a bit, there could be possible regressions. Be sure to report -these on the Github bug tracker mentioned above. - -Compatibility of Linux build ------------------------------ - -For Linux we now build against Qt 4.6, and filter the symbols for libstdc++ and glibc. -This brings back compatibility with - -- Debian 6+ / Tails -- Ubuntu 10.04 -- CentOS 6.5 - -0.9.2 - 0.9.2.1 Release notes -======================= - -The OpenSSL dependency in the gitian builds has been upgraded to 1.0.1h because of CVE-2014-0224. - -RPC: - -- Add `getwalletinfo`, `getblockchaininfo` and `getnetworkinfo` calls (will replace hodge-podge `getinfo` at some point) -- Add a `relayfee` field to `getnetworkinfo` -- Fix RPC related shutdown hangs and leaks -- Always show syncnode in `getpeerinfo` -- `sendrawtransaction`: report the reject code and reason, and make it possible to re-send transactions that are already in the mempool -- `getmininginfo` show right genproclimit - -Command-line options: - -- Fix `-printblocktree` output -- Show error message if ReadConfigFile fails - -Block-chain handling and storage: - -- Fix for GetBlockValue() after block 13,440,000 (BIP42) -- Upgrade leveldb to 1.17 - -Protocol and network code: - -- Per-peer block download tracking and stalled download detection -- Add new DNS seed from bitnodes.io -- Prevent socket leak in ThreadSocketHandler and correct some proxy related socket leaks -- Use pnode->nLastRecv as sync score (was the wrong way around) - -Wallet: - -- Make GetAvailableCredit run GetHash() only once per transaction (performance improvement) -- Lower paytxfee warning threshold from 0.25 BTC to 0.01 BTC -- Fix importwallet nTimeFirstKey (trigger necessary rescans) -- Log BerkeleyDB version at startup -- CWallet init fix - -Build system: - -- Add OSX build descriptors to gitian -- Fix explicit --disable-qt-dbus -- Don't require db_cxx.h when compiling with wallet disabled and GUI enabled -- Improve missing boost error reporting -- Upgrade miniupnpc version to 1.9 -- gitian-linux: --enable-glibc-back-compat for binary compatibility with old distributions -- gitian: don't export any symbols from executable -- gitian: build against Qt 4.6 -- devtools: add script to check symbols from Linux gitian executables -- Remove build-time no-IPv6 setting - -GUI: - -- Fix various coin control visual issues -- Show number of in/out connections in debug console -- Show weeks as well as years behind for long timespans behind -- Enable and disable the Show and Remove buttons for requested payments history based on whether any entry is selected. -- Show also value for options overridden on command line in options dialog -- Fill in label from address book also for URIs -- Fixes feel when resizing the last column on tables (issue #2862) -- Fix ESC in disablewallet mode -- Add expert section to wallet tab in optionsdialog -- Do proper boost::path conversion (fixes unicode in datadir) -- Only override -datadir if different from the default (fixes -datadir in config file) -- Show rescan progress at start-up -- Show importwallet progress -- Get required locks upfront in polling functions (avoids hanging on locks) -- Catch Windows shutdown events while client is running -- Optionally add third party links to transaction context menu -- Check for !pixmap() before trying to export QR code (avoids crashes when no QR code could be generated) -- Fix "Start bitcoin on system login" - -Miscellaneous: - -- Replace non-threadsafe C functions (gmtime, strerror and setlocale) -- Add missing cs_main and wallet locks -- Avoid exception at startup when system locale not recognized -- Changed bitrpc.py's raw_input to getpass for passwords to conceal characters during command line input -- devtools: add a script to fetch and postprocess translations - -Credits --------- - -Thanks to everyone who contributed to this release: - -- Addy Yeow -- Altoidnerd -- Andrea D'Amore -- Andreas Schildbach -- Bardi Harborow -- Brandon Dahler -- Bryan Bishop -- Chris Beams -- Christian von Roques -- Cory Fields -- Cozz Lovan -- daniel -- Daniel Newton -- David A. Harding -- ditto-b -- duanemoody -- Eric S. Bullington -- Fabian Raetz -- Gavin Andresen -- Gregory Maxwell -- gubatron -- Haakon Nilsen -- harry -- Hector Jusforgues -- Isidoro Ghezzi -- Jeff Garzik -- Johnathan Corgan -- jtimon -- Kamil Domanski -- langerhans -- Luke Dashjr -- Manuel Araoz -- Mark Friedenbach -- Matt Corallo -- Matthew Bogosian -- Meeh -- Michael Ford -- Michagogo -- Mikael Wikman -- Mike Hearn -- olalonde -- paveljanik -- peryaudo -- Philip Kaufmann -- philsong -- Pieter Wuille -- R E Broadley -- richierichrawr -- Rune K. Svendsen -- rxl -- shshshsh -- Simon de la Rouviere -- Stuart Cardall -- super3 -- Telepatheic -- Thomas Zander -- Torstein Husebø -- Warren Togami -- Wladimir J. van der Laan -- Yoichi Hirai diff --git a/doc/bitcoin-release-notes/release-notes-0.9.2.md b/doc/bitcoin-release-notes/release-notes-0.9.2.md deleted file mode 100644 index a2749e549..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.9.2.md +++ /dev/null @@ -1,207 +0,0 @@ -Bitcoin Core version 0.9.2 is now available from: - - https://bitcoin.org/bin/0.9.2/ - -This is a new minor version release, bringing mostly bug fixes and some minor -improvements. OpenSSL has been updated because of a security issue (CVE-2014-0224). -Upgrading to this release is recommended. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you run -0.9.2 your blockchain files will be re-indexed, which will take anywhere from -30 minutes to several hours, depending on the speed of your machine. - -Downgrading warnings --------------------- - -The 'chainstate' for this release is not always compatible with previous -releases, so if you run 0.9.x and then decide to switch back to a -0.8.x release you might get a blockchain validation error when starting the -old release (due to 'pruned outputs' being omitted from the index of -unspent transaction outputs). - -Running the old release with the -reindex option will rebuild the chainstate -data structures and correct the problem. - -Also, the first time you run a 0.8.x release on a 0.9 wallet it will rescan -the blockchain for missing spent coins, which will take a long time (tens -of minutes on a typical machine). - -Important changes -================== - -Gitian OSX build ------------------ - -The deterministic build system that was already used for Windows and Linux -builds is now used for OSX as well. Although the resulting executables have -been tested quite a bit, there could be possible regressions. Be sure to report -these on the Github bug tracker mentioned above. - -Compatibility of Linux build ------------------------------ - -For Linux we now build against Qt 4.6, and filter the symbols for libstdc++ and glibc. -This brings back compatibility with - -- Debian 6+ / Tails -- Ubuntu 10.04 -- CentOS 6.5 - -0.9.2 Release notes -======================= - -The OpenSSL dependency in the gitian builds has been upgraded to 1.0.1h because of CVE-2014-0224. - -RPC: - -- Add `getwalletinfo`, `getblockchaininfo` and `getnetworkinfo` calls (will replace hodge-podge `getinfo` at some point) -- Add a `relayfee` field to `getnetworkinfo` -- Fix RPC related shutdown hangs and leaks -- Always show syncnode in `getpeerinfo` -- `sendrawtransaction`: report the reject code and reason, and make it possible to re-send transactions that are already in the mempool -- `getmininginfo` show right genproclimit - -Command-line options: - -- Fix `-printblocktree` output -- Show error message if ReadConfigFile fails - -Block-chain handling and storage: - -- Fix for GetBlockValue() after block 13,440,000 (BIP42) -- Upgrade leveldb to 1.17 - -Protocol and network code: - -- Per-peer block download tracking and stalled download detection -- Add new DNS seed from bitnodes.io -- Prevent socket leak in ThreadSocketHandler and correct some proxy related socket leaks -- Use pnode->nLastRecv as sync score (was the wrong way around) - -Wallet: - -- Make GetAvailableCredit run GetHash() only once per transaction (performance improvement) -- Lower paytxfee warning threshold from 0.25 BTC to 0.01 BTC -- Fix importwallet nTimeFirstKey (trigger necessary rescans) -- Log BerkeleyDB version at startup -- CWallet init fix - -Build system: - -- Add OSX build descriptors to gitian -- Fix explicit --disable-qt-dbus -- Don't require db_cxx.h when compiling with wallet disabled and GUI enabled -- Improve missing boost error reporting -- Upgrade miniupnpc version to 1.9 -- gitian-linux: --enable-glibc-back-compat for binary compatibility with old distributions -- gitian: don't export any symbols from executable -- gitian: build against Qt 4.6 -- devtools: add script to check symbols from Linux gitian executables -- Remove build-time no-IPv6 setting - -GUI: - -- Fix various coin control visual issues -- Show number of in/out connections in debug console -- Show weeks as well as years behind for long timespans behind -- Enable and disable the Show and Remove buttons for requested payments history based on whether any entry is selected. -- Show also value for options overridden on command line in options dialog -- Fill in label from address book also for URIs -- Fixes feel when resizing the last column on tables (issue #2862) -- Fix ESC in disablewallet mode -- Add expert section to wallet tab in optionsdialog -- Do proper boost::path conversion (fixes unicode in datadir) -- Only override -datadir if different from the default (fixes -datadir in config file) -- Show rescan progress at start-up -- Show importwallet progress -- Get required locks upfront in polling functions (avoids hanging on locks) -- Catch Windows shutdown events while client is running -- Optionally add third party links to transaction context menu -- Check for !pixmap() before trying to export QR code (avoids crashes when no QR code could be generated) -- Fix "Start bitcoin on system login" - -Miscellaneous: - -- Replace non-threadsafe C functions (gmtime, strerror and setlocale) -- Add missing cs_main and wallet locks -- Avoid exception at startup when system locale not recognized -- Changed bitrpc.py's raw_input to getpass for passwords to conceal characters during command line input -- devtools: add a script to fetch and postprocess translations - -Credits --------- - -Thanks to everyone who contributed to this release: - -- Addy Yeow -- Altoidnerd -- Andrea D'Amore -- Andreas Schildbach -- Bardi Harborow -- Brandon Dahler -- Bryan Bishop -- Chris Beams -- Christian von Roques -- Cory Fields -- Cozz Lovan -- daniel -- Daniel Newton -- David A. Harding -- ditto-b -- duanemoody -- Eric S. Bullington -- Fabian Raetz -- Gavin Andresen -- Gregory Maxwell -- gubatron -- Haakon Nilsen -- harry -- Hector Jusforgues -- Isidoro Ghezzi -- Jeff Garzik -- Johnathan Corgan -- jtimon -- Kamil Domanski -- langerhans -- Luke Dashjr -- Manuel Araoz -- Mark Friedenbach -- Matt Corallo -- Matthew Bogosian -- Meeh -- Michael Ford -- Michagogo -- Mikael Wikman -- Mike Hearn -- olalonde -- paveljanik -- peryaudo -- Philip Kaufmann -- philsong -- Pieter Wuille -- R E Broadley -- richierichrawr -- Rune K. Svendsen -- rxl -- shshshsh -- Simon de la Rouviere -- Stuart Cardall -- super3 -- Telepatheic -- Thomas Zander -- Torstein Husebø -- Warren Togami -- Wladimir J. van der Laan -- Yoichi Hirai diff --git a/doc/bitcoin-release-notes/release-notes-0.9.3.md b/doc/bitcoin-release-notes/release-notes-0.9.3.md deleted file mode 100644 index 0765a360b..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.9.3.md +++ /dev/null @@ -1,101 +0,0 @@ -Bitcoin Core version 0.9.3 is now available from: - - https://bitcoin.org/bin/0.9.3/ - -This is a new minor version release, bringing only bug fixes and updated -translations. Upgrading to this release is recommended. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -Upgrading and downgrading -========================== - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you run -0.9.3 your blockchain files will be re-indexed, which will take anywhere from -30 minutes to several hours, depending on the speed of your machine. - -Downgrading warnings --------------------- - -The 'chainstate' for this release is not always compatible with previous -releases, so if you run 0.9.x and then decide to switch back to a -0.8.x release you might get a blockchain validation error when starting the -old release (due to 'pruned outputs' being omitted from the index of -unspent transaction outputs). - -Running the old release with the -reindex option will rebuild the chainstate -data structures and correct the problem. - -Also, the first time you run a 0.8.x release on a 0.9 wallet it will rescan -the blockchain for missing spent coins, which will take a long time (tens -of minutes on a typical machine). - -0.9.3 Release notes -======================= - -RPC: -- Avoid a segfault on getblock if it can't read a block from disk -- Add paranoid return value checks in base58 - -Protocol and network code: -- Don't poll showmyip.com, it doesn't exist anymore -- Add a way to limit deserialized string lengths and use it -- Add a new checkpoint at block 295,000 -- Increase IsStandard() scriptSig length -- Avoid querying DNS seeds, if we have open connections -- Remove a useless millisleep in socket handler -- Stricter memory limits on CNode -- Better orphan transaction handling -- Add `-maxorphantx=` and `-maxorphanblocks=` options for control over the maximum orphan transactions and blocks - -Wallet: -- Check redeemScript size does not exceed 520 byte limit -- Ignore (and warn about) too-long redeemScripts while loading wallet - -GUI: -- fix 'opens in testnet mode when presented with a BIP-72 link with no fallback' -- AvailableCoins: acquire cs_main mutex -- Fix unicode character display on MacOSX - -Miscellaneous: -- key.cpp: fail with a friendlier message on missing ssl EC support -- Remove bignum dependency for scripts -- Upgrade OpenSSL to 1.0.1i (see https://www.openssl.org/news/secadv_20140806.txt - just to be sure, no critical issues for Bitcoin Core) -- Upgrade miniupnpc to 1.9.20140701 -- Fix boost detection in build system on some platforms - -Credits --------- - -Thanks to everyone who contributed to this release: - -- Andrew Poelstra -- Cory Fields -- Gavin Andresen -- Jeff Garzik -- Johnathan Corgan -- Julian Haight -- Michael Ford -- Pavel Vasin -- Peter Todd -- phantomcircuit -- Pieter Wuille -- Rose Toomey -- Ruben Dario Ponticelli -- shshshsh -- Trevin Hofmann -- Warren Togami -- Wladimir J. van der Laan -- Zak Wilcox - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/bitcoin-release-notes/release-notes-0.9.4.md b/doc/bitcoin-release-notes/release-notes-0.9.4.md deleted file mode 100644 index 7ee73246a..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.9.4.md +++ /dev/null @@ -1,95 +0,0 @@ -Bitcoin Core version 0.9.4 is now available from: - - https://bitcoin.org/bin/0.9.4/ - -This is a new minor version release, bringing only bug fixes and updated -translations. Upgrading to this release is recommended. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade -=============== - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -OpenSSL Warning -================ - -OpenSSL 1.0.0p / 1.0.1k was recently released and is being pushed out by -various operating system maintainers. Review by Gregory Maxwell determined that -this update is incompatible with the Bitcoin system and could lead to consensus -forks. - -Bitcoin Core released binaries from https://bitcoin.org are unaffected, -as are any built with the gitian deterministic build system. - -However, if you are running either - -- The Ubuntu PPA from https://launchpad.net/~bitcoin/+archive/ubuntu/bitcoin -- A third-party or self-compiled Bitcoin Core - -upgrade to Bitcoin Core 0.9.4, which includes a workaround, **before** updating -OpenSSL. - -The incompatibility is due to the OpenSSL update changing the -behavior of ECDSA validation to reject any signature which is -not encoded in a very rigid manner. This was a result of -OpenSSL's change for CVE-2014-8275 "Certificate fingerprints -can be modified". - -We are specifically aware of potential hard-forks due to signature -encoding handling and had been hoping to close them via BIP62 in 0.10. -BIP62's purpose is to improve transaction malleability handling and -as a side effect rigidly defines the encoding for signatures, but the -overall scope of BIP62 has made it take longer than we'd like to -deploy. - -0.9.4 changelog -================ - -Validation: -- `b8e81b7` consensus: guard against openssl's new strict DER checks -- `60c51f1` fail immediately on an empty signature -- `037bfef` Improve robustness of DER recoding code - -Command-line options: -- `cd5164a` Make -proxy set all network types, avoiding a connect leak. - -P2P: -- `bb424e4` Limit the number of new addressses to accumulate - -RPC: -- `0a94661` Disable SSLv3 (in favor of TLS) for the RPC client and server. - -Build system: -- `f047dfa` gitian: openssl-1.0.1i.tar.gz -> openssl-1.0.1k.tar.gz -- `5b9f78d` build: Fix OSX build when using Homebrew and qt5 -- `ffab1dd` Keep symlinks when copying into .app bundle -- `613247f` osx: fix signing to make Gatekeeper happy (again) - -Miscellaneous: -- `25b49b5` Refactor -alertnotify code -- `2743529` doc: Add instructions for consistent Mac OS X build names - -Credits --------- - -Thanks to who contributed to this release, at least: - -- Cory Fields -- Gavin Andresen -- Gregory Maxwell -- Jeff Garzik -- Luke Dashjr -- Matt Corallo -- Pieter Wuille -- Saivann -- Sergio Demian Lerner -- Wladimir J. van der Laan - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/bitcoin-release-notes/release-notes-0.9.5.md b/doc/bitcoin-release-notes/release-notes-0.9.5.md deleted file mode 100644 index bed0af987..000000000 --- a/doc/bitcoin-release-notes/release-notes-0.9.5.md +++ /dev/null @@ -1,60 +0,0 @@ -Bitcoin Core version 0.9.5 is now available from: - - https://bitcoin.org/bin/0.9.5/ - -This is a new minor version release, with the goal of backporting BIP66. There -are also a few bug fixes and updated translations. Upgrading to this release is -recommended. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade -=============== - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Notable changes -================ - -Mining and relay policy enhancements ------------------------------------- - -Bitcoin Core's block templates are now for version 3 blocks only, and any mining -software relying on its `getblocktemplate` must be updated in parallel to use -libblkmaker either version 0.4.2 or any version from 0.5.1 onward. -If you are solo mining, this will affect you the moment you upgrade Bitcoin -Core, which must be done prior to BIP66 achieving its 951/1001 status. -If you are mining with the stratum mining protocol: this does not affect you. -If you are mining with the getblocktemplate protocol to a pool: this will affect -you at the pool operator's discretion, which must be no later than BIP66 -achieving its 951/1001 status. - -0.9.5 changelog -================ - -- `74f29c2` Check pindexBestForkBase for null -- `9cd1dd9` Fix priority calculation in CreateTransaction -- `6b4163b` Sanitize command strings before logging them. -- `3230b32` Raise version of created blocks, and enforce DERSIG in mempool -- `989d499` Backport of some of BIP66's tests -- `ab03660` Implement BIP 66 validation rules and switchover logic -- `8438074` build: fix dynamic boost check when --with-boost= is used - -Credits --------- - -Thanks to who contributed to this release, at least: - -- 21E14 -- Alex Morcos -- Cory Fields -- Gregory Maxwell -- Pieter Wuille -- Wladimir J. van der Laan - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/developer-notes.md b/doc/developer-notes.md index 72bfa43ba..a4139ee2b 100644 --- a/doc/developer-notes.md +++ b/doc/developer-notes.md @@ -243,4 +243,127 @@ ACK - A loose ACK can be confusing. It's best to avoid them unless it's a docum NACK - Disagree with the code changes/concept. Should be accompanied by an explanation. -See the [Development Guidelines](https://zcash.readthedocs.io/en/latest/rtd_pages/development_guidelines.html) documentation for preferred workflows, information on continuous integration and release versioning. \ No newline at end of file +See the [Development Guidelines](https://zcash.readthedocs.io/en/latest/rtd_pages/development_guidelines.html) documentation for preferred workflows, information on continuous integration and release versioning. + +Strings and formatting +------------------------ + +- Avoid using locale dependent functions if possible. You can use the provided + [`lint-locale-dependence.sh`](../test/lint/lint-locale-dependence.sh) + to check for accidental use of locale-dependent functions. + + - *Rationale*: Unnecessary locale dependence can cause bugs that are very tricky to isolate and fix. + + - These functions are known to be locale-dependent: + `alphasort`, `asctime`, `asprintf`, `atof`, `atoi`, `atol`, `atoll`, `atoq`, + `btowc`, `ctime`, `dprintf`, `fgetwc`, `fgetws`, `fprintf`, `fputwc`, + `fputws`, `fscanf`, `fwprintf`, `getdate`, `getwc`, `getwchar`, `isalnum`, + `isalpha`, `isblank`, `iscntrl`, `isdigit`, `isgraph`, `islower`, `isprint`, + `ispunct`, `isspace`, `isupper`, `iswalnum`, `iswalpha`, `iswblank`, + `iswcntrl`, `iswctype`, `iswdigit`, `iswgraph`, `iswlower`, `iswprint`, + `iswpunct`, `iswspace`, `iswupper`, `iswxdigit`, `isxdigit`, `mblen`, + `mbrlen`, `mbrtowc`, `mbsinit`, `mbsnrtowcs`, `mbsrtowcs`, `mbstowcs`, + `mbtowc`, `mktime`, `putwc`, `putwchar`, `scanf`, `snprintf`, `sprintf`, + `sscanf`, `stoi`, `stol`, `stoll`, `strcasecmp`, `strcasestr`, `strcoll`, + `strfmon`, `strftime`, `strncasecmp`, `strptime`, `strtod`, `strtof`, + `strtoimax`, `strtol`, `strtold`, `strtoll`, `strtoq`, `strtoul`, + `strtoull`, `strtoumax`, `strtouq`, `strxfrm`, `swprintf`, `tolower`, + `toupper`, `towctrans`, `towlower`, `towupper`, `ungetwc`, `vasprintf`, + `vdprintf`, `versionsort`, `vfprintf`, `vfscanf`, `vfwprintf`, `vprintf`, + `vscanf`, `vsnprintf`, `vsprintf`, `vsscanf`, `vswprintf`, `vwprintf`, + `wcrtomb`, `wcscasecmp`, `wcscoll`, `wcsftime`, `wcsncasecmp`, `wcsnrtombs`, + `wcsrtombs`, `wcstod`, `wcstof`, `wcstoimax`, `wcstol`, `wcstold`, + `wcstoll`, `wcstombs`, `wcstoul`, `wcstoull`, `wcstoumax`, `wcswidth`, + `wcsxfrm`, `wctob`, `wctomb`, `wctrans`, `wctype`, `wcwidth`, `wprintf` + +Scripts +-------------------------- + +### Shebang + +- Use `#!/usr/bin/env bash` instead of obsolete `#!/bin/bash`. + + - [*Rationale*](https://github.com/dylanaraps/pure-bash-bible#shebang): + + `#!/bin/bash` assumes it is always installed to /bin/ which can cause issues; + + `#!/usr/bin/env bash` searches the user's PATH to find the bash binary. + + OK: + +```bash +#!/usr/bin/env bash +``` + + Wrong: + +```bash +#!/bin/bash +``` + +Source code organization +-------------------------- + +- Use include guards to avoid the problem of double inclusion. The header file + `foo/bar.h` should use the include guard identifier `ZCASH_FOO_BAR_H`, e.g. + +```c++ +#ifndef ZCASH_FOO_BAR_H +#define ZCASH_FOO_BAR_H +... +#endif // ZCASH_FOO_BAR_H +``` + +Subtrees +---------- + +Several parts of the repository are subtrees of software maintained elsewhere. + +Some of these are maintained by active developers of Zcash or Bitcoin Core, in which case changes should probably go +directly upstream without being PRed directly against the project. They will be merged back in the next +subtree merge. + +Others are external projects without a tight relationship with our project. Changes to these should also +be sent upstream, but bugfixes may also be prudent to PR against Zcash and/or Bitcoin Core so that they can be integrated +quickly. Cosmetic changes should be purely taken upstream. + +There is a tool in `test/lint/git-subtree-check.sh` ([instructions](../test/lint#git-subtree-checksh)) to check a subtree directory for consistency with +its upstream repository. + +Current subtrees include: + +- src/leveldb + - Upstream at https://github.com/google/leveldb ; Maintained by Google, but + open important PRs to Core to avoid delay. + - **Note**: Follow the instructions in [Upgrading LevelDB](#upgrading-leveldb) when + merging upstream changes to the LevelDB subtree. + +- src/secp256k1 + - Upstream at https://github.com/bitcoin-core/secp256k1/ ; actively maintained by Core contributors. + +- src/crypto/ctaes + - Upstream at https://github.com/bitcoin-core/ctaes ; actively maintained by Core contributors. + +- src/univalue + - Upstream at https://github.com/bitcoin-core/univalue ; actively maintained by Core contributors, deviates from upstream https://github.com/jgarzik/univalue + +Scripted diffs +-------------- + +For reformatting and refactoring commits where the changes can be easily automated using a bash script, we use +scripted-diff commits. The bash script is included in the commit message and our Travis CI job checks that +the result of the script is identical to the commit. This aids reviewers since they can verify that the script +does exactly what it's supposed to do. It is also helpful for rebasing (since the same script can just be re-run +on the new master commit). + +To create a scripted-diff: + +- start the commit message with `scripted-diff:` (and then a description of the diff on the same line) +- in the commit message include the bash script between lines containing just the following text: + + - `-BEGIN VERIFY SCRIPT-` + - `-END VERIFY SCRIPT-` + +The scripted-diff is verified by the tool `test/lint/commit-script-check.sh` + +Commit `ccd074a5` is an example of a scripted-diff. diff --git a/doc/init.md b/doc/init.md deleted file mode 100644 index fba4b5411..000000000 --- a/doc/init.md +++ /dev/null @@ -1,102 +0,0 @@ -*** Warning: This document has not been updated for Zcash and may be inaccurate. *** - -Sample init scripts and service configuration for bitcoind -========================================================== - -Sample scripts and configuration files for systemd, Upstart and OpenRC -can be found in the contrib/init folder. - - contrib/init/bitcoind.service: systemd service unit configuration - contrib/init/bitcoind.openrc: OpenRC compatible SysV style init script - contrib/init/bitcoind.openrcconf: OpenRC conf.d file - contrib/init/bitcoind.conf: Upstart service configuration file - contrib/init/bitcoind.init: CentOS compatible SysV style init script - -1. Service User ---------------------------------- - -All three startup configurations assume the existence of a "bitcoin" user -and group. They must be created before attempting to use these scripts. - -2. Configuration ---------------------------------- - -At a bare minimum, bitcoind requires that the rpcpassword setting be set -when running as a daemon. If the configuration file does not exist or this -setting is not set, bitcoind will shutdown promptly after startup. - -This password does not have to be remembered or typed as it is mostly used -as a fixed token that bitcoind and client programs read from the configuration -file, however it is recommended that a strong and secure password be used -as this password is security critical to securing the wallet should the -wallet be enabled. - -If bitcoind is run with "-daemon" flag, and no rpcpassword is set, it will -print a randomly generated suitable password to stderr. You can also -generate one from the shell yourself like this: - -bash -c 'tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo' - - -For an example configuration file that describes the configuration settings, -see contrib/debian/examples/bitcoin.conf. - -3. Paths ---------------------------------- - -All three configurations assume several paths that might need to be adjusted. - -Binary: /usr/bin/bitcoind -Configuration file: /etc/bitcoin/bitcoin.conf -Data directory: /var/lib/bitcoind -PID file: /var/run/bitcoind/bitcoind.pid (OpenRC and Upstart) - /var/lib/bitcoind/bitcoind.pid (systemd) -Lock file: /var/lock/subsys/bitcoind (CentOS) - -The configuration file, PID directory (if applicable) and data directory -should all be owned by the bitcoin user and group. It is advised for security -reasons to make the configuration file and data directory only readable by the -bitcoin user and group. Access to bitcoin-cli and other bitcoind rpc clients -can then be controlled by group membership. - -4. Installing Service Configuration ------------------------------------ - -4a) systemd - -Installing this .service file consists of just copying it to -/usr/lib/systemd/system directory, followed by the command -"systemctl daemon-reload" in order to update running systemd configuration. - -To test, run "systemctl start bitcoind" and to enable for system startup run -"systemctl enable bitcoind" - -4b) OpenRC - -Rename bitcoind.openrc to bitcoind and drop it in /etc/init.d. Double -check ownership and permissions and make it executable. Test it with -"/etc/init.d/bitcoind start" and configure it to run on startup with -"rc-update add bitcoind" - -4c) Upstart (for Debian/Ubuntu based distributions) - -Drop bitcoind.conf in /etc/init. Test by running "service bitcoind start" -it will automatically start on reboot. - -NOTE: This script is incompatible with CentOS 5 and Amazon Linux 2014 as they -use old versions of Upstart and do not supply the start-stop-daemon utility. - -4d) CentOS - -Copy bitcoind.init to /etc/init.d/bitcoind. Test by running "service bitcoind start". - -Using this script, you can adjust the path and flags to the bitcoind program by -setting the BITCOIND and FLAGS environment variables in the file -/etc/sysconfig/bitcoind. You can also use the DAEMONOPTS environment variable here. - -5. Auto-respawn ------------------------------------ - -Auto respawning is currently only configured for Upstart and systemd. -Reasonable defaults have been chosen but YMMV. - diff --git a/doc/man/zcash-cli.1 b/doc/man/zcash-cli.1 index 54f22fe43..7d9d940e9 100644 --- a/doc/man/zcash-cli.1 +++ b/doc/man/zcash-cli.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13. -.TH ZCASH-CLI "1" "May 2020" "zcash-cli v3.0.0" "User Commands" +.TH ZCASH-CLI "1" "November 2020" "zcash-cli v4.1.1" "User Commands" .SH NAME -zcash-cli \- manual page for zcash-cli v3.0.0 +zcash-cli \- manual page for zcash-cli v4.1.1 .SH DESCRIPTION -Zcash RPC client version v3.0.0 +Zcash RPC client version v4.1.1 .PP In order to ensure you are adequately protecting your privacy when using Zcash, please see . @@ -84,7 +84,3 @@ This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING or . - -This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written -by Eric Young. diff --git a/doc/man/zcash-tx.1 b/doc/man/zcash-tx.1 index 48492ef19..5cb2cdb80 100644 --- a/doc/man/zcash-tx.1 +++ b/doc/man/zcash-tx.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13. -.TH ZCASH-TX "1" "May 2020" "zcash-tx v3.0.0" "User Commands" +.TH ZCASH-TX "1" "November 2020" "zcash-tx v4.1.1" "User Commands" .SH NAME -zcash-tx \- manual page for zcash-tx v3.0.0 +zcash-tx \- manual page for zcash-tx v4.1.1 .SH DESCRIPTION -Zcash zcash\-tx utility version v3.0.0 +Zcash zcash\-tx utility version v4.1.1 .SS "Usage:" .TP zcash\-tx [options] [commands] @@ -98,7 +98,3 @@ This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING or . - -This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written -by Eric Young. diff --git a/doc/man/zcashd.1 b/doc/man/zcashd.1 index 16e7db057..5564ce1fd 100644 --- a/doc/man/zcashd.1 +++ b/doc/man/zcashd.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13. -.TH ZCASHD "1" "May 2020" "zcashd v3.0.0" "User Commands" +.TH ZCASHD "1" "November 2020" "zcashd v4.1.1" "User Commands" .SH NAME -zcashd \- manual page for zcashd v3.0.0 +zcashd \- manual page for zcashd v4.1.1 .SH DESCRIPTION -Zcash Daemon version v3.0.0 +Zcash Daemon version v4.1.1 .PP In order to ensure you are adequately protecting your privacy when using Zcash, please see . @@ -51,14 +51,29 @@ Run in the background as a daemon and accept commands .IP Specify data directory .HP -\fB\-exportdir=\fR +\fB\-paramsdir=\fR .IP -Specify directory to be used when exporting data +Specify Zcash network parameters directory .HP \fB\-dbcache=\fR .IP Set database cache size in megabytes (4 to 16384, default: 450) .HP +\fB\-debuglogfile=\fR +.IP +Specify location of debug log file: this can be an absolute path or a +path relative to the data directory (default: debug.log) +.HP +\fB\-exportdir=\fR +.IP +Specify directory to be used when exporting data +.HP +\fB\-ibdskiptxverification\fR +.IP +Skip transaction verification during initial block download up to the +last checkpoint height. Incompatible with flags that disable +checkpoints. (default = 0) +.HP \fB\-loadblock=\fR .IP Imports blocks from external blk000??.dat file on startup @@ -69,7 +84,7 @@ Keep at most unconnectable transactions in memory (default: 100) .HP \fB\-par=\fR .IP -Set the number of script verification threads (\fB\-16\fR to 16, 0 = auto, <0 = +Set the number of script verification threads (\fB\-4\fR to 16, 0 = auto, <0 = leave that many cores free, default: 0) .HP \fB\-pid=\fR @@ -301,7 +316,8 @@ Upgrade wallet to latest format on startup .HP \fB\-wallet=\fR .IP -Specify wallet file (within data directory) (default: wallet.dat) +Specify wallet file absolute path or a path relative to the data +directory (default: wallet.dat) .HP \fB\-walletbroadcast\fR .IP @@ -344,9 +360,9 @@ Output debugging information (default: 0, supplying is optional). If is not supplied or if = 1, output all debugging information. can be: addrman, alert, bench, coindb, db, estimatefee, http, libevent, lock, mempool, net, -partitioncheck, pow, proxy, prune, rand, reindex, rpc, selectcoins, tor, -zmq, zrpc, zrpcunsafe (implies zrpc). For multiple specific categories -use \fB\-debug=\fR multiple times. +partitioncheck, pow, proxy, prune, rand, receiveunsafe, reindex, rpc, +selectcoins, tor, zmq, zrpc, zrpcunsafe (implies zrpc). For multiple +specific categories use \fB\-debug=\fR multiple times. .HP \fB\-experimentalfeatures\fR .IP @@ -509,7 +525,3 @@ This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING or . - -This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written -by Eric Young. diff --git a/doc/release-notes/release-notes-3.0.0.md b/doc/release-notes/release-notes-3.0.0.md index 8cda60ba9..479636a56 100644 --- a/doc/release-notes/release-notes-3.0.0.md +++ b/doc/release-notes/release-notes-3.0.0.md @@ -27,6 +27,7 @@ that can be generated locally with the `z_getnewaddress` RPC command. Restart your node, and block templates produced by the `getblocktemplate` RPC command will now have coinbase transactions that mine directly into this shielded address. + Changelog ========= diff --git a/doc/release-notes/release-notes-3.1.0-rc1.md b/doc/release-notes/release-notes-3.1.0-rc1.md new file mode 100644 index 000000000..c994b5971 --- /dev/null +++ b/doc/release-notes/release-notes-3.1.0-rc1.md @@ -0,0 +1,243 @@ +Notable changes +=============== + +Network Upgrade 4: Canopy +-------------------------- + +The code preparations for the Canopy network upgrade are finished and included in this release. The following ZIPs are being deployed: + +- [ZIP 207: Funding Streams](https://zips.z.cash/zip-0207) +- [ZIP 211: Disabling Addition of New Value to the Sprout Value Pool](https://zips.z.cash/zip-0211) +- [ZIP 212: Allow Recipient to Derive Sapling Ephemeral Secret from Note Plaintext](https://zips.z.cash/zip-0212) +- [ZIP 214: Consensus rules for a Zcash Development Fund](https://zips.z.cash/zip-0214) +- [ZIP 215: Explicitly Defining and Modifying Ed25519 Validation Rules](https://zips.z.cash/zip-0215) + +Canopy will activate on testnet at height TODO, and can also be activated at a specific height in regtest mode by setting the config option `-nuparams=0xe9ff75a6:HEIGHT`. + +Canopy will activate on mainnet at height 1046400. + +See [ZIP 251](https://zips.z.cash/zip-0251) for additional information about the deployment process for Canopy. + +Flush witness data to disk only when it's consistent +----------------------------------------------------- +This fix prevents the wallet database from getting into an inconsistent state. By flushing witness data to disk from the wallet thread instead of the main thread, we ensure that the on-disk block height is always the same as the witness data height. Previously, the database occasionally got into a state where the latest block height was one ahead of the witness data. This then triggered an assertion failure in `CWallet::IncrementNoteWitnesses()` upon restarting after a zcashd shutdown. + +Note that this code change will not automatically repair a data directory that has been affected by this problem; that requires starting zcashd with the `-rescan` or `-reindex` options. + +New DNS seeders +---------------- +DNS seeders hosted at "zfnd.org" and "yolo.money" have been added to the list in `chainparams.cpp`. They're running [CoreDNS](https://coredns.io) with a [Zcash crawler plugin](https://github.com/ZcashFoundation/dnsseeder), the result of a Zcash Foundation in-house development effort to replace `zcash-seeder` with something memory-safe and easier to maintain. + +These are validly operated seeders per the [existing policy](https://zcash.readthedocs.io/en/latest/rtd_pages/dnsseed_policy.html). For general questions related to either seeder, contact george@zfnd.org or mention @gtank in the Zcash Foundation's Discord. For bug reports, open an issue on the [dnsseeder](https://github.com/ZcashFoundation/dnsseeder) repo. + +Changed command-line options +----------------------------- +- `-debuglogfile=` can be used to specify an alternative debug logging file. + +RPC methods +------------ +- `joinSplitPubKey` and `joinSplitSig` have been added to verbose transaction outputs. This enables the transaction's binary form to be fully reconstructed from the RPC output. +- The output of `getblockchaininfo` now includes an `estimatedheight` parameter. This can be shown in UIs as an indication of the current chain height while `zcashd` is syncing, but should not be relied upon when creating transactions. + +Metrics screen +----------------------- +- A progress bar is now visible when in Initial Block Download mode, showing both the prefetched headers and validated blocks. It is only printed for TTY output. Additionally, the "not mining" message is no longer shown on mainnet, as the built-in CPU miner is not effective at the current network difficulty. +- The number of block headers prefetched during Initial Block Download is now displayed alongside the number of validated blocks. With current compile-time defaults, a Zcash node prefetches up to 160 block headers per request without a limit on how far it can prefetch, but only up to 16 full blocks at a time. + +Changelog +========= + +Alfredo Garcia (28): + add estimatedheight to getblockchaininfo + add documentation and command line parsing to afl scripts + get fuzzing options from directory + add bool argument to get balance in satoshis to rpc getreceivedbyaddress + add documentation to flag + change argument name + add boolean inZat to getreceivedbyaccount + add boolean inZat to getbalance + add boolean inZat to z_getbalance + add amountZat field to listreceivedbyaddress and listreceivedbyaccount + add amountZat field to listtransactions, gettransaction and listsinceblock + add amountZat field to listunspent + add amountZat field to z_listreceivedbyaddress + replace with AssertionError assert_equal in receivedby.py + Fix casting in wallet.py + simplify inzat balances logic + Fix casting in listtransactions.py + add MINOR_CURRENCY_UNIT + remove additional not needed casts from py tests + change name of harden option + fix test cases + fix sort of options + remove not needed comments from wallet.py + update docs + add new parameters to rpc client and fix some bugs + initialize size_t + fix/improve docs + add log aporximation to metrics solution rates + +Anthony Towns (1): + test: Add tests for `-debuglogfile` with subdirs + +Daira Hopwood (15): + Rename NU4 to Canopy in constant and function names. + Rename golden/nu4.tar.gz to canopy.tar.gz. + Missing NU4->Canopy renames. + Remove unused import in qa/rpc-tests/listtransactions.py + Remove an unused CCriticalSection. + Add GetActiveFundingStreams function. + Tests for changes to getblocksubsidy. + Change getblocksubsidy RPC to take into account funding streams. + Use ValueFromAmount instead of double arithmetic, and improve variable names. + Cosmetic spacing changes. + Apply suggestions from code review + Change the format of `getblocksubsidy` output to use an array of funding stream objects. + Clean up some iterator usage. + Remove an unnecessary iterator increment. + Another cleanup. + +Danny Willems (3): + librustzcash: make the header C compatible + Use assert.h instead of define manually static_assert + Use preprocessor for ENTRY_SERIALIZED_LENGTH + +Eirik Ogilvie-Wigley (2): + Resolve decimal vs float issues + Various improvements + +George Tankersley (1): + Add ZF and gtank's DNS seeders + +Jack Grigg (18): + Use the cached consensusBranchId in DisconnectBlock + qa: Smoke test driver + qa: Run Zcash node for smoke tests + qa: Simple smoke tests + qa: Transaction chain smoke test + qa: Use slick-bitcoinrpc for smoke tests + qa: Don't allow smoke tests with mainnet wallet.dat + qa: Improve reliability of smoke tests + qa: Improve reliability of smoke test cleanup + metrics: Fix indents + metrics: Draw IBD progress bar showing headers and blocks + metrics: Don't show "not mining" text for mainnet + qa: Add --use-faucet flag to smoke tests + qa: Remove unused timeout configuration from wait_for_balance + qa: Add --automate flag to smoke tests + metrics: Switch to ANSI colour codes for progress bar + metrics: Only print IBD progress bar on TTY + Implement zip-207 and zip-214. + +Kris Nuttycombe (29): + Identify `-fundingstream` parameter as being regtest-only + Use for..: rather than BOOST_FOREACH + Trivial error message fix. + Minor fixes for ZIP-207 review comments. + Trivial copyright fix. + Replace BOOST_FOREACH with for..: + Qualified imports of std:: types + Capitalization fixes from code review + Minor naming change FundingStreamShare -> FundingStreamElement + Record-constructor syntax for funding stream initialization. + Update HalvingHeight documentation. + Fix pyflakes. + Fix funding stream end-height-exclusion bugs + Add `RegtestDeactivateCanopy` calls to restore shared regtest params. + Move test-only code into test sources. + Trivial comment correction. + Minor help message correction. + Pass by const reference where possible. + Use uint32_t for vFundingStreams indexing. + Fix incorrect subtraction of Halving(blossomActivationHeight) from halvingIndex + Fix ordering of transparent outputs such that miner reward is vout[0] + Remove assertion that was breaking regtest in the case that blossom activates after the halving. + Use for..in rather than an indexed loop. + Make evident the relationship between chainparams and key IO. + Rename KeyInfo -> KeyConstants and move out of Consensus namespace. + Fix typo in constant. + Fix assertion check in GetBlockSubsidy + Apply suggestions from code review + Trivial whitespace fix. + +Larry Ruane (7): + add python test to reproduce bug 4301 + flush witness cache correctly + review, cleanup: eliminate uninitialized variable + self.sync_all(), not time.sleep(4) + fix pyflakes CI errors + undo flushing witness data on shutdown + sync before stopping nodes + +Rod Vagg (1): + Add joinSplitPubKey and joinSplitSig to RPC + +Sean Bowe (23): + Add implementations of PRF_expand calls that obtain esk and rcm. + Remove bare SaplingNote constructor. + Add a getter method to obtain rcm from a Sapling note plaintext. + Add support for receiving v2 Sapling note plaintexts. + Change transaction builder and miner to use v2 Sapling note plaintexts after Canopy activates. + Make ed25519-zebra available via librustzcash. + Change to version of ed25519-zebra crate which is compliant with ZIP 215. + Enforce ZIP 215 rules upon activation of Canopy. + Add test that a weird signature successfully validates. + Remove bincode crate. + Remove unused curve25519-dalek dev-dependency. + Minor adjustments to librustzcash and tests. + Redirect git checkouts of ebfull/ed25519-zebra through our vendored sources in offline mode. + Require that shielded coinbase output note plaintexts are version 2 if Canopy is active. + Make transaction builder take the next block height into account for use of v2 note plaintexts. + Turn return values for libsodium-like API into constants for clarity. + Add more exhaustive tests for ZIP 215 compatibility. + Cargo fmt + Remove unused imports from remove_sprout_shielding RPC test. + Migrate ZIP 215 test vectors to gtest suite. + Change LIBSODIUM_ERROR to -1. + Hash "Zcash" to align tests with ZIP 215 test vectors. + Remove outdated comment. + +Solar Designer (2): + Fix typos in ProcessMessage() "headers" + During initial blocks download, also report the number of headers + +Taylor Hornby (3): + Fix undefined behavior in gtest tests + Add missing header for std::invalid_argument + Fix bug in CScheduler + +Wladimir J. van der Laan (3): + Add `-debuglogfile` option + test: Add test for `-debuglogfile` + doc: Update release notes for `-debuglogfile` + +Marshall Gaucher (1): + Add helpers for tapping and donating to the testnet faucet + +therealyingtong (22): + Add RPC tests for post-Heartwood rollback + Reject v1 plaintexts after grace period + Check epk vs esk whenever caller has esk + Refactor SaplingNotePlaintext::decrypt + Add gtests for v2 plaintexts + Add contextual check to main.cpp + Add gtests + Add checks to z_ methods in rpcwallet + Add RPC tests + Replace leadByte in SaplingNote with is_zip_212 + Throw error in plaintext deserialization + Pass pindex to AddToWalletIfInvolvingMe() + Remove plaintext check from AddSaplingSpend + Remove plaintext check from GetFilteredNotes + Refactor bool is_zip_212 to enum Zip212Enabled + Minor changes + Remove old SaplingNote() constructor + Pass nHeight instead of pindex to AddToWalletIfInvolvingMe() + Directly call RegtestActivate* in gtests + Update release notes for v3.1.0 + make-release.py: Versioning changes for 3.1.0-rc1. + make-release.py: Updated manpages for 3.1.0-rc1. + +ying tong (1): + Apply suggestions from code review + diff --git a/doc/release-notes/release-notes-3.1.0-rc2.md b/doc/release-notes/release-notes-3.1.0-rc2.md new file mode 100644 index 000000000..e3ec7680a --- /dev/null +++ b/doc/release-notes/release-notes-3.1.0-rc2.md @@ -0,0 +1,250 @@ +Notable changes +=============== + +Network Upgrade 4: Canopy +-------------------------- + +The code preparations for the Canopy network upgrade are finished and included in this release. The following ZIPs are being deployed: + +- [ZIP 207: Funding Streams](https://zips.z.cash/zip-0207) +- [ZIP 211: Disabling Addition of New Value to the Sprout Value Pool](https://zips.z.cash/zip-0211) +- [ZIP 212: Allow Recipient to Derive Sapling Ephemeral Secret from Note Plaintext](https://zips.z.cash/zip-0212) +- [ZIP 214: Consensus rules for a Zcash Development Fund](https://zips.z.cash/zip-0214) +- [ZIP 215: Explicitly Defining and Modifying Ed25519 Validation Rules](https://zips.z.cash/zip-0215) + +Canopy will activate on testnet at height TODO, and can also be activated at a specific height in regtest mode by setting the config option `-nuparams=0xe9ff75a6:HEIGHT`. Note that v3.1.0-rc2 does not enable Canopy support on the testnet. + +Canopy will activate on mainnet at height 1046400. + +See [ZIP 251](https://zips.z.cash/zip-0251) for additional information about the deployment process for Canopy. + +Flush witness data to disk only when it's consistent +----------------------------------------------------- +This fix prevents the wallet database from getting into an inconsistent state. By flushing witness data to disk from the wallet thread instead of the main thread, we ensure that the on-disk block height is always the same as the witness data height. Previously, the database occasionally got into a state where the latest block height was one ahead of the witness data. This then triggered an assertion failure in `CWallet::IncrementNoteWitnesses()` upon restarting after a zcashd shutdown. + +Note that this code change will not automatically repair a data directory that has been affected by this problem; that requires starting zcashd with the `-rescan` or `-reindex` options. + +New DNS seeders +---------------- +DNS seeders hosted at "zfnd.org" and "yolo.money" have been added to the list in `chainparams.cpp`. They're running [CoreDNS](https://coredns.io) with a [Zcash crawler plugin](https://github.com/ZcashFoundation/dnsseeder), the result of a Zcash Foundation in-house development effort to replace `zcash-seeder` with something memory-safe and easier to maintain. + +These are validly operated seeders per the [existing policy](https://zcash.readthedocs.io/en/latest/rtd_pages/dnsseed_policy.html). For general questions related to either seeder, contact george@zfnd.org or mention @gtank in the Zcash Foundation's Discord. For bug reports, open an issue on the [dnsseeder](https://github.com/ZcashFoundation/dnsseeder) repo. + +Changed command-line options +----------------------------- +- `-debuglogfile=` can be used to specify an alternative debug logging file. + +RPC methods +------------ +- `joinSplitPubKey` and `joinSplitSig` have been added to verbose transaction outputs. This enables the transaction's binary form to be fully reconstructed from the RPC output. +- The output of `getblockchaininfo` now includes an `estimatedheight` parameter. This can be shown in UIs as an indication of the current chain height while `zcashd` is syncing, but should not be relied upon when creating transactions. + +Metrics screen +----------------------- +- A progress bar is now visible when in Initial Block Download mode, showing both the prefetched headers and validated blocks. It is only printed for TTY output. Additionally, the "not mining" message is no longer shown on mainnet, as the built-in CPU miner is not effective at the current network difficulty. +- The number of block headers prefetched during Initial Block Download is now displayed alongside the number of validated blocks. With current compile-time defaults, a Zcash node prefetches up to 160 block headers per request without a limit on how far it can prefetch, but only up to 16 full blocks at a time. + +Changelog +========= + +Alfredo Garcia (28): + add estimatedheight to getblockchaininfo + add documentation and command line parsing to afl scripts + get fuzzing options from directory + add bool argument to get balance in satoshis to rpc getreceivedbyaddress + add documentation to flag + change argument name + add boolean inZat to getreceivedbyaccount + add boolean inZat to getbalance + add boolean inZat to z_getbalance + add amountZat field to listreceivedbyaddress and listreceivedbyaccount + add amountZat field to listtransactions, gettransaction and listsinceblock + add amountZat field to listunspent + add amountZat field to z_listreceivedbyaddress + replace with AssertionError assert_equal in receivedby.py + Fix casting in wallet.py + simplify inzat balances logic + Fix casting in listtransactions.py + add MINOR_CURRENCY_UNIT + remove additional not needed casts from py tests + change name of harden option + fix test cases + fix sort of options + remove not needed comments from wallet.py + update docs + add new parameters to rpc client and fix some bugs + initialize size_t + fix/improve docs + add log aporximation to metrics solution rates + +Anthony Towns (1): + test: Add tests for `-debuglogfile` with subdirs + +Daira Hopwood (17): + Rename NU4 to Canopy in constant and function names. + Rename golden/nu4.tar.gz to canopy.tar.gz. + Missing NU4->Canopy renames. + Remove unused import in qa/rpc-tests/listtransactions.py + Remove an unused CCriticalSection. + Add GetActiveFundingStreams function. + Tests for changes to getblocksubsidy. + Change getblocksubsidy RPC to take into account funding streams. + Use ValueFromAmount instead of double arithmetic, and improve variable names. + Cosmetic spacing changes. + Apply suggestions from code review + Change the format of `getblocksubsidy` output to use an array of funding stream objects. + Clean up some iterator usage. + Remove an unnecessary iterator increment. + Another cleanup. + Add key_constants.h to src/Makefile.am. + Fix an unintended consensus change in decryption of coinbase outputs. + +Danny Willems (3): + librustzcash: make the header C compatible + Use assert.h instead of define manually static_assert + Use preprocessor for ENTRY_SERIALIZED_LENGTH + +Eirik Ogilvie-Wigley (2): + Resolve decimal vs float issues + Various improvements + +George Tankersley (1): + Add ZF and gtank's DNS seeders + +Jack Grigg (18): + Use the cached consensusBranchId in DisconnectBlock + qa: Smoke test driver + qa: Run Zcash node for smoke tests + qa: Simple smoke tests + qa: Transaction chain smoke test + qa: Use slick-bitcoinrpc for smoke tests + qa: Don't allow smoke tests with mainnet wallet.dat + qa: Improve reliability of smoke tests + qa: Improve reliability of smoke test cleanup + metrics: Fix indents + metrics: Draw IBD progress bar showing headers and blocks + metrics: Don't show "not mining" text for mainnet + qa: Add --use-faucet flag to smoke tests + qa: Remove unused timeout configuration from wait_for_balance + qa: Add --automate flag to smoke tests + metrics: Switch to ANSI colour codes for progress bar + metrics: Only print IBD progress bar on TTY + Implement zip-207 and zip-214. + +Kris Nuttycombe (30): + Identify `-fundingstream` parameter as being regtest-only + Use for..: rather than BOOST_FOREACH + Trivial error message fix. + Minor fixes for ZIP-207 review comments. + Trivial copyright fix. + Replace BOOST_FOREACH with for..: + Qualified imports of std:: types + Capitalization fixes from code review + Minor naming change FundingStreamShare -> FundingStreamElement + Record-constructor syntax for funding stream initialization. + Update HalvingHeight documentation. + Fix pyflakes. + Fix funding stream end-height-exclusion bugs + Add `RegtestDeactivateCanopy` calls to restore shared regtest params. + Move test-only code into test sources. + Trivial comment correction. + Minor help message correction. + Pass by const reference where possible. + Use uint32_t for vFundingStreams indexing. + Fix incorrect subtraction of Halving(blossomActivationHeight) from halvingIndex + Fix ordering of transparent outputs such that miner reward is vout[0] + Use ed25519-zebra from crates.io. + Remove assertion that was breaking regtest in the case that blossom activates after the halving. + Use for..in rather than an indexed loop. + Make evident the relationship between chainparams and key IO. + Rename KeyInfo -> KeyConstants and move out of Consensus namespace. + Fix typo in constant. + Fix assertion check in GetBlockSubsidy + Apply suggestions from code review + Trivial whitespace fix. + +Larry Ruane (7): + add python test to reproduce bug 4301 + flush witness cache correctly + review, cleanup: eliminate uninitialized variable + self.sync_all(), not time.sleep(4) + fix pyflakes CI errors + undo flushing witness data on shutdown + sync before stopping nodes + +Rod Vagg (1): + Add joinSplitPubKey and joinSplitSig to RPC + +Sean Bowe (23): + Add implementations of PRF_expand calls that obtain esk and rcm. + Remove bare SaplingNote constructor. + Add a getter method to obtain rcm from a Sapling note plaintext. + Add support for receiving v2 Sapling note plaintexts. + Change transaction builder and miner to use v2 Sapling note plaintexts after Canopy activates. + Make ed25519-zebra available via librustzcash. + Change to version of ed25519-zebra crate which is compliant with ZIP 215. + Enforce ZIP 215 rules upon activation of Canopy. + Add test that a weird signature successfully validates. + Remove bincode crate. + Remove unused curve25519-dalek dev-dependency. + Minor adjustments to librustzcash and tests. + Redirect git checkouts of ebfull/ed25519-zebra through our vendored sources in offline mode. + Require that shielded coinbase output note plaintexts are version 2 if Canopy is active. + Make transaction builder take the next block height into account for use of v2 note plaintexts. + Turn return values for libsodium-like API into constants for clarity. + Add more exhaustive tests for ZIP 215 compatibility. + Cargo fmt + Remove unused imports from remove_sprout_shielding RPC test. + Migrate ZIP 215 test vectors to gtest suite. + Change LIBSODIUM_ERROR to -1. + Hash "Zcash" to align tests with ZIP 215 test vectors. + Remove outdated comment. + +Solar Designer (2): + Fix typos in ProcessMessage() "headers" + During initial blocks download, also report the number of headers + +Taylor Hornby (3): + Fix undefined behavior in gtest tests + Add missing header for std::invalid_argument + Fix bug in CScheduler + +Wladimir J. van der Laan (3): + Add `-debuglogfile` option + test: Add test for `-debuglogfile` + doc: Update release notes for `-debuglogfile` + +Marshall Gaucher (1): + Add helpers for tapping and donating to the testnet faucet + +therealyingtong (26): + Add RPC tests for post-Heartwood rollback + Reject v1 plaintexts after grace period + Check epk vs esk whenever caller has esk + Refactor SaplingNotePlaintext::decrypt + Add gtests for v2 plaintexts + Add contextual check to main.cpp + Add gtests + Add checks to z_ methods in rpcwallet + Add RPC tests + Replace leadByte in SaplingNote with is_zip_212 + Throw error in plaintext deserialization + Pass pindex to AddToWalletIfInvolvingMe() + Remove plaintext check from AddSaplingSpend + Remove plaintext check from GetFilteredNotes + Refactor bool is_zip_212 to enum Zip212Enabled + Minor changes + Remove old SaplingNote() constructor + Pass nHeight instead of pindex to AddToWalletIfInvolvingMe() + Directly call RegtestActivate* in gtests + Update release notes for v3.1.0 + make-release.py: Versioning changes for 3.1.0-rc1. + make-release.py: Updated manpages for 3.1.0-rc1. + make-release.py: Updated release notes and changelog for 3.1.0-rc1. + Undo manual DEPRECATION_HEIGHT + make-release.py: Versioning changes for 3.1.0-rc2. + make-release.py: Updated manpages for 3.1.0-rc2. + +ying tong (1): + Apply suggestions from code review + diff --git a/doc/release-notes/release-notes-3.1.0.md b/doc/release-notes/release-notes-3.1.0.md new file mode 100644 index 000000000..b96995c95 --- /dev/null +++ b/doc/release-notes/release-notes-3.1.0.md @@ -0,0 +1,274 @@ +Notable changes +=============== + +Network Upgrade 4: Canopy +-------------------------- + +The code preparations for the Canopy network upgrade are finished and included in this release. The following ZIPs are being deployed: + +- [ZIP 207: Funding Streams](https://zips.z.cash/zip-0207) +- [ZIP 211: Disabling Addition of New Value to the Sprout Value Pool](https://zips.z.cash/zip-0211) +- [ZIP 212: Allow Recipient to Derive Sapling Ephemeral Secret from Note Plaintext](https://zips.z.cash/zip-0212) +- [ZIP 214: Consensus rules for a Zcash Development Fund](https://zips.z.cash/zip-0214) +- [ZIP 215: Explicitly Defining and Modifying Ed25519 Validation Rules](https://zips.z.cash/zip-0215) + +Canopy will activate on testnet at height 1028500, and can also be activated at a specific height in regtest mode by setting the config option `-nuparams=0xe9ff75a6:HEIGHT`. Note that v3.1.0 enables Canopy support on the testnet. + +Canopy will activate on mainnet at height 1046400. + +See [ZIP 251](https://zips.z.cash/zip-0251) for additional information about the deployment process for Canopy. + +Debian 8 "Jessie" will no longer be supported after v3.1.0, due to its [end-of-life](https://www.debian.org/News/2020/20200709#:~:text=The%20Debian%20Long%20Term%20Support,security%20updates%20for%20Debian%208) on June 30th, 2020. This will allow us to direct more resources to supporting Debian 10 Buster, other Linux distributions, and other platforms such as Windows and macOS. + +Flush witness data to disk only when it's consistent +----------------------------------------------------- +This fix prevents the wallet database from getting into an inconsistent state. By flushing witness data to disk from the wallet thread instead of the main thread, we ensure that the on-disk block height is always the same as the witness data height. Previously, the database occasionally got into a state where the latest block height was one ahead of the witness data. This then triggered an assertion failure in `CWallet::IncrementNoteWitnesses()` upon restarting after a zcashd shutdown. + +Note that this code change will not automatically repair a data directory that has been affected by this problem; that requires starting zcashd with the `-rescan` or `-reindex` options. + +New DNS seeders +---------------- +DNS seeders hosted at "zfnd.org" and "yolo.money" have been added to the list in `chainparams.cpp`. They're running [CoreDNS](https://coredns.io) with a [Zcash crawler plugin](https://github.com/ZcashFoundation/dnsseeder), the result of a Zcash Foundation in-house development effort to replace `zcash-seeder` with something memory-safe and easier to maintain. + +These are validly operated seeders per the [existing policy](https://zcash.readthedocs.io/en/latest/rtd_pages/dnsseed_policy.html). For general questions related to either seeder, contact george@zfnd.org or mention @gtank in the Zcash Foundation's Discord. For bug reports, open an issue on the [dnsseeder](https://github.com/ZcashFoundation/dnsseeder) repo. + +Changed command-line options +----------------------------- +- `-debuglogfile=` can be used to specify an alternative debug logging file. + +RPC methods +------------ +- `joinSplitPubKey` and `joinSplitSig` have been added to verbose transaction outputs. This enables the transaction's binary form to be fully reconstructed from the RPC output. +- The output of `getblockchaininfo` now includes an `estimatedheight` parameter. This can be shown in UIs as an indication of the current chain height while `zcashd` is syncing, but should not be relied upon when creating transactions. + +Metrics screen +----------------------- +- A progress bar is now visible when in Initial Block Download mode, showing both the prefetched headers and validated blocks. It is only printed for TTY output. Additionally, the "not mining" message is no longer shown on mainnet, as the built-in CPU miner is not effective at the current network difficulty. +- The number of block headers prefetched during Initial Block Download is now displayed alongside the number of validated blocks. With current compile-time defaults, a Zcash node prefetches up to 160 block headers per request without a limit on how far it can prefetch, but only up to 16 full blocks at a time. + +Changelog +========= + +Alfredo Garcia (28): + add estimatedheight to getblockchaininfo + add documentation and command line parsing to afl scripts + get fuzzing options from directory + add bool argument to get balance in satoshis to rpc getreceivedbyaddress + add documentation to flag + change argument name + add boolean inZat to getreceivedbyaccount + add boolean inZat to getbalance + add boolean inZat to z_getbalance + add amountZat field to listreceivedbyaddress and listreceivedbyaccount + add amountZat field to listtransactions, gettransaction and listsinceblock + add amountZat field to listunspent + add amountZat field to z_listreceivedbyaddress + replace with AssertionError assert_equal in receivedby.py + Fix casting in wallet.py + simplify inzat balances logic + Fix casting in listtransactions.py + add MINOR_CURRENCY_UNIT + remove additional not needed casts from py tests + change name of harden option + fix test cases + fix sort of options + remove not needed comments from wallet.py + update docs + add new parameters to rpc client and fix some bugs + initialize size_t + fix/improve docs + add log aporximation to metrics solution rates + +Anthony Towns (1): + test: Add tests for `-debuglogfile` with subdirs + +Daira Hopwood (24): + Rename NU4 to Canopy in constant and function names. + Rename golden/nu4.tar.gz to canopy.tar.gz. + Missing NU4->Canopy renames. + Remove unused import in qa/rpc-tests/listtransactions.py + Remove an unused CCriticalSection. + Add GetActiveFundingStreams function. + Tests for changes to getblocksubsidy. + Change getblocksubsidy RPC to take into account funding streams. + Use ValueFromAmount instead of double arithmetic, and improve variable names. + Cosmetic spacing changes. + Apply suggestions from code review + Change the format of `getblocksubsidy` output to use an array of funding stream objects. + Clean up some iterator usage. + Remove an unnecessary iterator increment. + Another cleanup. + Add key_constants.h to src/Makefile.am. + Fix an unintended consensus change in decryption of coinbase outputs. + More iterator cleanups. + src/metrics.cpp: cosmetic whitespace changes. + Metrics screen: display hash rates using SI prefixes rather than as powers of 2. + Add unit tests for DisplayDuration, DisplaySize, and DisplayHashRate. + Fix the formatting of the 3.0.0 release notes. + Fix --disable-mining build regression. closes #4634 + Allow Equihash validation tests to be compiled with --disable-mining. + +Danny Willems (3): + librustzcash: make the header C compatible + Use assert.h instead of define manually static_assert + Use preprocessor for ENTRY_SERIALIZED_LENGTH + +Eirik Ogilvie-Wigley (2): + Resolve decimal vs float issues + Various improvements + +George Tankersley (1): + Add ZF and gtank's DNS seeders + +Jack Grigg (21): + Use the cached consensusBranchId in DisconnectBlock + qa: Smoke test driver + qa: Run Zcash node for smoke tests + qa: Simple smoke tests + qa: Transaction chain smoke test + qa: Use slick-bitcoinrpc for smoke tests + qa: Don't allow smoke tests with mainnet wallet.dat + qa: Improve reliability of smoke tests + qa: Improve reliability of smoke test cleanup + metrics: Fix indents + metrics: Draw IBD progress bar showing headers and blocks + metrics: Don't show "not mining" text for mainnet + qa: Add --use-faucet flag to smoke tests + qa: Remove unused timeout configuration from wait_for_balance + qa: Add --automate flag to smoke tests + metrics: Switch to ANSI colour codes for progress bar + metrics: Only print IBD progress bar on TTY + Implement zip-207 and zip-214. + Use Rust Equihash validator unconditionally + Remove C++ Equihash validator + Revert "Pass the block height through to CheckEquihashSolution()" + +Kris Nuttycombe (31): + Identify `-fundingstream` parameter as being regtest-only + Use for..: rather than BOOST_FOREACH + Trivial error message fix. + Minor fixes for ZIP-207 review comments. + Trivial copyright fix. + Replace BOOST_FOREACH with for..: + Qualified imports of std:: types + Capitalization fixes from code review + Minor naming change FundingStreamShare -> FundingStreamElement + Record-constructor syntax for funding stream initialization. + Update HalvingHeight documentation. + Fix pyflakes. + Fix funding stream end-height-exclusion bugs + Add `RegtestDeactivateCanopy` calls to restore shared regtest params. + Move test-only code into test sources. + Trivial comment correction. + Minor help message correction. + Pass by const reference where possible. + Use uint32_t for vFundingStreams indexing. + Fix incorrect subtraction of Halving(blossomActivationHeight) from halvingIndex + Fix ordering of transparent outputs such that miner reward is vout[0] + Use ed25519-zebra from crates.io. + Remove assertion that was breaking regtest in the case that blossom activates after the halving. + Use for..in rather than an indexed loop. + Make evident the relationship between chainparams and key IO. + Rename KeyInfo -> KeyConstants and move out of Consensus namespace. + Fix typo in constant. + Fix assertion check in GetBlockSubsidy + Apply suggestions from code review + Trivial whitespace fix. + Zero-initialize HistoryNode values. + +Larry Ruane (7): + add python test to reproduce bug 4301 + flush witness cache correctly + review, cleanup: eliminate uninitialized variable + self.sync_all(), not time.sleep(4) + fix pyflakes CI errors + undo flushing witness data on shutdown + sync before stopping nodes + +Rod Vagg (1): + Add joinSplitPubKey and joinSplitSig to RPC + +Sean Bowe (23): + Add implementations of PRF_expand calls that obtain esk and rcm. + Remove bare SaplingNote constructor. + Add a getter method to obtain rcm from a Sapling note plaintext. + Add support for receiving v2 Sapling note plaintexts. + Change transaction builder and miner to use v2 Sapling note plaintexts after Canopy activates. + Make ed25519-zebra available via librustzcash. + Change to version of ed25519-zebra crate which is compliant with ZIP 215. + Enforce ZIP 215 rules upon activation of Canopy. + Add test that a weird signature successfully validates. + Remove bincode crate. + Remove unused curve25519-dalek dev-dependency. + Minor adjustments to librustzcash and tests. + Redirect git checkouts of ebfull/ed25519-zebra through our vendored sources in offline mode. + Require that shielded coinbase output note plaintexts are version 2 if Canopy is active. + Make transaction builder take the next block height into account for use of v2 note plaintexts. + Turn return values for libsodium-like API into constants for clarity. + Add more exhaustive tests for ZIP 215 compatibility. + Cargo fmt + Remove unused imports from remove_sprout_shielding RPC test. + Migrate ZIP 215 test vectors to gtest suite. + Change LIBSODIUM_ERROR to -1. + Hash "Zcash" to align tests with ZIP 215 test vectors. + Remove outdated comment. + +Solar Designer (2): + Fix typos in ProcessMessage() "headers" + During initial blocks download, also report the number of headers + +Taylor Hornby (3): + Fix undefined behavior in gtest tests + Add missing header for std::invalid_argument + Fix bug in CScheduler + +Wladimir J. van der Laan (3): + Add `-debuglogfile` option + test: Add test for `-debuglogfile` + doc: Update release notes for `-debuglogfile` + +ewillbefull@gmail.com (1): + Add dev fund addresses for testnet NU4 activation. + +Marshall Gaucher (1): + Add helpers for tapping and donating to the testnet faucet + +therealyingtong (35): + Add RPC tests for post-Heartwood rollback + Reject v1 plaintexts after grace period + Check epk vs esk whenever caller has esk + Refactor SaplingNotePlaintext::decrypt + Add gtests for v2 plaintexts + Add contextual check to main.cpp + Add gtests + Add checks to z_ methods in rpcwallet + Add RPC tests + Replace leadByte in SaplingNote with is_zip_212 + Throw error in plaintext deserialization + Pass pindex to AddToWalletIfInvolvingMe() + Remove plaintext check from AddSaplingSpend + Remove plaintext check from GetFilteredNotes + Refactor bool is_zip_212 to enum Zip212Enabled + Minor changes + Remove old SaplingNote() constructor + Pass nHeight instead of pindex to AddToWalletIfInvolvingMe() + Directly call RegtestActivate* in gtests + Update release notes for v3.1.0 + make-release.py: Versioning changes for 3.1.0-rc1. + make-release.py: Updated manpages for 3.1.0-rc1. + make-release.py: Updated release notes and changelog for 3.1.0-rc1. + Undo manual DEPRECATION_HEIGHT + make-release.py: Versioning changes for 3.1.0-rc2. + make-release.py: Updated manpages for 3.1.0-rc2. + make-release.py: Updated release notes and changelog for 3.1.0-rc2. + Edit release notes to specify that rc2 does not enable Canopy support on the testnet + Set Canopy testnet activation height to 1020500 + Set PROTOCOL_VERSION to 170012 + Pass HistoryNode struct to librustzcash FFI + Delay testnet activation height by one week + Use 51 Testnet Dev Fund addresses, and adjust the end heights. + make-release.py: Versioning changes for 3.1.0. + make-release.py: Updated manpages for 3.1.0. + +ying tong (1): + Apply suggestions from code review diff --git a/doc/release-notes/release-notes-4.0.0-rc1.md b/doc/release-notes/release-notes-4.0.0-rc1.md new file mode 100644 index 000000000..b25b85ebd --- /dev/null +++ b/doc/release-notes/release-notes-4.0.0-rc1.md @@ -0,0 +1,276 @@ +Notable changes +=============== + +The mainnet activation of the Canopy network upgrade is supported by the 4.0.0 +release, with an activation height of 1046400, which should occur roughly in the +middle of November — following the targeted EOS halt of our 3.1.0 release. +Please upgrade to this release, or any subsequent release, in order to follow +the Canopy network upgrade. + +The following ZIPs are being deployed as part of this upgrade: + +* [ZIP 207: Funding Streams](https://zips.z.cash/zip-0207) in conjunction with [ZIP 214: Consensus rules for a Zcash Development Fund](https://zips.z.cash/zip-0214) +* [ZIP 211: Disabling Addition of New Value to the Sprout Value Pool](https://zips.z.cash/zip-0211) +* [ZIP 212: Allow Recipient to Derive Sapling Ephemeral Secret from Note Plaintext](https://zips.z.cash/zip-0212) +* [ZIP 215: Explicitly Defining and Modifying Ed25519 Validation Rules](https://zips.z.cash/zip-0215) + +In order to help the ecosystem prepare for the mainnet activation, Canopy has +already been activated on the Zcash testnet. Any node version 3.1.0 or higher, +including this release, supports the Canopy activation on testnet. + +Disabling new value in the Sprout value pool +-------------------------------------------- + +After the mainnet activation of Canopy, it will not be possible to send funds to +Sprout z-addresses from any _other_ kind of address, as described in [ZIP 211](https://zips.z.cash/zip-0211). +It will still be possible to send funds _from_ a Sprout z-address and to send +funds between Sprout addresses. Users of Sprout z-addresses are encouraged to +use Sapling z-addresses instead, and to migrate their remaining Sprout funds +into a Sapling z-address using the migration utility in zcashd: set `migrate=1` +in your `zcash.conf` file, or use the `z_setmigration` RPC. + +New logging system +------------------ + +The `zcashd` logging system is now powered by the Rust `tracing` crate. This +has two main benefits: + +- `tracing` supports the concept of "spans", which represent periods of time + with a beginning and end. These enable logging additional information about + temporality and causality of events. (Regular log lines, which represent + moments in time, are called `events` in `tracing`.) +- Spans and events are structured, and can record typed data in addition to text + messages. This structure can then be filtered dynamically. + +The existing `-debug=target` config flags are mapped to `tracing` log filters, +and will continue to correctly enable additional logging when starting `zcashd`. +A new `setlogfilter` RPC method has been introduced that enables reconfiguring +the log filter at runtime. See `zcash-cli help setlogfilter` for its syntax. + +As a minor note, `zcashd` no longer reopens the `debug.log` file on `SIGHUP`. +This behaviour was originally introduced in upstream Bitcoin Core to support log +rotation using external tools. `tracing` supports log rotation internally (which +is currently disabled), as well as a variety of interesting backends (such as +`journald` and OpenTelemetry integration); we are investigating how these might +be exposed in future releases. + +Compatibility +------------- +macOS versions earlier than 10.12 (Sierra) are no longer supported. + +Changelog +========= + +Alfredo Garcia (3): + only allow duplicates for certain options of the config + install bdb binaries + add more allowed duplicates + +Andrew Chow (1): + Fix naming of macOS SDK and clarify version + +Carl Dong (8): + contrib: macdeploy: Correctly generate macOS SDK + Adapt rest of tooling to new SDK naming scheme + native_cctools: Don't use libc++ from pinned clang + contrib: macdeploy: Use apple-sdk-tools instead of xar+pbzx + contrib: macdeploy: Remove historical extraction notes + depends: Decouple toolchain + binutils + depends: Specify path to native binaries as clang argument + depends: Add justifications for macOS clang flags + +Charlie O'Keefe (1): + Remove 'jessie' (debian 8) from suites list in linux gitian descriptors + +Cory Fields (14): + crypto: add AES 128/256 CBC classes + crypto: add aes cbc tests + crypter: fix the stored initialization vector size + crypter: constify encrypt/decrypt + crypter: hook up the new aes cbc classes + crypter: add a BytesToKey clone to replace the use of openssl + crypter: add tests for crypter + build: Enumerate ctaes rather than globbing + depends: bump MacOS toolchain + macos: Bump to xcode 11.3.1 and 10.15 SDK + darwin: pass mlinker-version so that clang enables new features + depends: specify libc++ header location for darwin + depends: enable lto support for Apple's ld64 + depends: bump native_cctools for fixed lto with external clang + +Daira Hopwood (6): + zcutil/distclean.sh: remove BDB utility programs. + Update .gitignore. + Fix a return status issue. + Update Makefile.am + Newer version of checksec.sh from https://github.com/slimm609/checksec.sh/commit/a6df608ac077689b2160e521db6601abc7b9e26e + Repair full_test_suite.py for new checksec.sh. + +Dimitris Apostolou (1): + Remove deprecated contrib utilities + +Jack Grigg (67): + Move GrothProof and SproutProof definitions into zcash/Proof.hpp + Remove unused declarations left over from libsnark verification + Make ZCJoinSplit::prove static and remove ZCJoinSplit globals + Move ProofVerifier out of the libzcash namespace + Move JSDescription::Verify to ProofVerifier::VerifySprout + Skip Sprout proof verification for ProofVerifier::Disabled + Send alert to put pre-Heartwood nodes into safe mode. + Squashed 'src/crypto/ctaes/' content from commit 003a4acfc + build: shuffle gtest Makefile so that crypto can be used by the wallet + metrics: Collect general stats before clearing screen + Debian: Add copyright entries for ctaes and secp256k1 + Revert "Rename FALLBACK_DOWNLOAD_PATH to PRIORITY_DOWNLOAD_PATH" + Revert "Try downloading from our mirror first to avoid headaches." + depends: Use FALLBACK_DOWNLOAD_PATH if the primary's hash doesn't match + test: Remove obsolete TransactionBuilder test + Add tracing to librustzcash dependencies + FFI wrapper around tracing crate + Replace C++ logging with tracing logging + Use a tracing EnvFilter directive for -debug flags + Add support for reloading the tracing filter + Add an RPC method for setting the tracing filter directives + Add support for tracing spans + Add some spans to the Zcash codebase + FFI: Extract common codeunit types into a rust/types.h header + tracing: Use 'static constexpr' hack in macros + wallet: Fix logging to satisfy constexpr requirements + FFI: Add missing includes + init: Place additional constraints on pathDebug + rpc: Throw error in setlogfilter if filter reloading fails + tracing: Log field values that aren't valid UTF-8 + tracing: Document macro arguments that MUST be static constant UTF-8 strings + doc: Update release notes for tracing backend + qa: Add tracing dependencies to updatecheck.py + depends: tracing-core 0.1.13 + Revert "Add check-depends step to STAGE_COMMANDS list" + contrib: Update macdeploy README + depends: Rework Rust integration + depends: Add platform-specific overrides for download files + depends: Split check-packages and check-sources across categories + FFI: Fix tracing log path handling on Windows + tracing: Add MAP macro + tracing: Add support for event fields + tracing: Add support for span fields + tracing: Format field values with Display + Add fields to logging in CNode and UpdateTip + util: Use DEBUG level for LogPrint(), leaving INFO for LogPrintf() + tracing: Parse log_path into an Option + tracing: Rework tracing_init into a single function + init: Rework tracing_init call + init: Add spans for initialization and shutdown + Replace libsodium's randombytes_buf with rand_core::OsRng::fill_bytes + consensus: Add assertions for Params::HalvingHeight parameters + consensus: Document the empty conditional branch in ContextualCheckBlock + consensus: Statically check funding stream numerators and denominators + consensus: Clearly gate active funding stream elements on Canopy + Replace libsodium's crypto_sign with ed25519-zebra + ed25519: Panic (triggering abort) if nullptr passed into APIs + test: Update ZIP 215 test cases from ed25519-zebra + depends: Migrate to zcash_* 0.3.0 Rust crates + FFI: Remove circuit parameter hashes from librustzcash_init_zksnark_params + FFI: Migrate to bls12_381 and jubjub crates + depends: cargo update + qa: Update list of postponed crate versions + FFI: Rename to librustzcash_sapling_compute_cmu + FFI: Rename r to rcm + debian: Rename X11 to Expat-with-advertising-clause in copyright + Adjust GetActiveFundingStream* comments + +Kris Nuttycombe (13): + Remove amqp code and Proton library depenencies & flags. + Remove Proton license from contrib/debian/copyright + consensus: Clean up some whitespace and variable names + consensus: Refactor Sprout contextual rules to match the rest + consensus: Remove canopyActive gate around GetActiveFundingStreamElements + consensus: Combine heartwoodActive conditionals + consensus: Add a placeholder for !canopyActive + consensus: Move overwinterActive rules ahead of saplingActive rules + consensus: Combine saplingActive conditionals + consensus: Move Sapling-disabled Overwinter rules above Sapling rules + consensus: Reorder Overwinter+!Sapling rules + consensus: Remove redundant contextual consensus rules + Add comment in lieu of redundant overwinter version check & fix tests. + +Larry Ruane (2): + flush wallet db (SetBestChain()) on clean shutdown + wallet: lock cs_main while accessing chainActive + +LongShao007 (1): + fix bug of bdb.mk + +Per Grön (11): + Get rid of implicit hidden dependencies between test .cpp files + Add missing #includes to test_block.cpp + Add actual header file for utilities in gtest/utils.cpp + Fix linkage issue with consts in primitives/block.h + Remove Checkpoints_tests.cpp + libsnark: Don't (implicitly) rely on other tests initializing the public params + Add missing libsnark initialization call + Don't clobber cwd in rpc_wallet_tests.cpp + Include header files within the source tree using "" instead of <> + Be consistent about what path to include bitcoin-config.h with + Be consistent with how to #include test data headers + +Pieter Wuille (1): + Add ctaes-based constant time AES implementation + +Sean Bowe (4): + Postpone boost 1.74.0 update + Postpone rust updates + make-release.py: Versioning changes for 4.0.0-rc1. + make-release.py: Updated manpages for 4.0.0-rc1. + +Taylor Hornby (5): + Implement system for postponing dependency updates. + Change release instructions to block the release when dependencies are not updated and not postponed. + Enforce pre-release dependency update check in make-release.py + Extend deadline for postponing dependency updates + Add new dependencies to updatecheck.py, add a flag we can use to have our CI test it. + +Ariel Gabizon (1): + explain expiry error + +Benjamin Winston (2): + Added support for afl-clang-fast. + Added libfuzzer support. + +elbandi (3): + Allow configure params directory + Add paramsdir option for manpage + Throw error if -paramsdir not a valid directory + +fanquake (8): + depends: set OSX_MIN_VERSION to 10.10 + doc: mention that macOS 10.10 is now required + scripted-diff: prefer MAC_OSX over __APPLE__ + build: set minimum supported macOS to 10.12 + depends: clang 6.0.1 + depends: native_cctools 921, ld64 409.12, libtapi 1000.10.8 + build: use macOS 10.14 SDK + doc: explain why passing -mlinker-version is required + +noname45688@gmail.com (2): + Updating to Python 3 + Update to Python 3 + +teor (1): + Fix a comment typo in pow.cpp + +Ying Tong Lai (11): + Add Debian8 deprecation to release notes + Add missing curly braces after if statement + Add test for garbage memory in history nodes + Add documentation specific to ZIP 212 + Move esk derivation check to beginning of plaintext_checks_without_height() + Define PRF diversifiers in prf.h + assert(leadbyte == 0x02) after every if(leadbyte != 0x01) + Update doc/release-notes/release-notes-3.1.0.md + Make sure garbage bytes are different + Rename PRV_DIVERSIFIER to PRF_TAG + Add link to ZIP212 in coinbase comment + +Zancas Wilcox (1): + make deprecation.h include consensus/params.h + diff --git a/doc/release-notes/release-notes-4.0.0.md b/doc/release-notes/release-notes-4.0.0.md new file mode 100644 index 000000000..cd675c434 --- /dev/null +++ b/doc/release-notes/release-notes-4.0.0.md @@ -0,0 +1,290 @@ +Notable changes +=============== + +The mainnet activation of the Canopy network upgrade is supported by the 4.0.0 +release, with an activation height of 1046400, which should occur roughly in the +middle of November — following the targeted EOS halt of our 3.1.0 release. +Please upgrade to this release, or any subsequent release, in order to follow +the Canopy network upgrade. + +The following ZIPs are being deployed as part of this upgrade: + +* [ZIP 207: Funding Streams](https://zips.z.cash/zip-0207) in conjunction with [ZIP 214: Consensus rules for a Zcash Development Fund](https://zips.z.cash/zip-0214) +* [ZIP 211: Disabling Addition of New Value to the Sprout Value Pool](https://zips.z.cash/zip-0211) +* [ZIP 212: Allow Recipient to Derive Sapling Ephemeral Secret from Note Plaintext](https://zips.z.cash/zip-0212) +* [ZIP 215: Explicitly Defining and Modifying Ed25519 Validation Rules](https://zips.z.cash/zip-0215) + +In order to help the ecosystem prepare for the mainnet activation, Canopy has +already been activated on the Zcash testnet. Any node version 3.1.0 or higher, +including this release, supports the Canopy activation on testnet. + +Disabling new value in the Sprout value pool +-------------------------------------------- + +After the mainnet activation of Canopy, it will not be possible to send funds to +Sprout z-addresses from any _other_ kind of address, as described in [ZIP 211](https://zips.z.cash/zip-0211). +It will still be possible to send funds _from_ a Sprout z-address and to send +funds between Sprout addresses. Users of Sprout z-addresses are encouraged to +use Sapling z-addresses instead, and to migrate their remaining Sprout funds +into a Sapling z-address using the migration utility in zcashd: set `migrate=1` +in your `zcash.conf` file, or use the `z_setmigration` RPC. + +New logging system +------------------ + +The `zcashd` logging system is now powered by the Rust `tracing` crate. This +has two main benefits: + +- `tracing` supports the concept of "spans", which represent periods of time + with a beginning and end. These enable logging additional information about + temporality and causality of events. (Regular log lines, which represent + moments in time, are called `events` in `tracing`.) +- Spans and events are structured, and can record typed data in addition to text + messages. This structure can then be filtered dynamically. + +The existing `-debug=target` config flags are mapped to `tracing` log filters, +and will continue to correctly enable additional logging when starting `zcashd`. +A new `setlogfilter` RPC method has been introduced that enables reconfiguring +the log filter at runtime. See `zcash-cli help setlogfilter` for its syntax. + +As a minor note, `zcashd` no longer reopens the `debug.log` file on `SIGHUP`. +This behaviour was originally introduced in upstream Bitcoin Core to support log +rotation using external tools. `tracing` supports log rotation internally (which +is currently disabled), as well as a variety of interesting backends (such as +`journald` and OpenTelemetry integration); we are investigating how these might +be exposed in future releases. + +Compatibility +------------- +macOS versions earlier than 10.12 (Sierra) are no longer supported. + +Changelog +========= + +Alfredo Garcia (3): + only allow duplicates for certain options of the config + install bdb binaries + add more allowed duplicates + +Andrew Chow (1): + Fix naming of macOS SDK and clarify version + +Carl Dong (8): + contrib: macdeploy: Correctly generate macOS SDK + Adapt rest of tooling to new SDK naming scheme + native_cctools: Don't use libc++ from pinned clang + contrib: macdeploy: Use apple-sdk-tools instead of xar+pbzx + contrib: macdeploy: Remove historical extraction notes + depends: Decouple toolchain + binutils + depends: Specify path to native binaries as clang argument + depends: Add justifications for macOS clang flags + +Charlie O'Keefe (1): + Remove 'jessie' (debian 8) from suites list in linux gitian descriptors + +Cory Fields (14): + crypto: add AES 128/256 CBC classes + crypto: add aes cbc tests + crypter: fix the stored initialization vector size + crypter: constify encrypt/decrypt + crypter: hook up the new aes cbc classes + crypter: add a BytesToKey clone to replace the use of openssl + crypter: add tests for crypter + build: Enumerate ctaes rather than globbing + depends: bump MacOS toolchain + macos: Bump to xcode 11.3.1 and 10.15 SDK + darwin: pass mlinker-version so that clang enables new features + depends: specify libc++ header location for darwin + depends: enable lto support for Apple's ld64 + depends: bump native_cctools for fixed lto with external clang + +Daira Hopwood (7): + zcutil/distclean.sh: remove BDB utility programs. + Update .gitignore. + Fix a return status issue. + Update Makefile.am + Newer version of checksec.sh from https://github.com/slimm609/checksec.sh/commit/a6df608ac077689b2160e521db6601abc7b9e26e + Repair full_test_suite.py for new checksec.sh. + Clarify a comment about the ZF and MG addresses + +Dimitris Apostolou (1): + Remove deprecated contrib utilities + +Jack Grigg (65): + Move GrothProof and SproutProof definitions into zcash/Proof.hpp + Remove unused declarations left over from libsnark verification + Make ZCJoinSplit::prove static and remove ZCJoinSplit globals + Move ProofVerifier out of the libzcash namespace + Move JSDescription::Verify to ProofVerifier::VerifySprout + Skip Sprout proof verification for ProofVerifier::Disabled + Send alert to put pre-Heartwood nodes into safe mode. + Squashed 'src/crypto/ctaes/' content from commit 003a4acfc + build: shuffle gtest Makefile so that crypto can be used by the wallet + metrics: Collect general stats before clearing screen + Debian: Add copyright entries for ctaes and secp256k1 + Revert "Rename FALLBACK_DOWNLOAD_PATH to PRIORITY_DOWNLOAD_PATH" + Revert "Try downloading from our mirror first to avoid headaches." + depends: Use FALLBACK_DOWNLOAD_PATH if the primary's hash doesn't match + test: Remove obsolete TransactionBuilder test + Add tracing to librustzcash dependencies + FFI wrapper around tracing crate + Replace C++ logging with tracing logging + Use a tracing EnvFilter directive for -debug flags + Add support for reloading the tracing filter + Add an RPC method for setting the tracing filter directives + Add support for tracing spans + Add some spans to the Zcash codebase + FFI: Extract common codeunit types into a rust/types.h header + tracing: Use 'static constexpr' hack in macros + wallet: Fix logging to satisfy constexpr requirements + FFI: Add missing includes + init: Place additional constraints on pathDebug + rpc: Throw error in setlogfilter if filter reloading fails + tracing: Log field values that aren't valid UTF-8 + tracing: Document macro arguments that MUST be static constant UTF-8 strings + doc: Update release notes for tracing backend + qa: Add tracing dependencies to updatecheck.py + depends: tracing-core 0.1.13 + Revert "Add check-depends step to STAGE_COMMANDS list" + contrib: Update macdeploy README + depends: Rework Rust integration + depends: Add platform-specific overrides for download files + depends: Split check-packages and check-sources across categories + FFI: Fix tracing log path handling on Windows + tracing: Add MAP macro + tracing: Add support for event fields + tracing: Add support for span fields + tracing: Format field values with Display + Add fields to logging in CNode and UpdateTip + util: Use DEBUG level for LogPrint(), leaving INFO for LogPrintf() + tracing: Parse log_path into an Option + tracing: Rework tracing_init into a single function + init: Rework tracing_init call + init: Add spans for initialization and shutdown + Replace libsodium's randombytes_buf with rand_core::OsRng::fill_bytes + consensus: Add assertions for Params::HalvingHeight parameters + consensus: Document the empty conditional branch in ContextualCheckBlock + consensus: Statically check funding stream numerators and denominators + consensus: Clearly gate active funding stream elements on Canopy + Replace libsodium's crypto_sign with ed25519-zebra + ed25519: Panic (triggering abort) if nullptr passed into APIs + test: Update ZIP 215 test cases from ed25519-zebra + depends: Migrate to zcash_* 0.3.0 Rust crates + FFI: Remove circuit parameter hashes from librustzcash_init_zksnark_params + FFI: Migrate to bls12_381 and jubjub crates + depends: cargo update + qa: Update list of postponed crate versions + FFI: Rename to librustzcash_sapling_compute_cmu + FFI: Rename r to rcm + +Kris Nuttycombe (13): + Remove amqp code and Proton library depenencies & flags. + Remove Proton license from contrib/debian/copyright + consensus: Clean up some whitespace and variable names + consensus: Refactor Sprout contextual rules to match the rest + consensus: Remove canopyActive gate around GetActiveFundingStreamElements + consensus: Combine heartwoodActive conditionals + consensus: Add a placeholder for !canopyActive + consensus: Move overwinterActive rules ahead of saplingActive rules + consensus: Combine saplingActive conditionals + consensus: Move Sapling-disabled Overwinter rules above Sapling rules + consensus: Reorder Overwinter+!Sapling rules + consensus: Remove redundant contextual consensus rules + Add comment in lieu of redundant overwinter version check & fix tests. + +Larry Ruane (2): + flush wallet db (SetBestChain()) on clean shutdown + wallet: lock cs_main while accessing chainActive + +LongShao007 (1): + fix bug of bdb.mk + +Per Grön (11): + Get rid of implicit hidden dependencies between test .cpp files + Add missing #includes to test_block.cpp + Add actual header file for utilities in gtest/utils.cpp + Fix linkage issue with consts in primitives/block.h + Remove Checkpoints_tests.cpp + libsnark: Don't (implicitly) rely on other tests initializing the public params + Add missing libsnark initialization call + Don't clobber cwd in rpc_wallet_tests.cpp + Include header files within the source tree using "" instead of <> + Be consistent about what path to include bitcoin-config.h with + Be consistent with how to #include test data headers + +Pieter Wuille (1): + Add ctaes-based constant time AES implementation + +Sean Bowe (13): + Postpone boost 1.74.0 update + Postpone rust updates + make-release.py: Versioning changes for 4.0.0-rc1. + make-release.py: Updated manpages for 4.0.0-rc1. + make-release.py: Updated release notes and changelog for 4.0.0-rc1. + Add release notes to describe the Canopy network upgrade. + Update names of contributors in release notes. + Specify 4.0.0 in release notes + Add dev fund addresses for mainnet. + Set activation height for Canopy on mainnet. + Postpone updates for dependencies until after 4.0.0 release. + make-release.py: Versioning changes for 4.0.0. + make-release.py: Updated manpages for 4.0.0. + +Taylor Hornby (5): + Implement system for postponing dependency updates. + Change release instructions to block the release when dependencies are not updated and not postponed. + Enforce pre-release dependency update check in make-release.py + Extend deadline for postponing dependency updates + Add new dependencies to updatecheck.py, add a flag we can use to have our CI test it. + +Ariel Gabizon (1): + explain expiry error + +Benjamin Winston (2): + Added support for afl-clang-fast. + Added libfuzzer support. + +elbandi (3): + Allow configure params directory + Add paramsdir option for manpage + Throw error if -paramsdir not a valid directory + +fanquake (8): + depends: set OSX_MIN_VERSION to 10.10 + doc: mention that macOS 10.10 is now required + scripted-diff: prefer MAC_OSX over `__APPLE__` + build: set minimum supported macOS to 10.12 + depends: clang 6.0.1 + depends: native_cctools 921, ld64 409.12, libtapi 1000.10.8 + build: use macOS 10.14 SDK + doc: explain why passing -mlinker-version is required + +noname45688@gmail.com (2): + Updating to Python 3 + Update to Python 3 + +Jack Grigg (2): + debian: Rename X11 to Expat-with-advertising-clause in copyright + Adjust GetActiveFundingStream* comments + +teor (1): + Fix a comment typo in pow.cpp + +Ying Tong Lai (7): + Add Debian8 deprecation to release notes + Add missing curly braces after if statement + Add test for garbage memory in history nodes + Add documentation specific to ZIP 212 + Move esk derivation check to beginning of plaintext_checks_without_height() + Define PRF diversifiers in prf.h + assert(leadbyte == 0x02) after every if(leadbyte != 0x01) + +ying tong (4): + Update doc/release-notes/release-notes-3.1.0.md + Make sure garbage bytes are different + Rename PRV_DIVERSIFIER to PRF_TAG + Add link to ZIP212 in coinbase comment + +Zancas Wilcox (1): + make deprecation.h include consensus/params.h + diff --git a/doc/release-notes/release-notes-4.1.0-rc1.md b/doc/release-notes/release-notes-4.1.0-rc1.md new file mode 100644 index 000000000..593f3305e --- /dev/null +++ b/doc/release-notes/release-notes-4.1.0-rc1.md @@ -0,0 +1,382 @@ +Notable changes +=============== + +Migration to Clang and static libc++ +------------------------------------ + +`zcashd` now builds its C++ (and C) dependencies entirely with a pinned version +of Clang, and statically links libc++ instead of dynamically linking libstdc++. +This migration enables us to reliably use newer C++ features while supporting +older LTS platforms, be more confident in the compiler's optimisations, and +leverage security features such as sanitisers and efficient fuzzing. In future, +this will also allow optimizing across the boundary between Rust and C++. + +The system compiler is still used to compile a few native dependencies (used by +the build machine to then compile `zcashd` for the target machine). These will +likely also be migrated to use the pinned Clang in a future release. + +Fast sync for initial block download +------------------------------------ + +The `-ibdskiptxverification` flag allows faster synchronization during initial +block sync, by skipping transaction verification and instead verifying only PoW. +Note that this mode requires checkpoints to be enabled, to make sure that each +block under inspection is an ancestor of the latest checkpoint. + +Convenient testing for invalid note plaintexts +---------------------------------------------- + +After the mainnet activation of Canopy (block 1046400), correct wallet software +will no longer produce v1 note plaintexts (with a lead byte of `0x01`). However, +v1 note plaintexts will continue to be accepted for a grace period of 32256 +blocks (about 4 weeks), as specified in [ZIP 212](https://zips.z.cash/zip-0212). +The new `receiveunsafe` log category complains if an invalid note plaintext is +received. + +Additional lightwalletd and light client RPCs +--------------------------------------------- + +- lightwalletd is now able to retrieve all UTXOs related to a t-address through +the `getaddressutxos` RPC. (Previously, this was only available to the Insight +Explorer.) +- The new `z_gettreestate` RPC returns the Sprout and Sapling treestate at a +given block height or block hash. This makes it easier for light clients to +generate checkpoints. + +Update/removal of several cryptographic dependencies +---------------------------------------------------- + +This release updates secp256k1 to enable the GLV endomorphism optimisation by +default, after the recent expiry of the GLV patents. It also removes OpenSSL, +and replaces libsodium BLAKE2b usage with the [blake2b_simd Rust crate](https://github.com/oconnor663/blake2_simd). + +Changelog +========= + +Aditya Kulkarni (1): + Add a config option to skip transaction verification in IBD mode + +Ahmad Kazi (1): + [Trivial] Add BITCOIN_FS_H endif footer in fs.h + +Alfredo Garcia (9): + add timestamp to warnings + change order of returned pair, fix compatibility issue + revert result key change, fix calls to getime + add shielded balance to getwalletinfo + Add null check to feof. + allow wallet file to be outside datadir + Apply suggestions from code review + simplify TestBlockValidity + update function comment + +Ben Wilson (4): + Added libtinfo5 to ci builder containers + Added Arch and Centos to script, added libtinfo5 for arch + Fixed Centos and Arch python requirements + Build python for debian9 and ubuntu16.04 + +Carl Dong (3): + depends: Build secondary deps statically. + depends: Purge libtool archives + scripted-diff: Run scripted-diff in subshell + +Cory Fields (8): + leveldb: integrate leveldb into our buildsystem + build: No need to check for leveldb atomics + build: out-of-tree fixups + leveldb: enable runtime-detected crc32 instructions + build: verify that the assembler can handle crc32 functions + httpserver: use a future rather than relying on boost's try_join_for + httpserver: replace boost threads with std + devtools: add script to verify scriptable changes + +Daira Hopwood (29): + CBufferedFile: assert that Fill() is only called when nReadPos == nSrcPos, and simplify based on that assumption. + CBufferedFile: use eof() method rather than feof(src) in error message. + Make some conversions explicit to reduce sanitizer warnings. + Rename z_*_balance fields of getwalletinfo output to shielded_*_balance + Fix grammar in error messages. + Ensure that the absolute path used in the test definitely does not exist. + Line-wrap addition to README.md + Minor additional OpenSSL scouring. + Avoid undefined behaviour in scriptnum tests. + Add assertions for CScriptNum[10] +/- int64_t to avoid the possibility of UB. + It's unnecessary to pass int64_t by const reference. + Cosmetics in CScriptNum code and tests. + Add logging when we receive an invalid note plaintext (using the "receiveunsafe" log category). + Fix a new warning about use of boost::bind placeholders after updating Boost. closes #4774 + Beef up the CoC to address use of dog-whistles. + Fix warnings surfaced by compiling with clang++. + Use the current time as the timestamp if we override a misc warning. + qa/zcash/full_test_suite.py: changes needed for macOS. fixes #4785 + qa/zcash/full_test_suite.py: print immediately if a test fails. + log(x)/log(2.0) can be written as log2(x). + Fix integer types in DisplayDuration. + Rename `time` to `duration` in `DisplayDuration`. + Update contrib/devtools/symbol-check.py + contrib/devtools/symbol-check.py: add info about Fedora-based distributions. + Comment and error message cleanups for transaction checks. + Add new copyright entries for build-aux/m4/ax_cxx_compile_stdcxx.m4 + Fix death gtests on macOS by switching to the threadsafe style. + Fix an error reporting bug in "Checksum missing or mismatched ..." + Rename the FS_ZIP214_ECC funding stream to FS_ZIP214_BP. See also https://github.com/zcash/zips/pull/412 . + +Dimitris Apostolou (5): + Remove reference to cargo-checksum.sh + Fix typos + Fix zeromq warning + Remove deprecated init.md + Remove Bitcoin release notes + +Dimitris Tsapakidis (1): + Fixed multiple typos + +Hennadii Stepanov (1): + Enable ShellCheck rules + +Jack Grigg (79): + Assorted small changes to the locked pool manager + wallet: Add ANY_TADDR special string to z_sendmany + Allow multiple nuparams options in config file + depends: Switch to `cargo vendor` for Rust dependencies + QA: Comment out Rust crate checks in updatecheck.py + depends: Ensure that SOURCES_PATH exists before vendoring crates + wallet: Ignore coinbase UTXOs with z_sendmany ANY_TADDR + rpc: Fix comma spacing in example z_sendmany commands + Squashed 'src/leveldb/' changes from 20ca81f08..a31c8aa40 + Squashed 'src/leveldb/' changes from a31c8aa40..196962ff0 + Squashed 'src/leveldb/' changes from 196962ff0..c521b3ac6 + Squashed 'src/leveldb/' changes from c521b3ac6..64052c76c + Squashed 'src/leveldb/' changes from 64052c76c..524b7e36a + Squashed 'src/leveldb/' changes from 524b7e36a..f545dfabf + depends: Remove cargo-checksum.sh + Replace libsodium's crypto_generichash_blake2b with blake2b_simd + blake2b: Allow consuming partial BLAKE2b output + tracing: Correctly override tracing::Span move constructors + build: Remove Rust staticlib naming workaround + depends: Update to latest config.guess & config.sub + build: out-of-tree fixups + leveldb: Assert that ssize_t is the same size as size_t on Windows + LockedPool: Fix LockedPool::free(nullptr) to be a no-op + LockedPool: Make Arena::free and LockedPool::free noexcept + allocators: Apply Allocator named requirements to secure_allocator::deallocate + depends: Update map of GCC canonical hosts to Rust targets + QA: Switch to x86_64-pc-linux-gnu for hard-coded Linux HOST + build: Switch to x86_64-pc-linux-gnu for codecov filtering + gitian: Switch from x86_64-unknown-linux-gnu to x86_64-linux-gnu + util: Remove OpenSSL multithreading infrastructure + Remove remaining OpenSSL references + QA: Remove OpenSSL from updatecheck.py + build: Remove a stray -lcrypto + Squashed 'src/secp256k1/' changes from 6ad5cdb42..8ab24e8da + build: Use the endomorphism optimization for secp256k1 + depends: libevent 2.1.12 + depends: ccache 3.7.11 + depends: googletest 1.8.1 + depends: utfcpp 3.1.2 + depends: Use correct HOST for download-linux target + QA: Fix backporting bugs in httpbasics.py + depends: Boost 1.74.0 + depends: ccache 3.7.12 + cargo update + depends: ZeroMQ 4.3.3 + FFI: Merge librustzcash_init_zksnark_params variants into one function + depends: Postpone current and scheduled Rust releases until 2021 + MOVEONLY: Move logging code from util.{h,cpp} to new files + depends: Add Clang 8.0.0 + depends: Use vendored Clang for native compilation + depends: Use vendored Clang for macOS cross-compilation + depends: Vendor LLD and use it for linking + depends: Add libc++ as a dependency + depends: Don't replace default CXXFLAGS in C++ dependencies + depends: Add multilib paths for Linux cross-compile + build: Statically link libc++ + build: Add missing LIBUNIVALUE to Makefile.bench.include LDADD + depends: Fix "unused variables" warning when compiling zeromq for Windows + depends: Rename Boost libraries to follow MinGW/GCC convention + depends: Fix boost::iostreams usage on Windows with libc++ + build: Compile secp256k1 with C99 + build: Add -lpthread to univalue test LDFLAGS + qa: Disable FORTIFY_SOURCE checks + QA: Add native_clang and libcxx to updatecheck.py + test: Fix various pyflakes warnings + doc: Add Clang and libc++ migration to release notes + build: Update AX_CXX_COMPILE_STDCXX macro + build: Require and build with C++ 17 + depends: Build C++ dependencies with C++ 17 + Switch from std::random_shuffle to std::shuffle + Squashed 'src/secp256k1/' changes from 8ab24e8da..c6b6b8f1b + build: Update secp256k1 configure flags + Improve reject reasons for unmet shielded requirements + Add logging to CCoinsViewCache::HaveShieldedRequirements + utils: Remove unnecessary GetTempPath() + Add txid to "shielded requirements not met" messages + test/lint: Check for working changes before checking scripted diffs + tests: Update chained_joinsplits test for HaveShieldedRequirements API change + scripted-diff: Remove BOOST_STATIC_ASSERT + +Jeffrey Czyz (2): + Fix compilation errors in support/lockedpool.cpp + Fix segfault in allocator_tests/arena_tests + +Jeremy Rubin (1): + Fix subscript[0] potential bugs in key.cpp + +John Newbery (1): + [docs] document scripted-diff + +Jonas Schnelli (2): + NotifyBlockTip signal: switch from hash (uint256) to CBlockIndex* + Move uiInterface.NotifyBlockTip signal above the core/wallet signal + +Kaz Wesley (3): + LockedPool: test handling of invalid allocations + LockedPool: fix explosion for illegal-sized alloc + LockedPool: avoid quadratic-time allocation + +Kris Nuttycombe (14): + Prevent creation of shielded transactions in initial block download. + Revert the move of the `getBalanceZaddr` block for ease of review. + Fix forward declaration. + Remove redundant CheckBlock calls. + Reduce diff complexity. + Apply style suggestions from code review + -ibdskiptxverification must imply -checkpoints + Apply suggestions from code review + Ensure conflicting flags are reported as an error. + Reject incompatible flags in "Step 2" + Rename IBDSkipTxVerification back to ShouldCheckTransaction + Fix command-line help for -ibdskiptxverification + Fix invocation of updatecheck.py in make-release.py + Replace invalid characters in log message decoding. + +Larry Ruane (4): + Flush witness data when consistent (part 2) + performance: auto params = CChainParams::GetConsensus() + allow getaddressutxos if -lightwalletd + add z_gettreestate rpc + +Luke Dashjr (2): + lockedpool: When possible, use madvise to avoid including sensitive information in core dumps + Add MIT license to Makefiles + +Marco Falke (3): + Limit scope of all global std::once_flag + Add extra LevelDB source to Makefile + test: Move linters to test/lint, add readme + +Martin Ankerl (2): + Use best-fit strategy in Arena, now O(log(n)) instead O(n) + fix nits: variable naming, typos + +Mustafa (2): + Add a source file for unit test utils. + Move GetTempPath() to testutil. + +Nate Wilcox (3): + Link the README.md to the specific readthedocs.io page for building on Debian/Ubuntu. + Convert a sed command to a static patch file. + depends: fix a logging bug for multi-archive packages. + +Nick (1): + [RPC] Add transaction size to JSON output + +Pavel Janík (2): + Do not shadow variable, use deprecated MAP_ANON if MAP_ANONYMOUS is not defined. + Do not include env_win.cc on non-Windows systems + +Pieter Wuille (2): + Remove some unused functions and methods + Fail on commit with VERIFY SCRIPT but no scripted-diff + +Sean Bowe (3): + Update Rust to 1.44.1. + cargo update + Update to latest zcash_* and zkcrypto crates. + +Taylor Hornby (3): + Fix buffer overflows in P2PKH tests + Add a missing % to a string interpolation in rpc test framework + Fix undefined behavior in the test_bitcoin tests + +Thomas Snider (1): + [trivial] Switched constants to sizeof() + +Vasil Dimov (1): + lockedpool: avoid sensitive data in core files (FreeBSD) + +Wladimir J. van der Laan (19): + wallet: Change CCrypter to use vectors with secure allocator + wallet: Get rid of LockObject and UnlockObject calls in key.h + support: Add LockedPool + rpc: Add `getmemoryinfo` call + bench: Add benchmark for lockedpool allocation/deallocation + http: Restrict maximum size of request line + headers + Replace scriptnum_test's normative ScriptNum implementation + build: remove libcrypto as internal dependency in libbitcoinconsensus.pc + http: Do a pending c++11 simplification + http: Add log message when work queue is full + http: Change boost::scoped_ptr to std::unique_ptr in HTTPRequest + http: use std::move to move HTTPRequest into HTTPWorkItem + Add fs.cpp/h + Replace includes of boost/filesystem.h with fs.h + Replace uses of boost::filesystem with fs + Use fsbridge for fopen and freopen + torcontrol: Use fs::path instead of std::string for private key path + Remove `namespace fs=fs` + test: Mention commit id in scripted diff error + +fanquake (8): + build: remove SSL lib detection + build: remove OpenSSL detection and libs + depends: remove OpenSSL package + doc: remove OpenSSL from build instructions and licensing info + depends: Disable unused ZeroMQ features + depends: zeromq: disable draft classes and methods + build: only pass --disable-dependency-tracking to packages that understand it + build: pass --enable-option-checking to applicable packages + +mruddy (1): + [depends, zmq, doc] avoid deprecated zeromq api functions + +practicalswift (7): + Fix out-of-bounds write in case of failing mmap(...) in PosixLockedPageAllocator::AllocateLocked + Improve readability by removing redundant casts to same type (on all platforms) + tests: Remove OldSetKeyFromPassphrase/OldEncrypt/OldDecrypt + Remove unused Boost includes + Add "export LC_ALL=C" to all shell scripts + Add error handling: exit if cd fails + Use bash instead of POSIX sh. POSIX sh does not support arrays. + +Jack Grigg (9): + Update license headers + leveldb: Fix typo + LockedPool: Switch to HTTPS URLs in licenses and comments + test: Fix LFSR period in comments + httpserver: Code style cleanups + depends: Update packages documentation for Zcash + depends: Add untested note to FreeBSD host + Update example scripted-diff comit in doc/developer-notes.md + Use HTTPS in script license headers + +syd (1): + Add assert_raises_message to the python test framework. + +Ying Tong Lai (9): + Add funding stream addresses to getblocksubsidy RPC output + Fix CScript encoding + Handle shielded address case + Minor cleanups + Only return address instead of CScript + Remove void declaration of ScriptPubKeyToJSON() + Postpone native_ccache 4.0 + make-release.py: Versioning changes for 4.1.0-rc1. + make-release.py: Updated manpages for 4.1.0-rc1. + +ying tong (1): + Apply suggestions from code review + +Benjamin Winston (1): + Postponed dependency updates, refer to core team sync meeting. + diff --git a/doc/release-notes/release-notes-4.1.0.md b/doc/release-notes/release-notes-4.1.0.md new file mode 100644 index 000000000..d5d26eb9d --- /dev/null +++ b/doc/release-notes/release-notes-4.1.0.md @@ -0,0 +1,387 @@ +Notable changes +=============== + +Migration to Clang and static libc++ +------------------------------------ + +`zcashd` now builds its C++ (and C) dependencies entirely with a pinned version +of Clang, and statically links libc++ instead of dynamically linking libstdc++. +This migration enables us to reliably use newer C++ features while supporting +older LTS platforms, be more confident in the compiler's optimisations, and +leverage security features such as sanitisers and efficient fuzzing. In future, +this will also allow optimizing across the boundary between Rust and C++. + +The system compiler is still used to compile a few native dependencies (used by +the build machine to then compile `zcashd` for the target machine). These will +likely also be migrated to use the pinned Clang in a future release. + + +Fast sync for initial block download +------------------------------------ + +The `-ibdskiptxverification` flag allows faster synchronization during initial +block sync, by skipping transaction verification and instead verifying only PoW. +Note that this mode requires checkpoints to be enabled, to make sure that each +block under inspection is an ancestor of the latest checkpoint. + +Convenient testing for invalid note plaintexts +---------------------------------------------- + +After the mainnet activation of Canopy (block 1046400), correct wallet software +will no longer produce v1 note plaintexts (with a lead byte of `0x01`). However, +v1 note plaintexts will continue to be accepted for a grace period of 32256 +blocks (about 4 weeks), as specified in [ZIP 212](https://zips.z.cash/zip-0212). +The new `receiveunsafe` log category complains if an invalid note plaintext is +received. + +Additional lightwalletd and light client RPCs +--------------------------------------------- + +- lightwalletd is now able to retrieve all UTXOs related to a t-address through +the `getaddressutxos` RPC. (Previously, this was only available to the Insight +Explorer.) +- The new `z_gettreestate` RPC returns the Sprout and Sapling treestate at a +given block height or block hash. This makes it easier for light clients to +generate checkpoints. + +Update/removal of several cryptographic dependencies +---------------------------------------------------- + +This release updates secp256k1 to enable the GLV endomorphism optimisation by +default, after the recent expiry of the GLV patents. It also removes OpenSSL, +and replaces libsodium BLAKE2b usage with the [blake2b_simd Rust crate](https://github.com/oconnor663/blake2_simd). +Changelog +========= + +Aditya Kulkarni (1): + Add a config option to skip transaction verification in IBD mode + +Ahmad Kazi (1): + [Trivial] Add BITCOIN_FS_H endif footer in fs.h + +Alfredo Garcia (9): + add timestamp to warnings + change order of returned pair, fix compatibility issue + revert result key change, fix calls to getime + add shielded balance to getwalletinfo + Add null check to feof. + allow wallet file to be outside datadir + Apply suggestions from code review + simplify TestBlockValidity + update function comment + +Ben Wilson (4): + Added libtinfo5 to ci builder containers + Added Arch and Centos to script, added libtinfo5 for arch + Fixed Centos and Arch python requirements + Build python for debian9 and ubuntu16.04 + +Carl Dong (3): + depends: Build secondary deps statically. + depends: Purge libtool archives + scripted-diff: Run scripted-diff in subshell + +Cory Fields (8): + leveldb: integrate leveldb into our buildsystem + build: No need to check for leveldb atomics + build: out-of-tree fixups + leveldb: enable runtime-detected crc32 instructions + build: verify that the assembler can handle crc32 functions + httpserver: use a future rather than relying on boost's try_join_for + httpserver: replace boost threads with std + devtools: add script to verify scriptable changes + +Daira Hopwood (30): + CBufferedFile: assert that Fill() is only called when nReadPos == nSrcPos, and simplify based on that assumption. + CBufferedFile: use eof() method rather than feof(src) in error message. + Make some conversions explicit to reduce sanitizer warnings. + Rename z_*_balance fields of getwalletinfo output to shielded_*_balance + Fix grammar in error messages. + Ensure that the absolute path used in the test definitely does not exist. + Line-wrap addition to README.md + Minor additional OpenSSL scouring. + Avoid undefined behaviour in scriptnum tests. + Add assertions for CScriptNum[10] +/- int64_t to avoid the possibility of UB. + It's unnecessary to pass int64_t by const reference. + Cosmetics in CScriptNum code and tests. + Add logging when we receive an invalid note plaintext (using the "receiveunsafe" log category). + Fix a new warning about use of boost::bind placeholders after updating Boost. closes #4774 + Beef up the CoC to address use of dog-whistles. + Fix warnings surfaced by compiling with clang++. + Use the current time as the timestamp if we override a misc warning. + qa/zcash/full_test_suite.py: changes needed for macOS. fixes #4785 + qa/zcash/full_test_suite.py: print immediately if a test fails. + log(x)/log(2.0) can be written as log2(x). + Fix integer types in DisplayDuration. + Rename `time` to `duration` in `DisplayDuration`. + Update contrib/devtools/symbol-check.py + contrib/devtools/symbol-check.py: add info about Fedora-based distributions. + Comment and error message cleanups for transaction checks. + Add new copyright entries for build-aux/m4/ax_cxx_compile_stdcxx.m4 + Fix death gtests on macOS by switching to the threadsafe style. + Fix an error reporting bug in "Checksum missing or mismatched ..." + Rename the FS_ZIP214_ECC funding stream to FS_ZIP214_BP. See also https://github.com/zcash/zips/pull/412 . + Gitian builds: Remove manual CFLAGS and CXXFLAGS from descriptor. + +Dimitris Apostolou (5): + Remove reference to cargo-checksum.sh + Fix typos + Fix zeromq warning + Remove deprecated init.md + Remove Bitcoin release notes + +Dimitris Tsapakidis (1): + Fixed multiple typos + +Hennadii Stepanov (1): + Enable ShellCheck rules + +Jack Grigg (79): + Assorted small changes to the locked pool manager + wallet: Add ANY_TADDR special string to z_sendmany + Allow multiple nuparams options in config file + depends: Switch to `cargo vendor` for Rust dependencies + QA: Comment out Rust crate checks in updatecheck.py + depends: Ensure that SOURCES_PATH exists before vendoring crates + wallet: Ignore coinbase UTXOs with z_sendmany ANY_TADDR + rpc: Fix comma spacing in example z_sendmany commands + Squashed 'src/leveldb/' changes from 20ca81f08..a31c8aa40 + Squashed 'src/leveldb/' changes from a31c8aa40..196962ff0 + Squashed 'src/leveldb/' changes from 196962ff0..c521b3ac6 + Squashed 'src/leveldb/' changes from c521b3ac6..64052c76c + Squashed 'src/leveldb/' changes from 64052c76c..524b7e36a + Squashed 'src/leveldb/' changes from 524b7e36a..f545dfabf + depends: Remove cargo-checksum.sh + Replace libsodium's crypto_generichash_blake2b with blake2b_simd + blake2b: Allow consuming partial BLAKE2b output + tracing: Correctly override tracing::Span move constructors + build: Remove Rust staticlib naming workaround + depends: Update to latest config.guess & config.sub + build: out-of-tree fixups + leveldb: Assert that ssize_t is the same size as size_t on Windows + LockedPool: Fix LockedPool::free(nullptr) to be a no-op + LockedPool: Make Arena::free and LockedPool::free noexcept + allocators: Apply Allocator named requirements to secure_allocator::deallocate + depends: Update map of GCC canonical hosts to Rust targets + QA: Switch to x86_64-pc-linux-gnu for hard-coded Linux HOST + build: Switch to x86_64-pc-linux-gnu for codecov filtering + gitian: Switch from x86_64-unknown-linux-gnu to x86_64-linux-gnu + util: Remove OpenSSL multithreading infrastructure + Remove remaining OpenSSL references + QA: Remove OpenSSL from updatecheck.py + build: Remove a stray -lcrypto + Squashed 'src/secp256k1/' changes from 6ad5cdb42..8ab24e8da + build: Use the endomorphism optimization for secp256k1 + depends: libevent 2.1.12 + depends: ccache 3.7.11 + depends: googletest 1.8.1 + depends: utfcpp 3.1.2 + depends: Use correct HOST for download-linux target + QA: Fix backporting bugs in httpbasics.py + depends: Boost 1.74.0 + depends: ccache 3.7.12 + cargo update + depends: ZeroMQ 4.3.3 + FFI: Merge librustzcash_init_zksnark_params variants into one function + depends: Postpone current and scheduled Rust releases until 2021 + MOVEONLY: Move logging code from util.{h,cpp} to new files + depends: Add Clang 8.0.0 + depends: Use vendored Clang for native compilation + depends: Use vendored Clang for macOS cross-compilation + depends: Vendor LLD and use it for linking + depends: Add libc++ as a dependency + depends: Don't replace default CXXFLAGS in C++ dependencies + depends: Add multilib paths for Linux cross-compile + build: Statically link libc++ + build: Add missing LIBUNIVALUE to Makefile.bench.include LDADD + depends: Fix "unused variables" warning when compiling zeromq for Windows + depends: Rename Boost libraries to follow MinGW/GCC convention + depends: Fix boost::iostreams usage on Windows with libc++ + build: Compile secp256k1 with C99 + build: Add -lpthread to univalue test LDFLAGS + qa: Disable FORTIFY_SOURCE checks + QA: Add native_clang and libcxx to updatecheck.py + test: Fix various pyflakes warnings + doc: Add Clang and libc++ migration to release notes + build: Update AX_CXX_COMPILE_STDCXX macro + build: Require and build with C++ 17 + depends: Build C++ dependencies with C++ 17 + Switch from std::random_shuffle to std::shuffle + Squashed 'src/secp256k1/' changes from 8ab24e8da..c6b6b8f1b + build: Update secp256k1 configure flags + Improve reject reasons for unmet shielded requirements + Add logging to CCoinsViewCache::HaveShieldedRequirements + utils: Remove unnecessary GetTempPath() + Add txid to "shielded requirements not met" messages + test/lint: Check for working changes before checking scripted diffs + tests: Update chained_joinsplits test for HaveShieldedRequirements API change + scripted-diff: Remove BOOST_STATIC_ASSERT + +Jeffrey Czyz (2): + Fix compilation errors in support/lockedpool.cpp + Fix segfault in allocator_tests/arena_tests + +Jeremy Rubin (1): + Fix subscript[0] potential bugs in key.cpp + +John Newbery (1): + [docs] document scripted-diff + +Jonas Schnelli (2): + NotifyBlockTip signal: switch from hash (uint256) to CBlockIndex* + Move uiInterface.NotifyBlockTip signal above the core/wallet signal + +Kaz Wesley (3): + LockedPool: test handling of invalid allocations + LockedPool: fix explosion for illegal-sized alloc + LockedPool: avoid quadratic-time allocation + +Kris Nuttycombe (14): + Prevent creation of shielded transactions in initial block download. + Revert the move of the `getBalanceZaddr` block for ease of review. + Fix forward declaration. + Remove redundant CheckBlock calls. + Reduce diff complexity. + Apply style suggestions from code review + -ibdskiptxverification must imply -checkpoints + Apply suggestions from code review + Ensure conflicting flags are reported as an error. + Reject incompatible flags in "Step 2" + Rename IBDSkipTxVerification back to ShouldCheckTransaction + Fix command-line help for -ibdskiptxverification + Fix invocation of updatecheck.py in make-release.py + Replace invalid characters in log message decoding. + +Larry Ruane (4): + Flush witness data when consistent (part 2) + performance: auto params = CChainParams::GetConsensus() + allow getaddressutxos if -lightwalletd + add z_gettreestate rpc + +Luke Dashjr (2): + lockedpool: When possible, use madvise to avoid including sensitive information in core dumps + Add MIT license to Makefiles + +Marco Falke (3): + Limit scope of all global std::once_flag + Add extra LevelDB source to Makefile + test: Move linters to test/lint, add readme + +Martin Ankerl (2): + Use best-fit strategy in Arena, now O(log(n)) instead O(n) + fix nits: variable naming, typos + +Mustafa (2): + Add a source file for unit test utils. + Move GetTempPath() to testutil. + +Nate Wilcox (3): + Link the README.md to the specific readthedocs.io page for building on Debian/Ubuntu. + Convert a sed command to a static patch file. + depends: fix a logging bug for multi-archive packages. + +Nick (1): + [RPC] Add transaction size to JSON output + +Pavel Janík (2): + Do not shadow variable, use deprecated MAP_ANON if MAP_ANONYMOUS is not defined. + Do not include env_win.cc on non-Windows systems + +Pieter Wuille (2): + Remove some unused functions and methods + Fail on commit with VERIFY SCRIPT but no scripted-diff + +Sean Bowe (6): + Update Rust to 1.44.1. + cargo update + Update to latest zcash_* and zkcrypto crates. + Postpone clang and libc++ dependency updates until after the 4.1.0 release. + make-release.py: Versioning changes for 4.1.0. + make-release.py: Updated manpages for 4.1.0. + +Taylor Hornby (3): + Fix buffer overflows in P2PKH tests + Add a missing % to a string interpolation in rpc test framework + Fix undefined behavior in the test_bitcoin tests + +Thomas Snider (1): + [trivial] Switched constants to sizeof() + +Vasil Dimov (1): + lockedpool: avoid sensitive data in core files (FreeBSD) + +Wladimir J. van der Laan (19): + wallet: Change CCrypter to use vectors with secure allocator + wallet: Get rid of LockObject and UnlockObject calls in key.h + support: Add LockedPool + rpc: Add `getmemoryinfo` call + bench: Add benchmark for lockedpool allocation/deallocation + http: Restrict maximum size of request line + headers + Replace scriptnum_test's normative ScriptNum implementation + build: remove libcrypto as internal dependency in libbitcoinconsensus.pc + http: Do a pending c++11 simplification + http: Add log message when work queue is full + http: Change boost::scoped_ptr to std::unique_ptr in HTTPRequest + http: use std::move to move HTTPRequest into HTTPWorkItem + Add fs.cpp/h + Replace includes of boost/filesystem.h with fs.h + Replace uses of boost::filesystem with fs + Use fsbridge for fopen and freopen + torcontrol: Use fs::path instead of std::string for private key path + Remove `namespace fs=fs` + test: Mention commit id in scripted diff error + +fanquake (8): + build: remove SSL lib detection + build: remove OpenSSL detection and libs + depends: remove OpenSSL package + doc: remove OpenSSL from build instructions and licensing info + depends: Disable unused ZeroMQ features + depends: zeromq: disable draft classes and methods + build: only pass --disable-dependency-tracking to packages that understand it + build: pass --enable-option-checking to applicable packages + +mruddy (1): + [depends, zmq, doc] avoid deprecated zeromq api functions + +practicalswift (7): + Fix out-of-bounds write in case of failing mmap(...) in PosixLockedPageAllocator::AllocateLocked + Improve readability by removing redundant casts to same type (on all platforms) + tests: Remove OldSetKeyFromPassphrase/OldEncrypt/OldDecrypt + Remove unused Boost includes + Add "export LC_ALL=C" to all shell scripts + Add error handling: exit if cd fails + Use bash instead of POSIX sh. POSIX sh does not support arrays. + +Jack Grigg (9): + Update license headers + leveldb: Fix typo + LockedPool: Switch to HTTPS URLs in licenses and comments + test: Fix LFSR period in comments + httpserver: Code style cleanups + depends: Update packages documentation for Zcash + depends: Add untested note to FreeBSD host + Update example scripted-diff comit in doc/developer-notes.md + Use HTTPS in script license headers + +syd (1): + Add assert_raises_message to the python test framework. + +Ying Tong Lai (11): + Add funding stream addresses to getblocksubsidy RPC output + Fix CScript encoding + Handle shielded address case + Minor cleanups + Only return address instead of CScript + Remove void declaration of ScriptPubKeyToJSON() + Postpone native_ccache 4.0 + make-release.py: Versioning changes for 4.1.0-rc1. + make-release.py: Updated manpages for 4.1.0-rc1. + make-release.py: Updated release notes and changelog for 4.1.0-rc1. + Update release-notes-4.1.0-rc1.md + +ying tong (1): + Apply suggestions from code review + +Benjamin Winston (1): + Postponed dependency updates, refer to core team sync meeting. diff --git a/doc/release-notes/release-notes-4.1.1.md b/doc/release-notes/release-notes-4.1.1.md new file mode 100644 index 000000000..46793955d --- /dev/null +++ b/doc/release-notes/release-notes-4.1.1.md @@ -0,0 +1,156 @@ +Notable changes +=============== + +Optimize release build +---------------------- +The release build now sets CLAGS/CXXFLAGS to use the -O3 optimization +option, which turns on more optimization flags than the previously used +-O1. This produces a faster build, addressing a performance regression in +v4.1.0. + +Correctly report Founders' Reward amount in `getblocktemplate` +-------------------------------------------------------------- +This release correctly returns the `foundersreward` field from `getblocktemplate` +output pre-Canopy and removes the field post-Canopy. (The Founders' Reward will +expire exactly as Canopy activates, as specified in [ZIP 207](https://zips.z.cash/zip-0207).) +To obtain information about funding stream amounts, use `getblocksubsidy HEIGHT`, +passing in the height returned by the `getblocktemplate` API. + +Changelog +========= + +Akio Nakamura (1): + [script] lint-whitespace: improve print linenumber + +Alfredo Garcia (1): + add myblockhash parameter to getrawtransaction + +Daira Hopwood (3): + Wording improvements to getrawtransaction RPC documentation + GetNextWorkRequired: clarify why this computation is equivalent to that in the protocol spec. refs https://github.com/zcash/zips/pull/418 + Set release CFLAGS/CXXFLAGS to use -O3. + +Dan Raviv (1): + Fix header guards using reserved identifiers + +DesWurstes (1): + Obsolete #!/bin/bash shebang + +Evan Klitzke (1): + Add a lint check for trailing whitespace. + +Jack Grigg (14): + lints: Use Zcash-specific include guards for new files + lints: Update expected Boost imports + lints: Match `export LC_ALL="C"` in lint-shell-locale + test: Fix pyflakes warning in bitcoin-util-test.py + lint: Fix missing or inconsistent include guards + lint: Fix duplicate includes + python: Explicitly set encoding to utf8 when opening text files + lint: Use consistent shebangs + lint: Opt out of locale dependence in Zcash shell scripts + lint: Re-exclude subtrees from lint-include-guards.sh + lint: Apply include guard style to src/rust/include + lint: s/trim/lenTrim in src/crypto/equihash.[cpp,h] + lint: Fix minor shellcheck lints + cargo update + +John Newbery (4): + [contrib] convert test-security-check to python3 + Clean up bctest.py and bitcoin-util-test.py + Improve logging in bctest.py if there is a formatting mismatch + [linter] Strip trailing / in path for git-subtree-check + +João Barbosa (1): + qa: Ignore shellcheck warning SC2236 + +Julian Fleischer (3): + fix locale for lint-shell + use export LC_ALL=C.UTF-8 + Run all lint scripts + +Kris Nuttycombe (6): + Change order of checks to skip IsInitialBlockDownload check if flag is unset. + Correctly report founder's reward amount in getblocktemplate prior to Canopy + Document how to get block subsidy information in getblocktemplate. + Update getblocktemplate documentation. + make-release.py: Versioning changes for 4.1.1. + make-release.py: Updated manpages for 4.1.1. + +Kristaps Kaupe (1): + Make lint-includes.sh work from any directory + +Marco Falke (4): + devtools: Exclude patches from lint-whitespace + Refine travis check for duplicate includes + test: Move linters to test/lint, add readme + Revert "Remove unused variable in shell script" + +MeshCollider (1): + Add tab char lint check and exclude imported dependencies + +Philip Kaufmann (1): + [Trivial] ensure minimal header conventions + +Pieter Wuille (1): + Improve git-subtree-check.sh + +Sjors Provoost (3): + [scripts] lint-whitespace: use perl instead of grep -P + [scripts] lint-whitespace: check last N commits or unstaged changes + doc: improve subtree check instructions + +Vidar Holen (1): + refactor/lint: Add ignored suggestions to an array + +Wladimir J. van der Laan (4): + contrib: Ignore historical release notes for whitespace check + test: Add format-dependent comparison to bctest + test: Explicitly set encoding to utf8 when opening text files + uint256: replace sprintf with HexStr and reverse-iterator + +adityapk00 (1): + Don't compile ehHashState::* if mining is disabled + +isle2983 (1): + [copyright] add MIT license headers to .sh scripts where missing + +jnewbery (5): + Add bitcoin-tx JSON tests + Add option to run bitcoin-util-test.py manually + bitcoin-util-test.py should fail if the output file is empty + add verbose mode to bitcoin-util-test.py + Add logging to bitcoin-util-test.py + +practicalswift (20): + Document include guard convention + Fix missing or inconsistent include guards + Add lint-include-guards.sh which checks include guard consistency + Add Travis check for duplicate includes + Add shell script linting: Check for shellcheck warnings in shell scripts + add lint tool to check python3 shebang + build: Guard against accidental introduction of new Boost dependencies + build: Add linter for checking accidental locale dependence + docs: Mention lint-locale-dependence.sh in developer-notes.md + Add "export LC_ALL=C" to all shell scripts + Add linter: Make sure all shell scripts opt out of locale dependence using "export LC_ALL=C" + Explicitly specify encoding when opening text files in Python code + Add linter: Make sure we explicitly open all text files using UTF-8 or ASCII encoding in Python + macOS fix: Work around empty (sub)expression error when using BSD grep + macOS fix: Add excludes for checks added in the newer shellcheck version installed by brew + Remove repeated suppression. Fix indentation. + Fix warnings introduced in shellcheck v0.6.0 + Remove no longer needed shellcheck suppressions + Follow-up to #13454: Fix broken build by exporting LC_ALL=C + Remove unused variables in shell scripts. + +Jack Grigg (5): + Small documentation fixes + lints: Add a missing copyright header + lint: Allow stoi in src/rpc/blockchain.cpp + lint: Remove some subtrees from exclusion + doc: Adjust subtree developer notes to refer to Zcash + +vim88 (1): + Scripts and tools & Docs: Used #!/usr/bin/env bash instead of obsolete #!/bin/bash, added linting for .sh files shebang and updated the Developer Notes. + diff --git a/doc/release-process.md b/doc/release-process.md index 44d43364f..3bfec0b3a 100644 --- a/doc/release-process.md +++ b/doc/release-process.md @@ -26,6 +26,16 @@ Ensure that new performance metrics appear on that site. Update `src/chainparams.cpp` nMinimumChainWork with information from the getblockchaininfo rpc. +Check that dependencies are up-to-date or have been postponed: + +``` +$ ./qa/zcash/updatecheck.py +``` + +If there are updates that have not been postponed, review their changelogs +for urgent security fixes, and if there aren't any, postpone the update by +adding a line to `qa/zcash/postponed-updates.txt`. + ### Protocol Safety Checks: If this release changes the behavior of the protocol or fixes a serious diff --git a/doc/zmq.md b/doc/zmq.md index f75566dc4..e7e5469bf 100644 --- a/doc/zmq.md +++ b/doc/zmq.md @@ -33,9 +33,10 @@ buffering or reassembly. ## Prerequisites -The ZeroMQ feature in Zcash requires ZeroMQ API version 4.x or -newer, which you will need to install if you are not using the depends -system. Typically, it is packaged by distributions as something like +The ZeroMQ feature in Zcash requires the ZeroMQ API >= 4.0.0 +[libzmq](https://github.com/zeromq/libzmq/releases), which you will +need to install if you are not using the depends system. +Typically, it is packaged by distributions as something like *libzmq5-dev*. The C++ wrapper for ZeroMQ is *not* needed. In order to run the example Python client scripts in contrib/ one must diff --git a/libzcashconsensus.pc.in b/libzcashconsensus.pc.in index 5cb2d05e3..7391bb9da 100644 --- a/libzcashconsensus.pc.in +++ b/libzcashconsensus.pc.in @@ -8,4 +8,3 @@ Description: Library for the Zcash consensus protocol. Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lzcashconsensus Cflags: -I${includedir} -Requires.private: libcrypto diff --git a/qa/pull-tester/rpc-tests.sh b/qa/pull-tester/rpc-tests.sh index 5ff4752c0..b0dc2ec88 100755 --- a/qa/pull-tester/rpc-tests.sh +++ b/qa/pull-tester/rpc-tests.sh @@ -18,6 +18,7 @@ testScripts=( 'wallet_changeaddresses.py' 'wallet_changeindicator.py' 'wallet_import_export.py' + 'wallet_sendmany_any_taddr.py' 'wallet_shieldingcoinbase.py' 'wallet_shieldcoinbase_sprout.py' 'wallet_shieldcoinbase_sapling.py' @@ -82,11 +83,15 @@ testScripts=( 'sprout_sapling_migration.py' 'turnstile.py' 'mining_shielded_coinbase.py' + 'coinbase_funding_streams.py' 'framework.py' 'sapling_rewind_check.py' 'feature_zip221.py' 'upgrade_golden.py' 'post_heartwood_rollback.py' + 'feature_logging.py' + 'remove_sprout_shielding.py' + 'feature_walletfile.py' ); testScriptsExt=( 'getblocktemplate_longpoll.py' @@ -104,16 +109,13 @@ testScriptsExt=( 'invalidblockrequest.py' # 'forknotify.py' 'p2p-acceptblock.py' + 'wallet_db_flush.py' ); if [ "x$ENABLE_ZMQ" = "x1" ]; then testScripts+=('zmq_test.py') fi -if [ "x$ENABLE_PROTON" = "x1" ]; then - testScripts+=('proton_test.py') -fi - extArg="-extended" passOn=${@#$extArg} diff --git a/qa/pull-tester/tests-config.sh.in b/qa/pull-tester/tests-config.sh.in index 6dc511432..6386a8c48 100755 --- a/qa/pull-tester/tests-config.sh.in +++ b/qa/pull-tester/tests-config.sh.in @@ -11,7 +11,6 @@ EXEEXT="@EXEEXT@" @BUILD_BITCOIN_UTILS_TRUE@ENABLE_UTILS=1 @BUILD_BITCOIND_TRUE@ENABLE_BITCOIND=1 @ENABLE_ZMQ_TRUE@ENABLE_ZMQ=1 -@ENABLE_PROTON_TRUE@ENABLE_PROTON=1 REAL_BITCOIND="$BUILDDIR/src/zcashd${EXEEXT}" REAL_BITCOINCLI="$BUILDDIR/src/zcash-cli${EXEEXT}" diff --git a/qa/rpc-tests/addressindex.py b/qa/rpc-tests/addressindex.py index 30198a38a..0ed542923 100755 --- a/qa/rpc-tests/addressindex.py +++ b/qa/rpc-tests/addressindex.py @@ -10,7 +10,7 @@ # getaddresstxids # getaddressbalance # getaddressdeltas -# getaddressutxos - available only for insightexplorer +# getaddressutxos # getaddressmempool @@ -338,7 +338,7 @@ class AddressIndexTest(BitcoinTestFramework): assert_equal(deltas_info['end']['hash'], block_hash) # Test getaddressutxos by comparing results with deltas - utxos = self.nodes[1].getaddressutxos(addr1) + utxos = self.nodes[3].getaddressutxos(addr1) # The value 4 note was spent, so won't show up in the utxo list, # so for comparison, remove the 4 (and -4 for output) from the diff --git a/qa/rpc-tests/blockchain.py b/qa/rpc-tests/blockchain.py index f024cc07e..cea3267e8 100755 --- a/qa/rpc-tests/blockchain.py +++ b/qa/rpc-tests/blockchain.py @@ -40,11 +40,11 @@ class BlockchainTest(BitcoinTestFramework): node = self.nodes[0] res = node.gettxoutsetinfo() - assert_equal(res['total_amount'], decimal.Decimal('2181.25000000')) # 150*12.5 + 49*6.25 + assert_equal(res['total_amount'], decimal.Decimal('2143.75000000')) # 144*12.5 + 55*6.25 assert_equal(res['transactions'], 200) assert_equal(res['height'], 200) - assert_equal(res['txouts'], 349) # 150*2 + 49 - assert_equal(res['bytes_serialized'], 14951), # 32*199 + 48*90 + 49*60 + 27*49 + assert_equal(res['txouts'], 343) # 144*2 + 55 + assert_equal(res['bytes_serialized'], 14819), # 32*199 + 48*90 + 49*54 + 27*55 assert_equal(len(res['bestblock']), 64) assert_equal(len(res['hash_serialized']), 64) diff --git a/qa/rpc-tests/coinbase_funding_streams.py b/qa/rpc-tests/coinbase_funding_streams.py new file mode 100755 index 000000000..31c081e90 --- /dev/null +++ b/qa/rpc-tests/coinbase_funding_streams.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python3 +# Copyright (c) 2020 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.mininode import ( + nuparams, + fundingstream, +) +from test_framework.util import ( + assert_equal, + bitcoind_processes, + connect_nodes, + initialize_chain_clean, + start_node, + BLOSSOM_BRANCH_ID, + HEARTWOOD_BRANCH_ID, + CANOPY_BRANCH_ID, +) + +class CoinbaseFundingStreamsTest (BitcoinTestFramework): + def setup_chain(self): + print("Initializing test directory "+self.options.tmpdir) + initialize_chain_clean(self.options.tmpdir, 4) + + def start_node_with(self, index, extra_args=[]): + args = [ + nuparams(BLOSSOM_BRANCH_ID, 1), + nuparams(HEARTWOOD_BRANCH_ID, 2), + nuparams(CANOPY_BRANCH_ID, 5), + "-nurejectoldversions=false", + ] + return start_node(index, self.options.tmpdir, args + extra_args) + + def setup_network(self, split=False): + self.nodes = [] + self.nodes.append(self.start_node_with(0)) + self.nodes.append(self.start_node_with(1)) + connect_nodes(self.nodes[1], 0) + self.is_network_split=False + self.sync_all() + + def run_test (self): + # Generate a shielded address for node 1 for miner rewards, + miner_addr = self.nodes[1].z_getnewaddress('sapling') + + # Generate a shielded address (belonging to node 0) for funding stream + # rewards. + fs_addr = self.nodes[0].z_getnewaddress('sapling') + + # Generate past heartwood activation we won't need node 1 from this + # point onward except to check miner reward balances + self.nodes[1].generate(2) + self.sync_all() + + # Restart node 0 with funding streams. + self.nodes[0].stop() + bitcoind_processes[0].wait() + self.nodes[0] = self.start_node_with(0, [ + "-mineraddress=%s" % miner_addr, + "-minetolocalwallet=0", + fundingstream(0, 5, 9, [fs_addr, fs_addr, fs_addr]), + fundingstream(1, 5, 9, [fs_addr, fs_addr, fs_addr]), + fundingstream(2, 5, 9, [fs_addr, fs_addr, fs_addr]), + ]) + connect_nodes(self.nodes[1], 0) + self.sync_all() + + print("Generate to just prior to Canopy activation") + self.nodes[0].generate(2) + self.sync_all() + + # All miner addresses belong to node 1; check balances + walletinfo = self.nodes[1].getwalletinfo() + assert_equal(walletinfo['immature_balance'], 10) + assert_equal(walletinfo['balance'], 0) + assert_equal(self.nodes[1].z_getbalance(miner_addr, 0), 10) + assert_equal(self.nodes[1].z_getbalance(miner_addr), 10) + + print("Activating Canopy") + self.nodes[0].generate(4) + self.sync_all() + + # check that miner payments made it to node 1's wallet + walletinfo = self.nodes[1].getwalletinfo() + assert_equal(walletinfo['immature_balance'], 10) + assert_equal(walletinfo['balance'], 0) + assert_equal(self.nodes[1].z_getbalance(miner_addr, 0), 30) + assert_equal(self.nodes[1].z_getbalance(miner_addr), 30) + + # check that the node 0 private balance has been augmented by the + # funding stream payments + assert_equal(self.nodes[0].z_getbalance(fs_addr, 0), 5) + assert_equal(self.nodes[0].z_getbalance(fs_addr), 5) + assert_equal(self.nodes[0].z_gettotalbalance()['private'], '5.00') + assert_equal(self.nodes[0].z_gettotalbalance()['total'], '5.00') + +if __name__ == '__main__': + CoinbaseFundingStreamsTest().main() + diff --git a/qa/rpc-tests/feature_logging.py b/qa/rpc-tests/feature_logging.py new file mode 100755 index 000000000..cbb49ca96 --- /dev/null +++ b/qa/rpc-tests/feature_logging.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +# Copyright (c) 2017 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +"""Test debug logging.""" + +import os + +from test_framework.util import start_node, stop_node, assert_start_raises_init_error + +from test_framework.test_framework import BitcoinTestFramework + +class LoggingTest(BitcoinTestFramework): + def set_test_params(self): + self.num_nodes = 1 + self.setup_clean_chain = True + + def run_test(self): + # test default log file name + assert os.path.isfile(os.path.join(self.options.tmpdir, "node0", "regtest", "debug.log")) + + # test alternative log file name in datadir + stop_node(self.nodes[0], 0) + self.nodes[0] = start_node(0, self.options.tmpdir, ["-debuglogfile=foo.log"]) + assert os.path.isfile(os.path.join(self.options.tmpdir, "node0", "regtest", "foo.log")) + + # test alternative log file name outside datadir + tempname = os.path.join(self.options.tmpdir, "foo.log") + stop_node(self.nodes[0], 0) + self.nodes[0] = start_node(0, self.options.tmpdir, ["-debuglogfile=%s" % tempname]) + assert os.path.isfile(tempname) + + # check that invalid log (relative) will cause error + invdir = os.path.join(self.options.tmpdir, "node0", "regtest", "foo") + invalidname = os.path.join("foo", "foo.log") + stop_node(self.nodes[0], 0) + assert_start_raises_init_error(0, "-debuglogfile=%s" % (invalidname), + "Error: Could not open debug log file") + assert not os.path.isfile(os.path.join(invdir, "foo.log")) + + # check that invalid log (relative) works after path exists + os.mkdir(invdir) + self.nodes[0] = start_node(0, self.options.tmpdir, ["-debuglogfile=%s" % (invalidname)]) + assert os.path.isfile(os.path.join(invdir, "foo.log")) + + # check that invalid log (absolute) will cause error + stop_node(self.nodes[0], 0) + invdir = os.path.join(self.options.tmpdir, "foo") + invalidname = os.path.join(invdir, "foo.log") + assert_start_raises_init_error(0, "-debuglogfile=%s" % invalidname, + "Error: Could not open debug log file") + + # check that invalid log (absolute) works after path exists + os.mkdir(invdir) + self.nodes[0] = start_node(0, self.options.tmpdir, ["-debuglogfile=%s" % invalidname]) + assert os.path.isfile(os.path.join(invdir, "foo.log")) + +if __name__ == '__main__': + LoggingTest().main() diff --git a/qa/rpc-tests/feature_walletfile.py b/qa/rpc-tests/feature_walletfile.py new file mode 100755 index 000000000..61404414b --- /dev/null +++ b/qa/rpc-tests/feature_walletfile.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +# Copyright (c) 2017 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +"""Test wallet file location.""" + +import os + +from test_framework.util import start_node, stop_node, assert_start_raises_init_error + +from test_framework.test_framework import BitcoinTestFramework + +class WalletFileTest(BitcoinTestFramework): + def set_test_params(self): + self.num_nodes = 1 + self.setup_clean_chain = True + + def run_test(self): + # test default wallet location + assert os.path.isfile(os.path.join(self.options.tmpdir, "node0", "regtest", "wallet.dat")) + + # test alternative wallet file name in datadir + stop_node(self.nodes[0], 0) + self.nodes[0] = start_node(0, self.options.tmpdir, ["-wallet=altwallet.dat"]) + assert os.path.isfile(os.path.join(self.options.tmpdir, "node0", "regtest", "altwallet.dat")) + + # test wallet file outside datadir + tempname = os.path.join(self.options.tmpdir, "outsidewallet.dat") + stop_node(self.nodes[0], 0) + self.nodes[0] = start_node(0, self.options.tmpdir, ["-wallet=%s" % tempname]) + assert os.path.isfile(tempname) + + # test the case where absolute path does not exist + assert not os.path.isdir("/this_directory_must_not_exist") + invalidpath = os.path.join("/this_directory_must_not_exist/", "foo.dat") + stop_node(self.nodes[0], 0) + assert_start_raises_init_error(0, "-wallet=%s" % invalidpath, + "Error: Absolute path %s does not exist") + + # relative path does not exist + invalidpath = os.path.join("wallet", "foo.dat") + assert_start_raises_init_error(0, "-wallet=%s" % invalidpath, + "Error: Relative path %s does not exist") + + # create dir and retry + os.mkdir(os.path.join(self.options.tmpdir, "node0", "regtest", "wallet")) + self.nodes[0] = start_node(0, self.options.tmpdir, ["-wallet=%s" % invalidpath]) + +if __name__ == '__main__': + WalletFileTest().main() diff --git a/qa/rpc-tests/finalsaplingroot.py b/qa/rpc-tests/finalsaplingroot.py index 568111f6f..25332f141 100755 --- a/qa/rpc-tests/finalsaplingroot.py +++ b/qa/rpc-tests/finalsaplingroot.py @@ -16,6 +16,7 @@ from test_framework.util import ( from decimal import Decimal +SPROUT_TREE_EMPTY_ROOT = "59d2cde5e65c1414c32ba54f0fe4bdb3d67618125286e6a191317917c812c6d7" SAPLING_TREE_EMPTY_ROOT = "3e49b5f954aa9d3545bc6c37744661eea48d7c34e3000d82b7f0010c30f4c2fb" NULL_FIELD = "0000000000000000000000000000000000000000000000000000000000000000" @@ -45,6 +46,19 @@ class FinalSaplingRootTest(BitcoinTestFramework): # Verfify genesis block contains null field for what is now called the final sapling root field. blk = self.nodes[0].getblock("0") assert_equal(blk["finalsaplingroot"], NULL_FIELD) + treestate = self.nodes[0].z_gettreestate("0") + assert_equal(treestate["height"], 0) + assert_equal(treestate["hash"], self.nodes[0].getblockhash(0)) + + assert_equal(treestate["sprout"]["commitments"]["finalRoot"], SPROUT_TREE_EMPTY_ROOT) + assert_equal(treestate["sprout"]["commitments"]["finalState"], "000000") + assert("skipHash" not in treestate["sprout"]) + + assert_equal(treestate["sapling"]["commitments"]["finalRoot"], NULL_FIELD) + # There is no sapling state tree yet, and trying to find it in an earlier + # block won't succeed (we're at genesis block), so skipHash is absent. + assert("finalState" not in treestate["sapling"]) + assert("skipHash" not in treestate["sapling"]) # Verify all generated blocks contain the empty root of the Sapling tree. blockcount = self.nodes[0].getblockcount() @@ -52,6 +66,18 @@ class FinalSaplingRootTest(BitcoinTestFramework): blk = self.nodes[0].getblock(str(height)) assert_equal(blk["finalsaplingroot"], SAPLING_TREE_EMPTY_ROOT) + treestate = self.nodes[0].z_gettreestate(str(height)) + assert_equal(treestate["height"], height) + assert_equal(treestate["hash"], self.nodes[0].getblockhash(height)) + + assert("skipHash" not in treestate["sprout"]) + assert_equal(treestate["sprout"]["commitments"]["finalRoot"], SPROUT_TREE_EMPTY_ROOT) + assert_equal(treestate["sprout"]["commitments"]["finalState"], "000000") + + assert("skipHash" not in treestate["sapling"]) + assert_equal(treestate["sapling"]["commitments"]["finalRoot"], SAPLING_TREE_EMPTY_ROOT) + assert_equal(treestate["sapling"]["commitments"]["finalState"], "000000") + # Node 0 shields some funds taddr0 = get_coinbase_address(self.nodes[0]) saplingAddr0 = self.nodes[0].z_getnewaddress('sapling') @@ -74,6 +100,17 @@ class FinalSaplingRootTest(BitcoinTestFramework): result = self.nodes[0].getrawtransaction(mytxid, 1) assert_equal(len(result["vShieldedOutput"]), 1) + # Since there is a now sapling shielded input in the blockchain, + # the sapling values should have changed + new_treestate = self.nodes[0].z_gettreestate(str(-1)) + assert_equal(new_treestate["sapling"]["commitments"]["finalRoot"], root) + assert_equal(new_treestate["sprout"], treestate["sprout"]) + assert(new_treestate["sapling"]["commitments"]["finalRoot"] != treestate["sapling"]["commitments"]["finalRoot"]) + assert(new_treestate["sapling"]["commitments"]["finalState"] != treestate["sapling"]["commitments"]["finalState"]) + assert_equal(len(new_treestate["sapling"]["commitments"]["finalRoot"]), 64) + assert_equal(len(new_treestate["sapling"]["commitments"]["finalState"]), 70) + treestate = new_treestate + # Mine an empty block and verify the final Sapling root does not change self.sync_all() self.nodes[0].generate(1) @@ -107,6 +144,15 @@ class FinalSaplingRootTest(BitcoinTestFramework): assert_equal(self.nodes[1].z_getbalance(zaddr1), Decimal("10")) assert_equal(root, self.nodes[0].getblock("204")["finalsaplingroot"]) + new_treestate = self.nodes[0].z_gettreestate(str(-1)) + assert_equal(new_treestate["sapling"]["commitments"]["finalRoot"], root) + assert_equal(new_treestate["sapling"], treestate["sapling"]) + assert(new_treestate["sprout"]["commitments"]["finalRoot"] != treestate["sprout"]["commitments"]["finalRoot"]) + assert(new_treestate["sprout"]["commitments"]["finalState"] != treestate["sprout"]["commitments"]["finalState"]) + assert_equal(len(new_treestate["sprout"]["commitments"]["finalRoot"]), 64) + assert_equal(len(new_treestate["sprout"]["commitments"]["finalState"]), 134) + treestate = new_treestate + # Mine a block with a Sapling shielded recipient and verify the final Sapling root changes saplingAddr1 = self.nodes[1].z_getnewaddress("sapling") recipients = [] @@ -126,6 +172,14 @@ class FinalSaplingRootTest(BitcoinTestFramework): result = self.nodes[0].getrawtransaction(mytxid, 1) assert_equal(len(result["vShieldedOutput"]), 2) # there is Sapling shielded change + new_treestate = self.nodes[0].z_gettreestate(str(-1)) + assert_equal(new_treestate["sprout"], treestate["sprout"]) + assert(new_treestate["sapling"]["commitments"]["finalRoot"] != treestate["sapling"]["commitments"]["finalRoot"]) + assert(new_treestate["sapling"]["commitments"]["finalState"] != treestate["sapling"]["commitments"]["finalState"]) + assert_equal(len(new_treestate["sapling"]["commitments"]["finalRoot"]), 64) + assert_equal(len(new_treestate["sapling"]["commitments"]["finalState"]), 136) + treestate = new_treestate + # Mine a block with a Sapling shielded sender and transparent recipient and verify the final Sapling root doesn't change taddr2 = self.nodes[0].getnewaddress() recipients = [] @@ -144,6 +198,10 @@ class FinalSaplingRootTest(BitcoinTestFramework): root = blk["finalsaplingroot"] assert_equal(root, self.nodes[0].getblock("205")["finalsaplingroot"]) + new_treestate = self.nodes[0].z_gettreestate(str(-1)) + assert_equal(new_treestate["sprout"], treestate["sprout"]) + assert_equal(new_treestate["sapling"], treestate["sapling"]) + if __name__ == '__main__': FinalSaplingRootTest().main() diff --git a/qa/rpc-tests/forknotify.py b/qa/rpc-tests/forknotify.py index 013c5f35a..195d64103 100755 --- a/qa/rpc-tests/forknotify.py +++ b/qa/rpc-tests/forknotify.py @@ -19,7 +19,7 @@ class ForkNotifyTest(BitcoinTestFramework): def setup_network(self): self.nodes = [] self.alert_filename = os.path.join(self.options.tmpdir, "alert.txt") - with open(self.alert_filename, 'w'): + with open(self.alert_filename, 'w', encoding='utf8'): pass # Just open then close to create zero-length file self.nodes.append(start_node(0, self.options.tmpdir, ["-blockversion=2", "-alertnotify=echo %s >> \"" + self.alert_filename + "\""])) @@ -41,7 +41,7 @@ class ForkNotifyTest(BitcoinTestFramework): self.nodes[1].generate(1) self.sync_all() - with open(self.alert_filename, 'r') as f: + with open(self.alert_filename, 'r', encoding='utf8') as f: alert_text = f.read() if len(alert_text) == 0: @@ -53,7 +53,7 @@ class ForkNotifyTest(BitcoinTestFramework): self.nodes[1].generate(1) self.sync_all() - with open(self.alert_filename, 'r') as f: + with open(self.alert_filename, 'r', encoding='utf8') as f: alert_text2 = f.read() if alert_text != alert_text2: diff --git a/qa/rpc-tests/hardforkdetection.py b/qa/rpc-tests/hardforkdetection.py index 78735beb4..01374573f 100755 --- a/qa/rpc-tests/hardforkdetection.py +++ b/qa/rpc-tests/hardforkdetection.py @@ -17,7 +17,7 @@ class HardForkDetectionTest(BitcoinTestFramework): def setup_network(self): self.nodes = [] self.alert_filename = os.path.join(self.options.tmpdir, "alert.txt") - with open(self.alert_filename, 'w'): + with open(self.alert_filename, 'w', encoding='utf8'): pass # Just open then close to create zero-length file self.nodes.append(start_node(0, self.options.tmpdir, ["-blockversion=2", "-alertnotify=echo %s >> \"" + self.alert_filename + "\""])) @@ -48,7 +48,7 @@ class HardForkDetectionTest(BitcoinTestFramework): self.assert_safemode_on("We do not appear to fully agree with our peers!") # Check that an -alertnotify was triggered. - with open(self.alert_filename, 'r') as f: + with open(self.alert_filename, 'r', encoding='utf8') as f: alert_text = f.read() if len(alert_text) == 0: diff --git a/qa/rpc-tests/httpbasics.py b/qa/rpc-tests/httpbasics.py index 47de2b75b..bd78684ca 100755 --- a/qa/rpc-tests/httpbasics.py +++ b/qa/rpc-tests/httpbasics.py @@ -10,7 +10,7 @@ from test_framework.test_framework import BitcoinTestFramework from test_framework.util import assert_equal, start_nodes, str_to_b64str -from http.client import HTTPConnection +from http.client import HTTPConnection, BAD_REQUEST, NOT_FOUND from urllib.parse import urlparse class HTTPBasicsTest (BitcoinTestFramework): @@ -90,5 +90,19 @@ class HTTPBasicsTest (BitcoinTestFramework): assert_equal(b'"error":null' in out1, True) assert_equal(conn.sock!=None, True) # connection must be closed because bitcoind should use keep-alive by default + # Check excessive request size + conn = HTTPConnection(urlNode2.hostname, urlNode2.port) + conn.connect() + conn.request('GET', '/' + ('x'*1000), '', headers) + out1 = conn.getresponse() + assert_equal(out1.status, NOT_FOUND) + + conn = HTTPConnection(urlNode2.hostname, urlNode2.port) + conn.connect() + conn.request('GET', '/' + ('x'*10000), '', headers) + out1 = conn.getresponse() + assert_equal(out1.status, BAD_REQUEST) + + if __name__ == '__main__': HTTPBasicsTest().main() diff --git a/qa/rpc-tests/listtransactions.py b/qa/rpc-tests/listtransactions.py index 00e17a989..6d14a3344 100755 --- a/qa/rpc-tests/listtransactions.py +++ b/qa/rpc-tests/listtransactions.py @@ -38,28 +38,29 @@ class ListTransactionsTest(BitcoinTestFramework): self.sync_all() check_array_result(self.nodes[0].listtransactions(), {"txid":txid}, - {"category":"send","account":"","amount":Decimal("-0.1"),"confirmations":0}) + {"category":"send","account":"","amount":Decimal("-0.1"),"amountZat":-10000000,"confirmations":0}) check_array_result(self.nodes[1].listtransactions(), {"txid":txid}, - {"category":"receive","account":"","amount":Decimal("0.1"),"confirmations":0}) + {"category":"receive","account":"","amount":Decimal("0.1"),"amountZat":10000000,"confirmations":0}) + # mine a block, confirmations should change: self.nodes[0].generate(1) self.sync_all() check_array_result(self.nodes[0].listtransactions(), {"txid":txid}, - {"category":"send","account":"","amount":Decimal("-0.1"),"confirmations":1}) + {"category":"send","account":"","amount":Decimal("-0.1"),"amountZat":-10000000,"confirmations":1}) check_array_result(self.nodes[1].listtransactions(), {"txid":txid}, - {"category":"receive","account":"","amount":Decimal("0.1"),"confirmations":1}) + {"category":"receive","account":"","amount":Decimal("0.1"),"amountZat":10000000,"confirmations":1}) # send-to-self: txid = self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 0.2) check_array_result(self.nodes[0].listtransactions(), {"txid":txid, "category":"send"}, - {"amount":Decimal("-0.2")}) + {"amount":Decimal("-0.2"),"amountZat":-20000000}) check_array_result(self.nodes[0].listtransactions(), {"txid":txid, "category":"receive"}, - {"amount":Decimal("0.2")}) + {"amount":Decimal("0.2"),"amountZat":20000000}) # sendmany from node1: twice to self, twice to node2: send_to = { self.nodes[0].getnewaddress() : 0.11, @@ -69,28 +70,28 @@ class ListTransactionsTest(BitcoinTestFramework): txid = self.nodes[1].sendmany("", send_to) self.sync_all() check_array_result(self.nodes[1].listtransactions(), - {"category":"send","amount":Decimal("-0.11")}, + {"category":"send","amount":Decimal("-0.11"),"amountZat":-11000000}, {"txid":txid} ) check_array_result(self.nodes[0].listtransactions(), - {"category":"receive","amount":Decimal("0.11")}, + {"category":"receive","amount":Decimal("0.11"),"amountZat":11000000}, {"txid":txid} ) check_array_result(self.nodes[1].listtransactions(), - {"category":"send","amount":Decimal("-0.22")}, + {"category":"send","amount":Decimal("-0.22"),"amountZat":-22000000}, {"txid":txid} ) check_array_result(self.nodes[1].listtransactions(), - {"category":"receive","amount":Decimal("0.22")}, + {"category":"receive","amount":Decimal("0.22"),"amountZat":22000000}, {"txid":txid} ) check_array_result(self.nodes[1].listtransactions(), - {"category":"send","amount":Decimal("-0.33")}, + {"category":"send","amount":Decimal("-0.33"),"amountZat":-33000000}, {"txid":txid} ) check_array_result(self.nodes[0].listtransactions(), - {"category":"receive","amount":Decimal("0.33")}, + {"category":"receive","amount":Decimal("0.33"),"amountZat":33000000}, {"txid":txid, "account" : ""} ) check_array_result(self.nodes[1].listtransactions(), - {"category":"send","amount":Decimal("-0.44")}, + {"category":"send","amount":Decimal("-0.44"),"amountZat":-44000000}, {"txid":txid, "account" : ""} ) check_array_result(self.nodes[1].listtransactions(), - {"category":"receive","amount":Decimal("0.44")}, + {"category":"receive","amount":Decimal("0.44"),"amountZat":44000000}, {"txid":txid, "account" : ""} ) multisig = self.nodes[1].createmultisig(1, [self.nodes[1].getnewaddress()]) @@ -100,9 +101,8 @@ class ListTransactionsTest(BitcoinTestFramework): self.sync_all() assert(len(self.nodes[0].listtransactions("watchonly", 100, 0, False)) == 0) check_array_result(self.nodes[0].listtransactions("watchonly", 100, 0, True), - {"category":"receive","amount":Decimal("0.1")}, + {"category":"receive","amount":Decimal("0.1"),"amountZat":10000000}, {"txid":txid, "account" : "watchonly"} ) if __name__ == '__main__': ListTransactionsTest().main() - diff --git a/qa/rpc-tests/mining_shielded_coinbase.py b/qa/rpc-tests/mining_shielded_coinbase.py index 64b73c772..bef3493be 100755 --- a/qa/rpc-tests/mining_shielded_coinbase.py +++ b/qa/rpc-tests/mining_shielded_coinbase.py @@ -6,7 +6,10 @@ from decimal import Decimal from test_framework.authproxy import JSONRPCException from test_framework.test_framework import BitcoinTestFramework +from test_framework.mininode import nuparams from test_framework.util import ( + BLOSSOM_BRANCH_ID, + HEARTWOOD_BRANCH_ID, assert_equal, assert_raises, bitcoind_processes, @@ -25,8 +28,8 @@ class ShieldCoinbaseTest (BitcoinTestFramework): def start_node_with(self, index, extra_args=[]): args = [ - "-nuparams=2bb40e60:1", # Blossom - "-nuparams=f5b9230b:10", # Heartwood + nuparams(BLOSSOM_BRANCH_ID, 1), + nuparams(HEARTWOOD_BRANCH_ID, 10), "-nurejectoldversions=false", ] return start_node(index, self.options.tmpdir, args + extra_args) diff --git a/qa/rpc-tests/multi_rpc.py b/qa/rpc-tests/multi_rpc.py index 51c1b4474..4cfe5d973 100755 --- a/qa/rpc-tests/multi_rpc.py +++ b/qa/rpc-tests/multi_rpc.py @@ -28,7 +28,7 @@ class HTTPBasicsTest (BitcoinTestFramework): #Append rpcauth to zcash.conf before initialization rpcauth = "rpcauth=rt:93648e835a54c573682c2eb19f882535$7681e9c5b74bdd85e78166031d2058e1069b3ed7ed967c93fc63abba06f31144" rpcauth2 = "rpcauth=rt2:f8607b1a88861fac29dfccf9b52ff9f$ff36a0c23c8c62b4846112e50fa888416e94c17bfd4c42f88fd8f55ec6a3137e" - with open(os.path.join(self.options.tmpdir+"/node0", "zcash.conf"), 'a') as f: + with open(os.path.join(self.options.tmpdir+"/node0", "zcash.conf"), 'a', encoding='utf8') as f: f.write(rpcauth+"\n") f.write(rpcauth2+"\n") diff --git a/qa/rpc-tests/proton_test.py b/qa/rpc-tests/proton_test.py deleted file mode 100755 index fd1c5cf95..000000000 --- a/qa/rpc-tests/proton_test.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) 2017 The Zcash developers -# Distributed under the MIT software license, see the accompanying -# file COPYING or https://www.opensource.org/licenses/mit-license.php . - -# -# Test Proton interface (provides AMQP 1.0 messaging support). -# -# Requirements: -# Python library for Qpid Proton: -# https://pypi.python.org/pypi/python-qpid-proton -# To install: -# pip install python-qpid-proton -# - -from test_framework.test_framework import BitcoinTestFramework -from test_framework.util import assert_equal, bytes_to_hex_str, \ - start_nodes - -from proton.handlers import MessagingHandler -from proton.reactor import Container - -import threading - - -class Server(MessagingHandler): - - def __init__(self, url, limit): - super(Server, self).__init__() - self.url = url - self.counter = limit - self.blockhashes = [] - self.txids = [] - self.blockseq = -1 - self.txidseq = -1 - - def on_start(self, event): - print("Proton listening on:", self.url) - self.container = event.container - self.acceptor = event.container.listen(self.url) - - def on_message(self, event): - m = event.message - hash = bytes_to_hex_str(m.body) - sequence = m.properties['x-opt-sequence-number'] - if m.subject == "hashtx": - self.txids.append(hash) - - # Test that sequence id is incrementing - assert(sequence == 1 + self.txidseq) - self.txidseq = sequence - elif m.subject == "hashblock": - self.blockhashes.append(hash) - - # Test that sequence id is incrementing - assert(sequence == 1 + self.blockseq) - self.blockseq = sequence - - self.counter = self.counter - 1 - if self.counter == 0: - self.container.stop() - - -class ProtonTest (BitcoinTestFramework): - - port = 25672 - numblocks = 10 # must be even, as two nodes generate equal number - assert(numblocks % 2 == 0) - - def setup_nodes(self): - - # Launch proton server in background thread - # It terminates after receiving numblocks * 2 messages (one for coinbase, one for block) - self.server = Server("127.0.0.1:%i" % self.port, self.numblocks * 2) - self.container = Container(self.server) - self.t1 = threading.Thread(target=self.container.run) - self.t1.start() - - return start_nodes(4, self.options.tmpdir, extra_args=[ - ['-experimentalfeatures', '-debug=amqp', '-amqppubhashtx=amqp://127.0.0.1:'+str(self.port), - '-amqppubhashblock=amqp://127.0.0.1:'+str(self.port)], - [], - [], - [] - ]) - - def run_test(self): - self.sync_all() - baseheight = self.nodes[0].getblockcount() # 200 blocks already mined - - # generate some blocks - self.nodes[0].generate(self.numblocks//2) - self.sync_all() - self.nodes[1].generate(self.numblocks//2) - self.sync_all() - - # wait for server to finish - self.t1.join() - - # sequence numbers have already been checked in the server's message handler - - # sanity check that we have the right number of block hashes and coinbase txids - assert_equal(len(self.server.blockhashes), self.numblocks) - assert_equal(len(self.server.txids), self.numblocks) - - # verify that each block has the correct coinbase txid - for i in range(0, self.numblocks): - height = baseheight + i + 1 - blockhash = self.nodes[0].getblockhash(height) - assert_equal(blockhash, self.server.blockhashes[i]) - resp = self.nodes[0].getblock(blockhash) - coinbase = resp["tx"][0] - assert_equal(coinbase, self.server.txids[i]) - - -if __name__ == '__main__': - ProtonTest().main() diff --git a/qa/rpc-tests/rawtransactions.py b/qa/rpc-tests/rawtransactions.py index ec2be10ee..ba136fe01 100755 --- a/qa/rpc-tests/rawtransactions.py +++ b/qa/rpc-tests/rawtransactions.py @@ -11,7 +11,7 @@ from test_framework.test_framework import BitcoinTestFramework from test_framework.authproxy import JSONRPCException from test_framework.util import assert_equal, initialize_chain_clean, \ - start_nodes, connect_nodes_bi + start_nodes, connect_nodes_bi, assert_raises from decimal import Decimal @@ -68,6 +68,30 @@ class RawTransactionsTest(BitcoinTestFramework): assert_equal("Missing inputs" in errorString, True); + ##################################### + # getrawtransaction with block hash # + ##################################### + + # make a tx by sending then generate 2 blocks; block1 has the tx in it + tx = self.nodes[2].sendtoaddress(self.nodes[1].getnewaddress(), 1) + block1, block2 = self.nodes[2].generate(2) + self.sync_all() + # We should be able to get the raw transaction by providing the correct block + gottx = self.nodes[0].getrawtransaction(tx, 1, block1) + assert_equal(gottx['txid'], tx) + assert_equal(gottx['in_active_chain'], True) + # We should not have the 'in_active_chain' flag when we don't provide a block + gottx = self.nodes[0].getrawtransaction(tx, 1) + assert_equal(gottx['txid'], tx) + assert 'in_active_chain' not in gottx + # We should not get the tx if we provide an unrelated block + assert_raises(JSONRPCException, self.nodes[0].getrawtransaction, tx, 1, block2) + # An invalid block hash should raise errors + assert_raises(JSONRPCException, self.nodes[0].getrawtransaction, tx, 1, True) + assert_raises(JSONRPCException, self.nodes[0].getrawtransaction, tx, 1, "foobar") + assert_raises(JSONRPCException, self.nodes[0].getrawtransaction, tx, 1, "abcd1234") + assert_raises(JSONRPCException, self.nodes[0].getrawtransaction, tx, 1, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") + ######################### # RAW TX MULTISIG TESTS # ######################### diff --git a/qa/rpc-tests/receivedby.py b/qa/rpc-tests/receivedby.py index b19c55e68..e40b4dd6f 100755 --- a/qa/rpc-tests/receivedby.py +++ b/qa/rpc-tests/receivedby.py @@ -6,6 +6,7 @@ # Exercise the listreceivedbyaddress API from test_framework.test_framework import BitcoinTestFramework +from test_framework.util import assert_equal from decimal import Decimal @@ -71,11 +72,11 @@ class ReceivedByTest(BitcoinTestFramework): self.sync_all() check_array_result(self.nodes[1].listreceivedbyaddress(), {"address":addr}, - {"address":addr, "account":"", "amount":Decimal("0.1"), "confirmations":10, "txids":[txid,]}) + {"address":addr, "account":"", "amount":Decimal("0.1"), "amountZat":10000000, "confirmations":10, "txids":[txid,]}) # With min confidence < 10 check_array_result(self.nodes[1].listreceivedbyaddress(5), {"address":addr}, - {"address":addr, "account":"", "amount":Decimal("0.1"), "confirmations":10, "txids":[txid,]}) + {"address":addr, "account":"", "amount":Decimal("0.1"), "amountZat":10000000, "confirmations":10, "txids":[txid,]}) # With min confidence > 10, should not find Tx check_array_result(self.nodes[1].listreceivedbyaddress(11),{"address":addr},{ },True) @@ -83,7 +84,7 @@ class ReceivedByTest(BitcoinTestFramework): addr = self.nodes[1].getnewaddress() check_array_result(self.nodes[1].listreceivedbyaddress(0,True), {"address":addr}, - {"address":addr, "account":"", "amount":0, "confirmations":0, "txids":[]}) + {"address":addr, "account":"", "amount":0, "confirmations":0, "amountZat":0, "txids":[]}) ''' getreceivedbyaddress Test @@ -95,20 +96,22 @@ class ReceivedByTest(BitcoinTestFramework): # Check balance is 0 because of 0 confirmations balance = self.nodes[1].getreceivedbyaddress(addr) - if balance != Decimal("0.0"): - raise AssertionError("Wrong balance returned by getreceivedbyaddress, %0.2f"%(balance)) + assert_equal(balance, Decimal("0.0"), "Wrong balance returned by getreceivedbyaddress, %0.2f"%(balance)) + # Check balance is 0.1 balance = self.nodes[1].getreceivedbyaddress(addr,0) - if balance != Decimal("0.1"): - raise AssertionError("Wrong balance returned by getreceivedbyaddress, %0.2f"%(balance)) + assert_equal(balance, Decimal("0.1"), "Wrong balance returned by getreceivedbyaddress, %0.2f"%(balance)) # Bury Tx under 10 block so it will be returned by the default getreceivedbyaddress self.nodes[1].generate(10) self.sync_all() balance = self.nodes[1].getreceivedbyaddress(addr) - if balance != Decimal("0.1"): - raise AssertionError("Wrong balance returned by getreceivedbyaddress, %0.2f"%(balance)) + assert_equal(balance, Decimal("0.1"), "Wrong balance returned by getreceivedbyaddress, %0.2f"%(balance)) + + # Get balance as integer + balance = self.nodes[1].getreceivedbyaddress(addr, 1, True) + assert_equal(balance, 10000000, "Wrong balance returned by getreceivedbyaddress, %i"%(balance)) ''' listreceivedbyaccount + getreceivedbyaccount Test @@ -117,6 +120,7 @@ class ReceivedByTest(BitcoinTestFramework): addrArr = self.nodes[1].getnewaddress() account = self.nodes[1].getaccount(addrArr) received_by_account_json = get_sub_array_from_array(self.nodes[1].listreceivedbyaccount(),{"account":account}) + if len(received_by_account_json) == 0: raise AssertionError("No accounts found in node") balance_by_account = self.nodes[1].getreceivedbyaccount(account) @@ -129,22 +133,24 @@ class ReceivedByTest(BitcoinTestFramework): {"account":account}, received_by_account_json) - # getreceivedbyaddress should return same balance because of 0 confirmations + # getreceivedbyaccount should return same balance because of 0 confirmations balance = self.nodes[1].getreceivedbyaccount(account) - if balance != balance_by_account: - raise AssertionError("Wrong balance returned by getreceivedbyaccount, %0.2f"%(balance)) + assert_equal(balance, balance_by_account, "Wrong balance returned by getreceivedbyaccount, %0.2f"%(balance)) self.nodes[1].generate(10) self.sync_all() # listreceivedbyaccount should return updated account balance check_array_result(self.nodes[1].listreceivedbyaccount(), {"account":account}, - {"account":received_by_account_json["account"], "amount":(received_by_account_json["amount"] + Decimal("0.1"))}) + {"account":received_by_account_json["account"], "amount":(received_by_account_json["amount"] + Decimal("0.1")), "amountZat":30000000}) - # getreceivedbyaddress should return updates balance + # getreceivedbyaccount should return updates balance balance = self.nodes[1].getreceivedbyaccount(account) - if balance != balance_by_account + Decimal("0.1"): - raise AssertionError("Wrong balance returned by getreceivedbyaccount, %0.2f"%(balance)) + assert_equal(balance, balance_by_account + Decimal("0.1"), "Wrong balance returned by getreceivedbyaccount, %0.2f"%(balance)) + + # Get balance as integer + balance = self.nodes[1].getreceivedbyaccount(account, 1, True) + assert_equal(balance, 30000000, "Wrong balance returned by getreceivedbyaccount, %i"%(balance)) # Create a new account named "mynewaccount" that has a 0 balance self.nodes[1].getaccountaddress("mynewaccount") @@ -152,14 +158,12 @@ class ReceivedByTest(BitcoinTestFramework): if len(received_by_account_json) == 0: raise AssertionError("No accounts found in node") - # Test includeempty of listreceivedbyaccount - if received_by_account_json["amount"] != Decimal("0.0"): - raise AssertionError("Wrong balance returned by listreceivedbyaccount, %0.2f"%(received_by_account_json["amount"])) + # Test listreceivedbyaccount for 0 amount accounts + assert_equal(received_by_account_json["amount"], Decimal("0.0"), "Wrong balance returned by listreceivedbyaccount, %0.2f"%(received_by_account_json["amount"])) # Test getreceivedbyaccount for 0 amount accounts balance = self.nodes[1].getreceivedbyaccount("mynewaccount") - if balance != Decimal("0.0"): - raise AssertionError("Wrong balance returned by getreceivedbyaccount, %0.2f"%(balance)) + assert_equal(balance, Decimal("0.0"), "Wrong balance returned by getreceivedbyaccount, %0.2f"%(balance)) if __name__ == '__main__': ReceivedByTest().main() diff --git a/qa/rpc-tests/remove_sprout_shielding.py b/qa/rpc-tests/remove_sprout_shielding.py new file mode 100755 index 000000000..2aa5bbcae --- /dev/null +++ b/qa/rpc-tests/remove_sprout_shielding.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 +# Copyright (c) 2020 The Zcash developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://www.opensource.org/licenses/mit-license.php . + +from decimal import Decimal +from test_framework.authproxy import JSONRPCException +from test_framework.test_framework import BitcoinTestFramework +from test_framework.util import ( + assert_equal, + initialize_chain, + start_nodes, get_coinbase_address, + wait_and_assert_operationid_status, + nuparams, BLOSSOM_BRANCH_ID, HEARTWOOD_BRANCH_ID, CANOPY_BRANCH_ID +) + +import logging + +HAS_CANOPY = ['-nurejectoldversions=false', + nuparams(BLOSSOM_BRANCH_ID, 205), + nuparams(HEARTWOOD_BRANCH_ID, 210), + nuparams(CANOPY_BRANCH_ID, 220), +] +class RemoveSproutShieldingTest (BitcoinTestFramework): + + def setup_chain(self): + print("Initializing test directory "+self.options.tmpdir) + initialize_chain(self.options.tmpdir) + + def setup_nodes(self): + return start_nodes(4, self.options.tmpdir, extra_args=[HAS_CANOPY]*4) + + def run_test (self): + + # Generate blocks up to Heartwood activation + logging.info("Generating initial blocks. Current height is 200, advance to 210 (activate Heartwood but not Canopy)") + self.nodes[0].generate(10) + self.sync_all() + + # Shield coinbase to Sprout on node 0. Should pass + sprout_addr = self.nodes[0].z_getnewaddress('sprout') + myopid = self.nodes[0].z_shieldcoinbase(get_coinbase_address(self.nodes[0]), sprout_addr, 0)['opid'] + wait_and_assert_operationid_status(self.nodes[0], myopid) + print("taddr -> Sprout z_shieldcoinbase tx accepted before Canopy on node 0") + + self.nodes[0].generate(1) + self.sync_all() + assert_equal(self.nodes[0].z_getbalance(sprout_addr), Decimal('10')) + + # Fund taddr_0 from shielded coinbase on node 0 + taddr_0 = self.nodes[0].getnewaddress() + for _ in range(3): + recipients = [{"address": taddr_0, "amount": Decimal('1')}] + myopid = self.nodes[0].z_sendmany(sprout_addr, recipients, 1, 0) + wait_and_assert_operationid_status(self.nodes[0], myopid) + self.sync_all() + self.nodes[0].generate(1) + self.sync_all() + + # Create taddr -> Sprout transaction and mine on node 0 before it is Canopy-aware. Should pass + sendmany_tx_0 = self.nodes[0].z_sendmany(taddr_0, [{"address": self.nodes[1].z_getnewaddress('sprout'), "amount": 1}]) + wait_and_assert_operationid_status(self.nodes[0], sendmany_tx_0) + print("taddr -> Sprout z_sendmany tx accepted before Canopy on node 0") + + self.nodes[0].generate(1) + self.sync_all() + + # Create mergetoaddress taddr -> Sprout transaction and mine on node 0 before it is Canopy-aware. Should pass + merge_tx_0 = self.nodes[0].z_mergetoaddress(["ANY_TADDR"], self.nodes[1].z_getnewaddress('sprout')) + wait_and_assert_operationid_status(self.nodes[0], merge_tx_0['opid']) + print("taddr -> Sprout z_mergetoaddress tx accepted before Canopy on node 0") + + # Mine to one block before Canopy activation on node 0; adding value + # to the Sprout pool will fail now since the transaction must be + # included in the next (or later) block, after Canopy has activated. + self.nodes[0].generate(4) + self.sync_all() + + # Shield coinbase to Sprout on node 0. Should fail + errorString = '' + try: + sprout_addr = self.nodes[0].z_getnewaddress('sprout') + self.nodes[0].z_shieldcoinbase(get_coinbase_address(self.nodes[0]), sprout_addr, 0) + except JSONRPCException as e: + errorString = e.error['message'] + assert("Sprout shielding is not supported after Canopy" in errorString) + print("taddr -> Sprout z_shieldcoinbase tx rejected at Canopy activation on node 0") + + # Create taddr -> Sprout z_sendmany transaction on node 0. Should fail + errorString = '' + try: + sprout_addr = self.nodes[1].z_getnewaddress('sprout') + self.nodes[0].z_sendmany(taddr_0, [{"address": sprout_addr, "amount": 1}]) + except JSONRPCException as e: + errorString = e.error['message'] + assert("Sprout shielding is not supported after Canopy" in errorString) + print("taddr -> Sprout z_sendmany tx rejected at Canopy activation on node 0") + + # Create z_mergetoaddress [taddr, Sprout] -> Sprout transaction on node 0. Should fail + errorString = '' + try: + self.nodes[0].z_mergetoaddress(["ANY_TADDR", "ANY_SPROUT"], self.nodes[1].z_getnewaddress('sprout')) + except JSONRPCException as e: + errorString = e.error['message'] + assert("Sprout shielding is not supported after Canopy" in errorString) + print("[taddr, Sprout] -> Sprout z_mergetoaddress tx rejected at Canopy activation on node 0") + + # Create z_mergetoaddress Sprout -> Sprout transaction on node 0. Should pass + merge_tx_1 = self.nodes[0].z_mergetoaddress(["ANY_SPROUT"], self.nodes[1].z_getnewaddress('sprout')) + wait_and_assert_operationid_status(self.nodes[0], merge_tx_1['opid']) + print("Sprout -> Sprout z_mergetoaddress tx accepted at Canopy activation on node 0") + + self.nodes[0].generate(1) + self.sync_all() + + # Shield coinbase to Sapling on node 0. Should pass + sapling_addr = self.nodes[0].z_getnewaddress('sapling') + myopid = self.nodes[0].z_shieldcoinbase(get_coinbase_address(self.nodes[0]), sapling_addr, 0)['opid'] + wait_and_assert_operationid_status(self.nodes[0], myopid) + print("taddr -> Sapling z_shieldcoinbase tx accepted after Canopy on node 0") + +if __name__ == '__main__': + RemoveSproutShieldingTest().main() diff --git a/qa/rpc-tests/rest.py b/qa/rpc-tests/rest.py index 79dbe0921..acc5d943f 100755 --- a/qa/rpc-tests/rest.py +++ b/qa/rpc-tests/rest.py @@ -94,9 +94,9 @@ class RESTTest (BitcoinTestFramework): n = vout['n'] - ###################################### - # GETUTXOS: query a unspent outpoint # - ###################################### + ####################################### + # GETUTXOS: query an unspent outpoint # + ####################################### json_request = '/checkmempool/'+txid+'-'+str(n) json_string = http_get_call(url.hostname, url.port, '/rest/getutxos'+json_request+self.FORMAT_SEPARATOR+'json') json_obj = json.loads(json_string) @@ -109,9 +109,9 @@ class RESTTest (BitcoinTestFramework): assert_equal(json_obj['utxos'][0]['value'], 0.1) - ################################################ - # GETUTXOS: now query a already spent outpoint # - ################################################ + ################################################# + # GETUTXOS: now query an already spent outpoint # + ################################################# json_request = '/checkmempool/'+vintx+'-0' json_string = http_get_call(url.hostname, url.port, '/rest/getutxos'+json_request+self.FORMAT_SEPARATOR+'json') json_obj = json.loads(json_string) @@ -173,24 +173,24 @@ class RESTTest (BitcoinTestFramework): json_request = '/'+txid+'-'+str(n) json_string = http_get_call(url.hostname, url.port, '/rest/getutxos'+json_request+self.FORMAT_SEPARATOR+'json') json_obj = json.loads(json_string) - assert_equal(len(json_obj['utxos']), 0) # there should be a outpoint because it has just added to the mempool + assert_equal(len(json_obj['utxos']), 0) # there should be an outpoint because it has just added to the mempool json_request = '/checkmempool/'+txid+'-'+str(n) json_string = http_get_call(url.hostname, url.port, '/rest/getutxos'+json_request+self.FORMAT_SEPARATOR+'json') json_obj = json.loads(json_string) - assert_equal(len(json_obj['utxos']), 1) # there should be a outpoint because it has just added to the mempool + assert_equal(len(json_obj['utxos']), 1) # there should be an outpoint because it has just added to the mempool # do some invalid requests json_request = '{"checkmempool' response = http_post_call(url.hostname, url.port, '/rest/getutxos'+self.FORMAT_SEPARATOR+'json', json_request, True) - assert_equal(response.status, 500) # must be a 500 because we send a invalid json request + assert_equal(response.status, 500) # must be a 500 because we send an invalid json request json_request = '{"checkmempool' response = http_post_call(url.hostname, url.port, '/rest/getutxos'+self.FORMAT_SEPARATOR+'bin', json_request, True) - assert_equal(response.status, 500) # must be a 500 because we send a invalid bin request + assert_equal(response.status, 500) # must be a 500 because we send an invalid bin request response = http_post_call(url.hostname, url.port, '/rest/getutxos/checkmempool'+self.FORMAT_SEPARATOR+'bin', '', True) - assert_equal(response.status, 500) # must be a 500 because we send a invalid bin request + assert_equal(response.status, 500) # must be a 500 because we send an invalid bin request # test limits json_request = '/checkmempool/' diff --git a/qa/rpc-tests/sapling_rewind_check.py b/qa/rpc-tests/sapling_rewind_check.py index 206a28541..05c0bae72 100755 --- a/qa/rpc-tests/sapling_rewind_check.py +++ b/qa/rpc-tests/sapling_rewind_check.py @@ -98,7 +98,7 @@ class SaplingRewindTest(BitcoinTestFramework): except: logpath = self.options.tmpdir + "/node2/regtest/debug.log" found = False - with open(logpath, 'r') as f: + with open(logpath, 'r', encoding='utf8') as f: for line in f: # Search for the rollback message in the debug log, and ensure that it has the # correct expected rollback length. diff --git a/qa/rpc-tests/smartfees.py b/qa/rpc-tests/smartfees.py index 18ac087be..8caab8808 100755 --- a/qa/rpc-tests/smartfees.py +++ b/qa/rpc-tests/smartfees.py @@ -15,7 +15,7 @@ import random from decimal import Decimal, ROUND_DOWN # Construct 2 trivial P2SH's and the ScriptSigs that spend them -# So we can create many many transactions without needing to spend +# So we can create many transactions without needing to spend # time signing. P2SH_1 = "2MySexEGVzZpRgNQ1JdjdP5bRETznm3roQ2" # P2SH of "OP_1 OP_DROP" P2SH_2 = "2NBdpwq8Aoo1EEKEXPNrKvr5xQr3M9UfcZA" # P2SH of "OP_2 OP_DROP" diff --git a/qa/rpc-tests/test_framework/authproxy.py b/qa/rpc-tests/test_framework/authproxy.py index 119228a1f..391482c89 100644 --- a/qa/rpc-tests/test_framework/authproxy.py +++ b/qa/rpc-tests/test_framework/authproxy.py @@ -48,7 +48,7 @@ log = logging.getLogger("BitcoinRPC") class JSONRPCException(Exception): def __init__(self, rpc_error): - Exception.__init__(self) + Exception.__init__(self, rpc_error.get("message")) self.error = rpc_error def EncodeDecimal(o): diff --git a/qa/rpc-tests/test_framework/blocktools.py b/qa/rpc-tests/test_framework/blocktools.py index e821d39e8..d3f06f479 100644 --- a/qa/rpc-tests/test_framework/blocktools.py +++ b/qa/rpc-tests/test_framework/blocktools.py @@ -16,10 +16,12 @@ def create_block(hashprev, coinbase, nTime=None, nBits=None, hashFinalSaplingRoo else: block.nTime = nTime block.hashPrevBlock = hashprev - if hashFinalSaplingRoot is not None: - block.hashFinalSaplingRoot = hashFinalSaplingRoot + if hashFinalSaplingRoot is None: + # By default NUs up to Sapling are active from block 1, so we set this to the empty root. + hashFinalSaplingRoot = 0x3e49b5f954aa9d3545bc6c37744661eea48d7c34e3000d82b7f0010c30f4c2fb + block.hashFinalSaplingRoot = hashFinalSaplingRoot if nBits is None: - block.nBits = 0x200f0f0f # Will break after a difficulty adjustment... + block.nBits = 0x200f0f0f # difficulty retargeting is disabled in REGTEST chainparams else: block.nBits = nBits block.vtx.append(coinbase) @@ -47,7 +49,7 @@ counter=1 def create_coinbase(heightAdjust = 0): global counter coinbase = CTransaction() - coinbase.vin.append(CTxIn(COutPoint(0, 0xffffffff), + coinbase.vin.append(CTxIn(COutPoint(0, 0xffffffff), CScript([counter+heightAdjust, OP_0]), 0xffffffff)) counter += 1 coinbaseoutput = CTxOut() diff --git a/qa/rpc-tests/test_framework/coverage.py b/qa/rpc-tests/test_framework/coverage.py index 50f066a85..5dd2df6dc 100644 --- a/qa/rpc-tests/test_framework/coverage.py +++ b/qa/rpc-tests/test_framework/coverage.py @@ -45,7 +45,7 @@ class AuthServiceProxyWrapper(object): rpc_method = self.auth_service_proxy_instance._service_name if self.coverage_logfile: - with open(self.coverage_logfile, 'a+') as f: + with open(self.coverage_logfile, 'a+', encoding='utf8') as f: f.write("%s\n" % rpc_method) return return_val @@ -95,7 +95,7 @@ def write_all_rpc_commands(dirname, node): if line and not line.startswith('='): commands.add("%s\n" % line.split()[0]) - with open(filename, 'w') as f: + with open(filename, 'w', encoding='utf8') as f: f.writelines(list(commands)) return True diff --git a/qa/rpc-tests/test_framework/equihash.py b/qa/rpc-tests/test_framework/equihash.py index d74aa6e13..e05544fb4 100755 --- a/qa/rpc-tests/test_framework/equihash.py +++ b/qa/rpc-tests/test_framework/equihash.py @@ -108,9 +108,9 @@ def hash_xi(digest, xi): def count_zeroes(h): # Convert to binary string if type(h) == bytearray: - h = ''.join('{0:08b}'.format(x, 'b') for x in h) + h = ''.join('{0:08b}'.format(x) for x in h) else: - h = ''.join('{0:08b}'.format(ord(x), 'b') for x in h) + h = ''.join('{0:08b}'.format(ord(x)) for x in h) # Count leading zeroes return (h+'1').index('1') @@ -283,9 +283,9 @@ def zcash_person(n, k): def print_hash(h): if type(h) == bytearray: - return ''.join('{0:02x}'.format(x, 'x') for x in h) + return ''.join('{0:02x}'.format(x) for x in h) else: - return ''.join('{0:02x}'.format(ord(x), 'x') for x in h) + return ''.join('{0:02x}'.format(ord(x)) for x in h) def validate_params(n, k): if (k >= n): diff --git a/qa/rpc-tests/test_framework/mininode.py b/qa/rpc-tests/test_framework/mininode.py index 32eceeb79..04a7ef773 100755 --- a/qa/rpc-tests/test_framework/mininode.py +++ b/qa/rpc-tests/test_framework/mininode.py @@ -80,6 +80,9 @@ def hash256(s): def nuparams(branch_id, height): return '-nuparams=%x:%d' % (branch_id, height) +def fundingstream(idx, start_height, end_height, addrs): + return '-fundingstream=%d:%d:%d:%s' % (idx, start_height, end_height, ",".join(addrs)) + def ser_compactsize(n): if n < 253: return struct.pack("B", n) @@ -572,7 +575,7 @@ class JSDescription(object): return r def __repr__(self): - return "JSDescription(vpub_old=%i.%08i vpub_new=%i.%08i anchor=%064x onetimePubKey=%064x randomSeed=%064x proof=%r)" \ + return "JSDescription(vpub_old=%i vpub_new=%i anchor=%064x onetimePubKey=%064x randomSeed=%064x proof=%r)" \ % (self.vpub_old, self.vpub_new, self.anchor, self.onetimePubKey, self.randomSeed, self.proof) @@ -777,7 +780,7 @@ class CTransaction(object): r += " vJoinSplit=%r" % (self.vJoinSplit,) if len(self.vJoinSplit) > 0: r += " joinSplitPubKey=%064x joinSplitSig=%064x" \ - (self.joinSplitPubKey, self.joinSplitSig) + % (self.joinSplitPubKey, self.joinSplitSig) if len(self.shieldedSpends) > 0 or len(self.shieldedOutputs) > 0: r += " bindingSig=%064x" % (self.bindingSig,) r += ")" diff --git a/qa/rpc-tests/test_framework/netutil.py b/qa/rpc-tests/test_framework/netutil.py index d0af6ee56..1e557e844 100644 --- a/qa/rpc-tests/test_framework/netutil.py +++ b/qa/rpc-tests/test_framework/netutil.py @@ -56,7 +56,7 @@ def netstat(typ='tcp'): To get pid of all network process running on system, you must run this script as superuser ''' - with open('/proc/net/'+typ,'r') as f: + with open('/proc/net/'+typ,'r',encoding='utf8') as f: content = f.readlines() content.pop(0) result = [] diff --git a/qa/rpc-tests/test_framework/script.py b/qa/rpc-tests/test_framework/script.py index 3975120a9..9397dbb8f 100644 --- a/qa/rpc-tests/test_framework/script.py +++ b/qa/rpc-tests/test_framework/script.py @@ -19,9 +19,11 @@ if sys.version > '3': bchr = lambda x: bytes([x]) bord = lambda x: x +from pyblake2 import blake2b import struct from test_framework import bignum +from test_framework.mininode import (CTransaction, CTxOut, hash256, ser_string, ser_uint256) MAX_SCRIPT_SIZE = 10000 MAX_SCRIPT_ELEMENT_SIZE = 520 @@ -340,7 +342,6 @@ VALID_OPCODES = { OP_SHA256, OP_HASH160, OP_HASH256, - OP_CODESEPARATOR, OP_CHECKSIG, OP_CHECKSIGVERIFY, OP_CHECKMULTISIG, @@ -814,3 +815,159 @@ class CScript(bytes): n += 20 lastOpcode = opcode return n + + +SIGHASH_ALL = 1 +SIGHASH_NONE = 2 +SIGHASH_SINGLE = 3 +SIGHASH_ANYONECANPAY = 0x80 + +def getHashPrevouts(tx): + digest = blake2b(digest_size=32, person=b'ZcashPrevoutHash') + for x in tx.vin: + digest.update(x.prevout.serialize()) + return digest.digest() + +def getHashSequence(tx): + digest = blake2b(digest_size=32, person=b'ZcashSequencHash') + for x in tx.vin: + digest.update(struct.pack('= len(txTo.vin): + raise ValueError("inIdx %d out of range (%d)" % (inIdx, len(txTo.vin))) + + if consensusBranchId != 0: + # ZIP 243 + hashPrevouts = b'\x00'*32 + hashSequence = b'\x00'*32 + hashOutputs = b'\x00'*32 + hashJoinSplits = b'\x00'*32 + hashShieldedSpends = b'\x00'*32 + hashShieldedOutputs = b'\x00'*32 + + if not (hashtype & SIGHASH_ANYONECANPAY): + hashPrevouts = getHashPrevouts(txTo) + + if (not (hashtype & SIGHASH_ANYONECANPAY)) and \ + (hashtype & 0x1f) != SIGHASH_SINGLE and \ + (hashtype & 0x1f) != SIGHASH_NONE: + hashSequence = getHashSequence(txTo) + + if (hashtype & 0x1f) != SIGHASH_SINGLE and \ + (hashtype & 0x1f) != SIGHASH_NONE: + hashOutputs = getHashOutputs(txTo) + elif (hashtype & 0x1f) == SIGHASH_SINGLE and \ + 0 <= inIdx and inIdx < len(txTo.vout): + digest = blake2b(digest_size=32, person=b'ZcashOutputsHash') + digest.update(txTo.vout[inIdx].serialize()) + hashOutputs = digest.digest() + + if len(txTo.vJoinSplit) > 0: + hashJoinSplits = getHashJoinSplits(txTo) + + if len(txTo.shieldedSpends) > 0: + hashShieldedSpends = getHashShieldedSpends(txTo) + + if len(txTo.shieldedOutputs) > 0: + hashShieldedOutputs = getHashShieldedOutputs(txTo) + + digest = blake2b( + digest_size=32, + person=b'ZcashSigHash' + struct.pack('= len(txtmp.vout): + raise ValueError("outIdx %d out of range (%d)" % (outIdx, len(txtmp.vout))) + + tmp = txtmp.vout[outIdx] + txtmp.vout = [] + for i in range(outIdx): + txtmp.vout.append(CTxOut()) + txtmp.vout.append(tmp) + + for i in range(len(txtmp.vin)): + if i != inIdx: + txtmp.vin[i].nSequence = 0 + + if hashtype & SIGHASH_ANYONECANPAY: + tmp = txtmp.vin[inIdx] + txtmp.vin = [] + txtmp.vin.append(tmp) + + s = txtmp.serialize() + s += struct.pack(b" /dev/null 2>&1; +} + +if [[ $(id -u) != 0 ]]; then + export PATH=${PATH}:/sbin/:/usr/sbin/ +fi + +for command in cat awk sed sysctl uname mktemp openssl grep stat file find sort head ps readlink basename id which xargs; do + if ! (command_exists ${command}); then + >&2 echo -e "\e[31mWARNING: '${command}' not found! It's required for most checks.\e[0m" + commandsmissing=true + fi +done + +if [[ ${commandsmissing} == true ]]; then + >&2 echo -e "\n\e[31mWARNING: Not all necessary commands found. Some tests might not work!\e[0m\n" + sleep 2 +fi + +if (command_exists readelf); then + readelf="readelf -W" +elif (command_exists eu-readelf); then + readelf="eu-readelf -W" +elif (command_exists greadelf); then + readelf="greadelf -W" +else + echo -e "\n\e[31mERROR: readelf is a required tool for almost all tests. Aborting...\e[0m\n" + exit +fi + +sysarch=$(uname -m) +if [[ "${sysarch}" == "x86_64" ]]; then + arch="64" +elif [[ "${sysarch}" == "i?86" ]]; then + arch="32" +elif [[ "${sysarch}" =~ "arm" ]]; then + arch="arm" +elif [[ "${sysarch}" =~ "aarch64" ]]; then + arch="aarch64" +fi + +#openssl public key for verification of updates +read -r PUBKEY < /dev/null 2>&1 ; then + ${debug} && echo "fetching update via wget" + wget --no-check-certificate -O "${2}" "${1}" >/dev/null 2>&1 + elif type curl > /dev/null 2>&1 ; then + ${debug} && echo "fetching update via curl" + curl --insecure --remote-name -o "${2}" "${1}" >/dev/null 2>&1 + else + echo 'Warning: Neither wget nor curl is available. online updates unavailable' >&2 + exit 1 + fi +} + +# Version compare +vercomp() { + if [[ "${1}" == "${2}" ]] + then + return 0 + fi + local IFS=. + local i ver1="${1}" ver2="${2}" + # fill empty fields in ver1 with zeros + for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)) + do + ver1[i]=0 + done + for ((i=0; i<${#ver1[@]}; i++)) + do + if [[ -z ${ver2[i]} ]] + then + # fill empty fields in ver2 with zeros + ver2[i]=0 + fi + if ((10#${ver1[i]} > 10#${ver2[i]})) + then + return 1 + fi + if ((10#${ver1[i]} < 10#${ver2[i]})) + then + return 2 + fi + done + return 0 +} + +# Update/Upgrade +# shellcheck disable=SC2120 +upgrade() { + if ${pkg_release}; then + printf "\033[31mError: Unknown option '%s'.\033[m\n\n" "${1}" + help + exit 1 + fi + umask 027 + TMP_FILE=$(mktemp /tmp/checksec.XXXXXXXXXX) + SIG_FILE=$(mktemp /tmp/checksec_sig.XXXXXXXX) + PUBKEY_FILE=$(mktemp /tmp/checksec_pubkey.XXXXXXXXXX) + fetch "${SCRIPT_URL}" "${TMP_FILE}" + fetch "${SIG_URL}" "${SIG_FILE}" + echo "${PUBKEY}" | base64 -d > "${PUBKEY_FILE}" + if ! openssl dgst -sha256 -verify "${PUBKEY_FILE}" -signature "${SIG_FILE}" "${TMP_FILE}" >/dev/null 2>&1; then + echo "file signature does not match. Update may be tampered" + rm -f "${TMP_FILE}" "${SIG_FILE}" "${PUBKEY_FILE}" >/dev/null 2>&1 + exit 1 + fi + UPDATE_VERSION=$(grep "^SCRIPT_VERSION" "${TMP_FILE}" | awk -F"=" '{ print $2 }') + if [[ "${SCRIPT_VERSION}" != "${UPDATE_VERSION}" ]]; then + PERMS=$(stat -c "%a" "$0") + rm -f "${SIG_FILE}" "${PUBKEY_FILE}" >/dev/null 2>&1 + mv "${TMP_FILE}" "$0" >/dev/null 2>&1 + exit_status=$? + if [[ "${exit_status}" -eq "0" ]]; then + echo "checksec.sh updated - Rev. ${UPDATE_VERSION}" + chmod "${PERMS}" "${0}" + else + echo "Error: Could not update... Please check permissions" + rm -f "${TMP_FILE}" >/dev/null 2>&1 + exit 1 + fi + else + echo "checksec.sh not updated... Already on latest version" + rm -f "${TMP_FILE}" "${SIG_FILE}" "${PUBKEY_FILE}" >/dev/null 2>&1 + exit 1 + fi + exit 0 +} + # version information version() { - echo "checksec v1.5, Tobias Klein, www.trapkit.de, November 2011" - echo + echo "checksec v${SCRIPT_MAJOR}.${SCRIPT_MINOR}.${SCRIPT_REVISION}, Brian Davis, github.com/slimm609/checksec.sh, Dec 2015" + echo "Based off checksec v1.5, Tobias Klein, www.trapkit.de, November 2011" + echo } # help help() { - echo "Usage: checksec [OPTION]" + echo "Usage: checksec [--format={cli,csv,xml,json}] [OPTION]" + echo echo echo "Options:" echo - echo " --file " - echo " --dir [-v]" - echo " --proc " + echo " ## Checksec Options" + echo " --file={file}" + echo " --dir={directory}" + echo " --proc={process name}" echo " --proc-all" - echo " --proc-libs " - echo " --kernel" - echo " --fortify-file " - echo " --fortify-proc " + echo " --proc-libs={process ID}" + echo " --kernel[=kconfig]" + echo " --fortify-file={executable-file}" + echo " --fortify-proc={process ID}" echo " --version" echo " --help" + if ! ${pkg_release}; then + echo " --update or --upgrade" + fi + echo + echo " ## Modifiers" + echo " --debug" + echo " --verbose" + echo " --format={cli,csv,xml,json}" + echo " --output={cli,csv,xml,json}" + echo " --extended" echo echo "For more information, see:" - echo " http://www.trapkit.de/tools/checksec.html" + echo " http://github.com/slimm609/checksec.sh" echo } -# check if command exists -command_exists () { - type $1 > /dev/null 2>&1; +# format +format () { + list="cli csv xml json" + if [[ -n "${output_format}" ]]; then + if [[ ! ${list} =~ ${output_format} ]]; then + printf "\033[31mError: Please provide a valid format {cli, csv, xml, json}.\033[m\n\n" + exit 1 + fi + fi + if [[ "${output_format}" == "xml" ]]; then + echo '' + fi + format="${output_format}" +} + +#run help if nothing is passed +if [[ $# -lt 1 ]]; then + help + exit 1 +fi + +echo_message() { + if [[ ${format} == "csv" ]]; then + echo -n -e "$2" + elif [[ ${format} == "xml" ]]; then + echo -n -e "$3" + elif [[ ${format} == "json" ]]; then + echo -n -e "$4" + else #default to cli + echo -n -e "${1}" + fi +} + +# check selinux status +getsestatus() { + local status + ${debug} && echo -e "\n***fuction getsestatus" + if (command_exists getenforce); then + ${debug} && echo "***fuction getsestatus->getenforce" + sestatus=$(getenforce) + if [[ "${sestatus}" == "Disabled" ]]; then + status=0 + elif [[ "${sestatus}" == "Permissive" ]]; then + status=1 + elif [[ "${sestatus}" == "Enforcing" ]]; then + status=2 + fi + elif (command_exists sestatus); then + ${debug} && echo "***fuction getsestatus->sestatus" + sestatus=$(sestatus | grep "SELinux status" | awk '{ print $3}') + if [[ "${sestatus}" == "disabled" ]]; then + status=0 + elif [[ "${sestatus}" == "enabled" ]]; then + sestatus2=$(sestatus | grep "Current" | awk '{ print $3}') + if [[ "${sestatus2}" == "permissive" ]]; then + status=1 + elif [[ "${sestatus2}" == "enforcing" ]]; then + status=2 + fi + fi + fi +return ${status} } # check if directory exists dir_exists () { - if [ -d $1 ] ; then + ${debug} && echo "fuction dir_exists" + if [[ -d "${1}" ]] ; then return 0 else return 1 @@ -123,7 +338,8 @@ dir_exists () { # check user privileges root_privs () { - if [ $(/usr/bin/id -u) -eq 0 ] ; then + ${debug} && echo "***function root_privs" + if [[ $(/usr/bin/id -u) -eq 0 ]] ; then return 0 else return 1 @@ -132,80 +348,189 @@ root_privs () { # check if input is numeric isNumeric () { + ${debug} && echo "***function isNumeric" echo "$@" | grep -q -v "[^0-9]" } # check if input is a string isString () { - echo "$@" | grep -q -v "[^A-Za-z]" + ${debug} && echo "***function isString" + echo "$@" | grep -q -v "[^ A-Z_a-z]" } # check file(s) filecheck() { + ${debug} && echo "***function filecheck" # check for RELRO support - if readelf -l $1 2>/dev/null | grep -q 'GNU_RELRO'; then - if readelf -d $1 2>/dev/null | grep -q 'BIND_NOW'; then - echo -n -e '\033[32mFull RELRO \033[m ' + ${debug} && echo "***function filecheck->RELRO" + if ${readelf} -l "${1}" 2>/dev/null | grep -q 'GNU_RELRO'; then + if ${readelf} -d "${1}" 2>/dev/null | grep -q 'BIND_NOW'; then + echo_message '\033[32mFull RELRO \033[m ' 'Full RELRO,' '/dev/null | grep -q '__stack_chk_fail'; then - echo -n -e '\033[32mCanary found \033[m ' + ${debug} && echo -e "\n***function filecheck->canary" + if ${readelf} -s "${1}" 2>/dev/null | grep -Eq '__stack_chk_fail|__intel_security_cookie'; then + echo_message '\033[32mCanary found \033[m ' 'Canary found,' ' canary="yes"' '"canary":"yes",' else - echo -n -e '\033[31mNo canary found\033[m ' + echo_message '\033[31mNo canary found\033[m ' 'No Canary found,' ' canary="no"' '"canary":"no",' fi # check for NX support - if readelf -W -l $1 2>/dev/null | grep 'GNU_STACK' | grep -q 'RWE'; then - echo -n -e '\033[31mNX disabled\033[m ' - else - echo -n -e '\033[32mNX enabled \033[m ' - fi - - # check for PIE support - if readelf -h $1 2>/dev/null | grep -q 'Type:[[:space:]]*EXEC'; then - echo -n -e '\033[31mNo PIE \033[m ' - elif readelf -h $1 2>/dev/null | grep -q 'Type:[[:space:]]*DYN'; then - if readelf -d $1 2>/dev/null | grep -q '(DEBUG)'; then - echo -n -e '\033[32mPIE enabled \033[m ' - else - echo -n -e '\033[33mDSO \033[m ' + ${debug} && echo -e "\n***function filecheck->nx" + if ${readelf} -l "${1}" 2>/dev/null | grep -q 'GNU_STACK'; then + if ${readelf} -l "${1}" 2>/dev/null | grep 'GNU_STACK' | grep -q 'RWE'; then + echo_message '\033[31mNX disabled\033[m ' 'NX disabled,' ' nx="no"' '"nx":"no",' + else + echo_message '\033[32mNX enabled \033[m ' 'NX enabled,' ' nx="yes"' '"nx":"yes",' fi else - echo -n -e '\033[33mNot an ELF file\033[m ' - fi + echo_message '\033[31mNX disabled\033[m ' 'NX disabled,' ' nx="no"' '"nx":"no",' + fi + + # check for PIE support + ${debug} && echo -e "\n***function filecheck->pie" + if ${readelf} -h "${1}" 2>/dev/null | grep -q 'Type:[[:space:]]*EXEC'; then + echo_message '\033[31mNo PIE \033[m ' 'No PIE,' ' pie="no"' '"pie":"no",' + elif ${readelf} -h "${1}" 2>/dev/null | grep -q 'Type:[[:space:]]*DYN'; then + if ${readelf} -d "${1}" 2>/dev/null | grep -q 'DEBUG'; then + echo_message '\033[32mPIE enabled \033[m ' 'PIE enabled,' ' pie="yes"' '"pie":"yes",' + else + echo_message '\033[33mDSO \033[m ' 'DSO,' ' pie="dso"' '"pie":"dso",' + fi + elif ${readelf} -h "${1}" 2>/dev/null | grep -q 'Type:[[:space:]]*REL'; then + echo_message '\033[33mREL \033[m ' 'REL,' ' pie="rel"' '"pie":"rel",' + else + echo_message '\033[33mNot an ELF file\033[m ' 'Not an ELF file,' ' pie="not_elf"' '"pie":"not_elf",' + fi + + if ${extended_checks}; then + # check for selfrando support + ${debug} && echo -e "\n***function filecheck->selfrando" + if ${readelf} -S "${1}" 2>/dev/null | grep -c txtrp | grep -q '1'; then + echo_message '\033[32mSelfrando enabled \033[m ' + else + echo_message '\033[31mNo Selfrando \033[m ' + fi + fi + + if ${extended_checks}; then + # check if compiled with Clang CFI + ${debug} && echo -e "\n***function filecheck->clangcfi" + #if $readelf -s "$1" 2>/dev/null | grep -Eq '\.cfi'; then + read -r cfifunc <<< "$($readelf -s "${1}" 2>/dev/null | grep .cfi | awk '{ print $8 }')" + func=${cfifunc/.cfi/} + if [ -n "$cfifunc" ] && $readelf -s "$1" 2>/dev/null | grep -q "$func$"; then + echo_message '\033[32mClang CFI found \033[m ' 'with CFI,' ' clangcfi="yes"' '"clangcfi":"yes",' + else + echo_message '\033[31mNo Clang CFI found\033[m ' 'without CFI,' ' clangcfi="no"' '"clangcfi":"no",' + fi + + # check if compiled with Clang SafeStack + ${debug} && echo -e "\n***function filecheck->safestack" + if $readelf -s "$1" 2>/dev/null | grep -Eq '__safestack_init'; then + echo_message '\033[32mSafeStack found \033[m ' 'with SafeStack,' ' safestack="yes"' '"safestack":"yes",' + else + echo_message '\033[31mNo SafeStack found\033[m ' 'without SafeStack,' ' safestack="no"' '"safestack":"no",' + fi + fi # check for rpath / run path - if readelf -d $1 2>/dev/null | grep -q 'rpath'; then - echo -n -e '\033[31mRPATH \033[m ' + ${debug} && echo -e "\n***function filecheck->rpath" + # search for a line that matches RPATH and extract the colon-separated path list within brackets + # example input: "0x000000000000000f (RPATH) Library rpath: [/lib/systemd:/lib/apparmor]" + IFS=: read -r -a rpath_array <<< "$(${readelf} -d "${1}" 2>/dev/null | awk -F'[][]' '/RPATH/ {print $2}')" + if [[ "${#rpath_array[@]}" -gt 0 ]]; then + if xargs stat -c %A <<< "${rpath_array[*]}" 2>/dev/null | grep -q 'rw'; then + echo_message '\033[31mRW-RPATH \033[m ' 'RPATH,' ' rpath="yes"' '"rpath":"yes",' + else + echo_message '\033[31mRPATH \033[m ' 'RPATH,' ' rpath="yes"' '"rpath":"yes",' + fi else - echo -n -e '\033[32mNo RPATH \033[m ' + echo_message '\033[32mNo RPATH \033[m ' 'No RPATH,' ' rpath="no"' '"rpath":"no",' fi - if readelf -d $1 2>/dev/null | grep -q 'runpath'; then - echo -n -e '\033[31mRUNPATH \033[m ' + ${debug} && echo -e "\n***function filecheck->runpath" + # search for a line that matches RUNPATH and extract the colon-separated path list within brackets + IFS=: read -r -a runpath_array <<< "$(${readelf} -d "${1}" 2>/dev/null | awk -F'[][]' '/RUNPATH/ {print $2}')" + if [[ "${#runpath_array[@]}" -gt 0 ]]; then + if xargs stat -c %A <<< "${runpath_array[*]}" 2>/dev/null | grep -q 'rw'; then + echo_message '\033[31mRW-RUNPATH \033[m ' 'RUNPATH,' ' runpath="yes"' '"runpath":"yes",' + else + echo_message '\033[31mRUNPATH \033[m ' 'RUNPATH,' ' runpath="yes"' '"runpath":"yes",' + fi else - echo -n -e '\033[32mNo RUNPATH \033[m ' + echo_message '\033[32mNo RUNPATH \033[m ' 'No RUNPATH,' ' runpath="no"' '"runpath":"no",' fi + + # check for stripped symbols in the binary + IFS=" " read -r -a SYM_cnt <<< "$(${readelf} --symbols "${1}" 2>/dev/null | grep '\.symtab' | cut -d' ' -f5 | cut -d: -f1))" + if ${readelf} --symbols "${1}" 2>/dev/null | grep -q '\.symtab'; then + echo_message "\033[31m${SYM_cnt[0]} Symbols\t\033[m " 'Symbols,' ' symbols="yes"' '"symbols":"yes",' + else + echo_message '\033[32mNo Symbols\t\033[m ' 'No Symbols,' ' symbols="no"' '"symbols":"no",' + fi + + # check for FORTIFY SOURCE + ${debug} && echo "***function filecheck->fortify" + if [[ -e /lib/libc.so.6 ]] ; then + FS_libc=/lib/libc.so.6 + elif [[ -e /lib/libc.so.7 ]] ; then + FS_libc=/lib/libc.so.7 + elif [[ -e /lib/libc.so ]] ; then + FS_libc=/lib/libc.so + elif [[ -e /lib64/libc.so.6 ]] ; then + FS_libc=/lib64/libc.so.6 + elif [[ -e /lib/i386-linux-gnu/libc.so.6 ]] ; then + FS_libc=/lib/i386-linux-gnu/libc.so.6 + elif [[ -e /lib/x86_64-linux-gnu/libc.so.6 ]] ; then + FS_libc=/lib/x86_64-linux-gnu/libc.so.6 + elif [[ -e /lib/arm-linux-gnueabihf/libc.so.6 ]] ; then + FS_libc=/lib/arm-linux-gnueabihf/libc.so.6 + elif [[ -e /lib/aarch64-linux-gnu/libc.so.6 ]] ; then + FS_libc=/lib/aarch64-linux-gnu/libc.so.6 + elif [[ -e /usr/x86_64-gentoo-linux-musl/bin/ld ]] ; then + FS_libc=/usr/x86_64-gentoo-linux-musl/bin/ld + else + printf "\033[31mError: libc not found.\033[m\n\n" + exit 1 + fi + + FS_chk_func_libc="$(${readelf} -s $FS_libc 2>/dev/null | sed -ne 's/.*__\(.*_chk\)@@.*/\1/p')" + FS_func_libc="${FS_chk_func_libc//_chk/}" + FS_functions="$(${readelf} --dyn-syms "${1}" 2>/dev/null | awk '{ print $8 }' | sed -e 's/_*//' -e 's/@.*//' -e '/^$/d')" + FS_cnt_checked=$(grep -cFxf <(sort <<< "${FS_chk_func_libc}") <(sort <<< "${FS_functions}")) + FS_cnt_unchecked=$(grep -cFxf <(sort <<< "${FS_func_libc}") <(sort <<< "${FS_functions}")) + FS_cnt_total=$((FS_cnt_unchecked+FS_cnt_checked)) + + if grep -q '_chk$' <<<"$FS_functions"; then + echo_message '\033[32mYes\033[m' 'Yes,' ' fortify_source="yes" ' '"fortify_source":"yes",' + else + echo_message "\033[31mNo\033[m" "No," ' fortify_source="no" ' '"fortify_source":"no",' + fi + echo_message "\t${FS_cnt_checked}\t" "${FS_cnt_checked}", "fortified=\"${FS_cnt_checked}\" " "\"fortified\":\"${FS_cnt_checked}\"," + echo_message "\t${FS_cnt_total}\t\t" "${FS_cnt_total}" "fortify-able=\"${FS_cnt_total}\"" "\"fortify-able\":\"${FS_cnt_total}\"" } # check process(es) proccheck() { + ${debug} && echo -e "\n***function proccheck" # check for RELRO support - if readelf -l $1/exe 2>/dev/null | grep -q 'Program Headers'; then - if readelf -l $1/exe 2>/dev/null | grep -q 'GNU_RELRO'; then - if readelf -d $1/exe 2>/dev/null | grep -q 'BIND_NOW'; then - echo -n -e '\033[32mFull RELRO \033[m ' + ${debug} && echo "***function proccheck->RELRO" + if ${readelf} -l "${1}/exe" 2>/dev/null | grep -q 'Program Headers'; then + if ${readelf} -l "${1}/exe" 2>/dev/null | grep -q 'GNU_RELRO'; then + if ${readelf} -d "${1}/exe" 2>/dev/null | grep -q 'BIND_NOW'; then + echo_message '\033[32mFull RELRO \033[m ' 'Full RELRO,' ' relro="full"' '"relro":"full",' else - echo -n -e '\033[33mPartial RELRO \033[m ' + echo_message '\033[33mPartial RELRO\033[m ' 'Partial RELRO,' ' relro="partial"' '"relro":"partial",' fi else - echo -n -e '\033[31mNo RELRO \033[m ' + echo_message '\033[31mNo RELRO \033[m ' 'No RELRO,' ' relro="no"' '"relro":"no",' fi else echo -n -e '\033[31mPermission denied (please run as root)\033[m\n' @@ -213,670 +538,1520 @@ proccheck() { fi # check for stack canary support - if readelf -s $1/exe 2>/dev/null | grep -q 'Symbol table'; then - if readelf -s $1/exe 2>/dev/null | grep -q '__stack_chk_fail'; then - echo -n -e '\033[32mCanary found \033[m ' + ${debug} && echo -e "\n***function proccheck->canary" + if ${readelf} -s "${1}/exe" 2>/dev/null | grep -q 'Symbol table'; then + if ${readelf} -s "${1}/exe" 2>/dev/null | grep -Eq '__stack_chk_fail|__intel_security_cookie'; then + echo_message '\033[32mCanary found \033[m ' 'Canary found,' ' canary="yes"' '"canary":"yes",' else - echo -n -e '\033[31mNo canary found \033[m ' + echo_message '\033[31mNo canary found \033[m ' 'No Canary found,' ' canary="no"' '"canary":"no",' fi else - if [ "$1" != "1" ] ; then - echo -n -e '\033[33mPermission denied \033[m ' + if [[ "${1}" == "1" ]] ; then + echo_message '\033[33mPermission denied \033[m ' 'Permission denied,' ' canary="Permission denied"' '"canary":"Permission denied",' else - echo -n -e '\033[33mNo symbol table found\033[m ' + echo_message '\033[33mNo symbol table found \033[m ' 'No symbol table found,' ' canary="No symbol table found"' '"canary":"No symbol table found",' fi fi - # first check for PaX support - if cat $1/status 2> /dev/null | grep -q 'PaX:'; then - pageexec=( $(cat $1/status 2> /dev/null | grep 'PaX:' | cut -b6) ) - segmexec=( $(cat $1/status 2> /dev/null | grep 'PaX:' | cut -b10) ) - mprotect=( $(cat $1/status 2> /dev/null | grep 'PaX:' | cut -b8) ) - randmmap=( $(cat $1/status 2> /dev/null | grep 'PaX:' | cut -b9) ) - if [[ "$pageexec" = "P" || "$segmexec" = "S" ]] && [[ "$mprotect" = "M" && "$randmmap" = "R" ]] ; then - echo -n -e '\033[32mPaX enabled\033[m ' - elif [[ "$pageexec" = "p" && "$segmexec" = "s" && "$randmmap" = "R" ]] ; then - echo -n -e '\033[33mPaX ASLR only\033[m ' - elif [[ "$pageexec" = "P" || "$segmexec" = "S" ]] && [[ "$mprotect" = "m" && "$randmmap" = "R" ]] ; then - echo -n -e '\033[33mPaX mprot off \033[m' - elif [[ "$pageexec" = "P" || "$segmexec" = "S" ]] && [[ "$mprotect" = "M" && "$randmmap" = "r" ]] ; then - echo -n -e '\033[33mPaX ASLR off\033[m ' - elif [[ "$pageexec" = "P" || "$segmexec" = "S" ]] && [[ "$mprotect" = "m" && "$randmmap" = "r" ]] ; then - echo -n -e '\033[33mPaX NX only\033[m ' + if ${extended_checks}; then + # check if compiled with Clang CFI + $debug && echo -e "\n***function proccheck->clangcfi" + #if $readelf -s "$1" 2>/dev/null | grep -Eq '\.cfi'; then + read -r -a cfifunc <<< "$($readelf -s "$1/exe" 2>/dev/null | grep .cfi | awk '{ print $8 }')" + func=${cfifunc/.cfi/} + # TODO: fix this check properly, need more clang CFI files to be able to test properly + # shellcheck disable=SC2128 + if [ -n "$cfifunc" ] && $readelf -s "$1/exe" 2>/dev/null | grep -q "$func$"; then + echo_message '\033[32mClang CFI found \033[m ' 'with CFI,' ' clangcfi="yes"' '"clangcfi":"yes",' else - echo -n -e '\033[31mPaX disabled\033[m ' + echo_message '\033[31mNo Clang CFI found\033[m ' 'without CFI,' ' clangcfi="no"' '"clangcfi":"no",' + fi + + # check if compiled with Clang SafeStack + $debug && echo -e "\n***function proccheck->safestack" + if $readelf -s "$1/exe" 2>/dev/null | grep -Eq '__safestack_init'; then + echo_message '\033[32mSafeStack found \033[m ' 'with SafeStack,' ' safestack="yes"' '"safestack":"yes",' + else + echo_message '\033[31mNo SafeStack found\033[m ' 'without SafeStack,' ' safestack="no"' '"safestack":"no",' + fi + fi + + # check for Seccomp mode + ${debug} && echo -e "\n***function proccheck->Seccomp" + seccomp=$(grep 'Seccomp:' "${1}/status" 2> /dev/null | cut -b10) + if [[ "${seccomp}" == "1" ]] ; then + echo_message '\033[32mSeccomp strict\033[m ' 'Seccomp strict,' ' seccomp="strict"' '"seccomp":"strict",' + elif [[ "${seccomp}" == "2" ]] ; then + echo_message '\033[32mSeccomp-bpf \033[m ' 'Seccomp-bpf,' ' seccomp="bpf"' '"seccomp":"bpf",' + else + echo_message '\033[31mNo Seccomp \033[m ' 'No Seccomp,' ' seccomp="no"' '"seccomp":"no",' + fi + + # first check for PaX support + ${debug} && echo -e "\n***function proccheck->PAX" + if grep -q 'PaX:' "${1}/status" 2> /dev/null ; then + pageexec=$(grep 'PaX:' "${1}/status" 2> /dev/null | cut -b6) + segmexec=$(grep 'PaX:' "${1}/status" 2> /dev/null | cut -b10) + mprotect=$(grep 'PaX:' "${1}/status" 2> /dev/null | cut -b8) + randmmap=$(grep 'PaX:' "${1}/status" 2> /dev/null | cut -b9) + if [[ "${pageexec}" = "P" || "${segmexec}" = "S" ]] && [[ "${mprotect}" = "M" && "${randmmap}" = "R" ]] ; then + echo_message '\033[32mPaX enabled\033[m ' 'Pax enabled,' ' pax="yes"' '"pax":"yes",' + elif [[ "${pageexec}" = "p" && "${segmexec}" = "s" && "${randmmap}" = "R" ]] ; then + echo_message '\033[33mPaX ASLR only\033[m ' 'Pax ASLR only,' ' pax="aslr_only"' '"pax":"aslr_only",' + elif [[ "${pageexec}" = "P" || "${segmexec}" = "S" ]] && [[ "${mprotect}" = "m" && "${randmmap}" = "R" ]] ; then + echo_message '\033[33mPaX mprot off \033[m' 'Pax mprot off,' ' pax="mprot_off"' '"pax":"mprot_off",' + elif [[ "${pageexec}" = "P" || "${segmexec}" = "S" ]] && [[ "${mprotect}" = "M" && "${randmmap}" = "r" ]] ; then + echo_message '\033[33mPaX ASLR off\033[m ' 'Pax ASLR off,' ' pax="aslr_off"' '"pax":"aslr_off",' + elif [[ "${pageexec}" = "P" || "${segmexec}" = "S" ]] && [[ "${mprotect}" = "m" && "${randmmap}" = "r" ]] ; then + echo_message '\033[33mPaX NX only\033[m ' 'Pax NX only,' ' pax="nx_only"' '"pax":"nx_only",' + else + echo_message '\033[31mPaX disabled\033[m ' 'Pax disabled,' ' pax="no"' '"pax":"no",' fi # fallback check for NX support - elif readelf -W -l $1/exe 2>/dev/null | grep 'GNU_STACK' | grep -q 'RWE'; then - echo -n -e '\033[31mNX disabled\033[m ' + ${debug} && echo -e "\n***function proccheck->NX" + elif ${readelf} -l "${1}/exe" 2>/dev/null | grep 'GNU_STACK' | grep -q 'RWE'; then + echo_message '\033[31mNX disabled\033[m ' 'NX disabled,' ' nx="no"' '"nx":"no",' else - echo -n -e '\033[32mNX enabled \033[m ' - fi + echo_message '\033[32mNX enabled \033[m ' 'NX enabled,' ' pax="yes"' '"nx":"yes",' + fi # check for PIE support - if readelf -h $1/exe 2>/dev/null | grep -q 'Type:[[:space:]]*EXEC'; then - echo -n -e '\033[31mNo PIE \033[m ' - elif readelf -h $1/exe 2>/dev/null | grep -q 'Type:[[:space:]]*DYN'; then - if readelf -d $1/exe 2>/dev/null | grep -q '(DEBUG)'; then - echo -n -e '\033[32mPIE enabled \033[m ' - else - echo -n -e '\033[33mDynamic Shared Object\033[m ' + ${debug} && echo -e "\n***function proccheck->PIE" + if ${readelf} -h "${1}/exe" 2>/dev/null | grep -q 'Type:[[:space:]]*EXEC'; then + echo_message '\033[31mNo PIE \033[m ' 'No PIE,' ' pie="no"' '"pie":"no",' + elif ${readelf} -h "${1}/exe" 2>/dev/null | grep -q 'Type:[[:space:]]*DYN'; then + if ${readelf} -d "${1}/exe" 2>/dev/null | grep -q 'DEBUG'; then + echo_message '\033[32mPIE enabled \033[m ' 'PIE enabled,' ' pie="yes"' '"pie":"yes",' + else + echo_message '\033[33mDynamic Shared Object\033[m ' 'Dynamic Shared Object,' ' pie="dso"' '"pie":"dso",' fi else - echo -n -e '\033[33mNot an ELF file \033[m ' + echo_message '\033[33mNot an ELF file \033[m ' 'Not an ELF file,' ' pie="not_elf"' '"pie":"not_elf",' + fi + + if ${extended_checks}; then + # check for selfrando support + ${debug} && echo -e "\n***function proccheck->selfrando" + if ${readelf} -S "${1}/exe" 2>/dev/null | grep -c txtrp | grep -q '1'; then + echo_message '\033[32mSelfrando enabled \033[m ' + else + echo_message '\033[31mNo Selfrando \033[m ' + fi + fi + + #check for forifty source support + FS_functions="$(${readelf} -s "${1}/exe" 2>/dev/null | awk '{ print $8 }' | sed 's/_*//' | sed -e 's/@.*//')" + if grep -q '_chk$' <<<"$FS_functions"; then + echo_message '\033[32mYes\033[m' 'Yes' " fortify_source='yes'>" '"fortify_source":"yes" }' + else + echo_message "\033[31mNo\033[m" "No" " fortify_source='no'>" '"fortify_source":"no" }' fi } # check mapped libraries libcheck() { - libs=( $(awk '{ print $6 }' /proc/$1/maps | grep '/' | sort -u | xargs file | grep ELF | awk '{ print $1 }' | sed 's/:/ /') ) - - printf "\n* Loaded libraries (file information, # of mapped files: ${#libs[@]}):\n\n" - - for element in $(seq 0 $((${#libs[@]} - 1))) + ${debug} && echo "***function libcheck" + IFS=" " read -r -a libs <<< "$(awk '{ print $6 }' "/proc/${1}/maps" | grep '/' | sort -u | xargs file | grep ELF | awk '{ print $1 }' | sed 's/:/ /')" + echo_message "\n* Loaded libraries (file information, # of mapped files: ${#libs[@]}):\n\n" "" "" "\"libs\": {" + + for ((element=0; element<${#libs[@]}; element++)) do - echo " ${libs[$element]}:" - echo -n " " - filecheck ${libs[$element]} - printf "\n\n" + echo_message " ${libs[$element]}:\n" "${libs[$element]}," "" "" + echo_message " " "" " " "" + filecheck "${libs[$element]}" + if [[ ${element} == $((${#libs[@]} - 1)) ]]; then + echo_message "\n\n" "\n" " filename='${libs[$element]}' />\n" "" + else + echo_message "\n\n" "\n" " filename='${libs[$element]}' />\n" "}," + fi done } # check for system-wide ASLR support aslrcheck() { + ${debug} && echo "***function aslrcheck" # PaX ASLR support - if !(cat /proc/1/status 2> /dev/null | grep -q 'Name:') ; then - echo -n -e ':\033[33m insufficient privileges for PaX ASLR checks\033[m\n' - echo -n -e ' Fallback to standard Linux ASLR check' + ${debug} && echo -e "\n***function aslrcheck->PAX ASLR" + if ! (grep -q 'Name:' /proc/1/status 2> /dev/null) ; then + echo_message '\033[33m insufficient privileges for PaX ASLR checks\033[m\n' '' '' '' + echo_message ' Fallback to standard Linux ASLR check' '' '' '' fi - - if cat /proc/1/status 2> /dev/null | grep -q 'PaX:'; then - printf ": " - if cat /proc/1/status 2> /dev/null | grep 'PaX:' | grep -q 'R'; then - echo -n -e '\033[32mPaX ASLR enabled\033[m\n\n' + + if grep -q 'PaX:' /proc/1/status 2> /dev/null; then + if grep -q 'PaX:' /proc/1/status 2> /dev/null | grep -q 'R'; then + echo_message '\033[32mPaX ASLR enabled\033[m\n\n' '' '' '' else - echo -n -e '\033[31mPaX ASLR disabled\033[m\n\n' + echo_message '\033[31mPaX ASLR disabled\033[m\n\n' '' '' '' fi else + ${debug} && echo -e "\n***function aslrcheck->randomize_va_space" # standard Linux 'kernel.randomize_va_space' ASLR support # (see the kernel file 'Documentation/sysctl/kernel.txt' for a detailed description) - printf " (kernel.randomize_va_space): " - if /sbin/sysctl -a 2>/dev/null | grep -q 'kernel.randomize_va_space = 1'; then - echo -n -e '\033[33mOn (Setting: 1)\033[m\n\n' - printf " Description - Make the addresses of mmap base, stack and VDSO page randomized.\n" - printf " This, among other things, implies that shared libraries will be loaded to \n" - printf " random addresses. Also for PIE-linked binaries, the location of code start\n" - printf " is randomized. Heap addresses are *not* randomized.\n\n" - elif /sbin/sysctl -a 2>/dev/null | grep -q 'kernel.randomize_va_space = 2'; then - echo -n -e '\033[32mOn (Setting: 2)\033[m\n\n' - printf " Description - Make the addresses of mmap base, heap, stack and VDSO page randomized.\n" - printf " This, among other things, implies that shared libraries will be loaded to random \n" - printf " addresses. Also for PIE-linked binaries, the location of code start is randomized.\n\n" - elif /sbin/sysctl -a 2>/dev/null | grep -q 'kernel.randomize_va_space = 0'; then - echo -n -e '\033[31mOff (Setting: 0)\033[m\n' + echo_message " (kernel.randomize_va_space): " '' '' '' + if sysctl -a 2>/dev/null | grep -q 'kernel.randomize_va_space = 1'; then + echo_message '\033[33mPartial (Setting: 1)\033[m\n\n' '' '' '' + echo_message " Description - Make the addresses of mmap base, stack and VDSO page randomized.\n" '' '' '' + echo_message " This, among other things, implies that shared libraries will be loaded to \n" '' '' '' + echo_message " random addresses. Also for PIE-linked binaries, the location of code start\n" '' '' '' + echo_message " is randomized. Heap addresses are *not* randomized.\n\n" '' '' '' + elif sysctl -a 2>/dev/null | grep -q 'kernel.randomize_va_space = 2'; then + echo_message '\033[32mFull (Setting: 2)\033[m\n\n' '' '' '' + echo_message " Description - Make the addresses of mmap base, heap, stack and VDSO page randomized.\n" '' '' '' + echo_message " This, among other things, implies that shared libraries will be loaded to random \n" '' '' '' + echo_message " addresses. Also for PIE-linked binaries, the location of code start is randomized.\n\n" '' '' '' + elif sysctl -a 2>/dev/null | grep -q 'kernel.randomize_va_space = 0'; then + echo_message '\033[31mNone (Setting: 0)\033[m\n' '' '' '' else - echo -n -e '\033[31mNot supported\033[m\n' + echo_message '\033[31mNot supported\033[m\n' '' '' '' fi - printf " See the kernel file 'Documentation/sysctl/kernel.txt' for more details.\n\n" - fi + echo_message " See the kernel file 'Documentation/sysctl/kernel.txt' for more details.\n\n" '' '' '' + fi } # check cpu nx flag nxcheck() { - if grep -q nx /proc/cpuinfo; then - echo -n -e '\033[32mYes\033[m\n\n' + ${debug} && echo -e "\n***function nxcheck" + if grep -qFw nx /proc/cpuinfo; then + echo_message '\033[32mYes\033[m\n\n' '' '' '' else - echo -n -e '\033[31mNo\033[m\n\n' + echo_message '\033[31mNo\033[m\n\n' '' '' '' fi } +#Check core dumps restricted? +coredumpcheck() { + ${debug} && echo -e "\n***function coredumpcheck" + coreValue=$(grep -Exic "hard[[:blank:]]+core[[:blank:]]+0" /etc/security/limits.conf) + coreValueDefault=$(grep -Exic "\*[[:blank:]]+hard[[:blank:]]+core[[:blank:]]+0" /etc/security/limits.conf) + dumpableValue=$(sysctl -b -e fs.suid_dumpable) + if { [[ "${coreValue}" == 1 ]] || [[ "${coreValueDefault}" == 1 ]]; } && { [[ "${dumpableValue}" == 0 ]] || [[ "${dumpableValue}" == 2 ]]; }; then + echo_message '\033[32mRestricted\033[m\n\n' '' '' '' + else + echo_message '\033[31mNot Restricted\033[m\n\n' '' '' '' + fi +} + # check for kernel protection mechanisms kernelcheck() { - printf " Description - List the status of kernel protection mechanisms. Rather than\n" - printf " inspect kernel mechanisms that may aid in the prevention of exploitation of\n" - printf " userspace processes, this option lists the status of kernel configuration\n" - printf " options that harden the kernel itself against attack.\n\n" - printf " Kernel config: " - - if [ -f /proc/config.gz ] ; then + ${debug} && echo "***function kernelcheck" + echo_message " Description - List the status of kernel protection mechanisms. Rather than\n" '' '' '' + echo_message " inspect kernel mechanisms that may aid in the prevention of exploitation of\n" '' '' '' + echo_message " userspace processes, this option lists the status of kernel configuration\n" '' '' '' + echo_message " options that harden the kernel itself against attack.\n\n" '' '' '' + echo_message " Kernel config:\n" '' '' '{ "kernel": ' + + if [[ ! "${1}" == "" ]] ; then + kconfig="cat ${1}" + echo_message " Warning: The config ${1} on disk may not represent running kernel config!\n\n" "${1}" "" '{ "KernelConfig":"not_found" } }' exit 0 fi + ${debug} && ${kconfig} | grep "CONFIG_GRKERNSEC" + ${debug} && ${kconfig} | grep "CONFIG_PAX" - printf " GCC stack protector support: " - if $kconfig | grep -qi 'CONFIG_CC_STACKPROTECTOR=y'; then - printf "\033[32mEnabled\033[m\n" + echo_message " Vanilla Kernel ASLR: " "" "" "" + randomize_va=$(sysctl -b -e kernel.randomize_va_space) + if [[ "x${randomize_va}" == "x2" ]]; then + echo_message "\033[32mFull\033[m\n" "Full," " randomize_va_space='full'" ', "randomize_va_space":"full"' + elif [[ "x${randomize_va}" == "x1" ]]; then + echo_message "\033[33mPartial\033[m\n" "Partial," " randomize_va_space='partial'" ', "randomize_va_space":"partial"' else - printf "\033[31mDisabled\033[m\n" + echo_message "\033[31mNone\033[m\n" "None," " randomize_va_space='none'" ', "randomize_va_space":"none"' fi - printf " Strict user copy checks: " - if $kconfig | grep -qi 'CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y'; then - printf "\033[32mEnabled\033[m\n" + echo_message " NX protection: " "" "" "" + if (command_exists dmesg) && (root_privs); then + nx_protection=$(dmesg -t 2>/dev/null | grep -Fw NX) + if [[ "x${nx_protection}" == "xNX (Execute Disable) protection: active" ]]; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " nx_protection='yes'" ', "nx_protection":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " nx_protection='no'" ', "nx_protection":"no"' + fi else - printf "\033[31mDisabled\033[m\n" + echo_message "\033[33mSkipped\033[m\n" "Skipped," " nx_protection='skipped'" ', "nx_protection":"skipped"' fi - printf " Enforce read-only kernel data: " - if $kconfig | grep -qi 'CONFIG_DEBUG_RODATA=y'; then - printf "\033[32mEnabled\033[m\n" + echo_message " Protected symlinks: " "" "" "" + symlink=$(sysctl -b -e fs.protected_symlinks) + if [[ "x${symlink}" == "x1" ]]; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " protect_symlinks='yes'" ', "protect_symlinks":"yes"' else - printf "\033[31mDisabled\033[m\n" - fi - printf " Restrict /dev/mem access: " - if $kconfig | grep -qi 'CONFIG_STRICT_DEVMEM=y'; then - printf "\033[32mEnabled\033[m\n" - else - printf "\033[31mDisabled\033[m\n" + echo_message "\033[31mDisabled\033[m\n" "Disabled," " protect_symlinks='no'" ', "protect_symlinks":"no"' fi - printf " Restrict /dev/kmem access: " - if $kconfig | grep -qi 'CONFIG_DEVKMEM=y'; then - printf "\033[31mDisabled\033[m\n" + echo_message " Protected hardlinks: " "" "" "" + hardlink=$(sysctl -b -e fs.protected_hardlinks) + if [[ "x${hardlink}" == "x1" ]]; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " protect_hardlinks='yes'" ', "protect_hardlinks":"yes"' else - printf "\033[32mEnabled\033[m\n" + echo_message "\033[31mDisabled\033[m\n" "Disabled," " protect_hardlinks='no'" ', "protect_hardlinks":"no"' fi - printf "\n" - printf "* grsecurity / PaX: " - - if $kconfig | grep -qi 'CONFIG_GRKERNSEC=y'; then - if $kconfig | grep -qi 'CONFIG_GRKERNSEC_HIGH=y'; then - printf "\033[32mHigh GRKERNSEC\033[m\n\n" - elif $kconfig | grep -qi 'CONFIG_GRKERNSEC_MEDIUM=y'; then - printf "\033[33mMedium GRKERNSEC\033[m\n\n" - elif $kconfig | grep -qi 'CONFIG_GRKERNSEC_LOW=y'; then - printf "\033[31mLow GRKERNSEC\033[m\n\n" - else - printf "\033[33mCustom GRKERNSEC\033[m\n\n" - fi - - printf " Non-executable kernel pages: " - if $kconfig | grep -qi 'CONFIG_PAX_KERNEXEC=y'; then - printf "\033[32mEnabled\033[m\n" - else - printf "\033[31mDisabled\033[m\n" - fi - - printf " Prevent userspace pointer deref: " - if $kconfig | grep -qi 'CONFIG_PAX_MEMORY_UDEREF=y'; then - printf "\033[32mEnabled\033[m\n" - else - printf "\033[31mDisabled\033[m\n" - fi - - printf " Prevent kobject refcount overflow: " - if $kconfig | grep -qi 'CONFIG_PAX_REFCOUNT=y'; then - printf "\033[32mEnabled\033[m\n" - else - printf "\033[31mDisabled\033[m\n" - fi - - printf " Bounds check heap object copies: " - if $kconfig | grep -qi 'CONFIG_PAX_USERCOPY=y'; then - printf "\033[32mEnabled\033[m\n" - else - printf "\033[31mDisabled\033[m\n" - fi - - printf " Disable writing to kmem/mem/port: " - if $kconfig | grep -qi 'CONFIG_GRKERNSEC_KMEM=y'; then - printf "\033[32mEnabled\033[m\n" - else - printf "\033[31mDisabled\033[m\n" - fi - - printf " Disable privileged I/O: " - if $kconfig | grep -qi 'CONFIG_GRKERNSEC_IO=y'; then - printf "\033[32mEnabled\033[m\n" - else - printf "\033[31mDisabled\033[m\n" - fi - - printf " Harden module auto-loading: " - if $kconfig | grep -qi 'CONFIG_GRKERNSEC_MODHARDEN=y'; then - printf "\033[32mEnabled\033[m\n" - else - printf "\033[31mDisabled\033[m\n" - fi - - printf " Hide kernel symbols: " - if $kconfig | grep -qi 'CONFIG_GRKERNSEC_HIDESYM=y'; then - printf "\033[32mEnabled\033[m\n" - else - printf "\033[31mDisabled\033[m\n" - fi + echo_message " Protected fifos: " "" "" "" + fifos=$(sysctl -b -e fs.protected_fifos) + if [[ "x${fifos}" == "x" ]]; then + echo_message "\033[33mUnsupported\033[m\n" "Unsupported," " protect_fifos='unsupported'" ', "protect_fifos":"unsupported"' + elif [[ "x${fifos}" == "x2" ]]; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " protect_fifos='yes'" ', "protect_fifos":"yes"' else - printf "\033[31mNo GRKERNSEC\033[m\n\n" - printf " The grsecurity / PaX patchset is available here:\n" - printf " http://grsecurity.net/\n" + echo_message "\033[31mDisabled\033[m\n" "Disabled," " protect_fifos='no'" ', "protect_fifos":"no"' fi - printf "\n" - printf "* Kernel Heap Hardening: " + echo_message " Protected regular: " "" "" "" + regular=$(sysctl -b -e fs.protected_regular) + if [[ "x${regular}" == "x" ]]; then + echo_message "\033[33mUnsupported\033[m\n" "Unsupported," " protect_regular='unsupported'" ', "protect_regular":"unsupported"' + elif [[ "x${regular}" == "x2" ]]; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " protect_regular='yes'" ', "protect_regular":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " protect_regular='no'" ', "protect_regular":"no"' + fi - if $kconfig | grep -qi 'CONFIG_KERNHEAP=y'; then - if $kconfig | grep -qi 'CONFIG_KERNHEAP_FULLPOISON=y'; then - printf "\033[32mFull KERNHEAP\033[m\n\n" + echo_message " Ipv4 reverse path filtering: " "" "" "" + ipv4_rpath=$(sysctl -b -e net.ipv4.conf.all.rp_filter) + if [[ "x${ipv4_rpath}" == "x1" ]]; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " ipv4_rpath='yes'" ', "ipv4_rpath":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " ipv4_rpath='no'" ', "ipv4_rpath":"no"' + fi + + echo_message " Kernel heap randomization: " "" "" "" + # NOTE: y means it turns off kernel heap randomization for backwards compatability (libc5) + if ${kconfig} | grep -qi 'CONFIG_COMPAT_BRK=y'; then + echo_message "\033[31mDisabled\033[m\n" "Disabled," " kernel_heap_randomization='no'" ', "kernel_heap_randomization":"no"' + else + echo_message "\033[32mEnabled\033[m\n" "Enabled," " kernel_heap_randomization='yes'" ', "kernel_heap_randomization":"yes"' + fi + + if ${kconfig} | grep -qi 'CONFIG_CC_STACKPROTECTOR' || ${kconfig} | grep -qa 'CONFIG_STACKPROTECTOR'; then + echo_message " GCC stack protector support: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_CC_STACKPROTECTOR=y' || ${kconfig} | grep -qi 'CONFIG_STACKPROTECTOR=y' ; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " gcc_stack_protector='yes'" ', "gcc_stack_protector":"yes"' + + if ${kconfig} | grep -qi 'CONFIG_CC_STACKPROTECTOR_STRONG' || ${kconfig} | grep -qi 'CONFIG_STACKPROTECTOR_STRONG'; then + echo_message " GCC stack protector strong: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_CC_STACKPROTECTOR_STRONG=y' || ${kconfig} | grep -qi 'CONFIG_STACKPROTECTOR_STRONG=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " gcc_stack_protector_strong='yes'" ', "gcc_stack_protector_strong":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " gcc_stack_protector_strong='no'" ', "gcc_stack_protector_strong":"no"' + fi + fi else - printf "\033[33mPartial KERNHEAP\033[m\n\n" + echo_message "\033[31mDisabled\033[m\n" "Disabled," " gcc_stack_protector='no'" ', "gcc_stack_protector":"no"' + fi + fi + + if ${kconfig} | grep -qi 'CONFIG_GCC_PLUGIN_STRUCTLEAK'; then + echo_message " GCC structleak plugin: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_GCC_PLUGIN_STRUCTLEAK=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " gcc_structleak='yes'" ', "gcc_structleak":"yes"' + echo_message " GCC structleak by ref plugin: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " gcc_structleak_byref='yes'" ', "gcc_structleak_byref":"yes"' + else + echo_message "\033[32mEnabled\033[m\n" "Enabled," " gcc_structleak_byref='no'" ', "gcc_structleak_byref":"no"' + fi + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " gcc_structleak='no'" ', "gcc_structleak":"no"' + fi + fi + + if ${kconfig} | grep -qi 'CONFIG_SLAB_FREELIST_RANDOM'; then + echo_message " SLAB freelist randomization: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_SLAB_FREELIST_RANDOM=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " slab_freelist_randomization='yes'" ', "slab_freelist_randomization":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " slab_freelist_randomization='no'" ', "slab_freelist_randomization":"no"' + fi + fi + + if ${kconfig} | grep -qi 'CPU_SW_DOMAIN_PAN=y'; then + echo_message " Use CPU domains: " "" "" "" + if ${kconfig} | grep -qi 'CPU_SW_DOMAIN_PAN=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " cpu_sw_domain'yes'" ', "cpu_sw_domain":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " cpu_sw_domain='no'" ', "cpu_sw_domain":"no"' + fi + fi + + + if ${kconfig} | grep -qi 'CONFIG_VMAP_STACK'; then + echo_message " Virtually-mapped kernel stack: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_VMAP_STACK=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " virtually_mapped_stack='yes'" ', "virtually_mapped_stack":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " virtually_mapped_stack='no'" ', "virtually_mapped_stack":"no"' + fi + fi + + + if ${kconfig} | grep -qi 'CONFIG_DEVMEM'; then + if ${kconfig} | grep -qi 'CONFIG_DEVMEM=y'; then + echo_message " Restrict /dev/mem access: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_STRICT_DEVMEM=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " restrict_dev_mem_access='yes'" ', "restrict_dev_mem_access":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " restrict_dev_mem_access='no'" ', "restrict_dev_mem_access":"no"' + fi + + echo_message " Restrict I/O access to /dev/mem: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_IO_STRICT_DEVMEM=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " restrict_io_dev_mem_access='yes'" ', "restrict_io_dev_mem_access":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " restrict_io_dev_mem_access='no'" ', "restrict_io_dev_mem_access":"no"' + fi + fi + fi + + + if ! ${kconfig} | grep -qi 'CONFIG_PAX'; then + if ${kconfig} | grep -qi 'CONFIG_DEBUG_RODATA' || ${kconfig} | grep -qi '|CONFIG_STRICT_KERNEL_RWX'; then + echo_message " Enforce read-only kernel data: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_DEBUG_RODATA=y\|CONFIG_STRICT_KERNEL_RWX=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " ro_kernel_data='yes'" ', "ro_kernel_data":"yes"' + echo_message " Enforce read-only module data: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_STRICT_MODULE_RWX=y\|CONFIG_DEBUG_SET_MODULE_RONX'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " ro_module_data='yes'" ', "ro_module_data":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " ro_module_data='no'" ', "ro_module_data":"no"' + fi + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " ro_kernel_data='no'" ', "ro_kernel_data":"no"' + fi + fi + fi + + if ${kconfig} | grep -qi 'CONFIG_REFCOUNT_FULL'; then + echo_message " Full reference count validation: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_REFCOUNT_FULL=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " full_refcount_validation='yes'" ', "full_refcount_validation":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " full_refcount_validation='no'" ', "full_refcount_validation":"no"' + fi + fi + + echo_message " Exec Shield: " """" "" + execshield=$(sysctl -b -e kernel.exec-shield) + if [[ "x${execshield}" == "x" ]]; then + echo_message '\033[32mUnsupported\033[m\n\n' '' '' '' + elif [[ "x${execshield}" == "x1" ]]; then + echo_message '\033[32mEnabled\033[m\n\n' '' '' '' + else + echo_message '\033[31mDisabled\033[m\n\n' '' '' '' + fi + + if ${kconfig} | grep -qi 'CONFIG_HARDENED_USERCOPY'; then + echo_message " Hardened Usercopy: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_HARDENED_USERCOPY=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " hardened_usercopy='yes'" ', "hardened_usercopy":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " hardened_usercopy='no'" ', "hardened_usercopy":"no"' + fi + fi + + if ${kconfig} | grep -qi 'CONFIG_FORTIFY_SOURCE'; then + echo_message " Harden str/mem functions: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_FORTIFY_SOURCE=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " fortify_source='yes'" ', "fortify_source":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " fortify_source='no'" ', "fortify_source":"no"' + fi + fi + + if ${kconfig} | grep -qi 'CONFIG_DEVKMEM'; then + echo_message " Restrict /dev/kmem access: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_DEVKMEM=y'; then + echo_message "\033[31mDisabled\033[m\n" "Disabled," " restrict_dev_kmem_access='no'" ', "restrict_dev_kmem_access":"no"' + else + echo_message "\033[32mEnabled\033[m\n" "Enabled," " restrict_dev_kmem_access='yes'" ', "restrict_dev_kmem_access":"yes"' + fi + fi + + #x86 only + if [[ "${arch}" == "32" ]] || [[ "${arch}" == "64" ]]; then + echo_message "\n" "\n" "" "" + echo_message "* X86 only: \n" "" "" "" + + if ! ${kconfig} | grep -qi 'CONFIG_PAX_SIZE_OVERFLOW=y'; then + if ${kconfig} | grep -qi 'CONFIG_DEBUG_STRICT_USER_COPY_CHECKS'; then + echo_message " Strict user copy checks: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " strict_user_copy_check='yes'" ', "strict_user_copy_check":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " strict_user_copy_check='no'" ', "strict_user_copy_check":"no"' + fi + fi + fi + + if ${kconfig} | grep -qi 'CONFIG_RANDOMIZE_BASE' || ${kconfig} | grep -qi 'CONFIG_PAX_ASLR'; then + echo_message " Address space layout randomization: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_RANDOMIZE_BASE=y' || ${kconfig} | grep -qi 'CONFIG_PAX_ASLR=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " random_address_space_layout='yes'" ', "random_address_space_layout":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " random_address_space_layout='no'" ', "random_address_space_layout":"no"' + fi + fi + fi + + #ARM only + if [[ "${arch}" == "arm" ]]; then + echo_message "\n" "\n" "\n" "" + echo_message "* ARM only: \n" "" "" "" + + if ${kconfig} | grep -qi 'CONFIG_ARM_KERNMEM_PERMS'; then + echo_message " Restrict kernel memory permissions: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_ARM_KERNMEM_PERMS=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " arm_kernmem_perms='yes'" ', "arm_kernmem_perms":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " arm_kernmem_perms='no'" ', "arm_kernmem_perms":"no"' + fi + fi + + if ${kconfig} | grep -qi 'CONFIG_DEBUG_ALIGN_RODATA'; then + echo_message " Make rodata strictly non-excutable: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_DEBUG_ALIGN_RODATA=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " arm_strict_rodata='yes'" ', "arm_strict_rodata":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " arm_strict_rodata='no'" ', "arm_strict_rodata":"no"' + fi + fi + + fi + + #ARM64 only + if [[ "${arch}" == "aarch64" ]]; then + echo_message "\n" "\n" "\n" "" + echo_message "* ARM64 only: \n" "" "" "" + + if ${kconfig} | grep -qi 'CONFIG_UNMAP_KERNEL_AT_EL0'; then + echo_message " Unmap kernel in userspace (KAISER): " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_UNMAP_KERNEL_AT_EL0=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " unmap_kernel_in_userspace='yes'" ', "unmap_kernel_in_userspace":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " unmap_kernel_in_userspace='no'" ', "unmap_kernel_in_userspace":"no"' + fi + fi + + if ${kconfig} | grep -qi 'CONFIG_HARDEN_BRANCH_PREDICTOR'; then + echo_message " Harden branch predictor: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_HARDEN_BRANCH_PREDICTOR=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " harden_branch_predictor='yes'" ', "harden_branch_predictor":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " harden_branch_predictor='no'" ', "harden_branch_predictor":"no"' + fi + fi + + if ${kconfig} | grep -qi 'CONFIG_HARDEN_EL2_VECTORS'; then + echo_message " Harden EL2 vector mapping: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_HARDEN_EL2_VECTORS=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " harden_el2_vector_mapping='yes'" ', "harden_el2_vector_mapping":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " harden_el2_vector_mapping='no'" ', "harden_el2_vector_mapping":"no"' + fi + fi + + if ${kconfig} | grep -qi 'CONFIG_ARM64_SSBD'; then + echo_message " Speculative store bypass disable: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_ARM64_SSBD=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " speculative_store_bypass_disable='yes'" ', "speculative_store_bypass_disable":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " speculative_store_bypass_disable='no'" ', "speculative_store_bypass_disable":"no"' + fi + fi + + if ${kconfig} | grep -qi 'CONFIG_ARM64_SW_TTBR0_PAN'; then + echo_message " Emulate privileged access never: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_ARM64_SW_TTBR0_PAN=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " emulate_privileged_access_never='yes'" ', "emulate_privileged_access_never":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " emulate_privileged_access_never='no'" ', "emulate_privileged_access_never":"no"' + fi + fi + + if ${kconfig} | grep -qi 'CONFIG_RANDOMIZE_BASE'; then + echo_message " Randomize address of kernel image: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_RANDOMIZE_BASE=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " randomize_kernel_address='yes'" ', "randomize_kernel_address":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " randomize_kernel_address='no'" ', "randomize_kernel_address":"no"' + fi + fi + + if ${kconfig} | grep -qi 'CONFIG_RANDOMIZE_MODULE_REGION_FULL'; then + echo_message " Randomize module region over 4GB: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_RANDOMIZE_MODULE_REGION_FULL=y'; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " randomize_module_region_full='yes'" ', "randomize_module_region_full":"yes"' + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " randomize_module_region_full='no'" ', "randomize_module_region_full":"no"' + fi + fi + fi + + echo_message "" "" ">" "}," + + + echo_message "\n" "\n" "\n" "" + echo_message "* SELinux: " "" "" "" + if ${kconfig} | grep -qi 'CONFIG_SECURITY_SELINUX=y'; then + getsestatus + sestatus=$? + if [[ ${sestatus} == 0 ]]; then + echo_message "\033[31mDisabled\033[m\n" "Disabled,," " \n" " }" + echo_message "* grsecurity / PaX: " "" "" "" + + if ${kconfig} | grep -qi 'CONFIG_GRKERNSEC=y'; then + if ${kconfig} | grep -qi 'CONFIG_GRKERNSEC_HIGH=y'; then + echo_message "\033[32mHigh GRKERNSEC\033[m\n\n" "High GRKERNSEC," " /dev/null || echo $?) + if [[ "x${grcheck}" != "x255" ]] && [[ "x${grcheck}" != "x0" ]]; then + echo_message "\033[32mEnabled\033[m\n" "Enabled," " grsec_sysctl_${command}='yes'" ", \"grsec_sysctl_${command}\":\"yes\"" + else + echo_message "\033[31mDisabled\033[m\n" "Disabled," " grsec_sysctl_${command}='no'" ", \"grsec_sysctl_${command}\":\"no\"" + fi + if [[ "${command}" == "tpe_restrict_all" ]]; then + echo_message "" "" "" " } }" + else + echo_message "" "" "" "" + fi + done + echo_message "" "" " />\n\n" "" fi else - printf "\033[31mNo KERNHEAP\033[m\n\n" - printf " The KERNHEAP hardening patchset is available here:\n" - printf " https://www.subreption.com/kernheap/\n\n" + echo_message "\033[31mNo GRKERNSEC\033[m\n\n" "No GRKERNSEC,,,,,,,," " \n\n" ', "grsecurity": { "grsecurity_config":"no" } }' + echo_message " The grsecurity / PaX patchset is available here:\n" "" "" "" + echo_message " http://grsecurity.net/\n" "" "" "" fi } # --- FORTIFY_SOURCE subfunctions (start) --- - # is FORTIFY_SOURCE supported by libc? FS_libc_check() { - printf "* FORTIFY_SOURCE support available (libc) : " + ${debug} && echo "***function FS_libc_check" + echo_message "* FORTIFY_SOURCE support available (libc) : " "" "" - if [ "${#FS_chk_func_libc[@]}" != "0" ] ; then - printf "\033[32mYes\033[m\n" + if [[ "${#FS_chk_func_libc[@]}" != "0" ]] ; then + echo_message "\033[32mYes\033[m\n" "Yes," " libc_fortify_source='yes' " ', "libc_fortify_source":"yes"' else - printf "\033[31mNo\033[m\n" + echo_message "\033[31mNo\033[m\n" "No," " libc_fortify_source='no' " ', "libc_fortify_source":"no"' exit 1 fi } # was the binary compiled with FORTIFY_SOURCE? FS_binary_check() { - printf "* Binary compiled with FORTIFY_SOURCE support: " + ${debug} && echo "***function FS_binary_check" + echo_message "* Binary compiled with FORTIFY_SOURCE support: " "" "" "" - for FS_elem_functions in $(seq 0 $((${#FS_functions[@]} - 1))) + for ((FS_elem_functions=0; FS_elem_functions<${#FS_functions[@]}; FS_elem_functions++)) do - if [[ ${FS_functions[$FS_elem_functions]} =~ _chk ]] ; then - printf "\033[32mYes\033[m\n" + if [[ ${FS_functions[$FS_elem_functions]} =~ _chk$ ]] ; then + echo_message "\033[32mYes\033[m\n" "Yes\n" " binary_compiled_with_fortify='yes'>\n" ', "binary_compiled_with_fortify":"yes"' return fi done - printf "\033[31mNo\033[m\n" + echo_message "\033[31mNo\033[m\n" "No\n" " binary_compiled_with_fortify='no'>\n" ', "binary_compiled_with_fortify":"no"' exit 1 } FS_comparison() { - echo - printf " ------ EXECUTABLE-FILE ------- . -------- LIBC --------\n" - printf " FORTIFY-able library functions | Checked function names\n" - printf " -------------------------------------------------------\n" + ${debug} && echo "***function FS_comparison" + echo_message "\n" "" "" + echo_message " ------ EXECUTABLE-FILE ------- . -------- LIBC --------\n" "" "" "" + echo_message " Fortifiable library functions | Checked function names\n" "" "" "" + echo_message " -------------------------------------------------------\n" "" "" "" - for FS_elem_libc in $(seq 0 $((${#FS_chk_func_libc[@]} - 1))) + ${debug} && echo -e "\n***function FS_comparison->FS_elem_libc" + for ((FS_elem_libc=0; FS_elem_libc<${#FS_chk_func_libc[@]}; FS_elem_libc++)) do - for FS_elem_functions in $(seq 0 $((${#FS_functions[@]} - 1))) + ${debug} && echo -e "\n***function FS_comparison->FS_elem_libc->FS_elem_functions" + for ((FS_elem_functions=0; FS_elem_functions<${#FS_functions[@]}; FS_elem_functions++)) do FS_tmp_func=${FS_functions[$FS_elem_functions]} FS_tmp_libc=${FS_chk_func_libc[$FS_elem_libc]} - if [[ $FS_tmp_func =~ ^$FS_tmp_libc$ ]] ; then - printf " \033[31m%-30s\033[m | __%s%s\n" $FS_tmp_func $FS_tmp_libc $FS_end - let FS_cnt_total++ - let FS_cnt_unchecked++ - elif [[ $FS_tmp_func =~ ^$FS_tmp_libc(_chk) ]] ; then - printf " \033[32m%-30s\033[m | __%s%s\n" $FS_tmp_func $FS_tmp_libc $FS_end - let FS_cnt_total++ - let FS_cnt_checked++ + if [[ ${FS_tmp_func} =~ ^${FS_tmp_libc}$ ]] ; then + if [[ ${format} == "cli" ]]; then + printf " \033[31m%-30s\033[m | __%s%s\n" "${FS_tmp_func}" "${FS_tmp_libc}" "${FS_end}" + else + if [[ $FS_elem_functions == 0 ]]; then + echo_message "" "${FS_tmp_func},${FS_tmp_libc},yes\n" " \n" ", \"function\": { \"name\":\"${FS_tmp_func}\", \"libc\":\"${FS_tmp_libc}\", \"fortifiable\":\"yes\" }" + elif [[ $FS_elem_functions == $((${#FS_functions[@]} - 1 )) ]]; then + echo_message "" "${FS_tmp_func},${FS_tmp_libc},yes\n" " \n" ", \"function\": { \"name\":\"${FS_tmp_func}\", \"libc\":\"${FS_tmp_libc}\", \"fortifiable\":\"yes\" }" + else + echo_message "" "${FS_tmp_func},${FS_tmp_libc},yes\n" " \n" ", \"function\": { \"name\":\"${FS_tmp_func}\", \"libc\":\"${FS_tmp_libc}\", \"fortifiable\":\"yes\" }" + fi + fi + (( FS_cnt_total++ )) + (( FS_cnt_unchecked++ )) + elif [[ ${FS_tmp_func} =~ ^${FS_tmp_libc}(_chk)$ ]] ; then + if [[ ${format} == "cli" ]]; then + printf " \033[32m%-30s\033[m | __%s%s\n" "${FS_tmp_func}" "${FS_tmp_libc}" "${FS_end}" + else + if [[ $FS_elem_functions == 0 ]]; then + echo_message "" "${FS_tmp_func},${FS_tmp_libc},no\n" " \n" ", \"function\": { \"name\":\"${FS_tmp_func}\", \"libc\":\"${FS_tmp_libc}\", \"fortifiable\":\"no\" }" + elif [[ $FS_elem_functions == $((${#FS_functions[@]} - 1 )) ]]; then + echo_message "" "${FS_tmp_func},${FS_tmp_libc},no\n" " \n" ", \"function\": { \"name\":\"${FS_tmp_func}\", \"libc\":\"${FS_tmp_libc}\", \"fortifiable\":\"no\" }" + else + echo_message "" "${FS_tmp_func},${FS_tmp_libc},no\n" " \n" ", \"function\": { \"name\":\"${FS_tmp_func}\", \"libc\":\"${FS_tmp_libc}\", \"fortifiable\":\"no\" }" fi + fi + (( FS_cnt_total++ )) + (( FS_cnt_checked++ )) + fi done done } FS_summary() { - echo - printf "SUMMARY:\n\n" - printf "* Number of checked functions in libc : ${#FS_chk_func_libc[@]}\n" - printf "* Total number of library functions in the executable: ${#FS_functions[@]}\n" - printf "* Number of FORTIFY-able functions in the executable : %s\n" $FS_cnt_total - printf "* Number of checked functions in the executable : \033[32m%s\033[m\n" $FS_cnt_checked - printf "* Number of unchecked functions in the executable : \033[31m%s\033[m\n" $FS_cnt_unchecked - echo + ${debug} && echo "***function FS_summary" + echo_message "\n" "" "\n" "" + echo_message "SUMMARY:\n\n" "" "" "" + echo_message "* Number of checked functions in libc : ${#FS_chk_func_libc[@]}\n" "${#FS_chk_func_libc[@]}," " " ", \"nb_unchecked_func\":\"${FS_cnt_unchecked}\" } " + echo_message "\n" "\n" "\n" "" } -# --- FORTIFY_SOURCE subfunctions (end) --- +debug_report() { + echo "***** Checksec debug *****" + failed=false + id + uname -a -if !(command_exists readelf) ; then - printf "\033[31mWarning: 'readelf' not found! It's required for most checks.\033[m\n\n" - have_readelf=0 -fi + echo "checksec version: ${SCRIPT_MAJOR}.${SCRIPT_MINOR}.${SCRIPT_REVISION} -- ${SCRIPT_VERSION}" -# parse command-line arguments -case "$1" in - - --version) - version - exit 0 - ;; - - --help) - help - exit 0 - ;; - - --dir) - if [ "$3" = "-v" ] ; then - verbose=true + if [[ -f /etc/os-release ]]; then + # freedesktop.org and systemd + # shellcheck disable=SC1091 + source /etc/os-release + # shellcheck disable=SC2153 + OS=${NAME} + VER=${VERSION_ID} + elif type lsb_release >/dev/null 2>&1; then + # linuxbase.org + OS=$(lsb_release -si) + VER=$(lsb_release -sr) + elif [[ -f /etc/lsb-release ]]; then + # For some versions of Debian/Ubuntu without lsb_release command + # shellcheck disable=SC1091 + source /etc/lsb-release + OS=${DISTRIB_ID} + VER=${DISTRIB_RELEASE} + elif [[ -f /etc/debian_version ]]; then + # Older Debian/Ubuntu/etc. + OS=Debian + VER=$(cat /etc/debian_version) + elif [[ -f /etc/SuSe-release ]]; then + # Older SuSE/etc. + OS=$(cat /etc/SuSe-release) + VER=$(uname -r) + elif [[ -f /etc/redhat-release ]]; then + # Older Red Hat, CentOS, etc. + OS=$(cat /etc/redhat-release) + VER=$(uname -r) + else + # Fall back to uname, e.g. "Linux ", also works for BSD, etc. + OS=$(uname -s) + VER=$(uname -r) fi - if [ $have_readelf -eq 0 ] ; then + + echo "OS=${OS}" + echo "VER=${VER}" + + for command in cat awk sysctl uname mktemp openssl grep stat file find head ps readlink basename id which wget curl readelf eu-readelf; do + path="$(command -v ${command})" + if [[ -e "${path}" ]]; then + ls -l "${path}" + if [[ -L "${path}" ]]; then + absolutepath=$(readlink -f "${path}") + ls -l "${absolutepath}" + file "${absolutepath}" + else + file "${path}" + fi + else + echo "*** can not find command ${command}" + failed=true + fi + done + + if [[ ${failed} ]]; then exit 1 - fi - if [ -z "$2" ] ; then + fi +} + +chk_dir () { + if [[ -z "${CHK_DIR}" ]] ; then printf "\033[31mError: Please provide a valid directory.\033[m\n\n" exit 1 fi # remove trailing slashes - tempdir=`echo $2 | sed -e "s/\/*$//"` - if [ ! -d $tempdir ] ; then - printf "\033[31mError: The directory '$tempdir' does not exist.\033[m\n\n" + tempdir=$(echo "${CHK_DIR}" | sed -e "s/\/*$//") + if [[ ! -d "${tempdir}" ]] ; then + printf "\033[31mError: The directory '%s' does not exist.\033[m\n\n" "${tempdir}" exit 1 fi - cd $tempdir - printf "RELRO STACK CANARY NX PIE RPATH RUNPATH FILE\n" - for N in [A-Za-z]*; do - if [ "$N" != "[A-Za-z]*" ]; then - # read permissions? - if [ ! -r $N ]; then - printf "\033[31mError: No read permissions for '$tempdir/$N' (run as root).\033[m\n" - else - # ELF executable? - out=`file $N` - if [[ ! $out =~ ELF ]] ; then - if [ "$verbose" = "true" ] ; then - printf "\033[34m*** Not an ELF file: $tempdir/" - file $N - printf "\033[m" - fi - else - filecheck $N - if [ `find $tempdir/$N \( -perm -004000 -o -perm -002000 \) -type f -print` ]; then - printf "\033[37;41m%s%s\033[m" $2 $N - else - printf "%s%s" $tempdir/ $N - fi - echo - fi + if ${extended_checks}; then + echo_message "RELRO STACK CANARY NX PIE SELFRANDO Clang CFI SafeStack RPATH RUNPATH Symbols \tFORTIFY\tFortified\tFortifiable Filename\n" '' "\n" "{ \"dir\": { \"name\":\"$tempdir\" }" + else + echo_message "RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols \tFORTIFY\tFortified\tFortifiable Filename\n" '' "\n" "{ \"dir\": { \"name\":\"$tempdir\" }" + fi + fdircount=0 + fdirtotal=0 + + while read -r N; do + if [[ "${N}" != "[A-Za-z1-0]*" ]]; then + out=$(file "$(readlink -f "${N}")") + if [[ ${out} =~ ELF ]] ; then + (( fdirtotal++ )) fi fi - done - exit 0 - ;; - - --file) - if [ $have_readelf -eq 0 ] ; then - exit 1 - fi - if [ -z "$2" ] ; then - printf "\033[31mError: Please provide a valid file.\033[m\n\n" - exit 1 - fi - # does the file exist? - if [ ! -e $2 ] ; then - printf "\033[31mError: The file '$2' does not exist.\033[m\n\n" - exit 1 + done < <(find "${tempdir}" -type f 2>/dev/null) + if [[ $fdirtotal -gt 0 ]]; then + echo_message "" "" "" "," fi + while read -r N; do + if [[ "${N}" != "[A-Za-z1-0]*" ]]; then # read permissions? - if [ ! -r $2 ] ; then - printf "\033[31mError: No read permissions for '$2' (run as root).\033[m\n\n" + if [[ ! -r "${N}" ]]; then + printf "\033[31mError: No read permissions for '%s' (run as root).\033[m\n" ", ${N}" + else + # ELF executable? + out=$(file "$(readlink -f "${N}")") + if [[ ! ${out} =~ ELF ]] ; then + if [[ "${verbose}" = "true" ]] ; then + echo_message "\033[34m*** Not an ELF file: ${tempdir}/" "" "" "" + file "${N}" + echo_message "\033[m" "" "" "" + fi + else + (( fdircount++ )) + echo_message "" "" " " "" + filecheck "${N}" + if [[ "$(find "${N}" \( -perm -004000 -o -perm -002000 \) -type f -print)" ]]; then + echo_message "\033[37;41m${N}\033[m\n" ",${N}\n" " filename='${N}' />\n" ", \"filename\":\"${N}\"}" + else + echo_message "${N}\n" ",${N}\n" " filename='${N}' />\n" ", \"filename\":\"${N}\"}" + fi + if [[ "${fdircount}" == "${fdirtotal}" ]]; then + echo_message "" "" "" "" + else + echo_message "" "" "" "," + fi + fi + fi + fi + done < <(find "${tempdir}" -type f 2>/dev/null) + echo_message "" "" "\n" "}" +} + +chk_file () { + if [[ -z "${CHK_FILE}" ]] ; then + printf "\033[31mError: Please provide a valid file.\033[m\n\n" + exit 1 + fi + + # does the file exist? + if [[ ! -e "${CHK_FILE}" ]] ; then + printf "\033[31mError: The file '%s' does not exist.\033[m\n\n" "${CHK_FILE}" exit 1 fi + + # read permissions? + if [[ ! -r "${CHK_FILE}" ]] ; then + printf "\033[31mError: No read permissions for '%s' (run as root).\033[m\n\n" "${CHK_FILE}" + exit 1 + fi + # ELF executable? - out=`file $2` - if [[ ! $out =~ ELF ]] ; then + out=$(file "$(readlink -f "${CHK_FILE}")") + if [[ ! ${out} =~ ELF ]] ; then printf "\033[31mError: Not an ELF file: " - file $2 + file "${CHK_FILE}" printf "\033[m\n" exit 1 fi - printf "RELRO STACK CANARY NX PIE RPATH RUNPATH FILE\n" - filecheck $2 - if [ `find $2 \( -perm -004000 -o -perm -002000 \) -type f -print` ] ; then - printf "\033[37;41m%s%s\033[m" $2 $N + if ${extended_checks}; then + echo_message "RELRO STACK CANARY NX PIE SELFRANDO Clang CFI SafeStack RPATH RUNPATH\tSymbols\t\tFORTIFY\tFortified\tFortifiable\tFILE\n" '' '' '{' else - printf "%s" $2 + echo_message "RELRO STACK CANARY NX PIE RPATH RUNPATH\tSymbols\t\tFORTIFY\tFortified\tFortifiable\tFILE\n" '' '' '{' fi - echo - exit 0 - ;; + filecheck "${CHK_FILE}" + if [[ "$(find "${CHK_FILE}" \( -perm -004000 -o -perm -002000 \) -type f -print)" ]] ; then + echo_message "\033[37;41m${CHK_FILE}\033[m\n" ",${CHK_FILE}\n" " filename='${CHK_FILE}'/>\n" " } }" + else + echo_message "${CHK_FILE}\n" ",${CHK_FILE}\n" " filename='${CHK_FILE}'/>\n" " } }" + fi +} - --proc-all) - if [ $have_readelf -eq 0 ] ; then - exit 1 - fi - cd /proc - printf "* System-wide ASLR" +chk_proc_all () { + cd /proc || exit + echo_message "* System-wide ASLR" "" "" "" aslrcheck - printf "* Does the CPU support NX: " - nxcheck - printf " COMMAND PID RELRO STACK CANARY NX/PaX PIE\n" + echo_message "* Does the CPU support NX: " "" "" "" + nxcheck + echo_message "* Core-Dumps access to all users: " "" "" "" + coredumpcheck + if ${extended_checks}; then + echo_message " COMMAND PID RELRO STACK CANARY Clang CFI SafeStack SECCOMP NX/PaX PIE SELFRANDO FORTIFY\n" "" "" '{' + else + echo_message " COMMAND PID RELRO STACK CANARY SECCOMP NX/PaX PIE FORTIFY\n" "" "" '{' + fi + lastpid=0 + currpid=0 for N in [1-9]*; do - if [ $N != $$ ] && readlink -q $N/exe > /dev/null; then - printf "%16s" `head -1 $N/status | cut -b 7-` - printf "%7d " $N - proccheck $N - echo + if [[ "${N}" != "$$" ]] && readlink -q "${N}"/exe > /dev/null; then + (( lastpid++ )) fi done - if [ ! -e /usr/bin/id ] ; then - printf "\n\033[33mNote: If you are running 'checksec.sh' as an unprivileged user, you\n" - printf " will not see all processes. Please run the script as root.\033[m\n\n" - else - if !(root_privs) ; then - printf "\n\033[33mNote: You are running 'checksec.sh' as an unprivileged user.\n" - printf " Too see all processes, please run the script as root.\033[m\n\n" + for N in [1-9]*; do + if [[ "${N}" != "$$" ]] && readlink -q "${N}"/exe > /dev/null; then + (( currpid++ )) + name=$(head -1 "${N}"/status | cut -b 7-) + if [[ $format == "cli" ]]; then + printf "%16s" "${name}" + printf "%7d " "${N}" + else + echo_message "" "${N}," " \n" "" + else + echo_message "\n" "\n" "\n" "," + fi + fi + done + echo_message "" "" "" " }\n" + if [[ ! -e /usr/bin/id ]] ; then + echo_message "\n\033[33mNote: If you are running 'checksec.sh' as an unprivileged user, you\n" "" "" "" + echo_message " will not see all processes. Please run the script as root.\033[m\n\n" "" "" "\n" + else + if ! (root_privs) ; then + echo_message "\n\033[33mNote: You are running 'checksec.sh' as an unprivileged user.\n" "" "" "" + echo_message " Too see all processes, please run the script as root.\033[m\n\n" "" "" "\n" fi fi - exit 0 - ;; +} - --proc) - if [ $have_readelf -eq 0 ] ; then - exit 1 - fi - if [ -z "$2" ] ; then +chk_proc () { + if [[ -z "${CHK_PROC}" ]] ; then printf "\033[31mError: Please provide a valid process name.\033[m\n\n" exit 1 fi - if !(isString "$2") ; then - printf "\033[31mError: Please provide a valid process name.\033[m\n\n" - exit 1 + if ! (isString "${CHK_PROC}") ; then + printf "\033[31mError: Please provide a valid process name.\033[m\n\n" + exit 1 fi - cd /proc - printf "* System-wide ASLR" + cd /proc || exit + IFS=" " read -r -a fpids <<<"$(pgrep -d ' ' "${CHK_PROC}")" + if [[ ${#fpids} -eq 0 ]]; then + printf "\033[31mError: No process with the given name found.\033[m\n\n" + exit 1 + fi + echo_message "* System-wide ASLR" '' '' '' aslrcheck - printf "* Does the CPU support NX: " + echo_message "* Does the CPU support NX: " '' '' '' nxcheck - printf " COMMAND PID RELRO STACK CANARY NX/PaX PIE\n" - for N in `ps -Ao pid,comm | grep $2 | cut -b1-6`; do - if [ -d $N ] ; then - printf "%16s" `head -1 $N/status | cut -b 7-` - printf "%7d " $N - # read permissions? - if [ ! -r $N/exe ] ; then - if !(root_privs) ; then - printf "\033[31mNo read permissions for '/proc/$N/exe' (run as root).\033[m\n\n" + if ${extended_checks}; then + echo_message " COMMAND PID RELRO STACK CANARY Clang CFI SafeStack SECCOMP NX/PaX PIE SELFRANDO FORTIFY\n" "" "" '{' + else + echo_message " COMMAND PID RELRO STACK CANARY SECCOMP NX/PaX PIE FORTIFY\n" "" "" '{' + fi + pos=$(( ${#fpids[*]} - 1 )) + last=${fpids[$pos]} + for N in "${fpids[@]}"; do + if [[ -d "${N}" ]] ; then + name=$(head -1 "${N}"/status | cut -b 7-) + if [[ $format == "cli" ]]; then + printf "%16s" "${name}" + printf "%7d " "${N}" + else + echo_message "" "${N}," "\n" "" + else + echo_message "\n" "\n" "\n" "," + fi fi done - exit 0 - ;; + echo_message "\n" "\n" "\n" "}\n" +} - --proc-libs) - if [ $have_readelf -eq 0 ] ; then - exit 1 - fi - if [ -z "$2" ] ; then +chk_proc_libs () { + if [[ -z "${CHK_PROC_LIBS}" ]] ; then printf "\033[31mError: Please provide a valid process ID.\033[m\n\n" exit 1 fi - if !(isNumeric "$2") ; then - printf "\033[31mError: Please provide a valid process ID.\033[m\n\n" - exit 1 + if ! (isNumeric "${CHK_PROC_LIBS}") ; then + printf "\033[31mError: Please provide a valid process ID.\033[m\n\n" + exit 1 fi - cd /proc - printf "* System-wide ASLR" + cd /proc || exit + echo_message "* System-wide ASLR" '' '' '' aslrcheck - printf "* Does the CPU support NX: " + echo_message "* Does the CPU support NX: " '' '' '' nxcheck - printf "* Process information:\n\n" - printf " COMMAND PID RELRO STACK CANARY NX/PaX PIE\n" - N=$2 - if [ -d $N ] ; then - printf "%16s" `head -1 $N/status | cut -b 7-` - printf "%7d " $N - # read permissions? - if [ ! -r $N/exe ] ; then - if !(root_privs) ; then - printf "\033[31mNo read permissions for '/proc/$N/exe' (run as root).\033[m\n\n" + echo_message "* Process information:\n\n" "" "" "" + if ${extended_checks}; then + echo_message " COMMAND PID RELRO STACK CANARY Clang CFI SafeStack SECCOMP NX/PaX PIE Fortify Source\n" '' '' '' + else + echo_message " COMMAND PID RELRO STACK CANARY SECCOMP NX/PaX PIE Fortify Source\n" '' '' '' + fi + N=${CHK_PROC_LIBS} + if [[ -d "${N}" ]] ; then + name=$(head -1 "${N}/status" | cut -b 7-) + if [[ "${format}" == "cli" ]]; then + printf "%16s" "${name}" + printf "%7d " "${N}" + else + echo_message "" "${name}," "\n" "} } }" fi - exit 0 - ;; +} - --kernel) - cd /proc - printf "* Kernel protection information:\n\n" - kernelcheck - exit 0 - ;; - - --fortify-file) - if [ $have_readelf -eq 0 ] ; then - exit 1 +chk_fortify_file () { + # if first char of pathname is '~' replace it with '${HOME}' + if [[ "${CHK_FORTIFY_FILE:0:1}" = '~' ]] ; then + CHK_FORTIFY_FILE=${HOME}/${CHK_FORTIFY_FILE:1} fi - if [ -z "$2" ] ; then + + if [[ -z "${CHK_FORTIFY_FILE}" ]] ; then printf "\033[31mError: Please provide a valid file.\033[m\n\n" - exit 1 + exit 1 fi # does the file exist? - if [ ! -e $2 ] ; then - printf "\033[31mError: The file '$2' does not exist.\033[m\n\n" + if [[ ! -f "${CHK_FORTIFY_FILE}" ]] ; then + printf "\033[31mError: The file '%s' does not exist.\033[m\n\n" "${CHK_FORTIFY_FILE}" exit 1 fi # read permissions? - if [ ! -r $2 ] ; then - printf "\033[31mError: No read permissions for '$2' (run as root).\033[m\n\n" + if [[ ! -r "${CHK_FORTIFY_FILE}" ]] ; then + printf "\033[31mError: No read permissions for '%s' (run as root).\033[m\n\n" "${CHK_FORTIFY_FILE}" exit 1 fi # ELF executable? - out=`file $2` - if [[ ! $out =~ ELF ]] ; then + out=$(file "$(readlink -f "${CHK_FORTIFY_FILE}")") + if [[ ! ${out} =~ ELF ]] ; then printf "\033[31mError: Not an ELF file: " - file $2 + file "${CHK_FORTIFY_FILE}" printf "\033[m\n" exit 1 fi - if [ -e /lib/libc.so.6 ] ; then + + if [[ -e /lib/libc.so.6 ]] ; then FS_libc=/lib/libc.so.6 - elif [ -e /lib64/libc.so.6 ] ; then + elif [[ -e /lib64/libc.so.6 ]] ; then FS_libc=/lib64/libc.so.6 - elif [ -e /lib/i386-linux-gnu/libc.so.6 ] ; then + elif [[ -e /lib/i386-linux-gnu/libc.so.6 ]] ; then FS_libc=/lib/i386-linux-gnu/libc.so.6 - elif [ -e /lib/x86_64-linux-gnu/libc.so.6 ] ; then + elif [[ -e /lib/x86_64-linux-gnu/libc.so.6 ]] ; then FS_libc=/lib/x86_64-linux-gnu/libc.so.6 + elif [[ -e /lib/arm-linux-gnueabihf/libc.so.6 ]] ; then + FS_libc=/lib/arm-linux-gnueabihf/libc.so.6 + elif [[ -e /lib/aarch64-linux-gnu/libc.so.6 ]] ; then + FS_libc=/lib/aarch64-linux-gnu/libc.so.6 else printf "\033[31mError: libc not found.\033[m\n\n" exit 1 fi - FS_chk_func_libc=( $(readelf -s $FS_libc | grep _chk@@ | awk '{ print $8 }' | cut -c 3- | sed -e 's/_chk@.*//') ) - FS_functions=( $(readelf -s $2 | awk '{ print $8 }' | sed 's/_*//' | sed -e 's/@.*//') ) - + FS_chk_func_libc=() + FS_functions=() + while IFS='' read -r line; do FS_chk_func_libc+=("$line"); done < <(${readelf} -s ${FS_libc} 2>/dev/null | grep _chk@@ | awk '{ print $8 }' | cut -c 3- | sed -e 's/_chk@.*//') + while IFS='' read -r line; do FS_functions+=("$line"); done < <(${readelf} -s "${CHK_FORTIFY_FILE}" 2>/dev/null | awk '{ print $8 }' | sed 's/_*//' | sed -e 's/@.*//') + echo_message "" "" "\n" "} }" +} - exit 0 - ;; - - --fortify-proc) - if [ $have_readelf -eq 0 ] ; then - exit 1 - fi - if [ -z "$2" ] ; then +chk_fortify_proc () { + if [[ -z "${CHK_FORTIFY_PROC}" ]] ; then printf "\033[31mError: Please provide a valid process ID.\033[m\n\n" exit 1 fi - if !(isNumeric "$2") ; then - printf "\033[31mError: Please provide a valid process ID.\033[m\n\n" - exit 1 + if ! (isNumeric "${CHK_FORTIFY_PROC}") ; then + printf "\033[31mError: Please provide a valid process ID.\033[m\n\n" + exit 1 fi - cd /proc - N=$2 - if [ -d $N ] ; then + cd /proc || exit + N=${CHK_FORTIFY_PROC} + if [[ -d "${N}" ]] ; then # read permissions? - if [ ! -r $N/exe ] ; then - if !(root_privs) ; then - printf "\033[31mNo read permissions for '/proc/$N/exe' (run as root).\033[m\n\n" + if [[ ! -r "${N}/exe" ]] ; then + if ! (root_privs) ; then + printf "\033[31mNo read permissions for '/proc/%s/exe' (run as root).\033[m\n\n" "${N}" exit 1 fi - if [ ! `readlink $N/exe` ] ; then + if [[ ! "$(readlink "${N}/exe")" ]] ; then printf "\033[31mPermission denied. Requested process ID belongs to a kernel thread.\033[m\n\n" exit 1 fi exit 1 fi - if [ -e /lib/libc.so.6 ] ; then + if [[ -e /lib/libc.so.6 ]] ; then FS_libc=/lib/libc.so.6 - elif [ -e /lib64/libc.so.6 ] ; then + elif [[ -e /lib64/libc.so.6 ]] ; then FS_libc=/lib64/libc.so.6 - elif [ -e /lib/i386-linux-gnu/libc.so.6 ] ; then + elif [[ -e /lib/i386-linux-gnu/libc.so.6 ]] ; then FS_libc=/lib/i386-linux-gnu/libc.so.6 - elif [ -e /lib/x86_64-linux-gnu/libc.so.6 ] ; then + elif [[ -e /lib/x86_64-linux-gnu/libc.so.6 ]] ; then FS_libc=/lib/x86_64-linux-gnu/libc.so.6 else printf "\033[31mError: libc not found.\033[m\n\n" exit 1 fi - printf "* Process name (PID) : %s (%d)\n" `head -1 $N/status | cut -b 7-` $N - FS_chk_func_libc=( $(readelf -s $FS_libc | grep _chk@@ | awk '{ print $8 }' | cut -c 3- | sed -e 's/_chk@.*//') ) - FS_functions=( $(readelf -s $2/exe | awk '{ print $8 }' | sed 's/_*//' | sed -e 's/@.*//') ) + name=$(head -1 "${N}/status" | cut -b 7-) + echo_message "* Process name (PID) : ${name} (${N})\n" "" "" "" + FS_chk_func_libc=() + FS_functions=() + while IFS='' read -r line; do FS_chk_func_libc+=("$line"); done < <(${readelf} -s $FS_libc 2>/dev/null | grep _chk@@ | awk '{ print $8 }' | cut -c 3- | sed -e 's/_chk@.*//') + while IFS='' read -r line; do FS_functions+=("$line"); done < <(${readelf} -s "${CHK_FORTIFY_PROC}/exe" 2>/dev/null | awk '{ print $8 }' | sed 's/_*//' | sed -e 's/@.*//') + echo_message "" "" "\n" "} }" fi - exit 0 - ;; +} - *) - if [ "$#" != "0" ] ; then - printf "\033[31mError: Unknown option '$1'.\033[m\n\n" - fi - help +chk_kernel () { + if [[ ${CHK_KERNEL} == "kernel" ]]; then + CHK_KERNEL="" + fi + if [[ -e "${CHK_KERNEL}" ]] && [[ ! -d "${CHK_KERNEL}" ]]; then + if [[ -s "$(pwd -P)/${CHK_KERNEL}" ]]; then + configfile=$(pwd -P)/${CHK_KERNEL} + elif [[ -s "${CHK_KERNEL}" ]]; then + configfile=${CHK_KERNEL} + else + "Error: config file specified do not exist" + exit 1 + fi + echo_message "* Kernel protection information for : $configfile \n\n" "" "" "" + cd /proc && kernelcheck "$configfile" || exit + else + cd /proc || exit + echo_message "* Kernel protection information:\n\n" "" "" "" + kernelcheck + fi +} + +optspec=":h-:" +while getopts "${optspec}" optchar; do + case "${optchar}" in + -) + case "${OPTARG}" in + version) + version + exit 0 + ;; + debug) + debug=true + ;; + trace) + export BASH_XTRACEFD=5 + export PS4='(${BASH_SOURCE##*/}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }' + set -x + ;; + help) + help + exit 0 + ;; + debug_report) + debug_report + exit 0 + ;; + update|upgrade) + # shellcheck disable=SC2119 + upgrade + exit 0 + ;; + format=*|output=*) + output_format=${OPTARG#*=} + format + ;; + verbose) + verbose=true + ;; + extended) + extended_checks=true + ;; + dir=*|dir) + CHK_DIR=${OPTARG#*=}; + OPT=$((OPT + 1)) + CHK_FUNCTION="chk_dir" + ;; + file=*|file) + CHK_FILE=${OPTARG#*=}; + OPT=$((OPT + 1)) + CHK_FUNCTION="chk_file" + ;; + proc-all) + OPT=$((OPT + 1)) + CHK_FUNCTION="chk_proc_all" + ;; + proc=*|proc) + CHK_PROC=${OPTARG#*=}; + OPT=$((OPT + 1)) + CHK_FUNCTION="chk_proc" + ;; + proc-libs=*|proc-libs) + CHK_PROC_LIBS=${OPTARG#*=}; + OPT=$((OPT + 1)) + CHK_FUNCTION="chk_proc_libs" + ;; + fortify-file=*|fortify-file) + CHK_FORTIFY_FILE=${OPTARG#*=}; + OPT=$((OPT + 1)) + CHK_FUNCTION="chk_fortify_file" + ;; + fortify-proc=*|fortify-proc) + CHK_FORTIFY_PROC=${OPTARG#*=}; + OPT=$((OPT + 1)) + CHK_FUNCTION="chk_fortify_proc" + ;; + kernel=*|kernel) + CHK_KERNEL=${OPTARG#*=}; + OPT=$((OPT + 1)) + CHK_FUNCTION="chk_kernel" + ;; + *) + printf "\033[31mError: Unknown option %s.\033[m\n\n" "${OPTARG}" + exit 1 + ;; + esac;; + *) + help + exit 0 + ;; + esac +done + +if [[ "${OPT}" == 0 ]]; then + printf "\033[31mError: No option selected. Please select an option.\033[m\n\n" exit 1 - ;; -esac +elif [[ "${OPT}" != 1 ]]; then + printf "\033[31mError: To many options selected. Please select one at a time.\033[m\n\n" + exit 1 +fi + +for variable in CHK_DIR CHK_FILE CHK_FORTIFY_FILE CHK_FORTIFY_PROC CHK_PROC CHK_PROC_LIBS; do + if [[ -n ${!variable+x} ]]; then + if [[ -z "${!variable}" ]]; then + printf "\033[31mError: Option Required.\033[m\n\n" + help + exit 1 + fi + fi +done + +# call the function +${CHK_FUNCTION} diff --git a/qa/zcash/full_test_suite.py b/qa/zcash/full_test_suite.py index a2e60a197..461fec5cd 100755 --- a/qa/zcash/full_test_suite.py +++ b/qa/zcash/full_test_suite.py @@ -21,6 +21,22 @@ REPOROOT = os.path.dirname( def repofile(filename): return os.path.join(REPOROOT, filename) +def get_arch_dir(): + depends_dir = os.path.join(REPOROOT, 'depends') + + arch_dir = os.path.join(depends_dir, 'x86_64-pc-linux-gnu') + if os.path.isdir(arch_dir): + return arch_dir + + # Not Linux, try MacOS + arch_dirs = glob(os.path.join(depends_dir, 'x86_64-apple-darwin*')) + if arch_dirs: + # Just try the first one; there will only be one in CI + return arch_dirs[0] + + print("!!! cannot find architecture dir under depends/ !!!") + return None + # # Custom test runners @@ -32,7 +48,7 @@ RE_FORTIFY_USED = re.compile('Binary compiled with FORTIFY_SOURCE support.*Yes') def test_rpath_runpath(filename): output = subprocess.check_output( - [repofile('qa/zcash/checksec.sh'), '--file', repofile(filename)] + [repofile('qa/zcash/checksec.sh'), '--file=' + repofile(filename)] ) if RE_RPATH_RUNPATH.search(output.decode('utf-8')): print('PASS: %s has no RPATH or RUNPATH.' % filename) @@ -44,7 +60,7 @@ def test_rpath_runpath(filename): def test_fortify_source(filename): proc = subprocess.Popen( - [repofile('qa/zcash/checksec.sh'), '--fortify-file', repofile(filename)], + [repofile('qa/zcash/checksec.sh'), '--fortify-file=' + repofile(filename)], stdout=subprocess.PIPE, ) line1 = proc.stdout.readline() @@ -78,23 +94,20 @@ def check_security_hardening(): # NOTE: checksec.sh does not reliably determine whether FORTIFY_SOURCE # is enabled for the entire binary. See issue #915. - ret &= test_fortify_source('src/zcashd') - ret &= test_fortify_source('src/zcash-cli') - ret &= test_fortify_source('src/zcash-gtest') - ret &= test_fortify_source('src/zcash-tx') - ret &= test_fortify_source('src/test/test_bitcoin') + # FORTIFY_SOURCE does mostly nothing for Clang before 10, which we don't + # pin yet, so we disable these tests. + # ret &= test_fortify_source('src/zcashd') + # ret &= test_fortify_source('src/zcash-cli') + # ret &= test_fortify_source('src/zcash-gtest') + # ret &= test_fortify_source('src/zcash-tx') + # ret &= test_fortify_source('src/test/test_bitcoin') return ret def ensure_no_dot_so_in_depends(): - depends_dir = os.path.join(REPOROOT, 'depends') - arch_dir = os.path.join(depends_dir, 'x86_64-unknown-linux-gnu') - if not os.path.isdir(arch_dir): - # Not Linux, try MacOS - arch_dirs = glob(os.path.join(depends_dir, 'x86_64-apple-darwin*')) - if arch_dirs: - # Just try the first one; there will only be one in CI - arch_dir = arch_dirs[0] + arch_dir = get_arch_dir() + if arch_dir is None: + return False exit_code = 0 @@ -120,36 +133,35 @@ def ensure_no_dot_so_in_depends(): return exit_code == 0 def util_test(): + python = [] + if os.path.isfile('/usr/local/bin/python3'): + python = ['/usr/local/bin/python3'] + return subprocess.call( - [repofile('src/test/bitcoin-util-test.py')], + python + [repofile('src/test/bitcoin-util-test.py')], cwd=repofile('src'), env={'PYTHONPATH': repofile('src/test'), 'srcdir': repofile('src')} ) == 0 def rust_test(): - depends_dir = os.path.join(REPOROOT, 'depends', 'x86_64-unknown-linux-gnu') - if not os.path.isdir(depends_dir): - depends_dir = os.path.join(REPOROOT, 'depends', 'x86_64-apple-darwin') + arch_dir = get_arch_dir() + if arch_dir is None: + return False - if os.path.isdir(depends_dir): - rust_env = os.environ.copy() - rust_env['RUSTC'] = os.path.join(depends_dir, 'native', 'bin', 'rustc') - return subprocess.call([ - os.path.join(depends_dir, 'native', 'bin', 'cargo'), - 'test', - '--manifest-path', - os.path.join(REPOROOT, 'Cargo.toml'), - ], env=rust_env) == 0 - - # Didn't manage to run anything - return False + rust_env = os.environ.copy() + rust_env['RUSTC'] = os.path.join(arch_dir, 'native', 'bin', 'rustc') + return subprocess.call([ + os.path.join(arch_dir, 'native', 'bin', 'cargo'), + 'test', + '--manifest-path', + os.path.join(REPOROOT, 'Cargo.toml'), + ], env=rust_env) == 0 # # Tests # STAGES = [ - 'check-depends', 'rust-test', 'btest', 'gtest', @@ -162,7 +174,6 @@ STAGES = [ ] STAGE_COMMANDS = { - 'check-depends': ['qa/zcash/test-depends-sources-mirror.py'], 'rust-test': rust_test, 'btest': [repofile('src/test/test_bitcoin'), '-p'], 'gtest': [repofile('src/zcash-gtest')], @@ -217,11 +228,14 @@ def main(): sys.exit(1) # Run the stages - passed = True + all_passed = True for s in args.stage: - passed &= run_stage(s) + passed = run_stage(s) + if not passed: + print("!!! Stage %s failed !!!" % (s,)) + all_passed &= passed - if not passed: + if not all_passed: print("!!! One or more test stages failed !!!") sys.exit(1) diff --git a/qa/zcash/performance-measurements.sh b/qa/zcash/performance-measurements.sh index 2b2d96df9..34ef268f0 100755 --- a/qa/zcash/performance-measurements.sh +++ b/qa/zcash/performance-measurements.sh @@ -1,4 +1,6 @@ -#!/bin/bash +#!/usr/bin/env bash + +export LC_ALL=C set -u diff --git a/qa/zcash/postponed-updates.txt b/qa/zcash/postponed-updates.txt new file mode 100644 index 000000000..0f31f20fa --- /dev/null +++ b/qa/zcash/postponed-updates.txt @@ -0,0 +1,100 @@ +# List of Postponed Dependency Updates +# +# The format is: name version expiration, e.g. +# bdb 18.1.40 2020-09-01 +# + +# Clang is pinned to a version that matches the Rust version. +# This would be Clang 9, but for 4.1.0 we are using Clang 8 and postponing the upgrade. +# libc++ is pinned to the same version as Clang. +native_clang 8.0.1 2020-12-01 +native_clang 9.0.0 2020-12-01 +native_clang 9.0.1 2020-12-01 +native_clang 10.0.0 2021-01-20 +native_clang 10.0.1 2021-01-20 +native_clang 11.0.0 2021-01-20 +libcxx 8.0.1 2020-12-01 +libcxx 9.0.0 2020-12-01 +libcxx 9.0.1 2020-12-01 +libcxx 10.0.0 2021-01-20 +libcxx 10.0.1 2021-01-20 +libcxx 11.0.0 2021-01-20 + +native_ccache 4.0 2021-01-20 + +bdb 18.1.40 2021-01-20 + +# We currently pin Rust 1.44.1, and plan to re-evaluate this in 2021 if +# we haven't already upgraded before then. In the meantime, postpone +# current and scheduled subsequent releases through the end of the year. +native_rust 1.45.0 2021-01-20 +native_rust 1.45.1 2021-01-20 +native_rust 1.45.2 2021-01-20 +native_rust 1.46.0 2021-01-20 +native_rust 1.47.0 2021-01-20 +native_rust 1.48.0 2021-01-20 +native_rust 1.49.0 2021-01-20 + +# Google Test 1.10.0 requires adding CMake to the depends system. +googletest 1.10.0 2021-01-20 + +# The aes crate depends on "aesni ^0.8" +crate_aesni 0.9.0 2020-11-01 + +# The bigint crate depends on "crunchy ^0.1.5" +crate_crunchy 0.2.1 2020-11-01 +crate_crunchy 0.2.2 2020-11-01 + +# These are being deferred until after 4.0.0 to avoid blocking the release. +crate_time 0.1.44 2021-01-20 +crate_redox_users 0.3.5 2021-01-20 + +# The chrono crate depends on "time ^0.1.43", and is highly unlikely to +# upgrade to v0.2: https://github.com/chronotope/chrono/issues/400 +crate_time 0.2.0 2021-02-01 +crate_time 0.2.1 2021-02-01 +crate_time 0.2.2 2021-02-01 +crate_time 0.2.3 2021-02-01 +crate_time 0.2.4 2021-02-01 +crate_time 0.2.5 2021-02-01 +crate_time 0.2.6 2021-02-01 +crate_time 0.2.7 2021-02-01 +crate_time 0.2.8 2021-02-01 +crate_time 0.2.9 2021-02-01 +crate_time 0.2.10 2021-02-01 +crate_time 0.2.11 2021-02-01 +crate_time 0.2.12 2021-02-01 +crate_time 0.2.13 2021-02-01 +crate_time 0.2.14 2021-02-01 +crate_time 0.2.15 2021-02-01 +crate_time 0.2.16 2021-02-01 + +# The futures-cpupool crate depends on "futures ^0.1", which was last +# updated 3 years ago. We plan to move away from it when we refactor +# bellman's multicore support. +crate_futures 0.2.0 2021-02-01 +crate_futures 0.2.1 2021-02-01 +crate_futures 0.3.0 2021-02-01 +crate_futures 0.3.1 2021-02-01 +crate_futures 0.3.2 2021-02-01 +crate_futures 0.3.3 2021-02-01 +crate_futures 0.3.4 2021-02-01 +crate_futures 0.3.5 2021-02-01 + +# The redox_users crate depends on: +# - "redox_syscall ^0.1" +# - "rust-argon2 ^0.7", which in turn depends on "base64 ^0.11" +# +# redox_users 0.3.5 depends on rust-argon2 ^0.8 which will address some of this. +crate_base64 0.12.0 2020-11-01 +crate_base64 0.12.1 2020-11-01 +crate_base64 0.12.2 2020-11-01 +crate_base64 0.12.3 2020-11-01 +crate_redox_syscall 0.2.0 2020-11-01 +crate_redox_syscall 0.2.1 2020-11-01 +crate_rust_argon2 0.8.0 2020-11-01 +crate_rust_argon2 0.8.1 2020-11-01 +crate_rust_argon2 0.8.2 2020-11-01 + +# tracing 0.1.20 was yanked. +crate_tracing 0.1.20 9999-12-31 diff --git a/qa/zcash/smoke_tests.py b/qa/zcash/smoke_tests.py new file mode 100755 index 000000000..2d4dd1ec6 --- /dev/null +++ b/qa/zcash/smoke_tests.py @@ -0,0 +1,878 @@ +#!/usr/bin/env python3 +# +# Execute the standard smoke tests for Zcash releases. +# + +import argparse +import datetime +import os +import requests +import subprocess +import sys +import time +import traceback + +from decimal import Decimal +from slickrpc import Proxy +from slickrpc.exc import RpcException + +DEFAULT_FEE = Decimal('0.0001') +URL_FAUCET_DONATION = 'https://faucet.testnet.z.cash/donations' +URL_FAUCET_TAP = 'https://faucet.testnet.z.cash/' + +# +# Smoke test definitions +# + +# (case, expected_mainnet, expected_testnet) +SMOKE_TESTS = [ + # zcashd start/stop/restart flows + ('1a', True, True), # zcashd start + ('1b', True, True), # Graceful zcashd stop + ('1c', True, True), # Ungraceful zcashd stop + ('1d', True, True), # zcashd start; graceful zcashd stop; zcashd start + ('1e', True, True), # zcashd start; ungraceful zcashd stop; zcashd start + # Control + ('2a', True, True), # Run getinfo + ('2b', True, True), # Run help + # Address generation + ('3a', True, True), # Generate a Sprout z-addr + ('3b', True, True), # Generate multiple Sprout z-addrs + ('3c', True, True), # Generate a t-addr + ('3d', True, True), # Generate multiple t-addrs + ('3e', True, True), # Generate a Sapling z-addr + ('3f', True, True), # Generate multiple Sapling z-addrs + # Transactions + ('4a', True, True ), # Send funds from Sprout z-addr to same Sprout z-addr + ('4b', True, True ), # Send funds from Sprout z-addr to a different Sprout z-addr + ('4c', True, True ), # Send funds from Sprout z-addr to a t-addr + ('4d', False, False ), # Send funds from t-addr to Sprout z-addr(expected fail as of Canopy) + ('4e', True, True ), # Send funds from t-addr to t-addr + ('4f', True, True ), # Send funds from t-addr to Sapling z-addr + ('4g', True, True ), # Send funds from Sapling z-addr to same Sapling z-addr + ('4h', True, True ), # Send funds from Sapling z-addr to a different Sapling z-addr + ('4i', True, True ), # Send funds from Sapling z-addr to a t-addr + ('4j', False, False), # Send funds from Sprout z-addr to Sapling z-addr + ('4k', True, True ), # Send funds from Sprout z-addr to multiple Sprout z-addrs + ('4l', True, True ), # Send funds from Sprout z-addr to multiple t-addrs + ('4m', True, True ), # Send funds from Sprout z-addr to t-addr and Sprout z-addrs + ('4n', False, False), # Send funds from Sprout z-addr to t-addr and Sapling z-addr + ('4o', False, False), # Send funds from Sprout z-addr to multiple Sapling z-addrs + ('4p', True, True ), # Send funds from t-addr to multiple t-addrs + ('4q', False, False ), # Send funds from t-addr to multiple Sprout z-addrs(expected fail as of Canopy) + ('4r', True, True ), # Send funds from t-addr to multiple Sapling z-addrs + ('4s', False, False), # Send funds from t-addr to Sprout z-addr and Sapling z-addr + ('4t', True, True ), # Send funds from Sapling z-addr to multiple Sapling z-addrs + ('4u', False, False), # Send funds from Sapling z-addr to multiple Sprout z-addrs + ('4v', True, True ), # Send funds from Sapling z-addr to multiple t-addrs + ('4w', True, True ), # Send funds from Sapling z-addr to t-addr and Sapling z-addr + ('4x', False, False), # Send funds from Sapling z-addr to Sapling z-addr and Sprout z-addr + ('4y', False, False ), # Send funds from t-addr to Sprout z-addr using z_mergetoaddress(expected fail as of Canopy) + ('4z', False, False ), # Send funds from 2 different t-addrs to Sprout z-addr using z_mergetoaddress(expected fail as of Canopy) + ('4aa', False, False), # Send funds from the same 2 t-addrs to Sprout z-addr using z_mergetoaddress + ('4bb', True, True ), # Send funds from 2 different t-addrs to Sapling z-addr using z_mergetoaddress + ('4cc', True, True ), # Send funds from t-addr to Sapling z-addr using z_mergetoaddress + ('4dd', False, False ), # Send funds from t-addr and Sprout z-addr to Sprout z-addr using z_mergetoaddress(expected fail as of Canopy) + ('4ee', True, True ), # Send funds from t-addr and Sapling z-addr to Sapling z-addr using z_mergetoaddress + ('4ff', True, True ), # Send funds from Sprout z-addr and Sprout z-addr to Sprout z-addr using z_mergetoaddress + ('4gg', True, True ), # Send funds from Sapling z-addr and Sapling z-addr to Sapling z-addr using z_mergetoaddress + # Wallet + ('5a', True, True), # After generating multiple z-addrs, run z_listaddresses + ('5b', True, True), # Run z_validateaddress with a Sprout z-addr + ('5c', True, True), # Run z_validateaddress with a Sapling z-addr + ('5d', True, True), # After a transaction, run z_listunspent + ('5e', True, True), # After a transaction, run z_listreceivedbyaddress + ('5f', True, True), # After a transaction, run z_getbalance + ('5g', True, True), # After a transaction, run z_gettotalbalance + ('5h', True, True), # Run z_exportkey using a Sprout z-addr + ('5i', True, True), # Run z_importkey using the zkey from a Sprout z-addr + ('5j', True, True), # Run z_exportkey using a Sapling z-addr + ('5k', True, True), # Run z_importkey using the zkey from a Sapling z-addr + ('5l', True, True), # Run z_exportwallet + ('5m', True, True), # Run z_importwallet + ('5n', True, True), # Run z_shieldcoinbase + ('5o', True, True), # Run getwalletinfo + # Network + ('6a', True, True), # Run getpeerinfo + ('6b', True, True), # Run getnetworkinfo + ('6c', True, False), # Run getdeprecationinfo + ('6d', True, True), # Run getconnectioncount + ('6e', True, True), # Run getaddednodeinfo + # Mining + ('7a', True, True), # Run getblocksubsidy + ('7b', True, True), # Run getblocktemplate + ('7c', True, True), # Run getmininginfo + ('7d', True, True), # Run getnetworkhashps + ('7e', True, True), # Run getnetworksolps +] + +TIME_STARTED = datetime.datetime.now() + +# +# Test helpers +# + +def run_cmd(results, case, zcash, name, args=[]): + print('----- %s -----' % (datetime.datetime.now() - TIME_STARTED)) + print('%s $ zcash-cli %s %s' % ( + case.ljust(3), + name, + ' '.join([str(arg) for arg in args], + ))) + try: + res = zcash.__getattr__(name)(*args) + print(res) + print() + if results is not None and len(case) > 0: + results[case] = True + return res + except RpcException as e: + print('ERROR: %s' % str(e)) + if results is not None and len(case) > 0: + results[case] = False + return None + +def wait_for_balance(zcash, zaddr, expected=None): + print('Waiting for funds to %s...' % zaddr) + unconfirmed_balance = Decimal(zcash.z_getbalance(zaddr, 0)).quantize(Decimal('1.00000000')) + print('Expecting: %s; Unconfirmed Balance: %s' % (expected, unconfirmed_balance)) + if expected is not None and unconfirmed_balance != expected: + print('WARNING: Unconfirmed balance does not match expected balance') + + # Default timeout is 15 minutes + ttl = 900 + while True: + balance = Decimal(zcash.z_getbalance(zaddr)).quantize(Decimal('1.00000000')) + if (expected is not None and balance == unconfirmed_balance) or (expected is None and balance > 0): + print('Received %s' % balance) + return balance + + time.sleep(1) + ttl -= 1 + if ttl == 0: + if zcash.automated: + # Reset timeout + ttl = 300 + else: + # Ask user if they want to keep waiting + print() + print('Balance: %s Expected: %s' % (balance, expected)) + ret = input('Do you wish to continue waiting? (Y/n) ') + if ret.lower() == 'n': + print('Address contained %s at timeout' % balance) + return balance + else: + # Wait another 5 minutes before asking again + ttl = 300 + +def wait_and_check_balance(results, case, zcash, addr, expected): + balance = wait_for_balance(zcash, addr, expected) + if balance != expected and results is not None and len(case) > 0: + results[case] = False + return balance + +def wait_for_txid_operation(zcash, opid, timeout=300): + print('Waiting for async operation %s' % opid) + result = None + for _ in iter(range(timeout)): + results = zcash.z_getoperationresult([opid]) + if len(results) > 0: + result = results[0] + break + time.sleep(1) + + status = result['status'] + if status == 'failed': + print('Operation failed') + print(result['error']['message']) + return None + elif status == 'success': + txid = result['result']['txid'] + print('txid: %s' % txid) + return txid + +def async_txid_cmd(results, case, zcash, name, args=[]): + opid = run_cmd(results, case, zcash, name, args) + # Some async commands return a dictionary containing the opid + if isinstance(opid, dict): + opid = opid['opid'] + if opid is None: + if results is not None and len(case) > 0: + results[case] = False + return None + + txid = wait_for_txid_operation(zcash, opid) + if txid is None: + if results is not None and len(case) > 0: + results[case] = False + return txid + +def z_sendmany(results, case, zcash, from_addr, recipients): + return async_txid_cmd(results, case, zcash, 'z_sendmany', [ + from_addr, + [{ + 'address': to_addr, + 'amount': amount, + } for (to_addr, amount) in recipients] + ]) + +def check_z_sendmany(results, case, zcash, from_addr, recipients): + txid = z_sendmany(results, case, zcash, from_addr, recipients) + if txid is None: + return [Decimal('0')] + return [wait_and_check_balance(results, case, zcash, to_addr, amount) for (to_addr, amount) in recipients] + +def check_z_sendmany_parallel(results, zcash, runs): + # First attempt to create all the transactions + txids = [(run, z_sendmany(results, run[0], zcash, run[1], run[2])) for run in runs] + # Then wait for balance updates caused by successful transactions + return [ + wait_and_check_balance(results, run[0], zcash, to_addr, amount) if txid is not None else Decimal('0') + for (run, txid) in txids + for (to_addr, amount) in run[2]] + +def z_mergetoaddress(results, case, zcash, from_addrs, to_addr): + return async_txid_cmd(results, case, zcash, 'z_mergetoaddress', [from_addrs, to_addr]) + +def check_z_mergetoaddress(results, case, zcash, from_addrs, to_addr, amount): + txid = z_mergetoaddress(results, case, zcash, from_addrs, to_addr) + if txid is None: + return Decimal('0') + return wait_and_check_balance(results, case, zcash, to_addr, amount) + +def check_z_mergetoaddress_parallel(results, zcash, runs): + # First attempt to create all the transactions + txids = [(run, z_mergetoaddress(results, run[0], zcash, run[1], run[2])) for run in runs] + # Then wait for balance updates caused by successful transactions + return [ + wait_and_check_balance(results, run[0], zcash, run[2], run[3]) if txid is not None else Decimal('0') + for (run, txid) in txids] + +def tap_zfaucet(addr): + with requests.Session() as session: + # Get token to request TAZ from faucet with a given zcash address + response = session.get(URL_FAUCET_TAP) + if response.status_code != 200: + print("Error establishing session at:", URL_FAUCET_TAP) + os.sys.exit(1) + csrftoken = response.cookies['csrftoken'] + + # Request TAZ from the faucet + data_params = dict(csrfmiddlewaretoken=csrftoken, address=addr) + response2 = session.post(URL_FAUCET_TAP, data=data_params, headers=dict(Referer=URL_FAUCET_TAP)) + if response2.status_code != 200: + print("Error tapping faucet at:", URL_FAUCET_TAP) + os.sys.exit(1) + +def get_zfaucet_addrs(): + with requests.Session() as session: + response = session.get(URL_FAUCET_DONATION) + if response.status_code != 200: + print("Error establishing session at:", URL_FAUCET_DONATION) + os.sys.exit(1) + data = response.json() + return data + +def get_zfaucet_taddr(): + return get_zfaucet_addrs()["t_address"] + +def get_zfaucet_zsapaddr(): + # At the time of writing this, it appears these(keys) are backwards + return get_zfaucet_addrs()["z_address_legacy"] + +def get_zfaucet_zsproutaddr(): + # At the time of writing this, it appears these(keys) are backwards + return get_zfaucet_addrs()["z_address_sapling"] + +# +# Test runners +# + +def simple_commands(zcash): + results = {} + run_cmd(results, '2a', zcash, 'getinfo'), + run_cmd(results, '2b', zcash, 'help'), + run_cmd(results, '5o', zcash, 'getwalletinfo'), + run_cmd(results, '6a', zcash, 'getpeerinfo'), + run_cmd(results, '6b', zcash, 'getnetworkinfo'), + run_cmd(results, '6c', zcash, 'getdeprecationinfo'), + run_cmd(results, '6d', zcash, 'getconnectioncount'), + run_cmd(results, '6e', zcash, 'getaddednodeinfo', [False]), + run_cmd(results, '7a', zcash, 'getblocksubsidy'), + run_cmd(results, '7c', zcash, 'getmininginfo'), + run_cmd(results, '7d', zcash, 'getnetworkhashps'), + run_cmd(results, '7e', zcash, 'getnetworksolps'), + return results + +def transaction_chain(zcash): + results = {} + + # Generate the various addresses we will use + sprout_zaddr_1 = run_cmd(results, '3a', zcash, 'z_getnewaddress', ['sprout']) + sprout_zaddr_2 = run_cmd(results, '3b', zcash, 'z_getnewaddress', ['sprout']) + sprout_zaddr_3 = run_cmd(results, '3b', zcash, 'z_getnewaddress', ['sprout']) + taddr_1 = run_cmd(results, '3c', zcash, 'getnewaddress') + taddr_2 = run_cmd(results, '3d', zcash, 'getnewaddress') + taddr_3 = run_cmd(results, '3d', zcash, 'getnewaddress') + taddr_4 = run_cmd(results, '3d', zcash, 'getnewaddress') + taddr_5 = run_cmd(results, '3d', zcash, 'getnewaddress') + sapling_zaddr_1 = run_cmd(results, '3e', zcash, 'z_getnewaddress', ['sapling']) + sapling_zaddr_2 = run_cmd(results, '3f', zcash, 'z_getnewaddress', ['sapling']) + sapling_zaddr_3 = run_cmd(results, '3f', zcash, 'z_getnewaddress', ['sapling']) + + # Check that the zaddrs are all listed + zaddrs = run_cmd(results, '5a', zcash, 'z_listaddresses') + if (sprout_zaddr_1 not in zaddrs or + sprout_zaddr_2 not in zaddrs or + sapling_zaddr_1 not in zaddrs or + sapling_zaddr_2 not in zaddrs): + results['5a'] = False + + # Validate the addresses + ret = run_cmd(results, '5b', zcash, 'z_validateaddress', [sprout_zaddr_1]) + if not ret['isvalid'] or ret['type'] != 'sprout': + results['5b'] = False + + ret = run_cmd(results, '5c', zcash, 'z_validateaddress', [sapling_zaddr_1]) + if not ret['isvalid'] or ret['type'] != 'sapling': + results['5c'] = False + + # Set up beginning and end of the chain + print('#') + print('# Initialising transaction chain') + print('#') + print() + if zcash.use_faucet: + print('Tapping the testnet faucet for testing funds...') + chain_end = get_zfaucet_taddr() + tap_zfaucet(sprout_zaddr_1) + print('Done! Leftover funds will be sent back to the faucet.') + else: + chain_end = input('Type or paste transparent address where leftover funds should be sent: ') + if not zcash.validateaddress(chain_end)['isvalid']: + print('Invalid transparent address') + return results + print() + print('Please send at least 0.01 ZEC/TAZ to the following address:') + print(sprout_zaddr_1) + print() + input('Press Enter once the funds have been sent.') + print() + + # Wait to receive starting balance + sprout_balance = wait_for_balance(zcash, sprout_zaddr_1) + starting_balance = sprout_balance + + # + # Start the transaction chain! + # + print() + print('#') + print('# Starting transaction chain') + print('#') + print() + try: + # + # First, split the funds across all three pools + # + + # Sprout -> taddr + taddr_balance = check_z_sendmany( + results, '4c', zcash, sprout_zaddr_1, [(taddr_1, (starting_balance / Decimal('10')) * Decimal('6'))])[0] + sprout_balance -= taddr_balance + DEFAULT_FEE + + balance = Decimal(run_cmd(results, '5f', zcash, 'z_getbalance', [sprout_zaddr_1])).quantize(Decimal('1.00000000')) + if balance != sprout_balance: + results['5f'] = False + + # taddr -> Sapling + # Send it all here because z_sendmany pick a new t-addr for change + sapling_balance = check_z_sendmany( + results, '4f', zcash, taddr_1, [(sapling_zaddr_1, taddr_balance - DEFAULT_FEE)])[0] + taddr_balance = Decimal('0') + + # Sapling -> taddr + taddr_balance = check_z_sendmany( + results, '4i', zcash, sapling_zaddr_1, [(taddr_1, (starting_balance / Decimal('10')) * Decimal('3'))])[0] + sapling_balance -= taddr_balance + DEFAULT_FEE + + # + # Intra-pool tests + # + + # Sprout -> same Sprout + # Sapling -> same Sapling + (sprout_balance, sapling_balance) = check_z_sendmany_parallel(results, zcash, [ + ('4a', sprout_zaddr_1, [(sprout_zaddr_1, sprout_balance - DEFAULT_FEE)]), + ('4g', sapling_zaddr_1, [(sapling_zaddr_1, sapling_balance - DEFAULT_FEE)]), + ]) + + # Sprout -> different Sprout + # taddr -> different taddr + # Sapling -> different Sapling + (sprout_balance, taddr_balance, sapling_balance) = check_z_sendmany_parallel(results, zcash, [ + ('4b', sprout_zaddr_1, [(sprout_zaddr_2, sprout_balance - DEFAULT_FEE)]), + ('4e', taddr_1, [(taddr_2, taddr_balance - DEFAULT_FEE)]), + ('4h', sapling_zaddr_1, [(sapling_zaddr_2, sapling_balance - DEFAULT_FEE)]), + ]) + + # Sprout -> multiple Sprout + # taddr -> multiple taddr + # Sapling -> multiple Sapling + check_z_sendmany_parallel(results, zcash, [ + ('4k', sprout_zaddr_2, [ + (sprout_zaddr_1, starting_balance / Decimal('10')), + (sprout_zaddr_3, starting_balance / Decimal('10')), + ]), + ('4p', taddr_2, [ + (taddr_1, starting_balance / Decimal('10')), + (taddr_3, taddr_balance - (starting_balance / Decimal('10')) - DEFAULT_FEE), + ]), + ('4t', sapling_zaddr_2, [ + (sapling_zaddr_1, starting_balance / Decimal('10')), + (sapling_zaddr_3, starting_balance / Decimal('10')), + ]), + ]) + sprout_balance -= DEFAULT_FEE + taddr_balance -= DEFAULT_FEE + sapling_balance -= DEFAULT_FEE + + # multiple Sprout -> Sprout + # multiple Sapling -> Sapling + # multiple taddr -> taddr + check_z_mergetoaddress_parallel(results, zcash, [ + ('4ff', [sprout_zaddr_1, sprout_zaddr_3], sprout_zaddr_2, sprout_balance - DEFAULT_FEE), + ('4gg', [sapling_zaddr_1, sapling_zaddr_3], sapling_zaddr_2, sapling_balance - DEFAULT_FEE), + ('', [taddr_1, taddr_3], taddr_2, taddr_balance - DEFAULT_FEE), + ]) + sprout_balance -= DEFAULT_FEE + sapling_balance -= DEFAULT_FEE + taddr_balance -= DEFAULT_FEE + + # + # Now test a bunch of failing cases + # + + # Sprout -> Sapling + txid = z_sendmany(results, '4j', zcash, sprout_zaddr_2, [(sapling_zaddr_1, sprout_balance - DEFAULT_FEE)]) + if txid is not None: + print('Should have failed') + return results + + # Sprout -> taddr and Sapling + txid = z_sendmany(results, '4n', zcash, sprout_zaddr_2, [ + (taddr_2, starting_balance / Decimal('10')), + (sapling_zaddr_1, starting_balance / Decimal('10')), + ]) + if txid is not None: + print('Should have failed') + return results + + # Sprout -> multiple Sapling + txid = z_sendmany(results, '4o', zcash, sprout_zaddr_2, [ + (sapling_zaddr_1, starting_balance / Decimal('10')), + (sapling_zaddr_2, starting_balance / Decimal('10')), + ]) + if txid is not None: + print('Should have failed') + return results + + # taddr -> Sprout and Sapling + txid = z_sendmany(results, '4s', zcash, taddr_2, [ + (sprout_zaddr_1, starting_balance / Decimal('10')), + (sapling_zaddr_1, starting_balance / Decimal('10')), + ]) + if txid is not None: + print('Should have failed') + return results + + # Sapling -> multiple Sprout + txid = z_sendmany(results, '4u', zcash, sapling_zaddr_2, [ + (sprout_zaddr_1, starting_balance / Decimal('10')), + (sprout_zaddr_2, starting_balance / Decimal('10')), + ]) + if txid is not None: + print('Should have failed') + return results + + # Sapling -> Sapling and Sprout + txid = z_sendmany(results, '4x', zcash, sapling_zaddr_2, [ + (sapling_zaddr_1, starting_balance / Decimal('10')), + (sprout_zaddr_1, starting_balance / Decimal('10')), + ]) + if txid is not None: + print('Should have failed') + return results + + # multiple same taddr -> Sprout + txid = z_mergetoaddress(results, '4aa', zcash, [taddr_2, taddr_2], sprout_zaddr_2) + if txid is not None: + print('Should have failed') + return results + + # + # Inter-pool tests + # + + # Sprout -> taddr and Sprout + # Sapling -> taddr and Sapling + check_z_sendmany_parallel(results, zcash, [ + ('4m', sprout_zaddr_2, [ + (taddr_1, starting_balance / Decimal('10')), + (sprout_zaddr_1, starting_balance / Decimal('10')), + ]), + ('4w', sapling_zaddr_2, [ + (taddr_3, starting_balance / Decimal('10')), + (sapling_zaddr_1, starting_balance / Decimal('10')), + ]), + ]) + sprout_balance -= (starting_balance / Decimal('10')) + DEFAULT_FEE + sapling_balance -= (starting_balance / Decimal('10')) + DEFAULT_FEE + taddr_balance += (starting_balance / Decimal('10')) * Decimal('2') + + # taddr and Sprout -> Sprout + # taddr and Sapling -> Sapling + check_z_mergetoaddress_parallel(results, zcash, [ + ('4dd', [taddr_1, sprout_zaddr_1], sprout_zaddr_2, sprout_balance + (starting_balance / Decimal('10')) - DEFAULT_FEE), + ('4ee', [taddr_3, sapling_zaddr_1], sapling_zaddr_2, sapling_balance + (starting_balance / Decimal('10')) - DEFAULT_FEE), + ]) + sprout_balance += (starting_balance / Decimal('10')) - DEFAULT_FEE + sapling_balance += (starting_balance / Decimal('10')) - DEFAULT_FEE + taddr_balance -= (starting_balance / Decimal('10')) * Decimal('2') + + # Sprout -> multiple taddr + # Sapling -> multiple taddr + check_z_sendmany_parallel(results, zcash, [ + ('4l', sprout_zaddr_2, [ + (taddr_1, (starting_balance / Decimal('10'))), + (taddr_3, (starting_balance / Decimal('10'))), + ]), + ('4v', sapling_zaddr_2, [ + (taddr_4, (starting_balance / Decimal('10'))), + (taddr_5, (starting_balance / Decimal('10'))), + ]), + ]) + sprout_balance -= ((starting_balance / Decimal('10')) * Decimal('2')) + DEFAULT_FEE + sapling_balance -= ((starting_balance / Decimal('10')) * Decimal('2')) + DEFAULT_FEE + taddr_balance += (starting_balance / Decimal('10')) * Decimal('4') + + # multiple taddr -> Sprout + # multiple taddr -> Sapling + check_z_mergetoaddress_parallel(results, zcash, [ + ('4z', [taddr_1, taddr_3], sprout_zaddr_2, sprout_balance + ((starting_balance / Decimal('10')) * Decimal('2')) - DEFAULT_FEE), + ('4bb', [taddr_4, taddr_5], sapling_zaddr_2, sapling_balance + ((starting_balance / Decimal('10')) * Decimal('2')) - DEFAULT_FEE), + ]) + sprout_balance += ((starting_balance / Decimal('10')) * Decimal('2')) - DEFAULT_FEE + sapling_balance += ((starting_balance / Decimal('10')) * Decimal('2')) - DEFAULT_FEE + taddr_balance -= (starting_balance / Decimal('10')) * Decimal('4') + + # taddr -> Sprout + check_z_sendmany_parallel(results, zcash, [ + ('4d', taddr_2, [(sprout_zaddr_3, taddr_balance - DEFAULT_FEE)]), + ]) + sprout_balance += taddr_balance - DEFAULT_FEE + taddr_balance = Decimal('0') + + # multiple Sprout -> taddr + # multiple Sapling -> taddr + check_z_mergetoaddress_parallel(None, zcash, [ + ('', [sprout_zaddr_1, sprout_zaddr_2, sprout_zaddr_3], taddr_1, sprout_balance - DEFAULT_FEE), + ('', [sapling_zaddr_1, sapling_zaddr_2, sapling_zaddr_3], taddr_2, sapling_balance - DEFAULT_FEE), + ]) + taddr_balance = sprout_balance + sapling_balance - (2 * DEFAULT_FEE) + sprout_balance = Decimal('0') + sapling_balance = Decimal('0') + + # taddr -> multiple Sprout + # taddr -> multiple Sapling + taddr_1_balance = Decimal(zcash.z_getbalance(taddr_1)).quantize(Decimal('1.00000000')) + taddr_2_balance = Decimal(zcash.z_getbalance(taddr_2)).quantize(Decimal('1.00000000')) + check_z_sendmany_parallel(results, zcash, [ + ('4q', taddr_1, [ + (sprout_zaddr_1, (starting_balance / Decimal('10'))), + (sprout_zaddr_2, taddr_1_balance - (starting_balance / Decimal('10')) - DEFAULT_FEE), + ]), + ('4r', taddr_2, [ + (sapling_zaddr_1, (starting_balance / Decimal('10'))), + (sapling_zaddr_2, taddr_2_balance - (starting_balance / Decimal('10')) - DEFAULT_FEE), + ]), + ]) + sprout_balance = taddr_1_balance - DEFAULT_FEE + sapling_balance = taddr_2_balance - DEFAULT_FEE + taddr_balance = Decimal('0') + + # multiple Sprout -> taddr + # multiple Sapling -> taddr + check_z_mergetoaddress_parallel(None, zcash, [ + ('', [sprout_zaddr_1, sprout_zaddr_2], taddr_1, sprout_balance - DEFAULT_FEE), + ('', [sapling_zaddr_1, sapling_zaddr_2], taddr_2, sapling_balance - DEFAULT_FEE), + ]) + taddr_balance = sprout_balance + sapling_balance - (Decimal('2') * DEFAULT_FEE) + sprout_balance = Decimal('0') + sapling_balance = Decimal('0') + + # z_mergetoaddress taddr -> Sprout + # z_mergetoaddress taddr -> Sapling + taddr_1_balance = Decimal(zcash.z_getbalance(taddr_1)).quantize(Decimal('1.00000000')) + taddr_2_balance = Decimal(zcash.z_getbalance(taddr_2)).quantize(Decimal('1.00000000')) + check_z_mergetoaddress_parallel(results, zcash, [ + ('4y', [taddr_1], sprout_zaddr_1, taddr_1_balance - DEFAULT_FEE), + ('4cc', [taddr_2], sapling_zaddr_1, taddr_2_balance - DEFAULT_FEE), + ]) + sprout_balance = taddr_1_balance - DEFAULT_FEE + sapling_balance = taddr_2_balance - DEFAULT_FEE + taddr_balance = Decimal('0') + except Exception as e: + print('Error: %s' % e) + traceback.print_exc() + finally: + # + # End the chain by returning the remaining funds + # + print() + print('#') + print('# Finishing transaction chain') + print('#') + all_addrs = [ + sprout_zaddr_1, sprout_zaddr_2, sprout_zaddr_3, + taddr_1, taddr_2, taddr_3, taddr_4, taddr_5, + sapling_zaddr_1, sapling_zaddr_2, sapling_zaddr_3, + ] + + print() + print('Waiting for all transactions to be mined') + for addr in all_addrs: + balance = Decimal(zcash.z_getbalance(addr, 0)).quantize(Decimal('1.00000000')) + if balance > 0: + wait_for_balance(zcash, addr, balance) + + print() + print('Returning remaining balance minus fees') + for addr in all_addrs: + balance = Decimal(zcash.z_getbalance(addr)).quantize(Decimal('1.00000000')) + if balance > 0: + z_sendmany(None, '', zcash, addr, [(chain_end, balance - DEFAULT_FEE)]) + + return results + + +# +# Test stages +# + +STAGES = [ + 'simple-commands', + 'transaction-chain' +] + +STAGE_COMMANDS = { + 'simple-commands': simple_commands, + 'transaction-chain': transaction_chain, +} + +def run_stage(stage, zcash): + print('Running stage %s' % stage) + print('=' * (len(stage) + 14)) + print() + + cmd = STAGE_COMMANDS[stage] + if cmd is not None: + ret = cmd(zcash) + else: + print('WARNING: stage not yet implemented, skipping') + ret = {} + + print() + print('-' * (len(stage) + 15)) + print('Finished stage %s' % stage) + print() + + return ret + + +# +# Zcash wrapper +# + +class ZcashNode(object): + def __init__(self, args, zcashd=None, zcash_cli=None): + if zcashd is None: + zcashd = os.getenv('ZCASHD', 'zcashd') + if zcash_cli is None: + zcash_cli = os.getenv('ZCASHCLI', 'zcash-cli') + + self.__datadir = args.datadir + self.__wallet = args.wallet + self.__testnet = not args.mainnet + self.__zcashd = zcashd + self.__zcash_cli = zcash_cli + self.__process = None + self.__proxy = None + + self.automated = args.automate + self.use_faucet = args.faucet + + def start(self, extra_args=None, timewait=None): + if self.__proxy is not None: + raise RuntimeError('Already started') + + rpcuser = 'st' + rpcpassword = 'st' + + args = [ + self.__zcashd, + '-datadir=%s' % self.__datadir, + '-wallet=%s' % self.__wallet, + '-rpcuser=%s' % rpcuser, + '-rpcpassword=%s' % rpcpassword, + '-showmetrics=0', + '-experimentalfeatures', + '-zmergetoaddress', + ] + if self.__testnet: + args.append('-testnet=1') + if extra_args is not None: + args.extend(extra_args) + + self.__process = subprocess.Popen(args) + + cli_args = [ + self.__zcash_cli, + '-datadir=%s' % self.__datadir, + '-rpcuser=%s' % rpcuser, + '-rpcpassword=%s' % rpcpassword, + '-rpcwait', + ] + if self.__testnet: + cli_args.append('-testnet=1') + cli_args.append('getblockcount') + + devnull = open('/dev/null', 'w+', encoding='utf8') + if os.getenv('PYTHON_DEBUG', ''): + print('start_node: zcashd started, calling zcash-cli -rpcwait getblockcount') + subprocess.check_call(cli_args, stdout=devnull) + if os.getenv('PYTHON_DEBUG', ''): + print('start_node: calling zcash-cli -rpcwait getblockcount returned') + devnull.close() + + rpcuserpass = '%s:%s' % (rpcuser, rpcpassword) + rpchost = '127.0.0.1' + rpcport = 18232 if self.__testnet else 8232 + + url = 'http://%s@%s:%d' % (rpcuserpass, rpchost, rpcport) + if timewait is not None: + self.__proxy = Proxy(url, timeout=timewait) + else: + self.__proxy = Proxy(url) + + def stop(self): + if self.__proxy is None: + raise RuntimeError('Not running') + + self.__proxy.stop() + self.__process.wait() + self.__proxy = None + self.__process = None + + def __getattr__(self, name): + if self.__proxy is None: + raise RuntimeError('Not running') + + return self.__proxy.__getattr__(name) + + +# +# Test driver +# + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--automate', action='store_true', help='Run the smoke tests without a user present') + parser.add_argument('--list-stages', dest='list', action='store_true') + parser.add_argument('--mainnet', action='store_true', help='Use mainnet instead of testnet') + parser.add_argument('--use-faucet', dest='faucet', action='store_true', help='Use testnet faucet as source of funds') + parser.add_argument('--wallet', default='wallet.dat', help='Wallet file to use (within data directory)') + parser.add_argument('datadir', help='Data directory to use for smoke testing', default=None) + parser.add_argument('stage', nargs='*', default=STAGES, help='One of %s' % STAGES) + args = parser.parse_args() + + # Check for list + if args.list: + for s in STAGES: + print(s) + sys.exit(0) + + # Check validity of stages + for s in args.stage: + if s not in STAGES: + print("Invalid stage '%s' (choose from %s)" % (s, STAGES)) + sys.exit(1) + + # Don't allow using the default wallet.dat in mainnet mode + if args.mainnet and args.wallet == 'wallet.dat': + print('Cannot use wallet.dat as wallet file when running mainnet tests. Keep your funds safe!') + sys.exit(1) + + # Testnet faucet cannot be used in mainnet mode + if args.mainnet and args.faucet: + print('Cannot use testnet faucet when running mainnet tests.') + sys.exit(1) + + # Enforce correctly-configured automatic mode + if args.automate: + if args.mainnet: + print('Cannot yet automate mainnet tests.') + sys.exit(1) + if not args.faucet: + print('--automate requires --use-faucet') + sys.exit(1) + + # Start zcashd + zcash = ZcashNode(args) + print('Start time: %s' % TIME_STARTED) + print('Starting zcashd...') + zcash.start() + print() + + # Run the stages + results = {} + for s in args.stage: + results.update(run_stage(s, zcash)) + + # Stop zcashd + print('Stopping zcashd...') + zcash.stop() + + passed = True + print() + print('========================') + print(' Results') + print('========================') + print('Case | Expected | Actual') + print('========================') + for test_case in SMOKE_TESTS: + case = test_case[0] + expected = test_case[1 if args.mainnet else 2] + if case in results: + actual = results[case] + actual_str = '%s%s' % ( + 'Passed' if actual else 'Failed', + '' if expected == actual else '!!!' + ) + passed &= (expected == actual) + else: + actual_str = ' N/A' + print('%s | %s | %s' % ( + case.ljust(4), + ' Passed ' if expected else ' Failed ', + actual_str + )) + + if not passed: + print() + print("!!! One or more smoke test stages failed !!!") + sys.exit(1) + + +if __name__ == '__main__': + main() diff --git a/qa/zcash/updatecheck.py b/qa/zcash/updatecheck.py index 59d0aa66a..4d929eda7 100755 --- a/qa/zcash/updatecheck.py +++ b/qa/zcash/updatecheck.py @@ -25,11 +25,18 @@ # .mk files in depends/packages, this script will exit with # a nonzero status. The latter case would suggest someone added a new dependency # without adding a corresponding entry to get_dependency_list() below. +# +# To test the script itself, run it with --functionality-test as the only +# argument. This will exercise the full functionality of the script, but will +# only return a non-zero exit status when there's something wrong with the +# script itself, for example if a new file was added to depends/packages/ but +# wasn't added to this script. import requests import os import re import sys +import datetime SOURCE_ROOT = os.path.join(os.path.dirname(os.path.realpath(__file__)), "..", "..") # The email for this account is taylor@electriccoin.co and the token does not @@ -50,6 +57,11 @@ def get_dependency_list(): GithubTagReleaseLister("google", "googletest", "^release-(\d+)\.(\d+)\.(\d+)$", { "release-1.8.1": (1, 8, 1) }), DependsVersionGetter("googletest")), + # libc++ matches the Clang version + Dependency("libcxx", + GithubTagReleaseLister("llvm", "llvm-project", "^llvmorg-(\d+)\.(\d+).(\d+)$", + { "llvmorg-11.0.0": (11, 0, 0), "llvmorg-9.0.1-rc3": None}), + DependsVersionGetter("native_clang")), Dependency("libevent", GithubTagReleaseLister("libevent", "libevent", "^release-(\d+)\.(\d+)\.(\d+)-stable$", { "release-2.0.22-stable": (2, 0, 22), "release-2.1.9-beta": None }), @@ -62,18 +74,14 @@ def get_dependency_list(): GithubTagReleaseLister("ccache", "ccache", "^v?(\d+)\.(\d+)(?:\.(\d+))?$", { "v3.5.1": (3, 5, 1), "v3.6": (3, 6)}), DependsVersionGetter("native_ccache")), - Dependency("openssl", - GithubTagReleaseLister("openssl", "openssl", "^OpenSSL_(\d+)_(\d+)_(\d+)([a-z]+)?$", - { "OpenSSL_1_1_1b": (1, 1, 1, 'b'), "OpenSSL_1_1_1-pre9": None }), - DependsVersionGetter("openssl")), - Dependency("proton", - GithubTagReleaseLister("apache", "qpid-proton", "^(\d+)\.(\d+)(?:\.(\d+))?$", - { "0.27.0": (0, 27, 0), "0.10": (0, 10), "0.12.0-rc": None }), - DependsVersionGetter("proton")), - Dependency("rust", + Dependency("native_clang", + GithubTagReleaseLister("llvm", "llvm-project", "^llvmorg-(\d+)\.(\d+).(\d+)$", + { "llvmorg-11.0.0": (11, 0, 0), "llvmorg-9.0.1-rc3": None}), + DependsVersionGetter("native_clang")), + Dependency("native_rust", GithubTagReleaseLister("rust-lang", "rust", "^(\d+)\.(\d+)(?:\.(\d+))?$", { "1.33.0": (1, 33, 0), "0.9": (0, 9) }), - DependsVersionGetter("rust")), + DependsVersionGetter("native_rust")), Dependency("zeromq", GithubTagReleaseLister("zeromq", "libzmq", "^v(\d+)\.(\d+)(?:\.(\d+))?$", { "v4.3.1": (4, 3, 1), "v4.2.0-rc1": None }), @@ -92,35 +100,61 @@ def get_dependency_list(): DependsVersionGetter("utfcpp")) ] - # Rust crates. + # Rust crates (filename portion: depends/packages/crate_.mk). crates = [ - "aes", "aesni", "aes_soft", "arrayvec", "bellman", - "arrayref", "autocfg", "bigint", "blake2b_simd", "blake2s_simd", - "bit_vec", "block_cipher_trait", "byteorder", - "block_buffer", "block_padding", "c2_chacha", "cfg_if", "crunchy", - "byte_tools", "constant_time_eq", "crossbeam", "digest", "fpe", + "addchain", "aes", "aesni", "aes_soft", "ansi_term", + "arrayvec", "arrayref", "autocfg", + "base64", "bellman", "bigint", "bit_vec", "blake2b_simd", "blake2s_simd", + "block_buffer", "block_cipher", "block_modes", "block_padding", + "bls12_381", "byteorder", + "cfg_if", "chrono", "constant_time_eq", "cpuid_bool", "crossbeam_channel", "crossbeam_deque", "crossbeam_epoch", - "crossbeam_utils", "crossbeam_queue", "crypto_api", "crypto_api_chachapoly", - "directories", "fake_simd", "ff", "ff_derive", "getrandom", "hex", "log", - "futures_cpupool", "futures", "generic_array", "group", - "lazy_static", "libc", "nodrop", "num_bigint", - "memoffset", "ppv_lite86", "proc_macro2", "quote", - "num_cpus", "num_integer", "num_traits", "opaque_debug", "pairing", - "rand", "typenum", + "crossbeam_utils", "crossbeam_queue", "crossbeam", + "crunchy", "crypto_api", "crypto_api_chachapoly", "curve25519_dalek", + "directories", "dirs_sys", "digest", + "ed25519_zebra", "equihash", + "ff", "ff_derive", "fpe", "futures_cpupool", "futures", + "generic_array", "getrandom", "group", + "hermit_abi", "hex", "jubjub", "log", + "lazy_static", "libc", "matchers", "maybe_uninit", "memoffset", + "num_bigint", "num_cpus", "num_integer", "num_traits", + "ppv_lite86", "proc_macro2", "quote", + "opaque_debug", "pairing", "rand", "typenum", "rand_chacha", "rand_core", "rand_hc", "rand_xorshift", - "rustc_version", "scopeguard", "semver", "semver_parser", "sha2", "syn", - "unicode_xid", "wasi", - "winapi_i686_pc_windows_gnu", "winapi", "winapi_x86_64_pc_windows_gnu", - "zcash_history", "zcash_primitives", "zcash_proofs" + "redox_syscall", "redox_users", + "regex", "regex_automata", "regex_syntax", "rust_argon2", + "scopeguard", "serde", + "serde_derive", "sha2", "sharded_slab", "subtle", "syn", "thiserror", + "thiserror_impl", "thread_local", "time", "tracing", "tracing_appender", + "tracing_attributes", "tracing_core", "tracing_subscriber", + "unicode_xid", "version_check", "wasi", + "winapi_i686_pc_windows_gnu", "winapi", + "winapi_x86_64_pc_windows_gnu", "zcash_history", "zcash_primitives", + "zcash_proofs", "zeroize" ] + # Sometimes we need multiple versions of a crate, in which case there can't + # be a direct mapping between the filename portion and the crate name. + crate_name_exceptions = { + } + for crate in crates: - dependencies.append( - Dependency("crate_" + crate, - RustCrateReleaseLister(crate), - DependsVersionGetter("crate_" + crate) - ) - ) + if crate in crate_name_exceptions.keys(): + crate_name = crate_name_exceptions[crate] + else: + crate_name = crate + + # Rust dependency checks are temporarily disabled: + # https://github.com/zcash/zcash/issues/4726 + # No-op statement to keep pyflakes happy: + crate_name = crate_name + + # dependencies.append( + # Dependency("crate_" + crate, + # RustCrateReleaseLister(crate_name), + # DependsVersionGetter("crate_" + crate) + # ) + # ) return dependencies @@ -258,7 +292,7 @@ class BerkeleyDbReleaseLister: for match in re.findall("Berkeley DB (\d+)\.(\d+)\.(\d+)\.tar.gz", page): release_versions.add(Version(match)) - if Version((6, 2, 38)) not in release_versions: + if len(release_versions) == 0: raise RuntimeError("Missing expected version from Oracle web page.") return list(release_versions) @@ -268,14 +302,16 @@ class DependsVersionGetter: self.name = name def current_version(self): - mk_file_path = os.path.join(SOURCE_ROOT, "depends", "packages", safe(self.name) + ".mk") - mk_file = open(mk_file_path, 'r').read() + mk_file_path = os.path.join(SOURCE_ROOT, "depends", "packages", safe_depends(self.name) + ".mk") + mk_file = open(mk_file_path, 'r', encoding='utf8').read() regexp_whitelist = [ "package\)_version=(\d+)\.(\d+)\.(\d+)$", "package\)_version=(\d+)\.(\d+)$", "package\)_version=(\d+)_(\d+)_(\d+)$", - "package\)_version=(\d+)\.(\d+)\.(\d+)([a-z])$" + "package\)_version=(\d+)\.(\d+)\.(\d+)([a-z])$", + # Workaround for wasi 0.9.0 preview + "package\)_version=(\d+)\.(\d+)\.(\d+)\+wasi-snapshot-preview1$", ] current_version = None @@ -293,7 +329,7 @@ class DependsVersionGetter: class LevelDbVersionGetter: def current_version(self): header_path = os.path.join(SOURCE_ROOT, "src", "leveldb", "include", "leveldb", "db.h") - header_contents = open(header_path, 'r').read() + header_contents = open(header_path, 'r', encoding='utf8').read() match = re.search("kMajorVersion\s*=\s*(\d+);\s*.*kMinorVersion\s*=\s*(\d+);\s*$", header_contents, re.MULTILINE) if match: @@ -304,7 +340,7 @@ class LevelDbVersionGetter: class UnivalueVersionGetter: def current_version(self): configure_path = os.path.join(SOURCE_ROOT, "src", "univalue", "configure.ac") - configure_contents = open(configure_path, 'r').read() + configure_contents = open(configure_path, 'r', encoding='utf8').read() match = re.search("AC_INIT.*univalue.*\[(\d+)\.(\d+)\.(\d+)\]", configure_contents) if match: @@ -312,12 +348,45 @@ class UnivalueVersionGetter: else: raise RuntimeError("Couldn't parse univalue's version from its configure.ac") +class PostponedUpdates(): + def __init__(self): + self.postponedlist = dict() + + postponedlist_path = os.path.join( + os.path.dirname(__file__), + "postponed-updates.txt" + ) + + file = open(postponedlist_path, 'r', encoding='utf8') + for line in file.readlines(): + stripped = re.sub('#.*$', '', line).strip() + if stripped != "": + match = re.match('^(\S+)\s+(\S+)\s+(\S+)$', stripped) + if match: + postponed_name = match.groups()[0] + postponed_version = Version(match.groups()[1].split(".")) + postpone_expiration = datetime.datetime.strptime(match.groups()[2], '%Y-%m-%d') + if datetime.datetime.utcnow() < postpone_expiration: + self.postponedlist[(postponed_name, str(postponed_version))] = True + else: + raise RuntimeError("Could not parse line in postponed-updates.txt:" + line) + + + def is_postponed(self, name, version): + return (name, str(version)) in self.postponedlist + def safe(string): if re.match('^[a-zA-Z0-9_-]*$', string): return string else: raise RuntimeError("Potentially-dangerous string encountered.") +def safe_depends(string): + if re.match('^[a-zA-Z0-9._-]*$', string): + return string + else: + raise RuntimeError("Potentially-dangerous string encountered.") + def print_row(name, status, current_version, known_versions): COL_FMT_LARGE = "{:<35}" COL_FMT_SMALL = "{:<18}" @@ -334,8 +403,6 @@ def main(): untracked = [ # packages.mk is not a dependency, it just specifies the list of them all. "packages", - # just a template - "vendorcrate", # This package doesn't have conventional version numbers "native_cctools" ] @@ -356,30 +423,51 @@ def main(): sys.exit(status) deps = get_dependency_list() + postponed = PostponedUpdates() for dependency in deps: if dependency.name in unchecked_dependencies: unchecked_dependencies.remove(dependency.name) - if len(sys.argv) == 2 and sys.argv[1] == "skipcheck": - print("Skipping the actual dependency update checks.") + if dependency.is_up_to_date(): + print_row( + dependency.name, + "up to date", + str(dependency.current_version()), + "") else: - if dependency.is_up_to_date(): - print_row( - dependency.name, - "up to date", - str(dependency.current_version()), - "") - else: - print_row( - dependency.name, - "OUT OF DATE", - str(dependency.current_version()), - str(list(map(str, dependency.released_versions_after_current_version())))) - status = 1 + # The status can either be POSTPONED or OUT OF DATE depending + # on whether or not all the new versions are whitelisted. + status_text = "POSTPONED" + newver_list = "[" + for newver in dependency.released_versions_after_current_version(): + if postponed.is_postponed(dependency.name, newver): + newver_list += str(newver) + " (postponed)," + else: + newver_list += str(newver) + "," + status_text = "OUT OF DATE" + status = 1 + + newver_list = newver_list[:-1] + "]" + + print_row( + dependency.name, + status_text, + str(dependency.current_version()), + newver_list + ) if len(unchecked_dependencies) > 0: unchecked_dependencies.sort() print("WARNING: The following dependencies are not being checked for updates by this script: " + ', '.join(unchecked_dependencies)) - status = 2 + sys.exit(2) + + if len(sys.argv) == 2 and sys.argv[1] == "--functionality-test": + print("We're only testing this script's functionality. The exit status will only be nonzero if there's a problem with the script itself.") + sys.exit(0) + + if status == 0: + print("Ready to release. All dependencies are up-to-date or postponed.") + elif status == 1: + print("Release is BLOCKED. There are new dependency updates that have not been postponed.") sys.exit(status) diff --git a/rust-toolchain b/rust-toolchain index a50908ca3..d724e4390 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -1.42.0 +1.44.1 diff --git a/share/genbuild.sh b/share/genbuild.sh index c18d6f4ff..6d35faa97 100755 --- a/share/genbuild.sh +++ b/share/genbuild.sh @@ -5,8 +5,9 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or https://www.opensource.org/licenses/mit-license.php . +export LC_ALL=C if [ $# -gt 1 ]; then - cd "$2" + cd "$2" || exit 1 fi if [ $# -gt 0 ]; then FILE="$1" @@ -24,7 +25,7 @@ SUFFIX="" LAST_COMMIT_DATE="" if [ -e "$(which git 2>/dev/null)" -a "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then # clean 'dirty' status of touched files that haven't been modified - git diff >/dev/null 2>/dev/null + git diff >/dev/null 2>/dev/null # if latest commit is tagged and not dirty, then override using the tag name RAWDESC=$(git describe --abbrev=0 2>/dev/null) diff --git a/src/Makefile.am b/src/Makefile.am index 3b911af92..0ea031292 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -11,24 +11,10 @@ AM_CXXFLAGS = $(DEBUG_CXXFLAGS) $(HARDENED_CXXFLAGS) $(ERROR_CXXFLAGS) $(GPROF_C AM_CPPFLAGS = $(DEBUG_CPPFLAGS) $(HARDENED_CPPFLAGS) EXTRA_LIBRARIES = -if EMBEDDED_LEVELDB -LEVELDB_CPPFLAGS += -I$(srcdir)/leveldb/include -LEVELDB_CPPFLAGS += -I$(srcdir)/leveldb/helpers/memenv -LIBLEVELDB += $(builddir)/leveldb/libleveldb.a -LIBMEMENV += $(builddir)/leveldb/libmemenv.a - -# NOTE: This dependency is not strictly necessary, but without it make may try to build both in parallel, which breaks the LevelDB build system in a race -$(LIBLEVELDB): $(LIBMEMENV) - -$(LIBLEVELDB) $(LIBMEMENV): - @echo "Building LevelDB ..." && $(MAKE) -C $(@D) $(@F) CXX="$(CXX)" \ - CC="$(CC)" PLATFORM=$(TARGET_OS) AR="$(AR)" $(LEVELDB_TARGET_FLAGS) \ - OPT="$(AM_CXXFLAGS) $(PIE_FLAGS) $(CXXFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) -D__STDC_LIMIT_MACROS" -endif - BITCOIN_CONFIG_INCLUDES=-I$(builddir)/config -BITCOIN_INCLUDES=-I$(builddir) -I$(builddir)/obj $(BDB_CPPFLAGS) $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS) $(CRYPTO_CFLAGS) $(SSL_CFLAGS) +BITCOIN_INCLUDES=-I$(builddir) -I$(builddir)/obj $(BDB_CPPFLAGS) $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS) +BITCOIN_CONFIG_INCLUDES += -I$(srcdir)/rust/include BITCOIN_INCLUDES += -I$(srcdir)/rust/include BITCOIN_INCLUDES += -I$(srcdir)/secp256k1/include BITCOIN_INCLUDES += -I$(srcdir)/univalue/include @@ -46,9 +32,6 @@ LIBZCASH=libzcash.a if ENABLE_ZMQ LIBBITCOIN_ZMQ=libbitcoin_zmq.a endif -if ENABLE_PROTON -LIBBITCOIN_PROTON=libbitcoin_proton.a -endif if BUILD_BITCOIN_LIBS LIBZCASH_CONSENSUS=libzcashconsensus.la endif @@ -85,19 +68,7 @@ endif cargo-build: $(CARGO_CONFIGURED) $(RUST_ENV_VARS) $(CARGO) build $(RUST_BUILD_OPTS) $(rust_verbose) --manifest-path $(top_srcdir)/Cargo.toml -if TARGET_WINDOWS -LIBRUSTZCASH_WIN=$(top_builddir)/target/$(RUST_TARGET)/release/rustzcash.lib - -$(LIBRUSTZCASH_WIN): cargo-build - -# This ensures that the Rust library is correctly linked in by libtool. -# See https://github.com/rust-lang/rust/issues/69904 for the underlying cause. -$(LIBRUSTZCASH): $(LIBRUSTZCASH_WIN) - $(AM_V_at)cp $< $@ - -else $(LIBRUSTZCASH): cargo-build -endif $(LIBSECP256K1): $(wildcard secp256k1/src/*) $(wildcard secp256k1/include/*) $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F) @@ -115,7 +86,6 @@ EXTRA_LIBRARIES += \ $(LIBBITCOIN_CLI) \ $(LIBBITCOIN_WALLET) \ $(LIBBITCOIN_ZMQ) \ - $(LIBBITCOIN_PROTON) \ $(LIBZCASH) lib_LTLIBRARIES = $(LIBZCASH_CONSENSUS) @@ -155,11 +125,6 @@ BITCOIN_CORE_H = \ addrman.h \ alert.h \ amount.h \ - amqp/amqpabstractnotifier.h \ - amqp/amqpconfig.h \ - amqp/amqpnotificationinterface.h \ - amqp/amqppublishnotifier.h \ - amqp/amqpsender.h \ arith_uint256.h \ asyncrpcoperation.h \ asyncrpcqueue.h \ @@ -181,6 +146,7 @@ BITCOIN_CORE_H = \ compat/sanity.h \ compressor.h \ consensus/consensus.h \ + consensus/funding.h \ consensus/params.h \ consensus/upgrades.h \ consensus/validation.h \ @@ -188,15 +154,18 @@ BITCOIN_CORE_H = \ core_memusage.h \ deprecation.h \ experimental_features.h \ + fs.h \ hash.h \ httprpc.h \ httpserver.h \ init.h \ key.h \ + key_constants.h \ key_io.h \ keystore.h \ dbwrapper.h \ limitedmap.h \ + logging.h \ main.h \ memusage.h \ merkleblock.h \ @@ -212,6 +181,7 @@ BITCOIN_CORE_H = \ prevector.h \ primitives/block.h \ primitives/transaction.h \ + proof_verifier.h \ protocol.h \ pubkey.h \ random.h \ @@ -235,7 +205,7 @@ BITCOIN_CORE_H = \ support/allocators/zeroafterfree.h \ support/cleanse.h \ support/events.h \ - support/pagelocker.h \ + support/lockedpool.h \ sync.h \ threadsafety.h \ timedata.h \ @@ -337,15 +307,6 @@ libbitcoin_zmq_a_SOURCES = \ zmq/zmqpublishnotifier.cpp endif -if ENABLE_PROTON -libbitcoin_proton_a_CPPFLAGS = $(BITCOIN_INCLUDES) -libbitcoin_proton_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -libbitcoin_proton_a_SOURCES = \ - amqp/amqpabstractnotifier.cpp \ - amqp/amqpnotificationinterface.cpp \ - amqp/amqppublishnotifier.cpp -endif - # wallet: zcashd, but only linked when wallet enabled libbitcoin_wallet_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) libbitcoin_wallet_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) @@ -373,6 +334,8 @@ libbitcoin_wallet_a_SOURCES = \ crypto_libbitcoin_crypto_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_CONFIG_INCLUDES) crypto_libbitcoin_crypto_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) crypto_libbitcoin_crypto_a_SOURCES = \ + crypto/aes.cpp \ + crypto/aes.h \ crypto/common.h \ crypto/equihash.cpp \ crypto/equihash.h \ @@ -413,6 +376,7 @@ libbitcoin_common_a_SOURCES = \ chainparams.cpp \ coins.cpp \ compressor.cpp \ + consensus/funding.cpp \ consensus/params.cpp \ consensus/upgrades.cpp \ core_read.cpp \ @@ -424,6 +388,7 @@ libbitcoin_common_a_SOURCES = \ netbase.cpp \ primitives/block.cpp \ primitives/transaction.cpp \ + proof_verifier.cpp \ protocol.cpp \ pubkey.cpp \ scheduler.cpp \ @@ -444,12 +409,14 @@ libbitcoin_common_a_SOURCES = \ libbitcoin_util_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) libbitcoin_util_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libbitcoin_util_a_SOURCES = \ - support/pagelocker.cpp \ + support/lockedpool.cpp \ chainparamsbase.cpp \ clientversion.cpp \ compat/glibc_sanity.cpp \ compat/glibcxx_sanity.cpp \ compat/strnlen.cpp \ + fs.cpp \ + logging.cpp \ random.cpp \ rpc/protocol.cpp \ support/cleanse.cpp \ @@ -494,23 +461,20 @@ zcashd_LDADD = \ $(LIBUNIVALUE) \ $(LIBBITCOIN_UTIL) \ $(LIBBITCOIN_ZMQ) \ - $(LIBBITCOIN_PROTON) \ $(LIBBITCOIN_CRYPTO) \ $(LIBZCASH) \ $(LIBRUSTZCASH) \ $(LIBLEVELDB) \ + $(LIBLEVELDB_SSE42) \ $(LIBMEMENV) \ $(LIBSECP256K1) zcashd_LDADD += \ $(BOOST_LIBS) \ $(BDB_LIBS) \ - $(SSL_LIBS) \ - $(CRYPTO_LIBS) \ $(EVENT_PTHREADS_LIBS) \ $(EVENT_LIBS) \ $(ZMQ_LIBS) \ - $(PROTON_LIBS) \ $(LIBBITCOIN_CRYPTO) \ $(LIBZCASH_LIBS) @@ -529,8 +493,6 @@ zcash_cli_LDADD = \ $(LIBUNIVALUE) \ $(LIBBITCOIN_UTIL) \ $(BOOST_LIBS) \ - $(SSL_LIBS) \ - $(CRYPTO_LIBS) \ $(EVENT_LIBS) \ $(LIBZCASH) \ $(LIBRUSTZCASH) \ @@ -559,7 +521,7 @@ zcash_tx_LDADD = \ $(LIBBITCOIN_CRYPTO) \ $(LIBZCASH_LIBS) -zcash_tx_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS) +zcash_tx_LDADD += $(BOOST_LIBS) # # zcash protocol primitives # @@ -572,7 +534,6 @@ libzcash_a_SOURCES = \ zcash/address/zip32.cpp \ zcash/History.cpp \ zcash/JoinSplit.cpp \ - zcash/Proof.cpp \ zcash/Note.cpp \ zcash/prf.cpp \ zcash/util.cpp @@ -606,27 +567,33 @@ endif libzcashconsensus_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(RELDFLAGS) libzcashconsensus_la_LIBADD = $(LIBSECP256K1) -libzcashconsensus_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/obj -I$(srcdir)/secp256k1/include -DBUILD_BITCOIN_INTERNAL +libzcashconsensus_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/obj -I$(srcdir)/rust/include -I$(srcdir)/secp256k1/include -DBUILD_BITCOIN_INTERNAL libzcashconsensus_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) endif # -CLEANFILES = leveldb/libleveldb.a leveldb/libmemenv.a *.gcda *.gcno */*.gcno wallet/*/*.gcno +CTAES_DIST = crypto/ctaes/bench.c +CTAES_DIST += crypto/ctaes/ctaes.c +CTAES_DIST += crypto/ctaes/ctaes.h +CTAES_DIST += crypto/ctaes/README.md +CTAES_DIST += crypto/ctaes/test.c + +CLEANFILES = *.gcda *.gcno */*.gcno wallet/*/*.gcno DISTCLEANFILES = obj/build.h -EXTRA_DIST = leveldb rust +EXTRA_DIST = $(CTAES_DIST) rust clean-local: rm -f $(top_srcdir)/.cargo/config $(top_srcdir)/.cargo/.configured-for-* - -$(MAKE) -C leveldb clean -$(MAKE) -C secp256k1 clean -$(MAKE) -C univalue clean rm -f leveldb/*/*.gcno leveldb/helpers/memenv/*.gcno rm -f fuzz.cpp rm -rf fuzzing/*/output -rm -f config.h + -rm -f *.lib bench/*.lib test/*.lib .rc.o: @test -f $(WINDRES) @@ -652,6 +619,10 @@ endif @test -f $(PROTOC) $(AM_V_GEN) $(PROTOC) --cpp_out=$(@D) --proto_path=$(abspath $(& alertKey, bool fThre { LogPrint("alert", "cancelling alert %d\n", alert.nID); uiInterface.NotifyAlertChanged((*mi).first, CT_DELETED); - mapAlerts.erase(mi++); + mi = mapAlerts.erase(mi); } else if (!alert.IsInEffect()) { LogPrint("alert", "expiring alert %d\n", alert.nID); uiInterface.NotifyAlertChanged((*mi).first, CT_DELETED); - mapAlerts.erase(mi++); + mi = mapAlerts.erase(mi); } else mi++; diff --git a/src/amount.cpp b/src/amount.cpp index 3572e59c8..78e90bc78 100644 --- a/src/amount.cpp +++ b/src/amount.cpp @@ -8,6 +8,7 @@ #include "tinyformat.h" const std::string CURRENCY_UNIT = "ZEC"; +const std::string MINOR_CURRENCY_UNIT = "zatoshis"; CFeeRate::CFeeRate(const CAmount& nFeePaid, size_t nSize) { diff --git a/src/amount.h b/src/amount.h index 9913e565e..73f7741c0 100644 --- a/src/amount.h +++ b/src/amount.h @@ -17,6 +17,7 @@ static const CAmount COIN = 100000000; static const CAmount CENT = 1000000; extern const std::string CURRENCY_UNIT; +extern const std::string MINOR_CURRENCY_UNIT; /** No amount larger than this (in satoshi) is valid. * diff --git a/src/amqp/amqpabstractnotifier.cpp b/src/amqp/amqpabstractnotifier.cpp deleted file mode 100644 index 30481b89d..000000000 --- a/src/amqp/amqpabstractnotifier.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) 2017 The Zcash developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or https://www.opensource.org/licenses/mit-license.php . - -#include "amqpabstractnotifier.h" -#include "util.h" - - -AMQPAbstractNotifier::~AMQPAbstractNotifier() -{ -} - -bool AMQPAbstractNotifier::NotifyBlock(const CBlockIndex * /*CBlockIndex*/) -{ - return true; -} - -bool AMQPAbstractNotifier::NotifyTransaction(const CTransaction &/*transaction*/) -{ - return true; -} diff --git a/src/amqp/amqpabstractnotifier.h b/src/amqp/amqpabstractnotifier.h deleted file mode 100644 index f68109612..000000000 --- a/src/amqp/amqpabstractnotifier.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2017 The Zcash developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or https://www.opensource.org/licenses/mit-license.php . - -#ifndef ZCASH_AMQP_AMQPABSTRACTNOTIFIER_H -#define ZCASH_AMQP_AMQPABSTRACTNOTIFIER_H - -#include "amqpconfig.h" - -class CBlockIndex; -class AMQPAbstractNotifier; - -typedef AMQPAbstractNotifier* (*AMQPNotifierFactory)(); - -class AMQPAbstractNotifier -{ -public: - AMQPAbstractNotifier() { } - virtual ~AMQPAbstractNotifier(); - - template - static AMQPAbstractNotifier* Create() - { - return new T(); - } - - std::string GetType() const { return type; } - void SetType(const std::string &t) { type = t; } - std::string GetAddress() const { return address; } - void SetAddress(const std::string &a) { address = a; } - - virtual bool Initialize() = 0; - virtual void Shutdown() = 0; - - virtual bool NotifyBlock(const CBlockIndex *pindex); - virtual bool NotifyTransaction(const CTransaction &transaction); - -protected: - std::string type; - std::string address; -}; - -#endif // ZCASH_AMQP_AMQPABSTRACTNOTIFIER_H diff --git a/src/amqp/amqpconfig.h b/src/amqp/amqpconfig.h deleted file mode 100644 index 8b2fd6a88..000000000 --- a/src/amqp/amqpconfig.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2017 The Zcash developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or https://www.opensource.org/licenses/mit-license.php . - -#ifndef ZCASH_AMQP_AMQPCONFIG_H -#define ZCASH_AMQP_AMQPCONFIG_H - -#if defined(HAVE_CONFIG_H) -#include "config/bitcoin-config.h" -#endif - -#include -#include - -#if ENABLE_PROTON -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#endif - -#include "primitives/block.h" -#include "primitives/transaction.h" - -#endif // ZCASH_AMQP_AMQPCONFIG_H diff --git a/src/amqp/amqpnotificationinterface.cpp b/src/amqp/amqpnotificationinterface.cpp deleted file mode 100644 index 0dfae00b9..000000000 --- a/src/amqp/amqpnotificationinterface.cpp +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright (c) 2017 The Zcash developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or https://www.opensource.org/licenses/mit-license.php . - -#include "amqpnotificationinterface.h" -#include "amqppublishnotifier.h" - -#include "version.h" -#include "main.h" -#include "streams.h" -#include "util.h" - -// AMQP 1.0 Support -// -// The boost::signals2 signals and slot system is thread safe, so CValidationInterface listeners -// can be invoked from any thread. -// -// Currently signals are fired from main.cpp so the callbacks should be invoked on the same thread. -// It should be safe to share objects responsible for sending, as they should not be run concurrently -// across different threads. -// -// Developers should be mindful of where notifications are fired to avoid potential race conditions. -// For example, different signals targeting the same address could be fired from different threads -// in different parts of the system around the same time. -// -// Like the ZMQ notification interface, if a notifier fails to send a message, the notifier is shut down. -// - -AMQPNotificationInterface::AMQPNotificationInterface() -{ -} - -AMQPNotificationInterface::~AMQPNotificationInterface() -{ - Shutdown(); - - for (std::list::iterator i = notifiers.begin(); i != notifiers.end(); ++i) { - delete *i; - } -} - -AMQPNotificationInterface* AMQPNotificationInterface::CreateWithArguments(const std::map &args) -{ - AMQPNotificationInterface* notificationInterface = nullptr; - std::map factories; - std::list notifiers; - - factories["pubhashblock"] = AMQPAbstractNotifier::Create; - factories["pubhashtx"] = AMQPAbstractNotifier::Create; - factories["pubrawblock"] = AMQPAbstractNotifier::Create; - factories["pubrawtx"] = AMQPAbstractNotifier::Create; - - for (std::map::const_iterator i=factories.begin(); i!=factories.end(); ++i) { - std::map::const_iterator j = args.find("-amqp" + i->first); - if (j!=args.end()) { - AMQPNotifierFactory factory = i->second; - std::string address = j->second; - AMQPAbstractNotifier *notifier = factory(); - notifier->SetType(i->first); - notifier->SetAddress(address); - notifiers.push_back(notifier); - } - } - - if (!notifiers.empty()) { - notificationInterface = new AMQPNotificationInterface(); - notificationInterface->notifiers = notifiers; - - if (!notificationInterface->Initialize()) { - delete notificationInterface; - notificationInterface = nullptr; - } - } - - return notificationInterface; -} - -// Called at startup to conditionally set up -bool AMQPNotificationInterface::Initialize() -{ - LogPrint("amqp", "amqp: Initialize notification interface\n"); - - std::list::iterator i = notifiers.begin(); - for (; i != notifiers.end(); ++i) { - AMQPAbstractNotifier *notifier = *i; - if (notifier->Initialize()) { - LogPrint("amqp", "amqp: Notifier %s ready (address = %s)\n", notifier->GetType(), notifier->GetAddress()); - } else { - LogPrint("amqp", "amqp: Notifier %s failed (address = %s)\n", notifier->GetType(), notifier->GetAddress()); - break; - } - } - - if (i != notifiers.end()) { - return false; - } - - return true; -} - -// Called during shutdown sequence -void AMQPNotificationInterface::Shutdown() -{ - LogPrint("amqp", "amqp: Shutdown notification interface\n"); - - for (std::list::iterator i = notifiers.begin(); i != notifiers.end(); ++i) { - AMQPAbstractNotifier *notifier = *i; - notifier->Shutdown(); - } -} - -void AMQPNotificationInterface::UpdatedBlockTip(const CBlockIndex *pindex) -{ - for (std::list::iterator i = notifiers.begin(); i != notifiers.end(); ) { - AMQPAbstractNotifier *notifier = *i; - if (notifier->NotifyBlock(pindex)) { - i++; - } else { - notifier->Shutdown(); - i = notifiers.erase(i); - } - } -} - -void AMQPNotificationInterface::SyncTransaction(const CTransaction &tx, const CBlock *pblock) -{ - for (std::list::iterator i = notifiers.begin(); i != notifiers.end(); ) { - AMQPAbstractNotifier *notifier = *i; - if (notifier->NotifyTransaction(tx)) { - i++; - } else { - notifier->Shutdown(); - i = notifiers.erase(i); - } - } -} diff --git a/src/amqp/amqpnotificationinterface.h b/src/amqp/amqpnotificationinterface.h deleted file mode 100644 index 77495a85c..000000000 --- a/src/amqp/amqpnotificationinterface.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2017 The Zcash developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or https://www.opensource.org/licenses/mit-license.php . - -#ifndef ZCASH_AMQP_AMQPNOTIFICATIONINTERFACE_H -#define ZCASH_AMQP_AMQPNOTIFICATIONINTERFACE_H - -#include "validationinterface.h" -#include -#include - -class CBlockIndex; -class AMQPAbstractNotifier; - -class AMQPNotificationInterface : public CValidationInterface -{ -public: - virtual ~AMQPNotificationInterface(); - - static AMQPNotificationInterface* CreateWithArguments(const std::map &args); - -protected: - bool Initialize(); - void Shutdown(); - - // CValidationInterface - void SyncTransaction(const CTransaction &tx, const CBlock *pblock); - void UpdatedBlockTip(const CBlockIndex *pindex); - -private: - AMQPNotificationInterface(); - - std::list notifiers; -}; - -#endif // ZCASH_AMQP_AMQPNOTIFICATIONINTERFACE_H diff --git a/src/amqp/amqppublishnotifier.cpp b/src/amqp/amqppublishnotifier.cpp deleted file mode 100644 index 2dc780273..000000000 --- a/src/amqp/amqppublishnotifier.cpp +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright (c) 2017 The Zcash developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or https://www.opensource.org/licenses/mit-license.php . - -#include "amqppublishnotifier.h" -#include "chainparams.h" -#include "main.h" -#include "util.h" - -#include "amqpsender.h" - -#include -#include - -static std::multimap mapPublishNotifiers; - -static const char *MSG_HASHBLOCK = "hashblock"; -static const char *MSG_HASHTX = "hashtx"; -static const char *MSG_RAWBLOCK = "rawblock"; -static const char *MSG_RAWTX = "rawtx"; - -// Invoke this method from a new thread to run the proton container event loop. -void AMQPAbstractPublishNotifier::SpawnProtonContainer() -{ - try { - proton::default_container(*handler_).run(); - } - catch (const proton::error_condition &e) { - LogPrint("amqp", "amqp: container error: %s\n", e.what()); - } - catch (const std::runtime_error &e) { - LogPrint("amqp", "amqp: runtime error: %s\n", e.what()); - } - catch (const std::exception &e) { - LogPrint("amqp", "amqp: exception: %s\n", e.what()); - } - catch (...) { - LogPrint("amqp", "amqp: unknown error\n"); - } - handler_->terminate(); -} - -bool AMQPAbstractPublishNotifier::Initialize() -{ - std::multimap::iterator i = mapPublishNotifiers.find(address); - - if (i == mapPublishNotifiers.end()) { - try { - handler_ = std::make_shared(address); - thread_ = std::make_shared(&AMQPAbstractPublishNotifier::SpawnProtonContainer, this); - } - catch (std::exception &e) { - LogPrint("amqp", "amqp: initialization error: %s\n", e.what()); - return false; - } - mapPublishNotifiers.insert(std::make_pair(address, this)); - } else { - // copy the shared ptrs to the message handler and the thread where the proton container is running - handler_ = i->second->handler_; - thread_ = i->second->thread_; - mapPublishNotifiers.insert(std::make_pair(address, this)); - } - - return true; -} - - -void AMQPAbstractPublishNotifier::Shutdown() -{ - LogPrint("amqp", "amqp: Shutdown notifier %s at %s\n", GetType(), GetAddress()); - - int count = mapPublishNotifiers.count(address); - - // remove this notifier from the list of publishers using this address - typedef std::multimap::iterator iterator; - std::pair iterpair = mapPublishNotifiers.equal_range(address); - - for (iterator it = iterpair.first; it != iterpair.second; ++it) { - if (it->second == this) { - mapPublishNotifiers.erase(it); - break; - } - } - - // terminate the connection if this is the last publisher using this address - if (count == 1) { - handler_->terminate(); - if (thread_.get() != nullptr) { - if (thread_->joinable()) { - thread_->join(); - } - } - } -} - - -bool AMQPAbstractPublishNotifier::SendMessage(const char *command, const void* data, size_t size) -{ - try { - proton::binary content; - const char *p = (const char *)data; - content.assign(p, p + size); - - proton::message message(content); - message.subject(std::string(command)); - proton::message::property_map & props = message.properties(); - props.put("x-opt-sequence-number", sequence_); - handler_->publish(message); - - } catch (proton::error_condition &e) { - LogPrint("amqp", "amqp: error : %s\n", e.what()); - return false; - } - catch (const std::runtime_error &e) { - LogPrint("amqp", "amqp: runtime error: %s\n", e.what()); - return false; - } - catch (const std::exception &e) { - LogPrint("amqp", "amqp: exception: %s\n", e.what()); - return false; - } - catch (...) { - LogPrint("amqp", "amqp: unknown error\n"); - return false; - } - - sequence_++; - - return true; -} - -bool AMQPPublishHashBlockNotifier::NotifyBlock(const CBlockIndex *pindex) -{ - uint256 hash = pindex->GetBlockHash(); - LogPrint("amqp", "amqp: Publish hashblock %s\n", hash.GetHex()); - char data[32]; - for (unsigned int i = 0; i < 32; i++) - data[31 - i] = hash.begin()[i]; - return SendMessage(MSG_HASHBLOCK, data, 32); -} - -bool AMQPPublishHashTransactionNotifier::NotifyTransaction(const CTransaction &transaction) -{ - uint256 hash = transaction.GetHash(); - LogPrint("amqp", "amqp: Publish hashtx %s\n", hash.GetHex()); - char data[32]; - for (unsigned int i = 0; i < 32; i++) - data[31 - i] = hash.begin()[i]; - return SendMessage(MSG_HASHTX, data, 32); -} - -bool AMQPPublishRawBlockNotifier::NotifyBlock(const CBlockIndex *pindex) -{ - LogPrint("amqp", "amqp: Publish rawblock %s\n", pindex->GetBlockHash().GetHex()); - - const Consensus::Params& consensusParams = Params().GetConsensus(); - CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); - { - LOCK(cs_main); - CBlock block; - if(!ReadBlockFromDisk(block, pindex, consensusParams)) { - LogPrint("amqp", "amqp: Can't read block from disk"); - return false; - } - - ss << block; - } - - return SendMessage(MSG_RAWBLOCK, &(*ss.begin()), ss.size()); -} - -bool AMQPPublishRawTransactionNotifier::NotifyTransaction(const CTransaction &transaction) -{ - uint256 hash = transaction.GetHash(); - LogPrint("amqp", "amqp: Publish rawtx %s\n", hash.GetHex()); - CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); - ss << transaction; - return SendMessage(MSG_RAWTX, &(*ss.begin()), ss.size()); -} diff --git a/src/amqp/amqppublishnotifier.h b/src/amqp/amqppublishnotifier.h deleted file mode 100644 index 2eca74444..000000000 --- a/src/amqp/amqppublishnotifier.h +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2017 The Zcash developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or https://www.opensource.org/licenses/mit-license.php . - -#ifndef ZCASH_AMQP_AMQPPUBLISHNOTIFIER_H -#define ZCASH_AMQP_AMQPPUBLISHNOTIFIER_H - -#include "amqpabstractnotifier.h" -#include "amqpconfig.h" -#include "amqpsender.h" - -#include -#include - -class CBlockIndex; - -class AMQPAbstractPublishNotifier : public AMQPAbstractNotifier -{ -private: - uint64_t sequence_; // memory only, per notifier instance: upcounting message sequence number - - std::shared_ptr thread_; // proton container thread, may be shared between notifiers - std::shared_ptr handler_; // proton container message handler, may be shared between notifiers - -public: - bool SendMessage(const char *command, const void* data, size_t size); - bool Initialize(); - void Shutdown(); - void SpawnProtonContainer(); -}; - -class AMQPPublishHashBlockNotifier : public AMQPAbstractPublishNotifier -{ -public: - bool NotifyBlock(const CBlockIndex *pindex); -}; - -class AMQPPublishHashTransactionNotifier : public AMQPAbstractPublishNotifier -{ -public: - bool NotifyTransaction(const CTransaction &transaction); -}; - -class AMQPPublishRawBlockNotifier : public AMQPAbstractPublishNotifier -{ -public: - bool NotifyBlock(const CBlockIndex *pindex); -}; - -class AMQPPublishRawTransactionNotifier : public AMQPAbstractPublishNotifier -{ -public: - bool NotifyTransaction(const CTransaction &transaction); -}; - -#endif // ZCASH_AMQP_AMQPPUBLISHNOTIFIER_H diff --git a/src/amqp/amqpsender.h b/src/amqp/amqpsender.h deleted file mode 100644 index eb365d3ec..000000000 --- a/src/amqp/amqpsender.h +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (c) 2017 The Zcash developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or https://www.opensource.org/licenses/mit-license.php . - -#ifndef ZCASH_AMQP_AMQPSENDER_H -#define ZCASH_AMQP_AMQPSENDER_H - -#include "amqpconfig.h" - -#include -#include -#include -#include - -class AMQPSender : public proton::messaging_handler { - private: - std::deque messages_; - proton::url url_; - proton::connection conn_; - proton::sender sender_; - std::mutex lock_; - std::atomic terminated_ = {false}; - - public: - - AMQPSender(const std::string& url) : url_(url) {} - - // Callback to initialize the container when run() is invoked - void on_container_start(proton::container& c) override { - proton::duration t(10000); // milliseconds - proton::connection_options opts = proton::connection_options().idle_timeout(t); - conn_ = c.connect(url_, opts); - sender_ = conn_.open_sender(url_.path()); - } - - // Remote end signals when the local end can send (i.e. has credit) - void on_sendable(proton::sender &s) override { - dispatch(); - } - - // Publish message by adding to queue and trying to dispatch it - void publish(const proton::message &m) { - add_message(m); - dispatch(); - } - - // Add message to queue - void add_message(const proton::message &m) { - std::lock_guard guard(lock_); - messages_.push_back(m); - } - - // Send messages in queue - void dispatch() { - std::lock_guard guard(lock_); - - if (isTerminated()) { - throw std::runtime_error("amqp connection was terminated"); - } - - if (!conn_.active()) { - throw std::runtime_error("amqp connection is not active"); - } - - while (messages_.size() > 0) { - if (sender_.credit()) { - const proton::message& m = messages_.front(); - sender_.send(m); - messages_.pop_front(); - } else { - break; - } - } - } - - // Close connection to remote end. Container event-loop, by default, will auto-stop. - void terminate() { - std::lock_guard guard(lock_); - conn_.close(); - terminated_.store(true); - } - - bool isTerminated() const { - return terminated_.load(); - } - - void on_transport_error(proton::transport &t) override { - t.connection().close(); - throw t.error(); - } - - void on_connection_error(proton::connection &c) override { - c.close(); - throw c.error(); - } - - void on_session_error(proton::session &s) override { - s.connection().close(); - throw s.error(); - } - - void on_receiver_error(proton::receiver &r) override { - r.connection().close(); - throw r.error(); - } - - void on_sender_error(proton::sender &s) override { - s.connection().close(); - throw s.error(); - } - -}; - - -#endif //ZCASH_AMQP_AMQPSENDER_H diff --git a/src/asyncrpcoperation.h b/src/asyncrpcoperation.h index a3bc5bf0b..9879e23d0 100644 --- a/src/asyncrpcoperation.h +++ b/src/asyncrpcoperation.h @@ -3,8 +3,8 @@ // file COPYING or https://www.opensource.org/licenses/mit-license.php . -#ifndef ASYNCRPCOPERATION_H -#define ASYNCRPCOPERATION_H +#ifndef ZCASH_ASYNCRPCOPERATION_H +#define ZCASH_ASYNCRPCOPERATION_H #include #include @@ -149,5 +149,5 @@ private: int64_t creation_time_; }; -#endif /* ASYNCRPCOPERATION_H */ +#endif // ZCASH_ASYNCRPCOPERATION_H diff --git a/src/asyncrpcqueue.h b/src/asyncrpcqueue.h index 9956405ed..f798c2d33 100644 --- a/src/asyncrpcqueue.h +++ b/src/asyncrpcqueue.h @@ -2,8 +2,8 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or https://www.opensource.org/licenses/mit-license.php . -#ifndef ASYNCRPCQUEUE_H -#define ASYNCRPCQUEUE_H +#ifndef ZCASH_ASYNCRPCQUEUE_H +#define ZCASH_ASYNCRPCQUEUE_H #include "asyncrpcoperation.h" @@ -65,6 +65,4 @@ private: std::vector workers_; }; -#endif - - +#endif // ZCASH_ASYNCRPCQUEUE_H diff --git a/src/bench/bench.cpp b/src/bench/bench.cpp index 894ea8931..39324b1e9 100644 --- a/src/bench/bench.cpp +++ b/src/bench/bench.cpp @@ -3,6 +3,7 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "bench.h" + #include "perf.h" #include diff --git a/src/bench/bench_bitcoin.cpp b/src/bench/bench_bitcoin.cpp index dab21e27a..a20a67f9e 100644 --- a/src/bench/bench_bitcoin.cpp +++ b/src/bench/bench_bitcoin.cpp @@ -4,12 +4,10 @@ #include "bench.h" +#include "fs.h" #include "key.h" #include "main.h" #include "util.h" -#include "zcash/JoinSplit.hpp" - -#include #include "librustzcash.h" @@ -21,12 +19,12 @@ main(int argc, char** argv) SetupEnvironment(); fPrintToDebugLog = false; // don't want to write to debug.log file - boost::filesystem::path sapling_spend = ZC_GetParamsDir() / "sapling-spend.params"; - boost::filesystem::path sapling_output = ZC_GetParamsDir() / "sapling-output.params"; - boost::filesystem::path sprout_groth16 = ZC_GetParamsDir() / "sprout-groth16.params"; + fs::path sapling_spend = ZC_GetParamsDir() / "sapling-spend.params"; + fs::path sapling_output = ZC_GetParamsDir() / "sapling-output.params"; + fs::path sprout_groth16 = ZC_GetParamsDir() / "sprout-groth16.params"; static_assert( - sizeof(boost::filesystem::path::value_type) == sizeof(codeunit), + sizeof(fs::path::value_type) == sizeof(codeunit), "librustzcash not configured correctly"); auto sapling_spend_str = sapling_spend.native(); auto sapling_output_str = sapling_output.native(); @@ -35,13 +33,10 @@ main(int argc, char** argv) librustzcash_init_zksnark_params( reinterpret_cast(sapling_spend_str.c_str()), sapling_spend_str.length(), - "8270785a1a0d0bc77196f000ee6d221c9c9894f55307bd9357c3f0105d31ca63991ab91324160d8f53e2bbd3c2633a6eb8bdf5205d822e7f3f73edac51b2b70c", reinterpret_cast(sapling_output_str.c_str()), sapling_output_str.length(), - "657e3d38dbb5cb5e7dd2970e8b03d69b4787dd907285b5a7f0790dcc8072f60bf593b32cc2d1c030e00ff5ae64bf84c5c3beb84ddc841d48264b4a171744d028", reinterpret_cast(sprout_groth16_str.c_str()), - sprout_groth16_str.length(), - "e9b238411bd6c0ec4791e9d04245ec350c9c5744f5610dfcce4365d5ca49dfefd5054e371842b3f88fa1b9d7e8e075249b3ebabd167fa8b0f3161292d36c180a" + sprout_groth16_str.length() ); benchmark::BenchRunner::RunAll(); diff --git a/src/bench/lockedpool.cpp b/src/bench/lockedpool.cpp new file mode 100644 index 000000000..4226d6b82 --- /dev/null +++ b/src/bench/lockedpool.cpp @@ -0,0 +1,46 @@ +// Copyright (c) 2016 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or https://www.opensource.org/licenses/mit-license.php . + +#include "bench.h" + +#include "support/lockedpool.h" + +#include +#include + +#define ASIZE 2048 +#define BITER 5000 +#define MSIZE 2048 + +static void LockedPool(benchmark::State& state) +{ + void *synth_base = reinterpret_cast(0x08000000); + const size_t synth_size = 1024*1024; + Arena b(synth_base, synth_size, 16); + + std::vector addr; + for (int x=0; x> 16) & (MSIZE-1)); + } + bool lsb = s & 1; + s >>= 1; + if (lsb) + s ^= 0xf00f00f0; // LFSR period 0xf7ffffe1 + } + } + for (void *ptr: addr) + b.free(ptr); + addr.clear(); +} + +BENCHMARK(LockedPool); diff --git a/src/bench/perf.h b/src/bench/perf.h index 681bd0c8a..73ea8b964 100644 --- a/src/bench/perf.h +++ b/src/bench/perf.h @@ -3,8 +3,8 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. /** Functions for measurement of CPU cycles */ -#ifndef H_PERF -#define H_PERF +#ifndef BITCOIN_BENCH_PERF_H +#define BITCOIN_BENCH_PERF_H #include @@ -34,4 +34,4 @@ uint64_t perf_cpucycles(void); void perf_init(void); void perf_fini(void); -#endif // H_PERF +#endif // BITCOIN_BENCH_PERF_H diff --git a/src/bench/verification.cpp b/src/bench/verification.cpp index 2fff0c8a4..870c14704 100644 --- a/src/bench/verification.cpp +++ b/src/bench/verification.cpp @@ -15,7 +15,7 @@ #include "version.h" #include "librustzcash.h" -#include "sodium.h" +#include static void ECDSA(benchmark::State& state) { @@ -75,20 +75,20 @@ static void ECDSA(benchmark::State& state) static void JoinSplitSig(benchmark::State& state) { - uint256 joinSplitPubKey; - unsigned char joinSplitPrivKey[crypto_sign_SECRETKEYBYTES]; + Ed25519VerificationKey joinSplitPubKey; + Ed25519SigningKey joinSplitPrivKey; uint256 dataToBeSigned; - std::array joinSplitSig; + Ed25519Signature joinSplitSig; - crypto_sign_keypair(joinSplitPubKey.begin(), joinSplitPrivKey); - crypto_sign_detached(&joinSplitSig[0], nullptr, dataToBeSigned.begin(), 32, joinSplitPrivKey); + ed25519_generate_keypair(&joinSplitPrivKey, &joinSplitPubKey); + ed25519_sign(&joinSplitPrivKey, dataToBeSigned.begin(), 32, &joinSplitSig); while (state.KeepRunning()) { // Declared with warn_unused_result. - auto res = crypto_sign_verify_detached( - &joinSplitSig[0], - dataToBeSigned.begin(), 32, - joinSplitPubKey.begin()); + auto res = ed25519_verify( + &joinSplitPubKey, + &joinSplitSig, + dataToBeSigned.begin(), 32); } } diff --git a/src/bitcoin-cli.cpp b/src/bitcoin-cli.cpp index b0278864f..0b695303b 100644 --- a/src/bitcoin-cli.cpp +++ b/src/bitcoin-cli.cpp @@ -5,12 +5,12 @@ #include "chainparamsbase.h" #include "clientversion.h" +#include "fs.h" #include "rpc/client.h" #include "rpc/protocol.h" #include "util.h" #include "utilstrencodings.h" -#include #include #include @@ -95,7 +95,7 @@ static int AppInitRPC(int argc, char* argv[]) } return EXIT_SUCCESS; } - if (!boost::filesystem::is_directory(GetDataDir(false))) { + if (!fs::is_directory(GetDataDir(false))) { fprintf(stderr, "Error: Specified data directory \"%s\" does not exist.\n", mapArgs["-datadir"].c_str()); return EXIT_FAILURE; } diff --git a/src/bitcoin-tx.cpp b/src/bitcoin-tx.cpp index 1bb304596..473ad3f1c 100644 --- a/src/bitcoin-tx.cpp +++ b/src/bitcoin-tx.cpp @@ -240,9 +240,11 @@ static void MutateTxAddOutAddr(CMutableTransaction& tx, const std::string& strIn if (!ParseMoney(strValue, value)) throw std::runtime_error("invalid TX output value"); + KeyIO keyIO(Params()); + // extract and validate ADDRESS std::string strAddr = strInput.substr(pos + 1, std::string::npos); - CTxDestination destination = DecodeDestination(strAddr); + CTxDestination destination = keyIO.DecodeDestination(strAddr); if (!IsValidDestination(destination)) { throw std::runtime_error("invalid TX output address"); } @@ -399,10 +401,12 @@ static void MutateTxSign(CMutableTransaction& tx, const std::string& strInput) UniValue keysObj = registers["privatekeys"]; fGivenKeys = true; + KeyIO keyIO(Params()); + for (size_t kidx = 0; kidx < keysObj.size(); kidx++) { if (!keysObj[kidx].isStr()) throw std::runtime_error("privatekey not a std::string"); - CKey key = DecodeSecret(keysObj[kidx].getValStr()); + CKey key = keyIO.DecodeSecret(keysObj[kidx].getValStr()); if (!key.IsValid()) { throw std::runtime_error("privatekey not valid"); } diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index d7fe0ef6d..7cc186387 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -4,6 +4,7 @@ // file COPYING or https://www.opensource.org/licenses/mit-license.php . #include "clientversion.h" +#include "fs.h" #include "rpc/server.h" #include "init.h" #include "main.h" @@ -14,7 +15,6 @@ #include "httprpc.h" #include -#include #include #include @@ -92,7 +92,7 @@ bool AppInit(int argc, char* argv[]) try { - if (!boost::filesystem::is_directory(GetDataDir(false))) + if (!fs::is_directory(GetDataDir(false))) { fprintf(stderr, "Error: Specified data directory \"%s\" does not exist.\n", mapArgs["-datadir"].c_str()); return false; @@ -170,6 +170,11 @@ bool AppInit(int argc, char* argv[]) // Set this early so that parameter interactions go to console InitLogging(); + + // Now that we have logging set up, start the initialization span. + auto span = TracingSpan("info", "main", "Init"); + auto spanGuard = span.Enter(); + InitParameterInteraction(); fRet = AppInit2(threadGroup, scheduler); } diff --git a/src/chain.h b/src/chain.h index 06052986b..bedad61ee 100644 --- a/src/chain.h +++ b/src/chain.h @@ -588,7 +588,7 @@ public: /** Return the maximal height in the chain. Is equal to chain.Tip() ? chain.Tip()->nHeight : -1. */ int Height() const { - return vChain.size() - 1; + return int(vChain.size()) - 1; } /** Set/initialize a chain with a given tip. */ diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 9ecb1eb52..b0a8ed081 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -1,5 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers +// Copyright (c) 2015-2020 The Zcash Developers // Distributed under the MIT software license, see the accompanying // file COPYING or https://www.opensource.org/licenses/mit-license.php . @@ -87,12 +88,12 @@ public: consensus.fCoinbaseMustBeShielded = true; consensus.nSubsidySlowStartInterval = 20000; consensus.nPreBlossomSubsidyHalvingInterval = Consensus::PRE_BLOSSOM_HALVING_INTERVAL; - consensus.nPostBlossomSubsidyHalvingInterval = Consensus::POST_BLOSSOM_HALVING_INTERVAL; + consensus.nPostBlossomSubsidyHalvingInterval = POST_BLOSSOM_HALVING_INTERVAL(Consensus::PRE_BLOSSOM_HALVING_INTERVAL); consensus.nMajorityEnforceBlockUpgrade = 750; consensus.nMajorityRejectBlockOutdated = 950; consensus.nMajorityWindow = 4000; const size_t N = 200, K = 9; - BOOST_STATIC_ASSERT(equihash_parameters_acceptable(N, K)); + static_assert(equihash_parameters_acceptable(N, K)); consensus.nEquihashN = N; consensus.nEquihashK = K; consensus.powLimit = uint256S("0007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); @@ -103,6 +104,7 @@ public: consensus.nPreBlossomPowTargetSpacing = Consensus::PRE_BLOSSOM_POW_TARGET_SPACING; consensus.nPostBlossomPowTargetSpacing = Consensus::POST_BLOSSOM_POW_TARGET_SPACING; consensus.nPowAllowMinDifficultyBlocksAfterHeight = boost::none; + consensus.fPowNoRetargeting = false; consensus.vUpgrades[Consensus::BASE_SPROUT].nProtocolVersion = 170002; consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight = Consensus::NetworkUpgrade::ALWAYS_ACTIVE; @@ -122,8 +124,105 @@ public: consensus.vUpgrades[Consensus::UPGRADE_HEARTWOOD].nProtocolVersion = 170011; consensus.vUpgrades[Consensus::UPGRADE_HEARTWOOD].nActivationHeight = 903000; consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nProtocolVersion = 170013; - consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight = - Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; + consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight = 1046400; + + consensus.nFundingPeriodLength = consensus.nPostBlossomSubsidyHalvingInterval / 48; + + // guarantees the first 2 characters, when base58 encoded, are "t1" + keyConstants.base58Prefixes[PUBKEY_ADDRESS] = {0x1C,0xB8}; + // guarantees the first 2 characters, when base58 encoded, are "t3" + keyConstants.base58Prefixes[SCRIPT_ADDRESS] = {0x1C,0xBD}; + // the first character, when base58 encoded, is "5" or "K" or "L" (as in Bitcoin) + keyConstants.base58Prefixes[SECRET_KEY] = {0x80}; + // do not rely on these BIP32 prefixes; they are not specified and may change + keyConstants.base58Prefixes[EXT_PUBLIC_KEY] = {0x04,0x88,0xB2,0x1E}; + keyConstants.base58Prefixes[EXT_SECRET_KEY] = {0x04,0x88,0xAD,0xE4}; + // guarantees the first 2 characters, when base58 encoded, are "zc" + keyConstants.base58Prefixes[ZCPAYMENT_ADDRESS] = {0x16,0x9A}; + // guarantees the first 4 characters, when base58 encoded, are "ZiVK" + keyConstants.base58Prefixes[ZCVIEWING_KEY] = {0xA8,0xAB,0xD3}; + // guarantees the first 2 characters, when base58 encoded, are "SK" + keyConstants.base58Prefixes[ZCSPENDING_KEY] = {0xAB,0x36}; + + keyConstants.bech32HRPs[SAPLING_PAYMENT_ADDRESS] = "zs"; + keyConstants.bech32HRPs[SAPLING_FULL_VIEWING_KEY] = "zviews"; + keyConstants.bech32HRPs[SAPLING_INCOMING_VIEWING_KEY] = "zivks"; + keyConstants.bech32HRPs[SAPLING_EXTENDED_SPEND_KEY] = "secret-extended-key-main"; + keyConstants.bech32HRPs[SAPLING_EXTENDED_FVK] = "zxviews"; + + { + std::vector ecc_addresses = { + "t3LmX1cxWPPPqL4TZHx42HU3U5ghbFjRiif", + "t3Toxk1vJQ6UjWQ42tUJz2rV2feUWkpbTDs", + "t3ZBdBe4iokmsjdhMuwkxEdqMCFN16YxKe6", + "t3ZuaJziLM8xZ32rjDUzVjVtyYdDSz8GLWB", + "t3bAtYWa4bi8VrtvqySxnbr5uqcG9czQGTZ", + "t3dktADfb5Rmxncpe1HS5BRS5Gcj7MZWYBi", + "t3hgskquvKKoCtvxw86yN7q8bzwRxNgUZmc", + "t3R1VrLzwcxAZzkX4mX3KGbWpNsgtYtMntj", + "t3ff6fhemqPMVujD3AQurxRxTdvS1pPSaa2", + "t3cEUQFG3KYnFG6qYhPxSNgGi3HDjUPwC3J", + "t3WR9F5U4QvUFqqx9zFmwT6xFqduqRRXnaa", + "t3PYc1LWngrdUrJJbHkYPCKvJuvJjcm85Ch", + "t3bgkjiUeatWNkhxY3cWyLbTxKksAfk561R", + "t3Z5rrR8zahxUpZ8itmCKhMSfxiKjUp5Dk5", + "t3PU1j7YW3fJ67jUbkGhSRto8qK2qXCUiW3", + "t3S3yaT7EwNLaFZCamfsxxKwamQW2aRGEkh", + "t3eutXKJ9tEaPSxZpmowhzKhPfJvmtwTEZK", + "t3gbTb7brxLdVVghSPSd3ycGxzHbUpukeDm", + "t3UCKW2LrHFqPMQFEbZn6FpjqnhAAbfpMYR", + "t3NyHsrnYbqaySoQqEQRyTWkjvM2PLkU7Uu", + "t3QEFL6acxuZwiXtW3YvV6njDVGjJ1qeaRo", + "t3PdBRr2S1XTDzrV8bnZkXF3SJcrzHWe1wj", + "t3ZWyRPpWRo23pKxTLtWsnfEKeq9T4XPxKM", + "t3he6QytKCTydhpztykFsSsb9PmBT5JBZLi", + "t3VWxWDsLb2TURNEP6tA1ZSeQzUmPKFNxRY", + "t3NmWLvZkbciNAipauzsFRMxoZGqmtJksbz", + "t3cKr4YxVPvPBG1mCvzaoTTdBNokohsRJ8n", + "t3T3smGZn6BoSFXWWXa1RaoQdcyaFjMfuYK", + "t3gkDUe9Gm4GGpjMk86TiJZqhztBVMiUSSA", + "t3eretuBeBXFHe5jAqeSpUS1cpxVh51fAeb", + "t3dN8g9zi2UGJdixGe9txeSxeofLS9t3yFQ", + "t3S799pq9sYBFwccRecoTJ3SvQXRHPrHqvx", + "t3fhYnv1S5dXwau7GED3c1XErzt4n4vDxmf", + "t3cmE3vsBc5xfDJKXXZdpydCPSdZqt6AcNi", + "t3h5fPdjJVHaH4HwynYDM5BB3J7uQaoUwKi", + "t3Ma35c68BgRX8sdLDJ6WR1PCrKiWHG4Da9", + "t3LokMKPL1J8rkJZvVpfuH7dLu6oUWqZKQK", + "t3WFFGbEbhJWnASZxVLw2iTJBZfJGGX73mM", + "t3L8GLEsUn4QHNaRYcX3EGyXmQ8kjpT1zTa", + "t3PgfByBhaBSkH8uq4nYJ9ZBX4NhGCJBVYm", + "t3WecsqKDhWXD4JAgBVcnaCC2itzyNZhJrv", + "t3ZG9cSfopnsMQupKW5v9sTotjcP5P6RTbn", + "t3hC1Ywb5zDwUYYV8LwhvF5rZ6m49jxXSG5", + "t3VgMqDL15ZcyQDeqBsBW3W6rzfftrWP2yB", + "t3LC94Y6BwLoDtBoK2NuewaEbnko1zvR9rm", + "t3cWCUZJR3GtALaTcatrrpNJ3MGbMFVLRwQ", + "t3YYF4rPLVxDcF9hHFsXyc5Yq1TFfbojCY6", + "t3XHAGxRP2FNfhAjxGjxbrQPYtQQjc3RCQD", + }; + + // ZF and MG each use a single address repeated 48 times, + // once for each funding period. + std::vector zf_addresses(48, "t3dvVE3SQEi7kqNzwrfNePxZ1d4hUyztBA1"); + std::vector mg_addresses(48, "t3XyYW8yBFRuMnfvm5KLGFbEVz25kckZXym"); + + consensus.AddZIP207FundingStream( + keyConstants, + Consensus::FS_ZIP214_BP, + consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight, 2726400, + ecc_addresses); + consensus.AddZIP207FundingStream( + keyConstants, + Consensus::FS_ZIP214_ZF, + consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight, 2726400, + zf_addresses); + consensus.AddZIP207FundingStream( + keyConstants, + Consensus::FS_ZIP214_MG, + consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight, 2726400, + mg_addresses); + } // The best chain should have at least this much work. consensus.nMinimumChainWork = uint256S("000000000000000000000000000000000000000000000000017e73a331fae01c"); @@ -152,28 +251,8 @@ public: vSeeds.clear(); vSeeds.push_back(CDNSSeedData("z.cash", "dnsseed.z.cash")); // Zcash vSeeds.push_back(CDNSSeedData("str4d.xyz", "dnsseed.str4d.xyz")); // @str4d - - // guarantees the first 2 characters, when base58 encoded, are "t1" - base58Prefixes[PUBKEY_ADDRESS] = {0x1C,0xB8}; - // guarantees the first 2 characters, when base58 encoded, are "t3" - base58Prefixes[SCRIPT_ADDRESS] = {0x1C,0xBD}; - // the first character, when base58 encoded, is "5" or "K" or "L" (as in Bitcoin) - base58Prefixes[SECRET_KEY] = {0x80}; - // do not rely on these BIP32 prefixes; they are not specified and may change - base58Prefixes[EXT_PUBLIC_KEY] = {0x04,0x88,0xB2,0x1E}; - base58Prefixes[EXT_SECRET_KEY] = {0x04,0x88,0xAD,0xE4}; - // guarantees the first 2 characters, when base58 encoded, are "zc" - base58Prefixes[ZCPAYMENT_ADDRRESS] = {0x16,0x9A}; - // guarantees the first 4 characters, when base58 encoded, are "ZiVK" - base58Prefixes[ZCVIEWING_KEY] = {0xA8,0xAB,0xD3}; - // guarantees the first 2 characters, when base58 encoded, are "SK" - base58Prefixes[ZCSPENDING_KEY] = {0xAB,0x36}; - - bech32HRPs[SAPLING_PAYMENT_ADDRESS] = "zs"; - bech32HRPs[SAPLING_FULL_VIEWING_KEY] = "zviews"; - bech32HRPs[SAPLING_INCOMING_VIEWING_KEY] = "zivks"; - bech32HRPs[SAPLING_EXTENDED_SPEND_KEY] = "secret-extended-key-main"; - bech32HRPs[SAPLING_EXTENDED_FVK] = "zxviews"; + vSeeds.push_back(CDNSSeedData("zfnd.org", "mainnet.seeder.zfnd.org")); // Zcash Foundation + vSeeds.push_back(CDNSSeedData("yolo.money", "mainnet.is.yolo.money")); // gtank vFixedSeeds = std::vector(pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main)); @@ -200,7 +279,6 @@ public: (525000, uint256S("0x0000000001a36c500378be8862d9bf1bea8f1616da6e155971b608139cc7e39b")), 1556722044, // * UNIX timestamp of last checkpoint block 4653556, // * total number of transactions between genesis and last checkpoint - // (the tx=... number in the SetBestChain debug.log lines) 5106 // * estimated number of transactions per day after checkpoint // total number of tx / (checkpoint block height / (24 * 24)) }; @@ -288,12 +366,12 @@ public: consensus.fCoinbaseMustBeShielded = true; consensus.nSubsidySlowStartInterval = 20000; consensus.nPreBlossomSubsidyHalvingInterval = Consensus::PRE_BLOSSOM_HALVING_INTERVAL; - consensus.nPostBlossomSubsidyHalvingInterval = Consensus::POST_BLOSSOM_HALVING_INTERVAL; + consensus.nPostBlossomSubsidyHalvingInterval = POST_BLOSSOM_HALVING_INTERVAL(Consensus::PRE_BLOSSOM_HALVING_INTERVAL); consensus.nMajorityEnforceBlockUpgrade = 51; consensus.nMajorityRejectBlockOutdated = 75; consensus.nMajorityWindow = 400; const size_t N = 200, K = 9; - BOOST_STATIC_ASSERT(equihash_parameters_acceptable(N, K)); + static_assert(equihash_parameters_acceptable(N, K)); consensus.nEquihashN = N; consensus.nEquihashK = K; consensus.powLimit = uint256S("07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); @@ -304,6 +382,7 @@ public: consensus.nPreBlossomPowTargetSpacing = Consensus::PRE_BLOSSOM_POW_TARGET_SPACING; consensus.nPostBlossomPowTargetSpacing = Consensus::POST_BLOSSOM_POW_TARGET_SPACING; consensus.nPowAllowMinDifficultyBlocksAfterHeight = 299187; + consensus.fPowNoRetargeting = false; consensus.vUpgrades[Consensus::BASE_SPROUT].nProtocolVersion = 170002; consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight = Consensus::NetworkUpgrade::ALWAYS_ACTIVE; @@ -327,8 +406,108 @@ public: consensus.vUpgrades[Consensus::UPGRADE_HEARTWOOD].hashActivationBlock = uint256S("05688d8a0e9ff7c04f6f05e6d695dc5ab43b9c4803342d77ae360b2b27d2468e"); consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nProtocolVersion = 170012; - consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight = - Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; + consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight = 1028500; + + consensus.nFundingPeriodLength = consensus.nPostBlossomSubsidyHalvingInterval / 48; + + // guarantees the first 2 characters, when base58 encoded, are "tm" + keyConstants.base58Prefixes[PUBKEY_ADDRESS] = {0x1D,0x25}; + // guarantees the first 2 characters, when base58 encoded, are "t2" + keyConstants.base58Prefixes[SCRIPT_ADDRESS] = {0x1C,0xBA}; + // the first character, when base58 encoded, is "9" or "c" (as in Bitcoin) + keyConstants.base58Prefixes[SECRET_KEY] = {0xEF}; + // do not rely on these BIP32 prefixes; they are not specified and may change + keyConstants.base58Prefixes[EXT_PUBLIC_KEY] = {0x04,0x35,0x87,0xCF}; + keyConstants.base58Prefixes[EXT_SECRET_KEY] = {0x04,0x35,0x83,0x94}; + // guarantees the first 2 characters, when base58 encoded, are "zt" + keyConstants.base58Prefixes[ZCPAYMENT_ADDRESS] = {0x16,0xB6}; + // guarantees the first 4 characters, when base58 encoded, are "ZiVt" + keyConstants.base58Prefixes[ZCVIEWING_KEY] = {0xA8,0xAC,0x0C}; + // guarantees the first 2 characters, when base58 encoded, are "ST" + keyConstants.base58Prefixes[ZCSPENDING_KEY] = {0xAC,0x08}; + + keyConstants.bech32HRPs[SAPLING_PAYMENT_ADDRESS] = "ztestsapling"; + keyConstants.bech32HRPs[SAPLING_FULL_VIEWING_KEY] = "zviewtestsapling"; + keyConstants.bech32HRPs[SAPLING_INCOMING_VIEWING_KEY] = "zivktestsapling"; + keyConstants.bech32HRPs[SAPLING_EXTENDED_SPEND_KEY] = "secret-extended-key-test"; + keyConstants.bech32HRPs[SAPLING_EXTENDED_FVK] = "zxviewtestsapling"; + + // Testnet funding streams + { + std::vector ecc_addresses = { + "t26ovBdKAJLtrvBsE2QGF4nqBkEuptuPFZz", + "t26ovBdKAJLtrvBsE2QGF4nqBkEuptuPFZz", + "t26ovBdKAJLtrvBsE2QGF4nqBkEuptuPFZz", + "t26ovBdKAJLtrvBsE2QGF4nqBkEuptuPFZz", + "t2NNHrgPpE388atmWSF4DxAb3xAoW5Yp45M", + "t2VMN28itPyMeMHBEd9Z1hm6YLkQcGA1Wwe", + "t2CHa1TtdfUV8UYhNm7oxbzRyfr8616BYh2", + "t2F77xtr28U96Z2bC53ZEdTnQSUAyDuoa67", + "t2ARrzhbgcpoVBDPivUuj6PzXzDkTBPqfcT", + "t278aQ8XbvFR15mecRguiJDQQVRNnkU8kJw", + "t2Dp1BGnZsrTXZoEWLyjHmg3EPvmwBnPDGB", + "t2KzeqXgf4ju33hiSqCuKDb8iHjPCjMq9iL", + "t2Nyxqv1BiWY1eUSiuxVw36oveawYuo18tr", + "t2DKFk5JRsVoiuinK8Ti6eM4Yp7v8BbfTyH", + "t2CUaBca4k1x36SC4q8Nc8eBoqkMpF3CaLg", + "t296SiKL7L5wvFmEdMxVLz1oYgd6fTfcbZj", + "t29fBCFbhgsjL3XYEZ1yk1TUh7eTusB6dPg", + "t2FGofLJXa419A76Gpf5ncxQB4gQXiQMXjK", + "t2ExfrnRVnRiXDvxerQ8nZbcUQvNvAJA6Qu", + "t28JUffLp47eKPRHKvwSPzX27i9ow8LSXHx", + "t2JXWPtrtyL861rFWMZVtm3yfgxAf4H7uPA", + "t2QdgbJoWfYHgyvEDEZBjHmgkr9yNJff3Hi", + "t2QW43nkco8r32ZGRN6iw6eSzyDjkMwCV3n", + "t2DgYDXMJTYLwNcxighQ9RCgPxMVATRcUdC", + "t2Bop7dg33HGZx3wunnQzi2R2ntfpjuti3M", + "t2HVeEwovcLq9RstAbYkqngXNEsCe2vjJh9", + "t2HxbP5keQSx7p592zWQ5bJ5GrMmGDsV2Xa", + "t2TJzUg2matao3mztBRJoWnJY6ekUau6tPD", + "t29pMzxmo6wod25YhswcjKv3AFRNiBZHuhj", + "t2QBQMRiJKYjshJpE6RhbF7GLo51yE6d4wZ", + "t2F5RqnqguzZeiLtYHFx4yYfy6pDnut7tw5", + "t2CHvyZANE7XCtg8AhZnrcHCC7Ys1jJhK13", + "t2BRzpMdrGWZJ2upsaNQv6fSbkbTy7EitLo", + "t2BFixHGQMAWDY67LyTN514xRAB94iEjXp3", + "t2Uvz1iVPzBEWfQBH1p7NZJsFhD74tKaG8V", + "t2CmFDj5q6rJSRZeHf1SdrowinyMNcj438n", + "t2ErNvWEReTfPDBaNizjMPVssz66aVZh1hZ", + "t2GeJQ8wBUiHKDVzVM5ZtKfY5reCg7CnASs", + "t2L2eFtkKv1G6j55kLytKXTGuir4raAy3yr", + "t2EK2b87dpPazb7VvmEGc8iR6SJ289RywGL", + "t2DJ7RKeZJxdA4nZn8hRGXE8NUyTzjujph9", + "t2K1pXo4eByuWpKLkssyMLe8QKUbxnfFC3H", + "t2TB4mbSpuAcCWkH94Leb27FnRxo16AEHDg", + "t2Phx4gVL4YRnNsH3jM1M7jE4Fo329E66Na", + "t2VQZGmeNomN8c3USefeLL9nmU6M8x8CVzC", + "t2RicCvTVTY5y9JkreSRv3Xs8q2K67YxHLi", + "t2JrSLxTGc8wtPDe9hwbaeUjCrCfc4iZnDD", + "t2Uh9Au1PDDSw117sAbGivKREkmMxVC5tZo", + "t2FDwoJKLeEBMTy3oP7RLQ1Fihhvz49a3Bv", + "t2FY18mrgtb7QLeHA8ShnxLXuW8cNQ2n1v8", + "t2L15TkDYum7dnQRBqfvWdRe8Yw3jVy9z7g", + }; + + // ZF and MG use the same address for each funding period + std::vector zf_addresses(51, "t27eWDgjFYJGVXmzrXeVjnb5J3uXDM9xH9v"); + std::vector mg_addresses(51, "t2Gvxv2uNM7hbbACjNox4H6DjByoKZ2Fa3P"); + + consensus.AddZIP207FundingStream( + keyConstants, + Consensus::FS_ZIP214_BP, + consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight, 2796000, + ecc_addresses); + consensus.AddZIP207FundingStream( + keyConstants, + Consensus::FS_ZIP214_ZF, + consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight, 2796000, + zf_addresses); + consensus.AddZIP207FundingStream( + keyConstants, + Consensus::FS_ZIP214_MG, + consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight, 2796000, + mg_addresses); + } // On testnet we activate this rule 6 blocks after Blossom activation. From block 299188 and // prior to Blossom activation, the testnet minimum-difficulty threshold was 15 minutes (i.e. @@ -370,28 +549,8 @@ public: vFixedSeeds.clear(); vSeeds.clear(); vSeeds.push_back(CDNSSeedData("z.cash", "dnsseed.testnet.z.cash")); // Zcash - - // guarantees the first 2 characters, when base58 encoded, are "tm" - base58Prefixes[PUBKEY_ADDRESS] = {0x1D,0x25}; - // guarantees the first 2 characters, when base58 encoded, are "t2" - base58Prefixes[SCRIPT_ADDRESS] = {0x1C,0xBA}; - // the first character, when base58 encoded, is "9" or "c" (as in Bitcoin) - base58Prefixes[SECRET_KEY] = {0xEF}; - // do not rely on these BIP32 prefixes; they are not specified and may change - base58Prefixes[EXT_PUBLIC_KEY] = {0x04,0x35,0x87,0xCF}; - base58Prefixes[EXT_SECRET_KEY] = {0x04,0x35,0x83,0x94}; - // guarantees the first 2 characters, when base58 encoded, are "zt" - base58Prefixes[ZCPAYMENT_ADDRRESS] = {0x16,0xB6}; - // guarantees the first 4 characters, when base58 encoded, are "ZiVt" - base58Prefixes[ZCVIEWING_KEY] = {0xA8,0xAC,0x0C}; - // guarantees the first 2 characters, when base58 encoded, are "ST" - base58Prefixes[ZCSPENDING_KEY] = {0xAC,0x08}; - - bech32HRPs[SAPLING_PAYMENT_ADDRESS] = "ztestsapling"; - bech32HRPs[SAPLING_FULL_VIEWING_KEY] = "zviewtestsapling"; - bech32HRPs[SAPLING_INCOMING_VIEWING_KEY] = "zivktestsapling"; - bech32HRPs[SAPLING_EXTENDED_SPEND_KEY] = "secret-extended-key-test"; - bech32HRPs[SAPLING_EXTENDED_FVK] = "zxviewtestsapling"; + vSeeds.push_back(CDNSSeedData("zfnd.org", "testnet.seeder.zfnd.org")); // Zcash Foundation + vSeeds.push_back(CDNSSeedData("yolo.money", "testnet.is.yolo.money")); // gtank vFixedSeeds = std::vector(pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test)); @@ -408,7 +567,6 @@ public: (38000, uint256S("0x001e9a2d2e2892b88e9998cf7b079b41d59dd085423a921fe8386cecc42287b8")), 1486897419, // * UNIX timestamp of last checkpoint block 47163, // * total number of transactions between genesis and last checkpoint - // (the tx=... number in the SetBestChain debug.log lines) 715 // total number of tx / (checkpoint block height / (24 * 24)) }; @@ -452,12 +610,12 @@ public: consensus.fCoinbaseMustBeShielded = false; consensus.nSubsidySlowStartInterval = 0; consensus.nPreBlossomSubsidyHalvingInterval = Consensus::PRE_BLOSSOM_REGTEST_HALVING_INTERVAL; - consensus.nPostBlossomSubsidyHalvingInterval = Consensus::POST_BLOSSOM_REGTEST_HALVING_INTERVAL; + consensus.nPostBlossomSubsidyHalvingInterval = POST_BLOSSOM_HALVING_INTERVAL(Consensus::PRE_BLOSSOM_REGTEST_HALVING_INTERVAL); consensus.nMajorityEnforceBlockUpgrade = 750; consensus.nMajorityRejectBlockOutdated = 950; consensus.nMajorityWindow = 1000; const size_t N = 48, K = 5; - BOOST_STATIC_ASSERT(equihash_parameters_acceptable(N, K)); + static_assert(equihash_parameters_acceptable(N, K)); consensus.nEquihashN = N; consensus.nEquihashK = K; consensus.powLimit = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"); @@ -468,6 +626,7 @@ public: consensus.nPreBlossomPowTargetSpacing = Consensus::PRE_BLOSSOM_POW_TARGET_SPACING; consensus.nPostBlossomPowTargetSpacing = Consensus::POST_BLOSSOM_POW_TARGET_SPACING; consensus.nPowAllowMinDifficultyBlocksAfterHeight = 0; + consensus.fPowNoRetargeting = true; consensus.vUpgrades[Consensus::BASE_SPROUT].nProtocolVersion = 170002; consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight = Consensus::NetworkUpgrade::ALWAYS_ACTIVE; @@ -490,6 +649,26 @@ public: consensus.vUpgrades[Consensus::UPGRADE_CANOPY].nActivationHeight = Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; + consensus.nFundingPeriodLength = consensus.nPostBlossomSubsidyHalvingInterval / 48; + // Defined funding streams can be enabled with node config flags. + + // These prefixes are the same as the testnet prefixes + keyConstants.base58Prefixes[PUBKEY_ADDRESS] = {0x1D,0x25}; + keyConstants.base58Prefixes[SCRIPT_ADDRESS] = {0x1C,0xBA}; + keyConstants.base58Prefixes[SECRET_KEY] = {0xEF}; + // do not rely on these BIP32 prefixes; they are not specified and may change + keyConstants.base58Prefixes[EXT_PUBLIC_KEY] = {0x04,0x35,0x87,0xCF}; + keyConstants.base58Prefixes[EXT_SECRET_KEY] = {0x04,0x35,0x83,0x94}; + keyConstants.base58Prefixes[ZCPAYMENT_ADDRESS] = {0x16,0xB6}; + keyConstants.base58Prefixes[ZCVIEWING_KEY] = {0xA8,0xAC,0x0C}; + keyConstants.base58Prefixes[ZCSPENDING_KEY] = {0xAC,0x08}; + + keyConstants.bech32HRPs[SAPLING_PAYMENT_ADDRESS] = "zregtestsapling"; + keyConstants.bech32HRPs[SAPLING_FULL_VIEWING_KEY] = "zviewregtestsapling"; + keyConstants.bech32HRPs[SAPLING_INCOMING_VIEWING_KEY] = "zivkregtestsapling"; + keyConstants.bech32HRPs[SAPLING_EXTENDED_SPEND_KEY] = "secret-extended-key-regtest"; + keyConstants.bech32HRPs[SAPLING_EXTENDED_FVK] = "zxviewregtestsapling"; + // The best chain should have at least this much work. consensus.nMinimumChainWork = uint256S("0x00"); @@ -525,22 +704,6 @@ public: 0, 0 }; - // These prefixes are the same as the testnet prefixes - base58Prefixes[PUBKEY_ADDRESS] = {0x1D,0x25}; - base58Prefixes[SCRIPT_ADDRESS] = {0x1C,0xBA}; - base58Prefixes[SECRET_KEY] = {0xEF}; - // do not rely on these BIP32 prefixes; they are not specified and may change - base58Prefixes[EXT_PUBLIC_KEY] = {0x04,0x35,0x87,0xCF}; - base58Prefixes[EXT_SECRET_KEY] = {0x04,0x35,0x83,0x94}; - base58Prefixes[ZCPAYMENT_ADDRRESS] = {0x16,0xB6}; - base58Prefixes[ZCVIEWING_KEY] = {0xA8,0xAC,0x0C}; - base58Prefixes[ZCSPENDING_KEY] = {0xAC,0x08}; - - bech32HRPs[SAPLING_PAYMENT_ADDRESS] = "zregtestsapling"; - bech32HRPs[SAPLING_FULL_VIEWING_KEY] = "zviewregtestsapling"; - bech32HRPs[SAPLING_INCOMING_VIEWING_KEY] = "zivkregtestsapling"; - bech32HRPs[SAPLING_EXTENDED_SPEND_KEY] = "secret-extended-key-regtest"; - bech32HRPs[SAPLING_EXTENDED_FVK] = "zxviewregtestsapling"; // Founders reward script expects a vector of 2-of-3 multisig addresses vFoundersRewardAddress = { "t2FwcEhFdNXuFMv1tcYwaBJtYVtMj8b1uTg" }; @@ -553,11 +716,22 @@ public: consensus.vUpgrades[idx].nActivationHeight = nActivationHeight; } - void UpdateRegtestPow(int64_t nPowMaxAdjustDown, int64_t nPowMaxAdjustUp, uint256 powLimit) + void UpdateFundingStreamParameters(Consensus::FundingStreamIndex idx, Consensus::FundingStream fs) + { + assert(idx >= Consensus::FIRST_FUNDING_STREAM && idx < Consensus::MAX_FUNDING_STREAMS); + consensus.vFundingStreams[idx] = fs; + } + + void UpdateRegtestPow( + int64_t nPowMaxAdjustDown, + int64_t nPowMaxAdjustUp, + uint256 powLimit, + bool noRetargeting) { consensus.nPowMaxAdjustDown = nPowMaxAdjustDown; consensus.nPowMaxAdjustUp = nPowMaxAdjustUp; consensus.powLimit = powLimit; + consensus.fPowNoRetargeting = noRetargeting; } void SetRegTestZIP209Enabled() { @@ -626,7 +800,8 @@ std::string CChainParams::GetFoundersRewardAddressAtHeight(int nHeight) const { CScript CChainParams::GetFoundersRewardScriptAtHeight(int nHeight) const { assert(nHeight > 0 && nHeight <= consensus.GetLastFoundersRewardBlockHeight(nHeight)); - CTxDestination address = DecodeDestination(GetFoundersRewardAddressAtHeight(nHeight).c_str()); + KeyIO keyIO(*this); + CTxDestination address = keyIO.DecodeDestination(GetFoundersRewardAddressAtHeight(nHeight).c_str()); assert(IsValidDestination(address)); assert(IsScriptDestination(address)); CScriptID scriptID = boost::get(address); // address is a boost variant @@ -644,6 +819,16 @@ void UpdateNetworkUpgradeParameters(Consensus::UpgradeIndex idx, int nActivation regTestParams.UpdateNetworkUpgradeParameters(idx, nActivationHeight); } -void UpdateRegtestPow(int64_t nPowMaxAdjustDown, int64_t nPowMaxAdjustUp, uint256 powLimit) { - regTestParams.UpdateRegtestPow(nPowMaxAdjustDown, nPowMaxAdjustUp, powLimit); +void UpdateFundingStreamParameters(Consensus::FundingStreamIndex idx, Consensus::FundingStream fs) +{ + regTestParams.UpdateFundingStreamParameters(idx, fs); +} + +void UpdateRegtestPow( + int64_t nPowMaxAdjustDown, + int64_t nPowMaxAdjustUp, + uint256 powLimit, + bool noRetargeting) +{ + regTestParams.UpdateRegtestPow(nPowMaxAdjustDown, nPowMaxAdjustUp, powLimit, noRetargeting); } diff --git a/src/chainparams.h b/src/chainparams.h index 7bb38a6ae..26f015d79 100644 --- a/src/chainparams.h +++ b/src/chainparams.h @@ -32,6 +32,15 @@ struct CCheckpointData { double fTransactionsPerDay; }; +class CBaseKeyConstants : public KeyConstants { +public: + const std::vector& Base58Prefix(Base58Type type) const { return base58Prefixes[type]; } + const std::string& Bech32HRP(Bech32Type type) const { return bech32HRPs[type]; } + + std::vector base58Prefixes[KeyConstants::MAX_BASE58_TYPES]; + std::string bech32HRPs[KeyConstants::MAX_BECH32_TYPES]; +}; + /** * CChainParams defines various tweakable parameters of a given instance of the * Bitcoin system. There are three: the main network on which people trade goods @@ -39,33 +48,9 @@ struct CCheckpointData { * a regression test mode which is intended for private networks only. It has * minimal difficulty to ensure that blocks can be found instantly. */ -class CChainParams +class CChainParams: public KeyConstants { public: - enum Base58Type { - PUBKEY_ADDRESS, - SCRIPT_ADDRESS, - SECRET_KEY, - EXT_PUBLIC_KEY, - EXT_SECRET_KEY, - - ZCPAYMENT_ADDRRESS, - ZCSPENDING_KEY, - ZCVIEWING_KEY, - - MAX_BASE58_TYPES - }; - - enum Bech32Type { - SAPLING_PAYMENT_ADDRESS, - SAPLING_FULL_VIEWING_KEY, - SAPLING_INCOMING_VIEWING_KEY, - SAPLING_EXTENDED_SPEND_KEY, - SAPLING_EXTENDED_FVK, - - MAX_BECH32_TYPES - }; - const Consensus::Params& GetConsensus() const { return consensus; } const CMessageHeader::MessageStartChars& MessageStart() const { return pchMessageStart; } const std::vector& AlertKey() const { return vAlertPubKey; } @@ -93,8 +78,12 @@ public: /** Return the BIP70 network string (main, test or regtest) */ std::string NetworkIDString() const { return strNetworkID; } const std::vector& DNSSeeds() const { return vSeeds; } - const std::vector& Base58Prefix(Base58Type type) const { return base58Prefixes[type]; } - const std::string& Bech32HRP(Bech32Type type) const { return bech32HRPs[type]; } + const std::vector& Base58Prefix(Base58Type type) const { + return keyConstants.Base58Prefix(type); + } + const std::string& Bech32HRP(Bech32Type type) const { + return keyConstants.Bech32HRP(type); + } const std::vector& FixedSeeds() const { return vFixedSeeds; } const CCheckpointData& Checkpoints() const { return checkpointData; } /** Return the founder's reward address and script for a given block height */ @@ -113,8 +102,7 @@ protected: int nDefaultPort = 0; uint64_t nPruneAfterHeight = 0; std::vector vSeeds; - std::vector base58Prefixes[MAX_BASE58_TYPES]; - std::string bech32HRPs[MAX_BECH32_TYPES]; + CBaseKeyConstants keyConstants; std::string strNetworkID; std::string strCurrencyUnits; uint32_t bip44CoinType; @@ -156,6 +144,15 @@ void SelectParams(const std::string& chain); */ void UpdateNetworkUpgradeParameters(Consensus::UpgradeIndex idx, int nActivationHeight); -void UpdateRegtestPow(int64_t nPowMaxAdjustDown, int64_t nPowMaxAdjustUp, uint256 powLimit); +void UpdateRegtestPow( + int64_t nPowMaxAdjustDown, + int64_t nPowMaxAdjustUp, + uint256 powLimit, + bool noRetargeting); + +/** + * Allows modifying the regtest funding stream parameters. + */ +void UpdateFundingStreamParameters(Consensus::FundingStreamIndex idx, Consensus::FundingStream fs); #endif // BITCOIN_CHAINPARAMS_H diff --git a/src/checkpoints.cpp b/src/checkpoints.cpp index fbbb862cb..84c9c008b 100644 --- a/src/checkpoints.cpp +++ b/src/checkpoints.cpp @@ -78,4 +78,12 @@ namespace Checkpoints { return NULL; } + bool IsAncestorOfLastCheckpoint(const CCheckpointData& data, const CBlockIndex* pindex) + { + CBlockIndex *pindexLastCheckpoint = GetLastCheckpoint(data); + return pindexLastCheckpoint && pindexLastCheckpoint->GetAncestor(pindex->nHeight) == pindex; + } + + + } // namespace Checkpoints diff --git a/src/checkpoints.h b/src/checkpoints.h index b6501bc9a..b62b43280 100644 --- a/src/checkpoints.h +++ b/src/checkpoints.h @@ -27,6 +27,7 @@ CBlockIndex* GetLastCheckpoint(const CCheckpointData& data); double GuessVerificationProgress(const CCheckpointData& data, CBlockIndex* pindex, bool fSigchecks = true); +bool IsAncestorOfLastCheckpoint(const CCheckpointData& data, const CBlockIndex* pindex); } //namespace Checkpoints #endif // BITCOIN_CHECKPOINTS_H diff --git a/src/clientversion.h b/src/clientversion.h index 277d11643..8887908f7 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -15,9 +15,9 @@ */ //! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it -#define CLIENT_VERSION_MAJOR 3 -#define CLIENT_VERSION_MINOR 0 -#define CLIENT_VERSION_REVISION 0 +#define CLIENT_VERSION_MAJOR 4 +#define CLIENT_VERSION_MINOR 1 +#define CLIENT_VERSION_REVISION 1 #define CLIENT_VERSION_BUILD 50 //! Set to true for release, false for prerelease or test build diff --git a/src/coins.cpp b/src/coins.cpp index 2446b3c0b..e568e7674 100644 --- a/src/coins.cpp +++ b/src/coins.cpp @@ -11,6 +11,8 @@ #include +#include + /** * calculate number of bytes for the bitmask, and its number of non-zero bytes * each bit in the bitmask represents the availability of one output, but the @@ -467,7 +469,7 @@ void CCoinsViewCache::PushHistoryNode(uint32_t epochId, const HistoryNode node) // special case, it just goes into the cache right away historyCache.Extend(node); - if (librustzcash_mmr_hash_node(epochId, node.data(), historyCache.root.begin()) != 0) { + if (librustzcash_mmr_hash_node(epochId, &node, historyCache.root.begin()) != 0) { throw std::runtime_error("hashing node failed"); }; @@ -480,7 +482,7 @@ void CCoinsViewCache::PushHistoryNode(uint32_t epochId, const HistoryNode node) PreloadHistoryTree(epochId, false, entries, entry_indices); uint256 newRoot; - std::array appendBuf; + std::array appendBuf = {}; uint32_t appends = librustzcash_mmr_append( epochId, @@ -488,9 +490,9 @@ void CCoinsViewCache::PushHistoryNode(uint32_t epochId, const HistoryNode node) entry_indices.data(), entries.data(), entry_indices.size(), - node.data(), + &node, newRoot.begin(), - appendBuf.data()->data() + appendBuf.data() ); for (size_t i = 0; i < appends; i++) { @@ -506,6 +508,7 @@ void CCoinsViewCache::PopHistoryNode(uint32_t epochId) { switch (historyCache.length) { case 0: + { // Caller is generally not expected to pop from empty tree! Caller // should switch to previous epoch and pop history from there. @@ -517,22 +520,29 @@ void CCoinsViewCache::PopHistoryNode(uint32_t epochId) { // back. // Sensible action is to truncate the history cache: + } case 1: + { // Just resetting tree to empty historyCache.Truncate(0); historyCache.root = uint256(); return; + } case 2: + { // - A tree with one leaf has length 1. // - A tree with two leaves has length 3. throw std::runtime_error("a history tree cannot have two nodes"); + } case 3: + { + const HistoryNode tmpHistoryRoot = GetHistoryAt(epochId, 0); // After removing a leaf from a tree with two leaves, we are left // with a single-node tree, whose root is just the hash of that // node. if (librustzcash_mmr_hash_node( epochId, - GetHistoryAt(epochId, 0).data(), + &tmpHistoryRoot, newRoot.begin() ) != 0) { throw std::runtime_error("hashing node failed"); @@ -540,7 +550,9 @@ void CCoinsViewCache::PopHistoryNode(uint32_t epochId) { historyCache.Truncate(1); historyCache.root = newRoot; return; + } default: + { // This is a non-elementary pop, so use the full tree logic. std::vector entries; std::vector entry_indices; @@ -560,6 +572,7 @@ void CCoinsViewCache::PopHistoryNode(uint32_t epochId) { historyCache.Truncate(historyCache.length - numberOfDeletes); historyCache.root = newRoot; return; + } } } @@ -735,8 +748,7 @@ void BatchWriteNullifiers(CNullifiersMap &mapNullifiers, CNullifiersMap &cacheNu } } } - CNullifiersMap::iterator itOld = child_it++; - mapNullifiers.erase(itOld); + child_it = mapNullifiers.erase(child_it); } } @@ -768,8 +780,7 @@ void BatchWriteAnchors( } } - MapIterator itOld = child_it++; - mapAnchors.erase(itOld); + child_it = mapAnchors.erase(child_it); } } @@ -843,8 +854,7 @@ bool CCoinsViewCache::BatchWrite(CCoinsMap &mapCoins, } } } - CCoinsMap::iterator itOld = it++; - mapCoins.erase(itOld); + it = mapCoins.erase(it); } ::BatchWriteAnchors(mapSproutAnchors, cacheSproutAnchors, cachedCoinsUsage); @@ -906,7 +916,7 @@ CAmount CCoinsViewCache::GetValueIn(const CTransaction& tx) const return nResult; } -bool CCoinsViewCache::HaveShieldedRequirements(const CTransaction& tx) const +std::optional CCoinsViewCache::HaveShieldedRequirements(const CTransaction& tx) const { boost::unordered_map intermediates; @@ -917,7 +927,12 @@ bool CCoinsViewCache::HaveShieldedRequirements(const CTransaction& tx) const if (GetNullifier(nullifier, SPROUT)) { // If the nullifier is set, this transaction // double-spends! - return false; + auto txid = tx.GetHash().ToString(); + auto nf = nullifier.ToString(); + TracingWarn("consensus", "Sprout double-spend detected", + "txid", txid.c_str(), + "nf", nf.c_str()); + return UnsatisfiedShieldedReq::SproutDuplicateNullifier; } } @@ -926,7 +941,12 @@ bool CCoinsViewCache::HaveShieldedRequirements(const CTransaction& tx) const if (it != intermediates.end()) { tree = it->second; } else if (!GetSproutAnchorAt(joinsplit.anchor, tree)) { - return false; + auto txid = tx.GetHash().ToString(); + auto anchor = joinsplit.anchor.ToString(); + TracingWarn("consensus", "Transaction uses unknown Sprout anchor", + "txid", txid.c_str(), + "anchor", anchor.c_str()); + return UnsatisfiedShieldedReq::SproutUnknownAnchor; } BOOST_FOREACH(const uint256& commitment, joinsplit.commitments) @@ -938,16 +958,27 @@ bool CCoinsViewCache::HaveShieldedRequirements(const CTransaction& tx) const } for (const SpendDescription &spendDescription : tx.vShieldedSpend) { - if (GetNullifier(spendDescription.nullifier, SAPLING)) // Prevent double spends - return false; + if (GetNullifier(spendDescription.nullifier, SAPLING)) { // Prevent double spends + auto txid = tx.GetHash().ToString(); + auto nf = spendDescription.nullifier.ToString(); + TracingWarn("consensus", "Sapling double-spend detected", + "txid", txid.c_str(), + "nf", nf.c_str()); + return UnsatisfiedShieldedReq::SaplingDuplicateNullifier; + } SaplingMerkleTree tree; if (!GetSaplingAnchorAt(spendDescription.anchor, tree)) { - return false; + auto txid = tx.GetHash().ToString(); + auto anchor = spendDescription.anchor.ToString(); + TracingWarn("consensus", "Transaction uses unknown Sapling anchor", + "txid", txid.c_str(), + "anchor", anchor.c_str()); + return UnsatisfiedShieldedReq::SaplingUnknownAnchor; } } - return true; + return std::nullopt; } bool CCoinsViewCache::HaveInputs(const CTransaction& tx) const diff --git a/src/coins.h b/src/coins.h index 10999e8d9..67cba90e8 100644 --- a/src/coins.h +++ b/src/coins.h @@ -447,6 +447,14 @@ public: friend class CCoinsViewCache; }; +/** The set of shielded requirements that might be unsatisfied. */ +enum class UnsatisfiedShieldedReq { + SproutDuplicateNullifier, + SproutUnknownAnchor, + SaplingDuplicateNullifier, + SaplingUnknownAnchor, +}; + /** CCoinsView that adds a memory cache for transactions to another CCoinsView */ class CCoinsViewCache : public CCoinsViewBacked { @@ -566,7 +574,7 @@ public: bool HaveInputs(const CTransaction& tx) const; //! Check whether all joinsplit and sapling spend requirements (anchors/nullifiers) are satisfied - bool HaveShieldedRequirements(const CTransaction& tx) const; + std::optional HaveShieldedRequirements(const CTransaction& tx) const; //! Return priority of tx at height nHeight double GetPriority(const CTransaction &tx, int nHeight) const; diff --git a/src/consensus/consensus.h b/src/consensus/consensus.h index 847e5d53a..3452cd4b4 100644 --- a/src/consensus/consensus.h +++ b/src/consensus/consensus.h @@ -31,6 +31,8 @@ static const unsigned int MAX_TX_SIZE_AFTER_SAPLING = MAX_BLOCK_SIZE; static const int COINBASE_MATURITY = 100; /** The minimum value which is invalid for expiry height, used by CTransaction and CMutableTransaction */ static constexpr uint32_t TX_EXPIRY_HEIGHT_THRESHOLD = 500000000; +/** The number of blocks after Canopy activation after which v1 plaintexts will be rejected */ +static const unsigned int ZIP212_GRACE_PERIOD = 32256; /** Flags for LockTime() */ enum { diff --git a/src/consensus/funding.cpp b/src/consensus/funding.cpp new file mode 100644 index 000000000..918deae8d --- /dev/null +++ b/src/consensus/funding.cpp @@ -0,0 +1,94 @@ +// Copyright (c) 2020 The Zcash developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or https://www.opensource.org/licenses/mit-license.php . + +#include + +namespace Consensus +{ +/** + * General information about each funding stream. + * Ordered by Consensus::FundingStreamIndex. + */ +constexpr struct FSInfo FundingStreamInfo[Consensus::MAX_FUNDING_STREAMS] = { + { + .recipient = "Electric Coin Company", + .specification = "https://zips.z.cash/zip-0214", + .valueNumerator = 7, + .valueDenominator = 100, + }, + { + .recipient = "Zcash Foundation", + .specification = "https://zips.z.cash/zip-0214", + .valueNumerator = 5, + .valueDenominator = 100, + }, + { + .recipient = "Major Grants", + .specification = "https://zips.z.cash/zip-0214", + .valueNumerator = 8, + .valueDenominator = 100, + } +}; + +static constexpr bool validateFundingStreamInfo(uint32_t idx) { + return (idx >= Consensus::MAX_FUNDING_STREAMS || ( + FundingStreamInfo[idx].valueNumerator < FundingStreamInfo[idx].valueDenominator && + FundingStreamInfo[idx].valueNumerator < (INT64_MAX / MAX_MONEY) && + validateFundingStreamInfo(idx + 1))); +} +static_assert( + validateFundingStreamInfo(Consensus::FIRST_FUNDING_STREAM), + "Invalid FundingStreamInfo"); + +CAmount FSInfo::Value(CAmount blockSubsidy) const +{ + // Integer division is floor division for nonnegative integers in C++ + return CAmount((blockSubsidy * valueNumerator) / valueDenominator); +} + +std::set GetActiveFundingStreamElements( + int nHeight, + CAmount blockSubsidy, + const Consensus::Params& params) +{ + std::set> requiredElements; + + // Funding streams are disabled if Canopy is not active. + if (params.NetworkUpgradeActive(nHeight, Consensus::UPGRADE_CANOPY)) { + for (uint32_t idx = Consensus::FIRST_FUNDING_STREAM; idx < Consensus::MAX_FUNDING_STREAMS; idx++) { + // The following indexed access is safe as Consensus::MAX_FUNDING_STREAMS is used + // in the definition of vFundingStreams. + auto fs = params.vFundingStreams[idx]; + // Funding period is [startHeight, endHeight) + if (fs && nHeight >= fs.get().GetStartHeight() && nHeight < fs.get().GetEndHeight()) { + requiredElements.insert(std::make_pair( + fs.get().RecipientAddress(params, nHeight), + FundingStreamInfo[idx].Value(blockSubsidy))); + } + } + } + + return requiredElements; +}; + +std::vector GetActiveFundingStreams( + int nHeight, + const Consensus::Params& params) +{ + std::vector activeStreams; + + // Funding streams are disabled if Canopy is not active. + if (params.NetworkUpgradeActive(nHeight, Consensus::UPGRADE_CANOPY)) { + for (uint32_t idx = Consensus::FIRST_FUNDING_STREAM; idx < Consensus::MAX_FUNDING_STREAMS; idx++) { + auto fs = params.vFundingStreams[idx]; + if (fs && nHeight >= fs.get().GetStartHeight() && nHeight < fs.get().GetEndHeight()) { + activeStreams.push_back(FundingStreamInfo[idx]); + } + } + } + + return activeStreams; +}; + +} // namespace Consensus diff --git a/src/consensus/funding.h b/src/consensus/funding.h new file mode 100644 index 000000000..b2dc1cd6c --- /dev/null +++ b/src/consensus/funding.h @@ -0,0 +1,46 @@ +// Copyright (c) 2020 The Zcash developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or https://www.opensource.org/licenses/mit-license.php . + +#ifndef ZCASH_CONSENSUS_FUNDING_H +#define ZCASH_CONSENSUS_FUNDING_H + +#include +#include + +#include + +namespace Consensus +{ + +struct FSInfo { + const char* recipient; + const char* specification; + uint64_t valueNumerator; + uint64_t valueDenominator; + + /** + * Returns the inherent value of this funding stream. + * + * For the active funding streams at a given height, use + * GetActiveFundingStreams() or GetActiveFundingStreamElements(). + */ + CAmount Value(CAmount blockSubsidy) const; +}; + +extern const struct FSInfo FundingStreamInfo[]; + +typedef std::pair FundingStreamElement; + +std::set GetActiveFundingStreamElements( + int nHeight, + CAmount blockSubsidy, + const Consensus::Params& params); + +std::vector GetActiveFundingStreams( + int nHeight, + const Consensus::Params& params); + +} // namespace Consensus + +#endif // ZCASH_CONSENSUS_FUNDING_H diff --git a/src/consensus/params.cpp b/src/consensus/params.cpp index 076866add..a6525f4b7 100644 --- a/src/consensus/params.cpp +++ b/src/consensus/params.cpp @@ -4,6 +4,9 @@ #include "params.h" +#include +#include +#include