Commit Graph

12581 Commits

Author SHA1 Message Date
tomFlowee 3becd7aa45 Remove unused log sections and code
Decentralized all things!

But, really, don't put the logging sections for external apps in the
library code.
2023-04-04 15:47:25 +02:00
tomFlowee 508a03139e Simplify the API
This removes a premature optimization where we avoid hashing the header
in the small case that the interface doesn't actually find any useful
transactions in the block.
It hurts others calling this API, though, as they suddenly need access
to the full header instead of just the blockId.
2023-04-04 13:38:51 +02:00
tomFlowee 91d6328eca Fix possibley sync issues. 2023-04-01 22:59:34 +02:00
tomFlowee 5517bb1c8b Add comment. 2023-04-01 22:58:41 +02:00
tomFlowee 805c2d9893 Split out the too-big logging section 'p2pnet'.
This introduces the spv-sync debug section as a child of the p2p lib
logging section.
2023-04-01 22:58:11 +02:00
tomFlowee 764a022b55 Swap debug output for more logical reading. 2023-04-01 22:54:43 +02:00
tomFlowee bff0b1df21 Fix in restart location.
Make sure we continue to the tip as fast as possible (no duplicates) on
sleep or otherwise losing a peer.
2023-04-01 22:54:43 +02:00
tomFlowee 1d309cd7ae P2PNet: re-do SVP's bloom filter and mempool.
Every peer that we connect to should get the bloom filter set and it
should also get the 'mempool' call sent once which will make that peer
respond with all matches of the bloom filters which are in the mempool.

The tricky part is that we should have the latest bloom filter set on
each of those peers before the mempool is sent, since they work
together.
Also if we are behind, the mempool should not be sent. (It can cause
problems in the wallet if we receive unconfirmed transactions before
mined transactions)

So, when a peer starts downloading merkle blocks, the bloom filter of all
the other peers becomes invalid the moment a match is found by an actual
wallet.
This is Ok on one peer because the merkleblock automatically updates the
filter on match on the server side, but obviously not on the other peers
we have for that wallet.

The approach we follow is that as soon as a sync-run is done on a single
peer (we do a main and also a backup sync), we tell the wallet to re-
build its bloom filter for _all_ peers and if the sync that peer did
leads us to be at the chain-tip, we also send each peer the mempool
command.
2023-04-01 22:54:35 +02:00
tomFlowee 2c0e0bad75 Update SyncChainAction to present day concepts
When the SyncChainAction was written, various interactions we do
today in the ConnectionManager did not happen yet. Features in
Peer didn't exist yet.

This updates the SyncChainAction to take those items into account
and be more responsive and conclue we are 'up to date' faster,
while also leaving behind a better state.
2023-03-27 15:20:50 +02:00
tomFlowee aa6f0676a3 Docs improvements. Mostly API docs 2023-03-27 15:19:05 +02:00
tomFlowee 2322456465 Add thread-safety for the deque too.
A list of weak-pointers itself is not directly thread-safe, the list
itself needs to be synched too.
2023-03-27 15:17:56 +02:00
tomFlowee 5374a50712 Minor cleanups. 2023-03-27 15:16:54 +02:00
tomFlowee 79ea54183e fixes in comments. 2023-03-25 17:26:24 +01:00
tomFlowee 7b6f67cd52 Update the README to acknowledge the new build option 2023-03-20 19:59:10 +01:00
tomFlowee 038e7bc0a5 Add new CMake option 'build_apps'.
To enable this means the buildsystem will build all the applications
as well as the libraries.
Applications are 'hub' / 'txVulcano' / 'indexer' etc.
Default this one is turned off.
2023-03-20 19:50:32 +01:00
tomFlowee 6634938358 new version 2023.02.1 2023-02-25 19:42:44 +01:00
tomFlowee 6002803fa4 Add more bannable messages.
Alert:
This has been sunset so long ago, no complient BCH client will (/can) use it.

Protoconf:
This looks like its a BSV message.
2023-02-25 19:38:06 +01:00
tomFlowee 18fed67872 Use known not-bch p2p messages to disconnect
When we receive a known message (currently just avahello) we now
intantly ban and disconnect the peer, no need to
test compliance when they openly greet us saying they are not following
the same chain.
2023-02-25 12:02:19 +01:00
tomFlowee 3fd358be4d Don't ask for addresses from all peers
Make sure we only ask a peer that we know is on our chain.
2023-02-25 11:05:13 +01:00
tomFlowee c6d5bd6336 API Doc addition. 2023-02-25 11:04:19 +01:00
tomFlowee 8866878354 new Qt version 2023-02-24 19:43:50 +01:00
tomFlowee 70e4f2292e Refactor the SPV merkleblock/mempool sending
Tuesdays idea of adding some code into the SyncSPVAction didn't feel
right.
A second look made clear that bloom filter updates make much more sense
to go hand in hand with sending a mempool message. Especially since they
depend on each other on the server side.

To-rehash:
the wallet may decide at any time that a new bloom filter is needed. It
then uses the superclass (code in p2plib) PrivacySegment, to build that
filter. As part of that we get a lock object which, when going out of
scope, makes the peers that are subscribed to the privacySegment send
out the filter.

This separation of concerns means that the subclass wallet in the app
doens't know about peers or messages, only its superclass PrivacySegment
does.

