Commit Graph

308 Commits

Author SHA1 Message Date
TomZ 997e861e93 Add fetch method on mempool for DSPs
Allow the retrieval of a double spend proof based on the transaction-id
it is paired with inside the mempool.
2020-03-19 22:05:11 +01:00
TomZ 6ad8374794 Update testnet seeders 2020-03-19 15:04:28 +01:00
TomZ e9ef907c1f Sync checkpoint save and index-db saveCaches
When the UTXO saved checkpoints this change makes sure we also store the
index-db changes.

Since we stopped saving simple state changes fromt the index-db, the
only real data we save is the 'undo-block-index', as such this will be
relatively cheap to save.
Without an undo block position we will currently fail to verify those
blocks and as such it is useful to save all at the same time to actually
have a state we can start from.
2020-03-05 23:29:53 +01:00
TomZ 043f496c73 Make scope of variable smaller. 2020-03-05 23:29:53 +01:00
TomZ 579dc67bc2 Remove dead code 2020-03-05 23:29:52 +01:00
TomZ c79be8860a Use VerifyDB as well when finding a functional UTXO state
Allow VerifyDB to disquality a utxo-state so we can find an older one, if
available, and try harder to start without reindex.
2020-03-05 23:29:52 +01:00
TomZ 01ff5ff1db Make writing to blk file not follow symlinks
To share the downloaded blocks between instances on Linux it is common
to sym-link the blk files from read-only storage.
The Hub would fail to write to the last file due to the file being on
read-only storage and the Hub would shut down.
This change makes sure we instead create a new file instead of trying to
write to a symlinked one.
2020-03-05 23:29:52 +01:00
TomZ a790b26133 Just warn about failing to write to a legacy blk
Boost throws an exception when the resize fails, which would cause
a total shutdown of the client. So make sure we catch it in the
scheduled task to avoid this problem.
2020-03-01 18:27:28 +01:00
TomZ 0e6231e636 Add a check to only write when not loaded
In some unit tests I noticed that we write a block that was just loaded
from disk, this check avoids this overhead.
Not sure how relevant this is for normal operations.
2020-02-28 12:55:16 +01:00
TomZ 7e7f42e8ec Make de-orphaning code no longer recursive.
The recovering of orphans was recursive and that meant there was a max
length of headers we could process with a gap in the chain due to normal
stack-depth for recursivity (approx 50k).
As headers are being provided to us from external peers this could be a
DOS vector.

This implementation avoids this problem by not being recursive.
2020-02-28 00:34:12 +01:00
TomZ 60d371afa7 Make loading find a functional UTXO state
When, on loading, the blockindex and the UTXO don't agree then try to find an older UTXO
state where they do agree.
The most typical state issue is where a block stored in the blocksdb is not available in
the index due to corruption or similar.
2020-02-28 00:34:08 +01:00
TomZ f0e93708e1 Minor cleanups 2020-02-28 00:33:11 +01:00
TomZ 30927fe0b2 Fix reindexing sometimes failing due to read-only blocks
When reindexing we now always first try to open a file read-write because
the algo to only open the last file in a sequence as RW failed in such
situations where we don't know the amount of files yet.
2020-02-28 00:33:11 +01:00
TomZ 489a9a4859 Move nStatus of blockindex into the UTXO
To allow the UTXO to actually use the power of checkpoints we need to
make sure that the block-validation state is not stored separately from
it.
The goal is that when we have some curruption we can just go back to an
earlier state of the UTXO and re-validate the blocks to get to the
current tip. The often seen problem is that corruption will instead
leave the block-index (leveldb) with an incorrect state so the replay
fails.

This change solves that by no longer reading the block-validation-state
and no longer writing it on a state change.
2020-02-28 00:33:04 +01:00
TomZ a1b4c0416d Avoid clearing an empty bloom filter 2020-02-27 23:26:20 +01:00
TomZ 99a78eb60a remove dead code 2020-02-27 13:51:21 +01:00
TomZ 4bea1f55c4 use QElapsedTimer 2020-01-30 15:29:03 +01:00
TomZ cb5d9d16f6 Fix usage of exceptions
Throwing an exception instead of returning false means we blacklist the
txid from being downloaded multiple times.
2020-01-15 17:11:27 +01:00
TomZ c672f80374 Catch exception from DSP::create() 2020-01-14 12:36:19 +01:00
TomZ c0ba4e49fb RPC getrawtransaction allow 'true' for bool
This allows fulcrum to work with this old API method.
2020-01-13 23:23:49 +01:00
TomZ 58299fcd70 Add 'initialblockdownload' bool to RPC getbclockchaininfo 2020-01-13 17:42:50 +01:00
TomZ 2e3f59716f Add claimOrphan() 2020-01-13 11:27:47 +01:00
TomZ 6e6f43a0d4 Remember peerID in DSP-orphanage
So when we adopt one proof, and it turns out to be faulty, we can
punish the peer.
2020-01-12 18:06:23 +01:00
TomZ 071629852a Treat DSP orphans with dignity
This improves the double spend proof orphans code.
Also add a DSProof log-category and lots of log lines to make
looking at a debug build much more fun.
2020-01-12 17:41:53 +01:00
TomZ d6a2488b5c Cleanup some DSP issues
remove the need for 'flags' as this code block doesn't use the
current flags at all.

