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:
parent
27f9e77549
commit
5cfaef7bbd
|
@ -1,4 +1,5 @@
|
|||
.idea
|
||||
target
|
||||
*.iml
|
||||
Cargo.lock
|
||||
Cargo.lock
|
||||
.\#*
|
||||
|
|
11
CHANGELOG.md
11
CHANGELOG.md
|
@ -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
|
||||
|
|
32
Cargo.toml
32
Cargo.toml
|
@ -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.
|
||||
|
|
|
@ -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`
|
||||
|
||||
|
|
54
build.rs
54
build.rs
|
@ -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")
|
||||
|
|
|
@ -12,3 +12,6 @@ indent_size = 4
|
|||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[{Makefile*, *.mk}]
|
||||
indent_style = tab
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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/
|
||||
|
|
|
@ -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)"
|
|
@ -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",
|
||||
})
|
|
@ -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
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Zcash 5.4.0
|
||||
Zcash 5.5.0
|
||||
<img align="right" width="120" height="80" src="doc/imgs/logo.png">
|
||||
===========
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
name: "zcash-5.4.0"
|
||||
name: "zcash-5.5.0"
|
||||
enable_cache: true
|
||||
distro: "debian"
|
||||
suites:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
name: "zcash-5.4.0"
|
||||
name: "zcash-5.5.0"
|
||||
enable_cache: true
|
||||
distro: "debian"
|
||||
suites:
|
||||
|
|
|
@ -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:
|
|
@ -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": ""
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
[paths]
|
||||
provisioning = /etc/grafana/provisioning
|
|
@ -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
|
|
@ -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
|
|
@ -3,4 +3,4 @@ scrape_configs:
|
|||
scrape_interval: 500ms
|
||||
metrics_path: '/'
|
||||
static_configs:
|
||||
- targets: ['127.0.0.1:9969']
|
||||
- targets: ['host.docker.internal:9969']
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 - && \
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 && \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 && \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
-------
|
||||
|
|
|
@ -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/).
|
||||
|
||||
|
|
|
@ -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 -->
|
|
@ -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/>.
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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 don’t 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 aren’t 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
|
||||
Don’t pass PrivacyPolicy to selector constructor
|
||||
Address comments on WalletTxBuilder introduction
|
||||
Make RPC test output more deterministic
|
||||
Update WalletTxBuilder based on review
|
||||
Clarify `AddressResolutionError`
|
||||
Don’t 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 LegacyCompat–ZTXOSelector 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
|
||||
Don’t 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
|
||||
|
|
@ -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 don’t 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 aren’t 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
|
||||
Don’t pass PrivacyPolicy to selector constructor
|
||||
Address comments on WalletTxBuilder introduction
|
||||
Make RPC test output more deterministic
|
||||
Update WalletTxBuilder based on review
|
||||
Clarify `AddressResolutionError`
|
||||
Don’t 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 LegacyCompat–ZTXOSelector 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
|
||||
Don’t 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
|
||||
|
|
@ -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 don’t 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 aren’t 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
|
||||
Don’t pass PrivacyPolicy to selector constructor
|
||||
Address comments on WalletTxBuilder introduction
|
||||
Make RPC test output more deterministic
|
||||
Update WalletTxBuilder based on review
|
||||
Clarify `AddressResolutionError`
|
||||
Don’t 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 LegacyCompat–ZTXOSelector 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
|
||||
Don’t 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
|
||||
|
|
@ -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 don’t 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 aren’t 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
|
||||
Don’t pass PrivacyPolicy to selector constructor
|
||||
Address comments on WalletTxBuilder introduction
|
||||
Make RPC test output more deterministic
|
||||
Update WalletTxBuilder based on review
|
||||
Clarify `AddressResolutionError`
|
||||
Don’t 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 LegacyCompat–ZTXOSelector 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
|
||||
Don’t 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
|
||||
|
|
@ -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):
|
||||
|
|
|
@ -50,6 +50,7 @@ class AddressIndexTest(BitcoinTestFramework):
|
|||
|
||||
def setup_network(self):
|
||||
base_args = [
|
||||
'-minrelaytxfee=0',
|
||||
'-debug',
|
||||
'-txindex',
|
||||
'-experimentalfeatures',
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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. '''
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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())
|
||||
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 didn’t 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 can’t yet merge from UAs, so ensure we’re 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()
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 can’t merge from Orchard, the existing tests don’t 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 don’t have an `'ANY_ORCHARD'` yet and `'ANY_SPROUT'` isn’t 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()
|
|
@ -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()
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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__':
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
|
@ -41,6 +41,7 @@ from test_framework.util import (
|
|||
from decimal import Decimal
|
||||
|
||||
BASE_ARGS = [
|
||||
'-minrelaytxfee=0',
|
||||
'-allowdeprecated=z_getnewaddress',
|
||||
'-allowdeprecated=z_getbalance',
|
||||
]
|
||||
|
|
|
@ -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
Loading…
Reference in New Issue