Commit Graph
100 Commits
Author SHA1 Message Date
Jack Grigg 3e3da44c71 Test solution output of blockToJSON() 2016-08-30 14:42:49 +12:00
Jack Grigg e1dde421c3 Output Equihash solution in RPC results as a hex string 2016-08-27 23:58:11 +12:00
Jack Grigg 90b740fd3b Test conversion between solution indices and minimal representation 2016-08-24 13:42:52 +12:00
Jack Grigg e273f05d10 Remove unnecessary temporary array from Equihash hash generation 2016-08-21 06:05:48 +12:00
Jack Grigg 6e629886e5 Add another test case based on example in the spec 2016-08-21 05:57:46 +12:00
Jack Grigg a4f4fa8fe9 ASSERT -> EXPECT in test to get more info per test run about future regressions 2016-08-18 12:25:01 +12:00
Jack Grigg 04dfc3c569 Rework test to check for failure to return a spending key 2016-08-18 12:22:30 +12:00
Jack Grigg 0d7386916d Add separate lock for SpendingKey key store operations 2016-08-16 22:17:33 +12:00
Jack Grigg c2059f9e09 Remove non-libsnark dependencies and test harness code from coverage reports
Closes #1203
2016-08-16 22:05:35 +12:00
Jack Grigg 71442d31cf Add gtest coverage to folders deleted by "make clean" 2016-08-16 20:30:24 +12:00
Jack Grigg 873625bc85 Add gtest coverage intermediates to list of files deleted by make 2016-08-16 18:38:42 +12:00
Jack Grigg 6ecb05dd2f Enable branch coverage in coverage reports
Closes #892
2016-08-16 18:32:56 +12:00
Jack Grigg 5be6abbf84 Store the Equihash solution in minimal representation in the block header
The genesis blocks and miner tests have been regenerated, because changing the
block header serialisation format changes the block hash, and thus validity.

The Equihash solutions have been removed from the bloom test inputs for
simplicity (block validity is not checked there; only a valid serialisation is
necessary).
2016-08-16 16:02:39 +12:00
Jack Grigg 20abe2083c Extend byte array expansion and compression methods with optional padding 2016-08-16 11:02:04 +12:00
Jack Grigg caa0348f04 Update Equihash hash generation to match the Zcash spec
Changes:

- floor(512/n)*n/8 bytes of BLAKE2b output is split between floor(512/n)
  adjacent indices, instead of using one hash call per index.

- Parameters with n/(k+1) mod 8 != 0 will expand the BLAKE2b output to byte
  boundaries for colliding, instead of using a longer output and clearing bits.

- The genesis blocks have been regenerated.

- The test vectors have been regenerated.

- The Equihash inputs for the cancellation tests were modified to ensure that
  valid solutions were available to exercise the full solver.
2016-08-16 11:02:04 +12:00
Jack Grigg 881ffbfc87 Add methods for byte array expansion and compression
These methods convert between:

- A byte array of length NL/8, and
- An array of N blocks of ceil(L/8) bytes.
2016-08-16 11:02:00 +12:00
Jack Grigg b5c06c83b0 Consistent parameter naming 2016-08-12 14:37:17 +12:00
Jack Grigg 0bfdb9628e Merge AddSpendingKeyPaymentAddress into AddSpendingKey to simplify API 2016-08-12 14:24:29 +12:00
Jack Grigg 7c929cf5bc Add support for spending keys to the basic key store 2016-08-09 17:38:25 +12:00
Jack Grigg 23acf86791 Ignore duplicate entries after partial recreation 2016-08-06 17:33:38 +12:00
Jack Grigg a23507d086 Update tests to account for new Equihash parameters 2016-08-06 17:33:23 +12:00
Jack Grigg ca202e2db1 Change Equihash parameters to n = 200, k = 9 (about 563-700 MiB) 2016-08-06 15:27:27 +12:00
Jack Grigg 30bd297920 Fix bug in IsProbablyDuplicate()
Closes #1179
2016-08-06 15:26:22 +12:00
Jack Grigg fa19e1b357 Add test showing bug in IsProbablyDuplicate() 2016-08-06 15:23:47 +12:00
Jack Grigg eeb4177843 Add Equihash support for n = 200, k = 9
Closes #1177
2016-08-06 10:33:14 +12:00
Jack Grigg 036dcbd94a Remove the assumption that n/(k+1) is a multiple of 8.
This version works, but generates the initial rows in a way that is not what we
want to specify. See #1175 for resolving this.

Co-author: Daira Hopwood <daira@jacaranda.org>
2016-08-06 02:40:07 +12:00
Jack Grigg 649be423f8 Fix previous commit 2016-08-06 02:03:08 +12:00
Jack Grigg 6609813753 Simplify optional parameters 2016-08-06 00:36:33 +12:00
Jack Grigg 3c3ef34505 Add missing assert 2016-08-05 22:24:04 +12:00
Jack Grigg e999c1e339 Simplify IsProbablyDuplicate() 2016-08-05 22:17:40 +12:00
Jack Grigg 3c654f38eb Eliminate probably duplicates in final round
This is more likely to eliminate valid solutions than doing so in intermediate
rounds, but the probability is still very low.
2016-08-05 18:15:34 +12:00
Jack Grigg 6b4f4475a5 Use fixed-size array in IsProbablyDuplicate to avoid stack protector warning 2016-08-05 17:18:47 +12:00
Jack Grigg d4af3dd5fd Eliminate some of the duplicates caused by truncating indices 2016-08-05 17:09:30 +12:00
Jack Grigg f7478de67f Add thread parameter to solveequihash benchmark
Closes #1147
2016-08-05 15:05:38 +12:00
Jack Grigg 4a0bdc9020 Fix bug in 'generate' RPC method that caused it to fail with high probability 2016-07-30 01:28:17 +12:00
Jack Grigg 9e0713f47f Remove hardfork from special testnet difficulty rules
Closes #1131
2016-07-29 21:46:27 +12:00
Jack Grigg 51eb5273f5 Equihash: Pass each obtained solution to a callback for immediate checking
Closes #1143
2016-07-27 19:15:49 +12:00
Jack Grigg 215b9e139d Use std::shared_ptr to deallocate partialSolns automatically 2016-07-23 00:31:47 +12:00
Jack Grigg 1655db285d Move initialisations to simplify cancelled checks 2016-07-22 23:54:14 +12:00
Jack Grigg 9e6adb124f Hardfork to the previous testnet difficulty adjustment behaviour at block 43400
This hardfork will be removed the next time the testnet blockchain is reset.
2016-07-22 14:17:46 +12:00
Jack Grigg e99731b4a4 Reinstate previous testnet adjustment behaviour
When the difficulty adjustment algorithm was altered, the special testnet
min-difficulty case was maintained, but the difficulty adjustment for the
following block then adjusted from min-difficulty instead of from the last
non-min-difficulty block. This caused the difficulty on the testnet to sawtooth
instead of stabilising. The intended behaviour is restored here.
2016-07-21 20:50:05 +12:00
Jack Grigg 5a360a5c6a Fix segfault by indirectly monitoring chainActive.Tip(), locking on mutex 2016-07-21 19:34:21 +12:00
Jack Grigg 5b4ebcd5e2 Add tests that exercise the cancellation code branches 2016-07-21 16:39:32 +12:00
Jack Grigg 2dbabb1159 Make Equihash solvers cancellable
The miner only cancels the solver when chainActive.Tip() changes.

Closes #1055
2016-07-20 19:17:02 +12:00
Jack Grigg c6365f4d80 Add test case that requires the fix 2016-07-19 23:33:28 +12:00
Jack Grigg 1bb40a42c2 Collect all permutations of final solutions 2016-07-19 23:11:49 +12:00
Jack Grigg c2e092f29e Fix memory leak in large tx benchmark 2016-06-29 11:45:47 +12:00
Jack Grigg cfd806e161 Clear mempool before using it for benchmark test, fix parameter name 2016-06-29 11:19:41 +12:00
Jack Grigg 8e165d57d9 Randomise the nonce in the block header
The top and bottom 16 bits of the nonce are left clear for local use as thread
flags and counters. This does not leak any more local information about the
miner than is currently exposed.

