--- 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,)+ { --- 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(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( address: uint256, --- 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 . 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 ContractHelpers { +impl ContractHelpers +where + T::AccountId: AsRef<[u8]>, +{ fn contract_owner(&self, contract_address: address) -> Result
{ Ok(>::get(contract_address)) } @@ -72,17 +70,19 @@ Ok(()) } - fn get_sponsor(&self, contract_address: address) -> Result
{ + fn get_sponsor(&self, contract_address: address) -> Result<(address, uint256)> { let sponsor = Pallet::::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::(&sponsor); + Ok((*sponsor.as_eth(), sponsor_sub)) } fn sponsoring_enabled(&self, contract_address: address) -> Result { Ok(>::sponsoring_mode(contract_address) != SponsoringModeT::Disabled) } - /// Deprecated + /// Deprecated fn toggle_sponsoring( &mut self, caller: caller, @@ -161,7 +161,10 @@ } pub struct HelpersOnMethodCall(PhantomData<*const T>); -impl OnMethodCall for HelpersOnMethodCall { +impl OnMethodCall for HelpersOnMethodCall +where + T::AccountId: AsRef<[u8]>, +{ fn is_reserved(contract: &sp_core::H160) -> bool { contract == &T::ContractAddress::get() }