Clean up banning levels
Summary:
Compared with previous bans, the following changes are made:
- Txn with empty vin/vout or null prevouts move from 10 DoS points to 100.
- Loose transactions with a dependency loop now result in a ban instead of 10 DoS points.
- Many pre-segwit soft-fork errors now result in a ban. Note: Transactions that violate soft-fork script flags since P2SH do not generally result in a ban. Also, banning behavior for invalid blocks is dependent on whether the node is validating with multiple script check threads, due to a long- standing bug. That inconsistency is still present after this commit.
- Proof of work failure moves from 50 DoS points to a ban.
- Blocks with timestamps under MTP now result in a ban, blocks too far in the future continue to *not* result in a ban.
- Inclusion of non-final transactions in a block now results in a ban instead of 10 DoS points.
Co-authored-by: Anthony Towns <aj@erisian.com.au>
This is a partial backport of Core PR15141 : https://github.com/bitcoin/bitcoin/pull/15141/commits/7b999103e21509e1c2dec10f68e48744ffe90f55
Depends on D6684
Test Plan:
ninja all check-all
Reviewers: #bitcoin_abc, Fabien
Reviewed By: #bitcoin_abc, Fabien
Differential Revision: https://reviews.bitcoinabc.org/D6685