Commit Graph
100 Commits
Author SHA1 Message Date
Pieter Wuille fecba4e269 Total money limit test
Added bounds check by @il--ya.

Updated-by: Wladimir van der Laan <laanwj@gmail.com>
2014-03-05 12:07:58 +01:00
Pieter Wuille 879b390758 Increase default dbcache to 100 MiB 2014-02-17 15:11:06 +01:00
Pieter Wuille 87fe71e1fc Add HasCanonicalPushes(), and use it in IsStandardTx 2014-02-11 21:11:59 +01:00
Pieter Wuille e3fff058e0 Correct/add/merge a few release notes entries 2014-02-08 20:25:12 +01:00
Pieter Wuille f59d8f0b64 Per-peer block download tracking and stalled download detection.
Keep track of which block is being requested (and to be requested) from
each peer, and limit the number of blocks in-flight per peer. In addition,
detect stalled downloads, and disconnect if they persist for too long.

This means blocks are never requested twice, and should eliminate duplicate
downloads during synchronization.
2014-02-08 16:52:19 +01:00
Pieter Wuille 073f45cae5 Merge pull request #3635
12edce5 Update the address for downloading libpng (Micha)
2014-02-07 00:44:39 +01:00
Pieter Wuille bbde1e99c8 Limit the number of orphan blocks
In case the total number of orphan blocks in memory exceeds a limit
(currently set to 750), a random orphan block (which is not
depended on by another orphan block) is dropped. This means it will
need to be downloaded again, but it won't consume memory until then.
2014-01-31 14:16:06 +01:00
Pieter Wuille 75f51f2a63 Prepare block connection logic for headers-first.
This changes the block processing logic from "try to atomically switch
to a new block" to a continuous "(dis)connect a block, aiming for the
assumed best chain".

This means the smallest atomic operations on the chainstate become
individual block connections or disconnections, instead of entire
reorganizations. It may mean that we try to reorganize to one block,
fail, and rereorganize again to the old block. This is slower, but
doesn't require unbounded RAM.

It also means that a ConnectBlock which fails may be no longer called
from the ProcessBlock which knows which node sent it. To deal with that,
a mapBlockSource is kept, and invalid blocks cause asynchronous "reject"
messages and banning (if necessary).
2014-01-27 21:20:41 +01:00
Pieter Wuille 0ec16f35d6 Move only: extract WriteChainState and UpdatedTip from SetBestChain. 2014-01-27 21:13:48 +01:00
Pieter Wuille dd7c1cf534 Merge pull request #3551
6873cfb Update linearize.py defaults to block 279,000 (Micha)
e7906d1 Add a new checkpoint at block 279,000 (Micha)
2014-01-19 00:33:48 +01:00
Pieter Wuille b9d384a45d Merge src/leveldb changes: temporarily revert to writing .sst files. 2014-01-18 14:32:29 +01:00
Pieter Wuille 060fdb41fc Squashed 'src/leveldb/' changes from e991315..9094c7f
9094c7f Temporarily revert to writing .sst files instead of .ldb

git-subtree-dir: src/leveldb
git-subtree-split: 9094c7ffe45e0bedd84ea414828f768fd49bcdf7
2014-01-18 14:32:29 +01:00
Pieter Wuille da0fecffa7 Store orphan blocks in serialized form 2014-01-11 23:39:29 +01:00
Pieter Wuille dc64c3c374 Merge pull request #3510
c037531 small headers ordering cleanup (Philip Kaufmann)
2014-01-11 18:54:20 +01:00
Pieter Wuille 3743b80528 Merge pull request #3430 from ldenman/patch-1
Fix typo in unit-tests.md
2013-12-16 12:47:24 -08:00
Pieter Wuille 55c6890294 Squashed 'src/leveldb/' changes from 936b461..e991315
e991315 Merge upstream LevelDB 1.15.
0cfb990 Release LevelDB 1.15
02ac9f1 Merge upstream LevelDB 1.14.
0b9a89f Release LevelDB 1.14

