# Censoring Simulation This simulation creates a number of malicious nodes which do not propagate received messages. This simulation is aimed to help fine-tune gossipsub scoring parameters to mitigate censoring attacks on gossipsub networks. ## Running the simulation ```shell testground run composition -f censoring/compositions/composition.toml --wait ``` ## How the Simulation Works Note: Attackers connect to a single publisher (victim). [`Publisher1` is the victim](./src/attacker.rs#L76) in this test plan. ```mermaid sequenceDiagram participant Publishers participant Lurkers participant Attackers %% Discovery Note over Publishers,Lurkers: Setup discovery
Connect to some of the honest nodes (publishers + lukers)
randomly selected Note over Attackers: Setup discovery
Connect to a single publisher Publishers->>Lurkers: Connect Lurkers->>Publishers: Connect Attackers->>Publishers: Connect to a single publisher (victim) %% Subscribe topics Note over Publishers,Lurkers: Subscribe topic(s) Publishers->>Lurkers: Subscribe/GRAFT Lurkers->>Publishers: Subscribe/GRAFT Publishers->>Attackers: Subscribe/GRAFT Note over Attackers: Subscribe to the topic in the message from the publisher,
and send back Subscribe/GRAFT. Attackers->>Publishers: Subscribe/GRAFT %% Publish messages Note over Publishers: Periodically publish messages on all topics subscribing. loop Publish messages Publishers->>Lurkers: Message Publishers->>Attackers: Message Note over Attackers: **Don't propagate messages** end %% Record metrics Note over Publishers,Lurkers: Record metrics. ``` ## Dashboards Please see the root [README](../README.md) for how to run Grafana. ### Gossipsub Metrics The metrics of gossipsub are recorded once the simulation has been completed. [All of the metrics on libp2p-gossipsub](./src/honest.rs#L235-L275) are available in this dashboard. Variables for this dashboard: - `run_id`: The run_id for the test run you want to see. - `topic`: The gossipsub topic, currently it's fixed to `emulate`. - `instance_name`: Some panels in this dashboard need an instance name to be specified. (e.g. score_per_mesh histogram) image ### Peer Scores The peer scores are recorded periodically (every second) while the simulation is running. Variables for this dashboard: - `run_id`: The run_id for the test run you want to see. - `instance_name`: It's default to `All`, you can select specific instances. image