Skip to content

Commit

Permalink
chore: instantiatable names pallet (#779)
Browse files Browse the repository at this point in the history
Part of KILTprotocol/ticket#3650.

Makes the web3name pallet instantiatable. I did not rename the
pallet/crate itself, and was not sure if I wanted to do it. That could
break more things and I thought we might want to leave everything else
as-is.
  • Loading branch information
ntn-x2 authored Nov 6, 2024
1 parent 09b67ae commit 37ec4d1
Show file tree
Hide file tree
Showing 7 changed files with 194 additions and 188 deletions.
110 changes: 56 additions & 54 deletions pallets/pallet-web3-names/src/benchmarking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
// If you feel like getting in touch with us, you can do so at [email protected]
#![cfg(feature = "runtime-benchmarks")]

use frame_benchmarking::{account, benchmarks};
use frame_benchmarking::{account, benchmarks_instance_pallet};
use frame_support::{
pallet_prelude::EnsureOrigin,
sp_runtime::{traits::Zero, SaturatedConversion},
Expand All @@ -41,163 +41,165 @@ use crate::{
const CALLER_SEED: u32 = 0;
const OWNER_SEED: u32 = 1;

fn make_free_for_did<T: Config>(account: &AccountIdOf<T>)
fn make_free_for_did<T, I>(account: &AccountIdOf<T>)
where
<T as Config>::Currency: Mutate<T::AccountId>,
T: Config<I>,
I: 'static,
<T as Config<I>>::Currency: Mutate<T::AccountId>,
{
let balance = <CurrencyOf<T> as Inspect<AccountIdOf<T>>>::minimum_balance()
+ <T as Config>::Deposit::get()
+ <T as Config>::Deposit::get();
CurrencyOf::<T>::set_balance(account, balance);
let balance = <CurrencyOf<T, I> as Inspect<AccountIdOf<T>>>::minimum_balance()
+ <T as Config<I>>::Deposit::get()
+ <T as Config<I>>::Deposit::get();
CurrencyOf::<T, I>::set_balance(account, balance);
}

fn generate_web3_name_input(length: usize) -> Vec<u8> {
vec![b'1'; length]
}

benchmarks! {
benchmarks_instance_pallet! {
where_clause {
where
T::AccountId: From<sr25519::Public>,
T::Web3NameOwner: From<T::AccountId>,
T::OwnerOrigin: GenerateBenchmarkOrigin<T::RuntimeOrigin, T::AccountId, T::Web3NameOwner>,
T::BanOrigin: EnsureOrigin<T::RuntimeOrigin>,
<T as Config>::Currency: Mutate<T::AccountId>,
<T as Config<I>>::Currency: Mutate<T::AccountId>,
}

claim {
let n in (T::MinNameLength::get()) .. (T::MaxNameLength::get());
let caller: AccountIdOf<T> = account("caller", 0, CALLER_SEED);
let owner: Web3NameOwnerOf<T> = account("owner", 0, OWNER_SEED);
let owner: Web3NameOwnerOf<T, I> = account("owner", 0, OWNER_SEED);
let web3_name_input: BoundedVec<u8, T::MaxNameLength> = BoundedVec::try_from(generate_web3_name_input(n.saturated_into())).expect("BoundedVec creation should not fail.");
let web3_name_input_clone = web3_name_input.clone();
let origin = T::OwnerOrigin::generate_origin(caller.clone(), owner.clone());

make_free_for_did::<T>(&caller);
make_free_for_did::<T, I>(&caller);
}: _<T::RuntimeOrigin>(origin, web3_name_input_clone)
verify {
let web3_name = Web3NameOf::<T>::try_from(web3_name_input.to_vec()).unwrap();
assert!(Names::<T>::get(&owner).is_some());
assert!(Owner::<T>::get(&web3_name).is_some());
let web3_name = Web3NameOf::<T, I>::try_from(web3_name_input.to_vec()).unwrap();
assert!(Names::<T, I>::get(&owner).is_some());
assert!(Owner::<T, I>::get(&web3_name).is_some());
}

release_by_owner {
let caller: AccountIdOf<T> = account("caller", 0, CALLER_SEED);
let owner: Web3NameOwnerOf<T> = account("owner", 0, OWNER_SEED);
let owner: Web3NameOwnerOf<T, I> = account("owner", 0, OWNER_SEED);
let web3_name_input: BoundedVec<u8, T::MaxNameLength> = BoundedVec::try_from(generate_web3_name_input(T::MaxNameLength::get().saturated_into())).expect("BoundedVec creation should not fail.");
let origin = T::OwnerOrigin::generate_origin(caller.clone(), owner.clone());

make_free_for_did::<T>(&caller);
Pallet::<T>::claim(origin.clone(), web3_name_input.clone()).expect("Should register the claimed web3 name.");
make_free_for_did::<T, I>(&caller);
Pallet::<T, I>::claim(origin.clone(), web3_name_input.clone()).expect("Should register the claimed web3 name.");
}: _<T::RuntimeOrigin>(origin)
verify {
let web3_name = Web3NameOf::<T>::try_from(web3_name_input.to_vec()).unwrap();
assert!(Names::<T>::get(&owner).is_none());
assert!(Owner::<T>::get(&web3_name).is_none());
let web3_name = Web3NameOf::<T, I>::try_from(web3_name_input.to_vec()).unwrap();
assert!(Names::<T, I>::get(&owner).is_none());
assert!(Owner::<T, I>::get(&web3_name).is_none());
}

reclaim_deposit {
let n in (T::MinNameLength::get()) .. (T::MaxNameLength::get());
let caller: AccountIdOf<T> = account("caller", 0, CALLER_SEED);
let owner: Web3NameOwnerOf<T> = account("owner", 0, OWNER_SEED);
let owner: Web3NameOwnerOf<T, I> = account("owner", 0, OWNER_SEED);
let web3_name_input: BoundedVec<u8, T::MaxNameLength> = BoundedVec::try_from(generate_web3_name_input(n.saturated_into())).expect("BoundedVec creation should not fail.");
let web3_name_input_clone = web3_name_input.clone();
let did_origin = T::OwnerOrigin::generate_origin(caller.clone(), owner.clone());
let signed_origin = RawOrigin::Signed(caller.clone());

make_free_for_did::<T>(&caller);
Pallet::<T>::claim(did_origin, web3_name_input.clone()).expect("Should register the claimed web3 name.");
make_free_for_did::<T, I>(&caller);
Pallet::<T, I>::claim(did_origin, web3_name_input.clone()).expect("Should register the claimed web3 name.");
}: _(signed_origin, web3_name_input_clone)
verify {
let web3_name = Web3NameOf::<T>::try_from(web3_name_input.to_vec()).unwrap();
assert!(Names::<T>::get(&owner).is_none());
assert!(Owner::<T>::get(&web3_name).is_none());
let web3_name = Web3NameOf::<T, I>::try_from(web3_name_input.to_vec()).unwrap();
assert!(Names::<T, I>::get(&owner).is_none());
assert!(Owner::<T, I>::get(&web3_name).is_none());
}

ban {
let n in (T::MinNameLength::get()) .. (T::MaxNameLength::get());
let caller: AccountIdOf<T> = account("caller", 0, CALLER_SEED);
let owner: Web3NameOwnerOf<T> = account("owner", 0, OWNER_SEED);
let owner: Web3NameOwnerOf<T, I> = account("owner", 0, OWNER_SEED);
let web3_name_input: BoundedVec<u8, T::MaxNameLength> = BoundedVec::try_from(generate_web3_name_input(n.saturated_into())).expect("BoundedVec creation should not fail.");
let web3_name_input_clone = web3_name_input.clone();
let did_origin = T::OwnerOrigin::generate_origin(caller.clone(), owner.clone());
let ban_origin = RawOrigin::Root;

make_free_for_did::<T>(&caller);
Pallet::<T>::claim(did_origin, web3_name_input.clone()).expect("Should register the claimed web3 name.");
make_free_for_did::<T, I>(&caller);
Pallet::<T, I>::claim(did_origin, web3_name_input.clone()).expect("Should register the claimed web3 name.");
}: _(ban_origin, web3_name_input_clone)
verify {
let web3_name = Web3NameOf::<T>::try_from(web3_name_input.to_vec()).unwrap();
assert!(Names::<T>::get(&owner).is_none());
assert!(Owner::<T>::get(&web3_name).is_none());
assert!(Banned::<T>::get(&web3_name).is_some());
let web3_name = Web3NameOf::<T, I>::try_from(web3_name_input.to_vec()).unwrap();
assert!(Names::<T, I>::get(&owner).is_none());
assert!(Owner::<T, I>::get(&web3_name).is_none());
assert!(Banned::<T, I>::get(&web3_name).is_some());
}

unban {
let n in (T::MinNameLength::get()) .. (T::MaxNameLength::get());
let caller: AccountIdOf<T> = account("caller", 0, CALLER_SEED);
let owner: Web3NameOwnerOf<T> = account("owner", 0, OWNER_SEED);
let owner: Web3NameOwnerOf<T, I> = account("owner", 0, OWNER_SEED);
let web3_name_input: BoundedVec<u8, T::MaxNameLength> = BoundedVec::try_from(generate_web3_name_input(n.saturated_into())).expect("BoundedVec creation should not fail.");
let web3_name_input_clone = web3_name_input.clone();
let ban_origin = RawOrigin::Root;

make_free_for_did::<T>(&caller);
Pallet::<T>::ban(ban_origin.clone().into(), web3_name_input.clone()).expect("Should ban the web3 name.");
make_free_for_did::<T, I>(&caller);
Pallet::<T, I>::ban(ban_origin.clone().into(), web3_name_input.clone()).expect("Should ban the web3 name.");
}: _(ban_origin, web3_name_input_clone)
verify {
let web3_name = Web3NameOf::<T>::try_from(web3_name_input.to_vec()).unwrap();
assert!(Names::<T>::get(&owner).is_none());
assert!(Owner::<T>::get(&web3_name).is_none());
assert!(Banned::<T>::get(&web3_name).is_none());
let web3_name = Web3NameOf::<T, I>::try_from(web3_name_input.to_vec()).unwrap();
assert!(Names::<T, I>::get(&owner).is_none());
assert!(Owner::<T, I>::get(&web3_name).is_none());
assert!(Banned::<T, I>::get(&web3_name).is_none());
}

change_deposit_owner {
let deposit_owner_old: AccountIdOf<T> = account("caller", 0, CALLER_SEED);
let deposit_owner_new: AccountIdOf<T> = account("caller", 1, CALLER_SEED);
let owner: Web3NameOwnerOf<T> = account("owner", 0, OWNER_SEED);
let owner: Web3NameOwnerOf<T, I> = account("owner", 0, OWNER_SEED);
let web3_name_input: BoundedVec<u8, T::MaxNameLength> = BoundedVec::try_from(
generate_web3_name_input(T::MaxNameLength::get().saturated_into())
).expect("BoundedVec creation should not fail.");
let web3_name_input_clone = web3_name_input.clone();
let origin_create = T::OwnerOrigin::generate_origin(deposit_owner_old.clone(), owner.clone());

make_free_for_did::<T>(&deposit_owner_old);
make_free_for_did::<T>(&deposit_owner_new);
Pallet::<T>::claim(origin_create, web3_name_input.clone()).expect("Should register the claimed web3 name.");
make_free_for_did::<T, I>(&deposit_owner_old);
make_free_for_did::<T, I>(&deposit_owner_new);
Pallet::<T, I>::claim(origin_create, web3_name_input.clone()).expect("Should register the claimed web3 name.");

let origin = T::OwnerOrigin::generate_origin(deposit_owner_new.clone(), owner);
}: _<T::RuntimeOrigin>(origin)
verify {
let web3_name = Web3NameOf::<T>::try_from(web3_name_input.to_vec()).unwrap();
assert_eq!(Owner::<T>::get(&web3_name).expect("w3n should exists").deposit, Deposit {
let web3_name = Web3NameOf::<T, I>::try_from(web3_name_input.to_vec()).unwrap();
assert_eq!(Owner::<T, I>::get(&web3_name).expect("w3n should exists").deposit, Deposit {
owner: deposit_owner_new,
amount: <T as Config>::Deposit::get(),
amount: <T as Config<I>>::Deposit::get(),
});
}

update_deposit {
let deposit_owner: AccountIdOf<T> = account("caller", 0, CALLER_SEED);
let owner: Web3NameOwnerOf<T> = account("owner", 0, OWNER_SEED);
let owner: Web3NameOwnerOf<T, I> = account("owner", 0, OWNER_SEED);
let web3_name_input: BoundedVec<u8, T::MaxNameLength> = BoundedVec::try_from(
generate_web3_name_input(T::MaxNameLength::get().saturated_into())
).expect("BoundedVec creation should not fail.");
let web3_name = Web3NameOf::<T>::try_from(web3_name_input.to_vec()).unwrap();
let web3_name = Web3NameOf::<T, I>::try_from(web3_name_input.to_vec()).unwrap();

make_free_for_did::<T>(&deposit_owner);
insert_raw_w3n::<T>(
make_free_for_did::<T, I>(&deposit_owner);
insert_raw_w3n::<T, I>(
deposit_owner.clone(),
owner,
web3_name.clone(),
BlockNumberFor::<T>::zero(),
<T as Config>::Deposit::get() + <T as Config>::Deposit::get()
<T as Config<I>>::Deposit::get() + <T as Config<I>>::Deposit::get()
);

let origin = RawOrigin::Signed(deposit_owner.clone());
}: _(origin, web3_name_input)
verify {
assert_eq!(Owner::<T>::get(&web3_name).expect("w3n should exists").deposit, Deposit {
assert_eq!(Owner::<T, I>::get(&web3_name).expect("w3n should exists").deposit, Deposit {
owner: deposit_owner,
amount: <T as Config>::Deposit::get(),
amount: <T as Config<I>>::Deposit::get(),
});
}

Expand Down
Loading

0 comments on commit 37ec4d1

Please sign in to comment.