Commit Graph
100 Commits
Author SHA1 Message Date
Pieter Wuille 4cdaa95a20 Resize after succesful result 2014-11-28 21:16:51 +01:00
Pieter Wuille 5270817180 Merge pull request #5365
3a05ba1 Fix typo in doxygen comment. (Pavel Janík)
2014-11-28 16:22:25 +01:00
Pieter Wuille 1b91be49f5 Report status of chain tips 2014-11-27 11:50:14 +01:00
Pieter Wuille 57be955ba0 Remove -printblock, -printblocktree, and -printblockindex 2014-11-27 09:50:20 +01:00
Pieter Wuille bd9aebf19d Introduce a hidden category 2014-11-26 16:36:26 +01:00
Pieter Wuille 0dd06b2515 Delay writing block indexes in invalidate/reconsider 2014-11-26 16:36:26 +01:00
Pieter Wuille 9b0a8d3152 Add 'invalidateblock' and 'reconsiderblock' RPC commands.
These can be used for testing reorganizations or for manual intervention in case of
chain forks.
2014-11-26 16:36:25 +01:00
Pieter Wuille a206950016 Introduce separate flushing modes 2014-11-24 15:15:41 +01:00
Pieter Wuille 51ce901aa3 Improve chainstate/blockindex disk writing policy
There are 3 pieces of data that are maintained on disk. The actual block
and undo data, the block index (which can refer to positions on disk),
and the chainstate (which refers to the best block hash).

Earlier, there was no guarantee that blocks were written to disk before
block index entries referring to them were written. This commit introduces
dirty flags for block index data, and delays writing entries until the actual
block data is flushed.

With this stricter ordering in writes, it is now safe to not always flush
after every block, so there is no need for the IsInitialBlockDownload()
check there - instead we just write whenever enough time has passed or
the cache size grows too large. Also updating the wallet's best known block
is delayed until this is done, otherwise the wallet may end up referring to an
unknown block.

