From cb3a7adf803f5c17ca34c10deb0320b9691ba065 Mon Sep 17 00:00:00 2001 From: Liam Aharon Date: Wed, 21 May 2025 15:10:32 +0300 Subject: [PATCH 1/4] ignore stale drand --- pallets/drand/src/lib.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pallets/drand/src/lib.rs b/pallets/drand/src/lib.rs index 40bf7ccb9b..fc44cc557c 100644 --- a/pallets/drand/src/lib.rs +++ b/pallets/drand/src/lib.rs @@ -292,6 +292,10 @@ pub mod pallet { pulses_payload: payload, signature, } => { + // Blacklist stale pulses in the txpool that can stall finalization. + if payload.block_number < BlockNumberFor::::from(5612400u32) { + return InvalidTransaction::Stale.into(); + } let signature = signature.as_ref().ok_or(InvalidTransaction::BadSigner)?; Self::validate_signature_and_parameters( payload, From 5d185cf9f6ce71882b3e67a15fdeccde9204bf8e Mon Sep 17 00:00:00 2001 From: Liam Aharon Date: Wed, 21 May 2025 15:30:58 +0300 Subject: [PATCH 2/4] spec version bump --- runtime/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 193f585e3b..56b1d19268 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -207,7 +207,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 263, + spec_version: 264, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, From dd3dcb6c47eaa22ba1a09fad122bfe3eb8ca91b3 Mon Sep 17 00:00:00 2001 From: Liam Aharon Date: Wed, 21 May 2025 15:55:10 +0300 Subject: [PATCH 3/4] tests --- pallets/drand/src/tests.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pallets/drand/src/tests.rs b/pallets/drand/src/tests.rs index e12653aebf..3f6470f04c 100644 --- a/pallets/drand/src/tests.rs +++ b/pallets/drand/src/tests.rs @@ -47,7 +47,7 @@ fn it_can_submit_valid_pulse_when_beacon_config_exists() { let p: Pulse = u_p.try_into_pulse().unwrap(); let alice = sp_keyring::Sr25519Keyring::Alice; - let block_number = 1; + let block_number = 100_000_000; System::set_block_number(block_number); // Set the beacon config @@ -91,7 +91,7 @@ fn it_can_submit_valid_pulse_when_beacon_config_exists() { fn it_rejects_invalid_pulse_due_to_bad_signature() { new_test_ext().execute_with(|| { let alice = sp_keyring::Sr25519Keyring::Alice; - let block_number = 1; + let block_number = 100_000_000; System::set_block_number(block_number); // Set the beacon config using Root origin @@ -139,7 +139,7 @@ fn it_rejects_invalid_pulse_due_to_bad_signature() { #[test] fn it_rejects_pulses_with_non_incremental_round_numbers() { new_test_ext().execute_with(|| { - let block_number = 1; + let block_number = 100_000_000; let alice = sp_keyring::Sr25519Keyring::Alice; System::set_block_number(block_number); @@ -189,7 +189,7 @@ fn it_rejects_pulses_with_non_incremental_round_numbers() { #[test] fn it_blocks_non_root_from_submit_beacon_info() { new_test_ext().execute_with(|| { - let block_number = 1; + let block_number = 100_000_000; let alice = sp_keyring::Sr25519Keyring::Alice; System::set_block_number(block_number); @@ -239,7 +239,7 @@ fn it_blocks_non_root_from_submit_beacon_info() { #[test] fn signed_cannot_submit_beacon_info() { new_test_ext().execute_with(|| { - let block_number = 1; + let block_number = 100_000_000; let alice = sp_keyring::Sr25519Keyring::Alice; System::set_block_number(block_number); @@ -268,7 +268,7 @@ fn signed_cannot_submit_beacon_info() { #[test] fn test_validate_unsigned_write_pulse() { new_test_ext().execute_with(|| { - let block_number = 1; + let block_number = 100_000_000; let alice = sp_keyring::Sr25519Keyring::Alice; System::set_block_number(block_number); let pulses_payload = PulsesPayload { @@ -293,7 +293,7 @@ fn test_validate_unsigned_write_pulse() { #[test] fn test_not_validate_unsigned_write_pulse_with_bad_proof() { new_test_ext().execute_with(|| { - let block_number = 1; + let block_number = 100_000_000; let alice = sp_keyring::Sr25519Keyring::Alice; System::set_block_number(block_number); let pulses_payload = PulsesPayload { @@ -319,7 +319,7 @@ fn test_not_validate_unsigned_write_pulse_with_bad_proof() { #[test] fn test_not_validate_unsigned_write_pulse_with_no_payload_signature() { new_test_ext().execute_with(|| { - let block_number = 1; + let block_number = 100_000_000; let alice = sp_keyring::Sr25519Keyring::Alice; System::set_block_number(block_number); let pulses_payload = PulsesPayload { @@ -388,8 +388,8 @@ fn can_execute_and_handle_valid_http_responses() { #[test] fn validate_unsigned_rejects_future_block_number() { new_test_ext().execute_with(|| { - let block_number = 1; - let future_block_number = 100; + let block_number = 100_000_000; + let future_block_number = 100_000_100; let alice = sp_keyring::Sr25519Keyring::Alice; System::set_block_number(block_number); let pulses_payload = PulsesPayload { From 397e997ea2cf6e0ef23ed6b2f419971f186bde8e Mon Sep 17 00:00:00 2001 From: Liam Aharon Date: Wed, 21 May 2025 15:57:05 +0300 Subject: [PATCH 4/4] bump for safety --- pallets/drand/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pallets/drand/src/lib.rs b/pallets/drand/src/lib.rs index fc44cc557c..5695f1456d 100644 --- a/pallets/drand/src/lib.rs +++ b/pallets/drand/src/lib.rs @@ -293,7 +293,7 @@ pub mod pallet { signature, } => { // Blacklist stale pulses in the txpool that can stall finalization. - if payload.block_number < BlockNumberFor::::from(5612400u32) { + if payload.block_number < BlockNumberFor::::from(5612500u32) { return InvalidTransaction::Stale.into(); } let signature = signature.as_ref().ok_or(InvalidTransaction::BadSigner)?;