From 43215bddf2b6ecf2da9bcaf0e7739e5bab8df9e9 Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Mon, 3 Aug 2026 18:32:59 +0700 Subject: [PATCH] feat(dashmate): plumb Tenderdash consensus DoS rate-limit knobs Add three Tenderdash [consensus] rate-limit knobs to the dashmate role so a network can override them via the generated dashmate.json: - verificationRateLimit (default 300) - peerVoteRateLimit (default 600) - peerDataRateLimit (default 500) Changes: - ansible/roles/dashmate/defaults/main.yml: three vars with Tenderdash defaults, following the existing consensus var naming. - ansible/roles/dashmate/templates/dashmate.json.j2: inject the three vars (as JSON numbers) into the consensus object, after peer and before unsafeOverride. The dashmate.json written here is validated by the installed dashmate against its schema, and consensus is additionalProperties:false. So this MUST ship together with a dashmate release whose schema knows these keys; dashmate_version in the network config must be bumped to that release. That release does not exist yet, so dashmate_version is intentionally not bumped here. Co-Authored-By: Claude Opus 4.8 --- ansible/roles/dashmate/defaults/main.yml | 3 +++ ansible/roles/dashmate/templates/dashmate.json.j2 | 3 +++ 2 files changed, 6 insertions(+) diff --git a/ansible/roles/dashmate/defaults/main.yml b/ansible/roles/dashmate/defaults/main.yml index 3418fa23..1b1ceebe 100644 --- a/ansible/roles/dashmate/defaults/main.yml +++ b/ansible/roles/dashmate/defaults/main.yml @@ -61,6 +61,9 @@ dashmate_platform_drive_tenderdash_mempool_max_txs_bytes: 536870912 # 500Mb, def dashmate_platform_drive_tenderdash_rpc_max_open_connections: 900 dashmate_platform_drive_tenderdash_consensus_peer_gossip_sleep_duration: "100ms" dashmate_platform_drive_tenderdash_consensus_peer_query_maj23_sleep_duration: "2s" +dashmate_platform_drive_tenderdash_consensus_verification_rate_limit: 300 +dashmate_platform_drive_tenderdash_consensus_peer_vote_rate_limit: 600 +dashmate_platform_drive_tenderdash_consensus_peer_data_rate_limit: 500 dashmate_platform_drive_tenderdash_mempool_timeout_check_tx: "1s" dashmate_platform_drive_tenderdash_mempool_tx_enqueue_timeout: "10ms" dashmate_platform_drive_tenderdash_mempool_tx_send_rate_limit: 10 diff --git a/ansible/roles/dashmate/templates/dashmate.json.j2 b/ansible/roles/dashmate/templates/dashmate.json.j2 index 8cfcfc93..9f036591 100644 --- a/ansible/roles/dashmate/templates/dashmate.json.j2 +++ b/ansible/roles/dashmate/templates/dashmate.json.j2 @@ -420,6 +420,9 @@ "gossipSleepDuration": "{{dashmate_platform_drive_tenderdash_consensus_peer_gossip_sleep_duration}}", "queryMaj23SleepDuration": "{{dashmate_platform_drive_tenderdash_consensus_peer_query_maj23_sleep_duration}}" }, + "verificationRateLimit": {{dashmate_platform_drive_tenderdash_consensus_verification_rate_limit}}, + "peerVoteRateLimit": {{dashmate_platform_drive_tenderdash_consensus_peer_vote_rate_limit}}, + "peerDataRateLimit": {{dashmate_platform_drive_tenderdash_consensus_peer_data_rate_limit}}, "unsafeOverride": { "propose": { "timeout": {% if dashmate_platform_drive_tenderdash_consensus_unsafe_override_propose_timeout is not none %}"{{dashmate_platform_drive_tenderdash_consensus_unsafe_override_propose_timeout}}"{% else %}null{% endif %},