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

[PLAT-803] Split AvatarVersion #310

Merged
merged 2 commits into from
Jun 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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