The cleared bits should not be considered a consensus rule, as miners are free
to set all bits of the nonce however they wish.

Closes #1033
2016-06-28 11:36:35 +12:00
Jack Grigg d151ab4fea Only compare the first n/(k+1) bits when sorting 2016-06-21 15:53:47 +12:00
Jack Grigg f5edc37f3f Add performance tests for creating and validating a MAX_BLOCK_SIZE transaction 2016-06-21 13:48:04 +12:00
Jack Grigg 3985a40d1f Change default ports 2016-06-17 00:21:58 +12:00
Jack Grigg cdec0b923e Fix bug in network hashrate lookup window configuration 2016-06-16 21:26:49 +12:00
Jack Grigg 71671484fd Handle full Zcash version string in AC_INIT 2016-06-16 13:48:42 +12:00
Jack Grigg 5e207f4ea5 Improve comments per review 2016-06-16 10:45:19 +12:00
Jack Grigg 284e125957 Update tests for new difficulty algorithm 2016-06-15 13:44:27 +12:00
Jack Grigg f2c48e15e5 Implement new difficulty algorithm (#931)
The algorithm is based on DigiShield v3/v4.
2016-06-15 09:48:42 +12:00
Jack Grigg 09e9a329b7 Tweaks after review 2016-06-14 09:41:03 +12:00
Jack Grigg f3aee6b109 Update miner tests for platform-independent Equihash 2016-06-12 00:00:26 +12:00
Jack Grigg 6f14382a02 Regenerate genesis blocks 2016-06-11 16:52:02 +12:00
Jack Grigg 933cb4cd9f Use htole32 and htobe32 for endian conversions 2016-06-11 16:52:02 +12:00
Jack Grigg a6dcf2ee6f Use little-endian for hash personalisation and hashing indices
The test vectors have been regenerated using the basic solver.
2016-06-11 16:28:57 +12:00
Jack Grigg d07cf62991 Speed up FullStepRow index comparison by leveraging big-endian byte layout 2016-06-11 16:28:57 +12:00
Jack Grigg 1dd8ce9ba5 Update tests to account for new Equihash parameters 2016-06-11 15:45:55 +12:00
Jack Grigg ae37d2a4cd Increase Equihash parameters to n = 96, k = 3 (about 430 MiB)
Includes a tweak to set the fixed-width of the rows based on whether the first
or last round is widest. This is necessary for some parameters, these ones
included.
2016-06-11 12:15:25 +12:00
Jack Grigg 3fe29eab90 Fix failing tests 2016-06-10 16:16:33 +12:00
Jack Grigg d4388ed52b Updated a hard-coded number of blocks to account for decreased block interval 2016-06-10 12:02:49 +12:00
Jack Grigg 196cf25d5b Update RPC tests to account for decreased block interval 2016-06-10 12:02:49 +12:00
Jack Grigg a59c352cfd Update tests to account for decreased block interval 2016-06-10 12:02:47 +12:00
Jack Grigg 45e3deea8a Decrease block interval to 2.5 minutes 2016-06-10 11:45:04 +12:00
Jack Grigg 9378a04f1b Update RPC tests to account for reserved field 2016-06-07 22:45:41 +12:00
Jack Grigg 50121909aa Update tests to account for reserved field 2016-06-07 22:45:41 +12:00
Jack Grigg 2ce992956b Regenerate genesis blocks 2016-06-07 21:54:13 +12:00
Jack Grigg a5150a156e Set -relaypriority default to false
This enables spending of individual coins during mining slow start.

Closes #904.
2016-06-07 21:11:57 +12:00
Jack Grigg a8d384aeda Add a 256-bit reserved field to the block header
This field has no defined semantics. While it was added as a result of
discussions about merged mining in #724, this field will not necessarily ever be
used for that purpose.
2016-06-07 16:06:25 +12:00
Jack Grigg 0a66f01304 Use depth-first scan for eliminating partial solutions instead of breadth-first
This reduces the peak number of lists in-memory from 2^k to k, and enables the
solver to eliminate most duplicates before it has instantiated the full set of
leaves.
2016-06-03 17:00:03 +12:00
Jack Grigg 447444ae7a Fix nits after review 2016-06-01 23:15:04 +12:00
Jack Grigg 068e2f1a09 Fix comment 2016-05-27 11:29:08 +12:00
Jack Grigg b5c6a3af12 Use optimised Equihash solver for miner and benchmarks
The basic solver is still used for regtest-only purposes.
2016-05-24 23:16:53 +12:00
Jack Grigg d4d76536a5 Use fixed-width array for storing hash and indices 2016-05-24 23:16:53 +12:00
Jack Grigg 29d9986c83 Store full indices in the same char* as the hash 2016-05-24 23:16:52 +12:00
Jack Grigg 639c40047f Use comparator object for sorting StepRows 2016-05-24 23:16:52 +12:00
Jack Grigg a683cc85d9 Merge *StepRow XOR and trimming operations 2016-05-24 23:16:52 +12:00
Jack Grigg e95747288a Use template parameters to statically initialise Equihash 2016-05-24 23:16:50 +12:00
Jack Grigg 39f5cb35f9 Store truncated indices in the same char* as the hash (H/T tromp for the idea!) 2016-05-24 12:02:46 +12:00
Jack Grigg c92c1f6050 Implement index-truncation Equihash optimisation 2016-05-24 12:02:46 +12:00
Jack Grigg 6afef0dd6d Cleanups 2016-05-24 12:02:46 +12:00
Jack Grigg a3361e778b Refactor StepRow to make optimisation easier 2016-05-24 12:02:08 +12:00
Jack Grigg b3e712a4d2 Minor error message tweak 2016-05-21 11:48:52 +12:00
Jack Grigg c5d080bb83 Add Zcash Developers to CLI copyright notice 2016-05-20 11:56:19 +12:00
Jack Grigg a1de76c7a0 Bitcoin -> Zcash in version and help text 2016-05-20 11:56:11 +12:00
Jack Grigg fe0cacd2d8 Add Zcash revision to version strings 2016-05-18 16:50:28 +12:00
Jack Grigg 442eff615b Fix failing miner test 2016-05-12 00:01:24 +12:00
Jack Grigg 7a1f55183d Disable mining slow start in regtest mode 2016-05-10 23:11:32 +12:00
Jack Grigg 4f4a8c3c88 Update miner tests to account for mining slow start 2016-05-10 23:03:23 +12:00
Jack Grigg 91818cf28c Update subsidy tests to account for mining slow start 2016-05-10 23:03:23 +12:00
Jack Grigg bcb34c0802 Implement mining slow start with a linear ramp 2016-05-10 23:03:18 +12:00
Jack Grigg 7213c0b158 Fix Equihash state initialisation in miner
After a new block is found or after a few nonces have been tried (currently
after every nonce), the miner checks for global changes. If any of these are
triggered, a new block is built from scratch, which re-initialises the Equihash
input. But if none of the checks are triggered, the miner just updates nTime and
continues mining - without updating the Equihash input to account for the new
block header. This bugfix corrects the behaviour by regenerating the Equihash
input in both situations.
2016-04-12 15:23:44 +12:00
Jack Grigg aa86873afd Fix pow_tests to work with Equihash
Changing the order of difficulty calculation operations to divide first doesn't
affect the result significantly, but ensures we never overflow the arith_uint256
during multiplication and get an artificial jump in difficulty.
2016-04-08 23:19:03 +12:00
Jack Grigg cf00c47d5b Fix tests that depend on old block header format
Changes to bloom tests were done by running the following commands:

sed -i 's/\(CDataStream stream(ParseHex(".\{152\}\)\(.\{8\}\)/\100000000000000000000000000000000000000000000000000000000\200/' src/test/bloom_tests.cpp
sed -i 's/\(vector<unsigned char> vch = ParseHex(".\{152\}\)\(.\{8\}\)/\100000000000000000000000000000000000000000000000000000000\200/' src/test/bloom_tests.cpp

and then reverting the single change to the transaction line.
2016-04-08 14:50:56 +12:00