Commit Graph

931 Commits

Author SHA1 Message Date
tomFlowee 0eea8e5231 Add RPC call validateblocktemplate 2020-12-18 15:35:45 +01:00
tomFlowee 51153cbf11 Log improvement
Make sure we log by default about each interface the API listens on.
2020-12-17 09:49:53 +01:00
tomFlowee ba5689a4f4 fix BIP37 processing for non-topologically ordered blocks
Summary:
CMerkleBlock::CMerkleBlock called IsRelevantAndUpdate() on each transaction
in order, which (due to the outpoint-adding feature) assumes a topological
order of transactions in order to work correctly. If an outpoint of
interest were created later in a block than when gets spent, then it would
be added into the bloom filter too late, and thus that spending transaction
would get missed.

This changes CMerkleBlock::CMerkleBlock to scan all outputs first, then
make a second loop to scan all inputs. This requires breaking up the
IsRelevantAndUpdate() function into two parts. The original
IsRelevantAndUpdate() functionality remains fully intact however, as it
gets called from mempool-related code (mempool has topological order) and
tests.

Note that vMatchedTxn.push_back is moved into the second loop so that index
i keeps ascending order, in case that is somehow relevant. (the tests at
least do check this)

A two-loop construction like this will very slightly increase the false
positive rate.

Originally by: Mark Lundeberg
2020-12-17 09:49:15 +01:00
tomFlowee 8e44b058af Add flags getter 2020-12-17 09:08:34 +01:00
tomFlowee 42bbe20cac Change place to look for logs.conf
First search for the logs.conf in the same dir as the -conf file.
2020-12-07 17:35:41 +01:00
tomFlowee 6195f84068 Print IP since peer-ID is useless before handshake 2020-12-07 17:35:10 +01:00
TomZ 9f0a75839a Process static checks warnings 2020-12-06 13:18:08 +01:00
TomZ 0fda43974d Make log line a little more clear 2020-12-06 13:17:24 +01:00
TomZ b0cf4104b1 Merge branch '2020.07' 2020-11-23 14:17:42 +01:00
TomZ d430a4be8a Update all usages of boost create_directories
The API throws when the directories already exist, which is quite
unexpected.
This now changes the code to silently ignore these issues in the
knowledge that the immediately following opening of files will
fail with a nice error message.
2020-11-23 14:09:00 +01:00
TomZ 617fc9afb6 Make API clearer: add UserTag1 - 3
Users are allowed to put (almost) anything in the header and we parrot
it back to them, this API makes it clearer which ones are available for
users.
2020-11-21 12:20:05 +01:00
TomZ 251cc76966 Avoid banning a whitelisted peer on bad headers. 2020-11-18 22:40:46 +01:00
TomZ 27e507cba0 Test and fix reconsiderBlock
This adds a unit test to see if the combination of invalidateBlock and
reconsiderBlock do what we expect to do.

The main issue was that we store an invalidated block in the UTXO and we
forgot to re-validate that on reconsider.

Additionally I avoid writing a lot of unchanged data to the block-index.
2020-11-18 22:08:00 +01:00
TomZ 700c2b59d6 Make controlling blockchain not hidden.
This stops hiding the reconsiderblock and invalidateblock RPC calls.
2020-11-18 16:40:11 +01:00
TomZ d2959dc4c1 Be smarter on reconsiderblock for headers 2020-11-17 23:40:29 +01:00
TomZ 6f2584f14d Fix off-by-one
The test was on the pprev, so we need a +1
2020-11-17 23:11:05 +01:00
TomZ 262706cf8e Make loading faulty data more robust
Instead of an assert when we encouter faulty data this moves the error
up the stack and allows for rollback.
2020-11-17 20:59:11 +01:00
TomZ 477a536e25 [UTXO] UnitTest rollback-to-checkpoint code 2020-11-17 20:57:32 +01:00
TomZ 089145a3a6 Delete copy constructor 2020-11-17 16:04:45 +01:00
TomZ 3343b7a2b2 Share binding code with bitcore-proxy
Additionally, support optional port argument.
2020-11-16 23:09:17 +01:00
TomZ 960e3afeb2 Redo binding logic in all Qt
Avoid conversion to and from boost and this solves the issue of trying
to listen to multiple interfaces not working very well.
2020-11-16 22:45:46 +01:00
TomZ bdcf8ad45c Show version in the start message
This is used by various apps, like indexer. They will now display
something like:

