Commit Graph

353 Commits

Author SHA1 Message Date
TomZ fcc3b094ef [API] Improve featureset of MempoolSearch
The mempool search now shares its serialization code with the blockchain
transaction fetcher, allowing all the filtering and include flags to work
here too.
This also fixes several bugs and reverts the mempool API change.
Additionally I return the FirstSeenTime for each mempool entry.

There is a slight API breakage in the LiveTransactions service, which as
far as I know is still unused outside of Flowee.
These enum values changed:
Api::LiveTransactions::
  Transaction   20 =>  25
  UnspentState  23 => 26
  OutputScript  24 => 23

The reason for this change is to have the Blockchain namespace in
sync with the LiveTransactions namespace for similar features.
2020-09-14 15:27:15 +02:00
TomZ 88028c3c77 Make flags be initialized faster
This fixes a regression which caused the hub on startup to not get any
validation flags until a new block was added to the chain.
2020-09-11 18:54:21 +02:00
TomZ 6fb9310007 Avoid work
When a block header is rejected before it has been added to the header-
chain, we don't have to update the header-chain.
2020-09-11 18:54:21 +02:00
TomZ db9a80f8eb [API] Add support to query the mempool
This allows a search based on TxId or output-script-hash for
mempool transactions.
We include double spend proof info when available in the reply
2020-09-11 14:07:14 +02:00
TomZ 7e59d0c242 Remove loud log message 2020-08-16 14:53:13 +02:00
TomZ acd142a0e6 Fix logic wrt signed/unsigned
The typedef was an unsigned type, and comparisons failed.
2020-08-16 12:22:00 +02:00
TomZ 679374e923 Revert chain-switching idea
It becomes messy due to the usage of the compact form on block headers.
2020-08-16 12:03:19 +02:00
TomZ ac6b4934f2 Fix off-by-one in isStandard
Our max tx size has always been 100KB, the implementation rejected 100KB
and above, though.
This follows the major clients doing ths same.
2020-08-16 12:03:12 +02:00
TomZ 750bd23b27 Work around badly picked default variable value.
A not yet saved file has file-index zero, which is valid...
Also check this state and allow deletion of rev zero.
2020-08-13 18:28:43 +02:00
TomZ 59c468decf We now check if a revert file has become useless and delete it
If we are past at least 2000 blocks of the items stored in a data file we
can delete the revert file and save a couple hundred megabytes of
on-disk storage for every blk file.
2020-08-13 13:32:01 +02:00
TomZ 90988c80a9 Fix reindex sometimes taking forever on a block file. 2020-08-13 11:45:02 +02:00
TomZ 84ebae427e Import ASERT DAA
This includes renaming some methods which makes the import look larger
than it really is.
2020-08-12 21:42:54 +02:00
TomZ 337b34ea8e Update error message
We seem to be having a LOT of p2sh double spends on mainnet today,
which caused confusion with people reading the logs.
This clarifies that the current version only supports p2pkh and we
need more research to support others too.
2020-08-10 10:13:02 +02:00
TomZ d2802474c5 Add bchd testnet seeds 2020-08-10 10:13:02 +02:00
TomZ c4d5304d52 Make findOrphans() method const 2020-08-10 10:13:02 +02:00
TomZ 297a22dfa8 Move and fix partitionCheck()
Small refactor; move the partition check away from main and the obsolete
global variables we used to use, instead now just add it to the DB which
owns the data it works on.

This fixes the bug that in various cases we'd incorrectly get a warning
about no blocks being found in the last N hours.
2020-08-10 10:13:02 +02:00
TomZ 513bde1f7a Avoid unneeded check 2020-07-23 14:46:15 +02:00
TomZ fa18524d77 Update URL to ref-doc. 2020-06-08 18:05:05 +02:00
TomZ 5dce540238 Make clang happy; override 2020-05-27 12:14:15 +02:00
TomZ 60f1864b74 API review. Use isClosingDown() 2020-05-21 19:33:13 +02:00
TomZ b89d117475 Add checkpoints after latest protcol upgrade 2020-05-15 17:14:46 +02:00
TomZ 3c01d382d0 Merge branch '2020.03' 2020-05-15 15:45:06 +02:00
TomZ 21f519190d Fix copy/paste issue 2020-05-15 15:13:52 +02:00
TomZ 991da54d3c List our own seeder too 2020-05-06 10:39:47 +02:00
TomZ b51d15e3c5 Add some more comments and sanity checks 2020-05-03 19:52:44 +02:00
TomZ 2f7f7cec4c Nicely initialize the variable every loop 2020-04-24 10:41:55 +02:00
TomZ 3f08053db3 Fix compile
In case the BENCHMARK feature is enabled (by removing the comment in the
private header) this would fail to compile due to a refactor some time
ago.
2020-04-13 15:57:42 +02:00
TomZ 2aa462f8bb Replace SigOps with SigChecks
This is part of the protocol upgrade for 2020-05-15, and in general it
seems to go the direction of "we did this before, lets do this again".

The spec is clear enough, but there is still a lack of questioning and
testing. The problem this attempts to fix has been neutered for years[1].

