Newly introduced DoS



Summary:

The context is about a transaction with a "non-standard" signature operation count that is allowed in blocks but not accepted by the mainline rules. The reason for disallowing transactions with more than one SigOp per 34 bytes is to avoid denial-of-service attacks, as checking ECDSA signatures is a CPU bottleneck. If the GetSigOpCount() exceeds nSize / 34 or nSize < GetLegacySigOpCount(), then the DoS code kicks in and kicks either the sender or receiver off the network. An attacker could use these things to get nodes to ban each other. If someone spends a transaction after it has matured beyond 100 confirmations, while you only see 99, it implies that you're on a blockchain fork of more than 99 blocks with respect to the person spending the transaction. This would indicate bigger problems, and the DoS code should kick in to prevent further damage.


Updated on: 2023-06-04T20:06:42.724950+00:00