MATIC Price: $0.99 (-3.20%)
Gas: 137 GWei
 

Overview

MATIC Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo0 MATIC

MATIC Value

$0.00

Sponsored

Transaction Hash
Method
Block
From
To
Value
Subscribe On Sig...123728152021-03-23 16:31:191101 days ago1616517079IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123703192021-03-23 14:59:271101 days ago1616511567IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123691802021-03-23 14:16:411101 days ago1616509001IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123684742021-03-23 13:49:351101 days ago1616507375IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123618052021-03-23 9:55:111101 days ago1616493311IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123600372021-03-23 8:52:091102 days ago1616489529IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123591252021-03-23 8:18:291102 days ago1616487509IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123580672021-03-23 7:41:411102 days ago1616485301IN
0x616e317F...D2012D75D
0 MATIC0.000094081
Subscribe On Sig...123580272021-03-23 7:39:011102 days ago1616485141IN
0x616e317F...D2012D75D
0 MATIC0.000094081
Subscribe On Sig...123566532021-03-23 6:48:411102 days ago1616482121IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123532232021-03-23 4:44:251102 days ago1616474665IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123516632021-03-23 3:50:451102 days ago1616471445IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123494072021-03-23 2:33:111102 days ago1616466791IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123492502021-03-23 2:27:491102 days ago1616466469IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123478412021-03-23 1:39:231102 days ago1616463563IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123473222021-03-23 1:21:291102 days ago1616462489IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123466432021-03-23 0:58:111102 days ago1616461091IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123462132021-03-23 0:43:231102 days ago1616460203IN
0x616e317F...D2012D75D
0 MATIC0.000094081
Subscribe On Sig...123455722021-03-23 0:21:211102 days ago1616458881IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123406152021-03-22 21:26:431102 days ago1616448403IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123396552021-03-22 20:53:431102 days ago1616446423IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123376142021-03-22 19:39:131102 days ago1616441953IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123364112021-03-22 18:56:351102 days ago1616439395IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123356852021-03-22 18:30:431102 days ago1616437843IN
0x616e317F...D2012D75D
0 MATIC0.000094091
Subscribe On Sig...123312882021-03-22 15:54:251102 days ago1616428465IN
0x616e317F...D2012D75D
0 MATIC0.000094091
View all transactions

Parent Txn Hash Block From To Value
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WhitelistMatic

Compiler Version
v0.6.10+commit.00c0fcaf

Optimization Enabled:
Yes with 1337 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-06-29
*/

pragma solidity ^0.6.0;

/**
    @author The Calystral Team
    @title A parent contract which can be used to keep track of a current contract state
*/
contract ContractState {
    /// @dev Get the current contract state enum.
    State private _currentState;
    /**
        @dev Get the current contract state enum.
        First activation == 1.
    */
    uint256 private _activatedCounter;
    /**
        @dev Get the current contract state enum.
        First inactivation == 1.
    */
    uint256 private _inactivatedCounter;
    /// @dev Includes all three possible contract states.
    enum State {CREATED, INACTIVE, ACTIVE}

    modifier isCurrentState(State _state) {
        _isCurrentState(_state);
        _;
    }

    modifier isCurrentStates(State _state1, State _state2) {
        _isCurrentStates(_state1, _state2);
        _;
    }

    modifier isAnyState() {
        _;
    }

    /**
        @notice Get the current contract state.
        @dev Get the current contract state enum.
        @return The current contract state
    */
    function getCurrentState() public view returns (State) {
        return _currentState;
    }

    /**
        @notice Get the current activated counter.
        @dev Get the current activated counter.
        @return The current activated counter.
    */
    function getActivatedCounter() public view returns (uint256) {
        return _activatedCounter;
    }

    /**
        @notice Get the current inactivated counter.
        @dev Get the current inactivated counter.
        @return The current inactivated counter.
    */
    function getInactivatedCounter() public view returns (uint256) {
        return _inactivatedCounter;
    }

    /**
        @dev Checks if the contract is in the correct state for execution.
        MUST revert if the `_currentState` does not match with the required `_state`.
    */
    function _isCurrentState(State _state) internal view {
        require(
            _currentState == _state,
            "The function call is not possible in the current contract state."
        );
    }

    /**
        @dev Checks if the contract is in one of the correct states for execution.
        MUST revert if the `_currentState` does not match with one of the required states `_state1`, `_state2`.
    */
    function _isCurrentStates(State _state1, State _state2) internal view {
        require(
            _currentState == _state1 || _currentState == _state2,
            "The function call is not possible in the current contract state."
        );
    }

    /**
        @dev Modifies the contract state from State.CREATED or State.ACTIVE into State.INACTIVE.
        Increments the `_inactivatedCounter`.
    */
    function _transitionINACTIVE()
        internal
        isCurrentStates(State.CREATED, State.ACTIVE)
    {
        _currentState = State.INACTIVE;
        _inactivatedCounter++;
        _inactivated(_inactivatedCounter);
    }

    /**
        @dev Modifies the contract state from State.INACTIVE into State.ACTIVE.
        Increments the `_activatedCounter`.
    */
    function _transitionACTIVE() internal isCurrentState(State.INACTIVE) {
        _currentState = State.ACTIVE;
        _activatedCounter++;
        _activated(_activatedCounter);
    }

    /**
        @dev Executes when the contract is set into State.ACTIVE.
        The child contract has to override this function to make use of it.
        The `activatedCouted` parameter is used to execute this function at a specific time only once.
        @param activatedCounter The `activatedCouted` for which the function should be executed once.
    */
    function _activated(uint256 activatedCounter)
        internal
        virtual
        isCurrentState(State.ACTIVE)
    {}

    /**
        @dev Executes when the contract is set into State.INACTIVE.
        The child contract has to override this function to make use of it.
        The `inactivatedCouted` parameter is used to execute this function at a specific time only once.
        @param inactivatedCounter The `inactivatedCouted` for which the function should be executed once.
    */
    function _inactivated(uint256 inactivatedCounter)
        internal
        virtual
        isCurrentState(State.INACTIVE)
    {}
}

/**
    @author The Calystral Team
    @title The Registry's Interface
*/
interface IRegistry {
    /**
        @notice Updates an incoming contract address for relevant contracts or itself. 
        @dev Updates an incoming contract address for relevant contracts or itself.
        Sets itself INACTIVE if it was updated by the registry.
        Sets itself ACTIVE if it was registered by the registry.
        @param contractAddress  The address of the contract update
        @param id               The id of the contract update
    */
    function updateContractAddress(address contractAddress, uint256 id)
        external;

    /**
        @notice Get the contract address of a specific id.
        @dev Get the contract address of a specific id.
        @param id   The contract id
        @return     The contract address of a specific id
    */
    function getContractAddress(uint256 id) external view returns (address);

    /**
        @notice Get if a specific id is relevant for this contract.
        @dev Get if a specific id is relevant for this contract.
        @param id   The contract id
        @return     If the id is relevant for this contract
    */
    function isIdRelevant(uint256 id) external view returns (bool);

    /**
        @notice Get the list of relevant contract ids.
        @dev Get the list of relevant contract ids.
        @return The list of relevant contract ids.
    */
    function getRelevantList() external view returns (uint16[] memory);

    /**
        @notice Get this contract's registry id.
        @dev Get this contract's `_registryId`.
        @return Get this contract's registry id.
    */
    function getRegistryId() external view returns (uint256);
}

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts may inherit from this and call {_registerInterface} to declare
 * their support of an interface.
 */
