Upgrade zcash_script to zcashd v5.5.0 (#84)

* Update dependencies to match zcashd v5.5.0

* Update dependencies to match Zebra main branch

* Update release instructions

* Add module docs for the build script to avoid warnings

* Update bridge file list to match the latest zcashd

* Ignore some emacs temporary files

* Standardise directory include paths in Cargo.toml

* Add extra info to cxx_gen errors

* Add additional Rust dependencies needed to compile

* Ignore some expected clippy lints

* Silence a C compiler macro redefinition warning

* Standardise directory paths in build.rs

* fix cxxbridge code generation

* Update Cargo.lock

* Use include!() for bridge.rs

* Add a changelog entry for the next release

* Fix a warning by adding docs for the crate

* Remove previous depend/zcash

* Squashed 'depend/zcash/' content from commit eb80047476

git-subtree-dir: depend/zcash
git-subtree-split: eb80047476e9c0db3524f647d412faf8d4a584ee

* Update depend/zcash to v5.5.0

```sh
git subtree add -P depend/zcash https://github.com/zcash/zcash.git v5.5.0 --squash
git rm depend/zcash/Cargo.toml
```

---------

Co-authored-by: Conrado Gouvea <conradoplg@gmail.com>
This commit is contained in:
teor 2023-05-05 22:55:41 +10:00 committed by GitHub
parent 27f9e77549
commit 5cfaef7bbd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
325 changed files with 14697 additions and 9838 deletions

3
.gitignore vendored
View File

@ -1,4 +1,5 @@
.idea
target
*.iml
Cargo.lock
Cargo.lock
.\#*

View File

@ -8,6 +8,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] - ReleaseDate
## [0.1.12] - 2023-05-03
### Changed
- Update `depend/zcash` to version 5.5.0 which includes updated dependencies
- This includes additional `zcashd` C++ and Rust code, and its dependencies
- Fix code generation C++ header paths to avoid conflicts
- Update other dependencies to match Zebra
### Fixed
- Improve error reporting in `build.rs`
## [0.1.11] - 2023-02-24
### Changed

View File