git-subtree-dir: src/leveldb
git-subtree-split: e991315d7fe4ca84a98902578106cbffa3dcccfd
2013-12-12 22:08:18 +01:00
Pieter Wuille ed873a301e Merge src/leveldb changes for LevelDB 1.15 2013-12-12 22:08:18 +01:00
Pieter Wuille b2864d2fb3 Add main-specific node state 2013-12-08 14:51:37 +01:00
Pieter Wuille 9ab7a0609e Merge pull request #3341 from Need4Video/master
Lossless image optimization
2013-12-02 04:25:05 -08:00
Pieter Wuille a0fa20a12b Move CCoins-related logic to coins.{cpp.h} 2013-11-10 19:37:56 +01:00
Pieter Wuille f76c122e2e Merge pull request #2767
51ed9ec Cleanup code using forward declarations. (Brandon Dahler)
2013-11-10 19:21:03 +01:00
Pieter Wuille 7c4c207be8 Merge pull request #3211
b64187d Rename leveldb.{h,cpp} to leveldbwrapper.{h,cpp}. (Brandon Dahler)
2013-11-09 18:46:32 +01:00
Pieter Wuille 694c7c8161 Merge pull request #3087
caca6aa Make some globals in main non-public. (Pieter Wuille)
85eb2ce Do not use the redundant BestInvalidWork record in the block database. (Pieter Wuille)
2013-11-02 15:12:07 +01:00
Pieter Wuille 1dffbf0060 Merge pull request #3114
a616206 Give peer time-adjustment data an own lock (Pieter Wuille)
2013-11-01 01:07:49 +01:00
Pieter Wuille caca6aa4eb Make some globals in main non-public.
This means they are declared static, and their extern definition in
main.h is removed. Also moved CBlockIndexWorkComparator to the .cpp
file.
2013-11-01 00:54:28 +01:00
Pieter Wuille 85eb2cef33 Do not use the redundant BestInvalidWork record in the block database.
As block index entries have a flag for marking invalid blocks, the
'best invalid work' information can be derived from there. In addition,
remove the global from main.h
2013-11-01 00:54:28 +01:00
Pieter Wuille 170e02deaf Generalize the remove-outputs check for fully-prunable transactions.
Instead of explicitly testing for the presence of any output, and
dealing with this case specially, just interpret it as an empty
CCoins.

The case previously caught using the HaveCoins check, is now handled
by the generic outs != outsBlock test.
2013-10-28 15:00:43 +01:00
Pieter Wuille e9755001ab Remove redundant insert method in serialize.
This seems to cause problems on recent clang, and looks totally
redundant and unused.

The const_iterator version is identical to the vector::const_iterator
one (which is a typedef thereof). Marking it private (instead of
removing) compiles fine, so this version is effectively unused even.
2013-10-26 20:34:48 +02:00
Pieter Wuille e213005177 Merge pull request #3153
1f3d364 Send multiple inv messages if mempool.size > MAX_INV_SZ (Gavin Andresen)
2013-10-26 15:15:28 +02:00
Pieter Wuille 722fa283d0 Break dependency of init on wallet.
This required some code movement (what was CWalletTx::AcceptToMemoryPool
doing in main?), and adding a few explicit includes that used to be
implicit through init.h.
2013-10-26 14:51:47 +02:00
Pieter Wuille 00588c3fac Use boost signals for callbacks from main to wallet 2013-10-26 14:51:46 +02:00
Pieter Wuille e010af7089 Remove broken PrintWallet functionality 2013-10-26 14:49:47 +02:00
Pieter Wuille fe52346450 Do not treat fFromMe transaction differently when broadcasting 2013-10-26 14:49:47 +02:00
Pieter Wuille a616206865 Give peer time-adjustment data an own lock
Instead of relying on cs_main (defined in a different module) to
prevent concurrent access to it.
2013-10-26 14:43:26 +02:00
Pieter Wuille 9b1200c23b Merge pull request #3119
db0e8cc Bump Year Number to 2013 (super3)
2013-10-20 22:25:44 +02:00
Pieter Wuille 7d38af3c49 Push down cs_main locking in ProcessMessage 2013-10-15 22:34:25 +02:00
Pieter Wuille 49d754d915 Run node deletions outside of cs_vNodes 2013-10-15 22:34:25 +02:00
Pieter Wuille 6055b9101b Allow SendMessages to run partially without cs_main
SendMessages() tries to acquire a cs_main lock now, but this isn't nessecary
for much of its functionality. Move those parts out of the locked section,
so they can always be performed, and we hold cs_main for a shorter time.
2013-10-15 22:34:20 +02:00
Pieter Wuille f9b15a4fc9 Move CBlockLocator to core.h
As CBlockLocator is a P2P data structure, and independent from the
validation logic, it can be moved to core.
2013-10-15 11:09:29 +02:00
Pieter Wuille e4daecda0b Reimplement CBlockLocator's chain-related logic in CChain.
This removes a few unused CBlockLocator methods, and moves the
construction and fork-finding logic to CChain (which can do these
more efficiently, as it has a height-indexable chain available).
It also makes CBlockLocator independent from the validation code.
2013-10-15 11:09:29 +02:00
Pieter Wuille 9269d0e96e Merge pull request #2937
971bb3e Added ping time measurement. New RPC "ping" command to request ping. Implemented "pong" message handler. New "pingtime" field in getpeerinfo, to provide results to user. New "pingwait" field, to show pings still in flight, to better see newly lagging peers. (Josh Lehan)
2013-10-13 17:41:28 +02:00
Pieter Wuille 4c6d41b8b6 Refactor/encapsulate chain globals into a CChain class 2013-10-11 23:25:50 +02:00
Pieter Wuille 6865127551 Merge pull request #3015 from theuni/win32-version-info
Win32 version info
2013-09-29 06:49:23 -07:00
Pieter Wuille f5857e5cb5 Inline signature serializer
Instead of building a full copy of a CTransaction being signed, and
then modifying bits and pieces until its fits the form necessary
for computing the signature hash, use a wrapper serializer that
only serializes the necessary bits on-the-fly.

