Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Commit

Permalink
Malus: add disputed block percentage (#6100)
Browse files Browse the repository at this point in the history
* Malus: add disputed block percentage

* Bump clap to support value_parser with range

* Add rand crate and use Bernoulli and Distribution

* Add conditional logic based on sampled value from Bernoulli distribution

* Add SuggestGarbageCandidateOptions struct

* Cleanup tests

* * Replace unwrap with expect and meaningful error message

* * Remove Inner
* Remove intercept_outgoing

* * Rename sampled variable
* Move info! logs to include candidate hash of malicious candidate

* * Add percentage option to dispute_ancestor

* * Support static probability for `ReplaceValidationResult` proxy
* Update some comments and docs

* * Add `--percentage` to `back-garbage-candidate` variant
* Rename structs for consistency

* * Add probabilistic behavior to `dispute-ancestor` variant
* Add probabilistic behavior to `back-garbage-candidate` variant
* Rename structs in dispute variant

* * More descriptive comments

* * cargo +nightly fmt --all

* * Move Bernoulli distributrion to ReplaceValidationResult constructor

* Rename random_bool to behave_maliciously

* * Remove dangling comment

* * Consistent log

* * Add logs based on sampled value

* * Cargo +nightly fmt --all

* * Remove unused percentage attributed after moving Bernoulli to constructor

* Squashed commit of the following:

commit e36cc59
Author: Chris Sosnin <48099298+slumber@users.noreply.github.com>
Date:   Mon Oct 10 10:06:44 2022 +0400

    Fix flaky test (#6131)

    * Split test + decrease test timeout

    * fmt

    * spellcheck

commit f85f96c
Author: girazoki <gorka.irazoki@gmail.com>
Date:   Mon Oct 10 06:39:30 2022 +0200

    Add event to asset claim (#6029)

commit fb0dd8e
Author: Leszek Wiesner <leszek@jsgenesis.com>
Date:   Mon Oct 10 00:23:54 2022 +0200

    Companion for 12109 (#5929)

    * Update following `pallet-vesting` configurable `WithdrawReasons`

    * Update lib.rs

    * Update lib.rs

    * Update lib.rs

    * update lockfile for {"substrate"}

    * fix warning

    Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
    Co-authored-by: parity-processbot <>

commit 1c786b3
Author: Bastian Köcher <info@kchr.de>
Date:   Fri Oct 7 13:40:40 2022 +0200

    Companion for upgrading pin-project (#6118)

    * Companion for upgrading pin-project

    This will remove some warnings with the latest rustc nightly/stable.

    paritytech/substrate#12426

    * update lockfile for {"substrate"}

    Co-authored-by: parity-processbot <>

commit 3d6b563
Author: Sergej Sakac <73715684+Szegoo@users.noreply.github.com>
Date:   Thu Oct 6 19:20:58 2022 +0200

    Maximum value for `MultiplierUpdate` (#6021)

    * update multiplier

    * fix

    * update lockfile for {"substrate"}

    * fmt

    * fix typo

    Co-authored-by: parity-processbot <>

commit 09f340c
Author: Adrian Catangiu <adrian@parity.io>
Date:   Thu Oct 6 12:58:39 2022 +0300

    service: use MmrRootProvider as custom BEEFY payload provider (companion for 12428) (#6112)

    * service: use MmrRootProvider as custom BEEFY payload provider

    * update lockfile for {"substrate"}

    Co-authored-by: parity-processbot <>

commit d12042f
Author: Branislav Kontur <bkontur@gmail.com>
Date:   Thu Oct 6 10:03:34 2022 +0200

    Skip `unexpected metric type`

    * Dump more info for `unexpected metric type`

    * Skip `unexpected metric type`

commit 3646202
Author: Andronik <write@reusable.software>
Date:   Thu Oct 6 00:36:51 2022 +0200

    update kvdb & co (#6111)

    * toml changes

    * REVERTME: patch

    * adapt parachains db interface

    * fix Cargo.toml patch after master rebase

    * fix av-store

    * fix chain-selection

    * fix parachains-db?

    * Revert "fix Cargo.toml patch after master rebase"

    This reverts commit 3afcbf0.

    * Revert "REVERTME: patch"

    This reverts commit 464b717.

    * Use `Ok` imported from prelude

    Co-authored-by: Bastian Köcher <info@kchr.de>

    * update lockfile for {"substrate"}

    * Revert "update lockfile for {"substrate"}"

    This reverts commit fdc623d.

    * cargo update -p sp-io

    Co-authored-by: Bastian Köcher <info@kchr.de>
    Co-authored-by: parity-processbot <>

commit 7870daf
Author: Gavin Wood <gavin@parity.io>
Date:   Wed Oct 5 22:17:59 2022 +0100

    Companion for #11649: Bound uses of `Call` (#5729)

    * Fixes

    * Clear out old weights

    Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

    * Resolve merges

    Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

    * Fix weight traits

    Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

    * polkadot runtime: Clippy

    Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

    * rococo runtime: update pallet configs

    Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

    * Add preimage migration

    Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

    * Add all migrations

    Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

    * Democracy is not on Westend

    Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

    * [Migration] Refund stored multisig calls (#6075)

    * Add Preimages to referenda config

    Needed since Gov V2 just merged.

    Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

    * Update weights

    Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

    * Add multisig migration to Westend+Rococo

    Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

    * Fix Executive syntax

    Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

    * Bump Substrate

    Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
    Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
    Co-authored-by: parity-processbot <>
    Co-authored-by: Roman Useinov <roman.useinov@gmail.com>

commit df4a1c3
Author: Alexander Theißen <alex.theissen@me.com>
Date:   Wed Oct 5 15:15:07 2022 +0200

    Pass through `runtime-benchmark` feature (#6110)

commit 3eb61f8
Author: Keith Yeung <kungfukeith11@gmail.com>
Date:   Wed Oct 5 17:47:15 2022 +0800

    Properly migrate weights to v2 (#6091)

    * Create migration for config pallet

    * Use XcmWeight in XCM pallet extrinsics

    * Link to PR in doc comment

    * cargo fmt

    * Fix tests

    * Fix tests

    * Remove unused import

    * Update runtime/parachains/src/configuration/migration.rs

    Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

    * Add missing on_runtime_upgrade implementation

    * Use new migration API

    * cargo fmt

    * Fix log message

    Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

commit edd6499
Author: Chris Sosnin <48099298+slumber@users.noreply.github.com>
Date:   Wed Oct 5 11:48:50 2022 +0400

    Buffered connection management for collator-protocol (#6022)

    * Extract metrics into a separate module

    * Introduce validators buffer

    * Integrate buffer into the subsystem

    * Only reconnect on new advertisements

    * Test

    * comma

    * doc comment

    * Make capacity buffer compile time non-zero

    * Add doc comments

    * nits

    * remove derives

    * review

    * better naming

    * check timeout

    * Extract interval stream into lib

    * Ensure collator disconnects after timeout

    * spellcheck

    * rename buf

    * Remove double interval

    * Add a log on timeout

    * Cleanup buffer on timeout

commit c913107
Author: Robert Klotzner <eskimor@users.noreply.github.com>
Date:   Tue Oct 4 18:47:52 2022 +0200

    Add unknown words (#6105)

commit ce430c2
Author: Robert Klotzner <eskimor@users.noreply.github.com>
Date:   Tue Oct 4 18:02:05 2022 +0200

    Batch vote import in dispute-distribution (#5894)

    * Start work on batching in dispute-distribution.

    * Guide work.

    * More guide changes. Still very much WIP.

    * Finish guide changes.

    * Clarification

    * Adjust argument about slashing.

    * WIP: Add constants to receiver.

    * Maintain order of disputes.

    * dispute-distribuion sender Rate limit.

    * Cleanup

    * WIP: dispute-distribution receiver.

    - [ ] Rate limiting
    - [ ] Batching

    * WIP: Batching.

    * fmt

    * Update `PeerQueues` to maintain more invariants.

    * WIP: Batching.

    * Small cleanup

    * Batching logic.

    * Some integration work.

    * Finish.

    Missing: Tests

    * Typo.

    * Docs.

    * Report missing metric.

    * Doc pass.

    * Tests for waiting_queue.

    * Speed up some crypto by 10x.

    * Fix redundant import.

    * Add some tracing.

    * Better sender rate limit

    * Some tests.

    * Tests

    * Add logging to rate limiter

    * Update roadmap/implementers-guide/src/node/disputes/dispute-distribution.md

    Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>

    * Update roadmap/implementers-guide/src/node/disputes/dispute-distribution.md

    Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>

    * Update node/network/dispute-distribution/src/receiver/mod.rs

    Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>

    * Review feedback.

    * Also log peer in log messages.

    * Fix indentation.

    * waker -> timer

    * Guide improvement.

    * Remove obsolete comment.

    * waker -> timer

    * Fix spell complaints.

    * Fix Cargo.lock

    Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>

commit efb82ef
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Tue Oct 4 11:28:21 2022 +0000

    Bump lru from 0.7.8 to 0.8.0 (#6060)

    * Bump lru from 0.7.8 to 0.8.0

    Bumps [lru](https://github.com/jeromefroe/lru-rs) from 0.7.8 to 0.8.0.
    - [Release notes](https://github.com/jeromefroe/lru-rs/releases)
    - [Changelog](https://github.com/jeromefroe/lru-rs/blob/master/CHANGELOG.md)
    - [Commits](jeromefroe/lru-rs@0.7.8...0.8.0)

    ---
    updated-dependencies:
    - dependency-name: lru
      dependency-type: direct:production
      update-type: version-update:semver-minor
    ...

    Signed-off-by: dependabot[bot] <support@github.com>

    * Change `LruCache` paramerter to `NonZeroUsize`

    * Change type of `session_cache_lru_size` to `NonZeroUsize`

    * Add expects instead of unwrap

    Co-authored-by: Bastian Köcher <info@kchr.de>

    * Use match to get rid of expects

    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Sebastian Kunert <skunert49@gmail.com>
    Co-authored-by: Bastian Köcher <info@kchr.de>

commit 60554e1
Author: Andrei Sandu <54316454+sandreim@users.noreply.github.com>
Date:   Tue Oct 4 13:36:42 2022 +0300

    Keep sessions in window for the full unfinalized chain (#6054)

    * Impl dynamic window size. Keep sessions for unfinalized chain

    Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>

    * feedback

    Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>

    * Stretch also in contructor plus  tests

    Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>

    * review feedback

    Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>

    * fix approval-voting tests

    Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>

    * grunting: dispute coordinator tests

    Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>

    Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>

commit 4ddf0ff
Author: Serban Iorga <serban@parity.io>
Date:   Tue Oct 4 12:25:48 2022 +0300

    Companion for BEEFY: Simplify hashing for pallet-beefy-mmr (#6098)

    * beefy-mmr: Simplify hashing

    * update lockfile for {"substrate"}

    Co-authored-by: parity-processbot <>

* Revert "Squashed commit of the following:"

This reverts commit 5001fa5.

* Companion for BEEFY: Simplify hashing for pallet-beefy-mmr (#6098)

* beefy-mmr: Simplify hashing

* update lockfile for {"substrate"}

Co-authored-by: parity-processbot <>

* Keep sessions in window for the full unfinalized chain (#6054)

* Impl dynamic window size. Keep sessions for unfinalized chain

Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>

* feedback

Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>

* Stretch also in contructor plus  tests

Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>

* review feedback

Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>

* fix approval-voting tests

Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>

* grunting: dispute coordinator tests

Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>

Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>

* Bump lru from 0.7.8 to 0.8.0 (#6060)

* Bump lru from 0.7.8 to 0.8.0

Bumps [lru](https://github.com/jeromefroe/lru-rs) from 0.7.8 to 0.8.0.
- [Release notes](https://github.com/jeromefroe/lru-rs/releases)
- [Changelog](https://github.com/jeromefroe/lru-rs/blob/master/CHANGELOG.md)
- [Commits](jeromefroe/lru-rs@0.7.8...0.8.0)

---
updated-dependencies:
- dependency-name: lru
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Change `LruCache` paramerter to `NonZeroUsize`

* Change type of `session_cache_lru_size` to `NonZeroUsize`

* Add expects instead of unwrap

Co-authored-by: Bastian Köcher <info@kchr.de>

* Use match to get rid of expects

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Kunert <skunert49@gmail.com>
Co-authored-by: Bastian Köcher <info@kchr.de>

* Batch vote import in dispute-distribution (#5894)

* Start work on batching in dispute-distribution.

* Guide work.

* More guide changes. Still very much WIP.

* Finish guide changes.

* Clarification

* Adjust argument about slashing.

* WIP: Add constants to receiver.

* Maintain order of disputes.

* dispute-distribuion sender Rate limit.

* Cleanup

* WIP: dispute-distribution receiver.

- [ ] Rate limiting
- [ ] Batching

* WIP: Batching.

* fmt

* Update `PeerQueues` to maintain more invariants.

* WIP: Batching.

* Small cleanup

* Batching logic.

* Some integration work.

* Finish.

Missing: Tests

* Typo.

* Docs.

* Report missing metric.

* Doc pass.

* Tests for waiting_queue.

* Speed up some crypto by 10x.

* Fix redundant import.

* Add some tracing.

* Better sender rate limit

* Some tests.

* Tests

* Add logging to rate limiter

* Update roadmap/implementers-guide/src/node/disputes/dispute-distribution.md

Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>

* Update roadmap/implementers-guide/src/node/disputes/dispute-distribution.md

Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>

* Update node/network/dispute-distribution/src/receiver/mod.rs

Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>

* Review feedback.

* Also log peer in log messages.

* Fix indentation.

* waker -> timer

* Guide improvement.

* Remove obsolete comment.

* waker -> timer

* Fix spell complaints.

* Fix Cargo.lock

Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>

* Add unknown words (#6105)

* Buffered connection management for collator-protocol (#6022)

* Extract metrics into a separate module

* Introduce validators buffer

* Integrate buffer into the subsystem

* Only reconnect on new advertisements

* Test

* comma

* doc comment

* Make capacity buffer compile time non-zero

* Add doc comments

* nits

* remove derives

* review

* better naming

* check timeout

* Extract interval stream into lib

* Ensure collator disconnects after timeout

* spellcheck

* rename buf

* Remove double interval

* Add a log on timeout

* Cleanup buffer on timeout

* Properly migrate weights to v2 (#6091)

* Create migration for config pallet

* Use XcmWeight in XCM pallet extrinsics

* Link to PR in doc comment

* cargo fmt

* Fix tests

* Fix tests

* Remove unused import

* Update runtime/parachains/src/configuration/migration.rs

Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Add missing on_runtime_upgrade implementation

* Use new migration API

* cargo fmt

* Fix log message

Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Pass through `runtime-benchmark` feature (#6110)

* Companion for #11649: Bound uses of `Call` (#5729)

* Fixes

* Clear out old weights

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Resolve merges

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Fix weight traits

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* polkadot runtime: Clippy

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* rococo runtime: update pallet configs

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Add preimage migration

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Add all migrations

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Democracy is not on Westend

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* [Migration] Refund stored multisig calls (#6075)

* Add Preimages to referenda config

Needed since Gov V2 just merged.

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Update weights

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Add multisig migration to Westend+Rococo

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Fix Executive syntax

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Bump Substrate

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: parity-processbot <>
Co-authored-by: Roman Useinov <roman.useinov@gmail.com>

* update kvdb & co (#6111)

* toml changes

* REVERTME: patch

* adapt parachains db interface

* fix Cargo.toml patch after master rebase

* fix av-store

* fix chain-selection

* fix parachains-db?

* Revert "fix Cargo.toml patch after master rebase"

This reverts commit 3afcbf0.

* Revert "REVERTME: patch"

This reverts commit 464b717.

* Use `Ok` imported from prelude

Co-authored-by: Bastian Köcher <info@kchr.de>

* update lockfile for {"substrate"}

* Revert "update lockfile for {"substrate"}"

This reverts commit fdc623d.

* cargo update -p sp-io

Co-authored-by: Bastian Köcher <info@kchr.de>
Co-authored-by: parity-processbot <>

* Skip `unexpected metric type`

* Dump more info for `unexpected metric type`

* Skip `unexpected metric type`

* service: use MmrRootProvider as custom BEEFY payload provider (companion for 12428) (#6112)

* service: use MmrRootProvider as custom BEEFY payload provider

* update lockfile for {"substrate"}

Co-authored-by: parity-processbot <>

* Maximum value for `MultiplierUpdate` (#6021)

* update multiplier

* fix

* update lockfile for {"substrate"}

* fmt

* fix typo

Co-authored-by: parity-processbot <>

* Companion for upgrading pin-project (#6118)

* Companion for upgrading pin-project

This will remove some warnings with the latest rustc nightly/stable.

paritytech/substrate#12426

* update lockfile for {"substrate"}

Co-authored-by: parity-processbot <>

* Companion for 12109 (#5929)

* Update following `pallet-vesting` configurable `WithdrawReasons`

* Update lib.rs

* Update lib.rs

* Update lib.rs

* update lockfile for {"substrate"}

* fix warning

Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
Co-authored-by: parity-processbot <>

* Add event to asset claim (#6029)

* Fix flaky test (#6131)

* Split test + decrease test timeout

* fmt

* spellcheck

* ci/guide: install mdbook-graphviz (#6119)

* ci/guide: install mdbook-graphviz

* install graphviz in build-implementers-guide

* Update scripts/ci/gitlab/pipeline/build.yml

Co-authored-by: Alexander Samusev <41779041+alvicsam@users.noreply.github.com>

* Revert "Squashed commit of the following:"

This reverts commit 5001fa5.

* * Remove unused imports

* * cargo +nightly fmt --all

* Make tweaks based on PR comments

* unit test related to gum formatting

* cargo +nightly fmt --all

* Resolve merge conflicts

* cargo +nightly fmt --all

* Fix tests so they use cli rather than cmd

* CI unused import check fix

* Move info! log to startup

* make info log more comprehensible

Signed-off-by: Andrei Sandu <andrei-mihail@parity.io>
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Serban Iorga <serban@parity.io>
Co-authored-by: Andrei Sandu <54316454+sandreim@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Kunert <skunert49@gmail.com>
Co-authored-by: Bastian Köcher <info@kchr.de>
Co-authored-by: Robert Klotzner <eskimor@users.noreply.github.com>
Co-authored-by: Tsvetomir Dimitrov <tsvetomir@parity.io>
Co-authored-by: Chris Sosnin <48099298+slumber@users.noreply.github.com>
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Alexander Theißen <alex.theissen@me.com>
Co-authored-by: Gavin Wood <gavin@parity.io>
Co-authored-by: Roman Useinov <roman.useinov@gmail.com>
Co-authored-by: Andronik <write@reusable.software>
Co-authored-by: Branislav Kontur <bkontur@gmail.com>
Co-authored-by: Adrian Catangiu <adrian@parity.io>
Co-authored-by: Sergej Sakac <73715684+Szegoo@users.noreply.github.com>
Co-authored-by: Leszek Wiesner <leszek@jsgenesis.com>
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
Co-authored-by: girazoki <gorka.irazoki@gmail.com>
Co-authored-by: Alexander Samusev <41779041+alvicsam@users.noreply.github.com>
  • Loading branch information
1 parent 0398050 commit a28b257
Show file tree
Hide file tree
Showing 8 changed files with 445 additions and 216 deletions.
19 changes: 10 additions & 9 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion node/malus/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,12 @@ assert_matches = "1.5"
async-trait = "0.1.57"
sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" }
sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" }
clap = { version = "3.1", features = ["derive"] }
clap = { version = "3.2.21", features = ["derive"] }
futures = "0.3.21"
futures-timer = "3.0.2"
gum = { package = "tracing-gum", path = "../gum/" }
erasure = { package = "polkadot-erasure-coding", path = "../../erasure-coding" }
rand = "0.8.5"

[features]
default = []
Expand Down
105 changes: 96 additions & 9 deletions node/malus/src/malus.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@

use clap::Parser;
use color_eyre::eyre;
use polkadot_cli::Cli;

pub(crate) mod interceptor;
pub(crate) mod shared;
Expand All @@ -33,9 +32,9 @@ use variants::*;
#[clap(rename_all = "kebab-case")]
enum NemesisVariant {
/// Suggest a candidate with an invalid proof of validity.
SuggestGarbageCandidate(Cli),
SuggestGarbageCandidate(SuggestGarbageCandidateOptions),
/// Back a candidate with a specifically crafted proof of validity.
BackGarbageCandidate(Cli),
BackGarbageCandidate(BackGarbageCandidateOptions),
/// Delayed disputing of ancestors that are perfectly fine.
DisputeAncestor(DisputeAncestorOptions),

Expand All @@ -62,16 +61,31 @@ impl MalusCli {
fn launch(self) -> eyre::Result<()> {
let finality_delay = self.finality_delay;
match self.variant {
NemesisVariant::BackGarbageCandidate(cli) =>
polkadot_cli::run_node(cli, BackGarbageCandidate, finality_delay)?,
NemesisVariant::SuggestGarbageCandidate(cli) =>
polkadot_cli::run_node(cli, BackGarbageCandidateWrapper, finality_delay)?,
NemesisVariant::BackGarbageCandidate(opts) => {
let BackGarbageCandidateOptions { percentage, cli } = opts;

polkadot_cli::run_node(cli, BackGarbageCandidates { percentage }, finality_delay)?
},
NemesisVariant::SuggestGarbageCandidate(opts) => {
let SuggestGarbageCandidateOptions { percentage, cli } = opts;

polkadot_cli::run_node(
cli,
SuggestGarbageCandidates { percentage },
finality_delay,
)?
},
NemesisVariant::DisputeAncestor(opts) => {
let DisputeAncestorOptions { fake_validation, fake_validation_error, cli } = opts;
let DisputeAncestorOptions {
fake_validation,
fake_validation_error,
percentage,
cli,
} = opts;

polkadot_cli::run_node(
cli,
DisputeValidCandidates { fake_validation, fake_validation_error },
DisputeValidCandidates { fake_validation, fake_validation_error, percentage },
finality_delay,
)?
},
Expand Down Expand Up @@ -129,4 +143,77 @@ mod tests {
assert!(run.cli.run.base.bob);
});
}

#[test]
fn percentage_works_suggest_garbage() {
let cli = MalusCli::try_parse_from(IntoIterator::into_iter([
"malus",
"suggest-garbage-candidate",
"--percentage",
"100",
"--bob",
]))
.unwrap();
assert_matches::assert_matches!(cli, MalusCli {
variant: NemesisVariant::SuggestGarbageCandidate(run),
..
} => {
assert!(run.cli.run.base.bob);
});
}

#[test]
fn percentage_works_dispute_ancestor() {
let cli = MalusCli::try_parse_from(IntoIterator::into_iter([
"malus",
"dispute-ancestor",
"--percentage",
"100",
"--bob",
]))
.unwrap();
assert_matches::assert_matches!(cli, MalusCli {
variant: NemesisVariant::DisputeAncestor(run),
..
} => {
assert!(run.cli.run.base.bob);
});
}

#[test]
fn percentage_works_back_garbage() {
let cli = MalusCli::try_parse_from(IntoIterator::into_iter([
"malus",
"back-garbage-candidate",
"--percentage",
"100",
"--bob",
]))
.unwrap();
assert_matches::assert_matches!(cli, MalusCli {
variant: NemesisVariant::BackGarbageCandidate(run),
..
} => {
assert!(run.cli.run.base.bob);
});
}

#[test]
#[should_panic]
fn validate_range_for_percentage() {
let cli = MalusCli::try_parse_from(IntoIterator::into_iter([
"malus",
"suggest-garbage-candidate",
"--percentage",
"101",
"--bob",
]))
.unwrap();
assert_matches::assert_matches!(cli, MalusCli {
variant: NemesisVariant::DisputeAncestor(run),
..
} => {
assert!(run.cli.run.base.bob);
});
}
}
22 changes: 20 additions & 2 deletions node/malus/src/variants/back_garbage_candidate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ use polkadot_cli::{
OverseerConnector, OverseerGen, OverseerGenArgs, OverseerHandle, ParachainHost,
ProvideRuntimeApi,
},
Cli,
};
use polkadot_node_subsystem::SpawnGlue;
use sp_core::traits::SpawnNamed;
Expand All @@ -36,11 +37,27 @@ use crate::{

use std::sync::Arc;

#[derive(Debug, clap::Parser)]
#[clap(rename_all = "kebab-case")]
#[allow(missing_docs)]
pub struct BackGarbageCandidateOptions {
/// Determines the percentage of garbage candidates that should be backed.
/// Defaults to 100% of garbage candidates being backed.
#[clap(short, long, ignore_case = true, default_value_t = 100, value_parser = clap::value_parser!(u8).range(0..=100))]
pub percentage: u8,

#[clap(flatten)]
pub cli: Cli,
}

/// Generates an overseer that replaces the candidate validation subsystem with our malicious
/// variant.
pub(crate) struct BackGarbageCandidate;
pub(crate) struct BackGarbageCandidates {
/// The probability of behaving maliciously.
pub percentage: u8,
}

impl OverseerGen for BackGarbageCandidate {
impl OverseerGen for BackGarbageCandidates {
fn generate<'a, Spawner, RuntimeClient>(
&self,
connector: OverseerConnector,
Expand All @@ -55,6 +72,7 @@ impl OverseerGen for BackGarbageCandidate {
let validation_filter = ReplaceValidationResult::new(
FakeCandidateValidation::BackingAndApprovalValid,
FakeCandidateValidationError::InvalidOutputs,
f64::from(self.percentage),
SpawnGlue(spawner),
);

Expand Down
Loading

0 comments on commit a28b257

Please sign in to comment.