difftreelog
path: Return sponsor as a tuple.
in: master
3 files changed
crates/evm-coder/src/abi.rsdiffbeforeafterbothno syntactic changes
pallets/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,
pallets/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()
}