In addition, only do a write inside the block processing loop if necessary
(because of cache size exceeded). Otherwise, move the writing to a point
after processing is done, after relaying.
2014-11-24 15:15:40 +01:00
Pieter Wuille f321d6bfff Add key generation/verification to ECC sanity check 2014-11-23 10:47:39 +01:00
Pieter Wuille d0c41a7350 Add sanity check after key generation
Add a sanity check to prevent cosmic rays from flipping a bit in the
generated public key, or bugs in the elliptic curve code. This is
simply done by signing a (randomized) message, and verifying the
result.
2014-11-23 10:47:39 +01:00
Pieter Wuille 9d8604f36a Header define style cleanups 2014-11-20 17:22:06 +01:00
Pieter Wuille a53fd41485 Deterministic signing 2014-11-20 17:22:06 +01:00
Pieter Wuille 3060e36098 Add the RFC6979 PRNG 2014-11-20 17:22:06 +01:00
Pieter Wuille a8f5087e53 Add HMAC-SHA256 2014-11-20 17:22:06 +01:00
Pieter Wuille 36fa4a78ac Split up crypto/sha2 2014-11-20 17:22:02 +01:00
Pieter Wuille 98b135f97f Make STRICTENC invalid pubkeys fail the script rather than the opcode.
This turns STRICTENC turn into a softforking-safe change (even though it
is not intended as a consensus rule), and as a result guarantee that using
it for mempool validation only results in consensus-valid transactions in
the mempool.
2014-11-20 15:29:26 +01:00
Pieter Wuille 3ba5ebc065 Merge pull request #5000
0391423 Discourage NOPs reserved for soft-fork upgrades (Peter Todd)
2014-11-20 15:27:39 +01:00
Pieter Wuille 34559c7c73 Make PruneBlockIndexCandidates safer 2014-11-20 12:43:50 +01:00
Pieter Wuille 230f7a833d Remove unused ecwrapper code 2014-11-19 12:29:41 +01:00
Pieter Wuille cf61b5441b Don't use bashisms in configure 2014-11-18 18:06:46 +01:00
Pieter Wuille dffb8f81b8 Use libsecp256k1 in key.cpp 2014-11-18 18:06:46 +01:00
Pieter Wuille 4c97c64bf6 Do not use EC code in global constructors 2014-11-18 18:06:46 +01:00
Pieter Wuille 07a9901703 Always build and link libsecp256k1 2014-11-18 18:06:46 +01:00
Pieter Wuille 2245a95ce8 Merge commit 'd48555b36ac512161b81f9b6bca7bea16a0cd806' as 'src/secp256k1' 2014-11-18 18:06:36 +01:00
Pieter Wuille 7a7e109139 Delete src/secp256k1 before subtree import 2014-11-18 18:06:36 +01:00
Pieter Wuille d48555b36a Squashed 'src/secp256k1/' content from commit ad2028f
git-subtree-dir: src/secp256k1
git-subtree-split: ad2028f9890ca40bdd32055aa0fe5c1c9af0e485
2014-11-18 18:06:36 +01:00
Pieter Wuille e2f30d547f Properly lock cs_main in rest_block 2014-11-18 16:32:48 +01:00
Pieter Wuille 3c1e10b161 Merge pull request #5297
096efc5 travis: install less packages from apt-get (Cory Fields)
2014-11-18 14:21:15 +01:00
Pieter Wuille 60672a61ff Merge pull request #5256
f4e0aef Do signature-s negation inside the tests (Pieter Wuille)
2014-11-12 11:44:25 -08:00
Pieter Wuille f4e0aefadc Do signature-s negation inside the tests
To avoid the need for libsecp256k1 to expose such functionality.
2014-11-10 05:03:24 -08:00
Pieter Wuille 5406f61373 Merge pull request #5249
38c62ae Adding const. (sinetek)
2014-11-10 04:29:57 -08:00
Pieter Wuille 7b7c866160 Merge pull request #5210
1f84793 Avoid a bunch of copying/conversion in script/sign (Pieter Wuille)
2014-11-08 08:01:47 -08:00
Pieter Wuille 2f7601590b Merge pull request #5223
bfe029f Reduce bitcoin-tx dependencies (Pieter Wuille)
2014-11-06 01:59:24 -08:00
Pieter Wuille bfe029feeb Reduce bitcoin-tx dependencies 2014-11-06 00:24:41 -08:00
Pieter Wuille df0a45503b Merge pull request #5221
93a6022 Reduce bitcoin-cli dependencies (Pieter Wuille)
2014-11-06 00:06:01 -08:00
Pieter Wuille 93a6022400 Reduce bitcoin-cli dependencies 2014-11-05 12:47:33 -08:00
Pieter Wuille 1f847936c9 Avoid a bunch of copying/conversion in script/sign 2014-11-04 13:59:41 -08:00
Pieter Wuille be32b5212b Merge pull request #5205
b4347f6 minor code style cleanup after recent merges (Philip Kaufmann)
2014-11-04 05:51:17 -08:00
Pieter Wuille 1dbabb6521 Merge pull request #5191
a2cfae8 util.cpp comment correction (21E14)
2014-11-04 04:38:45 -08:00
Pieter Wuille be0e0703f2 Remove file and class order guidelines 2014-11-03 01:00:19 -08:00
Pieter Wuille 7cd85f431a Merge pull request #5187
e743678 fix a typo (Yoichi Hirai)
2014-10-31 05:47:08 -07:00
Pieter Wuille b4ee0bddad Introduce preferred download peers 2014-10-29 08:08:13 -07:00
Pieter Wuille 723c752636 Merge pull request #5100
99f41b9 MOVEONLY: core.o -> core/block.o (jtimon)
561e9e9 MOVEONLY: Move script/compressor out of script and put CTxOutCompressor (from core) with it (jtimon)
999a2ab MOVEONLY: separate CTxUndo out of core (jtimon)
4a3587d MOVEONLY: Separate CTransaction and dependencies from core (jtimon)
eda3733 MOVEONLY: Move CFeeRate and Amount constants to amount.o (jtimon)
2014-10-28 05:27:41 -07:00
Pieter Wuille 068b7f8ee2 Merge pull request #5118
50f71cd boost: code movement only: split CECKey into separate files (Cory Fields)
bdaec6a boost: remove CPubKey dependency from CECKey. Follow-up of e405aa48 (Cory Fields)
2014-10-27 20:47:32 -07:00
Pieter Wuille 60abd463ac Merge pull request #5119
fa73619 boost: split stream classes out of serialize.h (Cory Fields)
2014-10-27 04:16:48 -07:00
Pieter Wuille 698c6abb25 Add SCRIPT_VERIFY_MINIMALDATA (BIP62 rules 3 and 4)
Also use the new flag as a standard rule, and replace the IsCanonicalPush
standardness check with it (as it is more complete).
2014-10-25 03:03:20 -07:00
Pieter Wuille d752ba86c1 Add SCRIPT_VERIFY_SIGPUSHONLY (BIP62 rule 2) 2014-10-25 03:03:16 -07:00
Pieter Wuille 65e4e8427d Merge pull request #5093
4b0e2d7 Squashed 'src/leveldb/' changes from 7924331..7d41e6f (Pieter Wuille)
2014-10-25 02:39:56 -07:00
Pieter Wuille 7b2bb96271 Replace some function names with __func__ 2014-10-21 16:17:13 -07:00
Pieter Wuille a96d113962 Rename CWalletInterface to CValidationInterface
It's useful for much more than wallets.
2014-10-20 10:59:12 -07:00
Pieter Wuille c2fc9729d1 Merge pull request #5096
e8ea0fd MOVEONLY: CInPoint from core to txmempool (jtimon)
2014-10-16 18:57:32 -07:00
Pieter Wuille 5b9f8425a5 Merge src/leveldb changes for LevelDB 1.18. 2014-10-16 12:23:50 -07:00
Pieter Wuille 4b0e2d75d7 Squashed 'src/leveldb/' changes from 7924331..7d41e6f
7d41e6f Merge upstream LevelDB 1.18
803d692 Release 1.18

