git.delta.rocks / unique-network / refs/commits / b6f32fd78e2b

difftreelog

source

pallets/evm-contract-helpers/src/lib.rs2.5 KiBsourcehistory
1#![cfg_attr(not(feature = "std"), no_std)]23pub use pallet::*;4pub use eth::*;5pub mod eth;67#[frame_support::pallet]8pub mod pallet {9	use evm_coder::execution::Result;10	use frame_support::pallet_prelude::*;11	use sp_core::H160;1213	#[pallet::config]14	pub trait Config: frame_system::Config + pallet_evm_coder_substrate::Config {15		type ContractAddress: Get<H160>;16		type DefaultSponsoringRateLimit: Get<Self::BlockNumber>;17	}1819	#[pallet::error]20	pub enum Error<T> {21		/// This method is only executable by owner22		NoPermission,23	}2425	#[pallet::pallet]26	#[pallet::generate_store(pub(super) trait Store)]27	pub struct Pallet<T>(_);2829	#[pallet::storage]30	pub(super) type Owner<T: Config> =31		StorageMap<Hasher = Twox128, Key = H160, Value = H160, QueryKind = ValueQuery>;3233	#[pallet::storage]34	pub(super) type SelfSponsoring<T: Config> =35		StorageMap<Hasher = Twox128, Key = H160, Value = bool, QueryKind = ValueQuery>;3637	#[pallet::storage]38	pub(super) type SponsoringRateLimit<T: Config> = StorageMap<39		Hasher = Twox128,40		Key = H160,41		Value = T::BlockNumber,42		QueryKind = ValueQuery,43		OnEmpty = T::DefaultSponsoringRateLimit,44	>;4546	#[pallet::storage]47	pub(super) type SponsorBasket<T: Config> = StorageDoubleMap<48		Hasher1 = Twox128,49		Key1 = H160,50		Hasher2 = Twox128,51		Key2 = H160,52		Value = T::BlockNumber,53		QueryKind = OptionQuery,54	>;5556	#[pallet::storage]57	pub(super) type AllowlistEnabled<T: Config> =58		StorageMap<Hasher = Twox128, Key = H160, Value = bool, QueryKind = ValueQuery>;5960	#[pallet::storage]61	pub(super) type Allowlist<T: Config> = StorageDoubleMap<62		Hasher1 = Twox128,63		Key1 = H160,64		Hasher2 = Twox128,65		Key2 = H160,66		Value = bool,67		QueryKind = ValueQuery,68	>;6970	impl<T: Config> Pallet<T> {71		pub fn toggle_sponsoring(contract: H160, enabled: bool) {72			<SelfSponsoring<T>>::insert(contract, enabled);73		}7475		pub fn set_sponsoring_rate_limit(contract: H160, rate_limit: T::BlockNumber) {76			<SponsoringRateLimit<T>>::insert(contract, rate_limit);77		}7879		pub fn allowed(contract: H160, user: H160) -> bool {80			<Allowlist<T>>::get(&contract, &user) || <Owner<T>>::get(&contract) == user81		}8283		pub fn toggle_allowlist(contract: H160, enabled: bool) {84			<AllowlistEnabled<T>>::insert(contract, enabled)85		}8687		pub fn toggle_allowed(contract: H160, user: H160, allowed: bool) {88			<Allowlist<T>>::insert(contract, user, allowed);89		}9091		pub fn ensure_owner(contract: H160, user: H160) -> Result<()> {92			ensure!(<Owner<T>>::get(&contract) == user, "no permission");93			Ok(())94		}95	}96}