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

no syntactic changes

modifiedpallets/common/src/eth.rsdiffbeforeafterboth
--- a/pallets/common/src/eth.rs
+++ b/pallets/common/src/eth.rs
@@ -52,6 +52,16 @@
 	address[0..16] == ETH_COLLECTION_PREFIX
 }
 
+/// Convert `CrossAccountId` to `uint256`.
+pub fn convert_cross_account_to_eth_uint256<T: Config>(from: &T::CrossAccountId) -> uint256
+where
+	T::AccountId: AsRef<[u8]>,
+{
+	use pallet_evm::account::CrossAccountId;
+	let slice = from.as_sub().as_ref();
+	uint256::from_big_endian(slice)
+}
+
 /// Converts Substrate address to CrossAccountId
 pub fn convert_substrate_address_to_cross_account_id<T: Config>(
 	address: uint256,
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()
 	}