This makes it easier to see which data is actually being hash,
reduces load on the heap, and also marginally improves performances
(around 3-4us/sigcheck here). The performance improvements are much
larger for large transactions, though.

The old implementation of SignatureHash is moved to a unit tests,
to test whether the old and new algorithm result in the same value
for randomly-constructed transactions.
2013-09-28 18:37:00 +02:00
Pieter Wuille d14b86730b Merge pull request #3026 from sipa/checkunspend
Skip unspendable outputs in consistency check
2013-09-25 04:41:02 -07:00
Pieter Wuille 99740bab9c Skip unspendable outputs in consistency check 2013-09-24 14:11:20 +02:00
Pieter Wuille a28fb70e45 Merge pull request #3016 from sipa/lows
Use 'low S' as malleability breaker rather than 'even S'
2013-09-23 06:05:29 -07:00
Pieter Wuille f676fb91f3 Merge pull request #3020 from Diapolo/LogPrint_fixes
fix some printf -> LogPrintf leftovers
2013-09-20 01:52:57 -07:00
Pieter Wuille e0e14e43d9 Use 'low S' as malleability breaker rather than 'even S' 2013-09-20 09:30:41 +02:00
Pieter Wuille b4355ccaf7 Merge pull request #3019 from sipa/fugbix
Bugfix: nHeightLast instead of nHeightFirst
2013-09-19 03:45:29 -07:00
Pieter Wuille 1657ed2ab4 Fix minor unit test memory leaks 2013-09-19 00:01:46 +02:00
Pieter Wuille 2c27bbca81 Merge pull request #2967 from tstranex/master
Fix typo in a comment: it's base58, not base48.
2013-09-02 09:04:06 -07:00
Pieter Wuille f19eda1d57 Merge pull request #2959 from jmcorgan/fix-typo
fix the typo fix in linearize.py
2013-08-30 13:19:21 -07:00
Pieter Wuille ae6eac667b Merge pull request #2940 from Diapolo/checkpoint
move Checkpoints:fEnabled from step 2 to step 3 in init
2013-08-29 01:59:35 -07:00
Pieter Wuille 8a9e538227 Merge pull request #2935 from sipa/obounds
Fix out-of-bounds check
2013-08-25 07:42:21 -07:00
Pieter Wuille 24e5d7d5ae Fix out-of-bounds check 2013-08-24 23:22:27 +02:00
Pieter Wuille eed29f0f50 Squashed 'src/leveldb/' changes from be1b0ff..936b461
936b461 Merge upstream LevelDB 1.13.
748539c LevelDB 1.13