Flowee indexer starting. Version: 2020-7.0 (v1)
2020-11-16 18:59:25 +01:00
TomZ dad1a0e0c0 Hardcode blockheight for DAA PU
Now the protocol upgrade went smooth, we take the effective details
and hardcode the blockheight for each chain we support.
2020-11-16 15:32:28 +01:00
TomZ 93148976e9 add the checkpoint to p2pnet 2020-11-15 15:27:32 +01:00
TomZ 37e1f2fcd3 Fix bad usage of create_directories() 2020-11-14 23:59:01 +01:00
TomZ 2b7ae939cf Simplify the syncchain action. 2020-11-13 21:03:56 +01:00
TomZ 301a4ca3ee Fix properly following the chain-tip
This is done in several steps:

1. Separate my height from the remote peer heights.
Instead of assuming we have one height, recognize that a peer may
not be at the tip at the same time we are. We monitor headers/invs
to update the 'peerHeight' variable.

2. Ask for merkle blocks from a peer to the maximum height of that
peer (but not later than what we validated to be true).
This avoids us asking past the remotes tip which they didn't like.

3. Redo the SyncSPVAction to use all this and make it much more
reliable in finding peers to download from and getting all the
changes as fast as possible.
2020-11-13 21:03:56 +01:00
TomZ 5fa1b50fa1 Remove duplicate 2020-11-13 20:09:29 +01:00
TomZ 370b374431 Avoid uninitialized data 2020-11-12 19:03:35 +01:00
TomZ 449e84338c Catch more errors while removing the 'unspent' dir content.
We now handle various more corner cases when preparing the unspent dir
for reindexing.
2020-11-10 22:38:50 +01:00
TomZ 9128660272 Fix the hardcoded number for different LANG
atof uses locales, so lets drop the decimals.
2020-11-10 22:18:53 +01:00
TomZ a966ffb129 Remove the hardcoded max message size.
We already had in place the blockSizeAcceptLimit as the limit
on messages, which is now the only limit.

In practice this means when the operator sets the maximum mining
size that we adjust the blockSizeAcceptLimit, if they only set the
blockSizeAcceptLimit, we use that (plus a margin) to limit messages
both on the p2p layer and on the RPC (JSON) layer we change the
limit to be twice the blockSizeAcceptLimit (copied those numbers
from BCHN).
2020-11-10 18:33:07 +01:00
TomZ 36a0bb10f2 Improve log info. 2020-11-10 17:28:40 +01:00
TomZ 8c15b5942f Make scalenet easier to use
This adds a parameter interaction. Starting scalenet sets the
maxblocksize (mining) and blocksizeAcceptLimit to be 250MiB.
2020-11-10 17:25:56 +01:00
TomZ 0556bc56d1 Fix bugs in SPV sync behavior. 2020-11-09 18:38:38 +01:00
TomZ d2869ef06b Fix bug where we'd ban perfectly good peers
Due to misdetection of stalling the download.
2020-11-07 15:03:27 +01:00
TomZ afd33b2ee0 API docs 2020-11-05 22:06:41 +01:00
TomZ 5e48d0dae7 Be smarter about when to ask for headers.
This avoids us asking a bunch of peers the headers while we are not yet
at the tip.
2020-11-05 21:54:33 +01:00
TomZ 062f62af67 Bugfixes 2020-11-05 21:49:32 +01:00
TomZ e8a2996c84 Persist succesful 'headers' call.
This fixes the issue that a headers call did not get remembered when we
were up-to-date.
2020-11-05 21:48:57 +01:00
TomZ 781805d6a9 Less waiting while finding proper peers 2020-11-05 21:47:54 +01:00
TomZ 9397ab54e6 Accept less peers for non-mainnet chains. 2020-11-05 17:42:51 +01:00
TomZ 599ef31340 Add API docs. 2020-11-05 16:56:14 +01:00
TomZ ae58d68058 Fix loop never increasing. 2020-11-05 16:56:02 +01:00
TomZ 8e2e343695 Fix out-of-range
This makes the fetching of DNS based entries work much better and
actively avoids an off-by-one issue when accessing the vector.
2020-11-05 16:55:38 +01:00
TomZ a337c6b6b5 Use consistent variable typing.
Use uint8 and friends instead.
2020-10-31 19:51:04 +01:00
TomZ 8796dc4b7d Add support for testnet addresses
Notice that we only use 2 type of base58 prefixes, mainnet and everything
else. So this support all worthless chains.
2020-10-30 18:08:09 +01:00
TomZ f7729fd08d Update chainparams for the scalenet. 2020-10-30 15:39:56 +01:00
TomZ 376fe9dc86 On startup, start downloading headers
In most cases headers would be automatically downloaded if we didn't
connect to that peer for a while, but that is not a guarentee so lets
make sure we actually start downloading headers from any peer we can :)
2020-10-29 22:18:10 +01:00
TomZ 3f5fe41534 P2PNet: Support multiple chains.
This adds support for the testnet4 chain.
2020-10-29 21:47:53 +01:00