-
Notifications
You must be signed in to change notification settings - Fork 174
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
consensus: Reimplement checkpoint-based spam protection #2084
consensus: Reimplement checkpoint-based spam protection #2084
Conversation
This ensures that the chainparams interface will never fail when fetching the first or last checkpoint from the map.
This removes the Checkpoints::GetTotalBlocksEstimate() function in favor of CCheckpointData::GetHeight() to match Bitcoin and prepare for a codebase upgrade. The new function should run a bit faster.
Commit c949a02 removed broadcasted checkpoints and reimplemented Checkpoints::CheckSync() for hardened checkpoints. However, the change did not apply the validation again for received blocks. This reimplements the validation using a similar strategy for nodes that finished the initial sync. With this change, nodes will refuse blocks that connect to a height below the highest checkpoint.
Unfortunately, this isn't really effective for the orphan block problem. It takes too long for forked nodes to reach a state where they advertise a block that triggers the rule (hours, if ever). Besides that, the changes appear to behave as expected on my listening node and don't interfere with normal operation. |
So do we just want to close this then? |
The validation rule is still a useful mitigation for some types of spam. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
utACK
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
utACK
Added - doc: Invite users to donate to Gridcoin Foundation gridcoin-community#1997 (@smoe) - rpc: Add "getburnreport" RPC function gridcoin-community#2049 (@cyrossignol) - doc: Add undocumented "-showorphans" GUI option to help text gridcoin-community#2058 (@cyrossignol) - beacon: Cull beacon db memory (passivation) gridcoin-community#2069 (@jamescowens) - gui: Avoid refreshing GUI researcher status while out-of-sync gridcoin-community#2068 (@cyrossignol) - consensus: Reimplement checkpoint-based spam protection gridcoin-community#2084 (@cyrossignol) - consensus: Verify hardened checkpoints on start up gridcoin-community#2087 (@cyrossignol) Changed - gui: Clarify overview page "stake" field gridcoin-community#2056 (@cyrossignol) - doc: Update Copyright headers gridcoin-community#2059 (@barton2526) - gui: Update Qt Linguist localization files gridcoin-community#2063 (@cyrossignol) - build: update dependencies gridcoin-community#2064 (@barton2526) - net: Reduce default connection limit back to 125 gridcoin-community#2066 (@cyrossignol) - build: openssl patch gridcoin-community#2074 (@barton2526) - translation: Translate /src/qt/locale/bitcoin_en.ts in pt_PT gridcoin-community#2083 (@DjMVeiga) - log: Adjust logging gridcoin-community#2076 (@jamescowens) - gui: Change scraper tab to Inconsolata monospace font gridcoin-community#2085 (@jamescowens) - researcher: Change beacon deferment fix to reference nActiveBeforeSB gridcoin-community#2092 (@jamescowens) Removed - net: Clean up mandatory protocol version transition gridcoin-community#2080 (@cyrossignol) - refactor: Remove LessVerbose() function gridcoin-community#2089 (@cyrossignol) Fixed - beacon: Fix a subtle error in renewal chain walker gridcoin-community#2054 (@jamescowens) - researcher: Fix "malformed CPID" status for some pool projects gridcoin-community#2052 (@cyrossignol) - lint: Misc Typos gridcoin-community#2060 (@barton2526) - lint: remove identified duplicate includes gridcoin-community#2061 (@barton2526) - gui: Fix splash screen block height progress gridcoin-community#2057 (@cyrossignol) - gui: Fix garbage placeholders in some tx notification localizations gridcoin-community#2070 (@cyrossignol) - build: Patch libzip to fix mingw compile regression for mingw 9.2+ gridcoin-community#2082 (@jamescowens) - gui: Fix shutdown response for failed core init gridcoin-community#2088 (@cyrossignol) - researcher: Fix deferment of beacon renewal in superblock window gridcoin-community#2090 (@cyrossignol) - gui: Fix typo in beacon status refresh gridcoin-community#2091 (@div72)
Added - doc: Invite users to donate to Gridcoin Foundation gridcoin-community#1997 (@smoe) - rpc: Add "getburnreport" RPC function gridcoin-community#2049 (@cyrossignol) - gui: Add stats export reminder to beacon wizard auth page gridcoin-community#2050 (@cyrossignol) - doc: Add undocumented "-showorphans" GUI option to help text gridcoin-community#2058 (@cyrossignol) - beacon: Cull beacon db memory (passivation) gridcoin-community#2069 (@jamescowens) - gui: Avoid refreshing GUI researcher status while out-of-sync gridcoin-community#2068 (@cyrossignol) - consensus: Reimplement checkpoint-based spam protection gridcoin-community#2084 (@cyrossignol) - consensus: Verify hardened checkpoints on start up gridcoin-community#2087 (@cyrossignol) Changed - test: autogenerate data headers gridcoin-community#2030 (@div72) - doc: Change copyright years to 2021 gridcoin-community#2042 (@caraka) - gui: Clarify overview page "stake" field gridcoin-community#2056 (@cyrossignol) - doc: Update Copyright headers gridcoin-community#2059 (@barton2526) - gui: Update Qt Linguist localization files gridcoin-community#2063 (@cyrossignol) - build: update dependencies gridcoin-community#2064 (@barton2526) - net: Reduce default connection limit back to 125 gridcoin-community#2066 (@cyrossignol) - build: openssl patch gridcoin-community#2074 (@barton2526) - translation: Translate /src/qt/locale/bitcoin_en.ts in pt_PT gridcoin-community#2083 (@DjMVeiga) - log: Adjust logging gridcoin-community#2076 (@jamescowens) - gui: Change scraper tab to Inconsolata monospace font gridcoin-community#2085 (@jamescowens) - researcher: Change beacon deferment fix to reference nActiveBeforeSB gridcoin-community#2092 (@jamescowens) Removed - net: Clean up mandatory protocol version transition gridcoin-community#2080 (@cyrossignol) - refactor: Remove LessVerbose() function gridcoin-community#2089 (@cyrossignol) Fixed - build: Fix depends cross-compilation for macOS gridcoin-community#2038 (@cyrossignol) - build: Deal with Qt depends .qmake.stash file gridcoin-community#2048 (@cyrossignol) - beacon: Fix a subtle error in renewal chain walker gridcoin-community#2054 (@jamescowens) - researcher: Fix "malformed CPID" status for some pool projects gridcoin-community#2052 (@cyrossignol) - lint: Misc Typos gridcoin-community#2060 (@barton2526) - lint: remove identified duplicate includes gridcoin-community#2061 (@barton2526) - gui: Fix splash screen block height progress gridcoin-community#2057 (@cyrossignol) - gui: Fix garbage placeholders in some tx notification localizations gridcoin-community#2070 (@cyrossignol) - build: Patch libzip to fix mingw compile regression for mingw 9.2+ gridcoin-community#2082 (@jamescowens) - gui: Fix shutdown response for failed core init gridcoin-community#2088 (@cyrossignol) - researcher: Fix deferment of beacon renewal in superblock window gridcoin-community#2090 (@cyrossignol) - gui: Fix typo in beacon status refresh gridcoin-community#2091 (@div72)
Commit c949a02 removed Peercoin's broadcasted, dynamic checkpoints system and reimplemented
Checkpoints::CheckSync()
for hardened checkpoints. However, the change did not reapply the validation again for received blocks.This reimplements the validation using a similar strategy for nodes that finished the initial sync. With this change, nodes will refuse blocks that connect at a height below the highest checkpoint. This provides an earlier, cheaper spam mitigation for forked chains that will never validate against the set of hardened checkpoints.
I added a new checkpoint for block 2200000 (2021-03-18) so that this rule applies to nodes that forked because of the earlier newbie bug. It should eventually help to soften some of the orphan noise indirectly without the need for a more intrusive stale block handling routine at this time.