From 2e56905f83af52594ffea86704dab5775e3d82cf Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 21 Aug 2024 11:32:28 -0400 Subject: [PATCH 1/2] fix(STO-020): check entity stake for new account --- crates/sim/src/simulation/simulator.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/sim/src/simulation/simulator.rs b/crates/sim/src/simulation/simulator.rs index 49f1a6de3..55ae206ab 100644 --- a/crates/sim/src/simulation/simulator.rs +++ b/crates/sim/src/simulation/simulator.rs @@ -282,11 +282,15 @@ where slot, ) => { let needs_stake_entity = needs_stake.and_then(|t| entity_infos.get(t)); - if let Some(needs_stake_entity) = needs_stake_entity { - if needs_stake_entity.is_staked { + if let Some(needs_stake_entity_info) = needs_stake_entity { + if needs_stake_entity_info.is_staked { tracing::debug!("Associated storage accessed by staked entity during deploy, and entity is staked"); continue; } + violations.push(SimulationViolation::AssociatedStorageDuringDeploy( + needs_stake_entity.map(|ei| ei.entity), + StorageSlot { address, slot }, + )) } if let Some(factory) = entity_infos.get(EntityType::Factory) { if factory.is_staked { From e2b7b2735cb26422cf1c3c39f8f7c06839c64a8c Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 21 Aug 2024 12:45:16 -0400 Subject: [PATCH 2/2] fix(STO-020): fix unit test and restructure code logic --- crates/sim/src/simulation/simulator.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/crates/sim/src/simulation/simulator.rs b/crates/sim/src/simulation/simulator.rs index 55ae206ab..4b1dbe820 100644 --- a/crates/sim/src/simulation/simulator.rs +++ b/crates/sim/src/simulation/simulator.rs @@ -282,22 +282,23 @@ where slot, ) => { let needs_stake_entity = needs_stake.and_then(|t| entity_infos.get(t)); + + if needs_stake.is_none() { + if let Some(factory) = entity_infos.get(EntityType::Factory) { + if factory.is_staked { + tracing::debug!("Associated storage accessed by staked entity during deploy, and factory is staked"); + continue; + } + } + } + if let Some(needs_stake_entity_info) = needs_stake_entity { if needs_stake_entity_info.is_staked { tracing::debug!("Associated storage accessed by staked entity during deploy, and entity is staked"); continue; } - violations.push(SimulationViolation::AssociatedStorageDuringDeploy( - needs_stake_entity.map(|ei| ei.entity), - StorageSlot { address, slot }, - )) - } - if let Some(factory) = entity_infos.get(EntityType::Factory) { - if factory.is_staked { - tracing::debug!("Associated storage accessed by staked entity during deploy, and factory is staked"); - continue; - } } + // [STO-022] violations.push(SimulationViolation::AssociatedStorageDuringDeploy( needs_stake_entity.map(|ei| ei.entity), @@ -1178,8 +1179,7 @@ mod tests { )] ); - // staked causes no errors - context.entity_infos.factory.as_mut().unwrap().is_staked = true; + context.entity_infos.paymaster.as_mut().unwrap().is_staked = true; let res = simulator.gather_context_violations(&mut context); assert!(res.unwrap().is_empty()); }