Commit Graph

9408 Commits

Author SHA1 Message Date
Kaz Wesley 817e36b217 LockedPool: fix explosion for illegal-sized alloc
Check for unreasonable alloc size in LockedPool rather than lancing through new
Arenas until we improbably find one worthy of the quixotic request or the system
can support no more Arenas.
2020-07-31 06:51:00 +01:00
Kaz Wesley 509652e936 LockedPool: test handling of invalid allocations
(Currently fails due to bug)
2020-07-31 06:51:00 +01:00
Pavel Janík d0df44f151 Do not shadow variable, use deprecated MAP_ANON if MAP_ANONYMOUS is not defined. 2020-07-31 06:51:00 +01:00
Wladimir J. van der Laan 088219f786 bench: Add benchmark for lockedpool allocation/deallocation 2020-07-31 06:43:09 +01:00
Wladimir J. van der Laan 82a667591e rpc: Add `getmemoryinfo` call
```
getmemoryinfo
Returns an object containing information about memory usage.

Result:
{
  "locked": {               (json object) Information about locked memory manager
    "used": xxxxx,          (numeric) Number of bytes used
    "free": xxxxx,          (numeric) Number of bytes available in current arenas
    "total": xxxxxxx,       (numeric) Total number of bytes managed
    "locked": xxxxxx,       (numeric) Amount of bytes that succeeded locking. If this number is smaller than total, locking pages failed at some point and key data could be swapped to disk.
  }
}

Examples:
> bitcoin-cli getmemoryinfo
> curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getmemoryinfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/
```
2020-07-31 06:43:09 +01:00
Wladimir J. van der Laan d570eabc38 support: Add LockedPool
Add a pool for locked memory chunks, replacing LockedPageManager.

This is something I've been wanting to do for a long time. The current
approach of locking objects where they happen to be on the stack or heap
in-place causes a lot of mlock/munlock system call overhead, slowing
down any handling of keys.

Also locked memory is a limited resource on many operating systems (and
using a lot of it bogs down the system), so the previous approach of
locking every page that may contain any key information (but also other
information) is wasteful.
2020-07-31 06:43:09 +01:00
Wladimir J. van der Laan 8d0f80f831 wallet: Get rid of LockObject and UnlockObject calls in key.h
Replace these with vectors allocated from the secure allocator.

This avoids mlock syscall churn on stack pages, as well as makes
it possible to get rid of these functions.

Please review this commit and the previous one carefully that
no `sizeof(vectortype)` remains in the memcpys and memcmps usage
(ick!), and `.data()` or `&vec[x]` is used as appropriate instead of
&vec.
2020-07-31 06:43:08 +01:00
Wladimir J. van der Laan b997b30a91 wallet: Change CCrypter to use vectors with secure allocator
Change CCrypter to use vectors with secure allocator instead of buffers
on in the object itself which will end up on the stack. This avoids
having to call LockedPageManager to lock stack memory pages to prevent the
memory from being swapped to disk. This is wasteful.
2020-07-31 06:43:08 +01:00
Thomas Snider 20280556ba [trivial] Switched constants to sizeof() 2020-07-31 06:43:08 +01:00
Homu 2589b2fcc5 Auto merge of #4614 - str4d:ctaes, r=str4d
Replace OpenSSL AES with ctaes-based version

Backported from upstream PR https://github.com/bitcoin/bitcoin/pull/7689.

This is backported primarily to remove merge conflicts for a subsequent
backport, and also helps us towards removing OpenSSL. Its actual usage
in wallet encryption would be replaced by a more modern construction
before we make wallet encryption a supported feature, but for now this
does not affect anyone using the experimental feature.
2020-07-31 00:14:40 +00:00
fanquake d84878d853 scripted-diff: prefer MAC_OSX over __APPLE__
-BEGIN VERIFY SCRIPT-
sed -i 's/__APPLE__/MAC_OSX/g' src/compat/byteswap.h src/util.cpp
-END VERIFY SCRIPT-

Zcash: Excludes byteswap.h change as we don't have bitcoin/bitcoin#9366.
2020-07-30 04:33:36 +01:00
Homu f39e4dbaf1 Auto merge of #4627 - LarryRuane:issue4596-flush-wallet-db, r=str4d
flush witness cache (SetBestChain()) on clean shutdown

Closes #4596, follow-on to #4573. In addition to flushing witness data on shutdown, fix the RPC test that was preventing this change from being part of #4573.
2020-07-29 13:12:04 +00:00
Alfredo Garcia 6abcf40a3e
add more allowed duplicates
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2020-07-29 08:45:02 -03:00
Homu 24f3bcf275 Auto merge of #4623 - str4d:metrics-locking, r=str4d
metrics: Collect general stats before clearing screen

This prevents the metrics screen from flashing if locks are being held
by long-running processes, specifically cs_main during block validation.

We split up locking on cs_main and cs_vNodes to make obtaining the locks
easier, at the expense of potentially having slightly out-of-sync
statistics (which doesn't really matter, as all we are fetching from the
latter lock is the number of connected peers).
2020-07-29 09:33:07 +00:00
Homu 91cb52adc5 Auto merge of #4606 - str4d:safe-mode-alert-for-pre-heartwood-nodes, r=str4d
Send alert to put pre-Heartwood nodes into safe mode.

The alert targets nodes running protocol version <= 170010.
Heartwood-compatible nodes run protocol version >= 170011.
2020-07-29 07:59:59 +00:00
therealyingtong 369c16ef44
Set APPROX_RELEASE_HEIGHT to 917000 and update release-notes-3.1.0.md 2020-07-28 07:57:58 +08:00
therealyingtong e4963385a4
make-release.py: Versioning changes for 3.1.0. 2020-07-28 06:54:02 +08:00
Homu d08883263f Auto merge of #4636 - daira:disable-mining-regression, r=daira
Fix "--disable-mining" build regression

closes #4634

Test by building with:
* `CONFIGURE_FLAGS="--disable-tests --disable-mining --disable-bench" zcutil/build.sh`
* `zcutil/distclean.sh`
* `CONFIGURE_FLAGS="--disable-mining" zcutil/build.sh`

After the second build, run `qa/zcash/full-test-suite.py`. Stop when it gets to the RPC tests, which will hang. The preceding parts of the test suite are all expected to pass.

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-27 21:41:25 +00:00
Homu 162d5a50ee Auto merge of #4610 - ebfull:testnet-dev-fund, r=str4d
Add dev fund addresses and set activation height for testnet NU4 activation.
2020-07-27 09:05:53 +00:00
Daira Hopwood 40b9cbf0b1 Allow Equihash validation tests to be compiled with --disable-mining.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-25 16:33:02 +01:00
Daira Hopwood c99a00596f Fix --disable-mining build regression. closes #4634
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-25 15:41:39 +01:00
therealyingtong 283287ab5b
Use 51 Testnet Dev Fund addresses, and adjust the end heights.
Co-authored-by: Ying Tong Lai <yingtong@electriccoin.co>
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-25 09:45:30 +08:00
therealyingtong 62c3613816
Delay testnet activation height by one week 2020-07-24 08:15:35 +08:00
Kris Nuttycombe 04b4d42767 Zero-initialize HistoryNode values. 2020-07-23 16:24:48 -06:00
therealyingtong 13aa74aa45
Pass HistoryNode struct to librustzcash FFI 2020-07-21 17:56:47 +08:00
Larry Ruane a65ecaad54 flush wallet db (SetBestChain()) on clean shutdown 2020-07-20 20:04:48 -06:00
Jack Grigg 5d15ee1f22 metrics: Collect general stats before clearing screen
This prevents the metrics screen from flashing if locks are being held
by long-running processes, specifically cs_main during block validation.

