From ea3a682dbe543cc72a28f2a44c4654a4f78d4d70 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 28 Jul 2021 09:00:17 +0000 Subject: [PATCH] fix: only enable sponsoring if rate limit is on --- --- a/pallets/contract-helpers/src/lib.rs +++ b/pallets/contract-helpers/src/lib.rs @@ -72,9 +72,18 @@ Hasher2 = Twox128, Key2 = T::AccountId, Value = T::BlockNumber, - QueryKind = OptionQuery, + QueryKind = ValueQuery, >; + impl Pallet { + pub fn allowed(contract: T::AccountId, user: T::AccountId, default: bool) -> bool { + if !>::get(&contract) { + return default; + } + >::get(&contract, &user) || >::get(contract) == user + } + } + #[pallet::call] impl Pallet { #[pallet::weight(0)] @@ -194,10 +203,7 @@ { let called_contract: T::AccountId = T::Lookup::lookup((*dest).clone()).unwrap_or_default(); - if >::get(&called_contract) - && !>::get(&called_contract, who) - && &>::get(&called_contract) != who - { + if !>::allowed(called_contract, who.clone(), true) { return Err(transaction_validity::InvalidTransaction::Call.into()); } } @@ -254,7 +260,9 @@ { let called_contract: T::AccountId = T::Lookup::lookup((*dest).clone()).unwrap_or_default(); - if >::get(&called_contract) { + if >::get(&called_contract) + && >::allowed(called_contract.clone(), who.clone(), false) + { let last_tx_block = SponsorBasket::::get(&called_contract, &who); let block_number = >::block_number() as T::BlockNumber; let rate_limit = SponsoringRateLimit::::get(&called_contract); -- gitstuff