Fixes#2480 where missing map entry would cause a segfault.
`wtxHeight = mapBlockIndex[wtx.hashBlock]->nHeight;` results in undefined behaviour when the block hash is not present in the map, returning a null value which is dereferenced via `->nHeight`. This error is triggered by a zero-conf wallet transaction which has not been mined yet. As discussed in #2480, on some systems there is a segfault whilst on others there is a silent exit. This makes it difficult to write a test, but the fix has been tested empirically to confirm an exception is thrown. This PR fixes the segfault and complements #2525 which prevents a user from sending from a zaddr with minconf 0.
Ansible playbook for configuring CI workers
The playbook in this PR can be used for configuring common Unix variants to run a Buildbot worker for the Zcash CI, starting from a fresh install (or a VM template provided by a hosting service).
Pull in temporary release notes during the release process
This PR assumes we always have at least one notable change in `doc/release-notes.md`, which should be the case for every release.
Add ability for node to reject tx from mempool by number of tx inputs
Implement short-term solution described in #2343 so that users can respond promptly to critical short-term problems caused by quadratic validation scaling, such as the getblocktemplate latency, block propagation latency, and mempool size inflation issues described in #2333.
Remove unneeded lax ECDSA signature verification
Fixes#2359. Removes code for lax ECDSA verification, and the SCRIPT_VERIFY_DERSIG flag that controlled it. The behaviour is as-if the flag is always set.
[mining] let "getblocktemplate" work when disable wallet
we already support GetBlockTemplate without build wallet, see:
https://github.com/zcash/zcash/blob/master/src/rpcmining.cpp
```
// Wallet or miner address is required because we support coinbasetxn
if (GetArg("-mineraddress", "").empty()) {
#ifdef ENABLE_WALLET
if (!pwalletMain) {
throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Wallet disabled and -mineraddress not set");
}
#else
throw JSONRPCError(RPC_METHOD_NOT_FOUND, "zcashd compiled without wallet and -mineraddress not set");
#endif
}
```
so the macro should be removed from `src/rpcserver.cpp`, otherwise you can't call `getblocktemplate` when you disable wallet.
Switch to libsecp256k1-based validation for ECDSA
Cherry-picked from the following upstream PRs:
- bitcoin/bitcoin#6983
- bitcoin/bitcoin#6954
Part of #2333.
support per platform filename and hash setting for dependencies
added to support per-platform Rust packages, tested on macOS Sierra 10.12.5 and Ubuntu 16.04 LTS (issue #2431)
Use real number of cores, ignore virtual cores
Cherry-picked from the following upstream PRs:
- bitcoin/bitcoin#6361
- bitcoin/bitcoin#6370
Part of #2074.
[macOS] system linker does not support “--version” option but only “-v”
To build Zcash on macOS Sierra I use a self-built gcc-6.3/g++-6.3 but macOS linker (/usr/bin/ld). macOS linker does not support “--version” option but “-v”
On Ubuntu 16.04
```
$ ld --version
GNU ld (GNU Binutils for Ubuntu) 2.26.1
Copyright (C) 2015 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
$ ld -v
GNU ld (GNU Binutils for Ubuntu) 2.26.1
```
On macOS Sierra
```
$ ld --version
ld: unknown option: --version
$ ld -v
@(#)PROGRAM:ld PROJECT:ld64-278.4
configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em (tvOS)
LTO support using: LLVM version 8.1.0, (clang-802.0.42)
TAPI support using: Apple TAPI version 1.33.11
```
Define the deprecation policy for 1.0.9.
This explicitly avoids naming any release-specific data so we can leave
this text unchanged for upcoming releases.
ref: #2398
make-release.py script
ref #2391
This is a new `make-release.py` script which automates creation of the 'release PR' branch.
It has partial unittest coverage (large around version parsing/sorting/serializing) and always runs unittests prior to doing actual work. Most of the testing was done manually by using the ``--repo`` arg on a test repo, then reseting its state each time I needed a new test (to get around git checks). There is no other 'dry run' functionality.
Benchmark for calling ConnectBlock on a block with many inputs
Requires placing `block-107134.tar.gz` (containing the block, and a fake CoinsDB containing its inputs) into the base directory of the repository.
To facilitate generation of the fake CoinsDB, an additional field `valuesZat` has been added to `getrawtransaction` containing the integer number of zatoshis instead of a decimal number of ZEC.
Closes#2355.
Print toolchain versions before making depends, autoconf, or main build.
Closes#2218.
Note: I spent a half hour attempting to have make do this so that people not using `build.sh` would get the same output. There's no easy way I found to ensure that output occurs first and regardless of the result of other build rules.
Change help text examples to use Zcash addresses
Closes#1804 and #2109
Ensures command line help text addresses are Zcash addresses.
Didn't change the text strings that say bitcoin or btc, leaving that for #2150 to close
Did I get all the addresses?
Fix an error reporting bug due to BrokenPipeError and ConnectionResetError not existing in Python 2
refs #2263
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
Add message directing users to security guide
Addresses #2142, which was blocking on updates to zcash/support/security.html. That page has now been added, so this message directing users to the site can be included.
It displays in the zcash-cli --help and --version message text, and on the zcashd metrics screen.
Usability improvements for z_importkey
- Add height parameter to z_importkey to reduce rescan range
- Change semantics of rescan parameter, so users can explicitly force a rescan
for existing keys.
Closes#2032
Bitcoin 0.12 mempool memory usage PRs
Cherry-picked from the following upstream PRs:
- bitcoin/bitcoin#6410
- bitcoin/bitcoin#6453
- bitcoin/bitcoin#6013 (excludes changes to docs we deleted)
Part of #2074.
Introduce Rust/librustzcash into the zcash build system
Introduces Rust into the build system and brings a trivial xor operation into the code (near where we will likely be working).
Removed markdown from COPYING
Updated the Copyright statement at the top of the file from "2016" to "2016-2017" and removed markdown markup from the main text.
Bitcoin 0.12 test PRs 1
Cherry-picked from the following upstream PRs:
- bitcoin/bitcoin#6337
- bitcoin/bitcoin#6390
- bitcoin/bitcoin#5515
- bitcoin/bitcoin#6287 (partial, remainder included in bitcoin/bitcoin#6703)
- bitcoin/bitcoin#6465
Part of #2074.
Don't assume sizes of unsigned short and unsigned int in GetSizeOfCompactSize and WriteCompactSize.
Fixes#2137
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
Test prioritisetransaction
After talking with @str4d about #1884 , I wrote a test for prioritisetransaction. It uses small blocks (11kb), and checks whether a transaction makes it into the next block after being prioritized by that node.
Should this be improved with a larger number of txs in the mempool, or by testing over multiple runs?
As for getblocktemplate(), it seems to return the prioritized transaction within the block size set by the node (about 50 txs fit in an 11kb block), but the block "sizelimit" it displays is set at 2 MB in `rpcmining.cpp` line 690:
```
result.push_back(Pair("sizelimit", (int64_t)MAX_BLOCK_SIZE));
```
This was quite confusing, I didn't think the `-blockmaxsize` parameter I was setting was working for awhile.
Closes#2113. Fixes bug in test and updates testnet fr addresses.
Updating the testnet fr addresses will introduce a consensus change on testnet, so all testnet nodes will be required to upgrade. See #2113 for more information.
Closes#2112 where z_getoperationresult could return stale status.
The problem was similar to a check-then-act race condition. Status object was obtained from an operation, which might be in an 'executing' state. Instead of checking the state recorded in the status object, the operation was queried again to see if it was in a finished state (failed,success,cancelled) and if yes, the status object was returned to the user. However, if the operation had changed state in the background, the status object would be stale.
Fix sha256sum on busybox
Busybox's version of `sha256sum` doesn't support `--check` parameter
```
/usr/bin/sha256sum: unrecognized option: check
BusyBox v1.24.2 (2016-08-12 14:38:34 GMT) multi-call binary.
Usage: sha256sum [-c[sw]] [FILE]...
Print or check SHA256 checksums
-c Check sums against list in FILEs
-s Don't output anything, status code shows success
-w Warn about improperly formatted checksum lines
The command '/bin/sh -c ./zcutil/fetch-params.sh' returned a non-zero code: 1```
Convert entire source tree from json_spirit to UniValue
This PR cherry-picks bitcoin/bitcoin#6121 and then migrates the Zcash-specific code to UniValue.
Also cherry-picks:
- bitcoin/bitcoin#6241
- bitcoin/bitcoin#6234
Closes#1985.