What we did in this change is make the PrivacySegment class decide to
combine a bloom update with a mempool call. Typicall only once per
connection.

This means I can remove hacks in the SyncSPVAction which forced the
sending of the mempool message separately.
2023-02-24 19:41:42 +01:00
tomFlowee ca58fbad98 Change job-description: ensure connections are made
The job description of this component is to sync a wallet. Its means to
that end is to connect to peers.

Problem is that when we startup and the whole system is already in-sync,
then we forget to connect to peers. (that wasn't in the job description,
it just happened to be done as a sideeffect).

This changes the SyncSPVAction's job description to also make sure that
each wallet has the required number of peers.
2023-02-23 22:40:40 +01:00
tomFlowee 81d754a03a Merge branch 'master' of codeberg:thehub 2023-02-22 10:50:21 +01:00
tomFlowee 009e26cb66 New version 2023-02-21 20:32:48 +01:00
tomFlowee af3618f473 Send 'mempool' to all peers
We send a 'mempool' p2p command to a peer after we did a series of
merkleblock downloads.
This code adds the mempool p2p command to be sent to peers that didn't
participate in the merkleblock download and thus get the best out of all
our connected peers.
2023-02-21 20:29:26 +01:00
tomFlowee 9e097c84b3 Upgrade deprecated 2023-02-21 14:16:43 +01:00
tomFlowee d2fa084109 Add some comments. 2023-02-20 18:16:58 +01:00
tomFlowee 67e5aaee81 Count disabled peers on load. 2023-02-20 18:15:22 +01:00
tomFlowee b702227cc4 stop using deprecated API 2023-02-13 10:38:17 +01:00
tomFlowee f7b25282a0 Add missing include statements 2023-02-06 18:10:03 +01:00
tomFlowee 3a9a45b6af Update copyright year 2023-02-05 22:40:22 +01:00
tomFlowee 6951a9f13a Add missing reserve() call 2023-01-31 20:29:51 +01:00
tomFlowee 004f957540 Revisit listener interfaces.
Now we have 3 more logically divided interfaces for the listener
pattern (callbacks).

A P2PNetInterface for peers maintainance.
A DataListenerInterface for the sections getting new data.
And last the new  HeaderSyncInterface about the state of the
header-chain (application wide).
2023-01-31 20:29:51 +01:00
tomFlowee 25477cdfa1 Add API docs. 2023-01-31 16:35:29 +01:00
tomFlowee 4f40e861f1 Remove not optional = nullptr. 2023-01-31 16:06:25 +01:00
tomFlowee 1d75226cd6 Add comments 2023-01-30 17:10:12 +01:00
tomFlowee c31ceb3c84 Add docs 2023-01-30 17:10:02 +01:00
tomFlowee e1786e0d7c Fixlet in detecting the native build 2023-01-16 11:37:03 +01:00
tomFlowee a711c38a77 Don't connect when the reconnect is underway
Avoid massive connect storm.
Using the network manager based logger we got into a fun situation where
logging to a remote host caused us to connect and fail, which caused us
to log this failed which made us try to connect and .. etc.
2022-12-20 15:32:58 +01:00
tomFlowee 68d24689a1 Modernize Qt detection code 2022-12-14 18:04:22 +01:00
tomFlowee 33986dea77 Update build-android after moving of 3rdparty libs
The main effect is we no longer build some stuff that wasn't used
anyway, so this is faster and less maintainance.
2022-12-13 11:38:59 +01:00
tomFlowee b5b493542b Rework base58 and tests
The unit tests testing base58 encoding were using univalue JSON
parsing, since we deprecatd univalue to be a hub-private lib
this has now been ported to Qts JSON parser.
Which also makes the clunky cmake hack nice to replace with the
QRC files concept.

As I was in there anyway, the base58 methods being global scope
C-style methods has now been fixed by putting them in a namespace.
2022-12-13 11:34:54 +01:00
tomFlowee 7b29af9c19 Port base58_tests from boost to QTestLib 2022-12-13 11:34:54 +01:00
tomFlowee e9563bdad0 Move univalue tests to belong to the hub tests.
As this is not actually used outside of the Hub, it really makes
more sense to make this testing part of the hub testing.
Also makes it easier to compile.
2022-12-13 11:34:54 +01:00
tomFlowee c63519fa47 Move 3rdparty libraries around.
The leveldb and univalue 3rd party libraries are not installed and
not needed by anyone outside of the Hub.
So move them there, making it easier for 3rd party usage.
2022-12-13 11:34:54 +01:00
tomFlowee 6cb5a3fe05 Update version 2022-12-08 14:19:51 +01:00
tomFlowee 7163605b00 Make sure login messages are sent first
When the client sent a message in the onConnected callback, it managed
to get in front of the login message. This fixes that.
2022-12-03 23:30:01 +01:00
tomFlowee 084aa4090f Cleanup and make nicer, cross-compile to Android.
This brings the developer experience in line with the one in Pay
and we avoid needing a path set to run the self-build executables
from.
2022-11-28 16:09:48 +01:00
tomFlowee 6de770466b Avoid possible references-of-deleted
This sanity check might avoid issues in future code by not assuming a
log channel (or anything it depends on) will avoid using logging at the
moment it is shutting down.
2022-11-25 14:01:05 +01:00