Also validate proofs that were restored from orphan cache.
2020-01-12 17:10:29 +01:00
TomZ 2b68d149de Cleanups 2020-01-05 16:47:49 +01:00
TomZ 06535153b0 Remove unused argument. 2020-01-04 15:25:15 +01:00
TomZ a305edcafe Fix some compiler warnings. 2020-01-04 14:00:17 +01:00
TomZ 83b7243b70 Prepare for the 2020.01 release
From now on, make sure that the minor always has at least 2 digits
which allows us to use string compare of versions even if we have
more than 9 releases in a year.
2019-12-31 18:05:24 +01:00
TomZ 95646682b3 Use hex for the client minor number.
This makes string comparisons much easier (a > 9, while 10 < 9).
2019-12-12 17:34:14 +01:00
TomZ 7a360f5a3d slight logging updates 2019-12-09 15:15:52 +01:00
TomZ e070acec39 Update checkpoints. 2019-12-01 21:33:18 +01:00
TomZ 1e04e01983 Make big reorgs work better (mostly testnet) 2019-12-01 21:04:43 +01:00
TomZ d988400be6 fix typo 2019-12-01 21:04:24 +01:00
TomZ 88cb02617a Merge branch '2019.09' 2019-12-01 15:12:44 +01:00
TomZ 63294beed5 Fix deadlock on calling chain::FindFork 2019-12-01 15:11:05 +01:00
TomZ ac85f525f3 Lower debug level of 'tx validation failed' message. 2019-12-01 14:49:38 +01:00
TomZ 42aaf08e6b Fixlet in comments grammar. 2019-11-25 23:23:00 +01:00
TomZ c094c8d523 Merge branch '2019.09' 2019-11-22 19:24:13 +01:00
TomZ abdefac590 Fix handling a tx spending an out-of-range output
Those should not be stored in the orphan cache, as the data is just
wrong. Not missing.
So also punish the sender, it won't ever be valid.
2019-11-22 19:23:57 +01:00
TomZ 79437d227e Avoid forwarding transactions twice.
An INV in some cases could lead us to reply with two transactions
instead of one.
2019-11-22 19:14:32 +01:00
TomZ 69ea2ddfcd Make whitelisted peers not get punished for bad transactions. 2019-11-22 18:58:58 +01:00
TomZ d86c5a837f Make orphancache follow coding style-guide.
member methods start with a lowercase character.
2019-11-21 20:03:26 +01:00
TomZ c1671c707e Merge branch '2019.09' 2019-11-15 21:07:25 +01:00
TomZ adec1ef3b2 Make rpc-cookie reuse existing cookie files.
This allows external software to create it and manage the cookie which
is useful in a cloud setting.
2019-11-15 19:15:22 +01:00
TomZ f77589b7d3 Whitespace and minor issues. 2019-11-15 18:59:55 +01:00
TomZ 9d77814cc0 cleanups and splits
The recent introduction of helper methods on pubkey.h had the
side-effect of pulling in crypto libraries.
This splits the static methods into a separate namespace and file
to avoid such cross-module dependencies.
2019-11-13 19:09:24 +01:00
TomZ 175096b2bd Refactor: move files
Move some files back to the server "library".
Merge the 'console' lib with server, as it doesn't really make sense with
just one file and nobody exclusively linking to it.

The server "libary" is not really a library, its the place we put all
the files shared by hub-qt hub-cli and hub.
We no longer depend on these files from other places (mostly due to
moving to the new logging framework) and as such we can move the files
back.
2019-11-13 19:09:24 +01:00
TomZ d573e307c3 Refactor; move SplitHostPort to utilstrencodings 2019-11-12 15:35:54 +01:00
TomZ a645f963dc Make node ignore tx-invs during IBD/catch-up
This now also works when using '-connect' or other ways to whitelist a
node.
2019-11-06 23:43:13 +01:00