git-subtree-dir: src/leveldb
git-subtree-split: 936b4613ea4551992e6096b1e05eeefc09a20e3b
2013-08-24 22:21:41 +02:00
Pieter Wuille 877b5e3653 Merge src/leveldb changes for LevelDB 1.13 2013-08-24 22:21:41 +02:00
Pieter Wuille 84d6d69fc6 Squashed 'src/leveldb/' changes from ae6c262..a02ddf9
a02ddf9 Added GNU/kFreeBSD kernel name (TARGET_OS)
8487468 CondVar::SignalAll was broken, leading to deadlocks on Windows builds. http://code.google.com/p/leveldb/issues/detail?id=149
f6d84d1 Allow files to be opened for reading multiple times
cb8e3f7 Checking whether closing succeeds
d5317e8 Print actual Win32 error that occurred on file creation failure.
907f308 Port leveldb to MinGW32
9def2bf Mingw support for Windows LevelDB port
0a7b074 Pre-Vista leveldb::port::InitOnce implementation
31a2b09 Native Windows LevelDB port
058a035 Remove Snappy support
5bd76dc Release leveldb 1.12
7b094f1 Release leveldb 1.11
28dad91 Release leveldb 1.10
514c943 Make DB::Open fail if sst files are missing.
d84c825 Fix corruption bug found and analyzed by dhruba@gmail.com
ea2e919 added utility to dump leveldb files
REVERT: ae6c262 Merge branch 'leveldb' into ripple-fork
REVERT: 28fa222 Looks like a bit more delay is needed to smooth the latency.
REVERT: a18f3e6 Tidy up JobQueue, add ripple_core module
REVERT: ab82e57 Release leveldb 1.12
REVERT: 02c6259 Release leveldb 1.11
REVERT: 5bbb544 Rate limit compactions with a 25ms pause after each complete file.
REVERT: 8c29c47 LevelDB issue 178 fix: cannot resize a level 0 compaction set
REVERT: 18b245c Added GNU/kFreeBSD kernel name (TARGET_OS)
REVERT: 8be9d12 CondVar::SignalAll was broken, leading to deadlocks on Windows builds. http://code.google.com/p/leveldb/issues/detail?id=149
REVERT: c9fc070 Upgrade LevelDB to 1.10.0, mostly for better write stall logging.
REVERT: 8215b15 Tweak to variable name to support unity build
REVERT: aca1ffc Allow files to be opened for reading multiple times
REVERT: 693a70c Checking whether closing succeeds
REVERT: 0144d04 Print actual Win32 error that occurred on file creation failure.
REVERT: 43ed517 Fix corruption bug found and analyzed by dhruba@gmail.com
REVERT: 413c74c added utility to dump leveldb files
REVERT: 96eda85 Port leveldb to MinGW32
REVERT: 0967260 Mingw support for Windows LevelDB port
REVERT: ee3f9bd Pre-Vista leveldb::port::InitOnce implementation
REVERT: f5d0a41 Native Windows LevelDB port
REVERT: 28b35f1 Remove Snappy support