@ -31,10 +31,10 @@ include = [
"/depend/zcash/src/script/interpreter.cpp",
"/depend/zcash/src/script/script.cpp",
"/depend/zcash/src/script/script_error.cpp",
"/depend/zcash/src",
"/depend/zcash/src/",
"/depend/zcash/src/rust/include/",
"/depend/zcash/src/secp256k1/include",
"/depend/zcash/src/secp256k1",
"/depend/zcash/src/secp256k1/include/",
"/depend/zcash/src/secp256k1/",
"/depend/zcash/src/support/cleanse.cpp",
"/depend/zcash/src/support/cleanse.h",
"/depend/zcash/src/rust/gen/",
@ -50,16 +50,28 @@ external-secp = []
[dependencies]
# All these dependencies must match the versions in:
# https://github.com/zcash/zcash/blob/<git subtree version>/Cargo.toml
bellman = "0.14"
blake2b_simd = "1"
cxx = { version = "=1.0.83", features = ["c++17"] }
bls12_381 = "0.8"
byteorder = "1"
crossbeam-channel = "0.5"
cxx = { version = "=1.0.94", features = ["c++17"] }
group = "0.13"
incrementalmerkletree = "0.3"
jubjub = "0.10"
libc = "0.2"
memuse = "0.2"
orchard = "0.3"
metrics = "0.20"
orchard = "0.4"
rand_core = "0.6"
rayon = "1.5"
subtle = "2.2"
tracing = "0.1"
zcash_address = "0.2"
zcash_encoding = "0.2"
zcash_note_encryption = "0.2"
zcash_primitives = { version = "0.9.1", features = ["transparent-inputs"] }
zcash_note_encryption = "0.3"
zcash_primitives = { version = "0.11", features = ["temporary-zcashd", "transparent-inputs"] }
zcash_proofs = "0.11"
[build-dependencies]
# The `bindgen` dependency should automatically upgrade to match the version used by zebra-state's `rocksdb` dependency in:
@ -71,10 +83,10 @@ bindgen = ">= 0.64.0"
# These dependencies are shared with a lot of other Zebra dependencies,
# so they are configured to automatically upgrade to match Zebra.
# But we try to use the latest versions here, to catch any bugs in `zcash_script`'s CI.
cc = { version = "1.0.73", features = ["parallel"] }
cc = { version = "1.0.79", features = ["parallel"] }
# Treat minor versions with a zero major version as compatible (cargo doesn't by default).
cxx-gen = ">= 0.7.74"
syn = { version = "1.0.104", features = ["full", "printing"] }
cxx-gen = ">= 0.7.93"
syn = { version = "1.0.109", features = ["full", "printing"] }
[dev-dependencies]
# These dependencies are shared with a lot of other Zebra dependencies.

View File

@ -22,16 +22,17 @@ to include a lot of other stuff e.g. the orchard library.
### Updating this crate
1. Update `depend/zcash` with the latest tagged version of `zcashd`
1. Update `depend/zcash` with the latest tagged version of `zcashd`, using the instructions below
2. Update `Cargo.toml` versions to match the versions used by the latest tagged version of `zcashd`, and its dependencies
3. For dependencies that are shared with Zebra (but not `zcashd`), match the latest version in Zebra's [Cargo.lock](https://github.com/ZcashFoundation/zebra/blob/main/Cargo.lock):
- use `cargo tree --invert <crate>` to see if the crate is from `zcash_script` or another dependency
- see the list in [Cargo.toml](https://github.com/ZcashFoundation/zcash_script/blob/master/Cargo.toml#L69)
4. For new dependencies with a leading zero in their version (`0.x.y`), use a `>=` dependency [to make them automatically upgrade to match Zebra's dependencies](https://doc.rust-lang.org/cargo/reference/resolver.html#semver-compatibility)
5. Check all open PRs to see if they can be merged before the release
6. Run `cargo-release` with `--no-publish` to commit any automatic changes
6. Run `cargo release patch` to commit the release version bump (but not actually publish)
7. Open a `zcash_script` PR with the changes, get it reviewed, and wait for CI to pass
8. Publish a new release
8. Publish a new release using `cargo release --execute patch`
9. Check the release tag was pushed to https://github.com/ZcashFoundation/zcash_script/tags
### Updating `depend/zcash`

View File

@ -1,3 +1,5 @@
//! Build script for zcash_script.
use std::{env, fmt, fs, io::Read, path::PathBuf};
use syn::__private::ToTokens;
@ -62,23 +64,19 @@ fn bindgen_headers() -> Result<()> {
/// (This is in contrast to zcash which generates in `depend/zcash/src/rust/gen/`)
fn gen_cxxbridge() -> Result<()> {
let out_path = env::var("OUT_DIR").map_err(Error::Env)?;
let out_path = PathBuf::from(out_path).join("include");
let out_path = PathBuf::from(out_path).join("gen");
let src_out_path = PathBuf::from(&out_path).join("src");
let header_out_path = PathBuf::from(&out_path).join("include").join("rust");
// These must match `CXXBRIDGE_RS` in depend/zcash/src/Makefile.am
let filenames = [
"blake2b",
"bundlecache",
"equihash",
"orchard_bundle",
"sapling",
"wallet_scanner",
];
let filenames = ["blake2b", "ed25519", "equihash", "streams", "bridge"];
// The output folder must exist
fs::create_dir_all(out_path.join("rust")).unwrap();
fs::create_dir_all(&src_out_path).unwrap();
fs::create_dir_all(&header_out_path).unwrap();
// Generate the generic header file
fs::write(out_path.join("rust/cxx.h"), cxx_gen::HEADER).unwrap();
fs::write(header_out_path.join("cxx.h"), cxx_gen::HEADER).unwrap();
// Generate the source and header for each bridge file
for filename in filenames {
@ -99,11 +97,19 @@ fn gen_cxxbridge() -> Result<()> {
path: "rust/cxx.h".to_string(),
kind: cxx_gen::IncludeKind::Quoted,
});
let output = cxx_gen::generate_header_and_cc(token_stream, &opt).unwrap();
let output = cxx_gen::generate_header_and_cc(token_stream, &opt).unwrap_or_else(|err| {
panic!(
"invalid bridge file {filename}: {err}. Try updating `filenames` to match zcashd"
)
});
fs::write(out_path.join(format!("rust/{}.h", filename)), output.header).unwrap();
fs::write(
out_path.join(format!("rust/{}.c", filename)),
header_out_path.join(format!("{}.h", filename)),
output.header,
)
.unwrap();
fs::write(
src_out_path.join(format!("{}.c", filename)),
output.implementation,
)
.unwrap();
@ -115,8 +121,8 @@ fn main() -> Result<()> {
bindgen_headers()?;
gen_cxxbridge()?;
let include_path = env::var("OUT_DIR").map_err(Error::Env)?;
let include_path = PathBuf::from(include_path).join("include");
let gen_path = env::var("OUT_DIR").map_err(Error::Env)?;
let gen_path = PathBuf::from(gen_path).join("gen");
let target = env::var("TARGET").expect("TARGET was not set");
let mut base_config = cc::Build::new();
@ -124,10 +130,10 @@ fn main() -> Result<()> {
language_std(&mut base_config, "c++17");
base_config
.include("depend/zcash/src")
.include("depend/zcash/src/")
.include("depend/zcash/src/rust/include/")
.include("depend/zcash/src/secp256k1/include")
.include(&include_path)
.include("depend/zcash/src/secp256k1/include/")
.include(&gen_path.join("include"))
.flag_if_supported("-Wno-implicit-fallthrough")
.flag_if_supported("-Wno-catch-value")
.flag_if_supported("-Wno-reorder")
@ -156,6 +162,7 @@ fn main() -> Result<()> {
.file("depend/zcash/src/uint256.cpp")
.file("depend/zcash/src/pubkey.cpp")
.file("depend/zcash/src/hash.cpp")
.file("depend/zcash/src/streams_rust.cpp")
.file("depend/zcash/src/primitives/transaction.cpp")
.file("depend/zcash/src/crypto/ripemd160.cpp")
.file("depend/zcash/src/crypto/sha1.cpp")
@ -166,7 +173,11 @@ fn main() -> Result<()> {
.file("depend/zcash/src/script/script.cpp")
.file("depend/zcash/src/script/script_error.cpp")
.file("depend/zcash/src/support/cleanse.cpp")
.file(include_path.join("rust/blake2b.c"))
// A subset of the files generated by gen_cxxbridge
// which are required by zcash_script.
.file(gen_path.join("src/blake2b.c"))
.file(gen_path.join("src/bridge.c"))
.file(gen_path.join("src/streams.c"))
.compile("libzcash_script.a");
Ok(())
@ -181,7 +192,8 @@ fn build_secp256k1() {
// Define configuration constants
build
.define("SECP256K1_BUILD", "1")
// This matches the #define in depend/zcash/src/secp256k1/src/secp256k1.c
.define("SECP256K1_BUILD", "")
.define("USE_NUM_NONE", "1")
.define("USE_FIELD_INV_BUILTIN", "1")
.define("USE_SCALAR_INV_BUILTIN", "1")

View File

@ -12,3 +12,6 @@ indent_size = 4
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[{Makefile*, *.mk}]
indent_style = tab

View File

@ -11,20 +11,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Install cargo-vet
uses: actions-rs/cargo@v1
with:
command: install
args: cargo-vet
- name: Run cargo vet --locked
uses: actions-rs/cargo@v1
with:
command: vet
args: --locked
- uses: dtolnay/rust-toolchain@stable
id: toolchain
- run: rustup override set ${{steps.toolchain.outputs.name}}
- run: cargo install cargo-vet --version ~0.6
- run: cargo vet --locked

View File

@ -21,10 +21,7 @@ jobs:
mdbook-version: 'latest'
- name: Install mdbook-katex
uses: actions-rs/cargo@v1
with:
command: install
args: mdbook-katex
run: cargo install mdbook-katex
- name: Build zcashd book
run: mdbook build doc/book/

112
depend/zcash/.github/workflows/build.yml vendored Normal file
View File

@ -0,0 +1,112 @@
name: Build
on: [push, pull_request]
jobs:
build:
name: Tier ${{ matrix.tier }} platform ${{ matrix.platform }}
runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.tier == 3 }}
strategy:
matrix:
include:
- name: ubuntu-20.04
tier: 1
platform: Ubuntu 20.04
os: ubuntu-20.04
- name: macos-11
tier: 3
platform: macOS Big Sur 11
os: macos-11
brew_deps: >
autoconf
automake
coreutils
libtool
pkgconfig
- name: mingw32
tier: 3
platform: Windows (64-bit MinGW)
os: ubuntu-latest
cross_deps: >
mingw-w64
host: HOST=x86_64-w64-mingw32
- name: aarch64-linux
tier: 3
platform: ARM64 Linux
os: ubuntu-latest
cross_deps: >
g++-aarch64-linux-gnu
host: HOST=aarch64-linux-gnu
steps:
- uses: actions/checkout@v3
- name: Install Homebrew build dependencies
if: matrix.brew_deps != ''
run: brew install ${{ matrix.brew_deps }}
- name: Install cross-compilation build dependencies
if: matrix.cross_deps != ''
run: sudo apt install ${{ matrix.cross_deps }}
- name: Configure MinGW to use POSIX variant
if: matrix.name == 'mingw32'
run: |
sudo update-alternatives --set x86_64-w64-mingw32-gcc $(update-alternatives --query x86_64-w64-mingw32-gcc | grep Alternative | grep posix | cut -d' ' -f2)
sudo update-alternatives --set x86_64-w64-mingw32-g++ $(update-alternatives --query x86_64-w64-mingw32-g++ | grep Alternative | grep posix | cut -d' ' -f2)
- name: Cache built dependencies
uses: actions/cache@v3
with:
path: depends/built
key: ${{ matrix.name }}-built-${{ hashFiles('depends/Makefile', 'depends/funcs.mk') }}-${{ hashFiles('depends/packages/*.mk', 'depends/patches/**/*') }}
restore-keys: |
${{ matrix.name }}-built-${{ hashFiles('depends/Makefile', 'depends/funcs.mk') }}-
- name: Prepare ccache timestamp
id: ccache_cache_timestamp
shell: bash
run: echo "timestamp=$(date +'%Y-%m-%d-%H;%M;%S')" >> "$GITHUB_OUTPUT"
- name: Cache ccache files
uses: actions/cache@v3
with:
path: ~/.cache/ccache
key: ${{ matrix.name }}-ccache-${{ steps.ccache_cache_timestamp.outputs.timestamp }}
restore-keys: |
${{ matrix.name }}-ccache-
- name: Build zcashd
id: build
run: >
${{ matrix.host }}
./zcutil/build.sh
-j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
- name: Build zcashd with libraries enabled
if: ${{ always() && steps.build.outcome == 'success' }}
run: >
CONFIGURE_FLAGS="--with-libs"
${{ matrix.host }}
./zcutil/build.sh
-j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
- name: Build zcashd with wallet disabled
if: ${{ always() && steps.build.outcome == 'success' }}
run: >
CONFIGURE_FLAGS="--disable-wallet"
${{ matrix.host }}
./zcutil/build.sh
-j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
- name: Build zcashd with mining disabled
if: ${{ always() && steps.build.outcome == 'success' }}
run: >
CONFIGURE_FLAGS="--disable-mining"
${{ matrix.host }}
./zcutil/build.sh
-j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"

View File

@ -0,0 +1,45 @@
name: Checks
on: pull_request_target
permissions:
contents: read
issues: write
pull-requests: write
jobs:
recent-base:
name: Branch base is sufficiently recent
runs-on: ubuntu-latest
steps:
- name: Check out the base branch
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Check out the PR branch
uses: actions/checkout@v3
with:
ref: ${{ github.head_ref }}
fetch-depth: 0
- name: Ensure branch contains necessary commits for Tekton CI
id: tekton
# https://github.com/zcash/zcash/pull/6358
run: git merge-base --is-ancestor 267ddf8efe36cc799c4c31772a8883ea332ef55b ${{ github.head_ref }}
- name: Tell PR author if they need to rebase
if: failure() && steps.tekton.outcome == 'failure'
run: echo "::error::Branch needs to be rebased so that Tekton CI can run"
- name: Avoid running Tekton CI if it would provably fail
if: failure() && steps.tekton.outcome == 'failure'
uses: actions/github-script@v6
with:
script: |
github.rest.issues.removeLabel({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
name: "safe-to-build",
})

View File

@ -75,19 +75,14 @@ jobs:
if: always()
rust-clippy:
name: Clippy (1.64.0)
name: Clippy (MSRV)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.64.0
components: clippy
override: true
- name: Run clippy
uses: actions-rs/clippy-check@v1
with:
name: Clippy (1.64.0)
name: Clippy (MSRV)
token: ${{ secrets.GITHUB_TOKEN }}
args: --all-features --all-targets -- -D warnings
@ -96,12 +91,4 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.64.0
override: true
- run: rustup component add rustfmt
- uses: actions-rs/cargo@v1
with:
command: fmt
args: -- --check
- run: cargo fmt -- --check

800
depend/zcash/Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
Building Zcash
See the Zcash documentation wiki (https://zcash.readthedocs.io/en/latest/rtd_pages/user_guide.html) for instructions on building zcashd,
See the Zcash documentation wiki (https://zcash.readthedocs.io/en/latest/rtd_pages/zcashd.html) for instructions on building zcashd,
the intended-for-services, no-graphical-interface, reference
implementation of Zcash.

View File

@ -15,8 +15,6 @@ SUBDIRS += doc/man
endif
.PHONY: deploy FORCE rpc-tests
GZIP_ENV="-9n"
if BUILD_BITCOIN_LIBS
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libzcash_script.pc

View File

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

View File

@ -52,7 +52,7 @@ We have set up agreements with the following neighboring projects to share vulne
Specifically, we have agreed to engage in responsible disclosures for security issues affecting this repository with the following contacts:
- Zcash Foundation https://github.com/ZcashFoundation/zebra/security/policy
- Horizen security@horizen.com via PGP
- Horizen security@horizen.io https://github.com/HorizenOfficial/zen/blob/master/SECURITY.md
- Komodo ca333@komodoplatform.com via PGP
- BitcoinABC https://github.com/Bitcoin-ABC/bitcoin-abc/blob/master/DISCLOSURE_POLICY.md

View File

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

View File

@ -1,3 +1,39 @@
zcash (5.5.0) stable; urgency=medium
* 5.5.0 release.
-- Electric Coin Company <team@electriccoin.co> Thu, 27 Apr 2023 16:17:00 -0600
zcash (5.5.0~rc3) stable; urgency=medium
* 5.5.0-rc3 release.
-- Electric Coin Company <team@electriccoin.co> Wed, 26 Apr 2023 22:41:41 -0600
zcash (5.5.0~rc2) stable; urgency=medium
* 5.5.0-rc2 release.
-- Electric Coin Company <team@electriccoin.co> Tue, 25 Apr 2023 18:30:53 +0000
zcash (5.5.0~rc1) stable; urgency=medium
* 5.5.0-rc1 release.
-- Electric Coin Company <team@electriccoin.co> Thu, 20 Apr 2023 22:19:50 +0000
zcash (5.4.2) stable; urgency=high
* 5.4.2 release.
-- Electric Coin Company <team@electriccoin.co> Mon, 20 Feb 2023 20:04:31 -0700
zcash (5.4.1) stable; urgency=medium
* 5.4.1 release.
-- Electric Coin Company <team@electriccoin.co> Mon, 13 Feb 2023 18:10:07 +0000
zcash (5.4.0) stable; urgency=medium
* 5.4.0 release.
@ -28,6 +64,12 @@ zcash (5.4.0~rc1) stable; urgency=medium
-- Electric Coin Company <team@electriccoin.co> Thu, 19 Jan 2023 22:57:59 +0000
zcash (5.3.3) stable; urgency=high
* 5.3.3 release.
-- Electric Coin Company <team@electriccoin.co> Mon, 20 Feb 2023 19:47:26 -0700
zcash (5.3.2) stable; urgency=medium
* 5.3.2 release.

View File

@ -108,6 +108,7 @@ Copyright: 2014-2015, Brian Davis
License: BSD-3-clause-Tobias-Klein
Files: depends/sources/libsodium-*.tar.gz
depends/patches/libsodium/*
Copyright: 2013-2022 Frank Denis
License: ISC
@ -122,6 +123,7 @@ Comment: This entry is specifically for the libc++ library. The libc++ Authors
are listed in https://github.com/llvm/llvm-project/blob/main/libcxx/CREDITS.TXT .
Files: depends/sources/db-*.tar.gz
depends/patches/bdb/*
Copyright: 1990, 2016 Oracle and/or its affiliates;
1990, 1993, 1994, 1995 The Regents of the University of California;
1995, 1996 The President and Fellows of Harvard University;
@ -129,6 +131,7 @@ Copyright: 1990, 2016 Oracle and/or its affiliates;
License: BDB
Files: depends/sources/libevent-*.tar.gz
depends/patches/libevent/*
Copyright: 2000-2007 Niels Provos <provos@citi.umich.edu>
2007-2012 Niels Provos and Nick Mathewson
2000 Dug Song <dugsong@monkey.org>
@ -141,6 +144,7 @@ Copyright: 2000-2007 Niels Provos <provos@citi.umich.edu>
License: BSD-3-clause
Files: depends/sources/zeromq-*.tar.gz
depends/patches/zeromq/*
Copyright: 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
2007-2014 iMatix Corporation
2009-2011 250bpm s.r.o.
@ -161,7 +165,8 @@ Copyright: 2006 Nemanja Trifunovic
License: Boost-Software-License-1.0
Files: depends/sources/tl-expected-*.tar.gz
Copyright: 2017-2021 Sy Brand <simonrbrand@gmail.com> (@TartanLlama), 2022 The Zcash developers
depends/patches/tl_expected/*
Copyright: 2017-2022 Sy Brand <tartanllama@gmail.com> (@TartanLlama), 2022 The Zcash developers
License: CC0-1.0
Comment: Other contributors are Simon Truscott (@bobbleclank), Kévin Alexandre Boissonneault (@KABoissonneault),
and Björn Fahller (@rollbear).

View File

@ -2,7 +2,9 @@
## zcash.conf configuration file. Lines beginning with # are comments.
##
# Network-related settings:
##
## Network-related settings
##
# Run on the test network instead of the real zcash network.
#testnet=0
@ -56,9 +58,9 @@
# Maximum number of inbound+outbound connections.
#maxconnections=
#
# JSON-RPC options (for controlling a running Zcash/zcashd process)
#
##
## JSON-RPC options (for controlling a running Zcash/zcashd process)
##
# server=1 tells zcashd to accept JSON-RPC commands (set as default if not specified)
#server=1
@ -72,7 +74,7 @@
#rpcpassword=YourSuperGreatPasswordNumber_DO_NOT_USE_THIS_OR_YOU_WILL_GET_ROBBED_385593
# How many seconds zcash will wait for a complete RPC HTTP request.
# after the HTTP connection is established.
# after the HTTP connection is established.
#rpcclienttimeout=30
# By default, only RPC connections from localhost are allowed.
@ -80,7 +82,7 @@
# either as a single IPv4/IPv6 or with a subnet specification.
# NOTE: opening up the RPC port to hosts outside your local trusted network is NOT RECOMMENDED,
# because the rpcpassword is transmitted over the network unencrypted and also because anyone
# because the rpcpassword is transmitted over the network unencrypted and also because anyone
# that can authenticate on the RPC port can steal your keys + take over the account running zcashd
# For more information see https://github.com/zcash/zcash/issues/1497
@ -91,22 +93,32 @@
# Listen for RPC connections on this TCP port:
#rpcport=8232
# You can use Zcash or zcashd to send commands to Zcash/zcashd
# running on another host using this option:
# You can use zcash-cli to send commands to zcashd running on another host using
# this option:
#rpcconnect=127.0.0.1
# Transaction Fee
##
## Transaction creation options for 'z_*' APIs.
##
# Send transactions as zero-fee transactions if possible (default: 0)
#sendfreetransactions=0
# Set the maximum number of Orchard actions permitted in a transaction.
#orchardactionlimit=50
# Create transactions that have enough fees (or priority) so they are likely to # begin confirmation within n blocks (default: 1).
# This setting is overridden by the -paytxfee option.
#txconfirmtarget=n
##
## Transaction creation options for legacy APIs (sendtoaddress, sendmany,
## and fundrawtransaction).
##
# Miscellaneous options
# The preferred fee rate (in ZEC per 1000 bytes) used for transactions
# created by legacy APIs. If the transaction is less than 1000 bytes then
# the fee rate is applied as though it were 1000 bytes.
#paytxfee=<amt>
# Enable attempt to mine zcash.
##
## Miscellaneous options
##
# Enable attempt to CPU-mine zcash. This is only useful on testnet.
#gen=0
# Set the number of threads to be used for mining zcash (-1 = all cores).
@ -119,11 +131,3 @@
# Pre-generate this many public/private key pairs, so wallet backups will be valid for
# both prior transactions and several dozen future transactions.
#keypool=100
# Pay an optional transaction fee every time you send zcash. Transactions with fees
# are more likely than free transactions to be included in generated blocks, so may
# be validated sooner. This setting does not affect private transactions created with
# 'z_sendmany'.
#paytxfee=0.00

View File

@ -45,4 +45,3 @@ update_clang_hash amd64-unknown-freebsd12 freebsd
# For Windows cross-compilation
# update_libcxx_msys2_hash LIBCXX_LIBRARY MAKEFILE_HASH_SUFFIX
update_libcxx_msys2_hash libc++ sha256_hash
update_libcxx_msys2_hash libc++abi libcxxabi_sha256_hash

View File

@ -1,5 +1,5 @@
---
name: "zcash-5.4.0"
name: "zcash-5.5.0"
enable_cache: true
distro: "debian"
suites:

View File

@ -1,5 +1,5 @@
---
name: "zcash-5.4.0"
name: "zcash-5.5.0"
enable_cache: true
distro: "debian"
suites:

View File

@ -0,0 +1,52 @@
version: "3.7"
services:
grafana:
image: grafana/grafana
container_name: zcashd-grafana
depends_on:
- prometheus
environment:
GF_SERVER_HTTP_PORT: "3030"
ports:
- "3030:3030"
volumes:
- type: volume
source: grafana-storage
target: /var/lib/grafana
- type: bind
source: ./grafana/grafana.ini
target: /etc/grafana/grafana.ini
- type: bind
source: ./grafana/provisioning
target: /etc/grafana/provisioning
- type: bind
source: ./grafana/dashboards
target: /etc/grafana/dashboards
networks:
- zcashd-metrics
prometheus:
image: prom/prometheus
container_name: zcashd-prometheus
ports:
- "9090:9090"
volumes:
- type: volume
source: prometheus-storage
target: /prometheus
- type: bind
source: ./prometheus.yaml
target: /etc/prometheus/prometheus.yml
read_only: true
networks:
- zcashd-metrics
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
grafana-storage:
prometheus-storage:
networks:
zcashd-metrics:

View File

@ -0,0 +1,911 @@
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": {
"type": "datasource",
"uid": "grafana"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"target": {
"limit": 100,
"matchAny": false,
"tags": [],
"type": "dashboard"
},
"type": "dashboard"
}
]
},
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"id": 2,
"links": [],
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 0
},
"id": 2,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "9.1.6",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"editorMode": "code",
"expr": "zcash_chain_verified_block_height",
"interval": "",
"legendFormat": "Chain tip",
"range": true,
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"editorMode": "builder",
"expr": "zcashd_wallet_synced_block_height",
"hide": false,
"legendFormat": "Wallet",
"range": true,
"refId": "B"
}
],
"title": "Block height",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"log": 2,
"type": "log"
},
"showPoints": "never",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "s"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 0
},
"id": 12,
"interval": "",
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "none"
}
},
"pluginVersion": "9.1.6",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"expr": "zcash_chain_verified_block_seconds",
"format": "time_series",
"interval": "",
"legendFormat": "{{quantile}}",
"refId": "A"
}
],
"title": "Block verification",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": [
{
"matcher": {
"id": "byFrameRefID",
"options": "Heap Usage"
},
"properties": [
{
"id": "custom.axisPlacement",
"value": "right"
},
{
"id": "unit",
"value": "bytes"
}
]
}
]
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 8
},
"id": 16,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "single",
"sort": "none"
}
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"editorMode": "builder",
"expr": "zcashd_wallet_batchscanner_size_transactions",
"hide": false,
"legendFormat": "Transactions",
"range": true,
"refId": "Transactions"
},
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"editorMode": "builder",
"expr": "avg_over_time(zcashd_wallet_batchscanner_usage_byes[$__interval])",
"hide": false,
"legendFormat": "Heap usage",
"range": true,
"refId": "Heap Usage"
},
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"editorMode": "builder",
"expr": "rate(zcashd_wallet_batchscanner_outputs_scanned[$__rate_interval])",
"legendFormat": "{{kind}}",
"range": true,
"refId": "Output Rate"
}
],
"title": "Wallet batch scanner",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"decimals": 0,
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "txs"
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "Size"
},
"properties": [
{
"id": "unit",
"value": "bytes"
}
]
},
{
"matcher": {
"id": "byName",
"options": "Usage"
},
"properties": [
{
"id": "unit",
"value": "bytes"
}
]
}
]
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 8
},
"id": 10,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "none"
}
},
"pluginVersion": "9.1.6",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"expr": "zcash_mempool_size_transactions",
"interval": "",
"legendFormat": "Count",
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"expr": "zcash_mempool_size_bytes",
"interval": "",
"legendFormat": "Size",
"refId": "B"
},
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"expr": "zcash_mempool_usage_bytes",
"interval": "",
"legendFormat": "Usage",
"refId": "C"
}
],
"title": "Mempool",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "binBps"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 16
},
"id": 4,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "none"
}
},
"pluginVersion": "9.1.6",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"expr": "rate(zcash_net_in_bytes[5m])",
"interval": "",
"legendFormat": "{{command}}",
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"expr": "rate(zcash_net_in_bytes_total[5m])",
"interval": "",
"legendFormat": "Total",
"refId": "B"
}
],
"title": "Inbound messages",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "ZEC"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 16
},
"id": 8,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "none"
}
},
"pluginVersion": "9.1.6",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"expr": "zcash_pool_value_zatoshis/100000000",
"interval": "",
"legendFormat": "{{name}}",
"refId": "A"
}
],
"title": "Shielded pools",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "binBps"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 24
},
"id": 6,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "none"
}
},
"pluginVersion": "9.1.6",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"expr": "rate(zcash_net_out_bytes[5m])",
"interval": "",
"legendFormat": "{{command}}",
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"expr": "rate(zcash_net_out_bytes_total[5m])",
"interval": "",
"legendFormat": "Total",
"refId": "B"
}
],
"title": "Outbound messages",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 24
},
"id": 14,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "none"
}
},
"pluginVersion": "9.1.6",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "T9XAoUn4k"
},
"expr": "zcash_pool_notes_created",
"interval": "",
"legendFormat": "{{name}}",
"refId": "A"
}
],
"title": "Commitment tree sizes",
"type": "timeseries"
}
],
"refresh": "5s",
"schemaVersion": 37,
"style": "dark",
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-5m",
"to": "now"
},
"timepicker": {},
"timezone": "",
"title": "zcashd metrics",
"uid": "U4U58t-Gk",
"version": 1,
"weekStart": ""
}

View File

@ -0,0 +1,2 @@
[paths]
provisioning = /etc/grafana/provisioning

View File

@ -0,0 +1,18 @@
---
apiVersion: 1
providers:
- name: 'Zcash metrics'
# <string> provider type. Default to 'file'
type: file
# <bool> disable dashboard deletion
disableDeletion: false
# <int> how often Grafana will scan for changed dashboards
updateIntervalSeconds: 10
# <bool> allow updating provisioned dashboards from the UI
allowUiUpdates: false
options:
# <string, required> path to dashboard files on disk. Required when using the 'file' type
path: /etc/grafana/dashboards
# <bool> use folder names from filesystem to create folders in Grafana
foldersFromFilesStructure: true

View File

@ -0,0 +1,12 @@
---
apiVersion: 1
datasources:
-
access: proxy
editable: false
name: Prometheus
orgId: 1
type: prometheus
uid: T9XAoUn4k
url: "http://prometheus:9090"
version: 1

View File

@ -3,4 +3,4 @@ scrape_configs:
scrape_interval: 500ms
metrics_path: '/'
static_configs:
- targets: ['127.0.0.1:9969']
- targets: ['host.docker.internal:9969']

View File

@ -107,7 +107,7 @@ wallet_packages_$(NO_WALLET) = $(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)
all_packages = $(native_packages) $(packages)
meta_depends = Makefile funcs.mk builders/default.mk hosts/default.mk hosts/$(host_os).mk builders/$(build_os).mk

View File

@ -37,7 +37,7 @@ define vendor_crate_deps
( mkdir -p $$($(1)_download_dir)/$(1) && echo Vendoring dependencies for $(1)... && \
tar -xf $(native_rust_cached) -C $$($(1)_download_dir) && \
tar --strip-components=1 -xf $$($(1)_source_dir)/$(2) -C $$($(1)_download_dir)/$(1) && \
cp $$($(1)_download_dir)/$(1)/$(3) $$($(1)_download_dir)/$(1)/Cargo.lock && \
cp $(3) $$($(1)_download_dir)/$(1)/Cargo.lock && \
$$($(1)_download_dir)/native/bin/cargo vendor --locked --manifest-path $$($(1)_download_dir)/$(1)/$(4) $$($(1)_download_dir)/$(CRATE_REGISTRY) && \
cd $$($(1)_download_dir) && \
find $(CRATE_REGISTRY) | sort | tar --no-recursion -czf $$($(1)_download_dir)/$(5).temp -T - && \

View File

@ -2,6 +2,7 @@ mingw32_CFLAGS=-pipe
mingw32_CXXFLAGS=$(mingw32_CFLAGS) -isystem $(host_prefix)/include/c++/v1
mingw32_LDFLAGS?=-fuse-ld=lld
mingw32_LDFLAGS+=-L/usr/lib/gcc/x86_64-w64-mingw32/$(shell x86_64-w64-mingw32-g++-posix -dumpversion)
mingw32_release_CFLAGS=-O3
mingw32_release_CXXFLAGS=$(mingw32_release_CFLAGS)

View File

@ -42,6 +42,9 @@ define $(package)_build_cmds
$(MAKE) libdb_cxx-6.2.a libdb-6.2.a
endef
ifneq ($(build_os),darwin)
# Install the BDB utilities as well, so that we have the specific compatible
# versions for recovery purposes (https://github.com/zcash/zcash/issues/4537).
define $(package)_stage_cmds
$(MAKE) DESTDIR=$($(package)_staging_dir) install
endef
@ -51,3 +54,11 @@ define $(package)_postprocess_cmds
mkdir -p bin && \
mv -f $($(package)_staging_dir)$(host_prefix)/bin/db_* bin
endef
else
# The BDB utilities silently fail to link on native macOS, causing the rest of
# the install to fail due to missing binaries. Until we can figure out how to
# make them work, avoid building them.
define $(package)_stage_cmds
$(MAKE) DESTDIR=$($(package)_staging_dir) install_lib install_include
endef
endif

View File

@ -1,8 +1,8 @@
package=boost
$(package)_version=1_81_0
$(package)_version=1_82_0
$(package)_download_path=https://boostorg.jfrog.io/artifactory/main/release/$(subst _,.,$($(package)_version))/source/
$(package)_file_name=boost_$($(package)_version).tar.bz2
$(package)_sha256_hash=71feeed900fbccca04a3b4f2f84a7c217186f28a940ed8b7ed4725986baf99fa
$(package)_sha256_hash=a6e1ab9b0860e6a2881dd7b21fe9f737a095e5f33a3a874afc6a345228597ee6
$(package)_dependencies=native_b2
ifneq ($(host_os),darwin)

View File

@ -1,6 +1,6 @@
package=googletest
$(package)_version=1.12.1
$(package)_download_path=https://github.com/google/$(package)/archive/
$(package)_download_path=https://github.com/google/$(package)/archive/refs/tags
$(package)_file_name=$(package)-$($(package)_version).tar.gz
$(package)_download_file=release-$($(package)_version).tar.gz
$(package)_sha256_hash=81964fe578e9bd7c94dfdb09c8e4d6e6759e19967e397dbea48d1c10e45d0df2

View File

@ -1,6 +1,6 @@
package=libcxx
$(package)_version=$(native_clang_version)
$(package)_msys2_version=14.0.6-1
$(package)_version=$(if $(native_clang_version_$(host_arch)_$(host_os)),$(native_clang_version_$(host_arch)_$(host_os)),$(if $(native_clang_version_$(host_os)),$(native_clang_version_$(host_os)),$(native_clang_default_version)))
$(package)_msys2_version=15.0.7-3
ifneq ($(canonical_host),$(build))
ifneq ($(host_os),mingw32)
@ -9,10 +9,10 @@ ifneq ($(host_os),mingw32)
$(package)_download_path=$(native_clang_download_path)
$(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=1a81fda984f5e607584916fdf69cf41e5385b219b983544d2c1a14950d5a65cf
$(package)_sha256_hash_aarch64_linux=8ca4d68cf103da8331ca3f35fe23d940c1b78fb7f0d4763c1c059e352f5d1bec
$(package)_download_file_linux=clang+llvm-$($(package)_version)-x86_64-linux-gnu-ubuntu-18.04.tar.xz
$(package)_file_name_linux=clang-llvm-$($(package)_version)-x86_64-linux-gnu-ubuntu-18.04.tar.xz
$(package)_sha256_hash_linux=61582215dafafb7b576ea30cc136be92c877ba1f1c31ddbbd372d6d65622fef5
$(package)_sha256_hash_linux=38bc7f5563642e73e69ac5626724e206d6d539fbef653541b34cae0ba9c3f036
# Starting from LLVM 14.0.0, some Clang binary tarballs store libc++ in a
# target-specific subdirectory.
@ -26,37 +26,17 @@ endef
else
# For Windows cross-compilation, use the MSYS2 binaries.
# Starting from LLVM 15.0.0, libc++abi is provided by libc++.
$(package)_download_path=https://repo.msys2.org/mingw/x86_64
$(package)_download_file=mingw-w64-x86_64-libc++-$($(package)_msys2_version)-any.pkg.tar.zst
$(package)_file_name=mingw-w64-x86_64-libcxx-$($(package)_msys2_version)-any.pkg.tar.zst
$(package)_sha256_hash=05f888ec1d82cb989a22ced6b85834c5d9aac46613b15334e6a2806c3d0960a4
$(package)_libcxxabi_download_file=mingw-w64-x86_64-libc++abi-$($(package)_msys2_version)-any.pkg.tar.zst
$(package)_libcxxabi_file_name=mingw-w64-x86_64-libcxxabi-$($(package)_msys2_version)-any.pkg.tar.zst
$(package)_libcxxabi_sha256_hash=0ca22d18cb155f6d230d7f6691c05b876316e0c381195428f063f66352689ca4
$(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
$(package)_sha256_hash=8c14da21fa9622cc7450b22467452c6c933a03cee526cf8744faea3d4674035b
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
cp lib/libc++abi.a $($(package)_staging_prefix_dir)/lib
endef
endif

View File

@ -1,6 +1,6 @@
package=libevent
$(package)_version=2.1.12
$(package)_download_path=https://github.com/libevent/libevent/archive/
$(package)_download_path=https://github.com/libevent/libevent/archive/refs/tags
$(package)_file_name=$(package)-$($(package)_version).tar.gz
$(package)_download_file=release-$($(package)_version)-stable.tar.gz
$(package)_sha256_hash=7180a979aaa7000e1264da484f712d403fcf7679b1e9212c4e3d09f5c93efc24

View File

@ -1,7 +1,8 @@
package=native_cctools
$(package)_version=55562e4073dea0fbfd0b20e0bf69ffe6390c7f97
$(package)_download_path=https://github.com/tpoechtrager/cctools-port/archive
$(package)_file_name=$($(package)_version).tar.gz
$(package)_download_file=$($(package)_version).tar.gz
$(package)_file_name=$(package)_$($(package)_version).tar.gz
$(package)_sha256_hash=e51995a843533a3dac155dd0c71362dd471597a2d23f13dff194c6285362f875
$(package)_build_subdir=cctools
$(package)_dependencies=native_clang
@ -10,7 +11,7 @@ $(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_file_name=$(package)_libtapi_$($(package)_libtapi_version).tar.gz
$(package)_libtapi_sha256_hash=380c1ca37cfa04a8699d0887a8d3ee1ad27f3d08baba78887c73b09485c0fbd3
$(package)_extra_sources += $($(package)_libtapi_file_name)

View File

@ -5,17 +5,29 @@ package=native_clang
# - Manually fix the versions for packages that don't exist (the LLVM project
# doesn't uniformly cut binaries across releases).
# The Clang compiler should use the same LLVM version as the Rust compiler.
$(package)_major_version=14
$(package)_version=14.0.6
$(package)_download_path=https://github.com/llvm/llvm-project/releases/download/llvmorg-$($(package)_version)
$(package)_download_path_linux=https://github.com/llvm/llvm-project/releases/download/llvmorg-14.0.0
$(package)_download_file_linux=clang+llvm-14.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz
$(package)_default_major_version=15
$(package)_default_version=15.0.6
$(package)_version_darwin=15.0.4
# 2023-02-16: No FreeBSD packages are available for Clang 15.
# 2023-04-07: Still the case.
$(package)_major_version_freebsd=14
$(package)_version_freebsd=14.0.6
# Tolerate split LLVM versions. If an LLVM build is not available for a Tier 3
# platform, we permit an older LLVM version to be used. This means the version
# of LLVM used in Clang and Rust will differ on these platforms, preventing LTO
# from working.
$(package)_version=$(if $($(package)_version_$(host_arch)_$(host_os)),$($(package)_version_$(host_arch)_$(host_os)),$(if $($(package)_version_$(host_os)),$($(package)_version_$(host_os)),$($(package)_default_version)))
$(package)_major_version=$(if $($(package)_major_version_$(host_arch)_$(host_os)),$($(package)_major_version_$(host_arch)_$(host_os)),$(if $($(package)_major_version_$(host_os)),$($(package)_major_version_$(host_os)),$($(package)_default_major_version)))
$(package)_download_path_linux=https://github.com/llvm/llvm-project/releases/download/llvmorg-$($(package)_version)
$(package)_download_file_linux=clang+llvm-$($(package)_version)-x86_64-linux-gnu-ubuntu-18.04.tar.xz
$(package)_file_name_linux=clang-llvm-$($(package)_version)-x86_64-linux-gnu-ubuntu-18.04.tar.xz
$(package)_sha256_hash_linux=61582215dafafb7b576ea30cc136be92c877ba1f1c31ddbbd372d6d65622fef5
$(package)_sha256_hash_linux=38bc7f5563642e73e69ac5626724e206d6d539fbef653541b34cae0ba9c3f036
$(package)_download_path_darwin=https://github.com/llvm/llvm-project/releases/download/llvmorg-$($(package)_version)
$(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=e6cc6b8279661fd4452c2847cb8e55ce1e54e1faf4ab497b37c85ffdb6685e7c
$(package)_sha256_hash_darwin=4c98d891c07c8f6661b233bf6652981f28432cfdbd6f07181114195c3536544b
$(package)_download_path_freebsd=https://github.com/llvm/llvm-project/releases/download/llvmorg-$($(package)_version)
$(package)_download_file_freebsd=clang+llvm-$($(package)_version)-amd64-unknown-freebsd12.tar.xz
$(package)_file_name_freebsd=clang-llvm-$($(package)_version)-amd64-unknown-freebsd12.tar.xz
@ -23,7 +35,7 @@ $(package)_sha256_hash_freebsd=b0a7b86dacb12afb8dd2ca99ea1b894d9cce84aab7711cb19
$(package)_download_path_aarch64_linux=https://github.com/llvm/llvm-project/releases/download/llvmorg-$($(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=1a81fda984f5e607584916fdf69cf41e5385b219b983544d2c1a14950d5a65cf
$(package)_sha256_hash_aarch64_linux=8ca4d68cf103da8331ca3f35fe23d940c1b78fb7f0d4763c1c059e352f5d1bec
ifneq (,$(wildcard /etc/arch-release))
$(package)_dependencies=native_libtinfo
@ -39,6 +51,11 @@ endif
define $(package)_stage_cmds
mkdir -p $($(package)_staging_prefix_dir)/bin && \
rm -r include/flang && \
rm -r include/lldb && \
rm lib/libflang* && \
rm lib/libFortran* && \
rm lib/liblldb* && \
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 && \

View File

@ -1,8 +1,8 @@
package=native_cmake
$(package)_version=3.25.2
$(package)_version=3.26.3
$(package)_download_path=https://github.com/Kitware/CMake/releases/download/v$($(package)_version)
$(package)_file_name=cmake-$($(package)_version).tar.gz
$(package)_sha256_hash=c026f22cb931dd532f648f087d587f07a1843c6e66a3dfca4fb0ea21944ed33c
$(package)_sha256_hash=bbd8d39217509d163cb544a40d6428ac666ddc83e22905d3e52c925781f0f659
define $(package)_set_vars
$(package)_config_opts += -DCMAKE_BUILD_TYPE:STRING=Release

View File

@ -1,17 +1,27 @@
package=native_cxxbridge
# The version needs to match cxx in Cargo.toml
$(package)_version=1.0.83
$(package)_version=1.0.94
$(package)_download_path=https://github.com/dtolnay/cxx/archive/refs/tags
$(package)_file_name=native_cxxbridge-$($(package)_version).tar.gz
$(package)_download_file=$($(package)_version).tar.gz
$(package)_sha256_hash=e30cbd34fc8ec2ae78f4f9e546d29c6c92e6d714f30c3c150f7b8c6ea08ea971
$(package)_sha256_hash=0c8d5c2fad6f2e09b04214007361e94b5e4d85200546eb67fd8885f72aa236f1
$(package)_build_subdir=gen/cmd
$(package)_dependencies=native_rust
# This file is somewhat annoying to update, but can be done like so from the repo base:
# $ export VERSION=1.0.94
# $ rm .cargo/config .cargo/.configured-for-offline
# $ mkdir tmp
# $ cd tmp
# $ tar xf ../depends/sources/native_cxxbridge-$VERSION.tar.gz
# $ cd cxx-$VERSION
# $ cargo check --release --package=cxxbridge-cmd --bin=cxxbridge
# $ cp Cargo.lock ../../depends/patches/native_cxxbridge/
$(package)_patches=Cargo.lock
$(package)_extra_sources=$(package)-$($(package)_version)-vendored.tar.gz
define $(package)_fetch_cmds
$(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) && \
$(call vendor_crate_deps,$(package),$($(package)_file_name),third-party/Cargo.lock,Cargo.toml,$(package)-$($(package)_version)-vendored.tar.gz)
$(call fetch_file,$(1),$($(1)_download_path),$($(1)_download_file),$($(1)_file_name),$($(1)_sha256_hash)) && \
$(call vendor_crate_deps,$(1),$($(1)_file_name),$(PATCHES_PATH)/$(1)/Cargo.lock,Cargo.toml,$(1)-$($(1)_version)-vendored.tar.gz)
endef
define $(package)_extract_cmds
@ -23,7 +33,7 @@ define $(package)_extract_cmds
endef
define $(package)_preprocess_cmds
cp third-party/Cargo.lock . && \
cp $($(package)_patch_dir)/Cargo.lock . && \
mkdir -p .cargo && \
echo "[source.crates-io]" >.cargo/config && \
echo "replace-with = \"vendored-sources\"" >>.cargo/config && \

View File

@ -3,16 +3,16 @@ package=native_rust
# ./contrib/devtools/update-rust-hashes.sh
# The Rust compiler should use the same LLVM version as the Clang compiler; you
# can check this with `rustc --version -v`.
$(package)_version=1.64.0
$(package)_version=1.69.0
$(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=a893977f238291370ab96726a74b6b9ae854dc75fbf5730954d901a93843bf9b
$(package)_sha256_hash_linux=2ca4a306047c0b8b4029c382910fcbc895badc29680e0332c9df990fd1c70d4f
$(package)_file_name_darwin=rust-$($(package)_version)-x86_64-apple-darwin.tar.gz
$(package)_sha256_hash_darwin=b6003d49fb857ff8dc105a3ccba98b851cd3e7d874005acb92284fd1113adc0d
$(package)_sha256_hash_darwin=9818dab2c3726d63dfbfde12c9273e62e484ef6d6f6e05a6431a3e089c335454
$(package)_file_name_freebsd=rust-$($(package)_version)-x86_64-unknown-freebsd.tar.gz
$(package)_sha256_hash_freebsd=f188a9a7f947d559add5aa7b5aa218d9c5177237eb9ea62109347f0f1464e3a2
$(package)_sha256_hash_freebsd=2985d98910b4a1dd336bfc7a1ac3b18082ed917cff097b4db6f0d6602016c289
$(package)_file_name_aarch64_linux=rust-$($(package)_version)-aarch64-unknown-linux-gnu.tar.gz
$(package)_sha256_hash_aarch64_linux=7d8860572431bd4ee1b9cd0cd77cf7ff29fdd5b91ed7c92a820f872de6ced558
$(package)_sha256_hash_aarch64_linux=88af5aa7a40c8f1b40416a1f27de8ffbe09c155d933f69d3e109c0ccee92353b
# Mapping from GCC canonical hosts to Rust targets
# If a mapping is not present, we assume they are identical, unless $host_os is
@ -21,15 +21,20 @@ $(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=2b425658f84793d5bbf00ce545f410ec6454add202cce27a718d81e0233e7007
$(package)_rust_std_sha256_hash_x86_64-apple-darwin=eb2f7c51f63973765f01efe509ccd2f26345d4bf0d77695adb4198a0899ae648
$(package)_rust_std_sha256_hash_x86_64-pc-windows-gnu=dcf87f97432adf7228e907b551d9b73f1ab16f79dc5da0724a227b7ffdaf57b4
$(package)_rust_std_sha256_hash_x86_64-unknown-freebsd=c91edba781ba56f35f2dba56a268d41866ea9bb5f6ffb9d342635f66b836898b
$(package)_rust_std_sha256_hash_aarch64-unknown-linux-gnu=8f42b40c0a0658ee75ce758652c9821fac7db3fbd8d20f7fb2483ec2c57ee0ac
$(package)_rust_std_sha256_hash_x86_64-apple-darwin=e44d71250dc5a238da0dc4784dad59d562862653adecd31ea52e0920b85c6a7c
$(package)_rust_std_sha256_hash_x86_64-pc-windows-gnu=09ded4a4c27c16aff9c9911640b1bdf6e1172237ce540ed4dc3e166e9438f0d7
$(package)_rust_std_sha256_hash_x86_64-unknown-freebsd=eed4b3f3358a8887b0f6a62e021469878a8990af9b94c2fe87d3c1b0220913bb
define rust_target
$(if $($(1)_rust_target_$(2)),$($(1)_rust_target_$(2)),$(if $(findstring darwin,$(3)),x86_64-apple-darwin,$(if $(findstring freebsd,$(3)),x86_64-unknown-freebsd,$(2))))
endef
define $(package)_set_vars
$(package)_stage_opts=--disable-ldconfig
$(package)_stage_build_opts=--without=rust-docs-json-preview,rust-docs
endef
ifneq ($(canonical_host),$(build))
$(package)_rust_target=$(call rust_target,$(package),$(canonical_host),$(host_os))
$(package)_exact_file_name=rust-std-$($(package)_version)-$($(package)_rust_target).tar.gz
@ -54,12 +59,12 @@ define $(package)_extract_cmds
endef
define $(package)_stage_cmds
bash ./install.sh --without=rust-docs --destdir=$($(package)_staging_dir) --prefix=$(build_prefix) --disable-ldconfig && \
../$(canonical_host)/install.sh --destdir=$($(package)_staging_dir) --prefix=$(build_prefix) --disable-ldconfig
bash ./install.sh --destdir=$($(package)_staging_dir) --prefix=$(build_prefix) $($(package)_stage_opts) $($(package)_stage_build_opts) && \
../$(canonical_host)/install.sh --destdir=$($(package)_staging_dir) --prefix=$(build_prefix) $($(package)_stage_opts)
endef
else
define $(package)_stage_cmds
bash ./install.sh --without=rust-docs --destdir=$($(package)_staging_dir) --prefix=$(build_prefix) --disable-ldconfig
bash ./install.sh --destdir=$($(package)_staging_dir) --prefix=$(build_prefix) $($(package)_stage_opts) $($(package)_stage_build_opts)
endef
endif

View File

@ -1,8 +1,8 @@
package=native_zstd
$(package)_version=1.5.2
$(package)_version=1.5.5
$(package)_download_path=https://github.com/facebook/zstd/releases/download/v$($(package)_version)
$(package)_file_name=zstd-$($(package)_version).tar.gz
$(package)_sha256_hash=7c42d56fac126929a6a85dbc73ff1db2411d04f104fae9bdea51305663a83fd0
$(package)_sha256_hash=9c4396cc829cfae319a6e2615202e82aad41372073482fce286fac78646d3ee4
$(package)_build_subdir=build/cmake
$(package)_dependencies=native_cmake

View File

@ -3,8 +3,8 @@ $(package)_version=$(native_cxxbridge_version)
$(package)_file_name=$(native_cxxbridge_file_name)
$(package)_sha256_hash=$(native_cxxbridge_sha256_hash)
# Nothing to do, this was fetched by native_cxxbridge.
define $(package)_fetch_cmds
$(call native_cxxbridge_fetch_cmds,native_cxxbridge)
endef
define $(package)_stage_cmds

View File

@ -1,8 +1,8 @@
package=tl_expected
$(package)_version=1.0.1
$(package)_version=96d547c03d2feab8db64c53c3744a9b4a7c8f2c5
$(package)_download_path=https://github.com/TartanLlama/expected/archive
$(package)_download_file=96d547c03d2feab8db64c53c3744a9b4a7c8f2c5.tar.gz
$(package)_file_name=tl-expected-1.0.1.tar.gz
$(package)_download_file=$($(package)_version).tar.gz
$(package)_file_name=$(package)_$($(package)_version).tar.gz
$(package)_sha256_hash=64901df1de9a5a3737b331d3e1de146fa6ffb997017368b322c08f45c51b90a7
$(package)_patches=remove-undefined-behaviour.diff

View File

@ -1,6 +1,6 @@
package=utfcpp
$(package)_version=3.2.3
$(package)_download_path=https://github.com/nemtrif/$(package)/archive/
$(package)_download_path=https://github.com/nemtrif/$(package)/archive/refs/tags
$(package)_file_name=$(package)-$($(package)_version).tar.gz
$(package)_download_file=v$($(package)_version).tar.gz
$(package)_sha256_hash=3ba9b0dbbff08767bdffe8f03b10e596ca351228862722e4c9d4d126d2865250

View File

@ -0,0 +1,416 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "adler"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "basic-toml"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c0de75129aa8d0cceaf750b89013f0e08804d6ec61416da787b35ad0d7cddf1"
dependencies = [
"serde",
]
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "cc"
version = "1.0.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
dependencies = [
"jobserver",
]
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "clang-ast"
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f01a8823bc658ffd6c6cc1931b0283e7daacf2299fe79faab307cc08c65c98fe"
dependencies = [
"serde",
]
[[package]]
name = "clap"
version = "4.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b802d85aaf3a1cdb02b224ba472ebdea62014fccfcb269b95a4d76443b5ee5a"
dependencies = [
"clap_builder",
]
[[package]]
name = "clap_builder"
version = "4.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14a1a858f532119338887a4b8e1af9c60de8249cd7bafd68036a489e261e37b6"
dependencies = [
"bitflags",
"clap_lex",
"strsim",
]
[[package]]
name = "clap_lex"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1"
[[package]]
name = "codespan-reporting"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
dependencies = [
"termcolor",
"unicode-width",
]
[[package]]
name = "crc32fast"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
dependencies = [
"cfg-if",
]
[[package]]
name = "cxx"
version = "1.0.94"
dependencies = [
"cc",
"cxx-build",
"cxx-gen",
"cxx-test-suite",
"cxxbridge-flags",
"cxxbridge-macro",
"link-cplusplus",
"rustversion",
"trybuild",
]
[[package]]
name = "cxx-build"
version = "1.0.94"
dependencies = [
"cc",
"codespan-reporting",
"cxx",
"cxx-gen",
"once_cell",
"pkg-config",
"proc-macro2",
"quote",
"scratch",
"syn",
]
[[package]]
name = "cxx-gen"
version = "0.7.94"
dependencies = [
"codespan-reporting",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "cxx-test-suite"
version = "0.0.0"
dependencies = [
"cxx",
"cxx-build",
"cxxbridge-flags",
]
[[package]]
name = "cxxbridge-cmd"
version = "1.0.94"
dependencies = [
"clap",
"codespan-reporting",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "cxxbridge-flags"
version = "1.0.94"
[[package]]
name = "cxxbridge-macro"
version = "1.0.94"
dependencies = [
"clang-ast",
"cxx",
"flate2",
"memmap",
"proc-macro2",
"quote",
"serde",
"serde_json",
"syn",
]
[[package]]
name = "demo"
version = "0.0.0"
dependencies = [
"cxx",
"cxx-build",
]
[[package]]
name = "dissimilar"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "210ec60ae7d710bed8683e333e9d2855a8a56a3e9892b38bad3bb0d4d29b0d5e"
[[package]]
name = "flate2"
version = "1.0.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
dependencies = [
"crc32fast",
"miniz_oxide",
]
[[package]]
name = "glob"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]]
name = "itoa"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
[[package]]
name = "jobserver"
version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
dependencies = [
"libc",
]
[[package]]
name = "libc"
version = "0.2.141"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5"
[[package]]
name = "link-cplusplus"
version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
dependencies = [
"cc",
]
[[package]]
name = "memmap"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b"
dependencies = [
"libc",
"winapi",
]
[[package]]
name = "miniz_oxide"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
dependencies = [
"adler",
]
[[package]]
name = "once_cell"
version = "1.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
[[package]]
name = "pkg-config"
version = "0.3.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
[[package]]
name = "proc-macro2"
version = "1.0.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
dependencies = [
"proc-macro2",
]
[[package]]
name = "rustversion"
version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
[[package]]
name = "ryu"
version = "1.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
[[package]]
name = "scratch"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
[[package]]
name = "serde"
version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.96"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
dependencies = [
"itoa",
"ryu",
"serde",
]
[[package]]
name = "strsim"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "syn"
version = "2.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "termcolor"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
dependencies = [
"winapi-util",
]
[[package]]
name = "trybuild"
version = "1.0.80"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "501dbdbb99861e4ab6b60eb6a7493956a9defb644fd034bc4a5ef27c693c8a3a"
dependencies = [
"basic-toml",
"dissimilar",
"glob",
"once_cell",
"serde",
"serde_derive",
"serde_json",
"termcolor",
]
[[package]]
name = "unicode-ident"
version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
[[package]]
name = "unicode-width"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
dependencies = [
"winapi",
]
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"

View File

@ -1,52 +1,54 @@
Zcash Contributors
==================
Jack Grigg (1296)
Kris Nuttycombe (618)
Jack Grigg (1301)
Kris Nuttycombe (659)
Simon Liu (460)
Sean Bowe (389)
Daira Hopwood (376)
Daira Hopwood (392)
Sean Bowe (390)
Eirik Ogilvie-Wigley (216)
Wladimir J. van der Laan (159)
Pieter Wuille (143)
Greg Pfeil (174)
Wladimir J. van der Laan (160)
Pieter Wuille (149)
Alfredo Garcia (120)
Taylor Hornby (118)
Marshall Gaucher (118)
Marco Falke (91)
Ying Tong Lai (90)
Marco Falke (90)
Jonas Schnelli (90)
Jay Graber (89)
Larry Ruane (88)
Greg Pfeil (83)
sasha (80)
Cory Fields (78)
sasha (62)
Matt Corallo (60)
Matt Corallo (62)
Nathan Wilcox (57)
Dimitris Apostolou (43)
practicalswift (42)
Dimitris Apostolou (40)
Kevin Gallagher (38)
Daira Emma Hopwood (38)
fanquake (36)
Carl Dong (30)
Luke Dashjr (26)
Alex Morcos (28)
Luke Dashjr (27)
Gregory Maxwell (24)
John Newbery (23)
Jorge Timón (22)
Suhas Daftuar (20)
furszy (18)
Jonathan "Duke" Leto (18)
Marius Kjærstad (17)
syd (16)
Suhas Daftuar (16)
Patick Strateman (16)
Marius Kjærstad (15)
Charlie O'Keefe (15)
Charlie O'Keefe (16)
avnish (14)
Per Grön (14)
Alex Morcos (14)
Benjamin Winston (13)
Steven Smith (12)
Pavel Janík (12)
Patrick Strateman (12)
Jeremy Rubin (12)
Ariel Gabizon (12)
teor (11)
Russell Yanofsky (11)
Paige Peterson (11)
Kaz Wesley (11)
@ -54,7 +56,6 @@ João Barbosa (11)
Philip Kaufmann (10)
Peter Todd (10)
ying tong (9)
teor (9)
nomnombtc (9)
Zancas Wilcox (9)
kozyilmaz (8)
@ -71,18 +72,20 @@ Daniel Cousens (6)
Casey Rodarmor (6)
jnewbery (5)
ca333 (5)
Sasha (5)
MeshCollider (5)
Johnathan Corgan (5)
George Tankersley (5)
Gavin Andresen (5)
Gareth Davies (5)
sandakersmann (4)
instagibbs (4)
gladcow (4)
WO (4)
Sjors Provoost (4)
Nate Wilcox (4)
Miodrag Popović (4)
Jim Posen (4)
Evan Klitzke (4)
Ben Woosley (4)
mruddy (3)
lpescher (3)
@ -93,21 +96,21 @@ NikVolf (3)
Martin Ankerl (3)
Julian Fleischer (3)
Jason Davies (3)
Evan Klitzke (3)
Ethan Heilman (3)
Eric Lombrozo (3)
DeckerSU (3)
Danny Willems (3)
Conrado Gouvea (3)
Anthony Towns (3)
Alfie John (3)
Aditya Kulkarni (3)
ANISH M (3)
whythat (2)
rofl0r (2)
ptschip (2)
noname45688@gmail.com (2)
kpcyrd (2)
kobake (2)
instagibbs (2)
hexabot (2)
face (2)
aniemerg (2)
@ -123,17 +126,16 @@ Pejvan (2)
Pavol Rusnak (2)
Pavel Vasin (2)
Mustafa (2)
Miodrag Popović (2)
Matthew King (2)
Mary Moore-Simmons (2)
Mark Friedenbach (2)
Marek (2)
Jon Atack (2)
Joe Turgeon (2)
Jesse Cohen (2)
Jeffrey Czyz (2)
Jack Gavigan (2)
ITH4Coinomia (2)
DeckerSU (2)
Dan Raviv (2)
Dagur Valberg Johannsson (2)
Bryant Eisenbach (2)
@ -168,16 +170,19 @@ emilrus (1)
dexX7 (1)
dependabot[bot] (1)
daniel (1)
cronicc (1)
codetriage-readme-bot (1)
calebogden (1)
ayleph (1)
avnish98 (1)
adityapk00 (1)
Za Wilcox (1)
Yasser Isa (1)
William M Peaster (1)
Vidar Holen (1)
Vasil Dimov (1)
Ulrich Kempken (1)
TrellixVulnTeam (1)
Tom Ritter (1)
Tom Harding (1)
Technetium (1)

View File

@ -2,6 +2,7 @@
[zcashd](README.md)
- [User Documentation](user.md)
- [Release Support](user/release-support.md)
- [Platform Support](user/platform-support.md)
- [Wallet Backup](user/wallet-backup.md)
- [Shielding Coinbase Outputs](user/shield-coinbase.md)

View File

@ -64,6 +64,40 @@ To add dependencies that are compatible with the reproducible build system, you
./zcutil/build.sh
```
## Using an unpublished Rust dependency
Occasionally we may need to depend on an unpublished git revision of a crate.
We sometimes want to prove out API changes to the `zcash_*` Rust crates by
migrating `zcashd` to them first, before making a public crate release. Or we
might need to cut a `zcashd` release before some upstream dependency has
published a fix we need. In these cases, we use patch dependencies.
For example, to use an unpublished version of the `orchard` crate that includes
a new API, add the following patch to `Cargo.toml`:
```
[dependencies]
# This dependency is listed with a version, meaning it comes from crates.io; the
# patch goes into a [patch.crates-io] section.
orchard = "0.4"
...
[patch.crates-io]
orchard = { git = "https://github.com/zcash/orchard.git", rev = "..." }
```
Note that if the git repository contains a workspace of interconnected crates
(for example, https://github.com/zcash/librustzcash), you will need to provide
patches for each of the dependencies that reference the same git revision.
You also need to update `.cargo/config.offline` to add a replacement definition
for each `(git, rev)` pair. Run `./test/lint/lint-cargo-patches.sh` to get the
lines that need to be present.
Finally, `./qa/supply-chain/config.toml` needs to be updated to ignore patched
dependencies. Run `cargo vet regenerate audit-as-crates-io`, and then ensure the
newly-added lines are of the form `audit-as-crates-io = false`.
## Using a local Rust dependency
During development, you can use a locally checked out version of a dependency

View File

@ -35,11 +35,12 @@ The following features are deprecated, but remain enabled by default. These feat
will be disabled if `-allowdeprecated=none` is added to the CLI arguments when starting
the node, or if an `allowdeprecated=none` line is added to `zcash.conf`.
| `feature` | Deprecated | Feature details
|-----------------------|------------|----------------
| `z_getbalance` | 5.0.0 | The `z_getbalance` RPC method.
| `z_gettotalbalance` | 5.0.0 | The `z_gettotalbalance` RPC method.
| `gbt_oldhashes` | 5.4.0 | The `finalsaplingroothash`, `lightclientroothash`, and `blockcommitmentshash` fields in the output of `getblocktemplate`, which are replaced by the `defaultroots` field.
| `feature` | Deprecated | Feature details
|-------------------------------------|------------|----------------
| `z_getbalance` | 5.0.0 | The `z_getbalance` RPC method.
| `z_gettotalbalance` | 5.0.0 | The `z_gettotalbalance` RPC method.
| `gbt_oldhashes` | 5.4.0 | The `finalsaplingroothash`, `lightclientroothash`, and `blockcommitmentshash` fields in the output of `getblocktemplate`, which are replaced by the `defaultroots` field.
| `deprecationinfo_deprecationheight` | 5.5.0 | The `deprecationheight` field returned by the `getdeprecationinfo` RPC method has been replaced by the `end_of_service` object.
Stage 2
-------

View File

@ -54,14 +54,66 @@ zcash_chain_verified_block_total 162
```
By default, access is restricted to localhost. This can be expanded with
`-metricsallowip=<ip>`, which can specify IPs or subnets. Note that HTTPS is not
supported, and therefore connections to the endpoint are not encrypted or
`-metricsallowip=<ip>`, which can specify IPs or subnets. Note that HTTPS is
not supported, and therefore connections to the endpoint are not encrypted or
authenticated. Access to the endpoint should be assumed to compromise the
privacy of node operations, by the provided metrics and/or by timing side
channels. Non-localhost access is **strongly discouraged** if the node has a
wallet holding live funds.
### Example metrics collection with Docker
### Metrics collection with Docker
A docker-compose.yml has been provided in `./contrib/metrics` that sets up
local instances of `prometheus` and `grafana` and provides a dashboard that
charts several of the various metrics exposed by `zcashd`'s `prometheus`
endpoint. Note that both `docker` and `docker-compose` must ordinarily be run
with superuser permissions (use `sudo`) when running on Linux.
`docker-compose up`[^1] will start local instances of `prometheus` and `grafana`,
accessible over HTTP on ports `9090` and `3030`, respectively.
```
cd <zcash_root>/contrib/metrics
docker-compose up -d
```
(substitute the root directory where you have checked out the `zcash` git
repository for `<zcash_root>`)
`~/.zcash/zcash.conf` must be updated to enable `prometheus` and to allow the
`prometheus` server launched via `docker-compose` to connect to the `zcashd`
prometheus endpoint. The following commands can be used to detect the local IP
address for the `prometheus` server and add it to the `~/.zcash/zcash.conf`
file.
First, figure out where `prometheus` is running.
```
export PROMETHEUS_DOCKER_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' zcashd-prometheus)
```
Then, update your `~/.zcash/zcash.conf` file to open port `9969` and allow
connections from the `zcashd-prometheus` docker container.
```
cat << PROM_CONF >> ~/.zcash/zcash.conf
prometheusport=9969
metricsallowip=$PROMETHEUS_DOCKER_IP/32
PROM_CONF
```
You may then (re)start `zcashd` and navigate to
[http://localhost:9090/targets?search=](http://localhost:9090/targets?search=)
to verify that the `prometheus` server is able to connect to the `zcashd`
prometheus endpoint; you should see the host
`http://host.docker.internal:9969/` having `UP` status. Once this is working,
navigate to
[http://localhost:3030/d/U4U58t-Gk/zcashd-metrics](http://localhost:3030/d/U4U58t-Gk/zcashd-metrics)
to view the dashboard. The username and password for this local grafana
instance are set by default to `admin`/`admin`; the UI will ask you to change
this on first use. Data gathered by the running prometheus instance and changes
that you make to the grafana interface will be persisted across restarts.
#### Manual Docker Setup Without docker-compose
The example instructions below were tested on Windows 10 using Docker Desktop
with the WSL 2 backend, connected to a `zcashd` running inside WSL2 (but not
@ -75,11 +127,15 @@ docker volume create grafana-storage
docker volume create prometheus-storage
# Run Prometheus
# You will need to modify ~/contrib/metrics/prometheus.yaml to match the
# You will need to modify $(zcash_root)/contrib/metrics/prometheus.yaml to match the
# port configured with -prometheusport and -metricsbind / -metricsallowip
# (and possibly also for your Docker network setup).
docker run --detach -p 9090:9090 --volume prometheus-storage:/prometheus --volume ~/contrib/metrics/prometheus.yaml:/etc/prometheus/prometheus.yml prom/prometheus
docker run --detach -p 9090:9090 --volume prometheus-storage:/prometheus --volume $(zcash_root)/contrib/metrics/prometheus.yaml:/etc/prometheus/prometheus.yml prom/prometheus
# Run Grafana
docker run --detach -p 3030:3030 --env GF_SERVER_HTTP_PORT=3030 --volume grafana-storage:/var/lib/grafana grafana/grafana
```
[^1]: This requires a running Docker daemon. See [the relevant section of the
Docker Engine manual](https://docs.docker.com/config/daemon/start/).

View File

@ -0,0 +1,53 @@
# `zcashd` Release Support
## Release cadence and support window
`zcashd` releases happen approximately every six weeks, although this may change if a
particular release is delayed, or if a hotfix release occurs.
Each `zcashd` release is generally supported for 16 weeks. Occasionally this changes for
individual releases (for example, near to a Network Upgrade activation).
These two policies mean that there are generally at least two separate `zcashd` versions
currently supported at any given time.
## End-of-Support halt
Every `zcashd` version released by ECC has an End-of-Support height. When the Zcash chain
reaches this height, `zcashd` will automatically shut down, and the binary will refuse to
restart. This is for several reasons:
- The `zcashd` maintainers do not have the resources to maintain old versions of `zcashd`
indefinitely.
- Each time a user upgrades their `zcashd` node, they are re-confirming that they are
happy to run the Zcash consensus rules encoded in the version of `zcashd` they are
running. This is an important part of the overall strategy for changes to the node and
consensus rules; users who want to follow different rules (or even just have a different
End-of-Support halt policy) will obtain a `zcashd` binary from some other source, with
its own support policies.
- Knowing that old versions will shut down is useful for planning backwards-incompatible
changes in Network Upgrades. A Network Upgrade activation can be targeted for a height
where we know that all released `zcashd` versions which _did not_ support the Network
Upgrade will have shut down by the time the Network Upgrade activates.
## End-of-Support heights
The End-of-Support height for a running `zcashd` can be queried over JSON-RPC using the
`getdeprecationinfo` method.
The following table shows End-of-Support information for recent `zcashd` releases. It is
automatically updated during each release. "End of Support" dates are estimated at that
time, and may shift due to changes in network solution power.
<!-- RELEASE_SCRIPT_START_MARKER - If you make changes here, check make-release.py -->
| `zcashd` version | Release date | Halt height | End of Support |
| ---------------- | ------------ | ----------- | -------------- |
| 5.4.0 | 2023-02-09 | 2106524 | 2023-06-01 |
| 5.4.1 | 2023-02-13 | 2112024 | 2023-06-05 |
| 5.3.3 | 2023-03-13 | 2121024 | 2023-06-13 |
| 5.4.2 | 2023-03-13 | 2121024 | 2023-06-13 |
| 5.5.0-rc1 | 2023-04-20 | 2188024 | 2023-08-10 |
| 5.5.0-rc2 | 2023-04-25 | 2193300 | 2023-08-15 |
| 5.5.0-rc3 | 2023-04-27 | 2195224 | 2023-08-17 |
| 5.5.0 | 2023-04-27 | 2196024 | 2023-08-17 |
<!-- RELEASE_SCRIPT_END_MARKER -->

View File

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

View File

@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1.
.TH ZCASH-TX "1" "February 2023" "zcash-tx v5.4.0" "User Commands"
.TH ZCASH-TX "1" "April 2023" "zcash-tx v5.5.0" "User Commands"
.SH NAME
zcash-tx \- manual page for zcash-tx v5.4.0
zcash-tx \- manual page for zcash-tx v5.5.0
.SH DESCRIPTION
Zcash zcash\-tx utility version v5.4.0
Zcash zcash\-tx utility version v5.5.0
.SS "Usage:"
.TP
zcash\-tx [options] <hex\-tx> [commands]

View File

@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1.
.TH ZCASHD-WALLET-TOOL "1" "February 2023" "zcashd-wallet-tool v5.4.0" "User Commands"
.TH ZCASHD-WALLET-TOOL "1" "April 2023" "zcashd-wallet-tool v5.5.0" "User Commands"
.SH NAME
zcashd-wallet-tool \- manual page for zcashd-wallet-tool v5.4.0
zcashd-wallet-tool \- manual page for zcashd-wallet-tool v5.5.0
.SH SYNOPSIS
.B zcashd-wallet-tool
[\fI\,OPTIONS\/\fR]

View File

@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1.
.TH ZCASHD "1" "February 2023" "zcashd v5.4.0" "User Commands"
.TH ZCASHD "1" "April 2023" "zcashd v5.5.0" "User Commands"
.SH NAME
zcashd \- manual page for zcashd v5.4.0
zcashd \- manual page for zcashd v5.5.0
.SH DESCRIPTION
Zcash Daemon version v5.4.0
Zcash Daemon version v5.5.0
.PP
In order to ensure you are adequately protecting your privacy when using Zcash,
please see <https://z.cash/support/security/>.
@ -34,10 +34,10 @@ long fork (%s in cmd is replaced by message)
.IP
Explicitly allow the use of the specified deprecated feature. Multiple
instances of this parameter are permitted; values for <feature> must be
selected from among {"none", "gbt_oldhashes", "z_getbalance",
"z_gettotalbalance", "addrtype", "getnewaddress", "getrawchangeaddress",
"legacy_privacy", "wallettxvjoinsplit", "z_getnewaddress",
"z_listaddresses"}
selected from among {"none", "deprecationinfo_deprecationheight",
"gbt_oldhashes", "z_getbalance", "z_gettotalbalance", "addrtype",
"getnewaddress", "getrawchangeaddress", "legacy_privacy",
"wallettxvjoinsplit", "z_getnewaddress", "z_listaddresses"}
.HP
\fB\-blocknotify=\fR<cmd>
.IP
@ -309,11 +309,6 @@ Enable the Sprout to Sapling migration
.IP
Set the Sapling migration address
.HP
\fB\-mintxfee=\fR<amt>
.IP
Fees (in ZEC/kB) smaller than this are considered zero fee for
transaction creation (default: 0.00001)
.HP
\fB\-orchardactionlimit=\fR<n>
.IP
Set the maximum number of Orchard actions permitted in a transaction
@ -321,7 +316,11 @@ Set the maximum number of Orchard actions permitted in a transaction
.HP
\fB\-paytxfee=\fR<amt>
.IP
Fee (in ZEC/kB) to add to transactions you send (default: 0.00)
The preferred fee rate (in ZEC per 1000 bytes) used for transactions
created by legacy APIs (sendtoaddress, sendmany, and
fundrawtransaction). If the transaction is less than 1000 bytes then the
fee rate is applied as though it were 1000 bytes. When this option is
not set, the ZIP 317 fee calculation is used.
.HP
\fB\-rescan\fR
.IP
@ -332,19 +331,10 @@ Rescan the block chain for missing wallet transactions on startup
Attempt to recover private keys from a corrupt wallet on startup
(implies \fB\-rescan\fR)
.HP
\fB\-sendfreetransactions\fR
.IP
Send transactions as zero\-fee transactions if possible (default: 0)
.HP
\fB\-spendzeroconfchange\fR
.IP
Spend unconfirmed change when sending transactions (default: 1)
.HP
\fB\-txconfirmtarget=\fR<n>
.IP
If paytxfee is not set, include enough fee so transactions begin
confirmation on average within n blocks (default: 2)
.HP
\fB\-txexpirydelta\fR
.IP
Set the number of blocks after which a transaction that has not been
@ -460,8 +450,9 @@ Prepend debug output with timestamp (default: 1)
.HP
\fB\-minrelaytxfee=\fR<amt>
.IP
Fees (in ZEC/kB) smaller than this are considered zero fee for relaying,
mining and transaction creation (default: 0.000001)
Transactions must have at least this fee rate (in ZEC per 1000 bytes)
for relaying, mining and transaction creation (default: 0.000001). This
is not the only fee constraint.
.HP
\fB\-maxtxfee=\fR<amt>
.IP
@ -492,18 +483,14 @@ Maximum size of data in data carrier transactions we relay and mine
.PP
Block creation options:
.HP
\fB\-blockminsize=\fR<n>
.IP
Set minimum block size in bytes (default: 0)
.HP
\fB\-blockmaxsize=\fR<n>
.IP
Set maximum block size in bytes (default: 2000000)
.HP
\fB\-blockprioritysize=\fR<n>
\fB\-blockunpaidactionlimit=\fR<n>
.IP
Set maximum size of high\-priority/low\-fee transactions in bytes
(default: 1000000)
Set the limit on unpaid actions that will be accepted in a block for
transactions paying less than the ZIP 317 fee (default: 50)
.PP
Mining options:
.HP

View File

@ -0,0 +1,36 @@
Notable changes
===============
This hotfix remediates memory exhaustion vulnerabilities that zcashd inherited
as a fork of bitcoind. These bugs could allow an attacker to use peer-to-peer
messages to fill the memory of a node, resulting in a crash.
Changelog
=========
Daira Hopwood (3):
Enable a CRollingBloomFilter to be reset to a state where it takes little memory.
Ensure that CNode::{addrKnown, filterInventoryKnown} immediately take little memory when we disconnect the node.
Improve the encapsulation of `CNode::filterInventoryKnown`.
Greg Pfeil (1):
Remove `ResetRequestCount`
Jon Atack (1):
p2p, rpc, test: address rate-limiting follow-ups
Kris Nuttycombe (4):
Update release notes for v5.3.3 hotfix
Postpone dependency updates.
make-release.py: Versioning changes for 5.3.3.
make-release.py: Updated manpages for 5.3.3.
Matt Corallo (1):
Remove useless mapRequest tracking that just effects Qt display.
Pieter Wuille (3):
Rate limit the processing of incoming addr messages
Randomize the order of addr processing
Add logging and addr rate limiting statistics

View File

@ -0,0 +1,46 @@
Notable changes
===============
`allowdeprecated` in `zcash.conf`
---------------------------------
In v5.0.0 a [feature deprecation framework](https://zcash.github.io/zcash/user/deprecation.html)
was released, to enable `zcashd` features to be formally deprecated and removed:
- In stage 1, a feature is marked as deprecated, but otherwise left as-is. It
remains in this stage for at least 18 weeks.
- In stage 2, the feature is default-disabled, but can be re-enabled with the
`-allowdeprecated` config option. It remains in this stage for at least 18
weeks.
- Finally, the feature is removed - either entirely, or (e.g. in the case of RPC
methods that were inherited from Bitcoin Core) with a "tombstone" left to
inform users of the removal (and what to use instead if applicable).
Config options can be specified either as a `zcashd` argument (`-option=value`)
or in `zcash.conf` (as a `option=value` line). However, due to a bug in the
implementation, `allowdeprecated=feature` lines in `zcash.conf` were ignored.
The bug went unnoticed until v5.4.0, in which the first group of features moved
from stage 1 to stage 2. This hotfix release fixes the bug.
Fixed RPC blocking and wallet view lag on reindex
-------------------------------------------------
The known issue reported in the v5.4.0 release notes has been fixed.
Changelog
=========
Jack Grigg (8):
Sleep for 200us before each ActivateBestChainStep call
Load `-allowdeprecated` settings after reading the config file
qa: Refactor `wallet_deprecation` test to extract common logic
qa: Extend `wallet_deprecation` to test `allowdeprecated` in config file
Write release notes for v5.4.1
Postpone dependency updates for v5.4.1
make-release.py: Versioning changes for 5.4.1.
make-release.py: Updated manpages for 5.4.1.
Jack Grigg (1):
Adjust documentation of 200µs sleep

View File

@ -0,0 +1,36 @@
Notable changes
===============
This hotfix remediates memory exhaustion vulnerabilities that zcashd inherited
as a fork of bitcoind. These bugs could allow an attacker to use peer-to-peer
messages to fill the memory of a node, resulting in a crash.
Changelog
=========
Daira Hopwood (3):
Enable a CRollingBloomFilter to be reset to a state where it takes little memory.
Ensure that CNode::{addrKnown, filterInventoryKnown} immediately take little memory when we disconnect the node.
Improve the encapsulation of `CNode::filterInventoryKnown`.
Greg Pfeil (1):
Remove `ResetRequestCount`
Jon Atack (1):
p2p, rpc, test: address rate-limiting follow-ups
Kris Nuttycombe (4):
Update release notes for v5.3.3 hotfix
Postpone dependency updates for v5.4.2 hotfix.
make-release.py: Versioning changes for 5.4.2.
make-release.py: Updated manpages for 5.4.2.
Matt Corallo (1):
Remove useless mapRequest tracking that just effects Qt display.
Pieter Wuille (3):
Rate limit the processing of incoming addr messages
Randomize the order of addr processing
Add logging and addr rate limiting statistics

View File

@ -0,0 +1,407 @@
Notable changes
===============
RPC Changes
-----------
- `getdeprecationinfo` has several changes:
- It now returns additional information about currently deprecated and
disabled features.
- A new `end_of_service` object that contains both the block height for
end-of-service and the estimated time that the end-of-service halt is
expected to occur. Note that this height is just an approximation and
will change over time as the end-of-service block height approaches,
due to the variability in block times. The
`end_of_service` object is intended to replace the `deprecationheight`
field; see the [Deprecations](#deprecations) section for additional detail.
- This RPC method was previously only available for mainnet nodes; it is now
also available for testnet and regtest nodes, in which case it does not
return end-of-service halt information (as testnet and regtest nodes do not
have an end-of-service halt feature.)
- Several `z_sendmany`, `z_shieldcoinbase` and `z_mergetoaddress` failures have
moved from synchronous to asynchronous, so while you should already be
checking the async operation status, there are now more cases that may trigger
failure at that stage.
- The `AllowRevealedRecipients` privacy policy is now required in order to choose a
transparent change address for a transaction. This will only occur when the wallet
is unable to construct the transaction without selecting funds from the transparent
pool, so the impact of this change is that for such transactions, the user must specify
`AllowFullyTransparent`.
- The `z_shieldcoinbase` and `z_mergetoaddress` RPC methods now support an
optional privacy policy.
- The `estimatepriority` RPC call has been removed.
- The `priority_delta` argument to the `prioritisetransaction` RPC call now has
no effect and must be set to a dummy value (0 or null).
Changes to Transaction Fee Selection
------------------------------------
- The `-mintxfee` and `-sendfreetransactions` options have been removed. These
options used to instruct the wallet's legacy transaction creation APIs
(`sendtoaddress`, `sendmany`, and `fundrawtransaction`) to increase fees to
this limit and to use a zero fee for "small" transactions that spend "old"
inputs, respectively. They will now cause a warning on node startup if used.
Changes to Block Template Construction
--------------------------------------
We now use a new block template construction algorithm documented in
[ZIP 317](https://zips.z.cash/zip-0317#recommended-algorithm-for-block-template-construction).
- This algorithm no longer favours transactions that were previously considered
"high priority" because they spent older inputs. The `-blockprioritysize` config
option, which configured the portion of the block reserved for these transactions,
has been removed and will now cause a warning if used.
- The `-blockminsize` option, which configured the size of a portion of the block
to be filled regardless of transaction fees or priority, has also been removed
and will cause a warning if used.
- A `-blockunpaidactionlimit` option has been added to control the limit on
"unpaid actions" that will be accepted in a block for transactions paying less
than the ZIP 317 fee. This defaults to 50.
Removal of Priority Estimation
------------------------------
- Estimation of "priority" needed for a transaction to be included within a target
number of blocks, and the associated `estimatepriority` RPC call, have been
removed. The format for `fee_estimates.dat` has also changed to no longer save
these priority estimates. It will automatically be converted to the new format
which is not readable by prior versions of the software. The `-txconfirmtarget`
config option is now obsolete and has also been removed. It will cause a
warning if used.
[Deprecations](https://zcash.github.io/zcash/user/deprecation.html)
--------------
The following features have been deprecated, but remain available by default.
These features may be disabled by setting `-allowdeprecated=none`. 18 weeks
after this release, these features will be disabled by default and the following
flags to `-allowdeprecated` will be required to permit their continued use:
- `deprecationinfo_deprecationheight`: The `deprecationheight` field of
`getdeprecationinfo` has been deprecated and replaced by the `end_of_service`
object.
Changelog
=========
ANISH M (3):
use SOURCES_PATH instead of local git DEPENDS_SOURCES_DIR
report the git-derived version in metrics screen
Update src/metrics.cpp by removing v prefix.
Alex Morcos (14):
Refactor CreateNewBlock to be a method of the BlockAssembler class
FIX: Account for txs already added to block in addPriorityTxs
FIX: correctly measure size of priority block
[rpc] Remove estimatepriority.
[mining] Remove -blockprioritysize.
[debug] Change -printpriority option
[cleanup] Remove estimatePriority
[rpc] sendrawtransaction no longer bypasses minRelayTxFee
[test] Remove priority from tests
[rpc] Remove priority information from mempool RPC calls
[rpc] Remove priorityDelta from prioritisetransaction
[cleanup] Remove coin age priority completely.
Allow setting minrelaytxfee to 0
Update example zcash.conf
Daira Emma Hopwood (34):
Remove unnecessary #include.
Adjust indentation to be consistent without changing existing code.
Repair show_help RPC test.
Fix bit-rotted code in miner tests.
Implement ZIP 317 computations.
`cargo update`
Add audits for updates to futures-* 0.3.28 and redjubjub 0.7.0.
Add `examine`, a wrapper around `std::visit` that reverses the arguments.
Use the new `examine` macro to replace all instances of `std::visit(match {...}, specimen)`, improving code readability.
Refactoring to avoid duplicated code.
Refactoring to avoid an unnecessary temporary.
Refactor that avoids using exceptions for local flow control and is simpler.
Correct the documentation of `-rpcconnect` in the example `zcash.conf`. `-rpcconnect` is only used by `zcash-cli`.
Change ZIP 401 mempool limiting to use conventional fee.
Change ZIP 401 mempool limiting to use constants decided in zcash/zips#565.
Warn on node startup if the removed `-blockprioritysize` option is set to a non-zero value.
Log (at the mempool DEBUG level) when a transaction cannot be accepted to the mempool because its modified fee is below the minimum relay fee.
Fix the dust threshold rate to three times 100 zats/1000 bytes. (We express it that way rather than 300 zats/1000 bytes, because the threshold is always rounded to an integer and then multiplied by 3.)
Fix some messages, comments, and documentation that: * used "fee" to mean "fee rate", "kB" to mean 1000 bytes, "satoshis" to mean zatoshis, or that incorrectly used "BTC" in place of "ZEC"; * used obsolete concepts such as "zero fee" or "free transaction"; or * did not accurately document their applicability.
Fix tests that failed due to the minimum relay fee being enforced.
Fix miner_tests btest.
Fix mempool_packages and prioritisetransaction RPC tests.
Implement `GetUnpaidActionCount` and `GetWeightRatio` for ZIP 317.
ZIP 317 block construction algorithm. This breaks tests which are repaired in subsequent commits.
Add assertions that `GetRandInt*` functions are called with `nMax >= 0`. All existing uses have been checked to ensure they are consistent with this assertion.
Repair `miner_tests.py` btest.
Repair some RPC tests.
mergetoaddress_helper.py: Use `generate_and_check` helper to mine a block and make sure that it contains the expected number of transactions.
mergetoaddress_helper.py: use Decimal for amounts and integers otherwise.
Remove the implementation of score-based block template construction and the `-blockminsize` option.
Add a `-blockunpaidactionlimit` config option to configure the per-block limit on unpaid actions for ZIP 317 block template construction.
miner_tests.cpp improvements.
random.h documentation improvements.
Fix/suppress clippy warnings.
Daira Hopwood (9):
Use a more recent URL format for GitHub release archives.
Clarify that patches to a dependency are under the same license as that dependency.
Update copyright date and email for tl_expected.
Use the same convention for the tl_expected download files as for native_cctools
Refactoring to split the weighted tx tree out of mempool_limit.{cpp,h} and make it more reusable.
Minor optimization to weighted_map::remove
This PR doesn't bring in any ZIP 317 changes yet
Another minor optimization
Change spelling of prioritisation in an error message
DeckerSU (1):
InsertBlockIndex: pass const reference on hash, instead of hash
Dimitris Apostolou (3):
Fix typo
Update documentation link
Fix typos
Evan Klitzke (1):
Fix automake warnings when running autogen.sh
Greg Pfeil (81):
Show in-progress tests when rpc-tests is interrupted
Make extra newline more explicit
Apply suggestions from code review
Make pool selection order more flexible
Simplify diversifier_index_t handling
Update tests for async z_sendmany
Limit UTXOs
Some orchard fixes for wallet_tx_builder
Return anchorHeight from ResolveInputsAndPayments
Refactoring InsufficientFundsError
Ensure we dont make Orchard change pre-NU5
Test updates for z_sendmany WalletTxBuilder changes
Fix weakened privacy policy for transparent change
Fix some overly-strict privacy policies in btest
Apply suggestions from code review
Unify requireTransparentCoinbase handling
Rename `Get*Balance` to `Get*Total`
Remove changes that arent needed by z_sendmany
Improve GetRequiredPrivacyPolicy
Add release notes for (a)sync z_sendmany changes
Assert that we get a change addr for any selector
Dont pass PrivacyPolicy to selector constructor
Address comments on WalletTxBuilder introduction
Make RPC test output more deterministic
Update WalletTxBuilder based on review
Clarify `AddressResolutionError`
Dont permit user-provided “internal” payments
Address WalletTxBuilder PR feedback
Ensure that a WalletTxBuilder tx balances
Additional z_sendmany test cases
Address WalletTxBuilder review feedback
Apply suggestions for WalletTxBuilder from code review
Simplify SelectOVKs
Have GetRecipientPools return a copy
Remove CWallet member from WalletTxBuilder
Improve taddr no-memo check
Update src/wallet/rpcwallet.cpp
Lock notes (except Orchard) in wallet_tx_builder
Improve Doxygen for note locking
Require `AllowRevealedRecipients` for t-change
Update release-notes for transparent change restriction
Correct EditorConfig for Makefiles
Split C++ generated from Rust into own lib
Simplify canResolveOrchard logic
Support ZIP 317 fees in the zcashd wallet
Correct change handling for ZIP 317 fees
Address review feedback re: ZIP 317 in wallet
Revert "Add `AllowRevealedSenders` to fix `mempool_nu_activation.py`"
Eliminate LegacyCompatZTXOSelector cycle
Simplify client.cpp
Enrich zcash-cli arg conversion
Better messages on client-side zcash-cli errors
Fix accidental reversion of #6409
Remove unnecessary explicit privacy policy
Use examine instead of std::visit
Simplify some vector initialization
Fix edge case revealed by #6409
Rename Arg* to Param
Adjust wallet absurd fee check for ZIP 317
Address review feedback for ZIP 317 fees in wallet
Address more ZIP 317 fee feedback
Fix zcash-cli crash when printing help message
Use null as the ZIP 317 fee sentinel instead of -1
Add z_sendmany RPC examples with fee field
Have z_shieldcoinbase use WalletTxBuilder
Address review feedback on z_shieldcoinbase
Fix an incorrect error message in a test
Minor improvements to z_shieldcoinbase
Support ZIP 317 fees for legacy wallet operations
Remove `-mintxfee` config option
Address review comments re: legacy wallet ZIP 317
Remove `-txconfirmtarget` config option
Restore previous `-maxtxfee` bound
Correct -maxtxfee lower bound diagnostic messages
WalletTxBuilder support for net payments
fixup! WalletTxBuilder support for net payments
Dont test “Insufficient funds” for `z_shieldcoinbase`
Update z_mergetoaddress to use WalletTxBuilder
Many z_mergetoaddress updates
Avoid extra copy in ResolveInputsAndPayments
Address z_mergetoaddress review feedback
Jack Grigg (77):
rust: Add `cxx` version of `RustStream`
rust: Migrate `OrchardMerkleFrontier` to `cxx`
CreateNewBlock: Leave more space for Orchard shielded coinbase
Retroactively enable ZIP 216 before NU5 activation
rust: Compile with ThinLTO
depends: Update Rust to 1.67.1
depends: Update Clang / libcxx to LLVM 15.0.6
Fix 1.67.1 clippy lints
depends: Evaluate `native_packages` before `packages`
qa: Fix year in postponement lines
qa: Fix `google/leveldb` tag parsing in `updatecheck.py`
qa: Handle commit IDs correctly to `updatecheck.py`
depends: `cxx 1.0.91`
depends: `native_zstd 1.5.4`
`cargo vet regenerate imports`
qa: Import Rust crate audits from ISRG
`cargo update`
qa: Postpone LevelDB 1.23
book: Add page with release support details and EoS halt heights
Update release support book page in release process
depends: Update Rust to 1.68.0
qa: Replace Firefox audits with aggregated Mozilla audits in registry
qa: Import Rust crate audits from ChromeOS
Move `fEnableAddrTypeField` outside `ENABLE_WALLET`
`s/string/std::string` in `init.cpp`
CI: Check that the PR branch has a sufficiently recent base for Tekton
CI: Fix permissions for Checks workflow
Add `CChainParams::RustNetwork`
wallet: Consolidate `CWalletTx` Sapling output decryption methods
wallet: Use `zcash_note_encryption` in `CWalletTx::DecryptSaplingNote`
wallet: Use `CWalletTx::DecryptSaplingNote` in more places
wallet: Use `zcash_note_encryption` in `CWallet::FindMySaplingNotes`
wallet: Use `zcash_note_encryption` in `CWalletTx::RecoverSaplingNote`
wallet: Remove recipient-side `SaplingNotePlaintext::decrypt`
CI: Fetch all history for "recent base" check
CI: Include explicit `failure()` condition in "recent base" check
CI: Use `github.head_ref` instead of `HEAD` for "recent base" check
book: Add End-of-Support heights for v5.3.3 and v5.4.2
CI: Remove most usages of `actions-rs` actions
CI: Migrate to `cargo-vet 0.5`
cargo vet prune
CI: Provide `write` permission for `pull-requests`
CI: Check out both the base and PR branches for "recent base" check
Migrate to `zcash_primitives 0.10`
depends: `cxx 1.0.92`
depends: CMake 3.26.0
depends: Postpone CCache updates again
cargo update
Use `RandomInvalidOutputDescription()` everywhere it makes sense
Merge most `cxx::bridge` definitions into a single bridge
Expand `CppStream` to cover all `Stream`-like C++ types
Migrate `OrchardMerkleFrontier` to use new `CppStream` APIs
build: Tolerate split LLVM versions
Use `cxx` bridge for all Orchard bundle inspection and validation
gtest: Minor improvements to `CoinsTests`
rust: Migrate Ed25519 FFI to `cxx`
Tell `cargo-vet` to ignore patched dependencies
cargo-vet: Regenerate imports
cargo-vet: Switch to Google's aggregated audits
More crate audits
Migrate to published `orchard 0.4`
qa: Fix update checker to handle `native_clang` version format
depends: CMake 3.26.3
depends: Rust 1.68.2
depends: `native_zstd 1.5.5`
depends: `cxx 1.0.94`
qa: Postpone dependencies we aren't updating
cargo update
Use published `zcash_primitives 0.11` and `zcash_proofs 0.11`
test: Avoid generating a chain fork in `mempool_packages` RPC test
test: Sync blocks before invalidating them in `mempool_packages` RPC test
depends: Boost 1.82.0
qa: Postpone Clang 16.0.2
cargo update
depends: Rust 1.69.0
make-release.py: Versioning changes for 5.5.0-rc1.
make-release.py: Updated manpages for 5.5.0-rc1.
Kris Nuttycombe (26):
Fix potential path or symlink traversal
Add a docker-compose.yml for prometheus/grafana metrics collection.
Apply suggestions from code review
Make all CCoinsView methods pure-virtual.
Remove `FakeCoinsViewDB` as it is identical to `CCoinsViewDummy`
Postpone dependency updates.
make-release.py: Versioning changes for 5.3.3.
make-release.py: Updated manpages for 5.3.3.
make-release.py: Updated release notes and changelog for 5.3.3.
Set urgency to `high` in Debian changelog.
Add information about deprecated features to `deprecationinfo` results.
Apply suggestions from code review
Add a wallet-aware transaction builder.
Use WalletTxBuilder for z_sendmany
Allow selectors to require transparent coinbase
Fix a longstanding zcashd build warning
Fix `make distclean` to recursively remove `rust/gen`
Improve const-ness of CChainParams retrieval by network ID
Explicitly provide CChainParams to `EnforceNodeDeprecation`
revert broken "safe extract" functionality in golden tests.
Refactor RPC privacyPolicy handling
Update to use the `ff 0.13` dependency stack.
Add `AllowRevealedSenders` to fix `mempool_nu_activation.py`
Calculate convential fee in `CreateTransaction` before stripping sigs.
Fix formating of money strings.
Use the conventional fee for prioritisation in prioritisetransactions.py
Luke Dashjr (1):
RPC/Mining: Restore API compatibility for prioritisetransaction
Marco Falke (1):
wallet: Remove sendfree
Marius Kjærstad (2):
New checkpoint at block 2000000 for mainnet
Update estimated number of transactions due to Blossom NU
Miodrag Popović (2):
Fix for broken cross-build to Windows target on Ubuntu 22.04 and Debian 11
Update depends/hosts/mingw32.mk to use posix variant library path
Sean Bowe (1):
Add additional audits.
Suhas Daftuar (4):
Add tags to mempool's mapTx indices
Fix mempool limiting for PrioritiseTransaction
Use fee deltas for determining mempool acceptance
Remove GetMinRelayFee
TrellixVulnTeam (1):
Adding tarfile member sanitization to extractall()
Wladimir J. van der Laan (1):
Merge #7730: Remove priority estimation
Yasser Isa (1):
DOWNLOAD_URL dynamic in fetch-params.sh
cronicc (1):
Fix Horizen Security contact email
instagibbs (2):
Gave miner test values constants for less error-prone values.
Corrected values
sasha (6):
Partially revert PR #6384, but only for URLs using a git commit hash
Download `native_cctools` and its `libtapi` to meaningful filenames
Better error messages if proof parameters aren't loaded
Enable the (existing) custom error message for the invalid checksum case
Re-download parameters if they already exist but don't have correct sums
Alias Sasha->sasha in release-notes.py to avoid authors.md split
Jack Grigg (2):
Improvements to code comments
Adjust documentation

View File

@ -0,0 +1,458 @@
Notable changes
===============
RPC Changes
-----------
- `getdeprecationinfo` has several changes:
- It now returns additional information about currently deprecated and
disabled features.
- A new `end_of_service` object that contains both the block height for
end-of-service and the estimated time that the end-of-service halt is
expected to occur. Note that this height is just an approximation and
will change over time as the end-of-service block height approaches,
due to the variability in block times. The
`end_of_service` object is intended to replace the `deprecationheight`
field; see the [Deprecations](#deprecations) section for additional detail.
- This RPC method was previously only available for mainnet nodes; it is now
also available for testnet and regtest nodes, in which case it does not
return end-of-service halt information (as testnet and regtest nodes do not
have an end-of-service halt feature.)
- Several `z_sendmany`, `z_shieldcoinbase` and `z_mergetoaddress` failures have
moved from synchronous to asynchronous, so while you should already be
checking the async operation status, there are now more cases that may trigger
failure at that stage.
- The `AllowRevealedRecipients` privacy policy is now required in order to choose a
transparent change address for a transaction. This will only occur when the wallet
is unable to construct the transaction without selecting funds from the transparent
pool, so the impact of this change is that for such transactions, the user must specify
`AllowFullyTransparent`.
- The `z_shieldcoinbase` RPC method now supports an optional memo.
- The `z_shieldcoinbase` and `z_mergetoaddress` RPC methods now support an
optional privacy policy.
- The `z_mergetoaddress` RPC method can now merge _to_ UAs and can also send
between different shielded pools (when `AllowRevealedAmounts` is specified).
- The `estimatepriority` RPC call has been removed.
- The `priority_delta` argument to the `prioritisetransaction` RPC call now has
no effect and must be set to a dummy value (0 or null).
Changes to Transaction Fee Selection
------------------------------------
- The zcashd wallet now uses the conventional transaction fee calculated according
to [ZIP 317](https://zips.z.cash/zip-0317) by default. This conventional fee
will be used unless a fee is explicitly specified in an RPC call, or for the
wallet's legacy transaction creation APIs (`sendtoaddress`, `sendmany`, and
`fundrawtransaction`) when the `-paytxfee` option is set.
- The `-mintxfee` and `-sendfreetransactions` options have been removed. These
options previously instructed the legacy transaction creation APIs to increase
fees to this limit and to use a zero fee for "small" transactions that spend
"old" inputs, respectively. They will now cause a warning on node startup if
used.
Changes to Block Template Construction
--------------------------------------
We now use a new block template construction algorithm documented in
[ZIP 317](https://zips.z.cash/zip-0317#recommended-algorithm-for-block-template-construction).
- This algorithm no longer favours transactions that were previously considered
"high priority" because they spent older inputs. The `-blockprioritysize` config
option, which configured the portion of the block reserved for these transactions,
has been removed and will now cause a warning if used.
- The `-blockminsize` option, which configured the size of a portion of the block
to be filled regardless of transaction fees or priority, has also been removed
and will cause a warning if used.
- A `-blockunpaidactionlimit` option has been added to control the limit on
"unpaid actions" that will be accepted in a block for transactions paying less
than the ZIP 317 fee. This defaults to 50.
Change to Transaction Relay Policy
----------------------------------
The allowance for "free transactions" in mempool acceptance and relay has been
removed. All transactions must pay at least the minimum relay threshold, currently
100 zatoshis per 1000 bytes up to a maximum of 1000 zatoshis, in order to be
accepted and relayed. (Individual nodes can change this using `-minrelaytxfee`
but in practice the network default needs to be adhered to.) This policy is under
review and [might be made stricter](https://zips.z.cash/zip-0317#transaction-relaying);
if that happens then the ZIP 317 conventional fee will still be sufficient for
mempool acceptance and relay.
Removal of Priority Estimation
------------------------------
Estimation of "priority" needed for a transaction to be included within a target
number of blocks, and the associated `estimatepriority` RPC call, have been
removed. The format for `fee_estimates.dat` has also changed to no longer save
these priority estimates. It will automatically be converted to the new format
which is not readable by prior versions of the software. The `-txconfirmtarget`
config option is now obsolete and has also been removed. It will cause a
warning if used.
[Deprecations](https://zcash.github.io/zcash/user/deprecation.html)
--------------
The following features have been deprecated, but remain available by default.
These features may be disabled by setting `-allowdeprecated=none`. 18 weeks
after this release, these features will be disabled by default and the following
flags to `-allowdeprecated` will be required to permit their continued use:
- `deprecationinfo_deprecationheight`: The `deprecationheight` field of
`getdeprecationinfo` has been deprecated and replaced by the `end_of_service`
object.
Changelog
=========
ANISH M (3):
use SOURCES_PATH instead of local git DEPENDS_SOURCES_DIR
report the git-derived version in metrics screen
Update src/metrics.cpp by removing v prefix.
Alex Morcos (14):
Refactor CreateNewBlock to be a method of the BlockAssembler class
FIX: Account for txs already added to block in addPriorityTxs
FIX: correctly measure size of priority block
[rpc] Remove estimatepriority.
[mining] Remove -blockprioritysize.
[debug] Change -printpriority option
[cleanup] Remove estimatePriority
[rpc] sendrawtransaction no longer bypasses minRelayTxFee
[test] Remove priority from tests
[rpc] Remove priority information from mempool RPC calls
[rpc] Remove priorityDelta from prioritisetransaction
[cleanup] Remove coin age priority completely.
Allow setting minrelaytxfee to 0
Update example zcash.conf
Charlie O'Keefe (1):
Add reference in Makefile.am to zip317.h
Daira Emma Hopwood (38):
Remove unnecessary #include.
Adjust indentation to be consistent without changing existing code.
Repair show_help RPC test.
Fix bit-rotted code in miner tests.
Implement ZIP 317 computations.
`cargo update`
Add audits for updates to futures-* 0.3.28 and redjubjub 0.7.0.
Add `examine`, a wrapper around `std::visit` that reverses the arguments.
Use the new `examine` macro to replace all instances of `std::visit(match {...}, specimen)`, improving code readability.
Refactoring to avoid duplicated code.
Refactoring to avoid an unnecessary temporary.
Refactor that avoids using exceptions for local flow control and is simpler.
Correct the documentation of `-rpcconnect` in the example `zcash.conf`. `-rpcconnect` is only used by `zcash-cli`.
Change ZIP 401 mempool limiting to use conventional fee.
Change ZIP 401 mempool limiting to use constants decided in zcash/zips#565.
Warn on node startup if the removed `-blockprioritysize` option is set to a non-zero value.
Log (at the mempool DEBUG level) when a transaction cannot be accepted to the mempool because its modified fee is below the minimum relay fee.
Fix the dust threshold rate to three times 100 zats/1000 bytes. (We express it that way rather than 300 zats/1000 bytes, because the threshold is always rounded to an integer and then multiplied by 3.)
Fix some messages, comments, and documentation that: * used "fee" to mean "fee rate", "kB" to mean 1000 bytes, "satoshis" to mean zatoshis, or that incorrectly used "BTC" in place of "ZEC"; * used obsolete concepts such as "zero fee" or "free transaction"; or * did not accurately document their applicability.
Fix tests that failed due to the minimum relay fee being enforced.
Fix miner_tests btest.
Fix mempool_packages and prioritisetransaction RPC tests.
Implement `GetUnpaidActionCount` and `GetWeightRatio` for ZIP 317.
ZIP 317 block construction algorithm. This breaks tests which are repaired in subsequent commits.
Add assertions that `GetRandInt*` functions are called with `nMax >= 0`. All existing uses have been checked to ensure they are consistent with this assertion.
Repair `miner_tests.py` btest.
Repair some RPC tests.
mergetoaddress_helper.py: Use `generate_and_check` helper to mine a block and make sure that it contains the expected number of transactions.
mergetoaddress_helper.py: use Decimal for amounts and integers otherwise.
Remove the implementation of score-based block template construction and the `-blockminsize` option.
Add a `-blockunpaidactionlimit` config option to configure the per-block limit on unpaid actions for ZIP 317 block template construction.
miner_tests.cpp improvements.
random.h documentation improvements.
Fix/suppress clippy warnings.
Improve the `show_help.py` RPC test to include `-help-debug` (needed to test the help change in the next commit).
Improve `-printpriority` output to log the modified fee, conventional fee, size, logical action count, and unpaid action count. This reflects the changes to use the ZIP 317 block construction algorithm and de-emphasise fee rate.
Fix a build regression if `--disable-mining` is selected.
Fix a build regression if both `--disable-mining` and `--disable-wallet` are selected.
Daira Hopwood (9):
Use a more recent URL format for GitHub release archives.
Clarify that patches to a dependency are under the same license as that dependency.
Update copyright date and email for tl_expected.
Use the same convention for the tl_expected download files as for native_cctools
Refactoring to split the weighted tx tree out of mempool_limit.{cpp,h} and make it more reusable.
Minor optimization to weighted_map::remove
This PR doesn't bring in any ZIP 317 changes yet
Another minor optimization
Change spelling of prioritisation in an error message
DeckerSU (1):
InsertBlockIndex: pass const reference on hash, instead of hash
Dimitris Apostolou (3):
Fix typo
Update documentation link
Fix typos
Evan Klitzke (1):
Fix automake warnings when running autogen.sh
Greg Pfeil (86):
Show in-progress tests when rpc-tests is interrupted
Make extra newline more explicit
Apply suggestions from code review
Make pool selection order more flexible
Simplify diversifier_index_t handling
Update tests for async z_sendmany
Limit UTXOs
Some orchard fixes for wallet_tx_builder
Return anchorHeight from ResolveInputsAndPayments
Refactoring InsufficientFundsError
Ensure we dont make Orchard change pre-NU5
Test updates for z_sendmany WalletTxBuilder changes
Fix weakened privacy policy for transparent change
Fix some overly-strict privacy policies in btest
Apply suggestions from code review
Unify requireTransparentCoinbase handling
Rename `Get*Balance` to `Get*Total`
Remove changes that arent needed by z_sendmany
Improve GetRequiredPrivacyPolicy
Add release notes for (a)sync z_sendmany changes
Assert that we get a change addr for any selector
Dont pass PrivacyPolicy to selector constructor
Address comments on WalletTxBuilder introduction
Make RPC test output more deterministic
Update WalletTxBuilder based on review
Clarify `AddressResolutionError`
Dont permit user-provided “internal” payments
Address WalletTxBuilder PR feedback
Ensure that a WalletTxBuilder tx balances
Additional z_sendmany test cases
Address WalletTxBuilder review feedback
Apply suggestions for WalletTxBuilder from code review
Simplify SelectOVKs
Have GetRecipientPools return a copy
Remove CWallet member from WalletTxBuilder
Improve taddr no-memo check
Update src/wallet/rpcwallet.cpp
Lock notes (except Orchard) in wallet_tx_builder
Improve Doxygen for note locking
Require `AllowRevealedRecipients` for t-change
Update release-notes for transparent change restriction
Correct EditorConfig for Makefiles
Split C++ generated from Rust into own lib
Simplify canResolveOrchard logic
Support ZIP 317 fees in the zcashd wallet
Correct change handling for ZIP 317 fees
Address review feedback re: ZIP 317 in wallet
Revert "Add `AllowRevealedSenders` to fix `mempool_nu_activation.py`"
Eliminate LegacyCompatZTXOSelector cycle
Simplify client.cpp
Enrich zcash-cli arg conversion
Better messages on client-side zcash-cli errors
Fix accidental reversion of #6409
Remove unnecessary explicit privacy policy
Use examine instead of std::visit
Simplify some vector initialization
Fix edge case revealed by #6409
Rename Arg* to Param
Adjust wallet absurd fee check for ZIP 317
Address review feedback for ZIP 317 fees in wallet
Address more ZIP 317 fee feedback
Fix zcash-cli crash when printing help message
Use null as the ZIP 317 fee sentinel instead of -1
Add z_sendmany RPC examples with fee field
Have z_shieldcoinbase use WalletTxBuilder
Address review feedback on z_shieldcoinbase
Fix an incorrect error message in a test
Minor improvements to z_shieldcoinbase
Support ZIP 317 fees for legacy wallet operations
Remove `-mintxfee` config option
Address review comments re: legacy wallet ZIP 317
Remove `-txconfirmtarget` config option
Restore previous `-maxtxfee` bound
Correct -maxtxfee lower bound diagnostic messages
WalletTxBuilder support for net payments
fixup! WalletTxBuilder support for net payments
Dont test “Insufficient funds” for `z_shieldcoinbase`
Update z_mergetoaddress to use WalletTxBuilder
Many z_mergetoaddress updates
Avoid extra copy in ResolveInputsAndPayments
Address z_mergetoaddress review feedback
Allow explicit “no memo” in z_mergetoaddress
Add `memo` parameter to `z_shieldcoinbase`
Support UA destinations in `z_mergetoaddress`
Include Orchard dest in z_mergetoaddress estimation
Update release notes
Jack Grigg (90):
rust: Add `cxx` version of `RustStream`
rust: Migrate `OrchardMerkleFrontier` to `cxx`
CreateNewBlock: Leave more space for Orchard shielded coinbase
Retroactively enable ZIP 216 before NU5 activation
rust: Compile with ThinLTO
depends: Update Rust to 1.67.1
depends: Update Clang / libcxx to LLVM 15.0.6
Fix 1.67.1 clippy lints
depends: Evaluate `native_packages` before `packages`
qa: Fix year in postponement lines
qa: Fix `google/leveldb` tag parsing in `updatecheck.py`
qa: Handle commit IDs correctly to `updatecheck.py`
depends: `cxx 1.0.91`
depends: `native_zstd 1.5.4`
`cargo vet regenerate imports`
qa: Import Rust crate audits from ISRG
`cargo update`
qa: Postpone LevelDB 1.23
book: Add page with release support details and EoS halt heights
Update release support book page in release process
depends: Update Rust to 1.68.0
qa: Replace Firefox audits with aggregated Mozilla audits in registry
qa: Import Rust crate audits from ChromeOS
Move `fEnableAddrTypeField` outside `ENABLE_WALLET`
`s/string/std::string` in `init.cpp`
CI: Check that the PR branch has a sufficiently recent base for Tekton
CI: Fix permissions for Checks workflow
Add `CChainParams::RustNetwork`
wallet: Consolidate `CWalletTx` Sapling output decryption methods
wallet: Use `zcash_note_encryption` in `CWalletTx::DecryptSaplingNote`
wallet: Use `CWalletTx::DecryptSaplingNote` in more places
wallet: Use `zcash_note_encryption` in `CWallet::FindMySaplingNotes`
wallet: Use `zcash_note_encryption` in `CWalletTx::RecoverSaplingNote`
wallet: Remove recipient-side `SaplingNotePlaintext::decrypt`
CI: Fetch all history for "recent base" check
CI: Include explicit `failure()` condition in "recent base" check
CI: Use `github.head_ref` instead of `HEAD` for "recent base" check
book: Add End-of-Support heights for v5.3.3 and v5.4.2
CI: Remove most usages of `actions-rs` actions
CI: Migrate to `cargo-vet 0.5`
cargo vet prune
CI: Provide `write` permission for `pull-requests`
CI: Check out both the base and PR branches for "recent base" check
Migrate to `zcash_primitives 0.10`
depends: `cxx 1.0.92`
depends: CMake 3.26.0
depends: Postpone CCache updates again
cargo update
Use `RandomInvalidOutputDescription()` everywhere it makes sense
Merge most `cxx::bridge` definitions into a single bridge
Expand `CppStream` to cover all `Stream`-like C++ types
Migrate `OrchardMerkleFrontier` to use new `CppStream` APIs
build: Tolerate split LLVM versions
Use `cxx` bridge for all Orchard bundle inspection and validation
gtest: Minor improvements to `CoinsTests`
rust: Migrate Ed25519 FFI to `cxx`
Tell `cargo-vet` to ignore patched dependencies
cargo-vet: Regenerate imports
cargo-vet: Switch to Google's aggregated audits
More crate audits
Migrate to published `orchard 0.4`
qa: Fix update checker to handle `native_clang` version format
depends: CMake 3.26.3
depends: Rust 1.68.2
depends: `native_zstd 1.5.5`
depends: `cxx 1.0.94`
qa: Postpone dependencies we aren't updating
cargo update
Use published `zcash_primitives 0.11` and `zcash_proofs 0.11`
test: Avoid generating a chain fork in `mempool_packages` RPC test
test: Sync blocks before invalidating them in `mempool_packages` RPC test
depends: Boost 1.82.0
qa: Postpone Clang 16.0.2
cargo update
depends: Rust 1.69.0
make-release.py: Versioning changes for 5.5.0-rc1.
make-release.py: Updated manpages for 5.5.0-rc1.
make-release.py: Updated release notes and changelog for 5.5.0-rc1.
make-release.py: Updated book for 5.5.0-rc1.
CI: Add a GitHub Actions workflow that builds zcashd for platform tiers
CI: Add caching to build workflow
depends: Ensure `native_cxxbridge` source is fetched for `rustcxx`
depends: Don't build BDB utilities on macOS
depends: Remove Fortran and LLDB components from staged `native_clang`
CI: Build with `--with-libs`, `--disable-wallet`, and `--disable-mining`
Fix `make-release.py` to write correct halt height into book
Update v5.5.0 release notes
build: Fix MinGW cross-compilation with `--disable-wallet`
make-release.py: Versioning changes for 5.5.0-rc2.
make-release.py: Updated manpages for 5.5.0-rc2.
Kris Nuttycombe (26):
Fix potential path or symlink traversal
Add a docker-compose.yml for prometheus/grafana metrics collection.
Apply suggestions from code review
Make all CCoinsView methods pure-virtual.
Remove `FakeCoinsViewDB` as it is identical to `CCoinsViewDummy`
Postpone dependency updates.
make-release.py: Versioning changes for 5.3.3.
make-release.py: Updated manpages for 5.3.3.
make-release.py: Updated release notes and changelog for 5.3.3.
Set urgency to `high` in Debian changelog.
Add information about deprecated features to `deprecationinfo` results.
Apply suggestions from code review
Add a wallet-aware transaction builder.
Use WalletTxBuilder for z_sendmany
Allow selectors to require transparent coinbase
Fix a longstanding zcashd build warning
Fix `make distclean` to recursively remove `rust/gen`
Improve const-ness of CChainParams retrieval by network ID
Explicitly provide CChainParams to `EnforceNodeDeprecation`
revert broken "safe extract" functionality in golden tests.
Refactor RPC privacyPolicy handling
Update to use the `ff 0.13` dependency stack.
Add `AllowRevealedSenders` to fix `mempool_nu_activation.py`
Calculate convential fee in `CreateTransaction` before stripping sigs.
Fix formating of money strings.
Use the conventional fee for prioritisation in prioritisetransactions.py
Luke Dashjr (1):
RPC/Mining: Restore API compatibility for prioritisetransaction
Marco Falke (1):
wallet: Remove sendfree
Marius Kjærstad (2):
New checkpoint at block 2000000 for mainnet
Update estimated number of transactions due to Blossom NU
Miodrag Popović (2):
Fix for broken cross-build to Windows target on Ubuntu 22.04 and Debian 11
Update depends/hosts/mingw32.mk to use posix variant library path
Sean Bowe (1):
Add additional audits.
Suhas Daftuar (4):
Add tags to mempool's mapTx indices
Fix mempool limiting for PrioritiseTransaction
Use fee deltas for determining mempool acceptance
Remove GetMinRelayFee
TrellixVulnTeam (1):
Adding tarfile member sanitization to extractall()
Wladimir J. van der Laan (1):
Merge #7730: Remove priority estimation
Yasser Isa (1):
DOWNLOAD_URL dynamic in fetch-params.sh
cronicc (1):
Fix Horizen Security contact email
instagibbs (2):
Gave miner test values constants for less error-prone values.
Corrected values
sasha (6):
Partially revert PR #6384, but only for URLs using a git commit hash
Download `native_cctools` and its `libtapi` to meaningful filenames
Better error messages if proof parameters aren't loaded
Enable the (existing) custom error message for the invalid checksum case
Re-download parameters if they already exist but don't have correct sums
Alias Sasha->sasha in release-notes.py to avoid authors.md split
Jack Grigg (4):
Improvements to code comments
Adjust documentation
z_mergetoaddress: Include Sapling output padding in size estimate
test: Fix copyright years in new RPC tests
teor (1):
Replace custom zcash_script TxInputStream with RustDataStream

View File

@ -0,0 +1,467 @@
Notable changes
===============
RPC Changes
-----------
- `getdeprecationinfo` has several changes:
- It now returns additional information about currently deprecated and
disabled features.
- A new `end_of_service` object that contains both the block height for
end-of-service and the estimated time that the end-of-service halt is
expected to occur. Note that this time is just an approximation and
will change over time as the end-of-service block height approaches,
due to the variability in block times. The
`end_of_service` object is intended to replace the `deprecationheight`
field; see the [Deprecations](#deprecations) section for additional detail.
- This RPC method was previously only available for mainnet nodes; it is now
also available for testnet and regtest nodes, in which case it does not
return end-of-service halt information (as testnet and regtest nodes do not
have an end-of-service halt feature.)
- Several `z_sendmany`, `z_shieldcoinbase` and `z_mergetoaddress` failures have
moved from synchronous to asynchronous, so while you should already be
checking the async operation status, there are now more cases that may trigger
failure at that stage.
- The `AllowRevealedRecipients` privacy policy is now required in order to choose a
transparent change address for a transaction. This will only occur when the wallet
is unable to construct the transaction without selecting funds from the transparent
pool, so the impact of this change is that for such transactions, the user must specify
`AllowFullyTransparent`.
- The `z_shieldcoinbase` RPC method now supports an optional memo.
- The `z_shieldcoinbase` and `z_mergetoaddress` RPC methods now support an
optional privacy policy.
- The `z_mergetoaddress` RPC method can now merge _to_ UAs and can also send
between different shielded pools (when `AllowRevealedAmounts` is specified).
- The `estimatepriority` RPC call has been removed.
- The `priority_delta` argument to the `prioritisetransaction` RPC call now has
no effect and must be set to a dummy value (0 or null).
Changes to Transaction Fee Selection
------------------------------------
- The zcashd wallet now uses the conventional transaction fee calculated according
to [ZIP 317](https://zips.z.cash/zip-0317) by default. This conventional fee
will be used unless a fee is explicitly specified in an RPC call, or for the
wallet's legacy transaction creation APIs (`sendtoaddress`, `sendmany`, and
`fundrawtransaction`) when the `-paytxfee` option is set.
- The `-mintxfee` and `-sendfreetransactions` options have been removed. These
options previously instructed the legacy transaction creation APIs to increase
fees to this limit and to use a zero fee for "small" transactions that spend
"old" inputs, respectively. They will now cause a warning on node startup if
used.
Changes to Block Template Construction
--------------------------------------
We now use a new block template construction algorithm documented in
[ZIP 317](https://zips.z.cash/zip-0317#recommended-algorithm-for-block-template-construction).
- This algorithm no longer favours transactions that were previously considered
"high priority" because they spent older inputs. The `-blockprioritysize` config
option, which configured the portion of the block reserved for these transactions,
has been removed and will now cause a warning if used.
- The `-blockminsize` option, which configured the size of a portion of the block
to be filled regardless of transaction fees or priority, has also been removed
and will cause a warning if used.
- A `-blockunpaidactionlimit` option has been added to control the limit on
"unpaid actions" that will be accepted in a block for transactions paying less
than the ZIP 317 fee. This defaults to 50.
Change to Transaction Relay Policy
----------------------------------
The allowance for "free transactions" in mempool acceptance and relay has been
removed. All transactions must pay at least the minimum relay threshold, currently
100 zatoshis per 1000 bytes up to a maximum of 1000 zatoshis, in order to be
accepted and relayed. (Individual nodes can change this using `-minrelaytxfee`
but in practice the network default needs to be adhered to.) This policy is under
review and [might be made stricter](https://zips.z.cash/zip-0317#transaction-relaying);
if that happens then the ZIP 317 conventional fee will still be sufficient for
mempool acceptance and relay.
Removal of Priority Estimation
------------------------------
Estimation of "priority" needed for a transaction to be included within a target
number of blocks, and the associated `estimatepriority` RPC call, have been
removed. The format for `fee_estimates.dat` has also changed to no longer save
these priority estimates. It will automatically be converted to the new format
which is not readable by prior versions of the software. The `-txconfirmtarget`
config option is now obsolete and has also been removed. It will cause a
warning if used.
[Deprecations](https://zcash.github.io/zcash/user/deprecation.html)
--------------
The following features have been deprecated, but remain available by default.
These features may be disabled by setting `-allowdeprecated=none`. 18 weeks
after this release, these features will be disabled by default and the following
flags to `-allowdeprecated` will be required to permit their continued use:
- `deprecationinfo_deprecationheight`: The `deprecationheight` field of
`getdeprecationinfo` has been deprecated and replaced by the `end_of_service`
object.
Changelog
=========
ANISH M (3):
use SOURCES_PATH instead of local git DEPENDS_SOURCES_DIR
report the git-derived version in metrics screen
Update src/metrics.cpp by removing v prefix.
Alex Morcos (14):
Refactor CreateNewBlock to be a method of the BlockAssembler class
FIX: Account for txs already added to block in addPriorityTxs
FIX: correctly measure size of priority block
[rpc] Remove estimatepriority.
[mining] Remove -blockprioritysize.
[debug] Change -printpriority option
[cleanup] Remove estimatePriority
[rpc] sendrawtransaction no longer bypasses minRelayTxFee
[test] Remove priority from tests
[rpc] Remove priority information from mempool RPC calls
[rpc] Remove priorityDelta from prioritisetransaction
[cleanup] Remove coin age priority completely.
Allow setting minrelaytxfee to 0
Update example zcash.conf
Charlie O'Keefe (1):
Add reference in Makefile.am to zip317.h
Daira Emma Hopwood (38):
Remove unnecessary #include.
Adjust indentation to be consistent without changing existing code.
Repair show_help RPC test.
Fix bit-rotted code in miner tests.
Implement ZIP 317 computations.
`cargo update`
Add audits for updates to futures-* 0.3.28 and redjubjub 0.7.0.
Add `examine`, a wrapper around `std::visit` that reverses the arguments.
Use the new `examine` macro to replace all instances of `std::visit(match {...}, specimen)`, improving code readability.
Refactoring to avoid duplicated code.
Refactoring to avoid an unnecessary temporary.
Refactor that avoids using exceptions for local flow control and is simpler.
Correct the documentation of `-rpcconnect` in the example `zcash.conf`. `-rpcconnect` is only used by `zcash-cli`.
Change ZIP 401 mempool limiting to use conventional fee.
Change ZIP 401 mempool limiting to use constants decided in zcash/zips#565.
Warn on node startup if the removed `-blockprioritysize` option is set to a non-zero value.
Log (at the mempool DEBUG level) when a transaction cannot be accepted to the mempool because its modified fee is below the minimum relay fee.
Fix the dust threshold rate to three times 100 zats/1000 bytes. (We express it that way rather than 300 zats/1000 bytes, because the threshold is always rounded to an integer and then multiplied by 3.)
Fix some messages, comments, and documentation that: * used "fee" to mean "fee rate", "kB" to mean 1000 bytes, "satoshis" to mean zatoshis, or that incorrectly used "BTC" in place of "ZEC"; * used obsolete concepts such as "zero fee" or "free transaction"; or * did not accurately document their applicability.
Fix tests that failed due to the minimum relay fee being enforced.
Fix miner_tests btest.
Fix mempool_packages and prioritisetransaction RPC tests.
Implement `GetUnpaidActionCount` and `GetWeightRatio` for ZIP 317.
ZIP 317 block construction algorithm. This breaks tests which are repaired in subsequent commits.
Add assertions that `GetRandInt*` functions are called with `nMax >= 0`. All existing uses have been checked to ensure they are consistent with this assertion.
Repair `miner_tests.py` btest.
Repair some RPC tests.
mergetoaddress_helper.py: Use `generate_and_check` helper to mine a block and make sure that it contains the expected number of transactions.
mergetoaddress_helper.py: use Decimal for amounts and integers otherwise.
Remove the implementation of score-based block template construction and the `-blockminsize` option.
Add a `-blockunpaidactionlimit` config option to configure the per-block limit on unpaid actions for ZIP 317 block template construction.
miner_tests.cpp improvements.
random.h documentation improvements.
Fix/suppress clippy warnings.
Improve the `show_help.py` RPC test to include `-help-debug` (needed to test the help change in the next commit).
Improve `-printpriority` output to log the modified fee, conventional fee, size, logical action count, and unpaid action count. This reflects the changes to use the ZIP 317 block construction algorithm and de-emphasise fee rate.
Fix a build regression if `--disable-mining` is selected.
Fix a build regression if both `--disable-mining` and `--disable-wallet` are selected.
Daira Hopwood (9):
Use a more recent URL format for GitHub release archives.
Clarify that patches to a dependency are under the same license as that dependency.
Update copyright date and email for tl_expected.
Use the same convention for the tl_expected download files as for native_cctools
Refactoring to split the weighted tx tree out of mempool_limit.{cpp,h} and make it more reusable.
Minor optimization to weighted_map::remove
This PR doesn't bring in any ZIP 317 changes yet
Another minor optimization
Change spelling of prioritisation in an error message
DeckerSU (1):
InsertBlockIndex: pass const reference on hash, instead of hash
Dimitris Apostolou (3):
Fix typo
Update documentation link
Fix typos
Evan Klitzke (1):
Fix automake warnings when running autogen.sh
Greg Pfeil (89):
Show in-progress tests when rpc-tests is interrupted
Make extra newline more explicit
Apply suggestions from code review
Make pool selection order more flexible
Simplify diversifier_index_t handling
Update tests for async z_sendmany
Limit UTXOs
Some orchard fixes for wallet_tx_builder
Return anchorHeight from ResolveInputsAndPayments
Refactoring InsufficientFundsError
Ensure we dont make Orchard change pre-NU5
Test updates for z_sendmany WalletTxBuilder changes
Fix weakened privacy policy for transparent change
Fix some overly-strict privacy policies in btest
Apply suggestions from code review
Unify requireTransparentCoinbase handling
Rename `Get*Balance` to `Get*Total`
Remove changes that arent needed by z_sendmany
Improve GetRequiredPrivacyPolicy
Add release notes for (a)sync z_sendmany changes
Assert that we get a change addr for any selector
Dont pass PrivacyPolicy to selector constructor
Address comments on WalletTxBuilder introduction
Make RPC test output more deterministic
Update WalletTxBuilder based on review
Clarify `AddressResolutionError`
Dont permit user-provided “internal” payments
Address WalletTxBuilder PR feedback
Ensure that a WalletTxBuilder tx balances
Additional z_sendmany test cases
Address WalletTxBuilder review feedback
Apply suggestions for WalletTxBuilder from code review
Simplify SelectOVKs
Have GetRecipientPools return a copy
Remove CWallet member from WalletTxBuilder
Improve taddr no-memo check
Update src/wallet/rpcwallet.cpp
Lock notes (except Orchard) in wallet_tx_builder
Improve Doxygen for note locking
Require `AllowRevealedRecipients` for t-change
Update release-notes for transparent change restriction
Correct EditorConfig for Makefiles
Split C++ generated from Rust into own lib
Simplify canResolveOrchard logic
Support ZIP 317 fees in the zcashd wallet
Correct change handling for ZIP 317 fees
Address review feedback re: ZIP 317 in wallet
Revert "Add `AllowRevealedSenders` to fix `mempool_nu_activation.py`"
Eliminate LegacyCompatZTXOSelector cycle
Simplify client.cpp
Enrich zcash-cli arg conversion
Better messages on client-side zcash-cli errors
Fix accidental reversion of #6409
Remove unnecessary explicit privacy policy
Use examine instead of std::visit
Simplify some vector initialization
Fix edge case revealed by #6409
Rename Arg* to Param
Adjust wallet absurd fee check for ZIP 317
Address review feedback for ZIP 317 fees in wallet
Address more ZIP 317 fee feedback
Fix zcash-cli crash when printing help message
Use null as the ZIP 317 fee sentinel instead of -1
Add z_sendmany RPC examples with fee field
Have z_shieldcoinbase use WalletTxBuilder
Address review feedback on z_shieldcoinbase
Fix an incorrect error message in a test
Minor improvements to z_shieldcoinbase
Support ZIP 317 fees for legacy wallet operations
Remove `-mintxfee` config option
Address review comments re: legacy wallet ZIP 317
Remove `-txconfirmtarget` config option
Restore previous `-maxtxfee` bound
Correct -maxtxfee lower bound diagnostic messages
WalletTxBuilder support for net payments
fixup! WalletTxBuilder support for net payments
Dont test “Insufficient funds” for `z_shieldcoinbase`
Update z_mergetoaddress to use WalletTxBuilder
Many z_mergetoaddress updates
Avoid extra copy in ResolveInputsAndPayments
Address z_mergetoaddress review feedback
Allow explicit “no memo” in z_mergetoaddress
Add `memo` parameter to `z_shieldcoinbase`
Support UA destinations in `z_mergetoaddress`
Include Orchard dest in z_mergetoaddress estimation
Update release notes
Support privacyPolicy parameters in zcash-cli
Treat "F6" in RPC calls as if no memo were provided
Support nullable strings in `zcash-cli`
Jack Grigg (92):
rust: Add `cxx` version of `RustStream`
rust: Migrate `OrchardMerkleFrontier` to `cxx`
CreateNewBlock: Leave more space for Orchard shielded coinbase
Retroactively enable ZIP 216 before NU5 activation
rust: Compile with ThinLTO
depends: Update Rust to 1.67.1
depends: Update Clang / libcxx to LLVM 15.0.6
Fix 1.67.1 clippy lints
depends: Evaluate `native_packages` before `packages`
qa: Fix year in postponement lines
qa: Fix `google/leveldb` tag parsing in `updatecheck.py`
qa: Handle commit IDs correctly to `updatecheck.py`
depends: `cxx 1.0.91`
depends: `native_zstd 1.5.4`
`cargo vet regenerate imports`
qa: Import Rust crate audits from ISRG
`cargo update`
qa: Postpone LevelDB 1.23
book: Add page with release support details and EoS halt heights
Update release support book page in release process
depends: Update Rust to 1.68.0
qa: Replace Firefox audits with aggregated Mozilla audits in registry
qa: Import Rust crate audits from ChromeOS
Move `fEnableAddrTypeField` outside `ENABLE_WALLET`
`s/string/std::string` in `init.cpp`
CI: Check that the PR branch has a sufficiently recent base for Tekton
CI: Fix permissions for Checks workflow
Add `CChainParams::RustNetwork`
wallet: Consolidate `CWalletTx` Sapling output decryption methods
wallet: Use `zcash_note_encryption` in `CWalletTx::DecryptSaplingNote`
wallet: Use `CWalletTx::DecryptSaplingNote` in more places
wallet: Use `zcash_note_encryption` in `CWallet::FindMySaplingNotes`
wallet: Use `zcash_note_encryption` in `CWalletTx::RecoverSaplingNote`
wallet: Remove recipient-side `SaplingNotePlaintext::decrypt`
CI: Fetch all history for "recent base" check
CI: Include explicit `failure()` condition in "recent base" check
CI: Use `github.head_ref` instead of `HEAD` for "recent base" check
book: Add End-of-Support heights for v5.3.3 and v5.4.2
CI: Remove most usages of `actions-rs` actions
CI: Migrate to `cargo-vet 0.5`
cargo vet prune
CI: Provide `write` permission for `pull-requests`
CI: Check out both the base and PR branches for "recent base" check
Migrate to `zcash_primitives 0.10`
depends: `cxx 1.0.92`
depends: CMake 3.26.0
depends: Postpone CCache updates again
cargo update
Use `RandomInvalidOutputDescription()` everywhere it makes sense
Merge most `cxx::bridge` definitions into a single bridge
Expand `CppStream` to cover all `Stream`-like C++ types
Migrate `OrchardMerkleFrontier` to use new `CppStream` APIs
build: Tolerate split LLVM versions
Use `cxx` bridge for all Orchard bundle inspection and validation
gtest: Minor improvements to `CoinsTests`
rust: Migrate Ed25519 FFI to `cxx`
Tell `cargo-vet` to ignore patched dependencies
cargo-vet: Regenerate imports
cargo-vet: Switch to Google's aggregated audits
More crate audits
Migrate to published `orchard 0.4`
qa: Fix update checker to handle `native_clang` version format
depends: CMake 3.26.3
depends: Rust 1.68.2
depends: `native_zstd 1.5.5`
depends: `cxx 1.0.94`
qa: Postpone dependencies we aren't updating
cargo update
Use published `zcash_primitives 0.11` and `zcash_proofs 0.11`
test: Avoid generating a chain fork in `mempool_packages` RPC test
test: Sync blocks before invalidating them in `mempool_packages` RPC test
depends: Boost 1.82.0
qa: Postpone Clang 16.0.2
cargo update
depends: Rust 1.69.0
make-release.py: Versioning changes for 5.5.0-rc1.
make-release.py: Updated manpages for 5.5.0-rc1.
make-release.py: Updated release notes and changelog for 5.5.0-rc1.
make-release.py: Updated book for 5.5.0-rc1.
CI: Add a GitHub Actions workflow that builds zcashd for platform tiers
CI: Add caching to build workflow
depends: Ensure `native_cxxbridge` source is fetched for `rustcxx`
depends: Don't build BDB utilities on macOS
depends: Remove Fortran and LLDB components from staged `native_clang`
CI: Build with `--with-libs`, `--disable-wallet`, and `--disable-mining`
Fix `make-release.py` to write correct halt height into book
Update v5.5.0 release notes
build: Fix MinGW cross-compilation with `--disable-wallet`
make-release.py: Versioning changes for 5.5.0-rc2.
make-release.py: Updated manpages for 5.5.0-rc2.
make-release.py: Updated release notes and changelog for 5.5.0-rc2.
make-release.py: Updated book for 5.5.0-rc2.
Kris Nuttycombe (29):
Fix potential path or symlink traversal
Add a docker-compose.yml for prometheus/grafana metrics collection.
Apply suggestions from code review
Make all CCoinsView methods pure-virtual.
Remove `FakeCoinsViewDB` as it is identical to `CCoinsViewDummy`
Postpone dependency updates.
make-release.py: Versioning changes for 5.3.3.
make-release.py: Updated manpages for 5.3.3.
make-release.py: Updated release notes and changelog for 5.3.3.
Set urgency to `high` in Debian changelog.
Add information about deprecated features to `deprecationinfo` results.
Apply suggestions from code review
Add a wallet-aware transaction builder.
Use WalletTxBuilder for z_sendmany
Allow selectors to require transparent coinbase
Fix a longstanding zcashd build warning
Fix `make distclean` to recursively remove `rust/gen`
Improve const-ness of CChainParams retrieval by network ID
Explicitly provide CChainParams to `EnforceNodeDeprecation`
revert broken "safe extract" functionality in golden tests.
Refactor RPC privacyPolicy handling
Update to use the `ff 0.13` dependency stack.
Add `AllowRevealedSenders` to fix `mempool_nu_activation.py`
Calculate convential fee in `CreateTransaction` before stripping sigs.
Fix formating of money strings.
Use the conventional fee for prioritisation in prioritisetransactions.py
`z_sendmany` now accepts 6 parameters, not 5.
make-release.py: Versioning changes for 5.5.0-rc3.
make-release.py: Updated manpages for 5.5.0-rc3.
Luke Dashjr (1):
RPC/Mining: Restore API compatibility for prioritisetransaction
Marco Falke (1):
wallet: Remove sendfree
Marius Kjærstad (2):
New checkpoint at block 2000000 for mainnet
Update estimated number of transactions due to Blossom NU
Miodrag Popović (2):
Fix for broken cross-build to Windows target on Ubuntu 22.04 and Debian 11
Update depends/hosts/mingw32.mk to use posix variant library path
Sean Bowe (1):
Add additional audits.
Suhas Daftuar (4):
Add tags to mempool's mapTx indices
Fix mempool limiting for PrioritiseTransaction
Use fee deltas for determining mempool acceptance
Remove GetMinRelayFee
TrellixVulnTeam (1):
Adding tarfile member sanitization to extractall()
Wladimir J. van der Laan (1):
Merge #7730: Remove priority estimation
Yasser Isa (1):
DOWNLOAD_URL dynamic in fetch-params.sh
cronicc (1):
Fix Horizen Security contact email
instagibbs (2):
Gave miner test values constants for less error-prone values.
Corrected values
sasha (6):
Partially revert PR #6384, but only for URLs using a git commit hash
Download `native_cctools` and its `libtapi` to meaningful filenames
Better error messages if proof parameters aren't loaded
Enable the (existing) custom error message for the invalid checksum case
Re-download parameters if they already exist but don't have correct sums
Alias Sasha->sasha in release-notes.py to avoid authors.md split
Jack Grigg (4):
Improvements to code comments
Adjust documentation
z_mergetoaddress: Include Sapling output padding in size estimate
test: Fix copyright years in new RPC tests
teor (2):
Replace custom zcash_script TxInputStream with RustDataStream
Change module comment in bridge.rs to doc comment

View File

@ -0,0 +1,479 @@
Notable changes
===============
RPC Changes
-----------
- `getdeprecationinfo` has several changes:
- It now returns additional information about currently deprecated and
disabled features.
- A new `end_of_service` object that contains both the block height for
end-of-service and the estimated time that the end-of-service halt is
expected to occur. Note that this height is just an approximation and
will change over time as the end-of-service block height approaches,
due to the variability in block times. The
`end_of_service` object is intended to replace the `deprecationheight`
field; see the [Deprecations](#deprecations) section for additional detail.
- This RPC method was previously only available for mainnet nodes; it is now
also available for testnet and regtest nodes, in which case it does not
return end-of-service halt information (as testnet and regtest nodes do not
have an end-of-service halt feature.)
- Several `z_sendmany`, `z_shieldcoinbase` and `z_mergetoaddress` failures have
moved from synchronous to asynchronous, so while you should already be
checking the async operation status, there are now more cases that may trigger
failure at that stage.
- The `AllowRevealedRecipients` privacy policy is now required in order to choose a
transparent change address for a transaction. This will only occur when the wallet
is unable to construct the transaction without selecting funds from the transparent
pool, so the impact of this change is that for such transactions, the user must specify
`AllowFullyTransparent`.
- The `z_shieldcoinbase` RPC method now supports an optional memo.
- The `z_shieldcoinbase` and `z_mergetoaddress` RPC methods now support an
optional privacy policy.
- The `z_mergetoaddress` RPC method can now merge _to_ UAs and can also send
between different shielded pools (when `AllowRevealedAmounts` is specified).
- The `estimatepriority` RPC call has been removed.
- The `priority_delta` argument to the `prioritisetransaction` RPC call now has
no effect and must be set to a dummy value (0 or null).
Changes to Transaction Fee Selection
------------------------------------
- The zcashd wallet now uses the conventional transaction fee calculated according
to [ZIP 317](https://zips.z.cash/zip-0317) by default. This conventional fee
will be used unless a fee is explicitly specified in an RPC call, or for the
wallet's legacy transaction creation APIs (`sendtoaddress`, `sendmany`, and
`fundrawtransaction`) when the `-paytxfee` option is set.
- The `-mintxfee` and `-sendfreetransactions` options have been removed. These
options previously instructed the legacy transaction creation APIs to increase
fees to this limit and to use a zero fee for "small" transactions that spend
"old" inputs, respectively. They will now cause a warning on node startup if
used.
Changes to Block Template Construction
--------------------------------------
We now use a new block template construction algorithm documented in
[ZIP 317](https://zips.z.cash/zip-0317#recommended-algorithm-for-block-template-construction).
- This algorithm no longer favours transactions that were previously considered
"high priority" because they spent older inputs. The `-blockprioritysize` config
option, which configured the portion of the block reserved for these transactions,
has been removed and will now cause a warning if used.
- The `-blockminsize` option, which configured the size of a portion of the block
to be filled regardless of transaction fees or priority, has also been removed
and will cause a warning if used.
- A `-blockunpaidactionlimit` option has been added to control the limit on
"unpaid actions" that will be accepted in a block for transactions paying less
than the ZIP 317 fee. This defaults to 50.
Change to Transaction Relay Policy
----------------------------------
The allowance for "free transactions" in mempool acceptance and relay has been
removed. All transactions must pay at least the minimum relay threshold, currently
100 zatoshis per 1000 bytes up to a maximum of 1000 zatoshis, in order to be
accepted and relayed. (Individual nodes can change this using `-minrelaytxfee`
but in practice the network default needs to be adhered to.) This policy is under
review and [might be made stricter](https://zips.z.cash/zip-0317#transaction-relaying);
if that happens then the ZIP 317 conventional fee will still be sufficient for
mempool acceptance and relay.
Removal of Priority Estimation
------------------------------
Estimation of "priority" needed for a transaction to be included within a target
number of blocks, and the associated `estimatepriority` RPC call, have been
removed. The format for `fee_estimates.dat` has also changed to no longer save
these priority estimates. It will automatically be converted to the new format
which is not readable by prior versions of the software. The `-txconfirmtarget`
config option is now obsolete and has also been removed. It will cause a
warning if used.
[Deprecations](https://zcash.github.io/zcash/user/deprecation.html)
--------------
The following features have been deprecated, but remain available by default.
These features may be disabled by setting `-allowdeprecated=none`. 18 weeks
after this release, these features will be disabled by default and the following
flags to `-allowdeprecated` will be required to permit their continued use:
- `deprecationinfo_deprecationheight`: The `deprecationheight` field of
`getdeprecationinfo` has been deprecated and replaced by the `end_of_service`
object.
Changelog
=========
ANISH M (3):
use SOURCES_PATH instead of local git DEPENDS_SOURCES_DIR
report the git-derived version in metrics screen
Update src/metrics.cpp by removing v prefix.
Alex Morcos (14):
Refactor CreateNewBlock to be a method of the BlockAssembler class
FIX: Account for txs already added to block in addPriorityTxs
FIX: correctly measure size of priority block
[rpc] Remove estimatepriority.
[mining] Remove -blockprioritysize.
[debug] Change -printpriority option
[cleanup] Remove estimatePriority
[rpc] sendrawtransaction no longer bypasses minRelayTxFee
[test] Remove priority from tests
[rpc] Remove priority information from mempool RPC calls
[rpc] Remove priorityDelta from prioritisetransaction
[cleanup] Remove coin age priority completely.
Allow setting minrelaytxfee to 0
Update example zcash.conf
Charlie O'Keefe (1):
Add reference in Makefile.am to zip317.h
Daira Emma Hopwood (38):
Remove unnecessary #include.
Adjust indentation to be consistent without changing existing code.
Repair show_help RPC test.
Fix bit-rotted code in miner tests.
Implement ZIP 317 computations.
`cargo update`
Add audits for updates to futures-* 0.3.28 and redjubjub 0.7.0.
Add `examine`, a wrapper around `std::visit` that reverses the arguments.
Use the new `examine` macro to replace all instances of `std::visit(match {...}, specimen)`, improving code readability.
Refactoring to avoid duplicated code.
Refactoring to avoid an unnecessary temporary.
Refactor that avoids using exceptions for local flow control and is simpler.
Correct the documentation of `-rpcconnect` in the example `zcash.conf`. `-rpcconnect` is only used by `zcash-cli`.
Change ZIP 401 mempool limiting to use conventional fee.
Change ZIP 401 mempool limiting to use constants decided in zcash/zips#565.
Warn on node startup if the removed `-blockprioritysize` option is set to a non-zero value.
Log (at the mempool DEBUG level) when a transaction cannot be accepted to the mempool because its modified fee is below the minimum relay fee.
Fix the dust threshold rate to three times 100 zats/1000 bytes. (We express it that way rather than 300 zats/1000 bytes, because the threshold is always rounded to an integer and then multiplied by 3.)
Fix some messages, comments, and documentation that: * used "fee" to mean "fee rate", "kB" to mean 1000 bytes, "satoshis" to mean zatoshis, or that incorrectly used "BTC" in place of "ZEC"; * used obsolete concepts such as "zero fee" or "free transaction"; or * did not accurately document their applicability.
Fix tests that failed due to the minimum relay fee being enforced.
Fix miner_tests btest.
Fix mempool_packages and prioritisetransaction RPC tests.
Implement `GetUnpaidActionCount` and `GetWeightRatio` for ZIP 317.
ZIP 317 block construction algorithm. This breaks tests which are repaired in subsequent commits.
Add assertions that `GetRandInt*` functions are called with `nMax >= 0`. All existing uses have been checked to ensure they are consistent with this assertion.
Repair `miner_tests.py` btest.
Repair some RPC tests.
mergetoaddress_helper.py: Use `generate_and_check` helper to mine a block and make sure that it contains the expected number of transactions.
mergetoaddress_helper.py: use Decimal for amounts and integers otherwise.
Remove the implementation of score-based block template construction and the `-blockminsize` option.
Add a `-blockunpaidactionlimit` config option to configure the per-block limit on unpaid actions for ZIP 317 block template construction.
miner_tests.cpp improvements.
random.h documentation improvements.
Fix/suppress clippy warnings.
Improve the `show_help.py` RPC test to include `-help-debug` (needed to test the help change in the next commit).
Improve `-printpriority` output to log the modified fee, conventional fee, size, logical action count, and unpaid action count. This reflects the changes to use the ZIP 317 block construction algorithm and de-emphasise fee rate.
Fix a build regression if `--disable-mining` is selected.
Fix a build regression if both `--disable-mining` and `--disable-wallet` are selected.
Daira Hopwood (10):
Use a more recent URL format for GitHub release archives.
Clarify that patches to a dependency are under the same license as that dependency.
Update copyright date and email for tl_expected.
Use the same convention for the tl_expected download files as for native_cctools
Refactoring to split the weighted tx tree out of mempool_limit.{cpp,h} and make it more reusable.
Minor optimization to weighted_map::remove
This PR doesn't bring in any ZIP 317 changes yet
Another minor optimization
Change spelling of prioritisation in an error message
Correction "height" -> "time" in release notes
DeckerSU (1):
InsertBlockIndex: pass const reference on hash, instead of hash
Dimitris Apostolou (3):
Fix typo
Update documentation link
Fix typos
Evan Klitzke (1):
Fix automake warnings when running autogen.sh
Greg Pfeil (89):
Show in-progress tests when rpc-tests is interrupted
Make extra newline more explicit
Apply suggestions from code review
Make pool selection order more flexible
Simplify diversifier_index_t handling
Update tests for async z_sendmany
Limit UTXOs
Some orchard fixes for wallet_tx_builder
Return anchorHeight from ResolveInputsAndPayments
Refactoring InsufficientFundsError
Ensure we dont make Orchard change pre-NU5
Test updates for z_sendmany WalletTxBuilder changes
Fix weakened privacy policy for transparent change
Fix some overly-strict privacy policies in btest
Apply suggestions from code review
Unify requireTransparentCoinbase handling
Rename `Get*Balance` to `Get*Total`
Remove changes that arent needed by z_sendmany
Improve GetRequiredPrivacyPolicy
Add release notes for (a)sync z_sendmany changes
Assert that we get a change addr for any selector
Dont pass PrivacyPolicy to selector constructor
Address comments on WalletTxBuilder introduction
Make RPC test output more deterministic
Update WalletTxBuilder based on review
Clarify `AddressResolutionError`
Dont permit user-provided “internal” payments
Address WalletTxBuilder PR feedback
Ensure that a WalletTxBuilder tx balances
Additional z_sendmany test cases
Address WalletTxBuilder review feedback
Apply suggestions for WalletTxBuilder from code review
Simplify SelectOVKs
Have GetRecipientPools return a copy
Remove CWallet member from WalletTxBuilder
Improve taddr no-memo check
Update src/wallet/rpcwallet.cpp
Lock notes (except Orchard) in wallet_tx_builder
Improve Doxygen for note locking
Require `AllowRevealedRecipients` for t-change
Update release-notes for transparent change restriction
Correct EditorConfig for Makefiles
Split C++ generated from Rust into own lib
Simplify canResolveOrchard logic
Support ZIP 317 fees in the zcashd wallet
Correct change handling for ZIP 317 fees
Address review feedback re: ZIP 317 in wallet
Revert "Add `AllowRevealedSenders` to fix `mempool_nu_activation.py`"
Eliminate LegacyCompatZTXOSelector cycle
Simplify client.cpp
Enrich zcash-cli arg conversion
Better messages on client-side zcash-cli errors
Fix accidental reversion of #6409
Remove unnecessary explicit privacy policy
Use examine instead of std::visit
Simplify some vector initialization
Fix edge case revealed by #6409
Rename Arg* to Param
Adjust wallet absurd fee check for ZIP 317
Address review feedback for ZIP 317 fees in wallet
Address more ZIP 317 fee feedback
Fix zcash-cli crash when printing help message
Use null as the ZIP 317 fee sentinel instead of -1
Add z_sendmany RPC examples with fee field
Have z_shieldcoinbase use WalletTxBuilder
Address review feedback on z_shieldcoinbase
Fix an incorrect error message in a test
Minor improvements to z_shieldcoinbase
Support ZIP 317 fees for legacy wallet operations
Remove `-mintxfee` config option
Address review comments re: legacy wallet ZIP 317
Remove `-txconfirmtarget` config option
Restore previous `-maxtxfee` bound
Correct -maxtxfee lower bound diagnostic messages
WalletTxBuilder support for net payments
fixup! WalletTxBuilder support for net payments
Dont test “Insufficient funds” for `z_shieldcoinbase`
Update z_mergetoaddress to use WalletTxBuilder
Many z_mergetoaddress updates
Avoid extra copy in ResolveInputsAndPayments
Address z_mergetoaddress review feedback
Allow explicit “no memo” in z_mergetoaddress
Add `memo` parameter to `z_shieldcoinbase`
Support UA destinations in `z_mergetoaddress`
Include Orchard dest in z_mergetoaddress estimation
Update release notes
Support privacyPolicy parameters in zcash-cli
Treat "F6" in RPC calls as if no memo were provided
Support nullable strings in `zcash-cli`
Jack Grigg (92):
rust: Add `cxx` version of `RustStream`
rust: Migrate `OrchardMerkleFrontier` to `cxx`
CreateNewBlock: Leave more space for Orchard shielded coinbase
Retroactively enable ZIP 216 before NU5 activation
rust: Compile with ThinLTO
depends: Update Rust to 1.67.1
depends: Update Clang / libcxx to LLVM 15.0.6
Fix 1.67.1 clippy lints
depends: Evaluate `native_packages` before `packages`
qa: Fix year in postponement lines
qa: Fix `google/leveldb` tag parsing in `updatecheck.py`
qa: Handle commit IDs correctly to `updatecheck.py`
depends: `cxx 1.0.91`
depends: `native_zstd 1.5.4`
`cargo vet regenerate imports`
qa: Import Rust crate audits from ISRG
`cargo update`
qa: Postpone LevelDB 1.23
book: Add page with release support details and EoS halt heights
Update release support book page in release process
depends: Update Rust to 1.68.0
qa: Replace Firefox audits with aggregated Mozilla audits in registry
qa: Import Rust crate audits from ChromeOS
Move `fEnableAddrTypeField` outside `ENABLE_WALLET`
`s/string/std::string` in `init.cpp`
CI: Check that the PR branch has a sufficiently recent base for Tekton
CI: Fix permissions for Checks workflow
Add `CChainParams::RustNetwork`
wallet: Consolidate `CWalletTx` Sapling output decryption methods
wallet: Use `zcash_note_encryption` in `CWalletTx::DecryptSaplingNote`
wallet: Use `CWalletTx::DecryptSaplingNote` in more places
wallet: Use `zcash_note_encryption` in `CWallet::FindMySaplingNotes`
wallet: Use `zcash_note_encryption` in `CWalletTx::RecoverSaplingNote`
wallet: Remove recipient-side `SaplingNotePlaintext::decrypt`
CI: Fetch all history for "recent base" check
CI: Include explicit `failure()` condition in "recent base" check
CI: Use `github.head_ref` instead of `HEAD` for "recent base" check
book: Add End-of-Support heights for v5.3.3 and v5.4.2
CI: Remove most usages of `actions-rs` actions
CI: Migrate to `cargo-vet 0.5`
cargo vet prune
CI: Provide `write` permission for `pull-requests`
CI: Check out both the base and PR branches for "recent base" check
Migrate to `zcash_primitives 0.10`
depends: `cxx 1.0.92`
depends: CMake 3.26.0
depends: Postpone CCache updates again
cargo update
Use `RandomInvalidOutputDescription()` everywhere it makes sense
Merge most `cxx::bridge` definitions into a single bridge
Expand `CppStream` to cover all `Stream`-like C++ types
Migrate `OrchardMerkleFrontier` to use new `CppStream` APIs
build: Tolerate split LLVM versions
Use `cxx` bridge for all Orchard bundle inspection and validation
gtest: Minor improvements to `CoinsTests`
rust: Migrate Ed25519 FFI to `cxx`
Tell `cargo-vet` to ignore patched dependencies
cargo-vet: Regenerate imports
cargo-vet: Switch to Google's aggregated audits
More crate audits
Migrate to published `orchard 0.4`
qa: Fix update checker to handle `native_clang` version format
depends: CMake 3.26.3
depends: Rust 1.68.2
depends: `native_zstd 1.5.5`
depends: `cxx 1.0.94`
qa: Postpone dependencies we aren't updating
cargo update
Use published `zcash_primitives 0.11` and `zcash_proofs 0.11`
test: Avoid generating a chain fork in `mempool_packages` RPC test
test: Sync blocks before invalidating them in `mempool_packages` RPC test
depends: Boost 1.82.0
qa: Postpone Clang 16.0.2
cargo update
depends: Rust 1.69.0
make-release.py: Versioning changes for 5.5.0-rc1.
make-release.py: Updated manpages for 5.5.0-rc1.
make-release.py: Updated release notes and changelog for 5.5.0-rc1.
make-release.py: Updated book for 5.5.0-rc1.
CI: Add a GitHub Actions workflow that builds zcashd for platform tiers
CI: Add caching to build workflow
depends: Ensure `native_cxxbridge` source is fetched for `rustcxx`
depends: Don't build BDB utilities on macOS
depends: Remove Fortran and LLDB components from staged `native_clang`
CI: Build with `--with-libs`, `--disable-wallet`, and `--disable-mining`
Fix `make-release.py` to write correct halt height into book
Update v5.5.0 release notes
build: Fix MinGW cross-compilation with `--disable-wallet`
make-release.py: Versioning changes for 5.5.0-rc2.
make-release.py: Updated manpages for 5.5.0-rc2.
make-release.py: Updated release notes and changelog for 5.5.0-rc2.
make-release.py: Updated book for 5.5.0-rc2.
Kris Nuttycombe (33):
Fix potential path or symlink traversal
Add a docker-compose.yml for prometheus/grafana metrics collection.
Apply suggestions from code review
Make all CCoinsView methods pure-virtual.
Remove `FakeCoinsViewDB` as it is identical to `CCoinsViewDummy`
Postpone dependency updates.
make-release.py: Versioning changes for 5.3.3.
make-release.py: Updated manpages for 5.3.3.
make-release.py: Updated release notes and changelog for 5.3.3.
Set urgency to `high` in Debian changelog.
Add information about deprecated features to `deprecationinfo` results.
Apply suggestions from code review
Add a wallet-aware transaction builder.
Use WalletTxBuilder for z_sendmany
Allow selectors to require transparent coinbase
Fix a longstanding zcashd build warning
Fix `make distclean` to recursively remove `rust/gen`
Improve const-ness of CChainParams retrieval by network ID
Explicitly provide CChainParams to `EnforceNodeDeprecation`
revert broken "safe extract" functionality in golden tests.
Refactor RPC privacyPolicy handling
Update to use the `ff 0.13` dependency stack.
Add `AllowRevealedSenders` to fix `mempool_nu_activation.py`
Calculate convential fee in `CreateTransaction` before stripping sigs.
Fix formating of money strings.
Use the conventional fee for prioritisation in prioritisetransactions.py
`z_sendmany` now accepts 6 parameters, not 5.
make-release.py: Versioning changes for 5.5.0-rc3.
make-release.py: Updated manpages for 5.5.0-rc3.
make-release.py: Updated release notes and changelog for 5.5.0-rc3.
make-release.py: Updated book for 5.5.0-rc3.
make-release.py: Versioning changes for 5.5.0.
make-release.py: Updated manpages for 5.5.0.
Luke Dashjr (1):
RPC/Mining: Restore API compatibility for prioritisetransaction
Marco Falke (1):
wallet: Remove sendfree
Marius Kjærstad (2):
New checkpoint at block 2000000 for mainnet
Update estimated number of transactions due to Blossom NU
Miodrag Popović (2):
Fix for broken cross-build to Windows target on Ubuntu 22.04 and Debian 11
Update depends/hosts/mingw32.mk to use posix variant library path
Sean Bowe (1):
Add additional audits.
Suhas Daftuar (4):
Add tags to mempool's mapTx indices
Fix mempool limiting for PrioritiseTransaction
Use fee deltas for determining mempool acceptance
Remove GetMinRelayFee
TrellixVulnTeam (1):
Adding tarfile member sanitization to extractall()
Wladimir J. van der Laan (1):
Merge #7730: Remove priority estimation
Yasser Isa (1):
DOWNLOAD_URL dynamic in fetch-params.sh
cronicc (1):
Fix Horizen Security contact email
instagibbs (2):
Gave miner test values constants for less error-prone values.
Corrected values
sasha (13):
Partially revert PR #6384, but only for URLs using a git commit hash
Download `native_cctools` and its `libtapi` to meaningful filenames
Better error messages if proof parameters aren't loaded
Enable the (existing) custom error message for the invalid checksum case
Re-download parameters if they already exist but don't have correct sums
Alias Sasha->sasha in release-notes.py to avoid authors.md split
Update `smoke_tests.py` to run against 5.5.0, using `allowdeprecated`
Use more restrictive privacy policies in `smoke_tests.py`
Use default values for `z_mergetoaddress` again
Don't hardcode 0.00001 explicitly
Change output format for `smoke_tests.py`
`DEFAULT_FEE` -> `LEGACY_DEFAULT_FEE` in `smoke_tests.py`
use `AllowRevealedRecipients` in `smoke_tests.py` case 4w
Jack Grigg (4):
Improvements to code comments
Adjust documentation
z_mergetoaddress: Include Sapling output padding in size estimate
test: Fix copyright years in new RPC tests
teor (2):
Replace custom zcash_script TxInputStream with RustDataStream
Change module comment in bridge.rs to doc comment

View File

@ -30,6 +30,8 @@ SERIAL_SCRIPTS = [
# These tests involve enough shielded spends (consuming all CPU
# cores) that we can't run them in parallel.
'mergetoaddress_sapling.py',
'mergetoaddress_ua_nu5.py',
'mergetoaddress_ua_sapling.py',
'wallet_shieldingcoinbase.py',
]
@ -186,6 +188,7 @@ def main():
Help text and arguments for individual test script:''',
formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('--coverage', action='store_true', help='generate a basic coverage report for the RPC interface')
parser.add_argument('--deterministic', '-d', action='store_true', help='make the output a bit closer to deterministic in order to compare runs.')
parser.add_argument('--exclude', '-x', help='specify a comma-seperated-list of scripts to exclude. Do not include the .py extension in the name.')
parser.add_argument('--extended', action='store_true', help='run the extended test suite in addition to the basic tests')
parser.add_argument('--force', '-f', action='store_true', help='run tests even on platforms where they are disabled by default (e.g. windows).')
@ -295,10 +298,11 @@ def main():
config["environment"]["EXEEXT"],
args.jobs,
args.coverage,
args.deterministic,
passon_args)
sys.exit(not all_passed)
def run_tests(test_handler, test_list, src_dir, build_dir, exeext, jobs=1, enable_coverage=False, args=[]):
def run_tests(test_handler, test_list, src_dir, build_dir, exeext, jobs=1, enable_coverage=False, deterministic=False, args=[]):
BOLD = ("","")
if os.name == 'posix':
# primitive formatting on supported
@ -333,22 +337,41 @@ def run_tests(test_handler, test_list, src_dir, build_dir, exeext, jobs=1, enabl
job_queue = test_handler(jobs, tests_dir, test_list, flags)
max_len_name = len(max(test_list, key=len))
results = BOLD[1] + "%s | %s | %s\n\n" % ("TEST".ljust(max_len_name), "PASSED", "DURATION") + BOLD[0]
for _ in range(len(test_list)):
(name, stdout, stderr, passed, duration) = job_queue.get_next()
all_passed = all_passed and passed
time_sum += duration
results = []
try:
for _ in range(len(test_list)):
(name, stdout, stderr, passed, duration) = job_queue.get_next(deterministic)
all_passed = all_passed and passed
time_sum += duration
print('\n' + BOLD[1] + name + BOLD[0] + ":")
print('' if passed else stdout + '\n', end='')
print('' if stderr == '' else 'stderr:\n' + stderr + '\n', end='')
print("Pass: %s%s%s, Duration: %s s\n" % (BOLD[1], passed, BOLD[0], duration))
print('\n' + BOLD[1] + name + BOLD[0] + ":")
print('' if passed else stdout + '\n', end='')
print('' if stderr == '' else 'stderr:\n' + stderr + '\n', end='')
print("Pass: %s%s%s" % (BOLD[1], passed, BOLD[0]), end='')
if deterministic:
print("\n", end='')
else:
print(", Duration: %s s" % (duration,))
results += "%s | %s | %s s\n" % (name.ljust(max_len_name), str(passed).ljust(6), duration)
new_result = "%s | %s" % (name.ljust(max_len_name), str(passed).ljust(6))
if not deterministic:
new_result += (" | %s s" % (duration,))
results.append(new_result)
except (InterruptedError, KeyboardInterrupt):
print('\nThe following tests were running when interrupted:')
for j in job_queue.jobs:
print("", j[0])
print('\n', end='')
results += BOLD[1] + "\n%s | %s | %s s (accumulated)" % ("ALL".ljust(max_len_name), str(all_passed).ljust(6), time_sum) + BOLD[0]
print(results)
print("\nRuntime: %s s" % (int(time.time() - time0)))
header = "%s | PASSED" % ("TEST".ljust(max_len_name),)
footer = "%s | %s" % ("ALL".ljust(max_len_name), str(all_passed).ljust(6))
if not deterministic:
header += " | DURATION"
footer += " | %s s (accumulated)\nRuntime: %s s" % (time_sum, int(time.time() - time0))
print(
BOLD[1] + header + BOLD[0] + "\n\n"
+ "\n".join(sorted(results)) + "\n"
+ BOLD[1] + footer + BOLD[0])
if coverage:
coverage.report_rpc_coverage()
@ -383,7 +406,7 @@ class RPCTestHandler:
stdout=stdout,
stderr=stderr)
def get_next(self):
def get_next(self, deterministic):
while self.num_running < self.num_jobs and self.test_list:
# Add tests
self.num_running += 1
@ -417,7 +440,8 @@ class RPCTestHandler:
self.num_running -= 1
self.jobs.remove(j)
return name, stdout, stderr, passed, int(time.time() - time0)
print('.', end='', flush=True)
if not deterministic:
print('.', end='', flush=True)
class RPCCoverage(object):

View File

@ -50,6 +50,7 @@ class AddressIndexTest(BitcoinTestFramework):
def setup_network(self):
base_args = [
'-minrelaytxfee=0',
'-debug',
'-txindex',
'-experimentalfeatures',

View File

@ -33,6 +33,7 @@ class FinalOrchardRootTest(BitcoinTestFramework):
def setup_network(self, split=False):
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, extra_args=[[
'-minrelaytxfee=0',
'-txindex', # Avoid JSONRPC error: No information available about transaction
'-reindex', # Required due to enabling -txindex
nuparams(NU5_BRANCH_ID, 200),

View File

@ -33,6 +33,7 @@ class FinalSaplingRootTest(BitcoinTestFramework):
def setup_network(self, split=False):
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, extra_args=[[
'-minrelaytxfee=0',
'-txindex', # Avoid JSONRPC error: No information available about transaction
'-reindex', # Required due to enabling -txindex
nuparams(NU5_BRANCH_ID, 210),

View File

@ -425,7 +425,7 @@ class RawTransactionsTest(BitcoinTestFramework):
mSigObj = self.nodes[2].addmultisigaddress(2, [addr1Obj['pubkey'], addr2Obj['pubkey']])
# send 1.2 BTC to msig addr
# send 1.2 ZEC to multisig address
txId = self.nodes[0].sendtoaddress(mSigObj, 1.2)
self.sync_all()
self.nodes[1].generate(1)

View File

@ -17,6 +17,9 @@ In this test we connect to one node over p2p, and test tx requests.
# Use the ComparisonTestFramework with 1 node: only use --testbinary.
class InvalidTxRequestTest(ComparisonTestFramework):
def __init__(self):
super().__init__()
self.additional_args = ['-minrelaytxfee=0']
''' Can either run this test as 1 node with expected answers, or two and compare them.
Change the "outcome" variable from each TestInstance object to only do the comparison. '''

View File

@ -10,9 +10,9 @@ from test_framework.util import (
get_coinbase_address,
fail,
start_nodes,
wait_and_assert_operationid_status,
DEFAULT_FEE
wait_and_assert_operationid_status
)
from test_framework.zip317 import conventional_fee
from decimal import Decimal
from time import sleep
@ -27,11 +27,11 @@ BASE_ARGS = [
class MempoolLimit(BitcoinTestFramework):
def setup_nodes(self):
extra_args = [
BASE_ARGS + ['-mempooltxcostlimit=8000'], # 2 transactions at min cost
BASE_ARGS + ['-mempooltxcostlimit=8000'], # 2 transactions at min cost
BASE_ARGS + ['-mempooltxcostlimit=8000'], # 2 transactions at min cost
BASE_ARGS + ['-mempooltxcostlimit=20000'], # 2 transactions at min cost
BASE_ARGS + ['-mempooltxcostlimit=20000'], # 2 transactions at min cost
BASE_ARGS + ['-mempooltxcostlimit=20000'], # 2 transactions at min cost
# Let node 3 hold one more transaction
BASE_ARGS + ['-mempooltxcostlimit=12000'], # 3 transactions at min cost
BASE_ARGS + ['-mempooltxcostlimit=30000'], # 3 transactions at min cost
]
return start_nodes(self.num_nodes, self.options.tmpdir, extra_args)
@ -67,17 +67,18 @@ class MempoolLimit(BitcoinTestFramework):
zaddr1 = self.nodes[0].z_getnewaddress('sapling')
zaddr2 = self.nodes[0].z_getnewaddress('sapling')
zaddr3 = self.nodes[0].z_getnewaddress('sapling')
fee = conventional_fee(2)
print("Filling mempool...")
opid1 = self.nodes[1].z_sendmany(
get_coinbase_address(self.nodes[1]),
[{"address": zaddr1, "amount": Decimal('10.0') - DEFAULT_FEE}],
1, DEFAULT_FEE, 'AllowRevealedSenders')
[{"address": zaddr1, "amount": Decimal('10.0') - fee}],
1, fee, 'AllowRevealedSenders')
wait_and_assert_operationid_status(self.nodes[1], opid1)
opid2 = self.nodes[2].z_sendmany(
get_coinbase_address(self.nodes[2]),
[{"address": zaddr2, "amount": Decimal('10.0') - DEFAULT_FEE}],
1, DEFAULT_FEE, 'AllowRevealedSenders')
[{"address": zaddr2, "amount": Decimal('10.0') - fee}],
1, fee, 'AllowRevealedSenders')
wait_and_assert_operationid_status(self.nodes[2], opid2)
self.sync_all()
@ -86,8 +87,8 @@ class MempoolLimit(BitcoinTestFramework):
print("Adding one more transaction...")
opid3 = self.nodes[3].z_sendmany(
get_coinbase_address(self.nodes[3]),
[{"address": zaddr3, "amount": Decimal('10.0') - DEFAULT_FEE}],
1, DEFAULT_FEE, 'AllowRevealedSenders')
[{"address": zaddr3, "amount": Decimal('10.0') - fee}],
1, fee, 'AllowRevealedSenders')
wait_and_assert_operationid_status(self.nodes[3], opid3)
# The mempools are no longer guaranteed to be in a consistent state, so we cannot sync
sleep(5)
@ -105,9 +106,9 @@ class MempoolLimit(BitcoinTestFramework):
print("Checking mempool size reset after block mined...")
self.check_mempool_sizes(0)
zaddr4 = self.nodes[0].z_getnewaddress('sapling')
opid4 = self.nodes[0].z_sendmany(zaddr1, [{"address": zaddr4, "amount": Decimal('10.0') - 2*DEFAULT_FEE}], 1)
opid4 = self.nodes[0].z_sendmany(zaddr1, [{"address": zaddr4, "amount": Decimal('10.0') - 2*fee}], 1)
wait_and_assert_operationid_status(self.nodes[0], opid4)
opid5 = self.nodes[0].z_sendmany(zaddr2, [{"address": zaddr4, "amount": Decimal('10.0') - 2*DEFAULT_FEE}], 1)
opid5 = self.nodes[0].z_sendmany(zaddr2, [{"address": zaddr4, "amount": Decimal('10.0') - 2*fee}], 1)
wait_and_assert_operationid_status(self.nodes[0], opid5)
self.sync_all()

View File

@ -30,10 +30,12 @@ class MempoolUpgradeActivationTest(BitcoinTestFramework):
def setup_network(self):
args = [
"-checkmempool",
"-debug=mempool",
"-blockmaxsize=4000",
'-minrelaytxfee=0',
'-checkmempool',
'-debug=mempool',
'-blockmaxsize=4000',
'-allowdeprecated=getnewaddress',
'-allowdeprecated=legacy_privacy',
'-allowdeprecated=z_getnewaddress',
'-allowdeprecated=z_getbalance',
nuparams(BLOSSOM_BRANCH_ID, 200),
@ -61,7 +63,7 @@ class MempoolUpgradeActivationTest(BitcoinTestFramework):
node1_taddr = get_coinbase_address(self.nodes[1])
node0_zaddr = self.nodes[0].z_getnewaddress('sapling')
recipients = [{'address': node0_zaddr, 'amount': Decimal('10')}]
myopid = self.nodes[1].z_sendmany(node1_taddr, recipients, 1, 0, 'AllowRevealedSenders')
myopid = self.nodes[1].z_sendmany(node1_taddr, recipients, 1, 0)
print(wait_and_assert_operationid_status(self.nodes[1], myopid))
self.sync_all()
self.nodes[0].generate(1)

View File

@ -16,18 +16,21 @@ from test_framework.util import (
sync_blocks,
sync_mempools,
)
from test_framework.mininode import COIN
from test_framework.zip317 import conventional_fee
def satoshi_round(amount):
return Decimal(amount).quantize(Decimal('0.00000001'), rounding=ROUND_DOWN)
class MempoolPackagesTest(BitcoinTestFramework):
maxorphantx = 120
def setup_network(self):
base_args = [
"-maxorphantx=1000",
"-relaypriority=0",
"-debug",
"-allowdeprecated=getnewaddress",
'-minrelaytxfee=0',
'-maxorphantx=%d' % (self.maxorphantx,),
'-debug',
'-allowdeprecated=getnewaddress',
]
self.nodes = []
self.nodes.append(start_node(0, self.options.tmpdir, base_args))
@ -59,7 +62,7 @@ class MempoolPackagesTest(BitcoinTestFramework):
vout = utxo[0]['vout']
value = utxo[0]['amount']
fee = Decimal("0.00005")
fee = conventional_fee(2)
# 100 transactions off a confirmed tx should be fine
chain = []
for i in range(100):
@ -74,24 +77,60 @@ class MempoolPackagesTest(BitcoinTestFramework):
descendant_count = 1
descendant_fees = 0
descendant_size = 0
SATOSHIS = 100000000
for x in reversed(chain):
assert_equal(mempool[x]['descendantcount'], descendant_count)
descendant_fees += mempool[x]['fee']
assert_equal(mempool[x]['descendantfees'], SATOSHIS*descendant_fees)
assert_equal(mempool[x]['modifiedfee'], mempool[x]['fee'])
assert_equal(mempool[x]['descendantfees'], descendant_fees * COIN)
descendant_size += mempool[x]['size']
assert_equal(mempool[x]['descendantsize'], descendant_size)
descendant_count += 1
# Check that descendant modified fees includes fee deltas from
# prioritisetransaction
self.nodes[0].prioritisetransaction(chain[-1], 0, 1000)
mempool = self.nodes[0].getrawmempool(True)
descendant_fees = 0
for x in reversed(chain):
descendant_fees += mempool[x]['fee']
assert_equal(mempool[x]['descendantfees'], descendant_fees * COIN + 1000)
# Adding one more transaction on to the chain should fail.
try:
self.chain_transaction(self.nodes[0], txid, vout, value, fee, 1)
except JSONRPCException:
print("too-long-ancestor-chain successfully rejected")
# Check that prioritising a tx before it's added to the mempool works
[blockhash] = self.nodes[0].generate(1)
# Ensure that node 1 receives this block before we invalidate it. Otherwise there
# is a race between node 1 sending a getdata to node 0, and node 0 invalidating
# the block, that when triggered causes:
# - node 0 to ignore node 1's "old" getdata;
# - node 1 to timeout and disconnect node 0;
# - node 0 and node 1 to have different chain tips, so sync_blocks times out.
self.sync_all()
assert_equal(self.nodes[0].getrawmempool(True), {})
self.nodes[0].prioritisetransaction(chain[-1], None, 2000)
self.nodes[0].invalidateblock(blockhash)
mempool = self.nodes[0].getrawmempool(True)
descendant_fees = 0
for x in reversed(chain):
descendant_fees += mempool[x]['fee']
if (x == chain[-1]):
assert_equal(mempool[x]['modifiedfee'], mempool[x]['fee']+satoshi_round(0.00002))
assert_equal(mempool[x]['descendantfees'], descendant_fees * COIN + 2000)
# TODO: check that node1's mempool is as expected
# Reconsider the above block to clear the mempool again before the next test phase.
self.nodes[0].reconsiderblock(blockhash)
assert_equal(self.nodes[0].getbestblockhash(), blockhash)
assert_equal(self.nodes[0].getrawmempool(True), {})
# TODO: test ancestor size limits
# Now test descendant chain limits
@ -106,18 +145,18 @@ class MempoolPackagesTest(BitcoinTestFramework):
for i in range(10):
transaction_package.append({'txid': txid, 'vout': i, 'amount': sent_value})
for i in range(1000):
for i in range(self.maxorphantx):
utxo = transaction_package.pop(0)
try:
(txid, sent_value) = self.chain_transaction(self.nodes[0], utxo['txid'], utxo['vout'], utxo['amount'], fee, 10)
for j in range(10):
transaction_package.append({'txid': txid, 'vout': j, 'amount': sent_value})
if i == 998:
if i == self.maxorphantx-2:
mempool = self.nodes[0].getrawmempool(True)
assert_equal(mempool[parent_transaction]['descendantcount'], 1000)
assert_equal(mempool[parent_transaction]['descendantcount'], self.maxorphantx)
except JSONRPCException as e:
print(e.error['message'])
assert_equal(i, 999)
assert_equal(i, self.maxorphantx-1)
print("tx that would create too large descendant package successfully rejected")
# TODO: check that node1's mempool is as expected
@ -127,7 +166,8 @@ class MempoolPackagesTest(BitcoinTestFramework):
# Test reorg handling
# First, the basics:
self.nodes[0].generate(1)
sync_blocks(self.nodes)
print("syncing blocks")
sync_blocks(self.nodes, timeout=480)
self.nodes[1].invalidateblock(self.nodes[0].getbestblockhash())
self.nodes[1].reconsiderblock(self.nodes[0].getbestblockhash())

View File

@ -24,9 +24,10 @@ class MempoolCoinbaseTest(BitcoinTestFramework):
def setup_network(self):
args = [
"-checkmempool",
"-debug=mempool",
"-allowdeprecated=getnewaddress",
'-minrelaytxfee=0',
'-checkmempool',
'-debug=mempool',
'-allowdeprecated=getnewaddress',
]
self.nodes = []
self.nodes.append(start_node(0, self.options.tmpdir, args))

View File

@ -24,7 +24,12 @@ class MempoolCoinbaseTest(BitcoinTestFramework):
def setup_network(self):
# Just need one node for this test
args = ["-checkmempool", "-debug=mempool", "-allowdeprecated=getnewaddress"]
args = [
'-minrelaytxfee=0',
'-checkmempool',
'-debug=mempool',
'-allowdeprecated=getnewaddress',
]
self.nodes = []
self.nodes.append(start_node(0, self.options.tmpdir, args))
self.is_network_split = False

View File

@ -30,9 +30,10 @@ class MempoolSpendCoinbaseTest(BitcoinTestFramework):
def setup_network(self):
# Just need one node for this test
args = [
"-checkmempool",
"-debug=mempool",
"-allowdeprecated=getnewaddress",
'-minrelaytxfee=0',
'-checkmempool',
'-debug=mempool',
'-allowdeprecated=getnewaddress',
]
self.nodes = []
self.nodes.append(start_node(0, self.options.tmpdir, args))

View File

@ -12,6 +12,7 @@ from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import assert_equal, \
connect_nodes_bi, sync_blocks, start_nodes, \
wait_and_assert_operationid_status, DEFAULT_FEE
from test_framework.zip317 import conventional_fee
from decimal import Decimal
@ -21,14 +22,14 @@ TX_EXPIRY_DELTA = 10
class MempoolTxExpiryTest(BitcoinTestFramework):
def setup_nodes(self):
return start_nodes(self.num_nodes, self.options.tmpdir,
[[
"-txexpirydelta=%d" % TX_EXPIRY_DELTA,
"-debug=mempool",
"-allowdeprecated=getnewaddress",
"-allowdeprecated=z_getnewaddress",
"-allowdeprecated=z_gettotalbalance",
]] * self.num_nodes)
return start_nodes(self.num_nodes, self.options.tmpdir, extra_args=[[
'-minrelaytxfee=0',
'-txexpirydelta=%d' % TX_EXPIRY_DELTA,
'-debug=mempool',
'-allowdeprecated=getnewaddress',
'-allowdeprecated=z_getnewaddress',
'-allowdeprecated=z_gettotalbalance',
]] * self.num_nodes)
# Test before, at, and after expiry block
# chain is at block height 199 when run_test executes
@ -93,7 +94,7 @@ class MempoolTxExpiryTest(BitcoinTestFramework):
# Create transactions
blockheight = self.nodes[0].getblockchaininfo()['blocks']
zsendamount = Decimal('1.0') - DEFAULT_FEE
zsendamount = Decimal('1.0') - conventional_fee(2)
recipients = []
recipients.append({"address": z_bob, "amount": zsendamount})
myopid = self.nodes[0].z_sendmany(z_alice, recipients, 1)

View File

@ -9,12 +9,12 @@
from test_framework.authproxy import JSONRPCException
from test_framework.util import assert_equal, connect_nodes_bi, fail, \
initialize_chain_clean, start_node, sync_blocks, sync_mempools, \
initialize_chain_clean, start_node, \
wait_and_assert_operationid_status, DEFAULT_FEE
from test_framework.zip317 import conventional_fee
from decimal import Decimal
def assert_mergetoaddress_exception(expected_error_msg, merge_to_address_lambda):
try:
merge_to_address_lambda()
@ -23,19 +23,15 @@ def assert_mergetoaddress_exception(expected_error_msg, merge_to_address_lambda)
except Exception as e:
fail("Expected JSONRPCException. Found %s" % repr(e))
else:
fail("Expected exception: %s" % expected_error_msg)
fail("Expected exception: %s”, but didnt fail" % expected_error_msg)
class MergeToAddressHelper:
def __init__(self, addr_type, any_zaddr, utxos_to_generate, utxos_in_tx1, utxos_in_tx2):
self.addr_type = addr_type
def __init__(self, new_address, any_zaddr):
self.new_address = new_address
self.any_zaddr = [any_zaddr]
self.any_zaddr_or_utxo = [any_zaddr, "ANY_TADDR"]
# utxos_to_generate, utxos_in_tx1, utxos_in_tx2 have to do with testing transaction size limits
self.utxos_to_generate = utxos_to_generate
self.utxos_in_tx1 = utxos_in_tx1
self.utxos_in_tx2 = utxos_in_tx2
def setup_chain(self, test):
print("Initializing test directory "+test.options.tmpdir)
@ -43,8 +39,8 @@ class MergeToAddressHelper:
def setup_network(self, test, additional_args=[]):
args = [
'-minrelaytxfee=0',
'-debug=zrpcunsafe',
'-limitancestorcount=%d' % self.utxos_to_generate,
'-allowdeprecated=getnewaddress',
'-allowdeprecated=z_getnewaddress',
'-allowdeprecated=z_getbalance',
@ -61,6 +57,10 @@ class MergeToAddressHelper:
test.sync_all()
def run_test(self, test):
def generate_and_check(node, expected_transactions):
[blockhash] = node.generate(1)
assert_equal(len(node.getblock(blockhash)['tx']), expected_transactions)
print("Mining blocks...")
test.nodes[0].generate(1)
@ -69,8 +69,8 @@ class MergeToAddressHelper:
test.nodes[0].generate(4)
test.sync_all()
walletinfo = test.nodes[0].getwalletinfo()
assert_equal(walletinfo['immature_balance'], 50)
assert_equal(walletinfo['balance'], 0)
assert_equal(walletinfo['immature_balance'], Decimal('50'))
assert_equal(walletinfo['balance'], Decimal('0'))
test.sync_all()
test.nodes[2].generate(1)
test.nodes[2].getnewaddress()
@ -80,16 +80,16 @@ class MergeToAddressHelper:
test.sync_all()
test.nodes[1].generate(101)
test.sync_all()
assert_equal(test.nodes[0].getbalance(), 50)
assert_equal(test.nodes[1].getbalance(), 10)
assert_equal(test.nodes[2].getbalance(), 30)
assert_equal(test.nodes[0].getbalance(), Decimal('50'))
assert_equal(test.nodes[1].getbalance(), Decimal('10'))
assert_equal(test.nodes[2].getbalance(), Decimal('30'))
# Shield the coinbase
myzaddr = test.nodes[0].z_getnewaddress(self.addr_type)
myzaddr = self.new_address(test, 0)
result = test.nodes[0].z_shieldcoinbase("*", myzaddr, 0)
wait_and_assert_operationid_status(test.nodes[0], result['opid'])
test.sync_all()
test.nodes[1].generate(1)
generate_and_check(test.nodes[1], 2)
test.sync_all()
# Prepare some UTXOs and notes for merging
@ -97,14 +97,14 @@ class MergeToAddressHelper:
mytaddr2 = test.nodes[0].getnewaddress()
mytaddr3 = test.nodes[0].getnewaddress()
result = test.nodes[0].z_sendmany(myzaddr, [
{'address': do_not_shield_taddr, 'amount': 10},
{'address': mytaddr, 'amount': 10},
{'address': mytaddr2, 'amount': 10},
{'address': mytaddr3, 'amount': 10},
{'address': do_not_shield_taddr, 'amount': Decimal('10')},
{'address': mytaddr, 'amount': Decimal('10')},
{'address': mytaddr2, 'amount': Decimal('10')},
{'address': mytaddr3, 'amount': Decimal('10')},
], 1, 0, 'AllowRevealedRecipients')
wait_and_assert_operationid_status(test.nodes[0], result)
test.sync_all()
test.nodes[1].generate(1)
generate_and_check(test.nodes[1], 2)
test.sync_all()
# Merging will fail because from arguments need to be in an array
@ -128,9 +128,9 @@ class MergeToAddressHelper:
"Amount out of range",
lambda: test.nodes[0].z_mergetoaddress(self.any_zaddr_or_utxo, myzaddr, Decimal('21000000.00000001')))
# Merging will fail because fee is larger than sum of UTXOs
# Merging will fail because fee is larger than `-maxtxfee`
assert_mergetoaddress_exception(
"Insufficient funds, have 50.00, which is less than miners fee 999.00",
"Fee (999.00 ZEC) is greater than the maximum fee allowed by this instance (0.10 ZEC). Run zcashd with `-maxtxfee` to adjust this limit.",
lambda: test.nodes[0].z_mergetoaddress(self.any_zaddr_or_utxo, myzaddr, 999))
# Merging will fail because transparent limit parameter must be at least 0
@ -164,206 +164,183 @@ class MergeToAddressHelper:
lambda: test.nodes[0].z_mergetoaddress(["ANY_SPROUT", "ANY_SAPLING"], mytaddr))
# Merge UTXOs from node 0 of value 30, default fee
result = test.nodes[0].z_mergetoaddress([mytaddr, mytaddr2, mytaddr3], myzaddr)
result = test.nodes[0].z_mergetoaddress([mytaddr, mytaddr2, mytaddr3], myzaddr, None, None, None, None, 'AllowRevealedSenders')
wait_and_assert_operationid_status(test.nodes[0], result['opid'])
test.sync_all()
test.nodes[1].generate(1)
generate_and_check(test.nodes[1], 2)
test.sync_all()
# Confirm balances and that do_not_shield_taddr containing funds of 10 was left alone
assert_equal(test.nodes[0].getbalance(), 10)
assert_equal(test.nodes[0].z_getbalance(do_not_shield_taddr), Decimal('10.0'))
assert_equal(test.nodes[0].z_getbalance(myzaddr), Decimal('40.0') - DEFAULT_FEE)
assert_equal(test.nodes[1].getbalance(), 40)
assert_equal(test.nodes[2].getbalance(), 30)
assert_equal(test.nodes[0].getbalance(), Decimal('10'))
assert_equal(test.nodes[0].z_getbalance(do_not_shield_taddr), Decimal('10'))
assert_equal(test.nodes[0].z_getbalance(myzaddr), Decimal('40') - conventional_fee(4))
assert_equal(test.nodes[1].getbalance(), Decimal('40'))
assert_equal(test.nodes[2].getbalance(), Decimal('30'))
# Shield all notes to another z-addr
myzaddr2 = test.nodes[0].z_getnewaddress(self.addr_type)
myzaddr2 = self.new_address(test, 0)
result = test.nodes[0].z_mergetoaddress(self.any_zaddr, myzaddr2, 0)
assert_equal(result["mergingUTXOs"], Decimal('0'))
assert_equal(result["remainingUTXOs"], Decimal('0'))
assert_equal(result["mergingNotes"], Decimal('2'))
assert_equal(result["remainingNotes"], Decimal('0'))
assert_equal(result["mergingUTXOs"], 0)
assert_equal(result["remainingUTXOs"], 0)
assert_equal(result["mergingNotes"], 2)
assert_equal(result["remainingNotes"], 0)
wait_and_assert_operationid_status(test.nodes[0], result['opid'])
test.sync_all()
blockhash = test.nodes[1].generate(1)
generate_and_check(test.nodes[1], 2)
test.sync_all()
assert_equal(len(test.nodes[0].getblock(blockhash[0])['tx']), 2)
assert_equal(test.nodes[0].z_getbalance(myzaddr), 0)
assert_equal(test.nodes[0].z_getbalance(myzaddr2), Decimal('40.0') - DEFAULT_FEE)
assert_equal(test.nodes[0].z_getbalance(myzaddr), Decimal('0'))
assert_equal(test.nodes[0].z_getbalance(myzaddr2), Decimal('40') - conventional_fee(4))
# Shield coinbase UTXOs from any node 2 taddr, and set fee to 0
result = test.nodes[2].z_shieldcoinbase("*", myzaddr, 0)
wait_and_assert_operationid_status(test.nodes[2], result['opid'])
test.sync_all()
test.nodes[1].generate(1)
generate_and_check(test.nodes[1], 2)
test.sync_all()
assert_equal(test.nodes[0].getbalance(), 10)
assert_equal(test.nodes[0].getbalance(), Decimal('10'))
assert_equal(test.nodes[0].z_getbalance(myzaddr), Decimal('30'))
assert_equal(test.nodes[0].z_getbalance(myzaddr2), Decimal('40.0') - DEFAULT_FEE)
assert_equal(test.nodes[1].getbalance(), 60)
assert_equal(test.nodes[2].getbalance(), 0)
assert_equal(test.nodes[0].z_getbalance(myzaddr2), Decimal('40') - conventional_fee(4))
assert_equal(test.nodes[1].getbalance(), Decimal('60'))
assert_equal(test.nodes[2].getbalance(), Decimal('0'))
# Merge all notes from node 0 into a node 0 taddr, and set fee to 0
result = test.nodes[0].z_mergetoaddress(self.any_zaddr, mytaddr, 0)
result = test.nodes[0].z_mergetoaddress(self.any_zaddr, mytaddr, 0, None, None, None, 'AllowRevealedRecipients')
wait_and_assert_operationid_status(test.nodes[0], result['opid'])
test.sync_all()
test.nodes[1].generate(1)
generate_and_check(test.nodes[1], 2)
test.sync_all()
assert_equal(test.nodes[0].getbalance(), Decimal('80.0') - DEFAULT_FEE)
assert_equal(test.nodes[0].z_getbalance(do_not_shield_taddr), Decimal('10.0'))
assert_equal(test.nodes[0].z_getbalance(mytaddr), Decimal('70.0') - DEFAULT_FEE)
assert_equal(test.nodes[0].z_getbalance(myzaddr), 0)
assert_equal(test.nodes[0].z_getbalance(myzaddr2), 0)
assert_equal(test.nodes[1].getbalance(), 70)
assert_equal(test.nodes[2].getbalance(), 0)
assert_equal(test.nodes[0].getbalance(), Decimal('80') - conventional_fee(4))
assert_equal(test.nodes[0].z_getbalance(do_not_shield_taddr), Decimal('10'))
assert_equal(test.nodes[0].z_getbalance(mytaddr), Decimal('70') - conventional_fee(4))
assert_equal(test.nodes[0].z_getbalance(myzaddr), Decimal('0'))
assert_equal(test.nodes[0].z_getbalance(myzaddr2), Decimal('0'))
assert_equal(test.nodes[1].getbalance(), Decimal('70'))
assert_equal(test.nodes[2].getbalance(), Decimal('0'))
# Merge all node 0 UTXOs together into a node 1 taddr, and set fee to 0
test.nodes[1].getnewaddress() # Ensure we have an empty address
n1taddr = test.nodes[1].getnewaddress()
result = test.nodes[0].z_mergetoaddress(["ANY_TADDR"], n1taddr, 0)
result = test.nodes[0].z_mergetoaddress(["ANY_TADDR"], n1taddr, 0, None, None, None, 'AllowFullyTransparent')
wait_and_assert_operationid_status(test.nodes[0], result['opid'])
test.sync_all()
test.nodes[1].generate(1)
generate_and_check(test.nodes[1], 2)
test.sync_all()
assert_equal(0, len(test.nodes[0].z_listunspent(0)))
assert_equal(test.nodes[0].getbalance(), 0)
assert_equal(test.nodes[0].z_getbalance(do_not_shield_taddr), 0)
assert_equal(test.nodes[0].z_getbalance(mytaddr), 0)
assert_equal(test.nodes[0].z_getbalance(myzaddr), 0)
assert_equal(test.nodes[1].getbalance(), Decimal('160.0') - DEFAULT_FEE)
assert_equal(test.nodes[1].z_getbalance(n1taddr), Decimal('80.0') - DEFAULT_FEE)
assert_equal(test.nodes[2].getbalance(), 0)
assert_equal(test.nodes[0].getbalance(), Decimal('0'))
assert_equal(test.nodes[0].z_getbalance(do_not_shield_taddr), Decimal('0'))
assert_equal(test.nodes[0].z_getbalance(mytaddr), Decimal('0'))
assert_equal(test.nodes[0].z_getbalance(myzaddr), Decimal('0'))
assert_equal(test.nodes[1].getbalance(), Decimal('160') - conventional_fee(4))
assert_equal(test.nodes[1].z_getbalance(n1taddr), Decimal('80') - conventional_fee(4))
assert_equal(test.nodes[2].getbalance(), Decimal('0'))
# Generate self.utxos_to_generate regular UTXOs on node 0, and 20 regular UTXOs on node 2
# Generate 5 regular UTXOs on node 0, and 20 regular UTXOs on node 2.
mytaddr = test.nodes[0].getnewaddress()
n2taddr = test.nodes[2].getnewaddress()
test.nodes[1].generate(1000)
test.nodes[1].generate(20)
test.sync_all()
for i in range(self.utxos_to_generate):
test.nodes[1].sendtoaddress(mytaddr, 1)
for i in range(5):
test.nodes[1].sendtoaddress(mytaddr, Decimal('1'))
for i in range(20):
test.nodes[1].sendtoaddress(n2taddr, 1)
test.nodes[1].generate(1)
test.nodes[1].sendtoaddress(n2taddr, Decimal('1'))
generate_and_check(test.nodes[1], 26)
test.sync_all()
# Merging the UTXOs will conditionally occur over two transactions, since max tx size is 100,000 bytes before Sapling and 2,000,000 after.
# We don't verify mergingTransparentValue as UTXOs are not selected in any specific order, so value can change on each test run.
# We set an unrealistically high limit parameter of 99999, to verify that max tx size will constrain the number of UTXOs.
result = test.nodes[0].z_mergetoaddress([mytaddr], myzaddr, 0, 99999)
assert_equal(result["mergingUTXOs"], self.utxos_in_tx1)
assert_equal(result["remainingUTXOs"], self.utxos_in_tx2)
assert_equal(result["mergingNotes"], Decimal('0'))
assert_equal(result["mergingShieldedValue"], Decimal('0'))
assert_equal(result["remainingNotes"], Decimal('0'))
assert_equal(result["remainingShieldedValue"], Decimal('0'))
remainingTransparentValue = result["remainingTransparentValue"]
# This z_mergetoaddress and the one below result in two notes in myzaddr.
result = test.nodes[0].z_mergetoaddress([mytaddr], myzaddr, DEFAULT_FEE, None, None, None, 'AllowRevealedSenders')
assert_equal(result["mergingUTXOs"], 5)
assert_equal(result["remainingUTXOs"], 0)
assert_equal(result["mergingNotes"], 0)
assert_equal(result["remainingNotes"], 0)
wait_and_assert_operationid_status(test.nodes[0], result['opid'])
# For sapling we do not check that this occurs over two transactions because of the time that it would take
if self.utxos_in_tx2 > 0:
# Verify that UTXOs are locked (not available for selection) by queuing up another merging operation
result = test.nodes[0].z_mergetoaddress([mytaddr], myzaddr, 0, 0)
assert_equal(result["mergingUTXOs"], self.utxos_in_tx2)
assert_equal(result["mergingTransparentValue"], Decimal(remainingTransparentValue))
assert_equal(result["remainingUTXOs"], Decimal('0'))
assert_equal(result["remainingTransparentValue"], Decimal('0'))
assert_equal(result["mergingNotes"], Decimal('0'))
assert_equal(result["mergingShieldedValue"], Decimal('0'))
assert_equal(result["remainingNotes"], Decimal('0'))
assert_equal(result["remainingShieldedValue"], Decimal('0'))
wait_and_assert_operationid_status(test.nodes[0], result['opid'])
# sync_all() invokes sync_mempool() but node 2's mempool limit will cause tx1 and tx2 to be rejected.
# So instead, we sync on blocks and mempool for node 0 and node 1, and after a new block is generated
# which mines tx1 and tx2, all nodes will have an empty mempool which can then be synced.
sync_blocks(test.nodes[:2])
sync_mempools(test.nodes[:2])
# Generate enough blocks to ensure all transactions are mined
while test.nodes[1].getmempoolinfo()['size'] > 0:
test.nodes[1].generate(1)
test.sync_all()
# Verify maximum number of UTXOs which node 2 can shield is not limited
# when the limit parameter is set to 0.
expected_to_merge = 20
expected_remaining = 0
result = test.nodes[2].z_mergetoaddress([n2taddr], myzaddr, DEFAULT_FEE, 0)
assert_equal(result["mergingUTXOs"], expected_to_merge)
assert_equal(result["remainingUTXOs"], expected_remaining)
assert_equal(result["mergingNotes"], Decimal('0'))
assert_equal(result["remainingNotes"], Decimal('0'))
# Verify maximum number of UTXOs is not limited when the limit parameter is set to 0.
result = test.nodes[2].z_mergetoaddress([n2taddr], myzaddr, DEFAULT_FEE, 0, None, None, 'AllowRevealedSenders')
assert_equal(result["mergingUTXOs"], 20)
assert_equal(result["remainingUTXOs"], 0)
assert_equal(result["mergingNotes"], 0)
assert_equal(result["remainingNotes"], 0)
wait_and_assert_operationid_status(test.nodes[2], result['opid'])
test.sync_all()
test.nodes[1].generate(1)
generate_and_check(test.nodes[1], 3)
test.sync_all()
assert_equal(2, len(test.nodes[0].z_listunspent()))
# Verify maximum number of UTXOs which node 0 can shield is set by default limit parameter of 50
mytaddr = test.nodes[0].getnewaddress()
for i in range(100):
test.nodes[1].sendtoaddress(mytaddr, 1)
test.nodes[1].generate(1)
generate_and_check(test.nodes[1], 101)
test.sync_all()
result = test.nodes[0].z_mergetoaddress([mytaddr], myzaddr, DEFAULT_FEE)
assert_equal(result["mergingUTXOs"], Decimal('50'))
assert_equal(result["remainingUTXOs"], Decimal('50'))
assert_equal(result["mergingNotes"], Decimal('0'))
result = test.nodes[0].z_mergetoaddress([mytaddr], myzaddr, conventional_fee(52), None, None, None, 'AllowRevealedSenders')
assert_equal(result["mergingUTXOs"], 50)
assert_equal(result["remainingUTXOs"], 50)
assert_equal(result["mergingNotes"], 0)
# Remaining notes are only counted if we are trying to merge any notes
assert_equal(result["remainingNotes"], Decimal('0'))
assert_equal(result["remainingNotes"], 0)
wait_and_assert_operationid_status(test.nodes[0], result['opid'])
assert_equal(2, len(test.nodes[0].z_listunspent()))
assert_equal(3, len(test.nodes[0].z_listunspent(0)))
# Verify maximum number of UTXOs which node 0 can shield can be set by the limit parameter
result = test.nodes[0].z_mergetoaddress([mytaddr], myzaddr, DEFAULT_FEE, 33)
assert_equal(result["mergingUTXOs"], Decimal('33'))
assert_equal(result["remainingUTXOs"], Decimal('17'))
assert_equal(result["mergingNotes"], Decimal('0'))
result = test.nodes[0].z_mergetoaddress([mytaddr], myzaddr, conventional_fee(35), 33, None, None, 'AllowRevealedSenders')
assert_equal(result["mergingUTXOs"], 33)
assert_equal(result["remainingUTXOs"], 17)
assert_equal(result["mergingNotes"], 0)
# Remaining notes are only counted if we are trying to merge any notes
assert_equal(result["remainingNotes"], Decimal('0'))
wait_and_assert_operationid_status(test.nodes[0], result['opid'])
# Don't sync node 2 which rejects the tx due to its mempooltxinputlimit
sync_blocks(test.nodes[:2])
sync_mempools(test.nodes[:2])
test.nodes[1].generate(1)
test.sync_all()
# Verify maximum number of notes which node 0 can shield can be set by the limit parameter
# Also check that we can set off a second merge before the first one is complete
# myzaddr will have 5 notes if testing before to Sapling activation and 4 otherwise
num_notes = len(test.nodes[0].z_listunspent(0))
result1 = test.nodes[0].z_mergetoaddress([myzaddr], myzaddr, DEFAULT_FEE, 50, 2)
result2 = test.nodes[0].z_mergetoaddress([myzaddr], myzaddr, DEFAULT_FEE, 50, 2)
# First merge should select from all notes
assert_equal(result1["mergingUTXOs"], Decimal('0'))
# Remaining UTXOs are only counted if we are trying to merge any UTXOs
assert_equal(result1["remainingUTXOs"], Decimal('0'))
assert_equal(result1["mergingNotes"], Decimal('2'))
assert_equal(result1["remainingNotes"], num_notes - 2)
# Second merge should ignore locked notes
assert_equal(result2["mergingUTXOs"], Decimal('0'))
assert_equal(result2["remainingUTXOs"], Decimal('0'))
assert_equal(result2["mergingNotes"], Decimal('2'))
assert_equal(result2["remainingNotes"], num_notes - 4)
wait_and_assert_operationid_status(test.nodes[0], result1['opid'])
wait_and_assert_operationid_status(test.nodes[0], result2['opid'])
test.sync_all()
test.nodes[1].generate(1)
test.sync_all()
# Shield both UTXOs and notes to a z-addr
result = test.nodes[0].z_mergetoaddress(self.any_zaddr_or_utxo, myzaddr, 0, 10, 2)
assert_equal(result["mergingUTXOs"], Decimal('10'))
assert_equal(result["remainingUTXOs"], Decimal('7'))
assert_equal(result["mergingNotes"], Decimal('2'))
assert_equal(result["remainingNotes"], num_notes - 4)
assert_equal(result["remainingNotes"], 0)
wait_and_assert_operationid_status(test.nodes[0], result['opid'])
test.sync_all()
test.nodes[1].generate(1)
generate_and_check(test.nodes[1], 3)
test.sync_all()
assert_equal(4, len(test.nodes[0].z_listunspent()))
# NB: We cant yet merge from UAs, so ensure were not before running these cases
if (myzaddr[0] != 'u'):
# Also check that we can set off a second merge before the first one is complete
result1 = test.nodes[0].z_mergetoaddress([myzaddr], myzaddr, DEFAULT_FEE, 50, 2)
# First merge should select from all notes
assert_equal(result1["mergingUTXOs"], 0)
# Remaining UTXOs are only counted if we are trying to merge any UTXOs
assert_equal(result1["remainingUTXOs"], 0)
assert_equal(result1["mergingNotes"], 2)
assert_equal(result1["remainingNotes"], 2)
# Second merge should ignore locked notes
result2 = test.nodes[0].z_mergetoaddress([myzaddr], myzaddr, DEFAULT_FEE, 50, 2)
assert_equal(result2["mergingUTXOs"], 0)
assert_equal(result2["remainingUTXOs"], 0)
assert_equal(result2["mergingNotes"], 2)
assert_equal(result2["remainingNotes"], 0)
wait_and_assert_operationid_status(test.nodes[0], result1['opid'])
wait_and_assert_operationid_status(test.nodes[0], result2['opid'])
test.sync_all()
generate_and_check(test.nodes[1], 3)
test.sync_all()
# Shield both UTXOs and notes to a z-addr
result = test.nodes[0].z_mergetoaddress(self.any_zaddr_or_utxo, myzaddr, DEFAULT_FEE, 10, 2, None, 'AllowRevealedSenders')
assert_equal(result["mergingUTXOs"], 10)
assert_equal(result["remainingUTXOs"], 7)
assert_equal(result["mergingNotes"], 2)
assert_equal(result["remainingNotes"], 0)
wait_and_assert_operationid_status(test.nodes[0], result['opid'])
else:
# Shield both UTXOs and notes to a z-addr
result = test.nodes[0].z_mergetoaddress(self.any_zaddr_or_utxo, myzaddr, DEFAULT_FEE, 10, 2, None, 'AllowRevealedSenders')
assert_equal(result["mergingUTXOs"], 10)
assert_equal(result["remainingUTXOs"], 7)
assert_equal(result["mergingNotes"], 2)
assert_equal(result["remainingNotes"], 2)
wait_and_assert_operationid_status(test.nodes[0], result['opid'])
test.sync_all()
generate_and_check(test.nodes[1], 2)
test.sync_all()

View File

@ -18,8 +18,10 @@ class MergeToAddressMixedNotes(BitcoinTestFramework):
def setup_nodes(self):
self.num_nodes = 4
return start_nodes(self.num_nodes, self.options.tmpdir, extra_args=[[
'-minrelaytxfee=0',
'-anchorconfirmations=1',
'-allowdeprecated=getnewaddress',
'-allowdeprecated=legacy_privacy',
'-allowdeprecated=z_getnewaddress',
'-allowdeprecated=z_getbalance',
'-allowdeprecated=z_gettotalbalance',

View File

@ -6,17 +6,19 @@
from test_framework.test_framework import BitcoinTestFramework
from mergetoaddress_helper import MergeToAddressHelper
def get_new_address(test, node):
return test.nodes[node].z_getnewaddress('sapling')
class MergeToAddressSapling (BitcoinTestFramework):
# 13505 would be the maximum number of utxos based on the transaction size limits for Sapling
# but testing this causes the test to take an indeterminately long time to run.
helper = MergeToAddressHelper('sapling', 'ANY_SAPLING', 800, 800, 0)
helper = MergeToAddressHelper(get_new_address, 'ANY_SAPLING')
def setup_chain(self):
self.helper.setup_chain(self)
def setup_network(self, split=False):
self.helper.setup_network(self, ['-anchorconfirmations=1'])
self.helper.setup_network(self, [
'-anchorconfirmations=1',
])
def run_test(self):
self.helper.run_test(self)

View File

@ -0,0 +1,35 @@
#!/usr/bin/env python3
# Copyright (c) 2023 The Zcash developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or https://www.opensource.org/licenses/mit-license.php .
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import NU5_BRANCH_ID, nuparams
from mergetoaddress_helper import MergeToAddressHelper
def get_new_address(test, node):
account = test.nodes[node].z_getnewaccount()['account']
# TODO: Since we cant merge from Orchard, the existing tests dont work if we merge _to_
# Orchard, so exclude it from the UA for now.
return test.nodes[node].z_getaddressforaccount(account, ['p2pkh', 'sapling'])['address']
class MergeToAddressUANU5 (BitcoinTestFramework):
# TODO: Until we can merge from Orchard, we just use 'ANY_SAPLING' as the wildcard here, since
# we dont have an `'ANY_ORCHARD'` yet and `'ANY_SPROUT'` isnt compatible with Orchard.
helper = MergeToAddressHelper(get_new_address, 'ANY_SAPLING')
def setup_chain(self):
self.helper.setup_chain(self)
def setup_network(self, split=False):
self.helper.setup_network(self, [
'-anchorconfirmations=1',
nuparams(NU5_BRANCH_ID, 109),
])
def run_test(self):
self.helper.run_test(self)
if __name__ == '__main__':
MergeToAddressUANU5().main()

View File

@ -0,0 +1,31 @@
#!/usr/bin/env python3
# Copyright (c) 2023 The Zcash developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or https://www.opensource.org/licenses/mit-license.php .
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import NU5_BRANCH_ID, nuparams
from mergetoaddress_helper import MergeToAddressHelper
def get_new_address(test, node):
account = test.nodes[node].z_getnewaccount()['account']
return test.nodes[node].z_getaddressforaccount(account)['address']
class MergeToAddressUASapling (BitcoinTestFramework):
helper = MergeToAddressHelper(get_new_address, 'ANY_SAPLING')
def setup_chain(self):
self.helper.setup_chain(self)
def setup_network(self, split=False):
self.helper.setup_network(self, [
'-anchorconfirmations=1',
nuparams(NU5_BRANCH_ID, 99999),
])
def run_test(self):
self.helper.run_test(self)
if __name__ == '__main__':
MergeToAddressUASapling().main()

View File

@ -24,8 +24,9 @@ class MerkleBlockTest(BitcoinTestFramework):
def setup_network(self):
base_args = [
"-debug",
"-allowdeprecated=getnewaddress",
'-minrelaytxfee=0',
'-debug',
'-allowdeprecated=getnewaddress',
]
self.nodes = []
# Nodes 0/1 are "wallet" nodes

View File

@ -30,15 +30,16 @@ class ShieldCoinbaseTest (BitcoinTestFramework):
def start_node_with(self, index, extra_args=[]):
args = [
'-minrelaytxfee=0',
nuparams(BLOSSOM_BRANCH_ID, 1),
nuparams(HEARTWOOD_BRANCH_ID, 10),
nuparams(CANOPY_BRANCH_ID, 20),
nuparams(NU5_BRANCH_ID, 20),
"-nurejectoldversions=false",
"-allowdeprecated=getnewaddress",
"-allowdeprecated=z_getnewaddress",
"-allowdeprecated=z_getbalance",
"-allowdeprecated=z_gettotalbalance",
'-nurejectoldversions=false',
'-allowdeprecated=getnewaddress',
'-allowdeprecated=z_getnewaddress',
'-allowdeprecated=z_getbalance',
'-allowdeprecated=z_gettotalbalance',
]
return start_node(index, self.options.tmpdir, args + extra_args)

View File

@ -32,6 +32,7 @@ class OrchardReorgTest(BitcoinTestFramework):
def setup_nodes(self):
return start_nodes(self.num_nodes, self.options.tmpdir, extra_args=[[
'-minrelaytxfee=0',
nuparams(BLOSSOM_BRANCH_ID, 1),
nuparams(HEARTWOOD_BRANCH_ID, 5),
nuparams(CANOPY_BRANCH_ID, 5),

View File

@ -21,6 +21,7 @@ class TxExpiringSoonTest(BitcoinTestFramework):
def setup_network(self):
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, extra_args=[[
'-minrelaytxfee=0',
'-allowdeprecated=getnewaddress',
]] * self.num_nodes)
connect_nodes_bi(self.nodes, 0, 1)

View File

@ -4,146 +4,143 @@
# file COPYING or https://www.opensource.org/licenses/mit-license.php .
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import (
assert_equal,
connect_nodes,
initialize_chain_clean,
start_node,
sync_blocks,
sync_mempools,
)
from test_framework.util import assert_equal, start_nodes
from test_framework.mininode import COIN
from test_framework.zip317 import DEFAULT_BLOCK_UNPAID_ACTION_LIMIT, MARGINAL_FEE, ZIP_317_FEE
import time
from decimal import Decimal
class PrioritiseTransactionTest (BitcoinTestFramework):
class PrioritiseTransactionTest(BitcoinTestFramework):
def __init__(self):
super().__init__()
self.cache_behavior = 'clean'
def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 4)
def setup_network(self, split=False):
self.nodes = []
# Start nodes with tiny block size of 11kb
def setup_nodes(self):
args = [
"-blockprioritysize=7000",
"-blockmaxsize=11000",
"-maxorphantx=1000",
"-relaypriority=true",
"-printpriority=1",
"-limitancestorcount=900",
"-allowdeprecated=getnewaddress",
'-paytxfee=0.000001',
'-printpriority=1',
'-allowdeprecated=getnewaddress',
]
self.nodes.append(start_node(0, self.options.tmpdir, args))
self.nodes.append(start_node(1, self.options.tmpdir, args))
connect_nodes(self.nodes[1], 0)
self.is_network_split=False
return start_nodes(self.num_nodes, self.options.tmpdir, extra_args=[
args,
args + ['-blockunpaidactionlimit=25'],
args,
args,
])
def run_test(self):
# Slow start is switched off for regtest, and we're before Blossom,
# but the halving interval is only 144 blocks.
# For the first test the miner subsidy is 10 ZEC.
self.test(self.nodes[0], Decimal("10"), DEFAULT_BLOCK_UNPAID_ACTION_LIMIT)
assert_equal(152, self.nodes[0].getblockcount())
# For the second test the miner subsidy is 6.25 ZEC.
# (The Founders' Reward has expired and there are no funding streams.)
self.test(self.nodes[1], Decimal("6.25"), 25)
def test(self, mining_node, miner_subsidy, block_unpaid_action_limit):
print("Testing with -blockunpaidactionlimit=%d" % (block_unpaid_action_limit,))
def in_template(block_template, txid):
res = any([tx['hash'] == txid for tx in block_template['transactions']])
print("Checking block template... %s" % (res,))
return res
def eventually_in_template(txid):
for tries in range(2):
time.sleep(11)
block_template = mining_node.getblocktemplate()
if in_template(block_template, txid): return True
return False
# Make sure we have enough mature funds on mining_node.
blocks = 100 + block_unpaid_action_limit + 1
print("Mining %d blocks..." % (blocks,))
mining_node.generate(blocks)
self.sync_all()
def run_test (self):
# tx priority is calculated: priority = sum(input_value_in_base_units * input_age)/size_in_bytes
node2_initial_balance = self.nodes[2].getbalance()
node3_initial_balance = self.nodes[3].getbalance()
print("Mining 11kb blocks...")
self.nodes[0].generate(501)
# Create a tx that will not be mined unless prioritised.
# We spend `block_unpaid_action_limit` mining rewards, ensuring that
# tx has exactly `block_unpaid_action_limit + 1` logical actions,
# because one extra input will be needed to pay the fee.
# Since we've set -paytxfee to pay only the relay fee rate, the fee
# will be less than the marginal fee, so these are all unpaid actions.
amount = miner_subsidy * block_unpaid_action_limit
assert_equal(amount + miner_subsidy, mining_node.getbalance())
tx = mining_node.sendtoaddress(self.nodes[2].getnewaddress(), amount)
base_fee = self.nodes[0].getnetworkinfo()['relayfee']
mempool = mining_node.getrawmempool(True)
assert(tx in mempool)
fee_zats = int(mempool[tx]['fee'] * COIN)
assert(fee_zats < MARGINAL_FEE)
tx_verbose = mining_node.getrawtransaction(tx, 1)
assert_equal(block_unpaid_action_limit + 1, len(tx_verbose['vin']))
# 11 kb blocks will only hold about 50 txs, so this will fill mempool with older txs
taddr = self.nodes[1].getnewaddress()
for _ in range(900):
self.nodes[0].sendtoaddress(taddr, 0.1)
self.nodes[0].generate(1)
sync_blocks(self.nodes)
# With a rate of either 7tx/s or 14tx/s per peer (depending on whether
# the connection is inbound or outbound), syncing this many transactions
# could take up to 128s. So use a higher timeout on the mempool sync.
sync_mempools(self.nodes, timeout=200)
# Check that tx is not in a new block template prior to prioritisation.
block_template = mining_node.getblocktemplate()
assert_equal(in_template(block_template, tx), False)
# Create tx of lower value to be prioritized on node 0
# Older transactions get mined first, so this lower value, newer tx is unlikely to be mined without prioritisation
priority_tx_0 = self.nodes[0].sendtoaddress(self.nodes[1].getnewaddress(), 0.1)
def send_fully_paid_transaction():
# Sending a new transaction will make getblocktemplate refresh within 5s.
# We use z_sendmany so that it will pay the conventional fee (ignoring -paytxfee)
# and not take up an unpaid action.
recipients = [{'address': self.nodes[3].getnewaddress(), 'amount': Decimal("0.1")}]
mining_node.z_sendmany('ANY_TADDR', recipients, 0, ZIP_317_FEE, 'AllowFullyTransparent')
# Check that priority_tx_0 is not in block_template() prior to prioritisation
block_template = self.nodes[0].getblocktemplate()
in_block_template = False
for tx in block_template['transactions']:
if tx['hash'] == priority_tx_0:
in_block_template = True
break
assert_equal(in_block_template, False)
priority_success = self.nodes[0].prioritisetransaction(priority_tx_0, 1000, int(3 * base_fee * COIN))
# Prioritising it on node 2 has no effect on mining_node.
self.sync_all()
priority_success = self.nodes[2].prioritisetransaction(tx, 0, MARGINAL_FEE)
assert(priority_success)
mempool = self.nodes[2].getrawmempool(True)
assert_equal(fee_zats + MARGINAL_FEE, mempool[tx]['modifiedfee'] * COIN)
self.sync_all()
send_fully_paid_transaction()
assert_equal(eventually_in_template(tx), False)
# Check that prioritized transaction is not in getblocktemplate()
# (not updated because no new txns)
in_block_template = False
block_template = self.nodes[0].getblocktemplate()
for tx in block_template['transactions']:
if tx['hash'] == priority_tx_0:
in_block_template = True
break
assert_equal(in_block_template, False)
# Now prioritise it on mining_node, but short by one zatoshi.
priority_success = mining_node.prioritisetransaction(tx, 0, MARGINAL_FEE - fee_zats - 1)
assert(priority_success)
mempool = mining_node.getrawmempool(True)
assert_equal(MARGINAL_FEE - 1, mempool[tx]['modifiedfee'] * COIN)
send_fully_paid_transaction()
assert_equal(eventually_in_template(tx), False)
# Sending a new transaction will make getblocktemplate refresh within 10s
self.nodes[0].sendtoaddress(self.nodes[1].getnewaddress(), 0.1)
# Finally, prioritise it on mining_node by the one extra zatoshi (this also checks
# that prioritisation is cumulative).
priority_success = mining_node.prioritisetransaction(tx, 0, 1)
assert(priority_success)
mempool = mining_node.getrawmempool(True)
assert_equal(MARGINAL_FEE, mempool[tx]['modifiedfee'] * COIN)
# Check that prioritized transaction is not in getblocktemplate()
# (too soon)
in_block_template = False
block_template = self.nodes[0].getblocktemplate()
for tx in block_template['transactions']:
if tx['hash'] == priority_tx_0:
in_block_template = True
break
assert_equal(in_block_template, False)
# The block template will refresh after 1 minute, or after 5 seconds if a new
# transaction is added to the mempool. As long as there is less than a minute
# between the getblocktemplate() calls, it should not have been updated yet.
block_template = mining_node.getblocktemplate()
assert_equal(in_template(block_template, tx), False)
# Check that prioritized transaction is in getblocktemplate()
# getblocktemplate() will refresh after 1 min, or after 10 sec if new transaction is added to mempool
# Mempool is probed every 10 seconds. We'll give getblocktemplate() a maximum of 30 seconds to refresh
block_template = self.nodes[0].getblocktemplate()
start = time.time();
in_block_template = False
while in_block_template == False:
for tx in block_template['transactions']:
if tx['hash'] == priority_tx_0:
in_block_template = True
break
if time.time() - start > 30:
raise AssertionError("Test timed out because prioritised transaction was not returned by getblocktemplate within 30 seconds.")
time.sleep(1)
block_template = self.nodes[0].getblocktemplate()
# Check that the prioritised transaction eventually gets into a new block template.
send_fully_paid_transaction()
assert_equal(eventually_in_template(tx), True)
assert(in_block_template)
# Node 1 doesn't get the next block, so this *shouldn't* be mined despite being prioritized on node 1
priority_tx_1 = self.nodes[1].sendtoaddress(self.nodes[0].getnewaddress(), 0.1)
self.nodes[1].prioritisetransaction(priority_tx_1, 1000, int(3 * base_fee * COIN))
# Mine block on node 0
blk_hash = self.nodes[0].generate(1)
block = self.nodes[0].getblock(blk_hash[0])
# Mine a block on node 0.
blk_hash = mining_node.generate(1)
block = mining_node.getblock(blk_hash[0])
assert_equal(tx in block['tx'], True)
self.sync_all()
# Check that priority_tx_0 was mined
mempool = self.nodes[0].getrawmempool()
assert_equal(priority_tx_0 in block['tx'], True)
assert_equal(priority_tx_0 in mempool, False)
# Check that priority_tx_1 was not mined
assert_equal(priority_tx_1 in mempool, True)
assert_equal(priority_tx_1 in block['tx'], False)
# Mine a block on node 1 and sync
blk_hash_1 = self.nodes[1].generate(1)
block_1 = self.nodes[1].getblock(blk_hash_1[0])
self.sync_all()
# Check to see if priority_tx_1 is now mined
mempool_1 = self.nodes[1].getrawmempool()
assert_equal(priority_tx_1 in mempool_1, False)
assert_equal(priority_tx_1 in block_1['tx'], True)
# Check that tx was mined and that node 1 received the funds.
mempool = mining_node.getrawmempool()
assert_equal(mempool, [])
assert_equal(self.nodes[2].getbalance(), node2_initial_balance + amount)
# Check that all of the fully paid transactions were mined.
assert_equal(self.nodes[3].getbalance(), node3_initial_balance + Decimal("0.3"))
if __name__ == '__main__':
PrioritiseTransactionTest().main()

View File

@ -66,7 +66,7 @@ class PruneTest(BitcoinTestFramework):
self.address[0] = self.nodes[0].getnewaddress()
self.address[1] = self.nodes[1].getnewaddress()
# Determine default relay fee
# Determine default relay fee rate
self.relayfee = self.nodes[0].getnetworkinfo()["relayfee"]
connect_nodes(self.nodes[0], 1)

View File

@ -115,7 +115,7 @@ class RawTransactionsTest(BitcoinTestFramework):
#use balance deltas instead of absolute values
bal = self.nodes[2].getbalance()
# send 1.2 BTC to msig adr
# send 1.2 ZEC to multisig address
txId = self.nodes[0].sendtoaddress(mSigObj, 1.2);
self.sync_all()
self.nodes[0].generate(1)

View File

@ -29,11 +29,11 @@ class RegtestSignrawtransactionTest (BitcoinTestFramework):
self.sync_all()
# Create and sign Sapling transaction.
# If the incorrect consensus branch id is selected, there will be a signing error.
# If the incorrect consensus branch id is selected, there will be a signing error.
opid = self.nodes[1].z_sendmany(
taddr,
[{'address': zaddr1, 'amount': 1}],
1, DEFAULT_FEE, 'AllowRevealedSenders')
1, DEFAULT_FEE, 'AllowFullyTransparent')
wait_and_assert_operationid_status(self.nodes[1], opid)
if __name__ == '__main__':

View File

@ -21,7 +21,8 @@ from test_framework.util import (
import logging
HAS_CANOPY = [
'-nurejectoldversions=false',
'-minrelaytxfee=0',
'-nurejectoldversions=false',
'-anchorconfirmations=1',
nuparams(BLOSSOM_BRANCH_ID, 205),
nuparams(HEARTWOOD_BRANCH_ID, 210),
@ -33,80 +34,96 @@ HAS_CANOPY = [
]
class RemoveSproutShieldingTest (BitcoinTestFramework):
def __init__(self):
super().__init__()
self.num_nodes = 4
self.cache_behavior = 'sprout'
def setup_nodes(self):
return start_nodes(self.num_nodes, self.options.tmpdir, extra_args=[HAS_CANOPY] * self.num_nodes)
def run_test (self):
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')
sprout_addr_node2 = self.nodes[2].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")
n0_sprout_addr0 = self.nodes[0].listaddresses()[0]['sprout']['addresses'][0]
# Attempt to shield coinbase to Sprout on node 0. Should fail;
# transfers to Sprout are no longer supported
try:
self.nodes[0].z_shieldcoinbase(get_coinbase_address(self.nodes[0]), n0_sprout_addr0, 0)['opid']
except JSONRPCException as e:
errorString = e.error['message'];
unsupported_sprout_msg = "Sending funds into the Sprout pool is no longer supported."
assert_equal(unsupported_sprout_msg, errorString)
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()
# Check that we have the expected balance from the cached setup
assert_equal(self.nodes[0].z_getbalance(n0_sprout_addr0), Decimal('50'))
# Fund n0_taddr0 from previously existing Sprout funds on node 0
n0_taddr0 = 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, 'AllowRevealedRecipients')
recipients = [{"address": n0_taddr0, "amount": Decimal('1')}]
myopid = self.nodes[0].z_sendmany(n0_sprout_addr0, recipients, 1, 0, 'AllowRevealedRecipients')
wait_and_assert_operationid_status(self.nodes[0], myopid)
self.sync_all()
self.nodes[0].generate(1)
self.sync_all()
assert_equal(self.nodes[0].z_getbalance(n0_taddr0), Decimal('3'))
# 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")
# Create mergetoaddress taddr -> Sprout transaction, should fail
n1_sprout_addr0 = self.nodes[1].z_getnewaddress('sprout')
assert_raises_message(
JSONRPCException,
"Sending funds into the Sprout pool is no longer supported.",
self.nodes[0].z_mergetoaddress,
["ANY_TADDR"], n1_sprout_addr0, 0)
self.nodes[0].generate(1)
self.sync_all()
# Send some funds back to n0_taddr0
recipients = [{"address": n0_taddr0, "amount": Decimal('1')}]
myopid = self.nodes[0].z_sendmany(n0_sprout_addr0, recipients, 1, 0, 'AllowRevealedRecipients')
wait_and_assert_operationid_status(self.nodes[0], myopid)
# 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(5)
self.sync_all()
self.nodes[0].generate(4)
self.sync_all()
assert_equal(self.nodes[0].getblockchaininfo()['upgrades']['e9ff75a6']['status'], 'pending')
assert_equal(self.nodes[0].z_getbalance(n0_taddr0), Decimal('4'))
# Shield coinbase to Sprout on node 0. Should fail
sprout_addr = self.nodes[0].z_getnewaddress('sprout')
n0_coinbase_taddr = get_coinbase_address(self.nodes[0])
n0_sprout_addr1 = self.nodes[0].z_getnewaddress('sprout')
assert_raises_message(
JSONRPCException,
"Sprout shielding is not supported after Canopy",
"Sending funds into the Sprout pool is no longer supported.",
self.nodes[0].z_shieldcoinbase,
get_coinbase_address(self.nodes[0]), sprout_addr, 0)
n0_coinbase_taddr, n0_sprout_addr1, 0)
print("taddr -> Sprout z_shieldcoinbase tx rejected at Canopy activation on node 0")
# Create taddr -> Sprout z_sendmany transaction on node 0. Should fail
sprout_addr = self.nodes[1].z_getnewaddress('sprout')
assert_raises_message(
JSONRPCException,
"Sending funds into the Sprout value pool is not supported by z_sendmany",
self.nodes[0].z_sendmany,
taddr_0, [{"address": sprout_addr, "amount": 1}])
n1_sprout_addr1 = self.nodes[1].z_getnewaddress('sprout')
recipients = [{"address": n1_sprout_addr1, "amount": Decimal('1')}]
myopid = self.nodes[0].z_sendmany(n0_taddr0, recipients, 1, 0)
wait_and_assert_operationid_status(self.nodes[0], myopid, "failed", unsupported_sprout_msg)
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
assert_raises_message(
JSONRPCException,
"Sprout shielding is not supported after Canopy",
"Sending funds into the Sprout pool is no longer supported.",
self.nodes[0].z_mergetoaddress,
["ANY_TADDR", "ANY_SPROUT"], self.nodes[1].z_getnewaddress('sprout'))
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")
# Activate Canopy
self.nodes[0].generate(1)
@ -126,17 +143,5 @@ class RemoveSproutShieldingTest (BitcoinTestFramework):
wait_and_assert_operationid_status(self.nodes[0], myopid)
print("taddr -> Sapling z_shieldcoinbase tx accepted after Canopy on node 0")
# Mine to one block before NU5 activation.
self.nodes[0].generate(4)
self.sync_all()
# Create z_mergetoaddress Sprout -> Sprout transaction on node 1. Should pass
merge_tx_2 = self.nodes[1].z_mergetoaddress(["ANY_SPROUT"], sprout_addr_node2)
wait_and_assert_operationid_status(self.nodes[1], merge_tx_2['opid'])
print("Sprout -> Sprout z_mergetoaddress tx accepted at NU5 activation on node 1")
self.nodes[1].generate(1)
self.sync_all()
if __name__ == '__main__':
RemoveSproutShieldingTest().main()

View File

@ -4,7 +4,7 @@
# Distributed under the MIT software license, see the accompanying
# file COPYING or https://www.opensource.org/licenses/mit-license.php .
# Test for -rpcbind, as well as -rpcallowip and -rpcconnect
# Test for -rpcbind and -rpcallowip
# Dependency: python-bitcoinrpc

View File

@ -23,6 +23,7 @@ class ShorterBlockTimes(BitcoinTestFramework):
def setup_nodes(self):
return start_nodes(self.num_nodes, self.options.tmpdir, extra_args=[[
'-minrelaytxfee=0',
nuparams(BLOSSOM_BRANCH_ID, 106),
'-allowdeprecated=z_getnewaddress',
'-allowdeprecated=z_gettotalbalance',

View File

@ -40,15 +40,22 @@ Options:
-allowdeprecated=<feature>
Explicitly allow the use of the specified deprecated feature. Multiple
instances of this parameter are permitted; values for <feature> must be
selected from among {"none", "gbt_oldhashes", "addrtype",
selected from among {"none", "deprecationinfo_deprecationheight",
"gbt_oldhashes", "z_getbalance", "z_gettotalbalance", "addrtype",
"getnewaddress", "getrawchangeaddress", "legacy_privacy",
"wallettxvjoinsplit", "z_getbalance", "z_getnewaddress",
"z_gettotalbalance", "z_listaddresses"}
"wallettxvjoinsplit", "z_getnewaddress", "z_listaddresses"}
-blocknotify=<cmd>
Execute command when the best block changes (%s in cmd is replaced by
block hash)
| -blocksonly
| Whether to reject transactions from network peers. Automatic broadcast
| and rebroadcast of any transactions from inbound peers is disabled,
| unless '-whitelistforcerelay' is '1', in which case whitelisted peers'
| transactions will be relayed. RPC transactions are not affected.
| (default: 0)
|
-checkblocks=<n>
How many blocks to check at startup (default: 288, 0 = all)
@ -198,6 +205,10 @@ Connection options:
Support filtering of blocks and transaction with bloom filters (default:
1)
| -enforcenodebloom
| Enforce minimum protocol version to limit use of bloom filters (default:
| 0)
|
-port=<port>
Listen for connections on <port> (default: 8233 or testnet: 18233)
@ -257,16 +268,16 @@ Wallet options:
-migrationdestaddress=<zaddr>
Set the Sapling migration address
-mintxfee=<amt>
Fees (in ZEC/kB) smaller than this are considered zero fee for
transaction creation (default: 0.00001)
-orchardactionlimit=<n>
Set the maximum number of Orchard actions permitted in a transaction
(default 50)
-paytxfee=<amt>
Fee (in ZEC/kB) to add to transactions you send (default: 0.00)
The preferred fee rate (in ZEC per 1000 bytes) used for transactions
created by legacy APIs (sendtoaddress, sendmany, and
fundrawtransaction). If the transaction is less than 1000 bytes then the
fee rate is applied as though it were 1000 bytes. When this option is
not set, the ZIP 317 fee calculation is used.
-rescan
Rescan the block chain for missing wallet transactions on startup
@ -275,16 +286,9 @@ Wallet options:
Attempt to recover private keys from a corrupt wallet on startup
(implies -rescan)
-sendfreetransactions
Send transactions as zero-fee transactions if possible (default: 0)
-spendzeroconfchange
Spend unconfirmed change when sending transactions (default: 1)
-txconfirmtarget=<n>
If paytxfee is not set, include enough fee so transactions begin
confirmation on average within n blocks (default: 2)
-txexpirydelta
Set the number of blocks after which a transaction that has not been
mined will become invalid (min: 4, default: 20 (pre-Blossom) or 40
@ -316,6 +320,18 @@ Wallet options:
with `-walletrequirebackup=false` to allow generation of spending keys
even if the backup has not yet been confirmed.
|Wallet debugging/testing options:
|
| -dblogsize=<n>
| Flush wallet database activity from memory to disk log every <n>
| megabytes (default: 100)
|
| -flushwallet
| Run a thread to flush wallet periodically (default: 1)
|
| -privdb
| Sets the DB_PRIVATE flag in the wallet db environment (default: 1)
|
ZeroMQ notification options:
-zmqpubhashblock=<address>
@ -356,6 +372,58 @@ Debugging/Testing options:
-uacomment=<cmt>
Append comment to the user agent string
| -checkblockindex
| Do a full consistency check for mapBlockIndex, setBlockIndexCandidates,
| chainActive and mapBlocksUnlinked occasionally. (default: 0)
|
| -checkmempool=<n>
| Run checks every <n> transactions (default: 0)
|
| -checkpoints
| Disable expensive verification for known chain history (default: 1)
|
| -disablesafemode
| Disable safemode, override a real safe mode event (default: 0)
|
| -testsafemode
| Force safe mode (default: 0)
|
| -dropmessagestest=<n>
| Randomly drop 1 of every <n> network messages
|
| -fuzzmessagestest=<n>
| Randomly fuzz 1 of every <n> network messages
|
| -stopafterblockimport
| Stop running after importing blocks from disk (default: 0)
|
| -limitancestorcount=<n>
| Do not accept transactions if number of in-mempool ancestors is <n> or
| more (default: 100)
|
| -limitancestorsize=<n>
| Do not accept transactions whose size with all in-mempool ancestors
| exceeds <n> kilobytes (default: 1800)
|
| -limitdescendantcount=<n>
| Do not accept transactions if any ancestor would have <n> or more
| in-mempool descendants (default: 1000)
|
| -limitdescendantsize=<n>
| Do not accept transactions if any ancestor would have more than <n>
| kilobytes of in-mempool descendants (default: 5000).
|
| -nuparams=hexBranchId:activationHeight
| Use given activation height for specified network upgrade (regtest-only)
|
| -nurejectoldversions
| Reject peers that don't know about the current epoch (regtest-only)
| (default: 1)
|
| -fundingstream=streamId:startHeight:endHeight:comma_delimited_addresses
| Use given addresses for block subsidy share paid to the funding stream
| with id <streamId> (regtest-only)
|
-debug=<category>
Output debugging information (default: 0, supplying <category> is
optional). If <category> is not supplied or if <category> = 1, output
@ -368,6 +436,9 @@ Debugging/Testing options:
-experimentalfeatures
Enable use of experimental features
| -nodebug
| Turn off debugging messages, same as -debug=0
|
-help-debug
Show all debugging options (usage: --help -help-debug)
@ -377,9 +448,25 @@ Debugging/Testing options:
-logtimestamps
Prepend debug output with timestamp (default: 1)
| -clockoffset=<n>
| Applies offset of <n> seconds to the actual time. Incompatible with
| -mocktime (default: 0)
|
| -mocktime=<n>
| Replace actual time with <n> seconds since epoch. Incompatible with
| -clockoffset (default: 0)
|
| -maxsigcachesize=<n>
| Limit total size of signature and bundle caches to <n> MiB (default: 32)
|
| -maxtipage=<n>
| Maximum tip age in seconds to consider node in initial block download
| (default: 86400)
|
-minrelaytxfee=<amt>
Fees (in ZEC/kB) smaller than this are considered zero fee for relaying,
mining and transaction creation (default: 0.000001)
Transactions must have at least this fee rate (in ZEC per 1000 bytes)
for relaying, mining and transaction creation (default: 0.000001). This
is not the only fee constraint.
-maxtxfee=<amt>
Maximum total fees (in ZEC) to use in a single wallet transaction or raw
@ -389,11 +476,21 @@ Debugging/Testing options:
-printtoconsole
Send trace/debug info to console instead of the debug log
| -printpriority
| Log the modified fee, conventional fee, size, number of logical actions,
| and number of unpaid actions for each transaction when mining blocks
| (default: 0)
|
Chain selection options:
-testnet
Use the test chain
| -regtest
| Enter regression test mode, which uses a special chain in which blocks
| can be solved instantly. This is intended for regression testing tools
| and app development.
|
Node relay options:
-datacarrier
@ -405,16 +502,16 @@ Node relay options:
Block creation options:
-blockminsize=<n>
Set minimum block size in bytes (default: 0)
-blockmaxsize=<n>
Set maximum block size in bytes (default: 2000000)
-blockprioritysize=<n>
Set maximum size of high-priority/low-fee transactions in bytes
(default: 1000000)
-blockunpaidactionlimit=<n>
Set the limit on unpaid actions that will be accepted in a block for
transactions paying less than the ZIP 317 fee (default: 50)
| -blockversion=<n>
| Override block version to test forking scenarios (default: 4)
|
Mining options:
-gen
@ -476,6 +573,12 @@ RPC server options:
-rpcthreads=<n>
Set the number of threads to service RPC calls (default: 4)
| -rpcworkqueue=<n>
| Set the depth of the work queue to service RPC calls (default: 16)
|
| -rpcservertimeout=<n>
| Timeout during HTTP requests (default: 30)
|
Metrics Options (only if -daemon and -printtoconsole are not set):
-showmetrics
@ -502,16 +605,15 @@ class ShowHelpTest(BitcoinTestFramework):
def setup_network(self):
self.nodes = []
def show_help(self):
def show_help(self, expected, extra_args):
with tempfile.SpooledTemporaryFile(max_size=2**16) as log_stdout:
args = [ zcashd_binary(), "--help" ]
args = [ zcashd_binary(), "--help" ] + extra_args
process = subprocess.run(args, stdout=log_stdout)
assert_equal(process.returncode, 0)
log_stdout.seek(0)
stdout = log_stdout.read().decode('utf-8')
# Skip the first line which contains version information.
actual = stdout.split('\n', 1)[1]
expected = help_message
changed = False
@ -536,10 +638,14 @@ class ShowHelpTest(BitcoinTestFramework):
'expected',
'actual',
))
raise AssertionError('Help text has changed:\n' + diff)
raise AssertionError("'%s' text has changed:\n%s" % (' '.join(args), diff))
def run_test(self):
self.show_help()
expected = "".join([line + "\n" for line in help_message.splitlines() if not line.startswith("|")])
self.show_help(expected, [])
expected_debug = "".join([line.lstrip("|") + "\n" for line in help_message.splitlines()])
self.show_help(expected_debug, ["-help-debug"])
if __name__ == '__main__':
ShowHelpTest().main()

View File

@ -78,12 +78,13 @@ def small_txpuzzle_randfee(from_node, conflist, unconflist, amount, min_fee, fee
return (completetx, fee)
def split_inputs(from_node, txins, txouts, initial_split = False):
'''
We need to generate a lot of very small inputs so we can generate a ton of transactions
and they will have low priority.
"""
We need to generate a lot of inputs so we can generate a ton of transactions.
This function takes an input from txins, and creates and sends a transaction
which splits the value into 2 outputs which are appended to txouts.
'''
Previously this was designed to be small inputs so they wouldn't have
a high coin age when the notion of priority still existed.
"""
prevtxout = txins.pop()
inputs = []
outputs = {}
@ -150,16 +151,16 @@ class EstimateFeeTest(BitcoinTestFramework):
def setup_network(self):
'''
We'll setup the network to have 3 nodes that all mine with different parameters.
But first we need to use one node to create a lot of small low priority outputs
But first we need to use one node to create a lot of outputs
which we will use to generate our transactions.
'''
self.nodes = []
# Use node0 to mine blocks for input splitting
self.nodes.append(start_node(0, self.options.tmpdir, ["-maxorphantx=1000",
"-relaypriority=0", "-whitelist=127.0.0.1"]))
"-whitelist=127.0.0.1"]))
print("This test is time consuming, please be patient")
print("Splitting inputs to small size so we can generate low priority tx's")
print("Splitting inputs so we can generate tx's")
self.txouts = []
self.txouts2 = []
# Split a coinbase into two transaction puzzle outputs
@ -188,18 +189,16 @@ class EstimateFeeTest(BitcoinTestFramework):
# Now we can connect the other nodes, didn't want to connect them earlier
# so the estimates would not be affected by the splitting transactions
# Node1 mines small blocks but that are bigger than the expected transaction rate,
# and allows free transactions.
# Node1 mines small blocks but that are bigger than the expected transaction rate.
# NOTE: the CreateNewBlock code starts counting block size at 1,000 bytes,
# (17k is room enough for 110 or so transactions)
self.nodes.append(start_node(1, self.options.tmpdir,
["-blockprioritysize=1500", "-blockmaxsize=18000",
"-maxorphantx=1000", "-relaypriority=0", "-debug=estimatefee"]))
["-blockmaxsize=18000", "-maxorphantx=1000", "-debug=estimatefee"]))
connect_nodes(self.nodes[1], 0)
# Node2 is a stingy miner, that
# produces too small blocks (room for only 70 or so transactions)
node2args = ["-blockprioritysize=0", "-blockmaxsize=12000", "-maxorphantx=1000", "-relaypriority=0"]
node2args = ["-blockmaxsize=12000", "-maxorphantx=1000"]
self.nodes.append(start_node(2, self.options.tmpdir, node2args))
connect_nodes(self.nodes[0], 2)

View File

@ -190,6 +190,7 @@ class ComparisonTestFramework(BitcoinTestFramework):
super().__init__()
self.num_nodes = 1
self.cache_behavior = 'clean'
self.additional_args = []
def add_options(self, parser):
parser.add_option("--testbinary", dest="testbinary",
@ -202,7 +203,7 @@ class ComparisonTestFramework(BitcoinTestFramework):
def setup_network(self):
self.nodes = start_nodes(
self.num_nodes, self.options.tmpdir,
extra_args=[['-debug', '-whitelist=127.0.0.1']] * self.num_nodes,
extra_args=[['-debug', '-whitelist=127.0.0.1'] + self.additional_args] * self.num_nodes,
binary=[self.options.testbinary] +
[self.options.refbinary]*(self.num_nodes-1))

View File

@ -101,10 +101,10 @@ def rpc_port(n):
return PORT_MIN + PORT_RANGE + n + (MAX_NODES * PortSeed.n) % (PORT_RANGE - 1 - MAX_NODES)
def check_json_precision():
"""Make sure json library being used does not lose precision converting BTC values"""
"""Make sure json library being used does not lose precision converting ZEC values"""
n = Decimal("20000000.00000003")
satoshis = int(json.loads(json.dumps(float(n)))*1.0e8)
if satoshis != 2000000000000003:
zatoshis = int(json.loads(json.dumps(float(n)))*1.0e8)
if zatoshis != 2000000000000003:
raise RuntimeError("JSON encode/decode loses precision")
def bytes_to_hex_str(byte_str):
@ -552,47 +552,6 @@ def make_change(from_node, amount_in, amount_out, fee):
outputs[from_node.getnewaddress()] = change
return outputs
def send_zeropri_transaction(from_node, to_node, amount, fee):
"""
Create&broadcast a zero-priority transaction.
Returns (txid, hex-encoded-txdata)
Ensures transaction is zero-priority by first creating a send-to-self,
then using its output
"""
# Create a send-to-self with confirmed inputs:
self_address = from_node.getnewaddress()
(total_in, inputs) = gather_inputs(from_node, amount+fee*2)
outputs = make_change(from_node, total_in, amount+fee, fee)
outputs[self_address] = float(amount+fee)
self_rawtx = from_node.createrawtransaction(inputs, outputs)
self_signresult = from_node.signrawtransaction(self_rawtx)
self_txid = from_node.sendrawtransaction(self_signresult["hex"], True)
vout = find_output(from_node, self_txid, amount+fee)
# Now immediately spend the output to create a 1-input, 1-output
# zero-priority transaction:
inputs = [ { "txid" : self_txid, "vout" : vout } ]
outputs = { to_node.getnewaddress() : float(amount) }
rawtx = from_node.createrawtransaction(inputs, outputs)
signresult = from_node.signrawtransaction(rawtx)
txid = from_node.sendrawtransaction(signresult["hex"], True)
return (txid, signresult["hex"])
def random_zeropri_transaction(nodes, amount, min_fee, fee_increment, fee_variants):
"""
Create a random zero-priority transaction.
Returns (txid, hex-encoded-transaction-data, fee)
"""
from_node = random.choice(nodes)
to_node = random.choice(nodes)
fee = min_fee + fee_increment*random.randint(0,fee_variants)
(txid, txhex) = send_zeropri_transaction(from_node, to_node, amount, fee)
return (txid, txhex, fee)
def random_transaction(nodes, amount, min_fee, fee_increment, fee_variants):
"""
Create a random transaction.

View File

@ -0,0 +1,39 @@
#!/usr/bin/env python3
# Copyright (c) 2023 The Zcash developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or https://www.opensource.org/licenses/mit-license.php .
#
# zip317.py
#
# Utilities for ZIP 317 conventional fee specification, as defined in https://zips.z.cash/zip-0317.
#
from test_framework.mininode import COIN
from decimal import Decimal
# The fee per logical action, in zatoshis. See https://zips.z.cash/zip-0317#fee-calculation.
MARGINAL_FEE = 5000
# The lower bound on the number of logical actions in a tx, for purposes of fee calculation. See
# https://zips.z.cash/zip-0317#fee-calculation.
GRACE_ACTIONS = 2
# Limits the relative probability of picking a given transaction to be at most `WEIGHT_RATIO_CAP`
# times greater than a transaction that pays exactly the conventional fee. See
# https://zips.z.cash/zip-0317#recommended-algorithm-for-block-template-construction
WEIGHT_RATIO_CAP = 4
# Default limit on the number of unpaid actions in a block. See
# https://zips.z.cash/zip-0317#recommended-algorithm-for-block-template-construction
DEFAULT_BLOCK_UNPAID_ACTION_LIMIT = 50
# The zcashd RPC sentinel value to indicate the conventional_fee when a positional argument is
# required.
ZIP_317_FEE = None
def conventional_fee_zats(logical_actions):
return MARGINAL_FEE * max(GRACE_ACTIONS, logical_actions)
def conventional_fee(logical_actions):
return Decimal(conventional_fee_zats(logical_actions)) / COIN

View File

@ -41,6 +41,7 @@ from test_framework.util import (
from decimal import Decimal
BASE_ARGS = [
'-minrelaytxfee=0',
'-allowdeprecated=z_getnewaddress',
'-allowdeprecated=z_getbalance',
]

View File

@ -26,6 +26,7 @@ class TxnMallTest(BitcoinTestFramework):
def setup_nodes(self):
return start_nodes(self.num_nodes, self.options.tmpdir, extra_args=[[
'-minrelaytxfee=0',
'-allowdeprecated=getnewaddress',
]] * self.num_nodes)
@ -44,7 +45,7 @@ class TxnMallTest(BitcoinTestFramework):
# Coins are sent to node1_address
node1_address = self.nodes[1].getnewaddress("")
# First: use raw transaction API to send (starting_balance - (mining_reward - 2)) BTC to node1_address,
# First: use raw transaction API to send (starting_balance - (mining_reward - 2)) ZEC to node1_address,
# but don't broadcast:
(total_in, inputs) = gather_inputs(self.nodes[0], (starting_balance - (mining_reward - 2)))
change_address = self.nodes[0].getnewaddress("")

Some files were not shown because too many files have changed in this diff Show More