Contract Helpers
Address: 0x842899ECF380553E8a4de75bF534cdf6fBF64049
This precompiled contract allows the owner to manage the sponsorship of their contract.
Interface
Below is an overview of the ContractHelpers API.
Click here to see the full interface
// SPDX-License-Identifier: OTHER
// This code is automatically generated
pragma solidity >=0.8.0 <0.9.0;
/// @dev common stubs holder
interface Dummy {
}
interface ERC165 is Dummy {
function supportsInterface(bytes4 interfaceID) external view returns (bool);
}
/// @dev inlined interface
interface ContractHelpersEvents {
event ContractSponsorSet(address indexed contractAddress, address sponsor);
event ContractSponsorshipConfirmed(address indexed contractAddress, address sponsor);
event ContractSponsorRemoved(address indexed contractAddress);
}
/// @title Magic contract, which allows users to reconfigure other contracts
/// @dev the ERC-165 identifier for this interface is 0x30afad04
interface ContractHelpers is Dummy, ERC165, ContractHelpersEvents {
/// Get user, which deployed specified contract
/// @dev May return zero address in case if contract is deployed
/// using uniquenetwork evm-migration pallet, or using other terms not
/// intended by pallet-evm
/// @dev Returns zero address if contract does not exists
/// @param contractAddress Contract to get owner of
/// @return address Owner of contract
/// @dev EVM selector for this function is: 0x5152b14c,
/// or in textual repr: contractOwner(address)
function contractOwner(address contractAddress) external view returns (address);
/// Set sponsor.
/// @param contractAddress Contract for which a sponsor is being established.
/// @param sponsor User address who set as pending sponsor.
/// @dev EVM selector for this function is: 0xf01fba93,
/// or in textual repr: setSponsor(address,address)
function setSponsor(address contractAddress, address sponsor) external;
/// Set contract as self sponsored.
///
/// @param contractAddress Contract for which a self sponsoring is being enabled.
/// @dev EVM selector for this function is: 0x89f7d9ae,
/// or in textual repr: selfSponsoredEnable(address)
function selfSponsoredEnable(address contractAddress) external;
/// Remove sponsor.
///
/// @param contractAddress Contract for which a sponsorship is being removed.
/// @dev EVM selector for this function is: 0xef784250,
/// or in textual repr: removeSponsor(address)
function removeSponsor(address contractAddress) external;
/// Confirm sponsorship.
///
/// @dev Caller must be same that set via [`setSponsor`].
///
/// @param contractAddress Сontract for which need to confirm sponsorship.
/// @dev EVM selector for this function is: 0xabc00001,
/// or in textual repr: confirmSponsorship(address)
function confirmSponsorship(address contractAddress) external;
/// Get current sponsor.
///
/// @param contractAddress The contract for which a sponsor is requested.
/// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.
/// @dev EVM selector for this function is: 0x766c4f37,
/// or in textual repr: sponsor(address)
function sponsor(address contractAddress) external view returns (OptionCrossAddress memory);
/// Check tat contract has confirmed sponsor.
///
/// @param contractAddress The contract for which the presence of a confirmed sponsor is checked.
/// @return **true** if contract has confirmed sponsor.
/// @dev EVM selector for this function is: 0x97418603,
/// or in textual repr: hasSponsor(address)
function hasSponsor(address contractAddress) external view returns (bool);
/// Check tat contract has pending sponsor.
///
/// @param contractAddress The contract for which the presence of a pending sponsor is checked.
/// @return **true** if contract has pending sponsor.
/// @dev EVM selector for this function is: 0x39b9b242,
/// or in textual repr: hasPendingSponsor(address)
function hasPendingSponsor(address contractAddress) external view returns (bool);
/// @dev EVM selector for this function is: 0x6027dc61,
/// or in textual repr: sponsoringEnabled(address)
function sponsoringEnabled(address contractAddress) external view returns (bool);
/// @dev EVM selector for this function is: 0xfde8a560,
/// or in textual repr: setSponsoringMode(address,uint8)
function setSponsoringMode(address contractAddress, SponsoringModeT mode) external;
/// Get current contract sponsoring rate limit
/// @param contractAddress Contract to get sponsoring rate limit of
/// @return uint32 Amount of blocks between two sponsored transactions
/// @dev EVM selector for this function is: 0xf29694d8,
/// or in textual repr: sponsoringRateLimit(address)
function sponsoringRateLimit(address contractAddress) external view returns (uint32);
/// Set contract sponsoring rate limit
/// @dev Sponsoring rate limit - is a minimum amount of blocks that should
/// pass between two sponsored transactions
/// @param contractAddress Contract to change sponsoring rate limit of
/// @param rateLimit Target rate limit
/// @dev Only contract owner can change this setting
/// @dev EVM selector for this function is: 0x77b6c908,
/// or in textual repr: setSponsoringRateLimit(address,uint32)
function setSponsoringRateLimit(address contractAddress, uint32 rateLimit) external;
/// Set contract sponsoring fee limit
/// @dev Sponsoring fee limit - is maximum fee that could be spent by
/// single transaction
/// @param contractAddress Contract to change sponsoring fee limit of
/// @param feeLimit Fee limit
/// @dev Only contract owner can change this setting
/// @dev EVM selector for this function is: 0x03aed665,
/// or in textual repr: setSponsoringFeeLimit(address,uint256)
function setSponsoringFeeLimit(address contractAddress, uint256 feeLimit) external;
/// Get current contract sponsoring fee limit
/// @param contractAddress Contract to get sponsoring fee limit of
/// @return uint256 Maximum amount of fee that could be spent by single
/// transaction
/// @dev EVM selector for this function is: 0x75b73606,
/// or in textual repr: sponsoringFeeLimit(address)
function sponsoringFeeLimit(address contractAddress) external view returns (uint256);
/// Is specified user present in contract allow list
/// @dev Contract owner always implicitly included
/// @param contractAddress Contract to check allowlist of
/// @param user User to check
/// @return bool Is specified users exists in contract allowlist
/// @dev EVM selector for this function is: 0x5c658165,
/// or in textual repr: allowed(address,address)
function allowed(address contractAddress, address user) external view returns (bool);
/// Toggle user presence in contract allowlist
/// @param contractAddress Contract to change allowlist of
/// @param user Which user presence should be toggled
/// @param isAllowed `true` if user should be allowed to be sponsored
/// or call this contract, `false` otherwise
/// @dev Only contract owner can change this setting
/// @dev EVM selector for this function is: 0x4706cc1c,
/// or in textual repr: toggleAllowed(address,address,bool)
function toggleAllowed(
address contractAddress,
address user,
bool isAllowed
) external;
/// Is this contract has allowlist access enabled
/// @dev Allowlist always can have users, and it is used for two purposes:
/// in case of allowlist sponsoring mode, users will be sponsored if they exist in allowlist
/// in case of allowlist access enabled, only users from allowlist may call this contract
/// @param contractAddress Contract to get allowlist access of
/// @return bool Is specified contract has allowlist access enabled
/// @dev EVM selector for this function is: 0xc772ef6c,
/// or in textual repr: allowlistEnabled(address)
function allowlistEnabled(address contractAddress) external view returns (bool);
/// Toggle contract allowlist access
/// @param contractAddress Contract to change allowlist access of
/// @param enabled Should allowlist access to be enabled?
/// @dev EVM selector for this function is: 0x36de20f5,
/// or in textual repr: toggleAllowlist(address,bool)
function toggleAllowlist(address contractAddress, bool enabled) external;
}
/// Available contract sponsoring modes
enum SponsoringModeT {
/// Sponsoring is disabled
Disabled,
/// Only users from allowlist will be sponsored
Allowlisted,
/// All users will be sponsored
Generous
}
/// Optional value
struct OptionCrossAddress {
/// Shows the status of accessibility of value
bool status;
/// Actual value if `status` is true
CrossAddress value;
}
/// Cross account struct
struct CrossAddress {
address eth;
uint256 sub;
}
contractOwner
Returns the owner of the specified contract
function contractOwner(address contractAddress) public view returns (address)
setSponsor
Sets a sponsor for a specified contract
function setSponsor(address contractAddress, address sponsor) public
selfSponsoredEnable
Enables self-sponsorship for a specified contract
function selfSponsoredEnable(address contractAddress) public
removeSponsor
Removes the sponsor for a specified contract
function removeSponsor(address contractAddress) public
confirmSponsorship
Confirms sponsorship for a specified contract. The caller must be the same address that set the sponsor via setSponsor
function confirmSponsorship(address contractAddress) public
sponsor
Gets the current sponsor for a specified contract
function sponsor(address contractAddress) public view returns (OptionCrossAddress memory)
hasSponsor
Checks if a contract has a confirmed sponsor
function hasSponsor(address contractAddress) public view returns (bool)
hasPendingSponsor
Checks if a contract has a pending sponsor
function hasPendingSponsor(address contractAddress) public view returns (bool)
sponsoringEnabled
Checks if sponsoring is enabled for a specified contract
function sponsoringEnabled(address contractAddress) public view returns (bool)
setSponsoringMode
Sets the sponsoring mode for a specified contract
function setSponsoringMode(address contractAddress, SponsoringModeT mode) public
sponsoringRateLimit
Gets the current sponsoring rate limit for a specified contract
function sponsoringRateLimit(address contractAddress) public view returns (uint32)
setSponsoringRateLimit
Sets the sponsoring rate limit for a specified contract. Only the contract owner can change this setting
function setSponsoringRateLimit(address contractAddress, uint32 rateLimit) public
setSponsoringFeeLimit
Sets the sponsoring fee limit for a specified contract. Only the contract owner can change this setting
function setSponsoringFeeLimit(address contractAddress, uint256 feeLimit) public
sponsoringFeeLimit
Gets the current sponsoring fee limit for a specified contract
function sponsoringFeeLimit(address contractAddress) public view returns (uint256)
allowed
Checks if a specified user is present in the contract allowlist. The contract owner is always implicitly included
function allowed(address contractAddress, address user) public view returns (bool)
toggleAllowed
Toggles a user's presence in the contract allowlist. Only the contract owner can change this setting
function toggleAllowed(address contractAddress, address user, bool isAllowed) public
allowlistEnabled
Checks if allowlist access is enabled for a specified contract
function allowlistEnabled(address contractAddress) public view returns (bool)
toggleAllowlist
Toggles allowlist access for a specified contract. Only the contract owner can change this setting
function toggleAllowlist(address contractAddress, bool enabled) public