--- a/Cargo.lock +++ b/Cargo.lock @@ -5090,10 +5090,10 @@ "pallet-evm-transaction-payment", "pallet-inflation", "pallet-nft", - "pallet-nft-charge-transaction", "pallet-nft-transaction-payment", "pallet-randomness-collective-flip", "pallet-sudo", + "pallet-template-charge-transaction", "pallet-timestamp", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", @@ -6010,25 +6010,6 @@ "sp-runtime", "sp-std", "up-sponsorship", -] - -[[package]] -name = "pallet-nft-charge-transaction" -version = "3.0.0" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-nft-transaction-payment", - "pallet-transaction-payment", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", ] [[package]] @@ -6271,6 +6252,26 @@ ] [[package]] +name = "pallet-template-charge-transaction" +version = "3.0.0" +source = "git+https://github.com/UniqueNetwork/pallet-sponsoring#e5d3354ab68face1b2ef709dc7f629803f56598d" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-transaction-payment", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "up-sponsorship", +] + +[[package]] name = "pallet-timestamp" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.12#d76f39995315ec36980908e4b99709bd14927044" @@ -11597,7 +11598,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f559b464de2e2bdabcac6a210d12e9b5a5973c251e102c44c585c71d51bd78e" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 0.1.10", "rand 0.8.4", "static_assertions", ] @@ -11717,6 +11718,7 @@ [[package]] name = "up-sponsorship" version = "0.1.0" +source = "git+https://github.com/UniqueNetwork/pallet-sponsoring#e5d3354ab68face1b2ef709dc7f629803f56598d" dependencies = [ "impl-trait-for-tuples 0.2.1", ] --- a/pallets/contract-helpers/Cargo.toml +++ b/pallets/contract-helpers/Cargo.toml @@ -9,11 +9,6 @@ package = 'parity-scale-codec' version = '2.3.0' -[dependencies.up-sponsorship] -default-features = false -path = '../../primitives/sponsorship' -version = '0.1.0' - [dependencies] scale-info = { version = "1.0.0", default-features = false, features = ["derive"] } frame-support = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } @@ -21,6 +16,7 @@ pallet-contracts = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } sp-runtime = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } sp-std = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } +up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/UniqueNetwork/pallet-sponsoring" } [features] default = ["std"] --- a/pallets/evm-contract-helpers/Cargo.toml +++ b/pallets/evm-contract-helpers/Cargo.toml @@ -13,7 +13,7 @@ evm-coder = { default-features = false, path = '../../crates/evm-coder' } pallet-evm-coder-substrate = { default-features = false, path = '../../pallets/evm-coder-substrate' } pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.12" } -up-sponsorship = { default-features = false, path = '../../primitives/sponsorship' } +up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/UniqueNetwork/pallet-sponsoring" } log = "0.4.14" [dependencies.codec] --- a/pallets/evm-transaction-payment/Cargo.toml +++ b/pallets/evm-transaction-payment/Cargo.toml @@ -14,7 +14,7 @@ pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.12" } fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.12" } pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.12" } -up-sponsorship = { default-features = false, path = '../../primitives/sponsorship' } +up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/UniqueNetwork/pallet-sponsoring" } [dependencies.codec] default-features = false --- a/pallets/nft-charge-transaction/Cargo.toml +++ /dev/null @@ -1,50 +0,0 @@ -[package] -authors = ['Substrate DevHub '] -description = 'Unqiue pallet nft specific transaction payment' -edition = '2018' -homepage = 'https://substrate.io' -license = 'Unlicense' -name = 'pallet-nft-charge-transaction' -repository = 'https://github.com/usetech-llc/nft_private/' -version = '3.0.0' - -[package.metadata.docs.rs] -targets = ['x86_64-unknown-linux-gnu'] - -# alias "parity-scale-code" to "codec" -[dependencies.codec] -default-features = false -features = ['derive'] -package = 'parity-scale-codec' -version = '2.3.0' - -[dependencies] -scale-info = { version = "1.0.0", default-features = false, features = ["derive"] } -serde = { version = "1.0.130", default-features = false } -frame-support = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } -frame-system = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } -pallet-balances = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } -pallet-transaction-payment = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } -sp-std = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } -frame-benchmarking = { default-features = false, optional = true, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } -sp-core = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } -sp-io = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } -sp-runtime = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } - -pallet-nft-transaction-payment = { default-features = false, path = "../nft-transaction-payment" } - -[features] -default = ['std'] -std = [ - 'codec/std', - 'serde/std', - 'frame-support/std', - 'frame-system/std', - 'pallet-balances/std', - 'pallet-transaction-payment/std', - 'pallet-nft-transaction-payment/std', - 'sp-std/std', - 'sp-runtime/std', - 'frame-benchmarking/std', -] -runtime-benchmarks = ["frame-benchmarking"] --- a/pallets/nft-charge-transaction/src/lib.rs +++ /dev/null @@ -1,196 +0,0 @@ -// -// This file is subject to the terms and conditions defined in -// file 'LICENSE', which is part of this source code package. -// - -#![cfg_attr(not(feature = "std"), no_std)] - -#[cfg(feature = "std")] -pub use std::*; - -use scale_info::TypeInfo; -#[cfg(feature = "std")] -pub use serde::*; - -use codec::{Decode, Encode}; -use frame_support::traits::Get; -use frame_support::{ - decl_module, decl_storage, - weights::{DispatchInfo, PostDispatchInfo, DispatchClass}, -}; -use sp_runtime::{ - traits::{ - DispatchInfoOf, Dispatchable, PostDispatchInfoOf, Saturating, SaturatedConversion, - SignedExtension, Zero, - }, - transaction_validity::{ - TransactionPriority, TransactionValidity, TransactionValidityError, ValidTransaction, - }, - FixedPointOperand, DispatchResult, -}; -use pallet_transaction_payment::OnChargeTransaction; -use sp_std::prelude::*; - -pub trait Config: frame_system::Config + pallet_nft_transaction_payment::Config + TypeInfo {} - -decl_storage! { - trait Store for Module as NftTransactionPayment - {} -} - -decl_module! { - - pub struct Module for enum Call - where - origin: T::Origin, - {} -} - -type BalanceOf = <::OnChargeTransaction as pallet_transaction_payment::OnChargeTransaction>::Balance; - -/// Require the transactor pay for themselves and maybe include a tip to gain additional priority -/// in the queue. -#[derive(Encode, Decode, Clone, Eq, PartialEq, scale_info::TypeInfo)] -pub struct ChargeTransactionPayment(#[codec(compact)] BalanceOf); - -impl sp_std::fmt::Debug for ChargeTransactionPayment { - #[cfg(feature = "std")] - fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { - write!(f, "ChargeTransactionPayment<{:?}>", self.0) - } - #[cfg(not(feature = "std"))] - fn fmt(&self, _: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { - Ok(()) - } -} - -impl ChargeTransactionPayment -where - T::Call: Dispatchable, - BalanceOf: Send + Sync + From + FixedPointOperand, -{ - fn traditional_fee( - len: usize, - info: &DispatchInfoOf, - tip: BalanceOf, - ) -> BalanceOf - where - T::Call: Dispatchable, - { - >::compute_fee(len as u32, info, tip) - } - - fn get_priority( - len: usize, - info: &DispatchInfoOf, - final_fee: BalanceOf, - ) -> TransactionPriority { - let weight_saturation = T::BlockWeights::get().max_block / info.weight.max(1); - let max_block_length = *T::BlockLength::get().max.get(DispatchClass::Normal); - let len_saturation = max_block_length as u64 / (len as u64).max(1); - let coefficient: BalanceOf = weight_saturation - .min(len_saturation) - .saturated_into::>(); - final_fee - .saturating_mul(coefficient) - .saturated_into::() - } - - #[allow(clippy::type_complexity)] - fn withdraw_fee( - &self, - who: &T::AccountId, - call: &T::Call, - info: &DispatchInfoOf, - len: usize, - ) -> Result< - ( - BalanceOf, - <::OnChargeTransaction as pallet_transaction_payment::OnChargeTransaction>::LiquidityInfo, - ), - TransactionValidityError, - >{ - let tip = self.0; - - let fee = Self::traditional_fee(len, info, tip); - - // Only mess with balances if fee is not zero. - if fee.is_zero() { - return <::OnChargeTransaction as pallet_transaction_payment::OnChargeTransaction>::withdraw_fee(who, call, info, fee, tip) - .map(|i| (fee, i)); - } - - // Determine who is paying transaction fee based on ecnomic model - // Parse call to extract collection ID and access collection sponsor - let sponsor = >::withdraw_type(who, call); - - let who_pays_fee = sponsor.unwrap_or_else(|| who.clone()); - - <::OnChargeTransaction as pallet_transaction_payment::OnChargeTransaction>::withdraw_fee(&who_pays_fee, call, info, fee, tip) - .map(|i| (fee, i)) - } -} - -impl SignedExtension for ChargeTransactionPayment -where - BalanceOf: Send + Sync + From + FixedPointOperand, - T::Call: Dispatchable, -{ - const IDENTIFIER: &'static str = "ChargeTransactionPayment"; - type AccountId = T::AccountId; - type Call = T::Call; - type AdditionalSigned = (); - type Pre = ( - // tip - BalanceOf, - // who pays fee - Self::AccountId, - // imbalance resulting from withdrawing the fee - <::OnChargeTransaction as pallet_transaction_payment::OnChargeTransaction>::LiquidityInfo, - ); - fn additional_signed(&self) -> sp_std::result::Result<(), TransactionValidityError> { - Ok(()) - } - - fn validate( - &self, - who: &Self::AccountId, - call: &Self::Call, - info: &DispatchInfoOf, - len: usize, - ) -> TransactionValidity { - let (fee, _) = self.withdraw_fee(who, call, info, len)?; - Ok(ValidTransaction { - priority: Self::get_priority(len, info, fee), - ..Default::default() - }) - } - - fn pre_dispatch( - self, - who: &Self::AccountId, - call: &Self::Call, - info: &DispatchInfoOf, - len: usize, - ) -> Result { - let (_fee, imbalance) = self.withdraw_fee(who, call, info, len)?; - Ok((self.0, who.clone(), imbalance)) - } - - fn post_dispatch( - pre: Self::Pre, - info: &DispatchInfoOf, - post_info: &PostDispatchInfoOf, - len: usize, - _result: &DispatchResult, - ) -> Result<(), TransactionValidityError> { - let (tip, who, imbalance) = pre; - let actual_fee = pallet_transaction_payment::Pallet::::compute_actual_fee( - len as u32, info, post_info, tip, - ); - ::OnChargeTransaction::correct_and_deposit_fee( - &who, info, post_info, actual_fee, tip, imbalance, - )?; - Ok(()) - } -} --- a/pallets/nft-transaction-payment/Cargo.toml +++ b/pallets/nft-transaction-payment/Cargo.toml @@ -30,7 +30,7 @@ sp-io = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } sp-runtime = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } -up-sponsorship = { default-features = false, path = "../../primitives/sponsorship", version = "0.1.0" } +up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/UniqueNetwork/pallet-sponsoring" } [features] default = ['std'] --- a/pallets/nft/Cargo.toml +++ b/pallets/nft/Cargo.toml @@ -126,12 +126,6 @@ path = '../../primitives/nft' version = '0.9.0' -[dependencies.up-sponsorship] -default-features = false -path = '../../primitives/sponsorship' -version = '0.1.0' - - [dependencies] scale-info = { version = "1.0.0", default-features = false, features = [ "derive", @@ -140,6 +134,8 @@ rlp = { default-features = false, version = "0.5.0" } sp-api = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.12" } +up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/UniqueNetwork/pallet-sponsoring" } + evm-coder = { default-features = false, path = "../../crates/evm-coder" } pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" } primitive-types = { version = "0.10.1", default-features = false, features = [ --- a/pallets/scheduler/Cargo.toml +++ b/pallets/scheduler/Cargo.toml @@ -20,7 +20,7 @@ sp-io = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } frame-benchmarking = { default-features = false, optional = true, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' } -up-sponsorship = { default-features = false, path = "../../primitives/sponsorship", version = "0.1.0" } +up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/UniqueNetwork/pallet-sponsoring" } log = { version = "0.4.14", default-features = false } [dev-dependencies] --- a/primitives/sponsorship/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "up-sponsorship" -version = "0.1.0" -edition = "2018" - -[dependencies] -impl-trait-for-tuples = "0.2.1" - -[features] -default = ["std"] -std = [] \ No newline at end of file --- a/primitives/sponsorship/src/lib.rs +++ /dev/null @@ -1,42 +0,0 @@ -#![no_std] - -pub trait SponsorshipHandler { - fn get_sponsor(who: &AccountId, call: &Call) -> Option; -} - -impl SponsorshipHandler for () { - fn get_sponsor(_who: &A, _call: &C) -> Option { - None - } -} - -macro_rules! impl_tuples { - ($($ident:ident)+) => { - impl SponsorshipHandler for ($($ident,)+) - where - $( - $ident: SponsorshipHandler - ),+ - { - fn get_sponsor(who: &AccountId, call: &Call) -> Option { - $( - if let Some(account) = $ident::get_sponsor(who, call) { - return Some(account); - } - )+ - None - } - } - } -} - -impl_tuples! {A} -impl_tuples! {A B} -impl_tuples! {A B C} -impl_tuples! {A B C D} -impl_tuples! {A B C D E} -impl_tuples! {A B C D E F} -impl_tuples! {A B C D E F G} -impl_tuples! {A B C D E F G H} -impl_tuples! {A B C D E F G H I} -impl_tuples! {A B C D E F G H I J} --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -379,7 +379,7 @@ pallet-unq-scheduler = { path = '../pallets/scheduler', default-features = false, version = '3.0.0' } # pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' } pallet-nft-transaction-payment = { path = '../pallets/nft-transaction-payment', default-features = false, version = '3.0.0' } -pallet-nft-charge-transaction = { path = '../pallets/nft-charge-transaction', default-features = false, version = '3.0.0' } +pallet-nft-charge-transaction = {git = "https://github.com/UniqueNetwork/pallet-sponsoring", 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 } --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -802,7 +802,9 @@ type Currency = Balances; } -impl pallet_nft_charge_transaction::Config for Runtime {} +impl pallet_nft_charge_transaction::Config for Runtime { + type SponsorshipHandler = pallet_nft::NftSponsorshipHandler; +} // impl pallet_contract_helpers::Config for Runtime { // type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;