difftreelog
misk: revert owners storage
in: master
2 files changed
pallets/evm-contract-helpers/src/eth.rsdiffbeforeafterboth--- 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<T: Config> ContractHelpers<T> {
fn contract_owner(&self, contract_address: address) -> Result<address> {
- Ok(<Pallet<T>>::contract_owner(contract_address)
- .map_err(dispatch_to_evm::<T>)?
- .as_eth()
- .clone())
+ Ok(<Owner<T>>::get(contract_address))
}
fn sponsoring_enabled(&self, contract_address: address) -> Result<bool> {
@@ -65,7 +62,7 @@
contract_address: address,
enabled: bool,
) -> Result<void> {
- <Pallet<T>>::ensure_owner(contract_address, caller)?;
+ <Pallet<T>>::ensure_owner(contract_address, caller).map_err(dispatch_to_evm::<T>)?;
<Pallet<T>>::toggle_sponsoring(contract_address, enabled);
Ok(())
}
@@ -76,7 +73,7 @@
contract_address: address,
mode: uint8,
) -> Result<void> {
- <Pallet<T>>::ensure_owner(contract_address, caller)?;
+ <Pallet<T>>::ensure_owner(contract_address, caller).map_err(dispatch_to_evm::<T>)?;
let mode = SponsoringModeT::from_eth(mode).ok_or("unknown mode")?;
<Pallet<T>>::set_sponsoring_mode(contract_address, mode);
Ok(())
@@ -92,7 +89,7 @@
contract_address: address,
rate_limit: uint32,
) -> Result<void> {
- <Pallet<T>>::ensure_owner(contract_address, caller)?;
+ <Pallet<T>>::ensure_owner(contract_address, caller).map_err(dispatch_to_evm::<T>)?;
<Pallet<T>>::set_sponsoring_rate_limit(contract_address, rate_limit.into());
Ok(())
}
@@ -105,7 +102,7 @@
fn allowed(&self, contract_address: address, user: address) -> Result<bool> {
self.0.consume_sload()?;
- Ok(<Pallet<T>>::allowed(contract_address, T::CrossAccountId::from_eth(user)))
+ Ok(<Pallet<T>>::allowed(contract_address, user))
}
fn allowlist_enabled(&self, contract_address: address) -> Result<bool> {
@@ -118,7 +115,7 @@
contract_address: address,
enabled: bool,
) -> Result<void> {
- <Pallet<T>>::ensure_owner(contract_address, caller)?;
+ <Pallet<T>>::ensure_owner(contract_address, caller).map_err(dispatch_to_evm::<T>)?;
<Pallet<T>>::toggle_allowlist(contract_address, enabled);
Ok(())
}
@@ -130,7 +127,7 @@
user: address,
allowed: bool,
) -> Result<void> {
- <Pallet<T>>::ensure_owner(contract_address, caller)?;
+ <Pallet<T>>::ensure_owner(contract_address, caller).map_err(dispatch_to_evm::<T>)?;
<Pallet<T>>::toggle_allowed(contract_address, user, allowed);
Ok(())
}
@@ -149,7 +146,7 @@
fn call(handle: &mut impl PrecompileHandle) -> Option<PrecompileResult> {
// TODO: Extract to another OnMethodCall handler
if <AllowlistEnabled<T>>::get(handle.code_address())
- && !<Pallet<T>>::allowed(handle.code_address(), T::CrossAccountId::from_eth(handle.context().caller))
+ && !<Pallet<T>>::allowed(handle.code_address(), handle.context().caller)
{
return Some(Err(PrecompileFailure::Revert {
exit_status: ExitRevert::Reverted,
@@ -178,7 +175,7 @@
pub struct HelpersOnCreate<T: Config>(PhantomData<*const T>);
impl<T: Config> OnCreate<T> for HelpersOnCreate<T> {
fn on_create(owner: H160, contract: H160) {
- <Owner<T>>::insert(contract, T::CrossAccountId::from_eth(owner));
+ <Owner<T>>::insert(contract, owner);
}
}
@@ -187,18 +184,19 @@
for HelpersContractSponsoring<T>
{
fn get_sponsor(who: &T::CrossAccountId, call: &(H160, Vec<u8>)) -> Option<T::CrossAccountId> {
- let mode = <Pallet<T>>::sponsoring_mode(call.0);
+ let (contract, _) = call;
+ let mode = <Pallet<T>>::sponsoring_mode(*contract);
if mode == SponsoringModeT::Disabled {
return None;
}
- if mode == SponsoringModeT::Allowlisted && !<Pallet<T>>::allowed(call.0, who.clone()) {
+ if mode == SponsoringModeT::Allowlisted && !<Pallet<T>>::allowed(*contract, *who.as_eth()) {
return None;
}
let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;
- if let Some(last_tx_block) = <SponsorBasket<T>>::get(&call.0, who.as_eth()) {
- let limit = <SponsoringRateLimit<T>>::get(&call.0);
+ if let Some(last_tx_block) = <SponsorBasket<T>>::get(contract, who.as_eth()) {
+ let limit = <SponsoringRateLimit<T>>::get(contract);
let timeout = last_tx_block + limit;
if block_number < timeout {
@@ -206,9 +204,9 @@
}
}
- <SponsorBasket<T>>::insert(&call.0, who.as_eth(), block_number);
+ <SponsorBasket<T>>::insert(contract, who.as_eth(), block_number);
- let sponsor = T::CrossAccountId::from_eth(call.0);
+ let sponsor = T::CrossAccountId::from_eth(*contract);
Some(sponsor)
}
}
pallets/evm-contract-helpers/src/lib.rsdiffbeforeafterboth61 /// * **Value** - owner for contract.61 /// * **Value** - owner for contract.62 #[pallet::storage]62 #[pallet::storage]63 pub(super) type Owner<T: Config> = StorageMap<63 pub(super) type Owner<T: Config> =64 Hasher = Twox128,64 StorageMap<Hasher = Twox128, Key = H160, Value = H160, QueryKind = ValueQuery>;65 Key = H160,66 Value = T::CrossAccountId,67 QueryKind = OptionQuery,68 >;696570 #[pallet::storage]66 #[pallet::storage]97 >;93 >;989499 #[pallet::storage]95 #[pallet::storage]100 #[deprecated]101 pub(super) type SponsorBasket<T: Config> = StorageDoubleMap<96 pub(super) type SponsorBasket<T: Config> = StorageDoubleMap<102 Hasher1 = Twox128,97 Hasher1 = Twox128,103 Key1 = H160,98 Key1 = H160,119 StorageMap<Hasher = Twox128, Key = H160, Value = bool, QueryKind = ValueQuery>;114 StorageMap<Hasher = Twox128, Key = H160, Value = bool, QueryKind = ValueQuery>;120115121 #[pallet::storage]116 #[pallet::storage]122 #[deprecated]123 pub(super) type Allowlist<T: Config> = StorageDoubleMap<117 pub(super) type Allowlist<T: Config> = StorageDoubleMap<124 Hasher1 = Twox128,118 Hasher1 = Twox128,125 Key1 = H160,119 Key1 = H160,134 fn on_runtime_upgrade() -> Weight {128 fn on_runtime_upgrade() -> Weight {135 let storage_version = StorageVersion::get::<Pallet<T>>();129 let storage_version = StorageVersion::get::<Pallet<T>>();136 if storage_version < StorageVersion::new(1) {130 if storage_version < StorageVersion::new(1) {137 <Owner<T>>::translate_values::<H160, _>(|address| Some(T::CrossAccountId::from_eth(address)));138 }131 }139132140 0133 0173 <SponsoringRateLimit<T>>::insert(contract, rate_limit);166 <SponsoringRateLimit<T>>::insert(contract, rate_limit);174 }167 }175168176 pub fn allowed(contract: H160, user: T::CrossAccountId) -> bool {169 pub fn allowed(contract: H160, user: H160) -> bool {177 <Allowlist<T>>::get(&contract, user.as_eth())170 <Allowlist<T>>::get(&contract, &user) || <Owner<T>>::get(&contract) == user178 || Pallet::<T>::contract_owner(contract).is_ok_and(|owner| *owner == user)179 }171 }180172181 pub fn toggle_allowlist(contract: H160, enabled: bool) {173 pub fn toggle_allowlist(contract: H160, enabled: bool) {186 <Allowlist<T>>::insert(contract, user, allowed);178 <Allowlist<T>>::insert(contract, user, allowed);187 }179 }188180189 pub fn ensure_owner(contract: H160, user: H160) -> evm_coder::execution::Result<()> {181 pub fn ensure_owner(contract: H160, user: H160) -> DispatchResult {190 ensure!(Pallet::<T>::contract_owner(contract).is_ok_and(|owner| *owner.as_eth() == user), "no permission");182 ensure!(<Owner<T>>::get(&contract) == user, Error::<T>::NoPermission);191 Ok(())183 Ok(())192 }184 }193 }185 }194186195 impl<T: Config> Pallet<T> {187 impl<T: Config> Pallet<T> {196 pub fn contract_owner(contract: H160) -> Result<T::CrossAccountId, DispatchError> {188 pub fn contract_owner(contract: H160) -> H160 {197 Ok(<Owner<T>>::get(contract).ok_or::<Error<T>>(Error::NoContractOwner)?)189 <Owner<T>>::get(contract)198 }190 }199 }191 }200}192}