git-subtree-dir: src/leveldb
git-subtree-split: a02ddf9b14d145e88185ee209ab8b01d8826663a
2013-08-18 00:58:04 +02:00
Pieter Wuille 4a9a8f3f48 Merge commit '84d6d69fc69662b2709fffbeaf3c3b4f53c535b1' 2013-08-18 00:58:04 +02:00
Pieter Wuille a81cd96805 Only create signatures with even S, and verification mode to check.
To fix a minor malleability found by Sergio Lerner (reported here:
https://bitcointalk.org/index.php?topic=8392.msg1245898#msg1245898)

The problem is that if (R,S) is a valid ECDSA signature for a given
message and public key, (R,-S) is also valid. Modulo N (the order
of the secp256k1 curve), this means that both (R,S) and (R,N-S) are
valid. Given that N is odd, S and N-S have a different lowest bit.
We solve the problem by forcing signatures to have an even S value,
excluding one of the alternatives.

This commit just changes the signing code to always produce even S
values, and adds a verification mode to check it. This code is not
enabled anywhere yet. Existing tests in key_tests.cpp verify that
the produced signatures are still valid.
2013-08-16 00:17:50 +02:00
Pieter Wuille 2461aba1ac Mempool consistency check 2013-08-15 23:55:35 +02:00
Pieter Wuille f0784ac470 Fix non-standard disconnected transactions causing mempool orphans 2013-08-15 23:53:55 +02:00
Pieter Wuille c4316fefa5 Make sure new wallet variables are initialized 2013-07-29 02:34:01 +02:00
Pieter Wuille 4bb77b4963 Merge pull request #2541 from luke-jr/bugfix_wallet_resend
Bugfix: Store last/next wallet resend times unique per CWallet object
2013-07-28 17:21:21 -07:00
Pieter Wuille 83a3597071 Merge pull request #2702 from vinniefalco/leveldb-subtree-at-1-10-0
Leveldb subtree at 1 12 0
2013-07-28 03:57:17 -07:00
Pieter Wuille f38f452251 Merge pull request #2863 from maaku/patch-1
Fix typo in README.md
2013-07-27 14:26:47 -07:00
Pieter Wuille a59db19ee3 BIP32 test vectors 2013-07-15 01:07:19 +02:00
Pieter Wuille eb2c999050 BIP32 derivation implementation 2013-07-15 01:05:25 +02:00
Pieter Wuille c2aca50551 Merge pull request #2825 from sipa/incompatkey
Fix minor backward incompatibility
2013-07-14 04:29:36 -07:00
Pieter Wuille fb83a79b21 Fix minor backward incompatibility
The key refactor changed the way unencrypted private keys with compressed
public key are stored in the wallet. Apparently older versions relied on
this to verify the correctness of stored keys.

Note that earlier pre-release versions do risk creating wallets that can
not be opened by 0.8.3 and earlier.
2013-07-13 12:57:19 +02:00
Pieter Wuille 28bcf3b7ef Merge pull request #2803 from sipa/tarversion
Fix build date for from-tarball builds
2013-06-29 06:50:36 -07:00
Pieter Wuille 21cc8bdcbe Fix build date for from-tarball builds 2013-06-29 14:16:50 +02:00
Pieter Wuille a4f43075d6 Merge pull request #2793 from Diapolo/translations
translation update 2013-06-25
2013-06-26 15:02:28 -07:00
Pieter Wuille 1f2d739ac1 Merge pull request #2174 from CodeShark/sync_macro_clarification
Added comments to sync.h to make it easier to understand the macros
2013-06-26 10:51:33 -07:00
Pieter Wuille 4ad73c6b08 Merge pull request #2209 from CodeShark/WalletRegistrationLocks
Wallet registration locks in main.cpp + UnregisterAllWallet() function
2013-06-25 16:33:16 -07:00
Pieter Wuille f121db58e4 Move core implementations to core.cpp 2013-06-25 10:33:29 +02:00
Pieter Wuille c43da3f183 Dump addresses every 15 minutes instead of 10 seconds 2013-06-24 11:48:14 +02:00
Pieter Wuille 8388289eb6 Generalize version bytes 2013-06-24 00:56:46 +02:00
Pieter Wuille 12dff9801f Add HMAC-SHA512 to hash 2013-06-24 00:56:45 +02:00
Pieter Wuille fd967fed89 Merge pull request #2783 from sipa/newtxindex
Initialize database before checking changed txindex
2013-06-23 15:49:08 -07:00
Pieter Wuille ee4949794b Merge pull request #2592 from sipa/dumpwallet
Add dumpwallet and importwallet RPC commands
2013-06-23 12:10:17 -07:00
Pieter Wuille b4a8a326c0 Merge pull request #2660 from TheBlueMatt/gmfrefactor
Refactor fee rules to make them actually readable.
2013-06-22 10:08:57 -07:00
Pieter Wuille 48628fd98c Merge pull request #2765 from vobornik/master
recognize Debian kFreeBSD port by build_detect_platform script
2013-06-22 10:05:18 -07:00
Pieter Wuille cccd17a1b2 Merge pull request #2768 from fanquake/brew-makefile-patch-fix
Update HomeBrew makefile patch
2013-06-22 10:04:58 -07:00
Pieter Wuille 4e534aa9d8 Add dumpwallet and importwallet RPCs
dumpwallet: produce a dump of all keys in a wallet, in a format
compatible with Bitcoin Wallet for Android and Multibit.

importwallet: import such a dump
2013-06-22 17:30:56 +02:00
Pieter Wuille 434e4273b9 Add GetKeyBirthTimes to wallet
Compute safe lower bounds on the birth times of all wallet keys. For
pool keys or keys with metadata, the actually stored birth time is
used. For all others, the birth times are inferred from the wallet
transactions.
2013-06-22 17:30:56 +02:00
Pieter Wuille acc775c554 Add ExtractAffectedKeys to script
This function finds all keys affected by a particular output script,
supporting everything ExtractDestinations supports (pay-to-pubkey,
pay-to-pubkeyhash, multisig) and recurses into subscripts (P2SH).
2013-06-22 16:49:30 +02:00
Pieter Wuille 067a6092ac Initialize database before checking changed txindex
In case no database exists yet, and -txindex(=1) is passed, we currently first
check whether fTxIndex differs from -txindex (and ask the user to reindex in
that case), and only afterwards initialize the database. By swapping these
around (the initialization is a no-op in case the database already exists),
we allow it to be born in txindex mode, without warning.

That also means we don't need to check -reindex anymore, as the wiping/reinit
of the databases happens before checking.
2013-06-22 16:14:26 +02:00
Pieter Wuille 01b45731b7 Merge pull request #2632 from mikehearn/chainparams
Refactor chain-specific tweaks into a CChainParams class and introduce a regtest mode
2013-06-22 06:56:14 -07:00
Pieter Wuille 905738a15a Merge pull request #2781 from sipa/keytimemem
Refactor keytime/metadata and wallet encryption bugfix
2013-06-22 06:46:36 -07:00
Pieter Wuille 4addb2c066 Refactor keytime/metadata and wallet encryption bugfix
Refactor keytime:
* Key metadata is kept in a CWallet::mapKeyMetadata (std::map<CKeyId,CKeyMetadata>).
* When generating a new key, time is put in that map, and new key is written.
* AddKeyPubKey and AddCryptedKey do not take a creation time argument, but instead
  pull it from that map, if it exists there.

Bugfix:
* AddKeyPubKey and AddCryptedKey in CWallet didn't override the CKeyStore
  definition anymore. This is fixed, as they no longed need the nCreationTime
  argument now.

Also a few related other changes:
* Metadata can be overwritten.
* Only GenerateNewKey calls GetTime(), as it's the only place where we know for
  sure a key was not constructed earlier.
* When the nTimeFirstKey is known to be inaccurate, it is set to the value 1
  (instead of 0, which would mean unknown).
* Use CPubKey instead of std::vector<unsigned char> where possible.
2013-06-20 01:31:18 +02:00
Pieter Wuille 5e6f7cc8ad Merge pull request #2763 from bitsofproof/master
Send tx relay flag with version message
2013-06-17 01:43:11 -07:00
Pieter Wuille e58154c447 Merge pull request #2648 from Diapolo/txindex
allow txindex to be removed and add a reindex dialog
2013-06-15 07:49:40 -07:00
Pieter Wuille f5442aeef4 Merge pull request #2766 from theuni/fix-shutdown-deadlock
Fix shutdown deadlock, ticket #2690
2013-06-15 07:40:35 -07:00
Pieter Wuille 9e3a5deaa3 Merge pull request #2769 from TheBlueMatt/master
Remove broken option to skip input checking for wallet txn.
2013-06-15 07:39:13 -07:00
Pieter Wuille 61983b3d16 Merge pull request #1863 from jgarzik/keytime
"Wallet birthdays": store key create time; calc whole-wallet birthday
2013-06-10 13:38:19 -07:00
Pieter Wuille 365ab225c0 Merge pull request #2616 from vinniefalco/leveldb-as-subtree
Leveldb as subtree
2013-05-30 16:43:20 -07:00
Pieter Wuille 896185d7ed Make signature cache store CPubKeys 2013-05-30 05:20:23 +02:00
Pieter Wuille dfa23b94c2 CSecret/CKey -> CKey/CPubKey split/refactor 2013-05-30 05:20:21 +02:00