From 167848ce99a23ddd4bc4a28aff3cd3027001852c Mon Sep 17 00:00:00 2001 From: Pavlo Botnar Date: Fri, 21 Feb 2025 16:50:53 +0100 Subject: [PATCH] fix(iota-types/timelock): add additional checks to the is_timelocked_vested_reward function (#5485) * fix(iota-types/timelock): add additional checks to the is_timelocked_vested_reward function * Fix review comments * Fix comment * tests fix * fmt --------- Co-authored-by: Mirko Zichichi --- crates/iota-types/src/timelock/timelock.rs | 10 ++++++++-- .../src/unit_tests/timelock/timelock_tests.rs | 7 ++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/crates/iota-types/src/timelock/timelock.rs b/crates/iota-types/src/timelock/timelock.rs index 1c5d03f1a5e..60de58aec39 100644 --- a/crates/iota-types/src/timelock/timelock.rs +++ b/crates/iota-types/src/timelock/timelock.rs @@ -66,11 +66,17 @@ pub fn is_timelocked_vested_reward( } /// Checks if an output is a vested reward, if it has a specific ID prefix, -/// and if it contains a timelock unlock condition. +/// and if it contains a timelock unlock condition, +/// and if an output has no native tokens, +/// and if an output has only 2 unlock conditions and their address. pub fn is_vested_reward(output_id: OutputId, basic_output: &BasicOutput) -> bool { let has_vesting_prefix = output_id.to_string().starts_with(VESTED_REWARD_ID_PREFIX); - has_vesting_prefix && basic_output.unlock_conditions().timelock().is_some() + has_vesting_prefix + && basic_output.unlock_conditions().timelock().is_some() + && basic_output.native_tokens().len() == 0 + && basic_output.unlock_conditions().len() == 2 + && basic_output.unlock_conditions().address().is_some() } /// Creates a `TimeLock>` from a Stardust-based Basic Output diff --git a/crates/iota-types/src/unit_tests/timelock/timelock_tests.rs b/crates/iota-types/src/unit_tests/timelock/timelock_tests.rs index 808193911dd..065c22bc5ae 100644 --- a/crates/iota-types/src/unit_tests/timelock/timelock_tests.rs +++ b/crates/iota-types/src/unit_tests/timelock/timelock_tests.rs @@ -246,10 +246,7 @@ fn timelock_from_stardust_extra_unlock_condition() { let err = try_from_stardust(output_id, &output, 100).unwrap_err(); - assert!(matches!( - err, - VestedRewardError::UnlockConditionsNumberMismatch - )); + assert!(matches!(err, VestedRewardError::NotVestedReward)); } #[test] @@ -272,5 +269,5 @@ fn timelock_from_stardust_with_native_tokens() { let err = try_from_stardust(output_id, &output, 100).unwrap_err(); - assert!(matches!(err, VestedRewardError::NativeTokensNotSupported)); + assert!(matches!(err, VestedRewardError::NotVestedReward)); }