Skip to content

Commit

Permalink
fix(STO-020): fix unit test and restructure code logic
Browse files Browse the repository at this point in the history
  • Loading branch information
andysim3d committed Aug 21, 2024
1 parent 73fa3bd commit b6930b3
Showing 1 changed file with 50 additions and 13 deletions.
63 changes: 50 additions & 13 deletions crates/sim/src/simulation/simulator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -282,27 +282,33 @@ where
slot,
) => {
let needs_stake_entity = needs_stake.and_then(|t| entity_infos.get(t));
let mut entity_stacked_violation = true;
let mut factory_stacked_violation = true;

if needs_stake.is_none(){
entity_stacked_violation = false;
}

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");
factory_stacked_violation = false;
}
}
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;
entity_stacked_violation = false;
}
}

if entity_stacked_violation || factory_stacked_violation {
// [STO-022]
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),
StorageSlot { address, slot },
))
}
StorageRestriction::Banned(slot) => {
// [STO-*]
Expand Down Expand Up @@ -1178,10 +1184,41 @@ mod tests {
)]
);

// staked causes no errors
// staked only factory causes errors
context.entity_infos.factory.as_mut().unwrap().is_staked = true;
context.entity_infos.paymaster.as_mut().unwrap().is_staked = false;
let res = simulator.gather_context_violations(&mut context);
assert_eq!(
res.unwrap(),
vec![SimulationViolation::AssociatedStorageDuringDeploy(
Some(Entity::paymaster(paymaster_address)),
StorageSlot {
address: external_access_address,
slot: sender_address.as_bytes().into()
}
)]
);

// staked only paymaster causes errors
context.entity_infos.factory.as_mut().unwrap().is_staked = false;
context.entity_infos.paymaster.as_mut().unwrap().is_staked = true;
let res = simulator.gather_context_violations(&mut context);
assert_eq!(
res.unwrap(),
vec![SimulationViolation::AssociatedStorageDuringDeploy(
Some(Entity::paymaster(paymaster_address)),
StorageSlot {
address: external_access_address,
slot: sender_address.as_bytes().into()
}
)]
);
// staked both paymaster and factory cause 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());

}

#[tokio::test]
Expand Down

0 comments on commit b6930b3

Please sign in to comment.