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

difftreelog

feat evm helpers method to set rate limit

Yaroslav Bolyukin2021-07-28parent: #a386d99.patch.diff
in: master

2 files changed

modifiedpallets/evm-contract-helpers/src/eth.rsdiffbeforeafterboth
--- a/pallets/evm-contract-helpers/src/eth.rs
+++ b/pallets/evm-contract-helpers/src/eth.rs
@@ -37,6 +37,19 @@
 		Ok(())
 	}
 
+	fn set_sponsoring_rate_limit(
+		&mut self,
+		caller: caller,
+		contract: address,
+		rate_limit: uint32,
+	) -> Result<void> {
+		self.0.consume_sload()?;
+		<Pallet<T>>::ensure_owner(contract, caller)?;
+		self.0.consume_sstore()?;
+		<Pallet<T>>::set_sponsoring_rate_limit(contract, rate_limit.into());
+		Ok(())
+	}
+
 	fn allowed(&self, contract: address, user: address) -> Result<bool> {
 		self.0.consume_sload()?;
 		Ok(<Pallet<T>>::allowed(contract, user))
modifiedpallets/evm-contract-helpers/src/lib.rsdiffbeforeafterboth
before · pallets/evm-contract-helpers/src/lib.rs
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	}1718	#[pallet::error]19	pub enum Error<T> {20		/// This method is only executable by owner21		NoPermission,22	}2324	#[pallet::pallet]25	#[pallet::generate_store(pub(super) trait Store)]26	pub struct Pallet<T>(_);2728	#[pallet::storage]29	pub(super) type Owner<T: Config> =30		StorageMap<Hasher = Twox128, Key = H160, Value = H160, QueryKind = ValueQuery>;3132	#[pallet::storage]33	pub(super) type SelfSponsoring<T: Config> =34		StorageMap<Hasher = Twox128, Key = H160, Value = bool, QueryKind = ValueQuery>;3536	#[pallet::storage]37	pub(super) type SponsoringRateLimit<T: Config> =38		StorageMap<Hasher = Twox128, Key = H160, Value = T::BlockNumber, QueryKind = ValueQuery>;3940	#[pallet::storage]41	pub(super) type SponsorBasket<T: Config> = StorageDoubleMap<42		Hasher1 = Twox128,43		Key1 = H160,44		Hasher2 = Twox128,45		Key2 = H160,46		Value = T::BlockNumber,47		QueryKind = OptionQuery,48	>;4950	#[pallet::storage]51	pub(super) type AllowlistEnabled<T: Config> =52		StorageMap<Hasher = Twox128, Key = H160, Value = bool, QueryKind = ValueQuery>;5354	#[pallet::storage]55	pub(super) type Allowlist<T: Config> = StorageDoubleMap<56		Hasher1 = Twox128,57		Key1 = H160,58		Hasher2 = Twox128,59		Key2 = H160,60		Value = bool,61		QueryKind = ValueQuery,62	>;6364	impl<T: Config> Pallet<T> {65		pub fn toggle_sponsoring(contract: H160, enabled: bool) {66			<SelfSponsoring<T>>::insert(contract, enabled);67		}6869		pub fn allowed(contract: H160, user: H160) -> bool {70			if !<AllowlistEnabled<T>>::get(contract) {71				return true;72			}73			<Allowlist<T>>::get(&contract, &user) || <Owner<T>>::get(&contract) == user74		}7576		pub fn toggle_allowlist(contract: H160, enabled: bool) {77			<AllowlistEnabled<T>>::insert(contract, enabled)78		}7980		pub fn toggle_allowed(contract: H160, user: H160, allowed: bool) {81			<Allowlist<T>>::insert(contract, user, allowed);82		}8384		pub fn ensure_owner(contract: H160, user: H160) -> Result<()> {85			ensure!(<Owner<T>>::get(&contract) == user, "no permission");86			Ok(())87		}88	}89}