difftreelog
chore replace u128 with CallContext
in: master
19 files changed
Cargo.lockdiffbeforeafterboth--- a/Cargo.lock
+++ b/Cargo.lock
@@ -5794,6 +5794,7 @@
"pallet-common",
"pallet-evm 6.0.0-dev (git+https://github.com/uniquenetwork/frontier?rev=89a37c5a489f426cc7a42d7b94019974093a052d)",
"pallet-evm-coder-substrate",
+ "pallet-evm-transaction-payment",
"parity-scale-codec 3.1.5",
"scale-info",
"sp-core",
@@ -6409,7 +6410,7 @@
[[package]]
name = "pallet-template-transaction-payment"
version = "3.0.0"
-source = "git+https://github.com/uniquenetwork/pallet-sponsoring?rev=a8ec4bf8d5ded662d96da6d8fb211b0bbf6617b3#a8ec4bf8d5ded662d96da6d8fb211b0bbf6617b3"
+source = "git+https://github.com/uniquenetwork/pallet-sponsoring?rev=9ee7d6e57e03a2575cbab79431774b56f170018e#9ee7d6e57e03a2575cbab79431774b56f170018e"
dependencies = [
"frame-benchmarking",
"frame-support",
@@ -12577,7 +12578,7 @@
[[package]]
name = "up-sponsorship"
version = "0.1.0"
-source = "git+https://github.com/uniquenetwork/pallet-sponsoring?rev=a8ec4bf8d5ded662d96da6d8fb211b0bbf6617b3#a8ec4bf8d5ded662d96da6d8fb211b0bbf6617b3"
+source = "git+https://github.com/uniquenetwork/pallet-sponsoring?rev=9ee7d6e57e03a2575cbab79431774b56f170018e#9ee7d6e57e03a2575cbab79431774b56f170018e"
dependencies = [
"impl-trait-for-tuples",
]
pallets/evm-contract-helpers/Cargo.tomldiffbeforeafterboth--- a/pallets/evm-contract-helpers/Cargo.toml
+++ b/pallets/evm-contract-helpers/Cargo.toml
@@ -21,12 +21,13 @@
# Unique
pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", rev = "89a37c5a489f426cc7a42d7b94019974093a052d" }
fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", rev = "89a37c5a489f426cc7a42d7b94019974093a052d" }
-up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="a8ec4bf8d5ded662d96da6d8fb211b0bbf6617b3" }
+up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="9ee7d6e57e03a2575cbab79431774b56f170018e" }
# Locals
evm-coder = { default-features = false, path = '../../crates/evm-coder' }
pallet-common = { default-features = false, path = '../../pallets/common' }
pallet-evm-coder-substrate = { default-features = false, path = '../../pallets/evm-coder-substrate' }
+pallet-evm-transaction-payment = { default-features = false, path = '../../pallets/evm-transaction-payment' }
up-data-structs = { default-features = false, path = '../../primitives/data-structs', features = [
'serde1',
] }
pallets/evm-contract-helpers/src/eth.rsdiffbeforeafterboth--- a/pallets/evm-contract-helpers/src/eth.rs
+++ b/pallets/evm-contract-helpers/src/eth.rs
@@ -20,12 +20,13 @@
use evm_coder::{
abi::AbiWriter, execution::Result, generate_stubgen, solidity_interface, types::*, ToLog,
};
-use pallet_evm_coder_substrate::{SubstrateRecorder, WithRecorder, dispatch_to_evm};
use pallet_evm::{
ExitRevert, OnCreate, OnMethodCall, PrecompileResult, PrecompileFailure, PrecompileHandle,
account::CrossAccountId,
};
-use sp_core::{H160, U256};
+use pallet_evm_coder_substrate::{SubstrateRecorder, WithRecorder, dispatch_to_evm};
+use pallet_evm_transaction_payment::CallContext;
+use sp_core::H160;
use up_data_structs::SponsorshipState;
use crate::{
AllowlistEnabled, Config, Owner, Pallet, SponsorBasket, SponsoringFeeLimit,
@@ -254,17 +255,15 @@
&mut self,
caller: caller,
contract_address: address,
- fee_limit: uint128,
+ fee_limit: uint256,
) -> Result<void> {
<Pallet<T>>::ensure_owner(contract_address, caller).map_err(dispatch_to_evm::<T>)?;
<Pallet<T>>::set_sponsoring_fee_limit(contract_address, fee_limit.into());
Ok(())
}
- fn get_sponsoring_fee_limit(&self, contract_address: address) -> Result<uint128> {
- Ok(<SponsoringFeeLimit<T>>::get(contract_address)
- .try_into()
- .map_err(|_| "fee limit > u128::MAX")?)
+ fn get_sponsoring_fee_limit(&self, contract_address: address) -> Result<uint256> {
+ Ok(<SponsoringFeeLimit<T>>::get(contract_address))
}
/// Is specified user present in contract allow list
@@ -380,13 +379,13 @@
/// Bridge to pallet-sponsoring
pub struct HelpersContractSponsoring<T: Config>(PhantomData<*const T>);
-impl<T: Config> SponsorshipHandler<T::CrossAccountId, (H160, Vec<u8>), u128>
+impl<T: Config> SponsorshipHandler<T::CrossAccountId, (H160, Vec<u8>), CallContext>
for HelpersContractSponsoring<T>
{
fn get_sponsor(
who: &T::CrossAccountId,
call: &(H160, Vec<u8>),
- fee_limit: &u128,
+ call_context: &CallContext,
) -> Option<T::CrossAccountId> {
let (contract_address, _) = call;
let mode = <Pallet<T>>::sponsoring_mode(*contract_address);
@@ -417,7 +416,7 @@
let sponsored_fee_limit = <SponsoringFeeLimit<T>>::get(contract_address);
- if *fee_limit > sponsored_fee_limit {
+ if call_context.max_fee > sponsored_fee_limit {
return None;
}
pallets/evm-contract-helpers/src/lib.rsdiffbeforeafterboth1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617#![doc = include_str!("../README.md")]18#![cfg_attr(not(feature = "std"), no_std)]19#![warn(missing_docs)]2021use codec::{Decode, Encode, MaxEncodedLen};22pub use pallet::*;23pub use eth::*;24use scale_info::TypeInfo;25pub mod eth;2627#[frame_support::pallet]28pub mod pallet {29 pub use super::*;30 use crate::eth::ContractHelpersEvents;31 use frame_support::pallet_prelude::*;32 use pallet_evm_coder_substrate::DispatchResult;33 use sp_core::H160;34 use pallet_evm::{account::CrossAccountId, Pallet as PalletEvm};35 use up_data_structs::SponsorshipState;36 use evm_coder::ToLog;3738 #[pallet::config]39 pub trait Config:40 frame_system::Config + pallet_evm_coder_substrate::Config + pallet_evm::account::Config41 {42 /// Overarching event type.43 type Event: IsType<<Self as frame_system::Config>::Event> + From<Event<Self>>;4445 /// Address, under which magic contract will be available46 type ContractAddress: Get<H160>;4748 /// In case of enabled sponsoring, but no sponsoring rate limit set,49 /// this value will be used implicitly50 type DefaultSponsoringRateLimit: Get<Self::BlockNumber>;51 /// In case of enabled sponsoring, but no sponsoring fee limit set,52 /// this value will be used implicitly53 type DefaultSponsoringFeeLimit: Get<u128>;54 }5556 #[pallet::error]57 pub enum Error<T> {58 /// This method is only executable by contract owner59 NoPermission,6061 /// No pending sponsor for contract.62 NoPendingSponsor,63 }6465 #[pallet::pallet]66 #[pallet::generate_store(pub(super) trait Store)]67 pub struct Pallet<T>(_);6869 /// Store owner for contract.70 ///71 /// * **Key** - contract address.72 /// * **Value** - owner for contract.73 #[pallet::storage]74 pub(super) type Owner<T: Config> =75 StorageMap<Hasher = Twox128, Key = H160, Value = H160, QueryKind = ValueQuery>;7677 #[pallet::storage]78 #[deprecated]79 pub(super) type SelfSponsoring<T: Config> =80 StorageMap<Hasher = Twox128, Key = H160, Value = bool, QueryKind = ValueQuery>;8182 /// Store for contract sponsorship state.83 ///84 /// * **Key** - contract address.85 /// * **Value** - sponsorship state.86 #[pallet::storage]87 pub(super) type Sponsoring<T: Config> = StorageMap<88 Hasher = Twox64Concat,89 Key = H160,90 Value = SponsorshipState<T::CrossAccountId>,91 QueryKind = ValueQuery,92 >;9394 /// Store for sponsoring mode.95 ///96 /// ### Usage97 /// Prefer to delete collection from storage if mode chaged to [`Disabled`](SponsoringModeT::Disabled).98 ///99 /// * **Key** - contract address.100 /// * **Value** - [`sponsoring mode`](SponsoringModeT).101 #[pallet::storage]102 pub(super) type SponsoringMode<T: Config> =103 StorageMap<Hasher = Twox128, Key = H160, Value = SponsoringModeT, QueryKind = OptionQuery>;104105 /// Storage for sponsoring rate limit in blocks.106 ///107 /// * **Key** - contract address.108 /// * **Value** - amount of sponsored blocks.109 #[pallet::storage]110 pub(super) type SponsoringRateLimit<T: Config> = StorageMap<111 Hasher = Twox128,112 Key = H160,113 Value = T::BlockNumber,114 QueryKind = ValueQuery,115 OnEmpty = T::DefaultSponsoringRateLimit,116 >;117118 /// Storage for last sponsored block.119 ///120 /// * **Key1** - contract address.121 /// * **Key2** - sponsored user address.122 /// * **Value** - last sponsored block number.123 #[pallet::storage]124 pub(super) type SponsoringFeeLimit<T: Config> = StorageMap<125 Hasher = Twox128,126 Key = H160,127 Value = u128,128 QueryKind = ValueQuery,129 OnEmpty = T::DefaultSponsoringFeeLimit,130 >;131132 #[pallet::storage]133 pub(super) type SponsorBasket<T: Config> = StorageDoubleMap<134 Hasher1 = Twox128,135 Key1 = H160,136 Hasher2 = Twox128,137 Key2 = H160,138 Value = T::BlockNumber,139 QueryKind = OptionQuery,140 >;141142 /// Storege for contracts with [`Allowlisted`](SponsoringModeT::Allowlisted) sponsoring mode.143 ///144 /// ### Usage145 /// Prefer to delete collection from storage if mode chaged to non `Allowlisted`, than set **Value** to **false**.146 ///147 /// * **Key** - contract address.148 /// * **Value** - is contract in [`Allowlisted`](SponsoringModeT::Allowlisted) mode.149 #[pallet::storage]150 pub(super) type AllowlistEnabled<T: Config> =151 StorageMap<Hasher = Twox128, Key = H160, Value = bool, QueryKind = ValueQuery>;152153 /// Storage for users that allowed for sponsorship.154 ///155 /// ### Usage156 /// Prefer to delete record from storage if user no more allowed for sponsorship.157 ///158 /// * **Key1** - contract address.159 /// * **Key2** - user that allowed for sponsorship.160 /// * **Value** - allowance for sponsorship.161 #[pallet::storage]162 pub(super) type Allowlist<T: Config> = StorageDoubleMap<163 Hasher1 = Twox128,164 Key1 = H160,165 Hasher2 = Twox128,166 Key2 = H160,167 Value = bool,168 QueryKind = ValueQuery,169 >;170171 #[pallet::event]172 #[pallet::generate_deposit(pub fn deposit_event)]173 pub enum Event<T: Config> {174 /// Contract sponsor was set.175 ContractSponsorSet(176 /// Contract address of the affected collection.177 H160,178 /// New sponsor address.179 T::AccountId,180 ),181182 /// New sponsor was confirm.183 ContractSponsorshipConfirmed(184 /// Contract address of the affected collection.185 H160,186 /// New sponsor address.187 T::AccountId,188 ),189190 /// Collection sponsor was removed.191 ContractSponsorRemoved(192 /// Contract address of the affected collection.193 H160,194 ),195 }196197 impl<T: Config> Pallet<T> {198 /// Get contract owner.199 pub fn contract_owner(contract: H160) -> H160 {200 <Owner<T>>::get(contract)201 }202203 /// Set `sponsor` for `contract`.204 ///205 /// `sender` must be owner of contract.206 pub fn set_sponsor(207 sender: &T::CrossAccountId,208 contract: H160,209 sponsor: &T::CrossAccountId,210 ) -> DispatchResult {211 Pallet::<T>::ensure_owner(contract, *sender.as_eth())?;212 Sponsoring::<T>::insert(213 contract,214 SponsorshipState::<T::CrossAccountId>::Unconfirmed(sponsor.clone()),215 );216217 <Pallet<T>>::deposit_event(Event::<T>::ContractSponsorSet(218 contract,219 sponsor.as_sub().clone(),220 ));221 <PalletEvm<T>>::deposit_log(222 ContractHelpersEvents::ContractSponsorSet {223 contract_address: contract,224 sponsor: *sponsor.as_eth(),225 }226 .to_log(contract),227 );228 Ok(())229 }230231 /// TO-DO232 ///233 ///234 pub fn force_set_sponsor(235 contract_address: H160,236 sponsor: &T::CrossAccountId,237 ) -> DispatchResult {238 Sponsoring::<T>::insert(239 contract_address,240 SponsorshipState::<T::CrossAccountId>::Confirmed(sponsor.clone()),241 );242243 let eth_sponsor = *sponsor.as_eth();244 let sub_sponsor = sponsor.as_sub().clone();245246 <Pallet<T>>::deposit_event(Event::<T>::ContractSponsorSet(247 contract_address,248 sub_sponsor.clone(),249 ));250 <PalletEvm<T>>::deposit_log(251 ContractHelpersEvents::ContractSponsorSet {252 contract_address,253 sponsor: eth_sponsor,254 }255 .to_log(contract_address),256 );257258 <Pallet<T>>::deposit_event(Event::<T>::ContractSponsorshipConfirmed(259 contract_address,260 sub_sponsor,261 ));262 <PalletEvm<T>>::deposit_log(263 ContractHelpersEvents::ContractSponsorshipConfirmed {264 contract_address,265 sponsor: eth_sponsor,266 }267 .to_log(contract_address),268 );269270 Ok(())271 }272273 /// Remove sponsor for `contract`.274 ///275 /// `sender` must be owner of contract.276 pub fn remove_sponsor(277 sender: &T::CrossAccountId,278 contract_address: H160,279 ) -> DispatchResult {280 Self::ensure_owner(contract_address, *sender.as_eth())?;281 Self::force_remove_sponsor(contract_address)282 }283284 /// TO-DO285 ///286 ///287 pub fn force_remove_sponsor(contract_address: H160) -> DispatchResult {288 Sponsoring::<T>::remove(contract_address);289290 Self::deposit_event(Event::<T>::ContractSponsorRemoved(contract_address));291 <PalletEvm<T>>::deposit_log(292 ContractHelpersEvents::ContractSponsorRemoved { contract_address }293 .to_log(contract_address),294 );295296 Ok(())297 }298299 /// Confirm sponsorship.300 ///301 /// `sender` must be same that set via [`set_sponsor`].302 pub fn confirm_sponsorship(303 sender: &T::CrossAccountId,304 contract_address: H160,305 ) -> DispatchResult {306 match Sponsoring::<T>::get(contract_address) {307 SponsorshipState::Unconfirmed(sponsor) => {308 ensure!(sponsor == *sender, Error::<T>::NoPermission);309 let eth_sponsor = *sponsor.as_eth();310 let sub_sponsor = sponsor.as_sub().clone();311 Sponsoring::<T>::insert(312 contract_address,313 SponsorshipState::<T::CrossAccountId>::Confirmed(sponsor),314 );315316 <Pallet<T>>::deposit_event(Event::<T>::ContractSponsorshipConfirmed(317 contract_address,318 sub_sponsor,319 ));320 <PalletEvm<T>>::deposit_log(321 ContractHelpersEvents::ContractSponsorshipConfirmed {322 contract_address,323 sponsor: eth_sponsor,324 }325 .to_log(contract_address),326 );327328 Ok(())329 }330 SponsorshipState::Disabled | SponsorshipState::Confirmed(_) => {331 Err(Error::<T>::NoPendingSponsor.into())332 }333 }334 }335336 /// Get sponsor.337 pub fn get_sponsor(contract: H160) -> Option<T::CrossAccountId> {338 match Sponsoring::<T>::get(contract) {339 SponsorshipState::Disabled | SponsorshipState::Unconfirmed(_) => None,340 SponsorshipState::Confirmed(sponsor) => Some(sponsor),341 }342 }343344 /// Get current sponsoring mode, performing lazy migration from legacy storage345 pub fn sponsoring_mode(contract: H160) -> SponsoringModeT {346 <SponsoringMode<T>>::get(contract)347 .or_else(|| {348 <SelfSponsoring<T>>::get(contract).then(|| SponsoringModeT::Allowlisted)349 })350 .unwrap_or_default()351 }352353 /// Reconfigure contract sponsoring mode354 pub fn set_sponsoring_mode(contract: H160, mode: SponsoringModeT) {355 if mode == SponsoringModeT::Disabled {356 <SponsoringMode<T>>::remove(contract);357 } else {358 <SponsoringMode<T>>::insert(contract, mode);359 }360 <SelfSponsoring<T>>::remove(contract)361 }362363 /// Set duration between two sponsored contract calls364 pub fn set_sponsoring_rate_limit(contract: H160, rate_limit: T::BlockNumber) {365 <SponsoringRateLimit<T>>::insert(contract, rate_limit);366 }367368 /// Set maximum for gas limit of transaction369 pub fn set_sponsoring_fee_limit(contract: H160, fee_limit: u128) {370 <SponsoringFeeLimit<T>>::insert(contract, fee_limit);371 }372373 /// Is user added to allowlist, or he is owner of specified contract374 pub fn allowed(contract: H160, user: H160) -> bool {375 <Allowlist<T>>::get(&contract, &user) || <Owner<T>>::get(&contract) == user376 }377378 /// Toggle contract allowlist access379 pub fn toggle_allowlist(contract: H160, enabled: bool) {380 <AllowlistEnabled<T>>::insert(contract, enabled)381 }382383 /// Toggle user presence in contract's allowlist384 pub fn toggle_allowed(contract: H160, user: H160, allowed: bool) {385 <Allowlist<T>>::insert(contract, user, allowed);386 }387388 /// Throw error if user is not allowed to reconfigure target contract389 pub fn ensure_owner(contract: H160, user: H160) -> DispatchResult {390 ensure!(<Owner<T>>::get(&contract) == user, Error::<T>::NoPermission);391 Ok(())392 }393 }394}395396/// Available contract sponsoring modes397#[derive(Encode, Decode, PartialEq, TypeInfo, MaxEncodedLen, Default)]398pub enum SponsoringModeT {399 /// Sponsoring is disabled400 #[default]401 Disabled,402 /// Only users from allowlist will be sponsored403 Allowlisted,404 /// All users will be sponsored405 Generous,406}407408impl SponsoringModeT {409 fn from_eth(v: u8) -> Option<Self> {410 Some(match v {411 0 => Self::Disabled,412 1 => Self::Allowlisted,413 2 => Self::Generous,414 _ => return None,415 })416 }417 fn to_eth(self) -> u8 {418 match self {419 SponsoringModeT::Disabled => 0,420 SponsoringModeT::Allowlisted => 1,421 SponsoringModeT::Generous => 2,422 }423 }424}1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617#![doc = include_str!("../README.md")]18#![cfg_attr(not(feature = "std"), no_std)]19#![warn(missing_docs)]2021use codec::{Decode, Encode, MaxEncodedLen};22pub use pallet::*;23pub use eth::*;24use scale_info::TypeInfo;25pub mod eth;2627#[frame_support::pallet]28pub mod pallet {29 pub use super::*;30 use crate::eth::ContractHelpersEvents;31 use frame_support::pallet_prelude::*;32 use pallet_evm_coder_substrate::DispatchResult;33 use sp_core::{H160, U256};34 use pallet_evm::{account::CrossAccountId, Pallet as PalletEvm};35 use up_data_structs::SponsorshipState;36 use evm_coder::ToLog;3738 #[pallet::config]39 pub trait Config:40 frame_system::Config + pallet_evm_coder_substrate::Config + pallet_evm::account::Config41 {42 /// Overarching event type.43 type Event: IsType<<Self as frame_system::Config>::Event> + From<Event<Self>>;4445 /// Address, under which magic contract will be available46 type ContractAddress: Get<H160>;4748 /// In case of enabled sponsoring, but no sponsoring rate limit set,49 /// this value will be used implicitly50 type DefaultSponsoringRateLimit: Get<Self::BlockNumber>;51 /// In case of enabled sponsoring, but no sponsoring fee limit set,52 /// this value will be used implicitly53 type DefaultSponsoringFeeLimit: Get<U256>;54 }5556 #[pallet::error]57 pub enum Error<T> {58 /// This method is only executable by contract owner59 NoPermission,6061 /// No pending sponsor for contract.62 NoPendingSponsor,63 }6465 #[pallet::pallet]66 #[pallet::generate_store(pub(super) trait Store)]67 pub struct Pallet<T>(_);6869 /// Store owner for contract.70 ///71 /// * **Key** - contract address.72 /// * **Value** - owner for contract.73 #[pallet::storage]74 pub(super) type Owner<T: Config> =75 StorageMap<Hasher = Twox128, Key = H160, Value = H160, QueryKind = ValueQuery>;7677 #[pallet::storage]78 #[deprecated]79 pub(super) type SelfSponsoring<T: Config> =80 StorageMap<Hasher = Twox128, Key = H160, Value = bool, QueryKind = ValueQuery>;8182 /// Store for contract sponsorship state.83 ///84 /// * **Key** - contract address.85 /// * **Value** - sponsorship state.86 #[pallet::storage]87 pub(super) type Sponsoring<T: Config> = StorageMap<88 Hasher = Twox64Concat,89 Key = H160,90 Value = SponsorshipState<T::CrossAccountId>,91 QueryKind = ValueQuery,92 >;9394 /// Store for sponsoring mode.95 ///96 /// ### Usage97 /// Prefer to delete collection from storage if mode chaged to [`Disabled`](SponsoringModeT::Disabled).98 ///99 /// * **Key** - contract address.100 /// * **Value** - [`sponsoring mode`](SponsoringModeT).101 #[pallet::storage]102 pub(super) type SponsoringMode<T: Config> =103 StorageMap<Hasher = Twox128, Key = H160, Value = SponsoringModeT, QueryKind = OptionQuery>;104105 /// Storage for sponsoring rate limit in blocks.106 ///107 /// * **Key** - contract address.108 /// * **Value** - amount of sponsored blocks.109 #[pallet::storage]110 pub(super) type SponsoringRateLimit<T: Config> = StorageMap<111 Hasher = Twox128,112 Key = H160,113 Value = T::BlockNumber,114 QueryKind = ValueQuery,115 OnEmpty = T::DefaultSponsoringRateLimit,116 >;117118 /// Storage for last sponsored block.119 ///120 /// * **Key1** - contract address.121 /// * **Key2** - sponsored user address.122 /// * **Value** - last sponsored block number.123 #[pallet::storage]124 pub(super) type SponsoringFeeLimit<T: Config> = StorageMap<125 Hasher = Twox128,126 Key = H160,127 Value = U256,128 QueryKind = ValueQuery,129 OnEmpty = T::DefaultSponsoringFeeLimit,130 >;131132 #[pallet::storage]133 pub(super) type SponsorBasket<T: Config> = StorageDoubleMap<134 Hasher1 = Twox128,135 Key1 = H160,136 Hasher2 = Twox128,137 Key2 = H160,138 Value = T::BlockNumber,139 QueryKind = OptionQuery,140 >;141142 /// Storege for contracts with [`Allowlisted`](SponsoringModeT::Allowlisted) sponsoring mode.143 ///144 /// ### Usage145 /// Prefer to delete collection from storage if mode chaged to non `Allowlisted`, than set **Value** to **false**.146 ///147 /// * **Key** - contract address.148 /// * **Value** - is contract in [`Allowlisted`](SponsoringModeT::Allowlisted) mode.149 #[pallet::storage]150 pub(super) type AllowlistEnabled<T: Config> =151 StorageMap<Hasher = Twox128, Key = H160, Value = bool, QueryKind = ValueQuery>;152153 /// Storage for users that allowed for sponsorship.154 ///155 /// ### Usage156 /// Prefer to delete record from storage if user no more allowed for sponsorship.157 ///158 /// * **Key1** - contract address.159 /// * **Key2** - user that allowed for sponsorship.160 /// * **Value** - allowance for sponsorship.161 #[pallet::storage]162 pub(super) type Allowlist<T: Config> = StorageDoubleMap<163 Hasher1 = Twox128,164 Key1 = H160,165 Hasher2 = Twox128,166 Key2 = H160,167 Value = bool,168 QueryKind = ValueQuery,169 >;170171 #[pallet::event]172 #[pallet::generate_deposit(pub fn deposit_event)]173 pub enum Event<T: Config> {174 /// Contract sponsor was set.175 ContractSponsorSet(176 /// Contract address of the affected collection.177 H160,178 /// New sponsor address.179 T::AccountId,180 ),181182 /// New sponsor was confirm.183 ContractSponsorshipConfirmed(184 /// Contract address of the affected collection.185 H160,186 /// New sponsor address.187 T::AccountId,188 ),189190 /// Collection sponsor was removed.191 ContractSponsorRemoved(192 /// Contract address of the affected collection.193 H160,194 ),195 }196197 impl<T: Config> Pallet<T> {198 /// Get contract owner.199 pub fn contract_owner(contract: H160) -> H160 {200 <Owner<T>>::get(contract)201 }202203 /// Set `sponsor` for `contract`.204 ///205 /// `sender` must be owner of contract.206 pub fn set_sponsor(207 sender: &T::CrossAccountId,208 contract: H160,209 sponsor: &T::CrossAccountId,210 ) -> DispatchResult {211 Pallet::<T>::ensure_owner(contract, *sender.as_eth())?;212 Sponsoring::<T>::insert(213 contract,214 SponsorshipState::<T::CrossAccountId>::Unconfirmed(sponsor.clone()),215 );216217 <Pallet<T>>::deposit_event(Event::<T>::ContractSponsorSet(218 contract,219 sponsor.as_sub().clone(),220 ));221 <PalletEvm<T>>::deposit_log(222 ContractHelpersEvents::ContractSponsorSet {223 contract_address: contract,224 sponsor: *sponsor.as_eth(),225 }226 .to_log(contract),227 );228 Ok(())229 }230231 /// TO-DO232 ///233 ///234 pub fn force_set_sponsor(235 contract_address: H160,236 sponsor: &T::CrossAccountId,237 ) -> DispatchResult {238 Sponsoring::<T>::insert(239 contract_address,240 SponsorshipState::<T::CrossAccountId>::Confirmed(sponsor.clone()),241 );242243 let eth_sponsor = *sponsor.as_eth();244 let sub_sponsor = sponsor.as_sub().clone();245246 <Pallet<T>>::deposit_event(Event::<T>::ContractSponsorSet(247 contract_address,248 sub_sponsor.clone(),249 ));250 <PalletEvm<T>>::deposit_log(251 ContractHelpersEvents::ContractSponsorSet {252 contract_address,253 sponsor: eth_sponsor,254 }255 .to_log(contract_address),256 );257258 <Pallet<T>>::deposit_event(Event::<T>::ContractSponsorshipConfirmed(259 contract_address,260 sub_sponsor,261 ));262 <PalletEvm<T>>::deposit_log(263 ContractHelpersEvents::ContractSponsorshipConfirmed {264 contract_address,265 sponsor: eth_sponsor,266 }267 .to_log(contract_address),268 );269270 Ok(())271 }272273 /// Remove sponsor for `contract`.274 ///275 /// `sender` must be owner of contract.276 pub fn remove_sponsor(277 sender: &T::CrossAccountId,278 contract_address: H160,279 ) -> DispatchResult {280 Self::ensure_owner(contract_address, *sender.as_eth())?;281 Self::force_remove_sponsor(contract_address)282 }283284 /// TO-DO285 ///286 ///287 pub fn force_remove_sponsor(contract_address: H160) -> DispatchResult {288 Sponsoring::<T>::remove(contract_address);289290 Self::deposit_event(Event::<T>::ContractSponsorRemoved(contract_address));291 <PalletEvm<T>>::deposit_log(292 ContractHelpersEvents::ContractSponsorRemoved { contract_address }293 .to_log(contract_address),294 );295296 Ok(())297 }298299 /// Confirm sponsorship.300 ///301 /// `sender` must be same that set via [`set_sponsor`].302 pub fn confirm_sponsorship(303 sender: &T::CrossAccountId,304 contract_address: H160,305 ) -> DispatchResult {306 match Sponsoring::<T>::get(contract_address) {307 SponsorshipState::Unconfirmed(sponsor) => {308 ensure!(sponsor == *sender, Error::<T>::NoPermission);309 let eth_sponsor = *sponsor.as_eth();310 let sub_sponsor = sponsor.as_sub().clone();311 Sponsoring::<T>::insert(312 contract_address,313 SponsorshipState::<T::CrossAccountId>::Confirmed(sponsor),314 );315316 <Pallet<T>>::deposit_event(Event::<T>::ContractSponsorshipConfirmed(317 contract_address,318 sub_sponsor,319 ));320 <PalletEvm<T>>::deposit_log(321 ContractHelpersEvents::ContractSponsorshipConfirmed {322 contract_address,323 sponsor: eth_sponsor,324 }325 .to_log(contract_address),326 );327328 Ok(())329 }330 SponsorshipState::Disabled | SponsorshipState::Confirmed(_) => {331 Err(Error::<T>::NoPendingSponsor.into())332 }333 }334 }335336 /// Get sponsor.337 pub fn get_sponsor(contract: H160) -> Option<T::CrossAccountId> {338 match Sponsoring::<T>::get(contract) {339 SponsorshipState::Disabled | SponsorshipState::Unconfirmed(_) => None,340 SponsorshipState::Confirmed(sponsor) => Some(sponsor),341 }342 }343344 /// Get current sponsoring mode, performing lazy migration from legacy storage345 pub fn sponsoring_mode(contract: H160) -> SponsoringModeT {346 <SponsoringMode<T>>::get(contract)347 .or_else(|| {348 <SelfSponsoring<T>>::get(contract).then(|| SponsoringModeT::Allowlisted)349 })350 .unwrap_or_default()351 }352353 /// Reconfigure contract sponsoring mode354 pub fn set_sponsoring_mode(contract: H160, mode: SponsoringModeT) {355 if mode == SponsoringModeT::Disabled {356 <SponsoringMode<T>>::remove(contract);357 } else {358 <SponsoringMode<T>>::insert(contract, mode);359 }360 <SelfSponsoring<T>>::remove(contract)361 }362363 /// Set duration between two sponsored contract calls364 pub fn set_sponsoring_rate_limit(contract: H160, rate_limit: T::BlockNumber) {365 <SponsoringRateLimit<T>>::insert(contract, rate_limit);366 }367368 /// Set maximum for gas limit of transaction369 pub fn set_sponsoring_fee_limit(contract: H160, fee_limit: U256) {370 <SponsoringFeeLimit<T>>::insert(contract, fee_limit);371 }372373 /// Is user added to allowlist, or he is owner of specified contract374 pub fn allowed(contract: H160, user: H160) -> bool {375 <Allowlist<T>>::get(&contract, &user) || <Owner<T>>::get(&contract) == user376 }377378 /// Toggle contract allowlist access379 pub fn toggle_allowlist(contract: H160, enabled: bool) {380 <AllowlistEnabled<T>>::insert(contract, enabled)381 }382383 /// Toggle user presence in contract's allowlist384 pub fn toggle_allowed(contract: H160, user: H160, allowed: bool) {385 <Allowlist<T>>::insert(contract, user, allowed);386 }387388 /// Throw error if user is not allowed to reconfigure target contract389 pub fn ensure_owner(contract: H160, user: H160) -> DispatchResult {390 ensure!(<Owner<T>>::get(&contract) == user, Error::<T>::NoPermission);391 Ok(())392 }393 }394}395396/// Available contract sponsoring modes397#[derive(Encode, Decode, PartialEq, TypeInfo, MaxEncodedLen, Default)]398pub enum SponsoringModeT {399 /// Sponsoring is disabled400 #[default]401 Disabled,402 /// Only users from allowlist will be sponsored403 Allowlisted,404 /// All users will be sponsored405 Generous,406}407408impl SponsoringModeT {409 fn from_eth(v: u8) -> Option<Self> {410 Some(match v {411 0 => Self::Disabled,412 1 => Self::Allowlisted,413 2 => Self::Generous,414 _ => return None,415 })416 }417 fn to_eth(self) -> u8 {418 match self {419 SponsoringModeT::Disabled => 0,420 SponsoringModeT::Allowlisted => 1,421 SponsoringModeT::Generous => 2,422 }423 }424}pallets/evm-contract-helpers/src/stubs/ContractHelpers.rawdiffbeforeafterbothbinary blob — no preview
pallets/evm-contract-helpers/src/stubs/ContractHelpers.soldiffbeforeafterboth--- a/pallets/evm-contract-helpers/src/stubs/ContractHelpers.sol
+++ b/pallets/evm-contract-helpers/src/stubs/ContractHelpers.sol
@@ -32,7 +32,7 @@
}
/// @title Magic contract, which allows users to reconfigure other contracts
-/// @dev the ERC-165 identifier for this interface is 0xd77fab70
+/// @dev the ERC-165 identifier for this interface is 0x172cb4fb
contract ContractHelpers is Dummy, ERC165, ContractHelpersEvents {
/// Get user, which deployed specified contract
/// @dev May return zero address in case if contract is deployed
@@ -203,9 +203,9 @@
dummy = 0;
}
- /// @dev EVM selector for this function is: 0x1c362eb4,
- /// or in textual repr: setSponsoringFeeLimit(address,uint128)
- function setSponsoringFeeLimit(address contractAddress, uint128 feeLimit)
+ /// @dev EVM selector for this function is: 0x03aed665,
+ /// or in textual repr: setSponsoringFeeLimit(address,uint256)
+ function setSponsoringFeeLimit(address contractAddress, uint256 feeLimit)
public
{
require(false, stub_error);
@@ -219,7 +219,7 @@
function getSponsoringFeeLimit(address contractAddress)
public
view
- returns (uint128)
+ returns (uint256)
{
require(false, stub_error);
contractAddress;
pallets/evm-transaction-payment/Cargo.tomldiffbeforeafterboth--- a/pallets/evm-transaction-payment/Cargo.toml
+++ b/pallets/evm-transaction-payment/Cargo.toml
@@ -17,7 +17,7 @@
pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", rev = "89a37c5a489f426cc7a42d7b94019974093a052d" }
fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", rev = "89a37c5a489f426cc7a42d7b94019974093a052d" }
pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", rev = "89a37c5a489f426cc7a42d7b94019974093a052d" }
-up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", rev = "a8ec4bf8d5ded662d96da6d8fb211b0bbf6617b3" }
+up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", rev = "9ee7d6e57e03a2575cbab79431774b56f170018e" }
fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", rev = "89a37c5a489f426cc7a42d7b94019974093a052d" }
[dependencies.codec]
pallets/evm-transaction-payment/src/lib.rsdiffbeforeafterboth--- a/pallets/evm-transaction-payment/src/lib.rs
+++ b/pallets/evm-transaction-payment/src/lib.rs
@@ -22,7 +22,7 @@
use fp_evm::WithdrawReason;
use frame_support::traits::IsSubType;
pub use pallet::*;
-use pallet_evm::{account::CrossAccountId, EnsureAddressOrigin, FeeCalculator};
+use pallet_evm::{account::CrossAccountId, EnsureAddressOrigin};
use sp_core::{H160, U256};
use sp_runtime::{TransactionOutcome, DispatchError};
use up_sponsorship::SponsorshipHandler;
@@ -33,10 +33,20 @@
use sp_std::vec::Vec;
+ /// Contains call data
+ pub struct CallContext {
+ /// Max fee for transaction - gasLimit * gasPrice
+ pub max_fee: U256,
+ }
+
#[pallet::config]
pub trait Config: frame_system::Config + pallet_evm::account::Config {
/// Loosly-coupled handlers for evm call sponsoring
- type EvmSponsorshipHandler: SponsorshipHandler<Self::CrossAccountId, (H160, Vec<u8>), u128>;
+ type EvmSponsorshipHandler: SponsorshipHandler<
+ Self::CrossAccountId,
+ (H160, Vec<u8>),
+ CallContext,
+ >;
}
#[pallet::pallet]
@@ -55,10 +65,11 @@
match reason {
WithdrawReason::Call { target, input } => {
let origin_sub = T::CrossAccountId::from_eth(origin);
+ let call_context = CallContext { max_fee };
T::EvmSponsorshipHandler::get_sponsor(
&origin_sub,
&(*target, input.clone()),
- &max_fee.as_u128(),
+ &call_context,
)
}
_ => None,
@@ -68,12 +79,12 @@
/// Implements sponsoring for evm calls performed from pallet-evm (via api.tx.ethereum.transact/api.tx.evm.call)
pub struct BridgeSponsorshipHandler<T>(PhantomData<T>);
-impl<T, C> SponsorshipHandler<T::AccountId, C, u128> for BridgeSponsorshipHandler<T>
+impl<T, C> SponsorshipHandler<T::AccountId, C, ()> for BridgeSponsorshipHandler<T>
where
T: Config + pallet_evm::Config,
C: IsSubType<pallet_evm::Call<T>>,
{
- fn get_sponsor(who: &T::AccountId, call: &C, _fee_limit: &u128) -> Option<T::AccountId> {
+ fn get_sponsor(who: &T::AccountId, call: &C, _call_context: &()) -> Option<T::AccountId> {
match call.is_sub_type()? {
pallet_evm::Call::call {
source,
@@ -90,6 +101,7 @@
.ok()?;
let who = T::CrossAccountId::from_sub(who.clone());
let max_fee = max_fee_per_gas.saturating_mul((*gas_limit).into());
+ let call_context = CallContext { max_fee };
// Effects from EvmSponsorshipHandler are applied by pallet_evm::runner
// TODO: Should we implement simulation mode (test, but do not apply effects) in `up-sponsorship`?
let sponsor = frame_support::storage::with_transaction(|| {
@@ -97,7 +109,7 @@
T::EvmSponsorshipHandler::get_sponsor(
&who,
&(*target, input.clone()),
- &max_fee.try_into().unwrap(),
+ &call_context,
),
))
})
pallets/scheduler/Cargo.tomldiffbeforeafterboth--- a/pallets/scheduler/Cargo.toml
+++ b/pallets/scheduler/Cargo.toml
@@ -24,7 +24,7 @@
sp-core = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.27' }
frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.27" }
-up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="a8ec4bf8d5ded662d96da6d8fb211b0bbf6617b3" }
+up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="9ee7d6e57e03a2575cbab79431774b56f170018e" }
log = { version = "0.4.14", default-features = false }
[dev-dependencies]
runtime/common/config/sponsoring.rsdiffbeforeafterboth--- a/runtime/common/config/sponsoring.rs
+++ b/runtime/common/config/sponsoring.rs
@@ -14,16 +14,17 @@
// You should have received a copy of the GNU General Public License
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
-use frame_support::parameter_types;
use crate::{
runtime_common::{sponsoring::UniqueSponsorshipHandler},
Runtime,
};
-use up_common::{types::BlockNumber, constants::*};
+use frame_support::parameter_types;
+use sp_core::U256;
+use up_common::{constants::*, types::BlockNumber};
parameter_types! {
pub const DefaultSponsoringRateLimit: BlockNumber = 1 * DAYS;
- pub const DefaultSponsoringFeeLimit: u128 = u128::MAX;
+ pub const DefaultSponsoringFeeLimit: U256 = U256::MAX;
}
type SponsorshipHandler = (
runtime/common/ethereum/sponsoring.rsdiffbeforeafterboth--- a/runtime/common/ethereum/sponsoring.rs
+++ b/runtime/common/ethereum/sponsoring.rs
@@ -16,27 +16,31 @@
//! Implements EVM sponsoring logic via TransactionValidityHack
+use core::{convert::TryInto, marker::PhantomData};
use evm_coder::{Call, abi::AbiReader};
use pallet_common::{CollectionHandle, eth::map_eth_to_id};
+use pallet_evm::account::CrossAccountId;
+use pallet_evm_transaction_payment::CallContext;
+use pallet_nonfungible::{
+ Config as NonfungibleConfig,
+ erc::{
+ UniqueNFTCall, ERC721UniqueExtensionsCall, ERC721MintableCall, ERC721Call,
+ TokenPropertiesCall,
+ },
+};
+use pallet_fungible::{
+ Config as FungibleConfig,
+ erc::{UniqueFungibleCall, ERC20Call},
+};
+use pallet_refungible::Config as RefungibleConfig;
+use pallet_unique::Config as UniqueConfig;
use sp_core::H160;
use sp_std::prelude::*;
+use up_data_structs::{CollectionMode, CreateItemData, CreateNftData, TokenId};
use up_sponsorship::SponsorshipHandler;
-use core::marker::PhantomData;
-use core::convert::TryInto;
-use pallet_evm::account::CrossAccountId;
-use up_data_structs::{TokenId, CreateItemData, CreateNftData, CollectionMode};
-use pallet_unique::Config as UniqueConfig;
use crate::{Runtime, runtime_common::sponsoring::*};
-use pallet_nonfungible::erc::{
- UniqueNFTCall, ERC721UniqueExtensionsCall, ERC721MintableCall, ERC721Call, TokenPropertiesCall,
-};
-use pallet_fungible::erc::{UniqueFungibleCall, ERC20Call};
-use pallet_fungible::Config as FungibleConfig;
-use pallet_nonfungible::Config as NonfungibleConfig;
-use pallet_refungible::Config as RefungibleConfig;
-
pub type EvmSponsorshipHandler = (
UniqueEthSponsorshipHandler<Runtime>,
pallet_evm_contract_helpers::HelpersContractSponsoring<Runtime>,
@@ -44,12 +48,13 @@
pub struct UniqueEthSponsorshipHandler<T: UniqueConfig>(PhantomData<*const T>);
impl<T: UniqueConfig + FungibleConfig + NonfungibleConfig + RefungibleConfig>
- SponsorshipHandler<T::CrossAccountId, (H160, Vec<u8>), u128> for UniqueEthSponsorshipHandler<T>
+ SponsorshipHandler<T::CrossAccountId, (H160, Vec<u8>), CallContext>
+ for UniqueEthSponsorshipHandler<T>
{
fn get_sponsor(
who: &T::CrossAccountId,
call: &(H160, Vec<u8>),
- _fee_limit: &u128,
+ _fee_limit: &CallContext,
) -> Option<T::CrossAccountId> {
let collection_id = map_eth_to_id(&call.0)?;
let collection = <CollectionHandle<T>>::new(collection_id)?;
runtime/common/sponsoring.rsdiffbeforeafterboth--- a/runtime/common/sponsoring.rs
+++ b/runtime/common/sponsoring.rs
@@ -224,12 +224,12 @@
}
pub struct UniqueSponsorshipHandler<T>(PhantomData<T>);
-impl<T, C> SponsorshipHandler<T::AccountId, C, u128> for UniqueSponsorshipHandler<T>
+impl<T, C> SponsorshipHandler<T::AccountId, C, ()> for UniqueSponsorshipHandler<T>
where
T: Config,
C: IsSubType<UniqueCall<T>>,
{
- fn get_sponsor(who: &T::AccountId, call: &C, _fee_limit: &u128) -> Option<T::AccountId> {
+ fn get_sponsor(who: &T::AccountId, call: &C, _call_context: &()) -> Option<T::AccountId> {
match IsSubType::<UniqueCall<T>>::is_sub_type(call)? {
UniqueCall::set_token_properties {
collection_id,
runtime/opal/Cargo.tomldiffbeforeafterboth--- a/runtime/opal/Cargo.toml
+++ b/runtime/opal/Cargo.toml
@@ -431,7 +431,7 @@
pallet-proxy-rmrk-equip = { default-features = false, path = "../../pallets/proxy-rmrk-equip", package = "pallet-rmrk-equip" }
pallet-unique-scheduler = { path = '../../pallets/scheduler', default-features = false }
# pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' }
-pallet-charge-transaction = { git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="a8ec4bf8d5ded662d96da6d8fb211b0bbf6617b3", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
+pallet-charge-transaction = { git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="9ee7d6e57e03a2575cbab79431774b56f170018e", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
pallet-evm-migration = { path = '../../pallets/evm-migration', default-features = false }
pallet-evm-contract-helpers = { path = '../../pallets/evm-contract-helpers', default-features = false }
pallet-evm-transaction-payment = { path = '../../pallets/evm-transaction-payment', default-features = false }
@@ -442,7 +442,7 @@
fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", rev = "89a37c5a489f426cc7a42d7b94019974093a052d" }
fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", rev = "89a37c5a489f426cc7a42d7b94019974093a052d" }
evm-coder = { default-features = false, path = '../../crates/evm-coder' }
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="a8ec4bf8d5ded662d96da6d8fb211b0bbf6617b3" }
+up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="9ee7d6e57e03a2575cbab79431774b56f170018e" }
################################################################################
# Build Dependencies
runtime/quartz/Cargo.tomldiffbeforeafterboth--- a/runtime/quartz/Cargo.toml
+++ b/runtime/quartz/Cargo.toml
@@ -432,7 +432,7 @@
pallet-proxy-rmrk-equip = { default-features = false, path = "../../pallets/proxy-rmrk-equip", package = "pallet-rmrk-equip" }
pallet-unique-scheduler = { path = '../../pallets/scheduler', default-features = false }
# pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' }
-pallet-charge-transaction = { git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="a8ec4bf8d5ded662d96da6d8fb211b0bbf6617b3", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
+pallet-charge-transaction = { git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="9ee7d6e57e03a2575cbab79431774b56f170018e", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
pallet-evm-migration = { path = '../../pallets/evm-migration', default-features = false }
pallet-evm-contract-helpers = { path = '../../pallets/evm-contract-helpers', default-features = false }
pallet-evm-transaction-payment = { path = '../../pallets/evm-transaction-payment', default-features = false }
@@ -443,7 +443,7 @@
fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", rev = "89a37c5a489f426cc7a42d7b94019974093a052d" }
fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", rev = "89a37c5a489f426cc7a42d7b94019974093a052d" }
evm-coder = { default-features = false, path = '../../crates/evm-coder' }
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="a8ec4bf8d5ded662d96da6d8fb211b0bbf6617b3" }
+up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="9ee7d6e57e03a2575cbab79431774b56f170018e" }
################################################################################
# Build Dependencies
runtime/tests/Cargo.tomldiffbeforeafterboth--- a/runtime/tests/Cargo.toml
+++ b/runtime/tests/Cargo.toml
@@ -43,4 +43,4 @@
scale-info = "*"
evm-coder = { default-features = false, path = '../../crates/evm-coder' }
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="a8ec4bf8d5ded662d96da6d8fb211b0bbf6617b3" }
+up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="9ee7d6e57e03a2575cbab79431774b56f170018e" }
runtime/unique/Cargo.tomldiffbeforeafterboth--- a/runtime/unique/Cargo.toml
+++ b/runtime/unique/Cargo.toml
@@ -425,7 +425,7 @@
pallet-proxy-rmrk-equip = { default-features = false, path = "../../pallets/proxy-rmrk-equip", package = "pallet-rmrk-equip" }
pallet-unique-scheduler = { path = '../../pallets/scheduler', default-features = false }
# pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' }
-pallet-charge-transaction = { git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="a8ec4bf8d5ded662d96da6d8fb211b0bbf6617b3", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
+pallet-charge-transaction = { git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="9ee7d6e57e03a2575cbab79431774b56f170018e", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
pallet-evm-migration = { path = '../../pallets/evm-migration', default-features = false }
pallet-evm-contract-helpers = { path = '../../pallets/evm-contract-helpers', default-features = false }
pallet-evm-transaction-payment = { path = '../../pallets/evm-transaction-payment', default-features = false }
@@ -437,7 +437,7 @@
fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", rev = "89a37c5a489f426cc7a42d7b94019974093a052d" }
fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", rev = "89a37c5a489f426cc7a42d7b94019974093a052d" }
evm-coder = { default-features = false, path = '../../crates/evm-coder' }
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="a8ec4bf8d5ded662d96da6d8fb211b0bbf6617b3" }
+up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", rev="9ee7d6e57e03a2575cbab79431774b56f170018e" }
################################################################################
# Build Dependencies
tests/src/eth/api/ContractHelpers.soldiffbeforeafterboth--- a/tests/src/eth/api/ContractHelpers.sol
+++ b/tests/src/eth/api/ContractHelpers.sol
@@ -23,7 +23,7 @@
}
/// @title Magic contract, which allows users to reconfigure other contracts
-/// @dev the ERC-165 identifier for this interface is 0xd77fab70
+/// @dev the ERC-165 identifier for this interface is 0x172cb4fb
interface ContractHelpers is Dummy, ERC165, ContractHelpersEvents {
/// Get user, which deployed specified contract
/// @dev May return zero address in case if contract is deployed
@@ -131,9 +131,9 @@
function setSponsoringRateLimit(address contractAddress, uint32 rateLimit)
external;
- /// @dev EVM selector for this function is: 0x1c362eb4,
- /// or in textual repr: setSponsoringFeeLimit(address,uint128)
- function setSponsoringFeeLimit(address contractAddress, uint128 feeLimit)
+ /// @dev EVM selector for this function is: 0x03aed665,
+ /// or in textual repr: setSponsoringFeeLimit(address,uint256)
+ function setSponsoringFeeLimit(address contractAddress, uint256 feeLimit)
external;
/// @dev EVM selector for this function is: 0xc3fdc9ee,
@@ -141,7 +141,7 @@
function getSponsoringFeeLimit(address contractAddress)
external
view
- returns (uint128);
+ returns (uint256);
/// Is specified user present in contract allow list
/// @dev Contract owner always implicitly included
tests/src/eth/contractSponsoring.test.tsdiffbeforeafterboth--- a/tests/src/eth/contractSponsoring.test.ts
+++ b/tests/src/eth/contractSponsoring.test.ts
@@ -558,7 +558,7 @@
const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
const flipper = await deployFlipper(web3, owner);
const helpers = contractHelpers(web3, owner);
- expect(await helpers.methods.getSponsoringFeeLimit(flipper.options.address).call()).to.be.equals('340282366920938463463374607431768211455');
+ expect(await helpers.methods.getSponsoringFeeLimit(flipper.options.address).call()).to.be.equals('115792089237316195423570985008687907853269984665640564039457584007913129639935');
});
itWeb3('Set fee limit', async ({api, web3, privateKeyWrapper}) => {
tests/src/eth/util/contractHelpersAbi.jsondiffbeforeafterboth--- a/tests/src/eth/util/contractHelpersAbi.json
+++ b/tests/src/eth/util/contractHelpersAbi.json
@@ -135,7 +135,7 @@
}
],
"name": "getSponsoringFeeLimit",
- "outputs": [{ "internalType": "uint128", "name": "", "type": "uint128" }],
+ "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
@@ -225,7 +225,7 @@
"name": "contractAddress",
"type": "address"
},
- { "internalType": "uint128", "name": "feeLimit", "type": "uint128" }
+ { "internalType": "uint256", "name": "feeLimit", "type": "uint256" }
],
"name": "setSponsoringFeeLimit",
"outputs": [],