git-subtree-dir: src/leveldb
git-subtree-split: 7d41e6f89ff04ce9e6a742932924796f69c6e23d
2014-10-16 12:23:50 -07:00
Pieter Wuille e8f6d54f1f Merge pull request #5082
5f4bcf6 boost: drop boost dependency in version.cpp. (Cory Fields)
352058e boost: drop boost dependency in utilstrencodings.cpp (Cory Fields)
e1c9467 boost: drop boost dependency in core.cpp (Cory Fields)
e405aa4 boost: remove CPrivKey dependency from CECKey (Cory Fields)
5295506 boost: drop dependency on tuple in serialization (Cory Fields)
1d9b86d boost: drop dependency on is_fundamental in serialization (Cory Fields)
2014-10-15 12:43:16 -07:00
Pieter Wuille e11b2ce4c6 Fix large reorgs 2014-10-14 16:13:42 -07:00
Pieter Wuille afc32c5eea Fix rebuild-chainstate feature and improve its performance
Previous refactorings broke the ability to rebuild the chainstate by deleting the chainstate
directory, resulting in an incorrect "Incorrect or no genesis block found" error message. Fix
that.

Also, improve the performance of ActivateBestBlockStep by using the skiplist to only discover
a few potential blocks to connect at a time, instead of all blocks forever - as we likely bail
out after connecting a single one anyway.
2014-10-14 15:42:01 -07:00
Pieter Wuille 16d5194165 Skip reindexed blocks individually
Instead of skipping to the last reindexed block in each file (which could
jump over processed out-of-order blocks), just skip each already processed
block individually.
2014-10-14 15:42:01 -07:00
Pieter Wuille e17bd58392 Rename setBlockIndexValid to setBlockIndexCandidates 2014-10-14 15:42:01 -07:00
Pieter Wuille f244c99c96 Remove CheckMinWork, as we always know all parent headers 2014-10-14 15:42:01 -07:00
Pieter Wuille ad6e601712 RPC additions after headers-first 2014-10-14 15:42:01 -07:00
Pieter Wuille 341735eb8f Headers-first synchronization
Many changes:
* Do not use 'getblocks', but 'getheaders', and use it to build a headers tree.
* Blocks are fetched in parallel from all available outbound peers, using a
  limited moving window. When one peer stalls the movement of the window, it is
  disconnected.
* No more orphan blocks. At all. We only ever request a block for which we have
  verified the headers, and store it to disk immediately. This means that a
  disk-fill attack would require PoW.
* Require protocol version 31800 for every peer (released in december 2010).
* No more syncnode (we sync from everyone we can, though limited to 1 during
  initial *headers* sync).
