difftreelog
feat add nesting
in: master
5 files changed
Cargo.lockdiffbeforeafterboth--- a/Cargo.lock
+++ b/Cargo.lock
@@ -6264,9 +6264,11 @@
"pallet-evm",
"pallet-evm-coder-substrate",
"pallet-evm-transaction-payment",
+ "pallet-structure",
"parity-scale-codec",
"scale-info",
"sp-core",
+ "sp-runtime",
"sp-std",
"up-data-structs",
]
pallets/balances-adapter/Cargo.tomldiffbeforeafterboth--- a/pallets/balances-adapter/Cargo.toml
+++ b/pallets/balances-adapter/Cargo.toml
@@ -9,7 +9,9 @@
frame-support = { workspace = true }
frame-system = { workspace = true }
pallet-balances = { workspace = true }
+pallet-structure = { workspace = true }
sp-core = { workspace = true }
+sp-runtime = { workspace = true }
sp-std = { workspace = true }
#Parity
pallets/balances-adapter/src/common.rsdiffbeforeafterboth--- a/pallets/balances-adapter/src/common.rs
+++ b/pallets/balances-adapter/src/common.rs
@@ -1,13 +1,9 @@
use alloc::{vec, vec::Vec};
use core::marker::PhantomData;
-use crate::{Config, NativeFungibleHandle};
-use frame_support::{
- fail,
- traits::{Currency, ExistenceRequirement},
- weights::Weight,
-};
+use crate::{Config, NativeFungibleHandle, Pallet};
+use frame_support::{fail, traits::Currency, weights::Weight};
use pallet_balances::{weights::SubstrateWeight as BalancesWeight, WeightInfo};
-use pallet_common::{erc::CrossAccountId, CommonCollectionOperations, CommonWeightInfo, with_weight};
+use pallet_common::{erc::CrossAccountId, CommonCollectionOperations, CommonWeightInfo};
use up_data_structs::TokenId;
pub struct CommonWeights<T: Config>(PhantomData<T>);
@@ -188,17 +184,9 @@
to: <T>::CrossAccountId,
_token: TokenId,
amount: u128,
- _budget: &dyn up_data_structs::budget::Budget,
+ budget: &dyn up_data_structs::budget::Budget,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
- with_weight(
- <T as Config>::Currency::transfer(
- sender.as_sub(),
- to.as_sub(),
- amount.into(),
- ExistenceRequirement::KeepAlive,
- ),
- Default::default(),
- )
+ <Pallet<T>>::transfer(self, &sender, &to, amount, budget)
}
fn approve(
@@ -229,20 +217,9 @@
to: <T>::CrossAccountId,
_token: TokenId,
amount: u128,
- _budget: &dyn up_data_structs::budget::Budget,
+ budget: &dyn up_data_structs::budget::Budget,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
- if sender != from {
- fail!(<pallet_common::Error<T>>::NoPermission);
- }
- with_weight(
- <T as Config>::Currency::transfer(
- from.as_sub(),
- to.as_sub(),
- amount.into(),
- ExistenceRequirement::KeepAlive,
- ),
- Default::default(),
- )
+ <Pallet<T>>::transfer_from(self, &sender, &from, &to, amount, budget)
}
fn burn_from(
pallets/balances-adapter/src/erc.rsdiffbeforeafterboth--- a/pallets/balances-adapter/src/erc.rs
+++ b/pallets/balances-adapter/src/erc.rs
@@ -1,4 +1,4 @@
-use crate::{Config, NativeFungibleHandle, SelfWeightOf};
+use crate::{Config, NativeFungibleHandle, Pallet, SelfWeightOf};
use evm_coder::{abi::AbiType, ToLog, generate_stubgen, solidity_interface, types::*};
use frame_support::traits::{Currency, ExistenceRequirement};
use pallet_balances::WeightInfo;
@@ -10,8 +10,9 @@
use pallet_evm_coder_substrate::{
call, dispatch_to_evm,
execution::{PreDispatch, Result},
- frontier_contract,
+ frontier_contract, WithRecorder,
};
+use pallet_structure::{SelfWeightOf as StructureWeight, weights::WeightInfo as _};
use sp_core::{U256, Get};
use sp_std::vec::Vec;
@@ -73,18 +74,12 @@
let caller = T::CrossAccountId::from_eth(caller);
let to = T::CrossAccountId::from_eth(to);
let amount = amount.try_into().map_err(|_| "amount overflow")?;
- // let budget = self
- // .recorder
- // .weight_calls_budget(<StructureWeight<T>>::find_parent());
+ let budget = self
+ .recorder()
+ .weight_calls_budget(<StructureWeight<T>>::find_parent());
- // <Pallet<T>>::transfer(self, &caller, &to, amount, &budget).map_err(|_| "transfer error")?;
- <T as Config>::Currency::transfer(
- caller.as_sub(),
- to.as_sub(),
- amount,
- ExistenceRequirement::KeepAlive,
- )
- .map_err(dispatch_to_evm::<T>)?;
+ <Pallet<T>>::transfer(self, &caller, &to, amount, &budget)
+ .map_err(|e| dispatch_to_evm::<T>(e.error))?;
Ok(true)
}
@@ -100,23 +95,12 @@
let from = T::CrossAccountId::from_eth(from);
let to = T::CrossAccountId::from_eth(to);
let amount = amount.try_into().map_err(|_| "amount overflow")?;
-
- if from != caller {
- return Err("no permission".into());
- }
- // let budget = self
- // .recorder
- // .weight_calls_budget(<StructureWeight<T>>::find_parent());
+ let budget = self
+ .recorder()
+ .weight_calls_budget(<StructureWeight<T>>::find_parent());
- // <Pallet<T>>::transfer_from(self, &caller, &from, &to, amount, &budget)
- // .map_err(dispatch_to_evm::<T>)?;
- <T as Config>::Currency::transfer(
- caller.as_sub(),
- to.as_sub(),
- amount,
- ExistenceRequirement::KeepAlive,
- )
- .map_err(dispatch_to_evm::<T>)?;
+ <Pallet<T>>::transfer_from(self, &caller, &from, &to, amount, &budget)
+ .map_err(|e| dispatch_to_evm::<T>(e.error))?;
Ok(true)
}
}
pallets/balances-adapter/src/lib.rsdiffbeforeafterboth1// #![doc = include_str!("../README.md")]2#![cfg_attr(not(feature = "std"), no_std)]34extern crate alloc;5use core::ops::Deref;67use frame_support::sp_runtime::DispatchResult;8pub use pallet::*;9use pallet_evm_coder_substrate::{WithRecorder, SubstrateRecorder};1011pub mod common;12pub mod erc;1314pub(crate) type SelfWeightOf<T> = <T as Config>::WeightInfo;1516/// Handle for native fungible collection17pub struct NativeFungibleHandle<T: Config>(SubstrateRecorder<T>);18impl<T: Config> NativeFungibleHandle<T> {19 /// Creates a handle20 pub fn new() -> NativeFungibleHandle<T> {21 Self(SubstrateRecorder::new(u64::MAX))22 }2324 /// Check if the collection is internal25 pub fn check_is_internal(&self) -> DispatchResult {26 Ok(())27 }28}2930impl<T: Config> WithRecorder<T> for NativeFungibleHandle<T> {31 fn recorder(&self) -> &pallet_evm_coder_substrate::SubstrateRecorder<T> {32 &self.033 }34 fn into_recorder(self) -> pallet_evm_coder_substrate::SubstrateRecorder<T> {35 self.036 }37}3839impl<T: Config> Deref for NativeFungibleHandle<T> {40 type Target = SubstrateRecorder<T>;4142 fn deref(&self) -> &Self::Target {43 &self.044 }45}46#[frame_support::pallet]47pub mod pallet {48 use alloc::string::String;49 use frame_support::{traits::Get};50 use pallet_balances::WeightInfo;51 use sp_core::U256;5253 #[pallet::config]54 pub trait Config:55 frame_system::Config + pallet_evm_coder_substrate::Config + pallet_common::Config56 {57 /// Currency from `pallet_balances`58 type Currency: frame_support::traits::Currency<59 Self::AccountId,60 Balance = Self::CurrencyBalance,61 >;62 /// Balance type of chain63 type CurrencyBalance: Into<U256> + TryFrom<U256> + PartialEq<u128> + From<u128> + Into<u128>;6465 /// Decimals of balance66 type Decimals: Get<u8>;67 /// Collection name68 type Name: Get<String>;69 /// Collection symbol70 type Symbol: Get<String>;7172 /// Weight information73 type WeightInfo: WeightInfo;74 }75 #[pallet::pallet]76 pub struct Pallet<T>(_);77}