diff --git a/crates/radix-engine-toolkit/src/manifest_analysis/requirements/account_resources_withdrawn_are_not_deposited_back_requirement.rs b/crates/radix-engine-toolkit/src/manifest_analysis/requirements/account_resources_withdrawn_are_not_deposited_back_requirement.rs index ab086688..bd3d1f02 100644 --- a/crates/radix-engine-toolkit/src/manifest_analysis/requirements/account_resources_withdrawn_are_not_deposited_back_requirement.rs +++ b/crates/radix-engine-toolkit/src/manifest_analysis/requirements/account_resources_withdrawn_are_not_deposited_back_requirement.rs @@ -104,7 +104,20 @@ impl ManifestAnalyzerRequirementState .iter() .filter_map(|(resource_address, resource)| { let bounds = resource.bounds(); - if bounds.is_zero() { + + // There are two cases that we ignore: the first is when + // the bounds inform us that none of the resource is on + // the worktop and the second is when the bounds give us + // completely no information at all about the resource + // meaning that the analyzer can't either tell if they + // are on the worktop or not. This manifests itself with + // a lower bound of zero and an upper bound that's + // unbounded. + let is_zero = bounds.is_zero(); + let is_completely_unknown = bounds.lower_bound() + == LowerBound::Inclusive(dec!(0)) + && bounds.upper_bound() == UpperBound::unbounded(); + if is_zero || is_completely_unknown { None } else { Some(*resource_address)