contract ERC165 is IERC165 {
    /*
     * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7
     */
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;

    /**
     * @dev Mapping of interface ids to whether or not it's supported.
     */
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor() internal {
        // Derived contracts need only register support for their own interfaces,
        // we register support for ERC165 itself here
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     *
     * Time complexity O(1), guaranteed to always use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        override
        view
        returns (bool)
    {
        return _supportedInterfaces[interfaceId];
    }

    /**
     * @dev Registers the contract as an implementer of the interface defined by
     * `interfaceId`. Support of the actual ERC165 interface is automatic and
     * registering its interface id is not required.
     *
     * See {IERC165-supportsInterface}.
     *
     * Requirements:
     *
     * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).
     */
    function _registerInterface(bytes4 interfaceId) internal virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

/**
    @author The Calystral Team
    @title A parent contract which can be used to integrate with a global contract registry
*/
contract Registry is IRegistry, ContractState, ERC165 {
    /// @dev id => contract address
    mapping(uint256 => address) private _idToContractAddress;
    /// @dev id => a bool showing if it is relevant for updates etc.
    mapping(uint256 => bool) private _idToIsRelevant;
    /**
        @dev This list includes all Ids of contracts that are relevant for this contract listening on address updates in the future.
        This should be immutable but immutable variables cannot have a non-value type.
    */
    uint16[] private _relevantList;
    /**
        @dev The id of this contract.
        Id 0 does not exist but is just reserved.
        Whenever a contract is INACTIVE its id is set to 0.
    */
    uint256 private _registryId;

    modifier isAuthorizedRegistryManager() {
        _isAuthorizedRegistryManager();
        _;
    }

    modifier isAuthorizedAny() {
        _;
    }

    /**
        @notice Initialized and creates the contract including the address of the RegistryManager and a list of relevant contract ids. 
        @dev Creates the contract with an initialized `registryManagerAddress` and `relevantList`.
        Registers this interface for ERC-165.
        MUST revert if the `relevantList` does not include id 1 at index 0.
        @param registryManagerAddress   Address of the RegistryManager contract
        @param relevantList             Array of ids for contracts that are relevant for execution and are tracked for updates
    */
    constructor(address registryManagerAddress, uint16[] memory relevantList)
        public
    {
        require(
            relevantList[0] == 1,
            "The registry manager is required to create a registry type contract."
        );

        _idToContractAddress[1] = registryManagerAddress;
        _relevantList = relevantList;
        for (uint256 i = 0; i < relevantList.length; i++) {
            _idToIsRelevant[relevantList[i]] = true;
        }

        _registerInterface(type(IRegistry).interfaceId); // 0x7bbb2267
    }

    /**
        @notice Updates an incoming contract address for relevant contracts or itself. 
        @dev Updates an incoming contract address for relevant contracts or itself.
        Sets itself INACTIVE if it was updated by the registry.
        Sets itself ACTIVE if it was registered by the registry.
        @param contractAddress  The address of the contract update
        @param id               The id of the contract update
    */
    function updateContractAddress(address contractAddress, uint256 id)
        external
        override
        isCurrentStates(State.ACTIVE, State.INACTIVE)
        isAuthorizedRegistryManager()
    {
        // only execute if it's an relevant contract or this contract
        if (
            _idToIsRelevant[id] == true ||
            contractAddress == address(this) ||
            id == _registryId
        ) {
            // if this contract was updated, set INACTIVE
            if (id == _registryId) {
                _registryId = 0;
                _transitionINACTIVE();
            } else {
                // if this contract got registered, set ACTIVE
                if (contractAddress == address(this)) {
                    _registryId = id;
                    _transitionACTIVE();
                }
                _idToContractAddress[id] = contractAddress;
            }
        }
    }

    /**
        @notice Get the contract address of a specific id.
        @dev Get the contract address of a specific id.
        @param id   The contract id
        @return     The contract address of a specific id
    */
    function getContractAddress(uint256 id)
        public
        override
        view
        returns (address)
    {
        return _idToContractAddress[id];
    }

    /**
        @notice Get if a specific id is relevant for this contract.
        @dev Get if a specific id is relevant for this contract.
        @param id   The contract id
        @return     If the id is relevant for this contract
    */
    function isIdRelevant(uint256 id) public override view returns (bool) {
        return _idToIsRelevant[id];
    }

    /**
        @notice Get the list of relevant contract ids.
        @dev Get the list of relevant contract ids.
        @return The list of relevant contract ids.
    */
    function getRelevantList() public override view returns (uint16[] memory) {
        return _relevantList;
    }

    /**
        @notice Get this contract's registry id.
        @dev Get this contract's `_registryId`.
        @return Get this contract's registry id.
    */
    function getRegistryId() public override view returns (uint256) {
        return _registryId;
    }

    /**
        @dev Checks if the msg.sender is the RegistryManager.
        Reverts if msg.sender is not the RegistryManager.
    */
    function _isAuthorizedRegistryManager() internal view {
        require(
            msg.sender == _idToContractAddress[1],
            "Unauthorized call. Thanks for supporting the network with your ETH."
        );
    }
}

/// @author The Calystral Team
/// @title Sign-up contract for all tech pioneers
/// @notice A list, which is maintained to grant extras to the community
contract WhitelistMatic is Registry {
    /// @dev Maps the subscriber index to an address
    mapping(uint256 => address) private _subscriberIndexToAddress;
    /// @dev Maps the subscriber address to the subscriber index or 0 if not subscriped.
    mapping(address => uint256) private _subscriberAddressToSubscribed;
    /// @dev Maps the subscriber address to the blocknumber of subscription or 0 if not subscriped.
    mapping(address => uint256) private _subscriberAddressToBlockNumber;

    /// @dev Used to point towards the subscriber address. Caution: This will be likely unequal to the actual subscriber count. We start at 1 because 0 will be the indicator that an address is not a subscriber.
    uint256 private _subscriberIndex = 1;
    /// @dev Address of the ListAdmin.
    address private immutable _listAdminAddress;

    /**
        @dev Emits on successful subscription.
        @param _subscriberAddress The address of the subscriber.
     */
    event OnSubscribed(address _subscriberAddress);
    /**
        @dev Emits on successful unsubscription.
        @param _subscriberAddress The address of the unsubscriber.
     */
    event OnUnsubscribed(address _subscriberAddress);

    /// @notice This modifier prevents other smart contracts from subscribing.
    modifier isNotAContract() {
        require(
            msg.sender == tx.origin,
            "Contracts are not allowed to interact."
        );
        _;
    }

    /// @notice This modifier allows the ListAdmin to subscribe users on sign-up.
    modifier isAuthorizedListAdmin() {
        require(
            _listAdminAddress == msg.sender,
            "Unauthorized call. Thanks for supporting the network with your MATIC."
        );
        _;
    }

    /**
        @notice Creates the smart contract and initializes the whitelist.
        @dev The constructor, which initializes the whitelist with all the subscribers from the legacy contract. Legacy subscribers are initialized by the current block number.
        @param subscriberList            Address of the list admin
        @param subscriberList            All subsribers that already signed up on Ethereum
        @param registryManagerAddress    Address of the RegistryManager contract
        @param relevantList              Array of ids for contracts that are relevant for execution and are tracked for updates
     */
    constructor(
        address listAdminAddress,
        address[] memory subscriberList,
        address registryManagerAddress,
        uint16[] memory relevantList
    ) public Registry(registryManagerAddress, relevantList) {
        _listAdminAddress = listAdminAddress;
        for (uint256 i = 0; i < subscriberList.length; i++) {
            _subscribe(subscriberList[i]);
        }
        _transitionINACTIVE();
    }

    /**
        @notice Calls the subscribe function if no specific function was called.
        @dev Fallback function forwards to subscribe function.
     */
    fallback() external {
        subscribe();
    }

    /**
        @notice Any user can add him or herself to the subscriber list.
        @dev Subscribes the message sender to the list. Other contracts are not allowed to subscribe.
     */
    function subscribe()
        public
        isNotAContract()
        isCurrentState(State.ACTIVE)
        isAuthorizedAny()
    {
        _subscribe(msg.sender);
    }

    /**
        @notice Any user is added to this whitelist on sign-up.
        @dev Subscribes the user to this whitelist on sign-up.
        @param user The user address of the new user
     */
    function subscribeOnSignUp(address user)
        public
        isCurrentState(State.ACTIVE)
        isAuthorizedListAdmin()
    {
        _subscribe(user);
    }

    /**
        @notice Any user can revoke his or her subscription.
        @dev Deletes the index entry in the _subscriberIndexToAddress mapping for the message sender.
     */
    function unsubscribe()
        public
        isNotAContract()
        isAnyState()
        isAuthorizedAny()
    {
        require(isSubscriber(msg.sender) != 0, "You have not subscribed yet.");

        uint256 index = _subscriberAddressToSubscribed[msg.sender];
        delete _subscriberIndexToAddress[index];

        emit OnUnsubscribed(msg.sender);
    }

    /**
        @notice Checks wether a user is in the subscriber list.
        @dev tx.origin is used instead of msg.sender so other contracts may forward a user request (e.g. limited rewards contract).
        @return The blocknumber at which the user has subscribed or 0 if not subscribed at all.
     */
    function isSubscriber() public view returns (uint256) {
        return isSubscriber(tx.origin);
    }

    /**
        @notice Checks wheter the given address is in the subscriber list.
        @dev This function isn't external since it's used by the contract as well.
        @param _subscriberAddress The address to check for.
        @return The blocknumber at which the user has subscribed or 0 if not subscribed at all.
     */
    function isSubscriber(address _subscriberAddress)
        public
        view
        returns (uint256)
    {
        if (
            _subscriberIndexToAddress[_subscriberAddressToSubscribed[_subscriberAddress]] !=
            address(0)
        ) {
            return _subscriberAddressToBlockNumber[_subscriberAddress];
        } else {
            return 0;
        }
    }

    /**
        @notice Shows the whole subscriber list.
        @dev Returns all current subscribers as an address array.
        @return A list of subscriber addresses.
     */
    function getSubscriberList() public view returns (address[] memory) {
        uint256 subscriberListCounter = 0;
        uint256 subscriberListCount = getSubscriberCount();
        address[] memory subscriberList = new address[](subscriberListCount);

        for (uint256 i = 1; i < _subscriberIndex; i++) {
            address subscriberAddress = _subscriberIndexToAddress[i];
            if (isSubscriber(subscriberAddress) != 0) {
                subscriberList[subscriberListCounter] = subscriberAddress;
                subscriberListCounter++;
            }
        }

        return subscriberList;
    }

    /**
        @notice Shows the count of subscribers.
        @dev Returns the subscriber count as an integer.
        @return The count of subscribers
     */
    function getSubscriberCount() public view returns (uint256) {
        uint256 subscriberListCount = 0;

        for (uint256 i = 1; i < _subscriberIndex; i++) {
            address subscriberAddress = _subscriberIndexToAddress[i];
            if (isSubscriber(subscriberAddress) != 0) {
                subscriberListCount++;
            }
        }

        return subscriberListCount;
    }

    /**
        @dev This function is necessary, so it can be used by the constructor. Nobody should be able to add other people to the list.
        @param _subscriber The user address, which should be added.
     */
    function _subscribe(address _subscriber) private {
        require(isSubscriber(_subscriber) == 0, "You already subscribed.");

        _subscriberAddressToSubscribed[_subscriber] = _subscriberIndex;
        _subscriberAddressToBlockNumber[_subscriber] = block.number;
        _subscriberIndexToAddress[_subscriberIndex] = _subscriber;
        _subscriberIndex++;

        emit OnSubscribed(_subscriber);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"listAdminAddress","type":"address"},{"internalType":"address[]","name":"subscriberList","type":"address[]"},{"internalType":"address","name":"registryManagerAddress","type":"address"},{"internalType":"uint16[]","name":"relevantList","type":"uint16[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_subscriberAddress","type":"address"}],"name":"OnSubscribed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_subscriberAddress","type":"address"}],"name":"OnUnsubscribed","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"getActivatedCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentState","outputs":[{"internalType":"enum ContractState.State","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getInactivatedCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRegistryId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRelevantList","outputs":[{"internalType":"uint16[]","name":"","type":"uint16[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSubscriberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSubscriberList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isIdRelevant","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSubscriber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_subscriberAddress","type":"address"}],"name":"isSubscriber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"subscribe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"subscribeOnSignUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unsubscribe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"updateContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040526001600b553480156200001657600080fd5b506040516200138038038062001380833981810160405260808110156200003c57600080fd5b8151602083018051604051929492938301929190846401000000008211156200006457600080fd5b9083019060208201858111156200007a57600080fd5b82518660208202830111640100000000821117156200009857600080fd5b82525081516020918201928201910280838360005b83811015620000c7578181015183820152602001620000ad565b505050509050016040526020018051906020019092919080516040519392919084640100000000821115620000fb57600080fd5b9083019060208201858111156200011157600080fd5b82518660208202830111640100000000821117156200012f57600080fd5b82525081516020918201928201910280838360005b838110156200015e57818101518382015260200162000144565b505050509050016040525050508181620001856301ffc9a760e01b6200031960201b60201c565b806000815181106200019357fe5b602002602001015161ffff16600114620001df5760405162461bcd60e51b81526004018080602001828103825260448152602001806200133c6044913960600191505060405180910390fd5b6001600052600460209081527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0580546001600160a01b0319166001600160a01b038516179055815162000239916006919084019062000622565b5060005b815181101562000290576001600560008484815181106200025a57fe5b60209081029190910181015161ffff168252810191909152604001600020805460ff19169115159190911790556001016200023d565b50620002ac637bbb226760e01b6001600160e01b036200031916565b50506001600160601b0319606085901b1660805260005b8351811015620002fb57620002f2848281518110620002de57fe5b60200260200101516200039e60201b60201c565b600101620002c3565b506200030f6001600160e01b036200048b16565b50505050620006f7565b6001600160e01b0319808216141562000379576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600360205260409020805460ff19166001179055565b620003b2816001600160e01b03620004ce16565b1562000405576040805162461bcd60e51b815260206004820152601760248201527f596f7520616c726561647920737562736372696265642e000000000000000000604482015290519081900360640190fd5b600b80546001600160a01b038316600081815260096020908152604080832094909455600a815283822043905584548252600881529083902080546001600160a01b031916831790558354600101909355815190815290517fea9dde00ed9f1133889d723ccfcd41c6d6cc3120be2c167eae94d8b65b463f01929181900390910190a150565b60006002620004a482826001600160e01b036200052716565b6000805460ff191660019081179091556002805490910190819055620004ca90620005ac565b5050565b6001600160a01b0381811660009081526009602090815260408083205483526008909152812054909116156200051e57506001600160a01b0381166000908152600a602052604090205462000522565b5060005b919050565b8160028111156200053457fe5b60005460ff1660028111156200054657fe5b14806200056f57508060028111156200055b57fe5b60005460ff1660028111156200056d57fe5b145b620004ca5760405162461bcd60e51b8152600401808060200182810382526040815260200180620012fc6040913960400191505060405180910390fd5b6001620004ca816001600160e01b03620005c216565b806002811115620005cf57fe5b60005460ff166002811115620005e157fe5b146200061f5760405162461bcd60e51b8152600401808060200182810382526040815260200180620012fc6040913960400191505060405180910390fd5b50565b82805482825590600052602060002090600f01601090048101928215620006c05791602002820160005b838211156200068e57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200064c565b8015620006be5782816101000a81549061ffff02191690556002016020816001010492830192600103026200068e565b505b50620006ce929150620006d2565b5090565b620006f491905b80821115620006ce57805461ffff19168155600101620006d9565b90565b60805160601c610be762000715600039806105675250610be76000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80636d13956b11610097578063aefa7d9811610066578063aefa7d9814610266578063c4804ef01461029f578063fb479d9b146102c5578063fcae4484146102f157610100565b80636d13956b14610230578063839f2387146102385780638b8291be146102405780638f449a051461010057610100565b8063378aa701116100d3578063378aa7011461019c57806339bd89c2146101c857806351d5d80d146101d05780636af51c5e1461022857610100565b806301ffc9a71461010a57806317e703ab1461015d5780631fcb4ee41461017757806329e04b511461017f575b6101086102f9565b005b6101496004803603602081101561012057600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661034e565b604080519115158252519081900360200190f35b610165610389565b60408051918252519081900360200190f35b6101656103d5565b6101496004803603602081101561019557600080fd5b50356103e5565b6101a46103fa565b604051808260028111156101b457fe5b60ff16815260200191505060405180910390f35b610165610403565b6101d8610409565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102145781810151838201526020016101fc565b505050509050019250505060405180910390f35b6101656104ce565b6101d86104d4565b610165610554565b6101086004803603602081101561025657600080fd5b50356001600160a01b031661055a565b6102836004803603602081101561027c57600080fd5b50356105d9565b604080516001600160a01b039092168252519081900360200190f35b610165600480360360208110156102b557600080fd5b50356001600160a01b03166105f4565b610108600480360360408110156102db57600080fd5b506001600160a01b03813516906020013561064a565b610108610710565b3332146103375760405162461bcd60e51b8152600401808060200182810382526026815260200180610b4c6026913960400191505060405180910390fd5b600261034281610817565b61034b33610870565b50565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526003602052604090205460ff165b919050565b60008060015b600b548110156103cf576000818152600860205260409020546001600160a01b03166103ba816105f4565b156103c6576001909201915b5060010161038f565b50905090565b60006103e0326105f4565b905090565b60009081526005602052604090205460ff1690565b60005460ff1690565b60025490565b6060600080610416610389565b905060608167ffffffffffffffff8111801561043157600080fd5b5060405190808252806020026020018201604052801561045b578160200160208202803683370190505b50905060015b600b548110156104c6576000818152600860205260409020546001600160a01b031661048c816105f4565b156104bd578083868151811061049e57fe5b6001600160a01b03909216602092830291909101909101526001909401935b50600101610461565b509250505090565b60075490565b6060600680548060200260200160405190810160405280929190818152602001828054801561054a57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116105115790505b5050505050905090565b60015490565b600261056581610817565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146105cc5760405162461bcd60e51b8152600401808060200182810382526045815260200180610ac46045913960600191505060405180910390fd5b6105d582610870565b5050565b6000908152600460205260409020546001600160a01b031690565b6001600160a01b03818116600090815260096020908152604080832054835260089091528120549091161561064257506001600160a01b0381166000908152600a6020526040902054610384565b506000610384565b60026001610658828261095e565b6106606109dc565b60008381526005602052604090205460ff1615156001148061068a57506001600160a01b03841630145b80610696575060075483145b1561070a576007548314156106b75760006007556106b2610a50565b61070a565b6001600160a01b0384163014156106d55760078390556106d5610a82565b6000838152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386161790555b50505050565b33321461074e5760405162461bcd60e51b8152600401808060200182810382526026815260200180610b4c6026913960400191505060405180910390fd5b610757336105f4565b6107a8576040805162461bcd60e51b815260206004820152601c60248201527f596f752068617665206e6f742073756273637269626564207965742e00000000604482015290519081900360640190fd5b336000818152600960209081526040808320548084526008835292819020805473ffffffffffffffffffffffffffffffffffffffff1916905580519384525191927f8d2aae3bd92acf221b185992d11dffa4ff32f3b5f8d9a474d3b7a6ccf067a321929081900390910190a150565b80600281111561082357fe5b60005460ff16600281111561083457fe5b1461034b5760405162461bcd60e51b8152600401808060200182810382526040815260200180610b726040913960400191505060405180910390fd5b610879816105f4565b156108cb576040805162461bcd60e51b815260206004820152601760248201527f596f7520616c726561647920737562736372696265642e000000000000000000604482015290519081900360640190fd5b600b80546001600160a01b038316600081815260096020908152604080832094909455600a8152838220439055845482526008815290839020805473ffffffffffffffffffffffffffffffffffffffff1916831790558354600101909355815190815290517fea9dde00ed9f1133889d723ccfcd41c6d6cc3120be2c167eae94d8b65b463f01929181900390910190a150565b81600281111561096a57fe5b60005460ff16600281111561097b57fe5b14806109a1575080600281111561098e57fe5b60005460ff16600281111561099f57fe5b145b6105d55760405162461bcd60e51b8152600401808060200182810382526040815260200180610b726040913960400191505060405180910390fd5b600160005260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05546001600160a01b03163314610a4e5760405162461bcd60e51b8152600401808060200182810382526043815260200180610b096043913960600191505060405180910390fd5b565b60006002610a5e828261095e565b6000805460ff1916600190811790915560028054909101908190556105d590610aad565b6001610a8d81610817565b6000805460ff191660021790556001805481019081905561034b90610ab8565b60016105d581610817565b60026105d58161081756fe556e617574686f72697a65642063616c6c2e205468616e6b7320666f7220737570706f7274696e6720746865206e6574776f726b207769746820796f7572204d415449432e556e617574686f72697a65642063616c6c2e205468616e6b7320666f7220737570706f7274696e6720746865206e6574776f726b207769746820796f7572204554482e436f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e7465726163742e5468652066756e6374696f6e2063616c6c206973206e6f7420706f737369626c6520696e207468652063757272656e7420636f6e74726163742073746174652ea264697066735822122039c2df2fefab3c30f82ae29683b5842a481710518934a1014b05d5422b891abc64736f6c634300060a00335468652066756e6374696f6e2063616c6c206973206e6f7420706f737369626c6520696e207468652063757272656e7420636f6e74726163742073746174652e546865207265676973747279206d616e6167657220697320726571756972656420746f206372656174652061207265676973747279207479706520636f6e74726163742e000000000000000000000000cb58388e139ac9215a483660b426bea78689f38d0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000e59af21fa6e9afff780ae3193301c0effe3d79d000000000000000000000000000000000000000000000000000000000000009a000000000000000000000000000000000000000000000000000000000000000480000000000000000000000005441bf9aa27e79c7aa4a8d1b340d16973695dee10000000000000000000000009d7007416e7ccb2c352463d42640acc6c95eda6e000000000000000000000000c24f97bb1d7a75d9f986c99dfcfa2a558058904c0000000000000000000000004b8d2447f6c07abd5f26ae0d1228b8a2e22647120000000000000000000000008cf465f396cdbffc31b5305391d403fa2b4e3f44000000000000000000000000a2381223639181689cd6c46d38a1a4884bb6d83c000000000000000000000000a5be3060605c97ca38fc0568f5e51cbdbf620d3a000000000000000000000000d42aeae643cd863a3ccc1484d2b43dd289fac0010000000000000000000000009b83cabacb296bcee80a8fc4562805a0b63a2ced0000000000000000000000009a0cf297c8143d8e08296f5257ba81081b1a2e5b0000000000000000000000005d3b0e94d3372b0a436ee3a7ebca0be472dfc0c7000000000000000000000000a8da576545b65c91fd04e517b22490cd85da501a00000000000000000000000078805dd0a19ac89af3cc334c79330e6ad9cdaf0c000000000000000000000000d914a19f0e1420ace988b01863cf68a85c4ae554000000000000000000000000e9421ceb7eb2ed9c535f8ecf448d9c00c3ece0590000000000000000000000001114cd70cfd66592e0b73c0bc577fb06694624fb00000000000000000000000000a7c209c6282cb10b36ab34ec635f48a8e37e1c00000000000000000000000090407b81b697bcd2fab04bbf0f11d96d2859e3d80000000000000000000000006b1e722f7783c65757e92b1eaa98d6860f0581d9000000000000000000000000f5b502edabf38b46dcf1f00cd08c89e7b72766f900000000000000000000000078672830d19ec5595f357c19bcff1e995ac708e2000000000000000000000000c964dc7ed61a47a599183d968245c0df50b0f510000000000000000000000000cf2cdc39afd1c6c49a38e2d1d798b3d1147db2e1000000000000000000000000ca4dc5fc7665346fcc2b68abac7252903007ada60000000000000000000000007328446b2a45920a78e11e6c6628a1549178f4e3000000000000000000000000df2ce9b473898f9959252ef2ae69af104960ab5200000000000000000000000085949325f584c37058e52e2cc5e1e55d4aaf6c68000000000000000000000000c7c652c842a6b67654ee38b928f6328425a1d259000000000000000000000000486e03258ec1eb261080d2b1e2395db9607fa0e7000000000000000000000000c55f18f30f6d0ad39a879dfdb5be94fbebc61f150000000000000000000000004a263f7416345f9d25fa2d4ac242f2d63db0ba16000000000000000000000000642a21829dfd2fc84e9717661159efa5119891a5000000000000000000000000a7b33cd26f27f1c6b709db5cae442e42387ba69a000000000000000000000000445ba6f9f553872fa9cdc14f5c0639365b39c14000000000000000000000000037b2199f06ce7c100bb2a4c45bfc0bd895bd5c00000000000000000000000000e1cda441ffa203eca692e3398f3c3346ee2b786e0000000000000000000000006e0ea3db88b9c1c72cda80b1bead95cb84deebc00000000000000000000000003097bfe7ae48454d04f19fae50e159f871b7c9a0000000000000000000000000c7ded8d808fc92e2f1696bf8b130e3f9984c7529000000000000000000000000f022c36029cd2516c1d6e45200118df8160501e500000000000000000000000033b9d76e0279cae767c007e45ddb0206e78d295400000000000000000000000062eb3e90696d302f80c48d859943f0e24482343600000000000000000000000043c7fb67850bdbca289bcefc8f7ad2e218a7955d000000000000000000000000d1eddfcc4596cc8bd0bd7495beab9b979fc503360000000000000000000000003e6d16933c6ee697aabe2f437d696ecd0b74af66000000000000000000000000b9fedb203920981e26d84a4dea867b4927085074000000000000000000000000973ade00c477ed794f5372d571a0160ed0a5ec43000000000000000000000000686ec32c61ae7d3ff16e26403ebea633274cdfb900000000000000000000000021d9a66a0a68d66c02104f3cdb9cee10b1470510000000000000000000000000851ebdf713e1b07d9859d090c9af25214dd1813d00000000000000000000000053422d7da1334bab84a5ee9b70e1c5f39f635a0b0000000000000000000000007a759facfa62c35c40025a3445a357b1910fa1d200000000000000000000000011212865eee18f141014fa262aa7ee6d09a1a7d20000000000000000000000006954d0255cfed71d55ad8b371b4170b8bf7709dc000000000000000000000000dfea4be32b1f777d82a6389a0d4f399569c46202000000000000000000000000bd0b197f1de8f0cb6efa059f51039535aa66604c00000000000000000000000045c374ce0c5e36cd1bc751577673583b4d61fd33000000000000000000000000262a29b47708c95079c8d29bcbb4b1b48e8c6f5f0000000000000000000000009f0574a5f28779a1a682cfe4bbd090ee058d07aa000000000000000000000000b6d820e80a2a7c49f94c9d6c8ea08dccedc9ce4c0000000000000000000000002cffaf39f38e46356083cee0df3b92496fde85d8000000000000000000000000edd15d52406074b18e6b38ad29a83ee84864babc000000000000000000000000bce3bd3b206946abbe094903ae2b4244b52fb4e90000000000000000000000007f8d82d0d413627575b3b726060bc6f0904d1f150000000000000000000000006186290b28d511bff971631c916244a9fc539cfe000000000000000000000000bbce57c4604149f97a10eaa4a718bc8f88b2e2b4000000000000000000000000507dadeace4af88cc7e9645a521a75cf9b6ff45d00000000000000000000000094dbc4e8c818609a9304df7e4fc4fc2749fa01d50000000000000000000000002d1e70b9a850634059e81a05208633ef03408e790000000000000000000000003eeb5bbe2a6aaa7e9d6a56306c0354d298191dc400000000000000000000000055d4d7f40a3a527768d7b19f4eaedf73687f89cc000000000000000000000000a8bafc88e36ba1223dff19452309f96e1b351e6700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101005760003560e01c80636d13956b11610097578063aefa7d9811610066578063aefa7d9814610266578063c4804ef01461029f578063fb479d9b146102c5578063fcae4484146102f157610100565b80636d13956b14610230578063839f2387146102385780638b8291be146102405780638f449a051461010057610100565b8063378aa701116100d3578063378aa7011461019c57806339bd89c2146101c857806351d5d80d146101d05780636af51c5e1461022857610100565b806301ffc9a71461010a57806317e703ab1461015d5780631fcb4ee41461017757806329e04b511461017f575b6101086102f9565b005b6101496004803603602081101561012057600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661034e565b604080519115158252519081900360200190f35b610165610389565b60408051918252519081900360200190f35b6101656103d5565b6101496004803603602081101561019557600080fd5b50356103e5565b6101a46103fa565b604051808260028111156101b457fe5b60ff16815260200191505060405180910390f35b610165610403565b6101d8610409565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102145781810151838201526020016101fc565b505050509050019250505060405180910390f35b6101656104ce565b6101d86104d4565b610165610554565b6101086004803603602081101561025657600080fd5b50356001600160a01b031661055a565b6102836004803603602081101561027c57600080fd5b50356105d9565b604080516001600160a01b039092168252519081900360200190f35b610165600480360360208110156102b557600080fd5b50356001600160a01b03166105f4565b610108600480360360408110156102db57600080fd5b506001600160a01b03813516906020013561064a565b610108610710565b3332146103375760405162461bcd60e51b8152600401808060200182810382526026815260200180610b4c6026913960400191505060405180910390fd5b600261034281610817565b61034b33610870565b50565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526003602052604090205460ff165b919050565b60008060015b600b548110156103cf576000818152600860205260409020546001600160a01b03166103ba816105f4565b156103c6576001909201915b5060010161038f565b50905090565b60006103e0326105f4565b905090565b60009081526005602052604090205460ff1690565b60005460ff1690565b60025490565b6060600080610416610389565b905060608167ffffffffffffffff8111801561043157600080fd5b5060405190808252806020026020018201604052801561045b578160200160208202803683370190505b50905060015b600b548110156104c6576000818152600860205260409020546001600160a01b031661048c816105f4565b156104bd578083868151811061049e57fe5b6001600160a01b03909216602092830291909101909101526001909401935b50600101610461565b509250505090565b60075490565b6060600680548060200260200160405190810160405280929190818152602001828054801561054a57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116105115790505b5050505050905090565b60015490565b600261056581610817565b7f000000000000000000000000cb58388e139ac9215a483660b426bea78689f38d6001600160a01b031633146105cc5760405162461bcd60e51b8152600401808060200182810382526045815260200180610ac46045913960600191505060405180910390fd5b6105d582610870565b5050565b6000908152600460205260409020546001600160a01b031690565b6001600160a01b03818116600090815260096020908152604080832054835260089091528120549091161561064257506001600160a01b0381166000908152600a6020526040902054610384565b506000610384565b60026001610658828261095e565b6106606109dc565b60008381526005602052604090205460ff1615156001148061068a57506001600160a01b03841630145b80610696575060075483145b1561070a576007548314156106b75760006007556106b2610a50565b61070a565b6001600160a01b0384163014156106d55760078390556106d5610a82565b6000838152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386161790555b50505050565b33321461074e5760405162461bcd60e51b8152600401808060200182810382526026815260200180610b4c6026913960400191505060405180910390fd5b610757336105f4565b6107a8576040805162461bcd60e51b815260206004820152601c60248201527f596f752068617665206e6f742073756273637269626564207965742e00000000604482015290519081900360640190fd5b336000818152600960209081526040808320548084526008835292819020805473ffffffffffffffffffffffffffffffffffffffff1916905580519384525191927f8d2aae3bd92acf221b185992d11dffa4ff32f3b5f8d9a474d3b7a6ccf067a321929081900390910190a150565b80600281111561082357fe5b60005460ff16600281111561083457fe5b1461034b5760405162461bcd60e51b8152600401808060200182810382526040815260200180610b726040913960400191505060405180910390fd5b610879816105f4565b156108cb576040805162461bcd60e51b815260206004820152601760248201527f596f7520616c726561647920737562736372696265642e000000000000000000604482015290519081900360640190fd5b600b80546001600160a01b038316600081815260096020908152604080832094909455600a8152838220439055845482526008815290839020805473ffffffffffffffffffffffffffffffffffffffff1916831790558354600101909355815190815290517fea9dde00ed9f1133889d723ccfcd41c6d6cc3120be2c167eae94d8b65b463f01929181900390910190a150565b81600281111561096a57fe5b60005460ff16600281111561097b57fe5b14806109a1575080600281111561098e57fe5b60005460ff16600281111561099f57fe5b145b6105d55760405162461bcd60e51b8152600401808060200182810382526040815260200180610b726040913960400191505060405180910390fd5b600160005260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05546001600160a01b03163314610a4e5760405162461bcd60e51b8152600401808060200182810382526043815260200180610b096043913960600191505060405180910390fd5b565b60006002610a5e828261095e565b6000805460ff1916600190811790915560028054909101908190556105d590610aad565b6001610a8d81610817565b6000805460ff191660021790556001805481019081905561034b90610ab8565b60016105d581610817565b60026105d58161081756fe556e617574686f72697a65642063616c6c2e205468616e6b7320666f7220737570706f7274696e6720746865206e6574776f726b207769746820796f7572204d415449432e556e617574686f72697a65642063616c6c2e205468616e6b7320666f7220737570706f7274696e6720746865206e6574776f726b207769746820796f7572204554482e436f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e7465726163742e5468652066756e6374696f6e2063616c6c206973206e6f7420706f737369626c6520696e207468652063757272656e7420636f6e74726163742073746174652ea264697066735822122039c2df2fefab3c30f82ae29683b5842a481710518934a1014b05d5422b891abc64736f6c634300060a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000cb58388e139ac9215a483660b426bea78689f38d0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000e59af21fa6e9afff780ae3193301c0effe3d79d000000000000000000000000000000000000000000000000000000000000009a000000000000000000000000000000000000000000000000000000000000000480000000000000000000000005441bf9aa27e79c7aa4a8d1b340d16973695dee10000000000000000000000009d7007416e7ccb2c352463d42640acc6c95eda6e000000000000000000000000c24f97bb1d7a75d9f986c99dfcfa2a558058904c0000000000000000000000004b8d2447f6c07abd5f26ae0d1228b8a2e22647120000000000000000000000008cf465f396cdbffc31b5305391d403fa2b4e3f44000000000000000000000000a2381223639181689cd6c46d38a1a4884bb6d83c000000000000000000000000a5be3060605c97ca38fc0568f5e51cbdbf620d3a000000000000000000000000d42aeae643cd863a3ccc1484d2b43dd289fac0010000000000000000000000009b83cabacb296bcee80a8fc4562805a0b63a2ced0000000000000000000000009a0cf297c8143d8e08296f5257ba81081b1a2e5b0000000000000000000000005d3b0e94d3372b0a436ee3a7ebca0be472dfc0c7000000000000000000000000a8da576545b65c91fd04e517b22490cd85da501a00000000000000000000000078805dd0a19ac89af3cc334c79330e6ad9cdaf0c000000000000000000000000d914a19f0e1420ace988b01863cf68a85c4ae554000000000000000000000000e9421ceb7eb2ed9c535f8ecf448d9c00c3ece0590000000000000000000000001114cd70cfd66592e0b73c0bc577fb06694624fb00000000000000000000000000a7c209c6282cb10b36ab34ec635f48a8e37e1c00000000000000000000000090407b81b697bcd2fab04bbf0f11d96d2859e3d80000000000000000000000006b1e722f7783c65757e92b1eaa98d6860f0581d9000000000000000000000000f5b502edabf38b46dcf1f00cd08c89e7b72766f900000000000000000000000078672830d19ec5595f357c19bcff1e995ac708e2000000000000000000000000c964dc7ed61a47a599183d968245c0df50b0f510000000000000000000000000cf2cdc39afd1c6c49a38e2d1d798b3d1147db2e1000000000000000000000000ca4dc5fc7665346fcc2b68abac7252903007ada60000000000000000000000007328446b2a45920a78e11e6c6628a1549178f4e3000000000000000000000000df2ce9b473898f9959252ef2ae69af104960ab5200000000000000000000000085949325f584c37058e52e2cc5e1e55d4aaf6c68000000000000000000000000c7c652c842a6b67654ee38b928f6328425a1d259000000000000000000000000486e03258ec1eb261080d2b1e2395db9607fa0e7000000000000000000000000c55f18f30f6d0ad39a879dfdb5be94fbebc61f150000000000000000000000004a263f7416345f9d25fa2d4ac242f2d63db0ba16000000000000000000000000642a21829dfd2fc84e9717661159efa5119891a5000000000000000000000000a7b33cd26f27f1c6b709db5cae442e42387ba69a000000000000000000000000445ba6f9f553872fa9cdc14f5c0639365b39c14000000000000000000000000037b2199f06ce7c100bb2a4c45bfc0bd895bd5c00000000000000000000000000e1cda441ffa203eca692e3398f3c3346ee2b786e0000000000000000000000006e0ea3db88b9c1c72cda80b1bead95cb84deebc00000000000000000000000003097bfe7ae48454d04f19fae50e159f871b7c9a0000000000000000000000000c7ded8d808fc92e2f1696bf8b130e3f9984c7529000000000000000000000000f022c36029cd2516c1d6e45200118df8160501e500000000000000000000000033b9d76e0279cae767c007e45ddb0206e78d295400000000000000000000000062eb3e90696d302f80c48d859943f0e24482343600000000000000000000000043c7fb67850bdbca289bcefc8f7ad2e218a7955d000000000000000000000000d1eddfcc4596cc8bd0bd7495beab9b979fc503360000000000000000000000003e6d16933c6ee697aabe2f437d696ecd0b74af66000000000000000000000000b9fedb203920981e26d84a4dea867b4927085074000000000000000000000000973ade00c477ed794f5372d571a0160ed0a5ec43000000000000000000000000686ec32c61ae7d3ff16e26403ebea633274cdfb900000000000000000000000021d9a66a0a68d66c02104f3cdb9cee10b1470510000000000000000000000000851ebdf713e1b07d9859d090c9af25214dd1813d00000000000000000000000053422d7da1334bab84a5ee9b70e1c5f39f635a0b0000000000000000000000007a759facfa62c35c40025a3445a357b1910fa1d200000000000000000000000011212865eee18f141014fa262aa7ee6d09a1a7d20000000000000000000000006954d0255cfed71d55ad8b371b4170b8bf7709dc000000000000000000000000dfea4be32b1f777d82a6389a0d4f399569c46202000000000000000000000000bd0b197f1de8f0cb6efa059f51039535aa66604c00000000000000000000000045c374ce0c5e36cd1bc751577673583b4d61fd33000000000000000000000000262a29b47708c95079c8d29bcbb4b1b48e8c6f5f0000000000000000000000009f0574a5f28779a1a682cfe4bbd090ee058d07aa000000000000000000000000b6d820e80a2a7c49f94c9d6c8ea08dccedc9ce4c0000000000000000000000002cffaf39f38e46356083cee0df3b92496fde85d8000000000000000000000000edd15d52406074b18e6b38ad29a83ee84864babc000000000000000000000000bce3bd3b206946abbe094903ae2b4244b52fb4e90000000000000000000000007f8d82d0d413627575b3b726060bc6f0904d1f150000000000000000000000006186290b28d511bff971631c916244a9fc539cfe000000000000000000000000bbce57c4604149f97a10eaa4a718bc8f88b2e2b4000000000000000000000000507dadeace4af88cc7e9645a521a75cf9b6ff45d00000000000000000000000094dbc4e8c818609a9304df7e4fc4fc2749fa01d50000000000000000000000002d1e70b9a850634059e81a05208633ef03408e790000000000000000000000003eeb5bbe2a6aaa7e9d6a56306c0354d298191dc400000000000000000000000055d4d7f40a3a527768d7b19f4eaedf73687f89cc000000000000000000000000a8bafc88e36ba1223dff19452309f96e1b351e6700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001

-----Decoded View---------------
Arg [0] : listAdminAddress (address): 0xcb58388e139aC9215A483660B426bea78689F38d
Arg [1] : subscriberList (address[]): 0x5441Bf9aA27E79C7AA4a8D1b340D16973695dEE1,0x9d7007416E7cCB2c352463d42640ACc6c95EdA6E,0xC24f97Bb1d7a75D9f986c99DFcfa2A558058904C,0x4B8D2447F6c07aBd5F26AE0d1228B8A2E2264712,0x8cf465f396cdBFFC31B5305391D403fA2B4E3F44,0xa2381223639181689CD6c46D38a1a4884Bb6D83c,0xa5be3060605c97cA38fC0568f5e51cbdbF620D3a,0xD42AEAe643CD863a3CCc1484d2b43DD289fac001,0x9b83CAbACb296BCEE80a8FC4562805a0B63A2cED,0x9A0cf297C8143D8E08296F5257ba81081B1A2e5B,0x5D3B0E94d3372B0A436EE3a7eBCA0be472dFc0C7,0xa8da576545B65c91fD04e517b22490Cd85DA501a,0x78805Dd0a19ac89AF3CC334C79330e6Ad9cDaf0c,0xD914A19f0e1420acE988B01863cf68a85c4aE554,0xE9421Ceb7eb2ed9C535F8ECF448D9c00C3ECE059,0x1114cd70Cfd66592e0b73C0bc577Fb06694624fb,0x00a7C209C6282cB10B36Ab34eC635f48A8e37e1c,0x90407b81B697bCD2fab04Bbf0F11d96d2859E3D8,0x6b1E722F7783c65757e92b1eaA98D6860f0581d9,0xf5b502EDAbF38B46dcF1f00cd08C89e7b72766f9,0x78672830d19EC5595F357C19BcFF1E995aC708e2,0xC964dc7Ed61a47A599183d968245c0df50B0F510,0xCf2Cdc39aFd1C6C49a38e2d1d798b3D1147dB2E1,0xCa4Dc5Fc7665346fcc2B68ABac7252903007aDA6,0x7328446b2a45920A78e11E6C6628A1549178f4e3,0xDf2ce9B473898F9959252EF2AE69Af104960ab52,0x85949325F584C37058E52E2cC5e1e55D4aaF6c68,0xc7C652c842a6B67654EE38b928f6328425A1D259,0x486e03258Ec1eB261080D2b1e2395Db9607fa0e7,0xc55f18F30f6d0AD39A879dfDB5bE94FBeBC61f15,0x4A263F7416345f9d25FA2d4aC242f2d63db0Ba16,0x642a21829DFD2fC84E9717661159eFa5119891A5,0xa7B33CD26f27f1C6B709DB5Cae442e42387bA69A,0x445ba6F9f553872Fa9cDC14F5c0639365b39C140,0x37B2199f06Ce7C100bB2A4C45BFC0BD895Bd5c00,0xe1cDA441ffA203eCA692E3398f3C3346Ee2B786e,0x6e0Ea3db88b9c1C72CdA80B1BeaD95cB84dEEBc0,0x3097bfE7aE48454D04F19Fae50e159F871b7c9A0,0xC7dED8D808fc92E2f1696BF8B130e3f9984c7529,0xf022c36029Cd2516C1D6e45200118dF8160501e5,0x33B9D76e0279cAe767C007E45dDB0206E78d2954,0x62EB3e90696D302f80c48D859943f0E244823436,0x43C7fb67850BdBca289BcefC8f7aD2E218a7955D,0xD1edDfcc4596CC8bD0bd7495beaB9B979fc50336,0x3E6d16933c6ee697AabE2f437d696Ecd0b74Af66,0xB9fedB203920981e26d84a4dEA867b4927085074,0x973ADE00C477ed794F5372D571A0160ed0a5EC43,0x686ec32C61aE7d3fF16e26403EBea633274cDFB9,0x21d9a66a0a68D66c02104f3CdB9cee10B1470510,0x851ebDf713E1b07d9859d090C9af25214dD1813d,0x53422d7Da1334Bab84a5eE9b70e1c5f39f635a0B,0x7a759FaCFA62c35C40025a3445A357B1910fA1D2,0x11212865EeE18f141014fa262aA7Ee6D09A1a7D2,0x6954d0255cfeD71d55Ad8b371b4170B8BF7709dC,0xDFEa4bE32b1f777d82a6389a0d4F399569c46202,0xBd0B197f1de8f0Cb6efa059F51039535aA66604C,0x45C374ce0c5e36CD1bc751577673583B4D61Fd33,0x262A29B47708c95079c8D29bCBB4B1B48e8c6f5F,0x9f0574a5F28779A1A682cFE4bbD090ee058d07AA,0xB6d820e80A2A7c49F94c9D6C8ea08DCcEDC9CE4C,0x2cFFaF39f38e46356083cee0DF3b92496fDE85d8,0xedD15D52406074b18E6b38aD29A83Ee84864babc,0xBcE3BD3b206946AbBe094903Ae2B4244B52fb4e9,0x7F8d82d0d413627575b3b726060bc6f0904D1f15,0x6186290B28D511bFF971631c916244A9fC539cfE,0xbBce57C4604149f97A10eAa4a718bC8F88B2e2B4,0x507DADeaCe4aF88cc7E9645a521A75cf9B6Ff45D,0x94dBc4E8C818609a9304Df7e4fc4Fc2749Fa01d5,0x2D1E70b9a850634059E81a05208633Ef03408e79,0x3EEb5BBE2A6Aaa7e9D6A56306c0354D298191Dc4,0x55D4D7F40A3A527768d7b19F4eAedF73687F89cc,0xa8Bafc88E36BA1223dfF19452309F96E1B351E67
Arg [2] : registryManagerAddress (address): 0xE59Af21FA6E9aFfF780ae3193301C0efFe3D79D0
Arg [3] : relevantList (uint16[]): 1

-----Encoded View---------------
79 Constructor Arguments found :
Arg [0] : 000000000000000000000000cb58388e139ac9215a483660b426bea78689f38d
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000e59af21fa6e9afff780ae3193301c0effe3d79d0
Arg [3] : 00000000000000000000000000000000000000000000000000000000000009a0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000048
Arg [5] : 0000000000000000000000005441bf9aa27e79c7aa4a8d1b340d16973695dee1
Arg [6] : 0000000000000000000000009d7007416e7ccb2c352463d42640acc6c95eda6e
Arg [7] : 000000000000000000000000c24f97bb1d7a75d9f986c99dfcfa2a558058904c
Arg [8] : 0000000000000000000000004b8d2447f6c07abd5f26ae0d1228b8a2e2264712
Arg [9] : 0000000000000000000000008cf465f396cdbffc31b5305391d403fa2b4e3f44
Arg [10] : 000000000000000000000000a2381223639181689cd6c46d38a1a4884bb6d83c
Arg [11] : 000000000000000000000000a5be3060605c97ca38fc0568f5e51cbdbf620d3a
Arg [12] : 000000000000000000000000d42aeae643cd863a3ccc1484d2b43dd289fac001
Arg [13] : 0000000000000000000000009b83cabacb296bcee80a8fc4562805a0b63a2ced
Arg [14] : 0000000000000000000000009a0cf297c8143d8e08296f5257ba81081b1a2e5b
Arg [15] : 0000000000000000000000005d3b0e94d3372b0a436ee3a7ebca0be472dfc0c7
Arg [16] : 000000000000000000000000a8da576545b65c91fd04e517b22490cd85da501a
Arg [17] : 00000000000000000000000078805dd0a19ac89af3cc334c79330e6ad9cdaf0c
Arg [18] : 000000000000000000000000d914a19f0e1420ace988b01863cf68a85c4ae554
Arg [19] : 000000000000000000000000e9421ceb7eb2ed9c535f8ecf448d9c00c3ece059
Arg [20] : 0000000000000000000000001114cd70cfd66592e0b73c0bc577fb06694624fb
Arg [21] : 00000000000000000000000000a7c209c6282cb10b36ab34ec635f48a8e37e1c
Arg [22] : 00000000000000000000000090407b81b697bcd2fab04bbf0f11d96d2859e3d8
Arg [23] : 0000000000000000000000006b1e722f7783c65757e92b1eaa98d6860f0581d9
Arg [24] : 000000000000000000000000f5b502edabf38b46dcf1f00cd08c89e7b72766f9
Arg [25] : 00000000000000000000000078672830d19ec5595f357c19bcff1e995ac708e2
Arg [26] : 000000000000000000000000c964dc7ed61a47a599183d968245c0df50b0f510
Arg [27] : 000000000000000000000000cf2cdc39afd1c6c49a38e2d1d798b3d1147db2e1
Arg [28] : 000000000000000000000000ca4dc5fc7665346fcc2b68abac7252903007ada6
Arg [29] : 0000000000000000000000007328446b2a45920a78e11e6c6628a1549178f4e3
Arg [30] : 000000000000000000000000df2ce9b473898f9959252ef2ae69af104960ab52
Arg [31] : 00000000000000000000000085949325f584c37058e52e2cc5e1e55d4aaf6c68
Arg [32] : 000000000000000000000000c7c652c842a6b67654ee38b928f6328425a1d259
Arg [33] : 000000000000000000000000486e03258ec1eb261080d2b1e2395db9607fa0e7
Arg [34] : 000000000000000000000000c55f18f30f6d0ad39a879dfdb5be94fbebc61f15
Arg [35] : 0000000000000000000000004a263f7416345f9d25fa2d4ac242f2d63db0ba16
Arg [36] : 000000000000000000000000642a21829dfd2fc84e9717661159efa5119891a5
Arg [37] : 000000000000000000000000a7b33cd26f27f1c6b709db5cae442e42387ba69a
Arg [38] : 000000000000000000000000445ba6f9f553872fa9cdc14f5c0639365b39c140
Arg [39] : 00000000000000000000000037b2199f06ce7c100bb2a4c45bfc0bd895bd5c00
Arg [40] : 000000000000000000000000e1cda441ffa203eca692e3398f3c3346ee2b786e
Arg [41] : 0000000000000000000000006e0ea3db88b9c1c72cda80b1bead95cb84deebc0
Arg [42] : 0000000000000000000000003097bfe7ae48454d04f19fae50e159f871b7c9a0
Arg [43] : 000000000000000000000000c7ded8d808fc92e2f1696bf8b130e3f9984c7529
Arg [44] : 000000000000000000000000f022c36029cd2516c1d6e45200118df8160501e5
Arg [45] : 00000000000000000000000033b9d76e0279cae767c007e45ddb0206e78d2954
Arg [46] : 00000000000000000000000062eb3e90696d302f80c48d859943f0e244823436
Arg [47] : 00000000000000000000000043c7fb67850bdbca289bcefc8f7ad2e218a7955d
Arg [48] : 000000000000000000000000d1eddfcc4596cc8bd0bd7495beab9b979fc50336
Arg [49] : 0000000000000000000000003e6d16933c6ee697aabe2f437d696ecd0b74af66
Arg [50] : 000000000000000000000000b9fedb203920981e26d84a4dea867b4927085074
Arg [51] : 000000000000000000000000973ade00c477ed794f5372d571a0160ed0a5ec43
Arg [52] : 000000000000000000000000686ec32c61ae7d3ff16e26403ebea633274cdfb9
Arg [53] : 00000000000000000000000021d9a66a0a68d66c02104f3cdb9cee10b1470510
Arg [54] : 000000000000000000000000851ebdf713e1b07d9859d090c9af25214dd1813d
Arg [55] : 00000000000000000000000053422d7da1334bab84a5ee9b70e1c5f39f635a0b
Arg [56] : 0000000000000000000000007a759facfa62c35c40025a3445a357b1910fa1d2
Arg [57] : 00000000000000000000000011212865eee18f141014fa262aa7ee6d09a1a7d2
Arg [58] : 0000000000000000000000006954d0255cfed71d55ad8b371b4170b8bf7709dc
Arg [59] : 000000000000000000000000dfea4be32b1f777d82a6389a0d4f399569c46202
Arg [60] : 000000000000000000000000bd0b197f1de8f0cb6efa059f51039535aa66604c
Arg [61] : 00000000000000000000000045c374ce0c5e36cd1bc751577673583b4d61fd33
Arg [62] : 000000000000000000000000262a29b47708c95079c8d29bcbb4b1b48e8c6f5f
Arg [63] : 0000000000000000000000009f0574a5f28779a1a682cfe4bbd090ee058d07aa
Arg [64] : 000000000000000000000000b6d820e80a2a7c49f94c9d6c8ea08dccedc9ce4c
Arg [65] : 0000000000000000000000002cffaf39f38e46356083cee0df3b92496fde85d8
Arg [66] : 000000000000000000000000edd15d52406074b18e6b38ad29a83ee84864babc
Arg [67] : 000000000000000000000000bce3bd3b206946abbe094903ae2b4244b52fb4e9
Arg [68] : 0000000000000000000000007f8d82d0d413627575b3b726060bc6f0904d1f15
Arg [69] : 0000000000000000000000006186290b28d511bff971631c916244a9fc539cfe
Arg [70] : 000000000000000000000000bbce57c4604149f97a10eaa4a718bc8f88b2e2b4
Arg [71] : 000000000000000000000000507dadeace4af88cc7e9645a521a75cf9b6ff45d
Arg [72] : 00000000000000000000000094dbc4e8c818609a9304df7e4fc4fc2749fa01d5
Arg [73] : 0000000000000000000000002d1e70b9a850634059e81a05208633ef03408e79
Arg [74] : 0000000000000000000000003eeb5bbe2a6aaa7e9d6a56306c0354d298191dc4
Arg [75] : 00000000000000000000000055d4d7f40a3a527768d7b19f4eaedf73687f89cc
Arg [76] : 000000000000000000000000a8bafc88e36ba1223dff19452309f96e1b351e67
Arg [77] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [78] : 0000000000000000000000000000000000000000000000000000000000000001


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.