The spec states:
> The essential idea of SigChecks is to perform counting solely in the
> spending transaction, and count actual executed signature check
> operations.

This, however nobel and logical, ignores that the
check-for-being-too-costly just pulled in a UTXO lookup and the loading
of the output script from the historical chain.
The goal that we protect against CPU over-use may be reached, but the
price is a total system slowdown. You can have multiple CPUs, but the
bus to permanent storage has one, max 2 parallel pipes.

To ensure theHub stays the number one scalable node, I didn't blindly
follow the spec, while making sure that the Hub is correctly going to
follow/reject consensus violations of newly mined blocks.

As a result the implementation in Flowee the Hub:

* does not check sigcheck-counts on historical blocks (more than 1000
  blocks in the past).

  This may increase the risk of chain-splits ever so slightly, but the cost
  of disk-IO would be too high.

* No longer stores the value in the mempool, nor uses it for the
  CPU-miner.

* Ties the sigcheck-limits to the user-set block-size-accept-limit.

  This is contrary to the spec which mistakenly thinks that BCH has a
  max block-size in the consensus rules. The effect is the same, though.

* The per-intput standardness suggestion is not implemented because
  standardness checks don't currently fetch the previous outputs and
  that would be too expensive to add.

* Standardness rules for the whole transaction are moved to the
  mempool-acceptance logic instead. The cost would be too great
  otherwise, similar to the previous point.
  Again, the effect is the same as likely intented.

---
1) since the intro of the CachingTransactionSignatureChecker
2020-04-13 15:57:42 +02:00
TomZ 0386f38cc1 Inline CScriptCheck
It was only called twice, and in very close proximity. The class didn't
add anything.
This improves readability and with the new state its easier to write
too.
2020-04-13 13:44:18 +02:00
TomZ 916cb9b5d7 Start sigCheck implementation; actually count them.
Update Script::State to add a sigCheckCount counter.
2020-04-12 18:08:51 +02:00
TomZ e101591f1a Refactor ScriptEval/ScriptVerify calls
Feeling cute, may update this API later.

namespace Script {
struct State {
    State() = default;
    State(uint32_t flags) : flags(flags) {}
    uint32_t flags = SCRIPT_VERIFY_NONE; // validation flags
    ScriptError error = SCRIPT_ERR_OK;

    const char* errorString() const;
};

bool eval(std::vector<std::vector<unsigned char> > &stack, const CScript
    &script, const BaseSignatureChecker checker, Script::State &state);
bool verify(const CScript& scriptSig, const CScript& scriptPubKey, const
    BaseSignatureChecker& checker, Script::State &state);
bool checkTransactionSignatureEncoding(const std::vector<unsigned char>
    &vchSig, State &state);
}

More of the same.
2020-04-12 18:08:09 +02:00
TomZ 1882bed839 remove dead code 2020-04-11 17:05:39 +02:00
TomZ 9195ad96e1 Add May Protocol Upgrade activation code 2020-04-10 17:28:02 +02:00
TomZ 414bee9e9f Implementation of OP_REVERSEBYTES
Previously named OP_REVERSE, then OP_BSWAP, then OP_ENDIAN_REVERSE.
2020-04-10 15:17:18 +02:00
TomZ 4733554817 Make bloom class more modern
This follows the coding style (method naming) better and it adds
an insert method which uses a Streaming::ConstBuffer argument.
2020-04-10 12:21:49 +02:00
TomZ fcdb52d5aa Make leveldb build with cmake
As this now means we completely use cmake, remove some legacy
stuff as well.
2020-04-08 22:48:29 +02:00
TomZ e8028035a1 make univalue build using cmake 2020-04-08 22:48:29 +02:00
TomZ 1144f013a4 Build secp256k1 with cmake 2020-04-08 22:48:29 +02:00
TomZ ba76c35a7d Move merkle to flowee_utils libs
Merkle-block and merkle-tree classes and methods are pretty much stand-
alone and can be moved with no efforts.

Also move the relevent unit test to qtestlib.
2020-04-01 22:53:07 +02:00
TomZ 9276a45faf Move bloom filters to flowee_utils lib
Also move its unit test from the boost to qtestlib
2020-04-01 22:24:26 +02:00
TomZ 655d9fecb9 Port a log-line. 2020-04-01 20:24:08 +02:00
TomZ 40cad6112c Pass by reference 2020-04-01 20:22:55 +02:00
TomZ 0c15e877a2 Move arith_uint256 from server to utils lib 2020-04-01 20:22:55 +02:00
TomZ 22e2f3ca7c Make p2p version message mandatory
This was always the intention, but the satoshi code was stupid and buggy.
First, the 'version has been seen' flag was set even if there was a parsing
error in it.
Second, ignoring messages (up to 100) until a version message was seen
makes no sense. Just disconnect instantly.
2020-03-29 12:55:12 +02:00
TomZ 7b1b742036 Remove workaround for old boost version
The API changes in boost between 1.66 and later was the need
for the boost_compat.h header file.
Its been a long time since Flowee started demanding 1.67 minimum
for boost, making this compat obsolete.
2020-03-29 12:55:12 +02:00
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