* Introduce some extra named constants, comments and asserts.
2014-10-14 15:42:01 -07:00
Pieter Wuille 1f27c310a4 Merge pull request #5080
e21b2e0 Typo in test (Luke)
2014-10-13 12:11:50 -07:00
Pieter Wuille dec58922d0 Merge pull request #4996
d0c4197 change exit(1) to an assert in CWallet::EncryptWallet (Philip Kaufmann)
870da77 fix possible memory leaks in CWallet::EncryptWallet (Philip Kaufmann)
f606bb9 fix a possible memory leak in CWalletDB::Recover (Philip Kaufmann)
2014-10-08 15:51:32 -07:00
Pieter Wuille bf7b4fc6d3 Merge pull request #5004
9df9cf5 Make SCRIPT_VERIFY_STRICTENC compatible with BIP62 (Pieter Wuille)
2014-10-08 15:48:57 -07:00
Pieter Wuille 9df9cf5a9f Make SCRIPT_VERIFY_STRICTENC compatible with BIP62
* Delete canonical_tests.cpp, and move the tests to script_tests.cpp.
* Split off SCRIPT_VERIFY_DERSIG from SCRIPT_VERIFY_STRICTENC (the BIP62 part of it).
* Change signature STRICTENC/DERSIG semantics to fail the script entirely rather than the CHECKSIG result (softfork safety, and BIP62 requirement).
* Add many autogenerated tests for several odd cases.
* Mention specific BIP62 rules in the script verification flags.
2014-10-08 15:42:29 -07:00
Pieter Wuille d4a42334d4 Merge pull request #4834
7c70438 Get rid of the dummy CCoinsViewCache constructor arg (Pieter Wuille)
ed27e53 Add coins_tests with a large randomized CCoinViewCache test. (Pieter Wuille)
058b08c Do not keep fully spent but unwritten CCoins entries cached. (Pieter Wuille)
c9d1a81 Get rid of CCoinsView's SetCoins and SetBestBlock. (Pieter Wuille)
f28aec0 Use ModifyCoins instead of mutable GetCoins. (Pieter Wuille)
2014-10-08 14:58:16 -07:00
Pieter Wuille 2c930d932b Prettify JSON tests and minimize diffs 2014-10-07 09:41:33 +02:00
Pieter Wuille a2a5fe3b72 Merge pull request #5049
4dc5eb0 fix a lock indentation in main.cpp (Philip Kaufmann)
5eed8c2 minor license, header end comment etc. cleanup in /script (Philip Kaufmann)
2014-10-06 23:51:45 +02:00
Pieter Wuille ed6d1a2c7b Keep information about all block files in memory 2014-10-06 07:32:00 +02:00
Pieter Wuille 5ccd735d30 Merge pull request #4887
4bb30a1 Correct logging AcceptBlock()->AcceptBlockHeader() (R E Broadley)
2014-10-03 04:31:44 +02:00
Pieter Wuille e790c370b5 Replace SCRIPT_VERIFY_NOCACHE by flag directly to checker 2014-10-02 20:26:58 +02:00
Pieter Wuille 5c1e798a8e Make signature cache optional 2014-10-02 20:26:17 +02:00
Pieter Wuille c7829ea797 Abstract out SignatureChecker 2014-10-02 20:26:16 +02:00
Pieter Wuille 76c171033c Merge pull request #4926
584a358 Do merkle root and txid duplicates check simultaneously (Pieter Wuille)
2014-10-02 06:10:19 +02:00
Pieter Wuille 471d38b015 Merge pull request #4980
20a11ff minor variable init changes in init.cpp (Philip Kaufmann)
2014-10-02 04:29:01 +02:00
Pieter Wuille 0f78a0a2eb Upgrade comparison tool further 2014-10-02 03:55:33 +02:00
Pieter Wuille a329097f92 Merge pull request #4990
7bec6dd cleanup license and header end comment in chain.cpp/.h (Philip Kaufmann)
0db65d8 update license of compat and crypto (Philip Kaufmann)
2014-09-30 01:35:11 +02:00
Pieter Wuille 838e2e193b Merge pull request #5003
68af7d0 Fix vector out of bounds in script tests (Pieter Wuille)
2014-09-29 19:40:40 +02:00
Pieter Wuille 68af7d02cf Fix vector out of bounds in script tests 2014-09-29 19:26:23 +02:00
Pieter Wuille 2884b9a4ae Merge pull request #4960
8138cbe Add automatic script test generation, and actual checksig tests (Pieter Wuille)
2014-09-29 18:36:04 +02:00
Pieter Wuille bf3a5dd7f0 Merge pull request #4796
e8b5f0d Move CBlockIndex, CChain and related code out of main (jtimon)
6db83db Decouple CChain from mapBlockIndex (jtimon)
2014-09-29 06:06:57 +02:00
Pieter Wuille 8138cbea3c Add automatic script test generation, and actual checksig tests 2014-09-26 21:58:48 +02:00
Pieter Wuille 64cfaf891f Merge pull request #4986
6eb67b0 autofile: Disallow by-value copies of CAutoFile (Cory Fields)
eee030f autofile: don't copy CAutoFile by value (Cory Fields)
2014-09-26 20:31:18 +02:00
Pieter Wuille 610a3d3a1b Merge pull request #4983
d14d7de SanitizeString: allow '(' and ')' (Wladimir J. van der Laan)
2014-09-26 19:36:08 +02:00
Pieter Wuille c2db599c1f Merge pull request #4977
cf42c36 Apply clang-format on crypto/* and compat/* (Pieter Wuille)
2014-09-26 19:31:18 +02:00
Pieter Wuille cf42c36e99 Apply clang-format on crypto/* and compat/* 2014-09-25 08:23:32 +02:00
Pieter Wuille ea69592a2f Merge pull request #4974
b498a94 Fixed typo in README.md file. "-regest" "-regtest" (Eric Shaw)
2014-09-24 21:15:58 +02:00
Pieter Wuille 584a358997 Do merkle root and txid duplicates check simultaneously
Move the txid duplicates check into BuildMerkleTree, where it can be done
much more efficiently (without needing to build a full txid set to detect
duplicates).

The previous version (using the std::set<uint256> to detect duplicates) was
also slightly too weak. A block mined with actual duplicate transactions
(which is invalid, due to the inputs of the duplicated transactions being
seen as double spends) would trigger the duplicates logic, resulting in the
block not being stored on disk, and rerequested. This change fixes that by
only triggering in the case of duplicated transactions that can actually
result in an identical merkle root.
2014-09-24 19:17:02 +02:00
Pieter Wuille 7c70438dc6 Get rid of the dummy CCoinsViewCache constructor arg 2014-09-24 03:19:04 +02:00
Pieter Wuille ed27e53c9b Add coins_tests with a large randomized CCoinViewCache test. 2014-09-23 22:29:45 +02:00
Pieter Wuille 058b08c147 Do not keep fully spent but unwritten CCoins entries cached.
Instead of storing CCoins entries directly in CCoinsMap, store a CCoinsCacheEntry
which additionally keeps track of whether a particular entry is:
* dirty: potentially different from its parent view.
* fresh: the parent view is known to not have a non-pruned version.

This allows us to skip non-dirty cache entries when pushing batches of changes up,
and to remove CCoins entries about transactions that are fully spent before the
parent cache learns about them.
2014-09-23 22:29:43 +02:00
Pieter Wuille c9d1a81ce7 Get rid of CCoinsView's SetCoins and SetBestBlock.
All direct modifications are now done through ModifyCoins, and BatchWrite is
used for pushing batches of queued modifications up, so we don't need the
low-level SetCoins and SetBestBlock anymore in the top-level CCoinsView class.
2014-09-23 22:29:21 +02:00
Pieter Wuille f28aec014e Use ModifyCoins instead of mutable GetCoins.
Replace the mutable non-copying GetCoins method with a ModifyCoins, which
returns an encapsulated iterator, so we can keep track of concurrent
modifications (as iterators can be invalidated by those) and run cleanup
code after a modification is finished.

This also removes the overloading of the 'GetCoins' name.
2014-09-23 22:29:12 +02:00
Pieter Wuille 7a04f3d708 Merge pull request #4955
87314c1 Fixing improper input syntax and failing bounds check (ENikS)
2014-09-23 20:20:58 +02:00
Pieter Wuille c8589bf99e Add actual signature tests 2014-09-22 19:26:17 +02:00
Pieter Wuille 76ec867796 Use actually valid transactions for script tests 2014-09-22 19:26:17 +02:00
Pieter Wuille 934b153a2c Merge pull request #4933
20e01b1 Apply clang-format on some infrequently-updated files (Pieter Wuille)
2014-09-21 01:10:14 +02:00
Pieter Wuille 25308337d6 Merge pull request #4835
ab15b2e Avoid copying undo data (Pieter Wuille)
2014-09-20 05:11:09 +02:00
Pieter Wuille 20e01b1a03 Apply clang-format on some infrequently-updated files 2014-09-19 19:21:46 +02:00