difftreelog
remove warnings
in: master
8 files changed
pallets/balances-adapter/src/common.rsdiffbeforeafterboth--- a/pallets/balances-adapter/src/common.rs
+++ b/pallets/balances-adapter/src/common.rs
@@ -12,12 +12,12 @@
pub struct CommonWeights<T: Config>(PhantomData<T>);
impl<T: Config> CommonWeightInfo<T::CrossAccountId> for CommonWeights<T> {
- fn create_multiple_items(amount: &[up_data_structs::CreateItemData]) -> Weight {
+ fn create_multiple_items(_amount: &[up_data_structs::CreateItemData]) -> Weight {
Weight::default()
}
fn create_multiple_items_ex(
- cost: &up_data_structs::CreateItemExData<T::CrossAccountId>,
+ _cost: &up_data_structs::CreateItemExData<T::CrossAccountId>,
) -> Weight {
Weight::default()
}
@@ -26,23 +26,23 @@
Weight::default()
}
- fn set_collection_properties(amount: u32) -> Weight {
+ fn set_collection_properties(_amount: u32) -> Weight {
Weight::default()
}
- fn delete_collection_properties(amount: u32) -> Weight {
+ fn delete_collection_properties(_amount: u32) -> Weight {
Weight::default()
}
- fn set_token_properties(amount: u32) -> Weight {
+ fn set_token_properties(_amount: u32) -> Weight {
Weight::default()
}
- fn delete_token_properties(amount: u32) -> Weight {
+ fn delete_token_properties(_amount: u32) -> Weight {
Weight::default()
}
- fn set_token_property_permissions(amount: u32) -> Weight {
+ fn set_token_property_permissions(_amount: u32) -> Weight {
Weight::default()
}
@@ -70,7 +70,7 @@
Weight::default()
}
- fn burn_recursively_breadth_raw(amount: u32) -> Weight {
+ fn burn_recursively_breadth_raw(_amount: u32) -> Weight {
Weight::default()
}
@@ -92,92 +92,92 @@
impl<T: Config> CommonCollectionOperations<T> for NativeFungibleHandle<T> {
fn create_item(
&self,
- sender: <T>::CrossAccountId,
- to: <T>::CrossAccountId,
- data: up_data_structs::CreateItemData,
- nesting_budget: &dyn up_data_structs::budget::Budget,
+ _sender: <T>::CrossAccountId,
+ _to: <T>::CrossAccountId,
+ _data: up_data_structs::CreateItemData,
+ _nesting_budget: &dyn up_data_structs::budget::Budget,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
fn create_multiple_items(
&self,
- sender: <T>::CrossAccountId,
- to: <T>::CrossAccountId,
- data: Vec<up_data_structs::CreateItemData>,
- nesting_budget: &dyn up_data_structs::budget::Budget,
+ _sender: <T>::CrossAccountId,
+ _to: <T>::CrossAccountId,
+ _data: Vec<up_data_structs::CreateItemData>,
+ _nesting_budget: &dyn up_data_structs::budget::Budget,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
fn create_multiple_items_ex(
&self,
- sender: <T>::CrossAccountId,
- data: up_data_structs::CreateItemExData<<T>::CrossAccountId>,
- nesting_budget: &dyn up_data_structs::budget::Budget,
+ _sender: <T>::CrossAccountId,
+ _data: up_data_structs::CreateItemExData<<T>::CrossAccountId>,
+ _nesting_budget: &dyn up_data_structs::budget::Budget,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
fn burn_item(
&self,
- sender: <T>::CrossAccountId,
- token: TokenId,
- amount: u128,
+ _sender: <T>::CrossAccountId,
+ _token: TokenId,
+ _amount: u128,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
fn burn_item_recursively(
&self,
- sender: <T>::CrossAccountId,
- token: TokenId,
- self_budget: &dyn up_data_structs::budget::Budget,
- breadth_budget: &dyn up_data_structs::budget::Budget,
+ _sender: <T>::CrossAccountId,
+ _token: TokenId,
+ _self_budget: &dyn up_data_structs::budget::Budget,
+ _breadth_budget: &dyn up_data_structs::budget::Budget,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
fn set_collection_properties(
&self,
- sender: <T>::CrossAccountId,
- properties: Vec<up_data_structs::Property>,
+ _sender: <T>::CrossAccountId,
+ _properties: Vec<up_data_structs::Property>,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
fn delete_collection_properties(
&self,
- sender: &<T>::CrossAccountId,
- property_keys: Vec<up_data_structs::PropertyKey>,
+ _sender: &<T>::CrossAccountId,
+ _property_keys: Vec<up_data_structs::PropertyKey>,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
fn set_token_properties(
&self,
- sender: <T>::CrossAccountId,
- token_id: TokenId,
- properties: Vec<up_data_structs::Property>,
- budget: &dyn up_data_structs::budget::Budget,
+ _sender: <T>::CrossAccountId,
+ _token_id: TokenId,
+ _properties: Vec<up_data_structs::Property>,
+ _budget: &dyn up_data_structs::budget::Budget,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
fn delete_token_properties(
&self,
- sender: <T>::CrossAccountId,
- token_id: TokenId,
- property_keys: Vec<up_data_structs::PropertyKey>,
- budget: &dyn up_data_structs::budget::Budget,
+ _sender: <T>::CrossAccountId,
+ _token_id: TokenId,
+ _property_keys: Vec<up_data_structs::PropertyKey>,
+ _budget: &dyn up_data_structs::budget::Budget,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
fn set_token_property_permissions(
&self,
- sender: &<T>::CrossAccountId,
- property_permissions: Vec<up_data_structs::PropertyKeyPermission>,
+ _sender: &<T>::CrossAccountId,
+ _property_permissions: Vec<up_data_structs::PropertyKeyPermission>,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
@@ -186,9 +186,9 @@
&self,
sender: <T>::CrossAccountId,
to: <T>::CrossAccountId,
- token: TokenId,
+ _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(
@@ -203,21 +203,21 @@
fn approve(
&self,
- sender: <T>::CrossAccountId,
- spender: <T>::CrossAccountId,
- token: TokenId,
- amount: u128,
+ _sender: <T>::CrossAccountId,
+ _spender: <T>::CrossAccountId,
+ _token: TokenId,
+ _amount: u128,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
fn approve_from(
&self,
- sender: <T>::CrossAccountId,
- from: <T>::CrossAccountId,
- to: <T>::CrossAccountId,
- token: TokenId,
- amount: u128,
+ _sender: <T>::CrossAccountId,
+ _from: <T>::CrossAccountId,
+ _to: <T>::CrossAccountId,
+ _token: TokenId,
+ _amount: u128,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
@@ -227,9 +227,9 @@
sender: <T>::CrossAccountId,
from: <T>::CrossAccountId,
to: <T>::CrossAccountId,
- token: TokenId,
+ _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);
@@ -247,28 +247,28 @@
fn burn_from(
&self,
- sender: <T>::CrossAccountId,
- from: <T>::CrossAccountId,
- token: TokenId,
- amount: u128,
- budget: &dyn up_data_structs::budget::Budget,
+ _sender: <T>::CrossAccountId,
+ _from: <T>::CrossAccountId,
+ _token: TokenId,
+ _amount: u128,
+ _budget: &dyn up_data_structs::budget::Budget,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
fn check_nesting(
&self,
- sender: <T>::CrossAccountId,
- from: (up_data_structs::CollectionId, TokenId),
- under: TokenId,
- budget: &dyn up_data_structs::budget::Budget,
+ _sender: <T>::CrossAccountId,
+ _from: (up_data_structs::CollectionId, TokenId),
+ _under: TokenId,
+ _budget: &dyn up_data_structs::budget::Budget,
) -> frame_support::sp_runtime::DispatchResult {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
- fn nest(&self, under: TokenId, to_nest: (up_data_structs::CollectionId, TokenId)) {}
+ fn nest(&self, _under: TokenId, _to_nest: (up_data_structs::CollectionId, TokenId)) {}
- fn unnest(&self, under: TokenId, to_nest: (up_data_structs::CollectionId, TokenId)) {}
+ fn unnest(&self, _under: TokenId, _to_nest: (up_data_structs::CollectionId, TokenId)) {}
fn account_tokens(&self, account: <T>::CrossAccountId) -> Vec<TokenId> {
let balance = <T as Config>::Currency::total_balance(account.as_sub());
@@ -293,27 +293,27 @@
fn token_owner(
&self,
- token: TokenId,
+ _token: TokenId,
) -> Result<<T>::CrossAccountId, up_data_structs::TokenOwnerError> {
Err(up_data_structs::TokenOwnerError::MultipleOwners)
}
- fn token_owners(&self, token: TokenId) -> Vec<<T>::CrossAccountId> {
+ fn token_owners(&self, _token: TokenId) -> Vec<<T>::CrossAccountId> {
vec![]
}
fn token_property(
&self,
- token_id: TokenId,
- key: &up_data_structs::PropertyKey,
+ _token_id: TokenId,
+ _key: &up_data_structs::PropertyKey,
) -> Option<up_data_structs::PropertyValue> {
None
}
fn token_properties(
&self,
- token: TokenId,
- keys: Option<Vec<up_data_structs::PropertyKey>>,
+ _token: TokenId,
+ _keys: Option<Vec<up_data_structs::PropertyKey>>,
) -> Vec<up_data_structs::Property> {
vec![]
}
@@ -344,9 +344,9 @@
fn allowance(
&self,
- sender: <T>::CrossAccountId,
- spender: <T>::CrossAccountId,
- token: TokenId,
+ _sender: <T>::CrossAccountId,
+ _spender: <T>::CrossAccountId,
+ _token: TokenId,
) -> u128 {
0
}
@@ -357,20 +357,24 @@
fn set_allowance_for_all(
&self,
- owner: <T>::CrossAccountId,
- operator: <T>::CrossAccountId,
- approve: bool,
+ _owner: <T>::CrossAccountId,
+ _operator: <T>::CrossAccountId,
+ _approve: bool,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
- fn allowance_for_all(&self, owner: <T>::CrossAccountId, operator: <T>::CrossAccountId) -> bool {
+ fn allowance_for_all(
+ &self,
+ _owner: <T>::CrossAccountId,
+ _operator: <T>::CrossAccountId,
+ ) -> bool {
false
}
fn repair_item(
&self,
- token: TokenId,
+ _token: TokenId,
) -> frame_support::pallet_prelude::DispatchResultWithPostInfo {
fail!(<pallet_common::Error<T>>::UnsupportedOperation);
}
pallets/balances-adapter/src/erc.rsdiffbeforeafterboth1use crate::{Config, NativeFungibleHandle, SelfWeightOf};2use evm_coder::{abi::AbiType, ToLog, generate_stubgen, solidity_interface, types::*};3use frame_support::traits::{Currency, ExistenceRequirement};4use pallet_balances::WeightInfo;5use pallet_common::{6 erc::{CommonEvmHandler, CrossAccountId, PrecompileHandle, PrecompileResult},7 eth::CrossAddress,8};9use pallet_evm_coder_substrate::{10 call, dispatch_to_evm,11 execution::{PreDispatch, Result},12 frontier_contract, WithRecorder, SubstrateRecorder,13};14use sp_core::{U256, Get};15use sp_std::vec::Vec;1617frontier_contract! {18 macro_rules! NativeFungibleHandle_result {...}19 impl<T: Config> Contract for NativeFungibleHandle<T> {...}20}2122#[derive(ToLog)]23pub enum ERC20Events {24 Transfer {25 #[indexed]26 from: Address,27 #[indexed]28 to: Address,29 value: U256,30 },31 Approval {32 #[indexed]33 owner: Address,34 #[indexed]35 spender: Address,36 value: U256,37 },38}3940#[solidity_interface(name = ERC20, events(ERC20Events), enum(derive(PreDispatch)), enum_attr(weight), expect_selector = 0x942e8b22)]41impl<T: Config> NativeFungibleHandle<T> {42 fn allowance(&self, _owner: Address, _spender: Address) -> Result<U256> {43 Ok(U256::zero())44 }4546 // #[weight(<SelfWeightOf<T>>::approve())]47 fn approve(&mut self, _caller: Caller, _spender: Address, _amount: U256) -> Result<bool> {48 // self.consume_store_reads(1)?;49 Err("Approve not supported".into())50 }5152 fn balance_of(&self, owner: Address) -> Result<U256> {53 // self.consume_store_reads(1)?;54 let owner = T::CrossAccountId::from_eth(owner);55 let balance = <T as Config>::Currency::free_balance(owner.as_sub());56 Ok(balance.into())57 }5859 fn decimals(&self) -> Result<u8> {60 Ok(T::Decimals::get())61 }6263 fn name(&self) -> Result<String> {64 Ok(T::Name::get())65 }6667 fn symbol(&self) -> Result<String> {68 Ok(T::Symbol::get())69 }7071 fn total_supply(&self) -> Result<U256> {72 // self.consume_store_reads(1)?;73 let total = <T as Config>::Currency::total_issuance();74 Ok(total.into())75 }7677 #[weight(<SelfWeightOf<T>>::transfer())]78 fn transfer(&mut self, caller: Caller, to: Address, amount: U256) -> Result<bool> {79 let caller = T::CrossAccountId::from_eth(caller);80 let to = T::CrossAccountId::from_eth(to);81 let amount = amount.try_into().map_err(|_| "amount overflow")?;82 // let budget = self83 // .recorder84 // .weight_calls_budget(<StructureWeight<T>>::find_parent());8586 // <Pallet<T>>::transfer(self, &caller, &to, amount, &budget).map_err(|_| "transfer error")?;87 <T as Config>::Currency::transfer(88 caller.as_sub(),89 to.as_sub(),90 amount,91 ExistenceRequirement::KeepAlive,92 )93 .map_err(dispatch_to_evm::<T>)?;94 Ok(true)95 }9697 #[weight(<SelfWeightOf<T>>::transfer())]98 fn transfer_from(99 &mut self,100 caller: Caller,101 from: Address,102 to: Address,103 amount: U256,104 ) -> Result<bool> {105 let caller = T::CrossAccountId::from_eth(caller);106 let from = T::CrossAccountId::from_eth(from);107 let to = T::CrossAccountId::from_eth(to);108 let amount = amount.try_into().map_err(|_| "amount overflow")?;109110 if from != caller {111 return Err("no permission".into());112 }113 // let budget = self114 // .recorder115 // .weight_calls_budget(<StructureWeight<T>>::find_parent());116117 // <Pallet<T>>::transfer_from(self, &caller, &from, &to, amount, &budget)118 // .map_err(dispatch_to_evm::<T>)?;119 <T as Config>::Currency::transfer(120 caller.as_sub(),121 to.as_sub(),122 amount,123 ExistenceRequirement::KeepAlive,124 )125 .map_err(dispatch_to_evm::<T>)?;126 Ok(true)127 }128}129130#[solidity_interface(name = ERC20UniqueExtensions, enum(derive(PreDispatch)), enum_attr(weight))]131impl<T: Config> NativeFungibleHandle<T>132where133 T::AccountId: From<[u8; 32]>,134{135 fn balance_of_cross(&self, owner: CrossAddress) -> Result<U256> {136 // self.consume_store_reads(1)?;137 let owner = owner.into_sub_cross_account::<T>()?;138 let balance = <T as Config>::Currency::free_balance(owner.as_sub());139 Ok(balance.into())140 }141142 #[weight(<SelfWeightOf<T>>::transfer())]143 fn transfer_cross(&mut self, caller: Caller, to: CrossAddress, amount: U256) -> Result<bool> {144 let caller = T::CrossAccountId::from_eth(caller);145 let to = to.into_sub_cross_account::<T>()?;146 let amount = amount.try_into().map_err(|_| "amount overflow")?;147 // let budget = self148 // .recorder149 // .weight_calls_budget(<StructureWeight<T>>::find_parent());150151 // <Pallet<T>>::transfer(self, &caller, &to, amount, &budget).map_err(|_| "transfer error")?;152 <T as Config>::Currency::transfer(153 caller.as_sub(),154 to.as_sub(),155 amount,156 ExistenceRequirement::KeepAlive,157 )158 .map_err(dispatch_to_evm::<T>)?;159 Ok(true)160 }161162 #[weight(<SelfWeightOf<T>>::transfer())]163 fn transfer_from_cross(164 &mut self,165 caller: Caller,166 from: CrossAddress,167 to: CrossAddress,168 amount: U256,169 ) -> Result<bool> {170 let caller = T::CrossAccountId::from_eth(caller);171 let from = from.into_sub_cross_account::<T>()?;172 let to = to.into_sub_cross_account::<T>()?;173 let amount = amount.try_into().map_err(|_| "amount overflow")?;174175 if from != caller {176 return Err("no permission".into());177 }178179 // let budget = self180 // .recorder181 // .weight_calls_budget(<StructureWeight<T>>::find_parent());182183 // <Pallet<T>>::transfer_from(self, &caller, &from, &to, amount, &budget)184 // .map_err(dispatch_to_evm::<T>)?;185 <T as Config>::Currency::transfer(186 caller.as_sub(),187 to.as_sub(),188 amount,189 ExistenceRequirement::KeepAlive,190 )191 .map_err(dispatch_to_evm::<T>)?;192 Ok(true)193 }194}195196#[solidity_interface(197 name = UniqueNativeFungible,198 is(ERC20, ERC20UniqueExtensions),199 enum(derive(PreDispatch))200)]201impl<T: Config> NativeFungibleHandle<T> where T::AccountId: From<[u8; 32]> + AsRef<[u8; 32]> {}202203generate_stubgen!(gen_impl, UniqueNativeFungibleCall<()>, true);204generate_stubgen!(gen_iface, UniqueNativeFungibleCall<()>, false);205206impl<T: Config> CommonEvmHandler for NativeFungibleHandle<T>207where208 T::AccountId: From<[u8; 32]> + AsRef<[u8; 32]>,209{210 const CODE: &'static [u8] = include_bytes!("./stubs/UniqueNativeFungible.raw");211212 fn call(self, handle: &mut impl PrecompileHandle) -> Option<PrecompileResult> {213 call::<T, UniqueNativeFungibleCall<T>, _, _>(handle, self)214 }215}1use crate::{Config, NativeFungibleHandle, SelfWeightOf};2use evm_coder::{abi::AbiType, ToLog, generate_stubgen, solidity_interface, types::*};3use frame_support::traits::{Currency, ExistenceRequirement};4use pallet_balances::WeightInfo;5use pallet_common::{6 erc::{CommonEvmHandler, CrossAccountId, PrecompileHandle, PrecompileResult},7 eth::CrossAddress,8};9use pallet_evm_coder_substrate::{10 call, dispatch_to_evm,11 execution::{PreDispatch, Result},12 frontier_contract,13};14use sp_core::{U256, Get};15use sp_std::vec::Vec;1617frontier_contract! {18 macro_rules! NativeFungibleHandle_result {...}19 impl<T: Config> Contract for NativeFungibleHandle<T> {...}20}2122#[derive(ToLog)]23pub enum ERC20Events {24 Transfer {25 #[indexed]26 from: Address,27 #[indexed]28 to: Address,29 value: U256,30 },31}3233#[solidity_interface(name = ERC20, events(ERC20Events), enum(derive(PreDispatch)), enum_attr(weight), expect_selector = 0x942e8b22)]34impl<T: Config> NativeFungibleHandle<T> {35 fn allowance(&self, _owner: Address, _spender: Address) -> Result<U256> {36 Ok(U256::zero())37 }3839 // #[weight(<SelfWeightOf<T>>::approve())]40 fn approve(&mut self, _caller: Caller, _spender: Address, _amount: U256) -> Result<bool> {41 // self.consume_store_reads(1)?;42 Err("Approve not supported".into())43 }4445 fn balance_of(&self, owner: Address) -> Result<U256> {46 // self.consume_store_reads(1)?;47 let owner = T::CrossAccountId::from_eth(owner);48 let balance = <T as Config>::Currency::free_balance(owner.as_sub());49 Ok(balance.into())50 }5152 fn decimals(&self) -> Result<u8> {53 Ok(T::Decimals::get())54 }5556 fn name(&self) -> Result<String> {57 Ok(T::Name::get())58 }5960 fn symbol(&self) -> Result<String> {61 Ok(T::Symbol::get())62 }6364 fn total_supply(&self) -> Result<U256> {65 // self.consume_store_reads(1)?;66 let total = <T as Config>::Currency::total_issuance();67 Ok(total.into())68 }6970 #[weight(<SelfWeightOf<T>>::transfer())]71 fn transfer(&mut self, caller: Caller, to: Address, amount: U256) -> Result<bool> {72 let caller = T::CrossAccountId::from_eth(caller);73 let to = T::CrossAccountId::from_eth(to);74 let amount = amount.try_into().map_err(|_| "amount overflow")?;75 // let budget = self76 // .recorder77 // .weight_calls_budget(<StructureWeight<T>>::find_parent());7879 // <Pallet<T>>::transfer(self, &caller, &to, amount, &budget).map_err(|_| "transfer error")?;80 <T as Config>::Currency::transfer(81 caller.as_sub(),82 to.as_sub(),83 amount,84 ExistenceRequirement::KeepAlive,85 )86 .map_err(dispatch_to_evm::<T>)?;87 Ok(true)88 }8990 #[weight(<SelfWeightOf<T>>::transfer())]91 fn transfer_from(92 &mut self,93 caller: Caller,94 from: Address,95 to: Address,96 amount: U256,97 ) -> Result<bool> {98 let caller = T::CrossAccountId::from_eth(caller);99 let from = T::CrossAccountId::from_eth(from);100 let to = T::CrossAccountId::from_eth(to);101 let amount = amount.try_into().map_err(|_| "amount overflow")?;102103 if from != caller {104 return Err("no permission".into());105 }106 // let budget = self107 // .recorder108 // .weight_calls_budget(<StructureWeight<T>>::find_parent());109110 // <Pallet<T>>::transfer_from(self, &caller, &from, &to, amount, &budget)111 // .map_err(dispatch_to_evm::<T>)?;112 <T as Config>::Currency::transfer(113 caller.as_sub(),114 to.as_sub(),115 amount,116 ExistenceRequirement::KeepAlive,117 )118 .map_err(dispatch_to_evm::<T>)?;119 Ok(true)120 }121}122123#[solidity_interface(name = ERC20UniqueExtensions, enum(derive(PreDispatch)), enum_attr(weight))]124impl<T: Config> NativeFungibleHandle<T>125where126 T::AccountId: From<[u8; 32]>,127{128 fn balance_of_cross(&self, owner: CrossAddress) -> Result<U256> {129 // self.consume_store_reads(1)?;130 let owner = owner.into_sub_cross_account::<T>()?;131 let balance = <T as Config>::Currency::free_balance(owner.as_sub());132 Ok(balance.into())133 }134135 #[weight(<SelfWeightOf<T>>::transfer())]136 fn transfer_cross(&mut self, caller: Caller, to: CrossAddress, amount: U256) -> Result<bool> {137 let caller = T::CrossAccountId::from_eth(caller);138 let to = to.into_sub_cross_account::<T>()?;139 let amount = amount.try_into().map_err(|_| "amount overflow")?;140 // let budget = self141 // .recorder142 // .weight_calls_budget(<StructureWeight<T>>::find_parent());143144 // <Pallet<T>>::transfer(self, &caller, &to, amount, &budget).map_err(|_| "transfer error")?;145 <T as Config>::Currency::transfer(146 caller.as_sub(),147 to.as_sub(),148 amount,149 ExistenceRequirement::KeepAlive,150 )151 .map_err(dispatch_to_evm::<T>)?;152 Ok(true)153 }154155 #[weight(<SelfWeightOf<T>>::transfer())]156 fn transfer_from_cross(157 &mut self,158 caller: Caller,159 from: CrossAddress,160 to: CrossAddress,161 amount: U256,162 ) -> Result<bool> {163 let caller = T::CrossAccountId::from_eth(caller);164 let from = from.into_sub_cross_account::<T>()?;165 let to = to.into_sub_cross_account::<T>()?;166 let amount = amount.try_into().map_err(|_| "amount overflow")?;167168 if from != caller {169 return Err("no permission".into());170 }171172 // let budget = self173 // .recorder174 // .weight_calls_budget(<StructureWeight<T>>::find_parent());175176 // <Pallet<T>>::transfer_from(self, &caller, &from, &to, amount, &budget)177 // .map_err(dispatch_to_evm::<T>)?;178 <T as Config>::Currency::transfer(179 caller.as_sub(),180 to.as_sub(),181 amount,182 ExistenceRequirement::KeepAlive,183 )184 .map_err(dispatch_to_evm::<T>)?;185 Ok(true)186 }187}188189#[solidity_interface(190 name = UniqueNativeFungible,191 is(ERC20, ERC20UniqueExtensions),192 enum(derive(PreDispatch))193)]194impl<T: Config> NativeFungibleHandle<T> where T::AccountId: From<[u8; 32]> + AsRef<[u8; 32]> {}195196generate_stubgen!(gen_impl, UniqueNativeFungibleCall<()>, true);197generate_stubgen!(gen_iface, UniqueNativeFungibleCall<()>, false);198199impl<T: Config> CommonEvmHandler for NativeFungibleHandle<T>200where201 T::AccountId: From<[u8; 32]> + AsRef<[u8; 32]>,202{203 const CODE: &'static [u8] = include_bytes!("./stubs/UniqueNativeFungible.raw");204205 fn call(self, handle: &mut impl PrecompileHandle) -> Option<PrecompileResult> {206 call::<T, UniqueNativeFungibleCall<T>, _, _>(handle, self)207 }208}pallets/balances-adapter/src/lib.rsdiffbeforeafterboth--- a/pallets/balances-adapter/src/lib.rs
+++ b/pallets/balances-adapter/src/lib.rs
@@ -1,11 +1,9 @@
// #![doc = include_str!("../README.md")]
#![cfg_attr(not(feature = "std"), no_std)]
-#![warn(missing_docs)]
extern crate alloc;
use frame_support::sp_runtime::DispatchResult;
pub use pallet::*;
-use pallet_common::CollectionHandle;
use pallet_evm_coder_substrate::{WithRecorder, SubstrateRecorder};
pub mod common;
@@ -13,12 +11,15 @@
pub(crate) type SelfWeightOf<T> = <T as Config>::WeightInfo;
+/// Handle for native fungible collection
pub struct NativeFungibleHandle<T: Config>(SubstrateRecorder<T>);
impl<T: Config> NativeFungibleHandle<T> {
+ /// Creates a handle
pub fn new() -> NativeFungibleHandle<T> {
Self(SubstrateRecorder::new(u64::MAX))
}
+ /// Check if the collection is internal
pub fn check_is_internal(&self) -> DispatchResult {
Ok(())
}
@@ -35,7 +36,7 @@
#[frame_support::pallet]
pub mod pallet {
use alloc::string::String;
- use frame_support::{traits::Get, sp_runtime::DispatchResult};
+ use frame_support::{traits::Get};
use pallet_balances::WeightInfo;
use sp_core::U256;
@@ -43,25 +44,24 @@
pub trait Config:
frame_system::Config + pallet_evm_coder_substrate::Config + pallet_common::Config
{
+ /// Currency from `pallet_balances`
type Currency: frame_support::traits::Currency<
Self::AccountId,
Balance = Self::CurrencyBalance,
>;
+ /// Balance type of chain
type CurrencyBalance: Into<U256> + TryFrom<U256> + PartialEq<u128> + From<u128> + Into<u128>;
+ /// Decimals of balance
type Decimals: Get<u8>;
+ /// Collection name
type Name: Get<String>;
+ /// Collection symbol
type Symbol: Get<String>;
+ /// Weight information
type WeightInfo: WeightInfo;
}
#[pallet::pallet]
pub struct Pallet<T>(_);
-
- // #[pallet::call]
- impl<T: Config> Pallet<T> {
- pub fn dummy() -> DispatchResult {
- Ok(())
- }
- }
}
pallets/common/src/dispatch.rsdiffbeforeafterboth--- a/pallets/common/src/dispatch.rs
+++ b/pallets/common/src/dispatch.rs
@@ -11,7 +11,7 @@
use sp_runtime::DispatchError;
use up_data_structs::{CollectionId, CreateCollectionData, CollectionFlags};
-use crate::{pallet::Config, CommonCollectionOperations, CollectionHandle};
+use crate::{pallet::Config, CommonCollectionOperations};
// TODO: move to benchmarking
/// Price of [`dispatch_tx`] call with noop `call` argument
@@ -66,6 +66,7 @@
/// Interface for working with different collections through the dispatcher.
pub trait CollectionDispatch<T: Config> {
+ /// Check if the collection is internal.
fn check_is_internal(&self) -> DispatchResult;
/// Create a collection. The collection will be created according to the value of [`data.mode`](CreateCollectionData::mode).
pallets/common/src/erc.rsdiffbeforeafterboth--- a/pallets/common/src/erc.rs
+++ b/pallets/common/src/erc.rs
@@ -80,7 +80,7 @@
impl CommonEvmHandler for () {
const CODE: &'static [u8] = &[];
- fn call(self, handle: &mut impl PrecompileHandle) -> Option<PrecompileResult> {
+ fn call(self, _handle: &mut impl PrecompileHandle) -> Option<PrecompileResult> {
None
}
}
pallets/common/src/lib.rsdiffbeforeafterboth--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -462,6 +462,7 @@
}
const STORAGE_VERSION: StorageVersion = StorageVersion::new(1);
+ /// Collection id for native fungible collction.
pub const NATIVE_FINGIBLE_COLLECTION_ID: CollectionId = CollectionId(0);
#[pallet::pallet]
pallets/structure/src/lib.rsdiffbeforeafterboth--- a/pallets/structure/src/lib.rs
+++ b/pallets/structure/src/lib.rs
@@ -60,7 +60,7 @@
use frame_support::dispatch::{DispatchError, DispatchResult, DispatchResultWithPostInfo};
use frame_support::fail;
pub use pallet::*;
-use pallet_common::{dispatch::CollectionDispatch, CollectionHandle};
+use pallet_common::{dispatch::CollectionDispatch};
use up_data_structs::{
CollectionId, TokenId, mapping::TokenAddressMapping, budget::Budget, TokenOwnerError,
};
runtime/common/dispatch.rsdiffbeforeafterboth--- a/runtime/common/dispatch.rs
+++ b/runtime/common/dispatch.rs
@@ -25,7 +25,7 @@
};
pub use pallet_common::dispatch::CollectionDispatch;
use pallet_fungible::{Pallet as PalletFungible, FungibleHandle};
-use pallet_balances_adapter::{Pallet as PalletNativeFungible, NativeFungibleHandle};
+use pallet_balances_adapter::{NativeFungibleHandle};
use pallet_nonfungible::{Pallet as PalletNonfungible, NonfungibleHandle};
use pallet_refungible::{
Pallet as PalletRefungible, RefungibleHandle, erc_token::RefungibleTokenHandle,