Skip to content
This repository has been archived by the owner on May 15, 2024. It is now read-only.

Commit

Permalink
[PLAT-803] Split AvatarVersion (#310)
Browse files Browse the repository at this point in the history
* * Separated AvatarVersion into DnaEncoding and LogicGeneration

* * Clippy and test fixes
  • Loading branch information
DidacSF authored Jun 19, 2023
1 parent 802982e commit 4372002
Show file tree
Hide file tree
Showing 11 changed files with 51 additions and 67 deletions.
9 changes: 6 additions & 3 deletions pallets/ajuna-awesome-avatars/benchmarking/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,8 @@ fn create_seasons<T: Config>(n: usize) -> Result<(), &'static str> {
upgrade_storage: 1_000_000_000_000_u64.unique_saturated_into(), // 1 BAJU
prepare_avatar: 5_000_000_000_000_u64.unique_saturated_into(), // 5 BAJU
},
mint_logic: LogicGeneration::First,
forge_logic: LogicGeneration::First,
},
);
}
Expand Down Expand Up @@ -151,7 +153,6 @@ fn create_avatars<T: Config>(name: &'static str, n: u32) -> Result<(), &'static
payment: MintPayment::Free,
pack_size: MintPackSize::One,
pack_type: PackType::Material,
version: AvatarVersion::V1,
},
)?;
}
Expand Down Expand Up @@ -211,7 +212,7 @@ benchmarks! {
PlayerConfigs::<T>::mutate(&caller, |account| account.free_mints = MintCount::MAX);

let mint_option = MintOption { payment: MintPayment::Free, pack_size: MintPackSize::Six,
pack_type: PackType::Material, version: AvatarVersion::V1 };
pack_type: PackType::Material, };
}: mint(RawOrigin::Signed(caller.clone()), mint_option)
verify {
let n = n as usize;
Expand All @@ -231,7 +232,7 @@ benchmarks! {
CurrencyOf::<T>::make_free_balance_be(&caller, mint_fee);

let mint_option = MintOption { payment: MintPayment::Normal, pack_size: MintPackSize::Six,
pack_type: PackType::Material, version: AvatarVersion::V1 };
pack_type: PackType::Material };
}: mint(RawOrigin::Signed(caller.clone()), mint_option)
verify {
let n = n as usize;
Expand Down Expand Up @@ -446,6 +447,8 @@ benchmarks! {
upgrade_storage: BalanceOf::<T>::unique_saturated_from(u128::MAX),
prepare_avatar: BalanceOf::<T>::unique_saturated_from(u128::MAX),
},
mint_logic: LogicGeneration::First,
forge_logic: LogicGeneration::First,
};
}: _(RawOrigin::Signed(organizer), season_id, season.clone())
verify {
Expand Down
21 changes: 10 additions & 11 deletions pallets/ajuna-awesome-avatars/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1054,20 +1054,19 @@ pub mod pallet {

/// Mint a new avatar.
pub(crate) fn do_mint(player: &T::AccountId, mint_option: &MintOption) -> DispatchResult {
let season_id = CurrentSeasonStatus::<T>::get().season_id;
let (season_id, season) = Self::current_season_with_id()?;

Self::ensure_for_mint(player, &season_id, mint_option)?;

let generated_avatar_ids = match mint_option.version {
AvatarVersion::V1 => MinterV1::<T>::mint(player, &season_id, mint_option),
AvatarVersion::V2 => MinterV2::<T>::mint(player, &season_id, mint_option),
let generated_avatar_ids = match season.mint_logic {
LogicGeneration::First => MinterV1::<T>::mint(player, &season_id, mint_option),
LogicGeneration::Second => MinterV2::<T>::mint(player, &season_id, mint_option),
}?;

let GlobalConfig { mint, .. } = GlobalConfigs::<T>::get();
let (_, Season { fee, .. }) = Self::current_season_with_id()?;
match mint_option.payment {
MintPayment::Normal => {
let fee = fee.mint.fee_for(&mint_option.pack_size);
let fee = season.fee.mint.fee_for(&mint_option.pack_size);
T::Currency::withdraw(player, fee, WithdrawReasons::FEE, AllowDeath)?;
Self::deposit_into_treasury(&season_id, fee);
},
Expand Down Expand Up @@ -1122,18 +1121,18 @@ pub mod pallet {
let (leader, sacrifice_ids, sacrifices) =
Self::ensure_for_forge(player, leader_id, sacrifice_ids, &season_id, &season)?;

let input_leader = (*leader_id, leader.clone());
let input_leader = (*leader_id, leader);
let input_sacrifices =
sacrifice_ids.into_iter().zip(sacrifices).collect::<Vec<ForgeItem<T>>>();
let (output_leader, output_other) = match leader.version {
AvatarVersion::V1 => ForgerV1::<T>::forge(
let (output_leader, output_other) = match season.forge_logic {
LogicGeneration::First => ForgerV1::<T>::forge(
player,
season_id,
&season,
input_leader.clone(),
input_sacrifices,
),
AvatarVersion::V2 => ForgerV2::<T>::forge(
LogicGeneration::Second => ForgerV2::<T>::forge(
player,
season_id,
&season,
Expand Down Expand Up @@ -1290,7 +1289,7 @@ pub mod pallet {
let avatar = Self::ensure_ownership(player, id)?;
ensure!(avatar.season_id == *season_id, Error::<T>::IncorrectAvatarSeason);
ensure!(
avatar.version == leader.version,
avatar.encoding == leader.encoding,
Error::<T>::IncompatibleAvatarVersions
);
Self::ensure_unlocked(id)?;
Expand Down
6 changes: 4 additions & 2 deletions pallets/ajuna-awesome-avatars/src/migration/v5.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ impl OldAvatar {
fn migrate_to_v5(self) -> Avatar {
Avatar {
season_id: self.season_id,
version: AvatarVersion::V1,
encoding: DnaEncoding::V1,
dna: self.dna,
souls: self.souls,
}
Expand Down Expand Up @@ -107,6 +107,8 @@ impl<T: Config> OldSeason<T> {
upgrade_storage: 1_000_000_000_000_u64.unique_saturated_into(), // 1 BAJU
prepare_avatar: 5_000_000_000_000_u64.unique_saturated_into(), // 5 BAJU
},
mint_logic: LogicGeneration::First,
forge_logic: LogicGeneration::First,
}
}
}
Expand Down Expand Up @@ -299,7 +301,7 @@ impl<T: Config> OnRuntimeUpgrade for MigrateToV5<T> {

// Check all migrated avatars are of version 1.
assert!(Avatars::<T>::iter_values()
.all(|(_account, avatar)| avatar.version == AvatarVersion::V1));
.all(|(_account, avatar)| avatar.encoding == DnaEncoding::V1));

assert!(Seasons::<T>::get(1).unwrap().trade_filters.is_empty());

Expand Down
35 changes: 4 additions & 31 deletions pallets/ajuna-awesome-avatars/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -804,13 +804,11 @@ mod minting {
payment: MintPayment::Normal,
pack_size: MintPackSize::One,
pack_type: PackType::Material,
version: AvatarVersion::V1,
};
let free_mint = MintOption {
payment: MintPayment::Free,
pack_size: MintPackSize::One,
pack_type: PackType::Material,
version: AvatarVersion::V1,
};

ExtBuilder::default()
Expand Down Expand Up @@ -988,7 +986,6 @@ mod minting {
pack_size: MintPackSize::One,
payment: payment.clone(),
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));
match payment {
Expand Down Expand Up @@ -1036,7 +1033,6 @@ mod minting {
pack_size: MintPackSize::Three,
payment: payment.clone(),
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));
match payment {
Expand Down Expand Up @@ -1078,7 +1074,6 @@ mod minting {
pack_size: MintPackSize::Six,
payment: payment.clone(),
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));
match payment {
Expand Down Expand Up @@ -1125,7 +1120,6 @@ mod minting {
pack_size: MintPackSize::One,
payment: payment.clone(),
pack_type: PackType::Material,
version: AvatarVersion::V1,
}
));
minted_count += 1;
Expand All @@ -1148,7 +1142,6 @@ mod minting {
pack_size: MintPackSize::One,
payment: payment.clone(),
pack_type: PackType::Material,
version: AvatarVersion::V1
}
),
Error::<Test>::SeasonClosed
Expand Down Expand Up @@ -1204,7 +1197,6 @@ mod minting {
pack_size: count.clone(),
payment,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
),
Error::<Test>::MintClosed
Expand All @@ -1226,7 +1218,6 @@ mod minting {
pack_size: count.clone(),
payment,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
),
DispatchError::BadOrigin
Expand All @@ -1238,7 +1229,10 @@ mod minting {

#[test]
fn mint_should_reject_non_whitelisted_accounts_when_season_is_inactive() {
let season = Season::default();

ExtBuilder::default()
.seasons(&[(SEASON_ID, season)])
.balances(&[(ALICE, 1_234_567_890_123_456)])
.free_mints(&[(ALICE, 0)])
.build()
Expand All @@ -1252,7 +1246,6 @@ mod minting {
pack_size: count.clone(),
payment,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
),
Error::<Test>::SeasonClosed
Expand Down Expand Up @@ -1292,7 +1285,6 @@ mod minting {
pack_size: count.clone(),
payment,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
),
Error::<Test>::MaxOwnershipReached
Expand Down Expand Up @@ -1361,7 +1353,6 @@ mod minting {
pack_size: MintPackSize::One,
payment: payment.clone(),
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));

Expand All @@ -1374,7 +1365,6 @@ mod minting {
pack_size: MintPackSize::One,
payment: payment.clone(),
pack_type: PackType::Material,
version: AvatarVersion::V1,
}
),
Error::<Test>::MintCooldown
Expand All @@ -1389,7 +1379,6 @@ mod minting {
pack_size: MintPackSize::One,
payment: MintPayment::Normal,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));

Expand Down Expand Up @@ -1420,7 +1409,6 @@ mod minting {
pack_size: mint_count,
payment: MintPayment::Normal,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
),
Error::<Test>::InsufficientBalance
Expand All @@ -1435,7 +1423,6 @@ mod minting {
pack_size: mint_count,
payment: MintPayment::Free,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
),
Error::<Test>::InsufficientFreeMints
Expand Down Expand Up @@ -1574,7 +1561,6 @@ mod forging {
pack_size: MintPackSize::Three,
payment: MintPayment::Normal,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));
assert_ok!(AAvatars::mint(
Expand All @@ -1583,7 +1569,6 @@ mod forging {
pack_size: MintPackSize::One,
payment: MintPayment::Normal,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));

Expand Down Expand Up @@ -1648,7 +1633,6 @@ mod forging {
pack_size: MintPackSize::One,
payment: MintPayment::Normal,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));
let leader_id = Owners::<Test>::get(BOB, SEASON_ID)[0];
Expand Down Expand Up @@ -1700,7 +1684,6 @@ mod forging {
pack_size: MintPackSize::One,
payment: MintPayment::Normal,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
),
Error::<Test>::PrematureSeasonEnd
Expand Down Expand Up @@ -1815,7 +1798,6 @@ mod forging {
pack_size: MintPackSize::Six,
payment: MintPayment::Free,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));

Expand Down Expand Up @@ -1895,7 +1877,6 @@ mod forging {
pack_size: MintPackSize::Six,
payment: MintPayment::Free,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));

Expand Down Expand Up @@ -1953,7 +1934,6 @@ mod forging {
pack_size: MintPackSize::Six,
payment: MintPayment::Free,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));
let leader_id = Owners::<Test>::get(ALICE, SEASON_ID)[0];
Expand Down Expand Up @@ -2072,7 +2052,6 @@ mod forging {
pack_size: MintPackSize::Three,
payment: MintPayment::Free,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));
}
Expand Down Expand Up @@ -2129,7 +2108,6 @@ mod forging {
pack_size: MintPackSize::One,
payment: MintPayment::Free,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));
}
Expand Down Expand Up @@ -2167,7 +2145,6 @@ mod forging {
pack_size: MintPackSize::One,
payment: MintPayment::Free,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));
}
Expand Down Expand Up @@ -2216,7 +2193,6 @@ mod forging {
pack_size: MintPackSize::One,
payment: MintPayment::Free,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));
}
Expand Down Expand Up @@ -2259,7 +2235,6 @@ mod forging {
pack_size: MintPackSize::Six,
payment: MintPayment::Normal,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));
assert_ok!(AAvatars::mint(
Expand All @@ -2268,7 +2243,6 @@ mod forging {
pack_size: MintPackSize::Six,
payment: MintPayment::Normal,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));

Expand Down Expand Up @@ -3104,7 +3078,6 @@ mod nft_transfer {
pack_size: MintPackSize::Three,
payment: MintPayment::Normal,
pack_type: PackType::Material,
version: AvatarVersion::V1
}
));
let avatar_ids = Owners::<Test>::get(ALICE, SEASON_ID);
Expand All @@ -3131,7 +3104,7 @@ mod nft_transfer {
season_id: 1,
dna: bounded_vec![0x20, 0x20, 0x23, 0x22, 0x10, 0x32, 0x12, 0x10],
souls: 34,
version: AvatarVersion::V1,
encoding: DnaEncoding::V1,
}
);

Expand Down
Loading

0 comments on commit 4372002

Please sign in to comment.