git.delta.rocks / unique-network / refs/commits / e50c7257388c

difftreelog

path: Return sponsor as a tuple.

Trubnikov Sergey2022-08-04parent: #14eb87c.patch.diff
in: master

3 files changed

modifiedcrates/evm-coder/src/abi.rsdiffbeforeafterboth
--- a/crates/evm-coder/src/abi.rs
+++ b/crates/evm-coder/src/abi.rs
@@ -425,7 +425,7 @@
 macro_rules! impl_tuples_abi_writer {
 	($($ident:ident)+) => {
 		#[allow(non_snake_case)]
-		impl<$($ident),+> AbiWrite for &($($ident,)+) 
+		impl<$($ident),+> AbiWrite for &($($ident,)+)
 		where
 			$($ident: AbiWrite,)+
 		{
modifiedpallets/common/src/eth.rsdiffbeforeafterboth
before · pallets/common/src/eth.rs
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//! The module contains a number of functions for converting and checking ethereum identifiers.1819use evm_coder::{types::*};20pub use pallet_evm::account::CrossAccountId;21use sp_core::H160;22use up_data_structs::CollectionId;2324use crate::Config;2526// 0x17c4e6453Cc49AAAaEACA894e6D9683e00000001 - collection 127// TODO: Unhardcode prefix28const ETH_COLLECTION_PREFIX: [u8; 16] = [29	0x17, 0xc4, 0xe6, 0x45, 0x3c, 0xc4, 0x9a, 0xaa, 0xae, 0xac, 0xa8, 0x94, 0xe6, 0xd9, 0x68, 0x3e,30];3132/// Maps the ethereum address of the collection in substrate.33pub fn map_eth_to_id(eth: &H160) -> Option<CollectionId> {34	if eth[0..16] != ETH_COLLECTION_PREFIX {35		return None;36	}37	let mut id_bytes = [0; 4];38	id_bytes.copy_from_slice(&eth[16..20]);39	Some(CollectionId(u32::from_be_bytes(id_bytes)))40}4142/// Maps the substrate collection id in ethereum.43pub fn collection_id_to_address(id: CollectionId) -> H160 {44	let mut out = [0; 20];45	out[0..16].copy_from_slice(&ETH_COLLECTION_PREFIX);46	out[16..20].copy_from_slice(&u32::to_be_bytes(id.0));47	H160(out)48}4950/// Check if the ethereum address is a collection.51pub fn is_collection(address: &H160) -> bool {52	address[0..16] == ETH_COLLECTION_PREFIX53}5455/// Converts Substrate address to CrossAccountId56pub fn convert_substrate_address_to_cross_account_id<T: Config>(57	address: uint256,58) -> T::CrossAccountId59where60	T::AccountId: From<[u8; 32]>,61{62	let mut address_arr: [u8; 32] = Default::default();63	address.to_big_endian(&mut address_arr);64	let account_id = T::AccountId::from(address_arr);65	T::CrossAccountId::from_sub(account_id)66}
modifiedpallets/evm-contract-helpers/src/eth.rsdiffbeforeafterboth
--- a/pallets/evm-contract-helpers/src/eth.rs
+++ b/pallets/evm-contract-helpers/src/eth.rs
@@ -15,12 +15,7 @@
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 use core::marker::PhantomData;
-use evm_coder::{
-	abi::AbiWriter,
-	execution::{Result, Error},
-	generate_stubgen, solidity_interface,
-	types::*,
-};
+use evm_coder::{abi::AbiWriter, execution::Result, generate_stubgen, solidity_interface, types::*};
 use pallet_evm_coder_substrate::{SubstrateRecorder, WithRecorder, dispatch_to_evm};
 use pallet_evm::{
 	ExitRevert, OnCreate, OnMethodCall, PrecompileResult, PrecompileFailure, PrecompileHandle,
@@ -46,7 +41,10 @@
 }
 
 #[solidity_interface(name = "ContractHelpers")]
-impl<T: Config> ContractHelpers<T> {
+impl<T: Config> ContractHelpers<T>
+where
+	T::AccountId: AsRef<[u8]>,
+{
 	fn contract_owner(&self, contract_address: address) -> Result<address> {
 		Ok(<Owner<T>>::get(contract_address))
 	}
@@ -72,17 +70,19 @@
 		Ok(())
 	}
 
-	fn get_sponsor(&self, contract_address: address) -> Result<address> {
+	fn get_sponsor(&self, contract_address: address) -> Result<(address, uint256)> {
 		let sponsor =
 			Pallet::<T>::get_sponsor(contract_address).ok_or("Contract has no sponsor")?;
-		Ok(*sponsor.as_eth())
+		let sponsor_sub =
+			pallet_common::eth::convert_cross_account_to_eth_uint256::<T>(&sponsor);
+		Ok((*sponsor.as_eth(), sponsor_sub))
 	}
 
 	fn sponsoring_enabled(&self, contract_address: address) -> Result<bool> {
 		Ok(<Pallet<T>>::sponsoring_mode(contract_address) != SponsoringModeT::Disabled)
 	}
 
-	/// Deprecated
+	/// Deprecated 
 	fn toggle_sponsoring(
 		&mut self,
 		caller: caller,
@@ -161,7 +161,10 @@
 }
 
 pub struct HelpersOnMethodCall<T: Config>(PhantomData<*const T>);
-impl<T: Config> OnMethodCall<T> for HelpersOnMethodCall<T> {
+impl<T: Config> OnMethodCall<T> for HelpersOnMethodCall<T>
+where
+	T::AccountId: AsRef<[u8]>,
+{
 	fn is_reserved(contract: &sp_core::H160) -> bool {
 		contract == &T::ContractAddress::get()
 	}