We split up locking on cs_main and cs_vNodes to make obtaining the locks
easier, at the expense of potentially having slightly out-of-sync
statistics (which doesn't really matter, as all we are fetching from the
latter lock is the number of connected peers).
2020-07-18 23:35:19 +12:00
therealyingtong ab4d2ede40
Set PROTOCOL_VERSION to 170012 2020-07-18 00:29:03 +08:00
therealyingtong 8a4c51508a
Set Canopy testnet activation height to 1020500 2020-07-18 00:28:45 +08:00
Daira Hopwood d9307ddd83 Add unit tests for DisplayDuration, DisplaySize, and DisplayHashRate.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-17 13:59:27 +01:00
Daira Hopwood 460a601e9b Metrics screen: display hash rates using SI prefixes rather than as powers of 2.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-17 13:56:33 +01:00
Daira Hopwood 976dce7696 src/metrics.cpp: cosmetic whitespace changes.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-17 13:54:58 +01:00
Jack Grigg 29594f5a91 build: shuffle gtest Makefile so that crypto can be used by the wallet
Wallet must come before crypto, otherwise linking fails on some platforms.

Includes a tangentially-related general cleanup rather than making the Makefile
sloppier.
2020-07-17 20:14:39 +12:00
Cory Fields bdccf18b2e build: Enumerate ctaes rather than globbing 2020-07-17 19:12:53 +12:00
Cory Fields 1682a27c1d crypter: add tests for crypter
Verify that results correct (match known values), consistent (encrypt->decrypt
matches the original), and compatible with the previous openssl implementation.

Also check that failed encrypts/decrypts fail the exact same way as openssl.
2020-07-17 19:12:53 +12:00
Cory Fields 5de6a60c63 crypter: add a BytesToKey clone to replace the use of openssl
BytesToKeySHA512AES should be functionally identical to EVP_BytesToKey, but
drops the dependency on openssl.
2020-07-17 18:52:13 +12:00
Cory Fields 1e056efa79 crypter: hook up the new aes cbc classes 2020-07-17 18:51:46 +12:00
Cory Fields a25a252047 crypter: constify encrypt/decrypt
This makes CCrypter easier to pass aroundf for tests
2020-07-17 18:50:11 +12:00
Cory Fields 8e31c753d7 crypter: fix the stored initialization vector size
AES IV's are 16bytes, not 32. This was harmless but confusing.

Add WALLET_CRYPTO_IV_SIZE to make its usage explicit.
2020-07-17 18:49:51 +12:00
Cory Fields d5b30b36dd crypto: add aes cbc tests 2020-07-17 18:48:55 +12:00
Cory Fields da6ed8088c crypto: add AES 128/256 CBC classes
The output should always match openssl's, even for failed operations. Even for
a decrypt with broken padding, the output is always deterministic (and attemtps
to be constant-time).
2020-07-17 18:48:45 +12:00
Pieter Wuille 77b5fc23cc Add ctaes-based constant time AES implementation 2020-07-17 18:48:21 +12:00
Jack Grigg 513016bf3d Merge commit '114d98bec9990cff18613adf7ff74c1322f00a8b' as 'src/crypto/ctaes' 2020-07-17 18:46:51 +12:00
ewillbefull@gmail.com c0a19854bf Add dev fund addresses for testnet NU4 activation. 2020-07-15 20:09:39 -06:00
Homu d292376176 Auto merge of #4609 - therealyingtong:release-v3.1.0-rc2, r=daira
Release v3.1.0-rc2
2020-07-15 21:25:37 +00:00
Daira Hopwood 3383c4855f More iterator cleanups.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-15 19:18:57 +01:00
therealyingtong 170ea7bda0
make-release.py: Versioning changes for 3.1.0-rc2. 2020-07-15 21:50:12 +08:00
Jack Grigg 42f98aaccb Send alert to put pre-Heartwood nodes into safe mode.
The alert targets nodes running protocol version <= 170010.
Heartwood-compatible nodes run protocol version >= 170011.
2020-07-15 19:45:49 +12:00
Jack Grigg 3611f68811 Revert "Pass the block height through to CheckEquihashSolution()"
This reverts commit 49f9584613.

Now that we are depending unconditionally on the Rust Equihash
validator, CheckEquihashSolution() can revert to being a non-contextual
check.

