aboutsummaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2017-02-15Merge #9108: Use importmulti timestamp when importing watch only keys (on ↵Wladimir J. van der Laan
top of #9682) a80f98b Use importmulti timestamp when importing watch only keys (Russell Yanofsky) a58370e Dedup nTimeFirstKey update logic (Russell Yanofsky)
2017-02-15Merge #9553: Use z = std::max(x - y, 0) instead of z = x - y; if (z < 0) z = 0;Wladimir J. van der Laan
a47da4b Use z = std::max(x - y, 0); instead of z = x - y; if (z < 0) z = 0; (practicalswift)
2017-02-14[trivial] Fix recently introduced typos in commentspracticalswift
2017-02-14Merge #9755: Bugfix: Qt/Options: Restore persistent "restart required" noticeJonas Schnelli
0b4f273 Bugfix: Qt/Options: Restore persistent "restart required" notice (Luke Dashjr)
2017-02-14Merge #9720: net: fix banning and disallow sending messages before receiving ↵Wladimir J. van der Laan
verack d943491 qa: add a test to detect leaky p2p messages (Cory Fields) 8650bbb qa: Expose on-connection to mininode listeners (Matt Corallo) 5b5e4f8 qa: mininode learns when a socket connects, not its first action (Matt Corallo) cbfc5a6 net: require a verack before responding to anything else (Cory Fields) 8502e7a net: parse reject earlier (Cory Fields) c45b9fb net: correctly ban before the handshake is complete (Cory Fields)
2017-02-14Merge #9715: Disconnect peers which we do not receive VERACKs from within 60 secWladimir J. van der Laan
66f861a Add a test for P2P inactivity timeouts (Matt Corallo) b436f92 qa: Expose on-connection to mininode listeners (Matt Corallo) 8aaba7a qa: mininode learns when a socket connects, not its first action (Matt Corallo) 2cbd119 Disconnect peers which we do not receive VERACKs from within 60 sec (Matt Corallo)
2017-02-14Merge #9682: Require timestamps for importmulti keysWladimir J. van der Laan
266a811 Use MTP for importmulti "now" timestamps (Russell Yanofsky) 3cf9917 Add test to check new importmulti "now" value (Russell Yanofsky) 442887f Require timestamps for importmulti keys (Russell Yanofsky)
2017-02-14Selectively suppress deprecation warningsJonas Schnelli
2017-02-14Merge #9735: devtools: Handle Qt formatting characters edge-case in ↵Wladimir J. van der Laan
update-translations.py 7179e7c qt: Periodic translations update (Wladimir J. van der Laan) 5e903a5 devtools: Handle Qt formatting characters edge-case in update-translations.py (Wladimir J. van der Laan)
2017-02-13net: require a verack before responding to anything elseCory Fields
7a8c251901 made this logic hard to follow. After that change, messages would not be sent to a peer via SendMessages() before the handshake was complete, but messages could still be sent as a response to an incoming message. For example, if a peer had not yet sent a verack, we wouldn't notify it about new blocks, but we would respond to a PING with a PONG. This change makes the behavior straightforward: until we've received a verack, never send any message other than version/verack/reject. The behavior until a VERACK is received has always been undefined, this change just tightens our policy. This also makes testing much easier, because we can now connect but not send version/verack, and anything sent to us is an error.
2017-02-13net: parse reject earlierCory Fields
Prior to this change, all messages were ignored until a VERSION message was received, as well as possibly incurring a ban score. Since REJECT messages can be sent at any time (including as a response to a bad VERSION message), make sure to always parse them. Moving this parsing up keeps it from being caught in the if (pfrom->nVersion == 0) check below.
2017-02-13net: correctly ban before the handshake is completeCory Fields
7a8c251901 made a change to avoid getting into SendMessages() until the version handshake (VERSION + VERACK) is complete. That was done to avoid leaking out messages to nodes who could connect, but never bothered sending us their version/verack. Unfortunately, the ban tally and possible disconnect are done as part of SendMessages(). So after 7a8c251901, if a peer managed to do something bannable before completing the handshake (say send 100 non-version messages before their version), they wouldn't actually end up getting disconnected/banned. That's fixed here by checking the banscore as part of ProcessMessages() in addition to SendMessages().
2017-02-13Return error when importmulti called with invalid address.Russell Yanofsky
Lack of error checking noticed by Alex Morcos <morcos@chaincode.com>
2017-02-13Bugfix: Qt/Options: Restore persistent "restart required" noticeLuke Dashjr
2017-02-11Merge #9736: Pre-0.14.0 hardcoded seeds updateWladimir J. van der Laan
a60677e Pre-0.14.0 hardcoded seeds update (Wladimir J. van der Laan) bfa9393 contrib/seeds: Update PATTERN_AGENT (Wladimir J. van der Laan) 4dfac2c Update seeds tooling to Python 3 (Wladimir J. van der Laan)
2017-02-10Use importmulti timestamp when importing watch only keysRussell Yanofsky
When importing a watch-only address over importmulti with a specific timestamp, the wallet's nTimeFirstKey is currently set to 1. After this change, the provided timestamp will be used and stored as metadata associated with watch-only key. This can improve wallet performance because it can avoid the need to scan the entire blockchain for watch only addresses when timestamps are provided. Also adds timestamp to validateaddress return value (needed for tests). Fixes #9034.
2017-02-10Dedup nTimeFirstKey update logicRussell Yanofsky
Also make nTimeFirstKey member variable private. This is just a cleanup change, it doesn't change behavior in any significant way.
2017-02-10Use MTP for importmulti "now" timestampsRussell Yanofsky
2017-02-10Add test to check new importmulti "now" valueRussell Yanofsky
Easiest way to test this was to expose the timestamp via the validateaddress RPC (which was already looking up and returning key metadata).
2017-02-10Require timestamps for importmulti keysRussell Yanofsky
Additionally, accept a "now" timestamp, to allow avoiding rescans for keys which are known never to have been used. Note that the behavior when "now" is specified is slightly different than the previous behavior when no timestamp was specified at all. Previously, when no timestamp was specified, it would avoid rescanning during the importmulti call, but set the key's nCreateTime value to 1, which would not prevent future block reads in later ScanForWalletTransactions calls. With this change, passing a "now" timestamp will set the key's nCreateTime to the current block time instead of 1. Fixes #9491
2017-02-10Move CNode::addrLocal access behind locked accessorsMatt Corallo
2017-02-10Move CNode::addrName accesses behind locked accessorsMatt Corallo
2017-02-10Make nTimeBestReceived atomicMatt Corallo
2017-02-10Move [clean|str]SubVer writes/copyStats into a lockMatt Corallo
2017-02-10Make nServices atomicMatt Corallo
2017-02-10Make nStartingHeight atomicMatt Corallo
2017-02-10Access fRelayTxes with cs_filter lock in copyStatsMatt Corallo
2017-02-10Avoid copying CNodeStats to make helgrind OK with buggy std::stringMatt Corallo
2017-02-10Make nTimeConnected const in CNodeMatt Corallo
2017-02-10net: fix a few races. Credit @TheBlueMattCory Fields
These are (afaik) all long-standing races or concurrent accesses. Going forward, we can clean these up so that they're not all individual atomic accesses. - Reintroduce cs_vRecv to guard receive-specific vars - Lock vRecv/vSend for CNodeStats - Make some vars atomic. - Only set the connection time in CNode's constructor so that it doesn't change
2017-02-10Merge #9698: net: fix socket close raceWladimir J. van der Laan
9a0b784 net: add a lock around hSocket (Cory Fields) 45e2e08 net: rearrange so that socket accesses can be grouped together (Cory Fields)
2017-02-10Remove fallbacks for boost_filesystem < v3Wladimir J. van der Laan
Minimum boost version was bumped to 1.47.0 in #8920, which means the configure step won't even pass with older boost. This version has boost filesystem v3, which means the (crappy) fallbacks for older versions can go.
2017-02-10Pre-0.14.0 hardcoded seeds updateWladimir J. van der Laan
2017-02-10qt: Periodic translations updateWladimir J. van der Laan
2017-02-09Remove bitseed.xf2.org form the dns seed listJonas Schnelli
2017-02-09netbase: Do not print an error on connection timeouts through proxyWladimir J. van der Laan
If a timeout happens while reading the proxy response, this effectively means we timed out while connecting to the remote node. This is very common for Tor, so do not print an error message.
2017-02-09netbase: Make InterruptibleRecv return an error code instead of boolWladimir J. van der Laan
2017-02-09Merge #9718: Qt/Intro: Various fixesWladimir J. van der Laan
a9baa6d Bugfix: Qt/Intro: Pruned nodes never require *more* space (Luke Dashjr) 93ffba7 Bugfix: Qt/Intro: Chain state needs to be stored even with the full blockchain (Luke Dashjr) c8cee26 Qt/Intro: Update block chain size (Luke Dashjr)
2017-02-09Qt/Intro: Explain a bit more what will happen first timeLuke Dashjr
2017-02-08Qt/Intro: Storage shouldn't grow significantly with pruning enabledLuke Dashjr
2017-02-08Qt/Intro: Move sizeWarningLabel text into C++ codeLuke Dashjr
2017-02-08Bugfix: Qt/Intro: Pruned nodes never require *more* spaceLuke Dashjr
2017-02-08Bugfix: Qt/Intro: Chain state needs to be stored even with the full blockchainLuke Dashjr
2017-02-08Qt/Intro: Update block chain sizeLuke Dashjr
2017-02-08Merge #9674: Always enforce strict lock ordering (try or not)Wladimir J. van der Laan
618ee92 Further-enforce lockordering by enforcing directly after TRY_LOCKs (Matt Corallo) 2a962d4 Fixup style a bit by moving { to the same line as if statements (Matt Corallo) 8465631 Always enforce lock strict lock ordering (try or not) (Matt Corallo) fd13eca Lock cs_vSend and cs_inventory in a consistent order even in TRY (Matt Corallo)
2017-02-07Disconnect peers which we do not receive VERACKs from within 60 secMatt Corallo
2017-02-07Further-enforce lockordering by enforcing directly after TRY_LOCKsMatt Corallo
2017-02-07bench: Fix initialization order in registrationWladimir J. van der Laan
The initialization order of global data structures in different implementation units is undefined. Making use of this is essentially gambling on what the linker does, the so-called [Static initialization order fiasco](https://isocpp.org/wiki/faq/ctors#static-init-order). In this case it apparently worked on Linux but failed on OpenBSD and FreeBSD. To create it on first use, make the registration structure local to a function. Fixes #8910.
2017-02-07[Trivial] Remove incorrect help message from gettxoutproof()John Newbery
2017-02-07Use z = std::max(x - y, 0); instead of z = x - y; if (z < 0) z = 0;practicalswift