Skip to content
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

Merged
merged 5 commits into from
Apr 1, 2021

Conversation

cyrossignol
Copy link
Member

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.

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.
@cyrossignol
Copy link
Member Author

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.

@cyrossignol cyrossignol marked this pull request as ready for review April 1, 2021 07:05
@jamescowens
Copy link
Member

So do we just want to close this then?

@cyrossignol
Copy link
Member Author

The validation rule is still a useful mitigation for some types of spam.

Copy link
Member

@jamescowens jamescowens left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

utACK

@jamescowens jamescowens requested a review from div72 April 1, 2021 18:40
@jamescowens jamescowens added this to the Ingrid milestone Apr 1, 2021
Copy link
Member

@div72 div72 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

utACK

@jamescowens jamescowens merged commit fd17e6f into gridcoin-community:development Apr 1, 2021
@cyrossignol cyrossignol deleted the checkpoints branch April 1, 2021 19:09
jamescowens added a commit to jamescowens/Gridcoin-Research that referenced this pull request Apr 4, 2021
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)
jamescowens added a commit to jamescowens/Gridcoin-Research that referenced this pull request Apr 4, 2021
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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants