Skip to content

Commit

Permalink
[audit-fix(#5)] Alloyed asset normalization factor lacks validation
Browse files Browse the repository at this point in the history
  • Loading branch information
iboss-ptk committed May 3, 2024
1 parent 67c1b19 commit 407cf32
Showing 1 changed file with 39 additions and 2 deletions.
41 changes: 39 additions & 2 deletions contracts/transmuter/src/alloyed_asset.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,15 @@ impl<'a> AlloyedAsset<'a> {
&self,
store: &mut dyn Storage,
factor: Uint128,
) -> StdResult<()> {
self.normalization_factor.save(store, &factor)
) -> Result<(), ContractError> {
ensure!(
factor > Uint128::zero(),
ContractError::NormalizationFactorMustBePositive {}
);

self.normalization_factor
.save(store, &factor)
.map_err(Into::into)
}

/// calculate the amount of alloyed asset to mint/burn
Expand Down Expand Up @@ -299,4 +306,34 @@ mod tests {

assert_eq!(amount.unwrap(), Uint128::from(83u128));
}

#[test]
fn test_set_normalization_factor() {
let alloyed_assets =
AlloyedAsset::new("alloyed_denom", "alloyed_denom_normalization_factor");
let mut deps = mock_dependencies();

let alloyed_denom = "alloyed_denom".to_string();
alloyed_assets
.set_alloyed_denom(&mut deps.storage, &alloyed_denom)
.unwrap();

let err = alloyed_assets
.set_normalization_factor(&mut deps.storage, Uint128::zero())
.unwrap_err();

assert_eq!(err, ContractError::NormalizationFactorMustBePositive {});

let normaliztion_factor = Uint128::from(100u128);
alloyed_assets
.set_normalization_factor(&mut deps.storage, normaliztion_factor)
.unwrap();

assert_eq!(
alloyed_assets
.get_normalization_factor(deps.as_ref().storage)
.unwrap(),
normaliztion_factor
);
}
}

0 comments on commit 407cf32

Please sign in to comment.