Importprivkey shows address
Scratching an itch: make `importprivkey` output the corresponding address.
Without this PR, `importprivkey` shows no output. Because we're moving towards an "address-based" RPC interface, rather than "account-based", there's a gap when using `importprivkey` because there's no way to assign it to a specific account, but also no easy way to determine the address. This change fixes that wart.
Fetch params from ipfs if possible
This patch allows fetch-params to download the params from [ipfs], if it's installed. This reduces the need for a central server and ensures the params are available if the official server ceases to exist.
For now, the default is still wget. If wget exits with an error, the script automatically tries ipfs. To use ipfs instead of wget:
ZC_DISABLE_WGET=1 ./zcutil/fetch-params.sh
[ipfs]: https://github.com/ipfs/go-ipfs
Fixes for gcc 7
This fixes a few issues when using a newer compiler (in my case gcc 7.1.1) available in for example Arch Linux.
Solves for example this issue: https://github.com/zcash/zcash/issues/2304
The first thing is an error when checking for boost_system and is solved by disabling that warning (wich is treated as an error and, hence, stops the build):
```
configure:22242: checking for exit in -lboost_system-mt
configure:22267: g++ -m64 -o conftest -std=c++11 -pipe -fPIC -O1 -fwrapv -fno-strict-aliasing -Werror -g -Wformat -Wformat-security -Wstack-protector -fstack-protector-all -fPIE ..<snip>... /x86_64-unknown-linux-gnu/share/../lib conftest.cpp -lboost_system-mt -lanl >&5
conftest.cpp:70:6: error: declaration of 'char exit()' conflicts with built-in declaration 'void exit(int)' [-Werror=builtin-declaration-mismatch]
char exit ();
^~~~
cc1plus: all warnings being treated as errors
```
The second thing was to clean some code that is deprecated in C++11 which also lead to a warning treated as error. It could also be fixed with `-Wno-deprecated` but better to fix the issue in my opinion.
Fix deprecation policy comment.
Thanks to @daira for spotting this and suggesting the correct policy.
Feel free to adjust wording, this is primarily to track the issue and suggest a potential fix.
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.