This also fixes a segfault that would occur during reindexing if the
consensus rules were altered such that a previously-valid block would
become invalid, and the node's block files contained blocks in a
specific order. It was encountered while testing the Canopy NU on
testnet (due to a bug in the implementation of ZIP 212 that was
separately fixed in zcash/zcash#4604).
2020-07-15 16:16:40 +12:00
Jack Grigg 96920e952d Remove C++ Equihash validator 2020-07-15 14:03:45 +12:00
Jack Grigg 79846ac1f3 Use Rust Equihash validator unconditionally
It correctly validates all blocks prior to Heartwood activation.
2020-07-15 13:59:32 +12:00
Daira Hopwood 2336259c1e Fix an unintended consensus change in decryption of coinbase outputs.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-14 22:59:34 +01:00
Daira Hopwood 239ea1270e Add key_constants.h to src/Makefile.am.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-14 17:44:54 +01:00
therealyingtong 0901cb0241
Undo manual DEPRECATION_HEIGHT 2020-07-14 14:46:15 +08:00
therealyingtong e2be85b3af
make-release.py: Versioning changes for 3.1.0-rc1. 2020-07-14 14:36:44 +08:00
Homu 973dff930a Auto merge of #4599 - daira:iterator-cleanup, r=therealyingtong
Clean up some iterator usage

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-14 05:12:41 +00:00
Daira Hopwood 0b0c84f4c9 Another cleanup.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-14 01:00:18 +01:00
Daira Hopwood 57409b7d2b Remove an unnecessary iterator increment.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-14 00:47:34 +01:00
Homu 6caed410c0 Auto merge of #4600 - daira:fix-cscheduler, r=daira
Fix bug in CScheduler
2020-07-13 21:38:06 +00:00
Taylor Hornby daf9ed98a1 Fix bug in CScheduler 2020-07-13 19:40:49 +01:00
Daira Hopwood 66096d540f Clean up some iterator usage.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-13 19:35:26 +01:00
Homu 959f5b09d0 Auto merge of #4560 - str4d:zip-207, r=nuttycom
[ZIP 207] Funding Streams + [ZIP 214] Dev Fund Recipients

Closes #4554. Closes #4555.
2020-07-10 22:45:11 +00:00
Kris Nuttycombe d80857f2b5 Trivial whitespace fix. 2020-07-10 08:31:46 -06:00
Kris Nuttycombe c88b461f89
Apply suggestions from code review
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2020-07-10 08:29:47 -06:00
Kris Nuttycombe 0e7ae06905 Fix assertion check in GetBlockSubsidy 2020-07-10 08:26:33 -06:00
str4d 8f7861573d
Merge pull request #20 from daira/zip-207
Changes to getblocksubsidy RPC, and resolution of a problem with initializing chain params
2020-07-11 01:55:03 +12:00
Daira Hopwood 69cf041d5d Change the format of `getblocksubsidy` output to use an array of funding stream objects.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-10 14:10:26 +01:00
Daira Hopwood 64cfbab3db
Apply suggestions from code review
keyInfo -> keyConstants

Co-authored-by: ying tong <yingtong@z.cash>
2020-07-10 12:33:27 +01:00
Homu 66d4c88943 Auto merge of #4572 - oxarbitrage:issue4571, r=str4d
Add solution rates aproximation to metrics

Closes https://github.com/zcash/zcash/issues/4571
2020-07-10 07:02:14 +00:00
Daira Hopwood aa1b924427 Cosmetic spacing changes.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-10 02:14:42 +01:00
Daira Hopwood 9161071b02 Use ValueFromAmount instead of double arithmetic, and improve variable names.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-10 02:08:30 +01:00
Kris Nuttycombe 9228c3113d Fix typo in constant. 2020-07-09 18:26:11 -06:00
Kris Nuttycombe 9119ca8f86 Rename KeyInfo -> KeyConstants and move out of Consensus namespace. 2020-07-09 18:19:13 -06:00
Kris Nuttycombe 07ff0d19a0 Make evident the relationship between chainparams and key IO. 2020-07-09 17:48:47 -06:00
Daira Hopwood 8121e874e2 Change getblocksubsidy RPC to take into account funding streams.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-09 23:33:14 +01:00
Daira Hopwood 6bd85925e7 Tests for changes to getblocksubsidy.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-09 23:33:14 +01:00
Kris Nuttycombe 7555a7c26a
Use for..in rather than an indexed loop.
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2020-07-09 11:40:23 -06:00
Daira Hopwood 50c1d5cee6 Add GetActiveFundingStreams function.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-07-09 18:32:39 +01:00
Kris Nuttycombe e456d87cbf Merge remote-tracking branch 'upstream/master' into zip-207 2020-07-09 08:23:57 -06:00
Homu 3f4a532588 Auto merge of #4573 - LarryRuane:issue4301-CopyPreviousWitnesses, r=daira
Flush witness data to disk only when it's consistent

Closes #4301. Running this PR's code will not repair a data directory that has been affected by this problem; that requires starting zcashd with the `-rescan` or `-reindex` options.
2020-07-09 11:50:41 +00:00
Homu 701adc38cb Auto merge of #4578 - therealyingtong:zip212-impl, r=str4d
ZIP212 implementation

Closes #4557.
(description by @ebfull, taken from #4575)

* The `SaplingNote` structure has a new enum called `zip212Enabled`. This
  member is private and reflects whether the note was or is being created
  using the derivation method of ZIP 212 (i.e., `BeforeZip212` or `AfterZip212`).
* The `SaplingNotePlaintext` structure has a new unsigned char member
  `leadbyte`. This member is private and contains the leading byte of the
  plaintext (e.g. `0x01`, `0x02`).
* The serialization of `SaplingNotePlaintext` sets `zip212Enabled` to
  `BeforeZip212` iff the serialized note plaintext version is not `0x01`.
* The `r`/`rcm` fields have been removed and replaced with a private field
  `rseed`. `SaplingNote` and `SaplingNotePlaintext` now have a helper method
  `rcm()` which returns the `rcm` either by deriving it with `rseed`
  (if `zip212Enabled` is `AfterZip212`) or returning `rseed` by interpreting
  `rseed` as `rcm`.
* All the methods of obtaining a `SaplingNote` account for these changes:
  - The `SaplingNote` constructor that is used by e.g. the transaction builder,
    and internally samples random `rcm`, now takes a `zip212Enabled` argument
    to decide whether to sample `rcm` the "old" way or the "new" way.
  - The bare constructor for `SaplingNote` is removed.
  - The other constructor which takes the raw contents of the note is only used
    in tests or in `Note.cpp`, but now also takes a `zip212Enabled` argument.
  - The other way of obtaining a note, by calling `SaplingNotePlaintext::note()`,
    has been adjusted.
* The `SaplingNotePlaintext` class now has an `generate_or_derive_esk()` method
  that either samples a random `esk` or derives it using the local `rseed`
  depending on the value of `leadbyte`.
* The encryption routine is modified to consult `generate_or_derive_esk()` and
  provide it to the note encryption object.
* The note encryption objects now take an optional `esk` as input and otherwise
  sample a random `esk` internally. This API functionality is preserved to allow
  for testing.
* The `SaplingNotePlaintext` decryption routines are modified:
  - The out and enc decryption routines now check that `epk` is consistent with
    the derived `esk`.
  -  The out decryption routine for plaintexts also checks that `esk` is
    consistent with what is derived by the note.
* The miner and transaction builder consult the activation of Canopy when
  creating `SaplingNote`s.
* The consensus rules are modified so that shielded outputs (miner rewards)
  must have `v2` note plaintexts after Canopy has activated.
2020-07-09 00:29:07 +00:00
Kris Nuttycombe ca3f5df607 Remove assertion that was breaking regtest in the case that blossom activates after the halving. 2020-07-08 17:02:28 -06:00
Kris Nuttycombe 436dee90de Merge remote-tracking branch 'upstream/master' into zip-207 2020-07-08 15:04:32 -06:00
Kris Nuttycombe 06789f99d3 Fix ordering of transparent outputs such that miner reward is vout[0] 2020-07-08 11:04:47 -06:00
Larry Ruane 872af58d59 undo flushing witness data on shutdown
This fixes wallet_anchorfork.py CI failure, but a separate PR
will restore flushing witness data on shutdown while also
fixing DecrementNoteWitnesses() to not assert when
nd->witnessHeight < indexHeight, which can happen when the
node reorgs upon restart (which this test causes to happen).
2020-07-08 07:50:48 -06:00
therealyingtong dde5cc87b7 Directly call RegtestActivate* in gtests
Co-authored by Jack Grigg (jack@electriccoin.co)
2020-07-08 12:53:03 +08:00
therealyingtong 1020254b6a Pass nHeight instead of pindex to AddToWalletIfInvolvingMe()
Co-authored by Jack Grigg (jack@electriccoin.co) and Sean Bowe (ewillbefull@gmail.com)
2020-07-08 12:53:03 +08:00
therealyingtong 119bae082c Remove old SaplingNote() constructor 2020-07-08 12:53:03 +08:00
therealyingtong 31020d6fc9 Minor changes
Co-authored by Daira Hopwood (daira@jacaranda.org) and Jack Grigg (jack@electriccoin.co)
2020-07-08 12:53:01 +08:00
Jack Grigg 7fa2bb6005 Skip Sprout proof verification for ProofVerifier::Disabled
This behaviour was removed for pre-Sapling Sprout proofs in
https://github.com/zcash/zcash/pull/4060, and was never introduced for
hybrid Sprout proofs.
2020-07-08 13:59:47 +12:00
Jack Grigg 042bd12a5c Move JSDescription::Verify to ProofVerifier::VerifySprout 2020-07-08 13:59:47 +12:00
Jack Grigg 35765ec9de Move ProofVerifier out of the libzcash namespace
It needs to be closer to the root of our dependency tree, so that it can
depend on the transaction format. The libzcash compilation unit is
further from the dependency tree root than the transaction format.
2020-07-08 13:59:47 +12:00
Jack Grigg 7e2558d2e2 Make ZCJoinSplit::prove static and remove ZCJoinSplit globals
We don't support making pre-Sapling JoinSplit proofs, and we load the
parameters for post-Sapling JoinSplit proofs at proving time, so there
is no need for a global ZCJoinSplit to be passed through the APIs.
2020-07-08 13:59:47 +12:00
Jack Grigg a1942a6061 Remove unused declarations left over from libsnark verification 2020-07-08 13:59:47 +12:00
Jack Grigg ed4550eb77 Move GrothProof and SproutProof definitions into zcash/Proof.hpp 2020-07-08 13:59:47 +12:00
Kris Nuttycombe 502896e130 Fix incorrect subtraction of Halving(blossomActivationHeight) from halvingIndex 2020-07-07 16:32:18 -06:00
Homu 1192116598 Auto merge of #4581 - ebfull:zip215-impl-2, r=str4d
ZIP 215 Implementation

This is accompanied by 8c97acde89.
2020-07-07 21:39:49 +00:00
Kris Nuttycombe ea987f5577 Use uint32_t for vFundingStreams indexing. 2020-07-07 09:53:18 -06:00
Kris Nuttycombe 37b4faab6a
Pass by const reference where possible.
Co-authored-by: Larry Ruane <larry@z.cash>
2020-07-07 09:41:32 -06:00
Kris Nuttycombe 88c5bf7217
Minor help message correction.
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2020-07-06 15:41:28 -06:00
Kris Nuttycombe f9b10b866e Trivial comment correction. 2020-07-06 13:15:27 -06:00
Kris Nuttycombe 90fc879492 Move test-only code into test sources. 2020-07-06 13:09:49 -06:00
Kris Nuttycombe 0141aacc67 Add `RegtestDeactivateCanopy` calls to restore shared regtest params. 2020-07-06 12:47:12 -06:00
Kris Nuttycombe 8b363e9a70 Fix funding stream end-height-exclusion bugs 2020-07-06 10:52:41 -06:00
Sean Bowe 249de0808d
Remove outdated comment. 2020-07-03 10:24:35 -06:00
Sean Bowe a9d80b0750
Hash "Zcash" to align tests with ZIP 215 test vectors. 2020-07-03 10:20:37 -06:00
Sean Bowe c3b3e07160
Change LIBSODIUM_ERROR to -1.
We only relied on success being 0 and our code was otherwise agnostic to the
actual return code in the event of failed signature verification, but this
change keeps the API consistent.
2020-07-03 09:37:34 -06:00
Sean Bowe 394947de3a
Migrate ZIP 215 test vectors to gtest suite. 2020-07-03 09:36:34 -06:00
therealyingtong c4821ddceb Refactor bool is_zip_212 to enum Zip212Enabled
Co-authored by Kris Nuttycombe (@nuttycom)
2020-07-03 06:59:21 +08:00
therealyingtong eeda663ff7 Remove plaintext check from GetFilteredNotes
Co-authored by Sean Bowe (ewillbefull@gmail.com)
2020-07-03 06:59:06 +08:00
therealyingtong ee83424c6f Remove plaintext check from AddSaplingSpend
Co-authored by Sean Bowe (ewillbefull@gmail.com)
2020-07-03 06:57:57 +08:00
Homu 602e88ddb9 Auto merge of #4489 - therealyingtong:4479-remove-sprout-shielding, r=str4d
[ZIP 211] Disabling Addition of New Value to the Sprout Value Pool

Disables Sprout outputs after NU4 by checking for nonzero `vpub_old` in transactions after NU4 activation height.

Adds gtests to check expected behaviour before and after NU4 activation height.

edit:
Also modifies `z_` methods in `rpcwallet`, and adds a matching RPC test.

Implements [ZIP 211](https://zips.z.cash/zip-0211), closes #4479
2020-07-02 21:53:51 +00:00
Kris Nuttycombe 834911c0d7 Update HalvingHeight documentation. 2020-07-02 14:30:06 -06:00
Kris Nuttycombe 49ea02925e Merge branch 'zip-207' of github.com:str4d/zcash into zip-207 2020-07-02 13:33:09 -06:00
Kris Nuttycombe d9088ab050
Record-constructor syntax for funding stream initialization.
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2020-07-02 13:32:23 -06:00
Kris Nuttycombe 4d223f9797 Merge remote-tracking branch 'upstream/master' into zip-207 2020-07-02 13:24:45 -06:00
Kris Nuttycombe 5f20ef3c9d Minor naming change FundingStreamShare -> FundingStreamElement 2020-07-02 12:15:26 -06:00
Alfredo Garcia 7db6e37b40 add log aporximation to metrics solution rates 2020-07-02 13:34:07 -03:00
Kris Nuttycombe b17f263c20
Capitalization fixes from code review
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2020-07-02 09:58:12 -06:00
therealyingtong 19d4c47b66 Pass pindex to AddToWalletIfInvolvingMe() 2020-07-02 15:37:37 +08:00
therealyingtong 2f4d7e35c9 Throw error in plaintext deserialization 2020-07-02 15:37:37 +08:00
therealyingtong f24e706079 Replace leadByte in SaplingNote with is_zip_212 2020-07-02 15:37:32 +08:00
Kris Nuttycombe aff38f75f3
Qualified imports of std:: types
Co-authored-by: str4d <thestr4d@gmail.com>
2020-07-01 16:06:27 -06:00
Kris Nuttycombe bf381ad580
Replace BOOST_FOREACH with for..:
Co-authored-by: str4d <thestr4d@gmail.com>
2020-07-01 16:05:30 -06:00
therealyingtong 1c59f06df0 Add checks to z_ methods in rpcwallet
Disallow Sprout shielding after Canopy in z_sendmany, z_shieldcoinbase, z_mergetoaddress, and zc_raw_joinsplit (deprecated)
2020-07-01 23:47:36 +08:00
therealyingtong 2a2fc2a16f Add gtests
Should accept Sprout shielding before NU4 but reject it afterwards
2020-07-01 23:31:41 +08:00
therealyingtong 01cdea54ee Add contextual check to main.cpp
Reject transactions with nonzero vpub_old after NU4
2020-07-01 23:31:36 +08:00
Rod Vagg a106c15a19
Add joinSplitPubKey and joinSplitSig to RPC
These two properties are required to fully reconstruct a Zcash
transaction's binary form from the RPC data.

Co-authored-by: str4d <thestr4d@gmail.com>
2020-06-30 21:47:51 +10:00
Kris Nuttycombe 92cec200ee Minor fixes for ZIP-207 review comments. 2020-06-29 16:13:08 -06:00
Kris Nuttycombe 074d054e84
Trivial error message fix.
Co-authored-by: str4d <thestr4d@gmail.com>
2020-06-29 15:54:07 -06:00
Kris Nuttycombe 665b8c647b
Use for..: rather than BOOST_FOREACH
Co-authored-by: str4d <thestr4d@gmail.com>
2020-06-29 15:53:41 -06:00
Kris Nuttycombe 1c00a0b541
Identify `-fundingstream` parameter as being regtest-only
Co-authored-by: str4d <thestr4d@gmail.com>
2020-06-29 15:42:45 -06:00
Sean Bowe e9c065df5b
Cargo fmt 2020-06-29 09:40:35 -06:00
Sean Bowe 8918eca876
Add more exhaustive tests for ZIP 215 compatibility. 2020-06-29 09:40:34 -06:00
Sean Bowe 58250b4801
Turn return values for libsodium-like API into constants for clarity. 2020-06-29 09:36:54 -06:00
Jack Grigg efd04b920b Implement zip-207 and zip-214.
Add funding streams to consensus parameters.

Add funding stream payments to coinbase txns generated by the miner.
* Reduce valueBalance for shielded outputs to funding streams.
* Ensure we produce binding signatures in any case where shielded
  outputs go to either a funding stream or the miner.
2020-06-25 16:15:50 -06:00
Larry Ruane 73fae6bf0a review, cleanup: eliminate uninitialized variable 2020-06-25 09:32:36 -06:00
therealyingtong 7a1d119170 Add gtests for v2 plaintexts 2020-06-25 09:12:24 +08:00
therealyingtong 6402c589c6 Refactor SaplingNotePlaintext::decrypt
Break up plaintext decryption into height-dependent and non-height-dependent parts.
2020-06-25 09:12:24 +08:00
therealyingtong 3c8e970358 Check epk vs esk whenever caller has esk 2020-06-25 09:12:24 +08:00
therealyingtong e060d59890 Reject v1 plaintexts after grace period
SaplingNotePlaintext::decrypt() now has to be aware of consensus params and blockheight. Its callers in wallet, rpcwallet, and tests are updated accordingly.

TransactionBuilder is also modified to reject invalid leadBytes.

Co-authored by Daira Hopwood (daira@jacaranda.org)
2020-06-25 09:12:21 +08:00
Sean Bowe 56d4ef8333 Make transaction builder take the next block height into account for use of v2 note plaintexts. 2020-06-25 09:11:43 +08:00
Sean Bowe 4af761121d Require that shielded coinbase output note plaintexts are version 2 if Canopy is active.
Co-authored by Ying Tong (yingtong@electriccoin.co)
2020-06-25 09:11:31 +08:00
Homu ab2b7c0969 Auto merge of #4566 - gtank:new_seeders, r=ebfull
Add Foundation's and gtank's DNS seeders

This adds our new DNS seeders to the list. They're running [CoreDNS](https://coredns.io) with a [Zcash crawler plugin](https://github.com/ZcashFoundation/dnsseeder), the result of a Zcash Foundation in-house development effort to replace zcash-seeder with something memory safe and easier to maintain.

These are validly operated seeders per the existing policy (https://zcash.readthedocs.io/en/latest/rtd_pages/dnsseed_policy.html):

> A DNS seed operating organization or person is expected to follow good host security practices, maintain control of applicable infrastructure, and not sell or transfer control of the DNS seed. Any hosting services contracted by the operator are equally expected to uphold these expectations.

In both cases the code is running on well-operated public cloud infrastructure in either a container or the most sandboxing appropriate to the environment. The DNS records pointing to the seeders are controlled by reputable third-party DNS providers under accounts with 2FA enabled.

> The DNS seed results must consist exclusively of fairly selected and functioning Zcash nodes from the public network to the best of the operator’s understanding and capability.

The crawler attempts to connect to all discoverable Zcash peers and ensures their continued uptime on a regular basis. The results are always a uniformly randomized subset of all known live peers.

> For the avoidance of doubt, the results may be randomized but must not single out any group of hosts to receive different results unless due to an urgent technical necessity and disclosed.

See above. However, we reserve the right to begin offering [NU-targeted results](https://github.com/ZcashFoundation/dnsseeder/issues/3) based on opt-in client queries.

> The results may not be served with a DNS TTL of less than one minute.

Mainnet results are served with a TTL of 600 seconds, and Testnet results with a TTL of 300 seconds to account for greater flux on that network.

> Any logging of DNS queries should be only that which is necessary for the operation of the service or urgent health of the Zcash network and must not be retained longer than necessary nor disclosed to any third party.

There is no logging of DNS queries in either production configuration, which can be somewhat confirmed by examining the Corefile(s) [[1]](https://github.com/ZcashFoundation/coredns-zcash/blob/master/coredns/Corefile)[[2]](https://github.com/ZcashFoundation/coredns-zcash/blob/master/scripts/gcp-start.sh#L9-L27) we use.

> Information gathered as a result of the operators node-spidering (not from DNS queries) may be freely published or retained, but only if this data was not made more complete by biasing node connectivity (a violation of expectation (1)).

The seeder currently has no persistence outside of its static config file, so this data is neither retained nor shared by the operators.

> Operators are encouraged, but not required, to publicly document the details of their operating practices.

Our deployments are described in detail by the [coredns-zcash](https://github.com/ZcashFoundation/coredns-zcash) repo. Reader, you could run one too!

> A reachable email contact address must be published for inquiries related to the DNS seed operation.

For general questions related to either seeder, contact george@zfnd.org or mention @gtank in the Foundation's Discord. For bug reports, open an issue on the [dnsseeder](https://github.com/ZcashFoundation/dnsseeder) repo.
2020-06-25 00:44:33 +00:00
Larry Ruane 0219a97139 flush witness cache correctly
Rather than flushing the witness cache from FlushStateToDisk(), called
by ActivateBestChain() called by ProcessNewBlock(), do so from
ThreadNotifyWallets() after the wallet has updated the in-memory witness
data according to the new block, so it's always consistent on disk.
2020-06-24 16:49:59 -06:00
Alfredo Garcia 26522d212b only allow duplicates for certain options of the config 2020-06-24 12:21:25 -03:00
Sean Bowe f29c731915
Minor adjustments to librustzcash and tests. 2020-06-23 16:35:19 -06:00
Sean Bowe ba04450945
Remove unused curve25519-dalek dev-dependency. 2020-06-23 16:29:51 -06:00
Sean Bowe 14bdf7e811
Remove bincode crate. 2020-06-23 15:38:59 -06:00
Sean Bowe 2a3527bfe8
Add test that a weird signature successfully validates. 2020-06-23 14:31:41 -06:00
Sean Bowe 3251bea45a
Enforce ZIP 215 rules upon activation of Canopy. 2020-06-23 13:17:29 -06:00
Daira Hopwood 76c416d2df Remove an unused CCriticalSection.
The code that used this was removed in 5f84491d82.

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-06-23 19:38:29 +01:00
Sean Bowe 3688f508d8
Make ed25519-zebra available via librustzcash. 2020-06-22 15:58:26 -06:00
Sean Bowe bf9baf2cb6 Change transaction builder and miner to use v2 Sapling note plaintexts after Canopy activates.
Co-authored by Ying Tong (yingtong@electriccoin.co)
2020-06-18 15:51:34 +08:00
Sean Bowe 8770a5c532 Add support for receiving v2 Sapling note plaintexts.
Co-authored by Ying Tong (yingtong@electriccoin.co)
2020-06-18 15:02:50 +08:00
Sean Bowe e71d2fba9d
Add a getter method to obtain rcm from a Sapling note plaintext. 2020-06-17 13:18:20 -06:00
Sean Bowe 1c2c6be872
Remove bare SaplingNote constructor. 2020-06-17 11:36:35 -06:00
Sean Bowe 6581970d59
Add implementations of PRF_expand calls that obtain esk and rcm. 2020-06-17 10:59:48 -06:00
George Tankersley 27b8a616de Add ZF and gtank's DNS seeders 2020-06-10 21:10:43 -04:00
Homu 4ffccda774 Auto merge of #4322 - oxarbitrage:issue3740, r=str4d
Add -debuglogfile option

Cherry-picked from https://github.com/bitcoin/bitcoin/pull/11781.
Closes https://github.com/zcash/zcash/issues/3740.
2020-06-04 00:40:45 +00:00
Homu e9a6d7926b Auto merge of #4282 - oxarbitrage:issue2375, r=daira
Add a flag to get amount results as integer

Closes https://github.com/zcash/zcash/issues/2375
2020-06-03 11:26:00 +00:00
Alfredo Garcia 916351be04
fix/improve docs
Co-authored-by: str4d <thestr4d@gmail.com>
2020-06-02 09:14:50 -03:00
Homu 7275bc7f3f Auto merge of #4545 - str4d:metrics-ibd-progress-bar, r=str4d
metrics: Add a progress bar when in Initial Block Download mode

The progress bar shows both headers (in green) and blocks (in white / inverse of background colour). It is only printed for TTY output.

Additionally, the "not mining" message is no longer shown on mainnet, as the built-in CPU miner is not effective at the current network difficulty.
2020-06-02 03:01:51 +00:00
Jack Grigg 12e169d09f metrics: Only print IBD progress bar on TTY
Now that it is created from space characters, it is meaningless to print
it to a log file.
2020-06-02 14:23:03 +12:00
Jack Grigg a79337c3ee metrics: Switch to ANSI colour codes for progress bar
We already assume that ANSI colour codes work for the metrics art,
whereas the block characters have inconsistent support in fonts.
2020-06-02 14:20:55 +12:00
Alfredo Garcia 74039434a8
initialize size_t 2020-06-01 09:47:02 -03:00
Alfredo Garcia 93afebeef4 add new parameters to rpc client and fix some bugs 2020-05-30 12:18:43 -03:00
Alfredo Garcia e7c829aa0e update docs 2020-05-30 10:34:03 -03:00
Alfredo Garcia 3b9bd2da2f fix sort of options 2020-05-28 10:58:04 -03:00
Wladimir J. van der Laan 540cdb34e2 Add `-debuglogfile` option
This patch adds an option to configure the name and/or directory of the
debug log.

The user can specify either a relative path, in which case the path
is relative to the data directory. They can also specify an absolute
path to put the log anywhere else in the file system.
2020-05-28 10:53:58 -03:00
Daira Hopwood c1227ae67c Rename NU4 to Canopy in constant and function names.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-05-28 13:11:48 +01:00
Jack Grigg 96681695c9 metrics: Don't show "not mining" text for mainnet
Mining with the zcashd built-in CPU miner is not useful work on mainnet
at the current network difficulty.
2020-05-28 22:21:40 +12:00
Jack Grigg eb4ada98d2 metrics: Draw IBD progress bar showing headers and blocks 2020-05-28 22:21:40 +12:00
Jack Grigg 3a1b1a2fa2 metrics: Fix indents 2020-05-28 22:21:40 +12:00
Homu 68d25c9259 Auto merge of #3936 - solardiz:report-headers-download, r=str4d
Report headers download

With current compile-time defaults, a Zcash node prefetches up to 160 block headers per request without a limit on how far it can prefetch, but only up to 16 full blocks at a time. For this and other reasons, it can get very far ahead in headers prefetch (and PoW verification on those, so it's quite some processing too) over full blocks fetch (such as 10x ahead) during initial blocks download. Let's report to the user on how many headers the node has fetched, and let's also use this information as additional input on estimating the total number of blocks to fetch: it can't be less than the number of headers already fetched.

While at it, also fix typos in related code.
2020-05-28 09:08:44 +00:00
Solar Designer fad004114a During initial blocks download, also report the number of headers 2020-05-28 20:34:31 +12:00
Solar Designer ed3b473ec6 Fix typos in ProcessMessage() "headers" 2020-05-28 20:26:00 +12:00
Homu 804125cc20 Auto merge of #4543 - defuse:fix-invalid-argument, r=str4d
Add missing <stdexcept> header for std::invalid_argument

Closes #1703.
2020-05-28 08:06:06 +00:00
Homu 9bf8443c16 Auto merge of #4504 - str4d:disconnectblock-fixes, r=str4d
Use the cached consensusBranchId in DisconnectBlock

If a node is started with a set of network upgrades that don't match the
serialized chain (such as when we implement NU rollbacks on testnet),
RewindBlockIndex will disconnect each block in the chain until it
reaches the most recent block that agrees with the node's set of network
upgrades. However, the blocks themselves should be disconnected using
the consensus branch ID that they were connected with, which is
persisted alongside the chain and reconstructed in LoadBlockIndex.
2020-05-28 02:51:34 +00:00
Homu 4907a31302 Auto merge of #4242 - oxarbitrage:issue3726, r=str4d
Add estimatedheight to rpc getblockchaininfo response

Fixes https://github.com/zcash/zcash/issues/3726

Ported from https://github.com/zcash/zcash/pull/3727 with comments addressed.
2020-05-28 00:49:49 +00:00
Homu 72edd11bd9 Auto merge of #4486 - defuse:fix-undefined-behavior-in-gtest, r=daira
Fix undefined behavior in gtest tests
2020-05-27 23:47:58 +00:00
Jack Grigg 27b2ce3468 Use the cached consensusBranchId in DisconnectBlock
If a node is started with a set of network upgrades that don't match the
serialized chain (such as when we implement NU rollbacks on testnet),
RewindBlockIndex will disconnect each block in the chain until it
reaches the most recent block that agrees with the node's set of network
upgrades. However, the blocks themselves should be disconnected using
the consensus branch ID that they were connected with, which is
persisted alongside the chain and reconstructed in LoadBlockIndex.
2020-05-28 09:50:08 +12:00
Homu 8c778c9c0d Auto merge of #4527 - dannywillems:librustzcash/c-header-compatibility, r=str4d
librustzcash: make the header C compatible

The `librustzcash.h` file is compatible with both languages. However, only C++ is supported at the moment. By relying on the preprocessor to include or not the `extern "C"` piece, the interface becomes compatible with both.
2020-05-27 21:23:08 +00:00
Taylor Hornby 08662fa09a Add missing <stdexcept> header for std::invalid_argument 2020-05-24 16:49:13 -06:00
Sean Bowe 306a336a0a
make-release.py: Versioning changes for 3.0.0. 2020-05-22 11:46:19 -06:00
Sean Bowe 61aee9ec9c
Set deprecation of 3.0.0 to target EOS halt mid-September. 2020-05-21 07:35:09 -06:00
Sean Bowe 7000f452fa
make-release.py: Versioning changes for 3.0.0-rc1. 2020-05-21 07:32:25 -06:00
Homu 3860e7cae7 Auto merge of #4533 - ebfull:heartwood-activation, r=ebfull
Enable Heartwood activation on mainnet

This sets the Heartwood activation height to `903000`, which follows the deprecation height of `v2.1.2-3` (which is set to deprecate on block `901475`, roughly 31 hours earlier, sometime mid-July).
2020-05-20 21:36:27 +00:00
Homu bfb1bfd9d6 Auto merge of #4534 - ebfull:fix-chainwork, r=daira
Update minimum chain work on testnet to reflect Heartwood activation.
2020-05-20 06:45:44 +00:00
Sean Bowe 5a955674a5
Bump the protocol version, as this node supports Heartwood on mainnet. 2020-05-19 14:38:53 -06:00
Sean Bowe d0c96683bf
Set the Heartwood activation height to 903000. 2020-05-19 14:38:49 -06:00
Homu ed9537f9dd Auto merge of #4529 - daira:fix-abort-on-reindex, r=daira
Fix a null pointer dereference that occurs when formatting an error message

This fixes a bug in the error message printout for the case when we have sufficient chain work, but an expected network upgrade has not activated.
2020-05-19 19:33:31 +00:00
Daira Hopwood cb7c90522d Explicitly assert that chainActive[upgrade.nActivationHeight] is non-null at this point.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-05-19 20:13:37 +01:00
Alfredo Garcia 1805466d5c add MINOR_CURRENCY_UNIT 2020-05-18 16:53:01 -03:00
Alfredo Garcia 507e1623f9 simplify inzat balances logic
Co-Authored-By: Daira Hopwood <daira@jacaranda.org>
2020-05-18 16:53:01 -03:00
Alfredo Garcia 25f48c21dd add amountZat field to z_listreceivedbyaddress 2020-05-18 16:53:01 -03:00
Alfredo Garcia 76e7f21d4a add amountZat field to listunspent 2020-05-18 16:52:04 -03:00
Alfredo Garcia 9a55c8b238 add amountZat field to listtransactions, gettransaction and listsinceblock 2020-05-18 16:51:24 -03:00
Alfredo Garcia 2ec9ac3c81 add amountZat field to listreceivedbyaddress and listreceivedbyaccount 2020-05-18 16:49:39 -03:00
Alfredo Garcia 306270911e add boolean inZat to z_getbalance 2020-05-18 16:47:17 -03:00
Alfredo Garcia 50372cab62 add boolean inZat to getbalance 2020-05-18 16:47:17 -03:00
Alfredo Garcia d2c26b33e0 add boolean inZat to getreceivedbyaccount 2020-05-18 16:47:17 -03:00
Alfredo Garcia 4155db0325 change argument name 2020-05-18 16:47:17 -03:00
Alfredo Garcia aba1d94673 add documentation to flag 2020-05-18 16:47:17 -03:00
Alfredo Garcia 4b61aede28 add bool argument to get balance in satoshis to rpc getreceivedbyaddress 2020-05-18 16:47:17 -03:00
Sean Bowe ecafe6913c
Update minimum chain work on testnet to reflect Heartwood activation. 2020-05-18 09:59:34 -06:00
Homu 1eff1f98b6 Auto merge of #4526 - defuse:update-univalue, r=daira
Add univalue to updatecheck.py and update it to v1.1.1
2020-05-17 18:12:13 +00:00
Daira Hopwood a76e568800 Fix a null pointer dereference that occurs when formatting an error message, if we haven't activated an upgrade as expected.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-05-16 00:26:44 +01:00
Taylor Hornby fc4a70e812 Avoid names starting with __.
These are reserved for all uses (including member function names) in C++,
and their use is technically undefined behaviour:
https://stackoverflow.com/a/228797/393146

Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2020-05-15 16:27:34 -06:00
Danny Willems 332ce1a800
Use preprocessor for ENTRY_SERIALIZED_LENGTH 2020-05-15 19:50:57 +02:00
Danny Willems e465731e69
Use assert.h instead of define manually static_assert 2020-05-15 19:47:49 +02:00
Danny Willems 80fe96a04e
librustzcash: make the header C compatible 2020-05-15 19:38:41 +02:00
Taylor Hornby e0ab57ee36 Add univalue to updatecheck.py and update univalue, removing calls to deprecated methods 2020-05-14 12:42:19 -06:00
therealyingtong 79657a8e3a Fix off-by-one error in CreateNewBlock()
When calling GetHistoryRoot, use prevConsensusBranchId instead of consensusBranchId for compatibility with NU4 and future upgrades.

Co-authored by Jack Grigg (jack@electriccoin.co)
2020-05-14 21:29:47 +08:00
Homu d52003861c Auto merge of #4508 - oxarbitrage:remove_fhelp_from_impls, r=str4d
Remove unused fHelp parameters from internal functions

- dumpwallet_impl
- importwallet_impl
2020-05-12 12:42:58 +00:00
Homu d0b533aacb Auto merge of #4304 - oxarbitrage:issue3893, r=str4d
Add status to transactions in RPC calls

Closes https://github.com/zcash/zcash/issues/3893.
2020-05-12 03:05:37 +00:00
Homu eab938b829 Auto merge of #4513 - zcash:hotfix-v2.1.2-3, r=str4d
Merge in hotfix v2.1.2-3
2020-05-12 00:27:26 +00:00
Homu c82b3f9450 Auto merge of #4510 - zcash:hotfix-v2.1.2-2, r=nuttycom
Merge in 2.1.2-2 hotfix
2020-05-11 19:11:56 +00:00
Sean Bowe 1e945ee82a
Set the deprecation height manually to roughly July 14th. 2020-05-08 13:28:55 -06:00
Sean Bowe f9d4405c09
make-release.py: Versioning changes for 2.1.2-3. 2020-05-08 12:39:13 -06:00
Sean Bowe bdb2df182b
make-release.py: Versioning changes for 2.1.2-2. 2020-05-08 11:41:47 -06:00
Alfredo Garcia 3995fb634b remove not needed help parameters to dump and import impl 2020-05-08 10:54:36 -03:00
Daira Hopwood 58d49ac61b
txdb: log additional debug information.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-05-07 16:22:25 -06:00
Jack Grigg daabcd6d22
txdb: More complete fix for the Heartwood chain consistency check issue.
#4499 was an insufficient fix, because it did not consider the case where
a post-Heartwood node wrote a block index object for a header from a
non-upgraded peer. In that case the version in the block index entry is
`>= CHAIN_HISTORY_ROOT_VERSION`, and so the fix in #4499 has no effect.
In addition, we should skip the consistency check when the index object
validity is not BLOCK_VALID_CONSENSUS.

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2020-05-07 16:22:09 -06:00
Homu 38885ee9a8 Auto merge of #4501 - zcash:hotfix-v2.1.2-1, r=ebfull
Merge in hotfix v2.1.2-1

This PR brings our `v2.1.2-1` hotfix into master.

**Please don't try/r+ this yet.**
2020-05-06 23:01:09 +00:00
ebfull 84a703b3b1
Merge branch 'master' into hotfix-v2.1.2-1 2020-05-06 16:36:01 -06:00
Homu eb06b0a8d4 Auto merge of #4447 - nuttycom:bug/4119-rewind_detection, r=str4d
Reproduce and fix off-by-one error in reorg logic (#4119)

This attempts to reproduce #4119 using a simple chain split.It currently seems to trigger a different issue, an assertion failure in `CheckBlockIndex` when restarting
2020-05-06 21:50:03 +00:00
Sean Bowe 5d24937e5f
make-release.py: Versioning changes for 2.1.2-1. 2020-05-06 10:50:43 -06:00
Sean Bowe c3018904c3
Don't throw exception in PopHistoryNode when popping from empty tree.
If we are doing an expected rollback that changes the consensus
branch ID for some upgrade (or introduces one that wasn't present
at the equivalent height) this will occur because
`SelectHistoryCache` selects the tree for the new consensus
branch ID, not the one that existed on the chain being rolled
back.
2020-05-05 17:25:56 -06:00
Jack Grigg d946b69cf8 txdb/chain: Restrict Heartwood chain consistency check to block index objects that were created by Heartwood-unaware clients.
In the vicinity of a network upgrade, a zcashd node may receive headers
for a non-upgrading chain from its non-upgraded peers (e.g. if the block
at the NU activation height is found more quickly by the non-upgrading
chain). In this situation, the node will end up with two headers at the
NU activation height (and possibly for subsequent block heights).

In the case of Heartwood, the block headers from the non-upgrading chain
do not satisfy the Heartwood header consistency check in
CBlockTreeDB::LoadBlockIndexGuts. In this commit, we restrict the
Heartwood consistency checks to block index objects that were created by
clients that are CHAIN_HISTORY_ROOT_VERSION or better.
2020-05-06 10:41:30 +12:00
Sean Bowe 8dcb533226
Add the intended testnet activation block of Heartwood to our intended rewind logic. 2020-05-05 14:47:29 -06:00
Homu 68fd808e0f Auto merge of #4444 - oxarbitrage:issue4375, r=str4d
Fix advertised version

Closes https://github.com/zcash/zcash/issues/4375 by adding the `-` character to the list of safe ones.

Now i can see stuff like the following in the logs:

```
...
2020-04-13 14:19:37 receive version message: /MagicBean:2.1.1-1/: version 170009, blocks=795400, us=[2800:a4:316b:8e00:ceb:c7b4:3481:197f]:59754, peer=2
...
```

API call `getpeerinfo` will also gets fixed.
2020-05-05 00:29:32 +00:00
Kris Nuttycombe 1508345a20 Merge remote-tracking branch 'upstream/master' into bug/4119-rewind_detection 2020-05-01 17:33:53 -06:00
Homu 1abdc883ac Auto merge of #4487 - str4d:nu4-activation-logic, r=str4d
Add NU4 to upgrade list

Once NU4 has been named, we will rename the constants and functions.

Closes #4472.
2020-05-01 13:41:28 +00:00
Jack Grigg febfaef44e Update URLs for prior network upgrades 2020-05-01 11:40:13 +12:00
Jack Grigg 7e684120d3 Add NU4 test helpers 2020-05-01 11:38:32 +12:00
Jack Grigg 99d387fc51 Add NU4 to upgrade list
Once NU4 has a name, we will rename the constants.
2020-05-01 11:38:03 +12:00
Taylor Hornby 39ca21845a Fix undefined behavior in gtest tests 2020-04-30 17:16:53 -06:00
Homu 7a0fe273d8 Auto merge of #4482 - str4d:memory_cleanse-backports, r=str4d
memory_cleanse backports

Cherry-picked from the following upstream PRs:
- bitcoin/bitcoin#10308
- bitcoin/bitcoin#11196
- bitcoin/bitcoin#11558
  - Only the changes that did not conflict.
- bitcoin/bitcoin#16158

Part of #145.
2020-04-30 23:03:44 +00:00
Jack Grigg 8ea2f467cd Improve memory_cleanse documentation
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2020-05-01 11:00:49 +12:00
Jack Grigg 6a4ff45e8a Use BOOST_SCOPE_EXIT_TPL to clean and free datValue in CDB::Read 2020-05-01 10:57:24 +12:00
Tim Ruffing 1ccdb5734d Improve documentation of memory_cleanse()
So far, the documentation of memory_cleanse() is a verbatim copy of
the commit message in BoringSSL, where this code was originally
written. However, our code evolved since then, and the commit message
is not particularly helpful in the code but is rather of historical
interested in BoringSSL only.

This commit improves improves the comments around memory_cleanse()
and gives a better rationale for the method that we use. This commit
touches only comments.
2020-04-30 17:40:26 +12:00
Tim Ruffing f27ff314e6 Clean up logic in memory_cleanse() for MSVC
Commit fbf327b13868861c2877c5754caf5a9816f2603c ("Minimal code
changes to allow msvc compilation.") was indeed minimal in terms
of lines touched. But as a result of that minimalism it changed the
logic in memory_cleanse() to first call std::memset() and then
additionally the MSVC-specific SecureZeroMemory() function, and it
also moved a comment to the wrong location.

This commit removes the superfluous call to std::memset() on MSVC
and ensures that the comment is in the right position again.
2020-04-30 17:40:26 +12:00
Aaron Clauson 2fcc466273 Minimal code changes to allow msvc compilation.
Zcash: Only changes that did not conflict.
2020-04-30 17:40:26 +12:00
Adam Langley c502acc7c4 Switch memory_cleanse implementation to BoringSSL's to ensure memory clearing even with link-time optimization.
The implementation we currently use from OpenSSL prevents the compiler from optimizing away clensing operations on blocks of memory that are about to be released, but this protection is not extended to link-time optimization. This commit copies the solution cooked up by Google compiler engineers which uses inline assembly directives to instruct the compiler not to optimize out the call under any circumstances. As the code is in-lined, this has the added advantage of removing one more OpenSSL dependency.

Regarding license compatibility, Google's contributions to BoringSSL library, including this code, is made available under the ISC license, which is MIT compatible.

BoringSSL git commit: ad1907fe73334d6c696c8539646c21b11178f20f
2020-04-30 17:40:26 +12:00
Thomas Snider 0a2d4756e1 [wallet] Securely erase potentially sensitive keys/values 2020-04-30 17:40:26 +12:00
Homu 0dbb2d05d3 Auto merge of #4465 - oxarbitrage:issue4463, r=str4d
Add z_getnotescount API

Implement new API call to count notes in wallet.

Closes https://github.com/zcash/zcash/issues/4463
2020-04-30 01:35:59 +00:00
Homu 9e86cc2d82 Auto merge of #4427 - nuttycom:simplify_connect_tip, r=daira
Remove option to load new blocks from ConnectTip

A minor refactoring to move file IO out of ConnectTip, which has only a single caller.
2020-04-25 19:06:55 +00:00
Alfredo Garcia 4c40f9f514 implement z_getnotescount api call 2020-04-25 11:17:20 -03:00
Homu 0ad52ca9b1 Auto merge of #4249 - oxarbitrage:issue_3724, r=str4d
Add confirmations, blockheight, blockindex and blocktime to z_listreceivedbyaddress

Fixes https://github.com/zcash/zcash/issues/3724

1- There was a PR to add confirmations to this call at https://github.com/zcash/zcash/pull/3836
I ported the commit from there and fixed test case by incrementing the confirmations as suggested at: https://github.com/zcash/zcash/pull/3836#issuecomment-499927807

2- Then added `blockheight`, `blockindex` and `blocktime`. To avoid some duplicated code (Sprout/Sapling) created a structure `trxblock`.

3- Original issue requests only time and blockindex however i think height is also important; if `blockindex` is the position of the transaction in the block then you are going to need also `height` to find it.
2020-04-25 05:28:16 +00:00