From 6fbb7219f087c55e9c5183f81960ecda931884dc Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Wed, 03 Aug 2022 06:09:39 +0000 Subject: [PATCH] misk: revert owners storage --- --- a/pallets/evm-contract-helpers/src/eth.rs +++ b/pallets/evm-contract-helpers/src/eth.rs @@ -48,10 +48,7 @@ #[solidity_interface(name = "ContractHelpers")] impl ContractHelpers { fn contract_owner(&self, contract_address: address) -> Result
{ - Ok(>::contract_owner(contract_address) - .map_err(dispatch_to_evm::)? - .as_eth() - .clone()) + Ok(>::get(contract_address)) } fn sponsoring_enabled(&self, contract_address: address) -> Result { @@ -65,7 +62,7 @@ contract_address: address, enabled: bool, ) -> Result { - >::ensure_owner(contract_address, caller)?; + >::ensure_owner(contract_address, caller).map_err(dispatch_to_evm::)?; >::toggle_sponsoring(contract_address, enabled); Ok(()) } @@ -76,7 +73,7 @@ contract_address: address, mode: uint8, ) -> Result { - >::ensure_owner(contract_address, caller)?; + >::ensure_owner(contract_address, caller).map_err(dispatch_to_evm::)?; let mode = SponsoringModeT::from_eth(mode).ok_or("unknown mode")?; >::set_sponsoring_mode(contract_address, mode); Ok(()) @@ -92,7 +89,7 @@ contract_address: address, rate_limit: uint32, ) -> Result { - >::ensure_owner(contract_address, caller)?; + >::ensure_owner(contract_address, caller).map_err(dispatch_to_evm::)?; >::set_sponsoring_rate_limit(contract_address, rate_limit.into()); Ok(()) } @@ -105,7 +102,7 @@ fn allowed(&self, contract_address: address, user: address) -> Result { self.0.consume_sload()?; - Ok(>::allowed(contract_address, T::CrossAccountId::from_eth(user))) + Ok(>::allowed(contract_address, user)) } fn allowlist_enabled(&self, contract_address: address) -> Result { @@ -118,7 +115,7 @@ contract_address: address, enabled: bool, ) -> Result { - >::ensure_owner(contract_address, caller)?; + >::ensure_owner(contract_address, caller).map_err(dispatch_to_evm::)?; >::toggle_allowlist(contract_address, enabled); Ok(()) } @@ -130,7 +127,7 @@ user: address, allowed: bool, ) -> Result { - >::ensure_owner(contract_address, caller)?; + >::ensure_owner(contract_address, caller).map_err(dispatch_to_evm::)?; >::toggle_allowed(contract_address, user, allowed); Ok(()) } @@ -149,7 +146,7 @@ fn call(handle: &mut impl PrecompileHandle) -> Option { // TODO: Extract to another OnMethodCall handler if >::get(handle.code_address()) - && !>::allowed(handle.code_address(), T::CrossAccountId::from_eth(handle.context().caller)) + && !>::allowed(handle.code_address(), handle.context().caller) { return Some(Err(PrecompileFailure::Revert { exit_status: ExitRevert::Reverted, @@ -178,7 +175,7 @@ pub struct HelpersOnCreate(PhantomData<*const T>); impl OnCreate for HelpersOnCreate { fn on_create(owner: H160, contract: H160) { - >::insert(contract, T::CrossAccountId::from_eth(owner)); + >::insert(contract, owner); } } @@ -187,18 +184,19 @@ for HelpersContractSponsoring { fn get_sponsor(who: &T::CrossAccountId, call: &(H160, Vec)) -> Option { - let mode = >::sponsoring_mode(call.0); + let (contract, _) = call; + let mode = >::sponsoring_mode(*contract); if mode == SponsoringModeT::Disabled { return None; } - if mode == SponsoringModeT::Allowlisted && !>::allowed(call.0, who.clone()) { + if mode == SponsoringModeT::Allowlisted && !>::allowed(*contract, *who.as_eth()) { return None; } let block_number = >::block_number() as T::BlockNumber; - if let Some(last_tx_block) = >::get(&call.0, who.as_eth()) { - let limit = >::get(&call.0); + if let Some(last_tx_block) = >::get(contract, who.as_eth()) { + let limit = >::get(contract); let timeout = last_tx_block + limit; if block_number < timeout { @@ -206,9 +204,9 @@ } } - >::insert(&call.0, who.as_eth(), block_number); + >::insert(contract, who.as_eth(), block_number); - let sponsor = T::CrossAccountId::from_eth(call.0); + let sponsor = T::CrossAccountId::from_eth(*contract); Some(sponsor) } } --- a/pallets/evm-contract-helpers/src/lib.rs +++ b/pallets/evm-contract-helpers/src/lib.rs @@ -60,12 +60,8 @@ /// * **Key** - contract address. /// * **Value** - owner for contract. #[pallet::storage] - pub(super) type Owner = StorageMap< - Hasher = Twox128, - Key = H160, - Value = T::CrossAccountId, - QueryKind = OptionQuery, - >; + pub(super) type Owner = + StorageMap; #[pallet::storage] #[deprecated] @@ -97,7 +93,6 @@ >; #[pallet::storage] - #[deprecated] pub(super) type SponsorBasket = StorageDoubleMap< Hasher1 = Twox128, Key1 = H160, @@ -119,7 +114,6 @@ StorageMap; #[pallet::storage] - #[deprecated] pub(super) type Allowlist = StorageDoubleMap< Hasher1 = Twox128, Key1 = H160, @@ -134,7 +128,6 @@ fn on_runtime_upgrade() -> Weight { let storage_version = StorageVersion::get::>(); if storage_version < StorageVersion::new(1) { - >::translate_values::(|address| Some(T::CrossAccountId::from_eth(address))); } 0 @@ -173,9 +166,8 @@ >::insert(contract, rate_limit); } - pub fn allowed(contract: H160, user: T::CrossAccountId) -> bool { - >::get(&contract, user.as_eth()) - || Pallet::::contract_owner(contract).is_ok_and(|owner| *owner == user) + pub fn allowed(contract: H160, user: H160) -> bool { + >::get(&contract, &user) || >::get(&contract) == user } pub fn toggle_allowlist(contract: H160, enabled: bool) { @@ -186,15 +178,15 @@ >::insert(contract, user, allowed); } - pub fn ensure_owner(contract: H160, user: H160) -> evm_coder::execution::Result<()> { - ensure!(Pallet::::contract_owner(contract).is_ok_and(|owner| *owner.as_eth() == user), "no permission"); + pub fn ensure_owner(contract: H160, user: H160) -> DispatchResult { + ensure!(>::get(&contract) == user, Error::::NoPermission); Ok(()) } } impl Pallet { - pub fn contract_owner(contract: H160) -> Result { - Ok(>::get(contract).ok_or::>(Error::NoContractOwner)?) + pub fn contract_owner(contract: H160) -> H160 { + >::get(contract) } } } -- gitstuff