FRAX Price: $1.03 (+6.52%)

Contract

0x04dF782ce2c86a0FB977C170De28E7F0689414fC

Overview

FRAX Balance | FXTL Balance

0 FRAX | 374 FXTL

FRAX Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Bulk Update Refe...275140242025-10-30 15:39:1986 days ago1761838759IN
0x04dF782c...0689414fC
0 FRAX0.000178440.00001525
Self Add Referra...274782072025-10-29 19:45:2587 days ago1761767125IN
0x04dF782c...0689414fC
0 FRAX0.000063750.001
Self Add Referra...273168342025-10-26 2:06:1990 days ago1761444379IN
0x04dF782c...0689414fC
0 FRAX0.000008460.00009975
Self Add Referra...272275352025-10-24 0:29:4192 days ago1761265781IN
0x04dF782c...0689414fC
0 FRAX0.00000820.00010192
Self Add Referra...272267482025-10-24 0:03:2792 days ago1761264207IN
0x04dF782c...0689414fC
0 FRAX0.000007250.00010073
Bulk Update Refe...237238322025-08-03 21:59:35174 days ago1754258375IN
0x04dF782c...0689414fC
0 FRAX0.000038640.00001525
Self Add Referra...208565562025-05-29 13:03:43240 days ago1748523823IN
0x04dF782c...0689414fC
0 FRAX0.000003260.00110152
Self Add Referra...200858822025-05-11 16:54:35258 days ago1746982475IN
0x04dF782c...0689414fC
0 FRAX0.000000020.00010112
Self Add Referra...198367662025-05-05 22:30:43264 days ago1746484243IN
0x04dF782c...0689414fC
0 FRAX0.000000010.00010109
Self Add Referra...196835392025-05-02 9:23:09267 days ago1746177789IN
0x04dF782c...0689414fC
0 FRAX0.000000160.00100025
Self Add Referra...196066042025-04-30 14:38:39269 days ago1746023919IN
0x04dF782c...0689414fC
0 FRAX0.000000010.00010026
Bulk Update Refe...175624422025-03-14 6:59:55316 days ago1741935595IN
0x04dF782c...0689414fC
0 FRAX0.000000060.0000157
Self Add Referra...175032332025-03-12 22:06:17318 days ago1741817177IN
0x04dF782c...0689414fC
0 FRAX0.000000040.00000109
Self Add Referra...171768322025-03-05 8:46:15325 days ago1741164375IN
0x04dF782c...0689414fC
0 FRAX0.000000070.00010025
Bulk Update Refe...171155592025-03-03 22:43:49327 days ago1741041829IN
0x04dF782c...0689414fC
0 FRAX0.000000150.00001525
Bulk Update Refe...170930602025-03-03 10:13:51327 days ago1740996831IN
0x04dF782c...0689414fC
0 FRAX0.000000120.00001525
Manage Flox Cont...170930132025-03-03 10:12:17327 days ago1740996737IN
0x04dF782c...0689414fC
0 FRAX0.000000050.00010025
Self Add Referra...163098802025-02-13 7:07:51345 days ago1739430471IN
0x04dF782c...0689414fC
0 FRAX0.000000080.00010025
Self Add Referra...161746322025-02-10 3:59:35348 days ago1739159975IN
0x04dF782c...0689414fC
0 FRAX0.000000070.00010025
Self Add Referra...161116852025-02-08 17:01:21350 days ago1739034081IN
0x04dF782c...0689414fC
0 FRAX0.000000240.00100025
Self Add Referra...160249272025-02-06 16:49:25352 days ago1738860565IN
0x04dF782c...0689414fC
0 FRAX0.000000570.00110025
Self Add Referra...159692472025-02-05 9:53:25353 days ago1738749205IN
0x04dF782c...0689414fC
0 FRAX0.000000110.00010025
Self Add Referra...159692462025-02-05 9:53:23353 days ago1738749203IN
0x04dF782c...0689414fC
0 FRAX0.000000110.00010025
Self Add Referra...159692442025-02-05 9:53:19353 days ago1738749199IN
0x04dF782c...0689414fC
0 FRAX0.000000130.00010025
Self Add Referra...155505402025-01-26 17:16:31363 days ago1737911791IN
0x04dF782c...0689414fC
0 FRAX0.000000670.00010025
View all transactions

Advanced mode:
Parent Transaction Hash Block From To
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ReflinkTracker

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 100000 runs

Other Settings:
cancun EvmVersion
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

/**
 * ====================================================================
 * |     ______                   _______                             |
 * |    / _____________ __  __   / ____(_____  ____ _____  ________   |
 * |   / /_  / ___/ __ `| |/_/  / /_  / / __ \/ __ `/ __ \/ ___/ _ \  |
 * |  / __/ / /  / /_/ _>  <   / __/ / / / / / /_/ / / / / /__/  __/  |
 * | /_/   /_/   \__,_/_/|_|  /_/   /_/_/ /_/\__,_/_/ /_/\___/\___/   |
 * |                                                                  |
 * ====================================================================
 * ======================= ReflinkTracker =============================
 * ====================================================================
 * Frax Finance: https://github.com/FraxFinance
 */
import { ReflinkTrackerAccessControl } from "./ReflinkTrackerAccessControl.sol";

/**
 * @title ReflinkTracker
 * @author Frax Finance
 * @notice A smart contact used to track referrals of the Flox Reflink system.
 */
contract ReflinkTracker is ReflinkTrackerAccessControl {
    /**
     * @notice Used to store referral information.
     */
    struct Referral {
        address referrer; // Address of the referrer
        bytes32 bridgeTx; // Transaction hash of the transaction that bridged assets to Fraxtal and triggered the referral
        uint128 timestamp; // Timestamp of the referral completion
        uint64 pointsAwarded; // Points awarded to the user
        uint64 referrerPointsAwarded; // Points awarded to the referrer
    }

    /**
     * @notice Used to store referrer information.
     */
    struct Referrer {
        uint128 referrals; // Number of successfull referrals the referrer has made
        uint64 pointsEarned; // Total points earned by the referrer
    }

    /**
     * @notice Used to track referrals.
     * @dev user Address of the user
     * @dev referral Referral information
     */
    mapping(address user => Referral referral) public referrals;
    /**
     * @notice Used to track referrers.
     * @dev user Address of the referrer
     * @dev referrer Referrer information
     */
    mapping(address user => Referrer referrer) public referrers;
    /**
     * @notice Used to track referrer's users.
     * @dev referrer Address of the referrer
     * @dev index Index of the user (Use `referrers` to get the number of users the referrer has referred)
     * @dev user Address of the user
     */
    mapping(address referrer => mapping(uint256 index => address user)) public referrerUsers;
    /**
     * @notice Used to track users that used the referral system globally.
     * @dev index Index of the user (the last user is stored at `totalReferrals` - 1)
     * @dev user Address of the user
     */
    mapping(uint256 index => address user) public users;

    /// Total number of referrals recorded.
    uint256 public totalReferrals;

    /**
     * @notice Used to initialize the smart contract.
     * @dev The contract is initialized with the address of the deployer as the owner.
     */
    constructor() ReflinkTrackerAccessControl(msg.sender) {}

    /**
     * @notice Used to quickly determine if referral information is recorded for a user.
     * @dev This checks for the record of the bridge transaction hash.
     * @param _user Address of the user
     * @return _submitted True if the user has submitted a referral, false otherwise
     */
    function referralSubmitted(address _user) external view returns (bool _submitted) {
        return referrals[_user].bridgeTx != bytes32(0);
    }

    /**
     * @notice Used to quickly determine if referral points have been allocated for a user.
     * @param _user Address of the user
     * @return _allocated True if the ponts for the referral have been allocated or not
     */
    function referralPointsAllocated(address _user) external view returns (bool _allocated) {
        return referrals[_user].pointsAwarded != 0;
    }

    /**
     * @notice Used to add a referral.
     * @dev This can only be called by a Flox contributor.
     * @param _user Address of the user
     * @param _bridgeTx Transaction hash of the transaction that bridged assets to Fraxtal and triggered the referral
     * @param _referrer Address of the referrer
     * @param _timestamp Timestamp of the referral completion
     * @param _userPointsAwarded Points awarded to the referrer and the referee (each gets this amount)
     */
    function addReferral(
        address _user,
        bytes32 _bridgeTx,
        address _referrer,
        uint128 _timestamp,
        uint64 _userPointsAwarded,
        uint64 _referrerPointsAwarded
    ) public {
        _onlyFloxContributor();

        _addReferral(_user, _bridgeTx, _referrer, _timestamp, _userPointsAwarded, _referrerPointsAwarded);
    }

    /**
     * @notice Used to add multiple referrals.
     * @dev This can only be called by a Flox contributor.
     * @dev If the lengths of the arrays do not match, the function will revert.
     * @param _users Addresses of the users
     * @param _bridgeTxs Transaction hashes of the transactions that bridged assets to Fraxtal and triggered the referrals
     * @param _referrers Addresses of the referrers
     * @param _timestamps Timestamps of the referral completions
     * @param _userPointsAwarded Points awarded to the users
     * @param _referrerPointsAwarded Points awarded to the referrers
     */
    function bulkAddReferral(
        address[] memory _users,
        bytes32[] memory _bridgeTxs,
        address[] memory _referrers,
        uint128[] memory _timestamps,
        uint64[] memory _userPointsAwarded,
        uint64[] memory _referrerPointsAwarded
    ) external {
        _onlyFloxContributor();

        if (
            _users.length != _bridgeTxs.length ||
            _users.length != _referrers.length ||
            _users.length != _timestamps.length ||
            _users.length != _userPointsAwarded.length ||
            _users.length != _referrerPointsAwarded.length
        ) revert ArrayLengthMissmatch();

        for (uint256 i; i < _users.length; ) {
            _addReferral(
                _users[i],
                _bridgeTxs[i],
                _referrers[i],
                _timestamps[i],
                _userPointsAwarded[i],
                _referrerPointsAwarded[i]
            );

            unchecked {
                ++i;
            }
        }
    }

    /**
     * @notice Used to add a referral for oneself.
     * @dev This can only be called by the user and it allows the user to add a referral for themselves.
     * @dev This function only records the referrer and the completion conditions. The points are set once they are
     *  allocated by a Flox contibutor.
     * @param _bridgeTx Transaction hash of the transaction that bridged assets to Fraxtal and triggered the referral
     * @param _referrer Address of the referrer
     */
    function selfAddReferral(bytes32 _bridgeTx, address _referrer) external {
        _addReferral(msg.sender, _bridgeTx, _referrer, uint128(block.timestamp), 0, 0);
    }

    /**
     * @notice Used to update referral information.
     * @dev This can only be called by a Flox contributor.
     * @dev If any of the parameters are set to zero value, the function will not update the corresponding field.
     * @param _user Address of the user
     * @param _bridgeTx Transaction hash of the transaction that bridged assets to Fraxtal and triggered the referral
     * @param _referrer Address of the referrer
     * @param _timestamp Timestamp of the referral completion
     * @param _userPointsAwarded Points awarded to the user
     * @param _referrerPointsAwarded Points awarded to the referrer
     */
    function updateReferral(
        address _user,
        bytes32 _bridgeTx,
        address _referrer,
        uint128 _timestamp,
        uint64 _userPointsAwarded,
        uint64 _referrerPointsAwarded
    ) public {
        _onlyFloxContributor();

        _updateReferral(_user, _bridgeTx, _referrer, _timestamp, _userPointsAwarded, _referrerPointsAwarded);
    }

    /**
     * @notice Used to update multiple referrals.
     * @dev This can only be called by a Flox contributor.
     * @dev If the lengths of the arrays do not match, the function will revert.
     * @dev If any of the parameters are set to zero value, the function will not update the corresponding field.
     * @param _users Addresses of the users
     * @param _bridgeTxs Transaction hashes of the transactions that bridged assets to Fraxtal and triggered the referrals
     * @param _referrers Addresses of the referrers
     * @param _timestamps Timestamp of the referral completions
     * @param _userPointsAwarded Points awarded to the users
     * @param _referrerPointsAwarded Points awarded to the referrers
     */
    function bulkUpdateReferral(
        address[] memory _users,
        bytes32[] memory _bridgeTxs,
        address[] memory _referrers,
        uint128[] memory _timestamps,
        uint64[] memory _userPointsAwarded,
        uint64[] memory _referrerPointsAwarded
    ) external {
        _onlyFloxContributor();

        if (
            _users.length != _bridgeTxs.length ||
            _users.length != _referrers.length ||
            _users.length != _timestamps.length ||
            _users.length != _userPointsAwarded.length ||
            _users.length != _referrerPointsAwarded.length
        ) revert ArrayLengthMissmatch();

        for (uint256 i; i < _users.length; ) {
            _updateReferral(
                _users[i],
                _bridgeTxs[i],
                _referrers[i],
                _timestamps[i],
                _userPointsAwarded[i],
                _referrerPointsAwarded[i]
            );

            unchecked {
                ++i;
            }
        }
    }

    /**
     * @notice Used to add a referral.
     * @dev This internal method is used to provide referral management capabilities to self- and Flox contibutor-
     *  facing functions.
     * @param _user Address of the user
     * @param _bridgeTx Transaction hash of the transaction that bridged assets to Fraxtal and triggered the referral
     * @param _referrer Address of the referrer
     * @param _timestamp Timestamp of the referral completion
     * @param _userPointsAwarded Points awarded to the user
     * @param _referrerPointsAwarded Points awarded to the referrer
     */
    function _addReferral(
        address _user,
        bytes32 _bridgeTx,
        address _referrer,
        uint128 _timestamp,
        uint64 _userPointsAwarded,
        uint64 _referrerPointsAwarded
    ) internal {
        if (_user == address(0)) revert InvalidUserAddress();
        if (_referrer == address(0)) revert InvalidReferrerAddress();

        Referral storage referral = referrals[_user];
        Referrer storage referrer = referrers[_referrer];

        if (referral.referrer != address(0)) revert ReferralAlreadyExists();

        referral.referrer = _referrer;
        referral.bridgeTx = _bridgeTx;
        referral.timestamp = _timestamp;
        referral.pointsAwarded = _userPointsAwarded;
        referral.referrerPointsAwarded = _referrerPointsAwarded;

        referrerUsers[_referrer][referrer.referrals] = _user;
        users[totalReferrals] = _user;

        referrer.referrals += 1;
        referrer.pointsEarned += _referrerPointsAwarded;
        totalReferrals += 1;

        emit ReferralAdded(_referrer, _user, _referrerPointsAwarded, _userPointsAwarded);
    }

    /**
     * @notice Used to update referral information.
     * @dev This internal method is used to provide referral management capabilities to Flox contibuor-facing functions.
     * @param _user Address of the user to update the referral for
     * @param _bridgeTx Tramsactopm hash of the transaction that bridged assets to Fraxtal and triggered the referral
     * @param _referrer Address of the referrer
     * @param _timestamp Timestamp of the referral completion
     * @param _userPointsAwarded Points awarded to the user
     * @param _referrerPointsAwarded Points awarded to the referrer
     */
    function _updateReferral(
        address _user,
        bytes32 _bridgeTx,
        address _referrer,
        uint128 _timestamp,
        uint64 _userPointsAwarded,
        uint64 _referrerPointsAwarded
    ) internal {
        if (_user == address(0)) revert InvalidUserAddress();

        Referral storage referral = referrals[_user];

        if (referral.referrer == address(0)) revert ReferralDoesNotExist();
        address previousReferrer = referral.referrer;
        if (_referrer == address(0)) _referrer = previousReferrer;

        Referrer storage referrer = referrers[_referrer];

        if (_bridgeTx != bytes32(0)) referral.bridgeTx = _bridgeTx;
        if (_timestamp != 0) referral.timestamp = _timestamp;

        // This ensures that you can pass zero-value to leave the points as they were before
        if (_userPointsAwarded == 0) _userPointsAwarded = referral.pointsAwarded;
        if (_referrerPointsAwarded == 0) _referrerPointsAwarded = referral.referrerPointsAwarded;

        // This ensures that the points are properly tracked for the past and current referrers
        if (_referrerPointsAwarded != 0) {
            referrers[previousReferrer].pointsEarned -= referral.referrerPointsAwarded; // This could possibly be the same as `referrer`, but not necessarily
            referral.referrerPointsAwarded = _referrerPointsAwarded;
            referrer.pointsEarned += _referrerPointsAwarded;
        }

        if (_userPointsAwarded != 0) {
            referral.pointsAwarded = _userPointsAwarded;
        }

        // Find the index of the user in the previous referrer's mapping to replace it so it can be moved to new referrer's mapping
        if (previousReferrer != _referrer) {
            uint256 index;
            for (uint256 i; i < referrers[previousReferrer].referrals; ) {
                if (referrerUsers[previousReferrer][i] == _user) {
                    index = i;
                    break;
                }

                unchecked {
                    ++i;
                }
            }

            referrers[previousReferrer].referrals -= 1;

            // Move the last user to the index of the user being removed - this is cheaper than shifting the whole mapping
            referrerUsers[previousReferrer][index] = referrerUsers[previousReferrer][
                referrers[previousReferrer].referrals
            ];
            referrerUsers[previousReferrer][referrers[previousReferrer].referrals] = address(0);

            referrerUsers[_referrer][referrer.referrals] = _user;
            referrer.referrals += 1;
        }

        referral.referrer = _referrer;

        emit ReferralUpdated(
            previousReferrer,
            _referrer,
            _user,
            referral.referrerPointsAwarded,
            referral.pointsAwarded
        );
    }
}

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

/**
 * ====================================================================
 * |     ______                   _______                             |
 * |    / _____________ __  __   / ____(_____  ____ _____  ________   |
 * |   / /_  / ___/ __ `| |/_/  / /_  / / __ \/ __ `/ __ \/ ___/ _ \  |
 * |  / __/ / /  / /_/ _>  <   / __/ / / / / / /_/ / / / / /__/  __/  |
 * | /_/   /_/   \__,_/_/|_|  /_/   /_/_/ /_/\__,_/_/ /_/\___/\___/   |
 * |                                                                  |
 * ====================================================================
 * =================== ReflinkTrackerAccessControl ====================
 * ====================================================================
 * Frax Finance: https://github.com/FraxFinance
 */
import { IReflinkTrackerEvents } from "./interfaces/IReflinkTrackerEvents.sol";

/**
 * @title ReflinkTrackerAccessControl
 * @author Frax Finance
 * @notice The ReflinkTrackerAccessControl contract is used to power the access control of the ReflinkTracker smart
 *  contract.
 */
contract ReflinkTrackerAccessControl is IReflinkTrackerEvents {
    /// Address of the owner of the contract.
    address public owner;
    /// Address of the nominated owner of the contract.
    address public nominatedOwner;

    /**
     * @notice Used to track Flox contributors.
     * @dev contributor Address of the contributor
     * @dev isContributor Status of the contributor
     */
    mapping(address contributor => bool isContributor) public floxContributors;

    /**
     * @notice Used to initialize the smart contract and set the owner.
     * @param _owner Address of the owner of the contract
     */
    constructor(address _owner) {
        owner = _owner;
    }

    /**
     * @notice Used to restrict function execution to calls initiated by the owner.
     */
    modifier onlyOwner() {
        if (msg.sender != owner) revert NotOwner();
        _;
    }

    /**
     * @notice Nominate a new owner for the contract.
     * @dev Only the current owner can nominate a new owner.
     * @param _owner Address of the new owner
     */
    function nominateNewOwner(address _owner) external onlyOwner {
        nominatedOwner = _owner;

        emit OwnerNominated(_owner);
    }

    /**
     * @notice Accept the ownership of the contract.
     * @dev Only the nominated owner can accept the ownership.
     */
    function acceptOwnership() external {
        if (msg.sender != nominatedOwner) revert NotNominatedOwner();

        address oldOwner = owner;

        owner = nominatedOwner;
        nominatedOwner = address(0);

        emit OwnerChanged(oldOwner, owner);
    }

    /**
     * @notice Manage Flox contributors.
     * @dev Flox contributor is allowed to manage all quests as well as their progress status for every user.
     * @param _contributor Address of the contributor to manage
     * @param _isContributor Status to assign the contributor. `false` to remove, `true` to add.
     */
    function manageFloxContributors(address _contributor, bool _isContributor) external onlyOwner {
        if (floxContributors[_contributor] == _isContributor) revert SameContributorStatus();

        floxContributors[_contributor] = _isContributor;

        emit FloxContributorStatusUpdate(_contributor, _isContributor);
    }

    /**
     * @notice Used to restrict function execution to calls initiated by a Flox contributor.
     */
    function _onlyFloxContributor() internal view {
        if (!floxContributors[msg.sender]) revert NotFloxContributor();
    }
}

File 3 of 4 : IReflinkTrackerEvents.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

/**
 * ====================================================================
 * |     ______                   _______                             |
 * |    / _____________ __  __   / ____(_____  ____ _____  ________   |
 * |   / /_  / ___/ __ `| |/_/  / /_  / / __ \/ __ `/ __ \/ ___/ _ \  |
 * |  / __/ / /  / /_/ _>  <   / __/ / / / / / /_/ / / / / /__/  __/  |
 * | /_/   /_/   \__,_/_/|_|  /_/   /_/_/ /_/\__,_/_/ /_/\___/\___/   |
 * |                                                                  |
 * ====================================================================
 * ====================== IReflinkTrackerEvents =======================
 * ====================================================================
 * Frax Finance: https://github.com/FraxFinance
 */
import { IReflinkTrackerErrors } from "./IReflinkTrackerErrors.sol";

/**
 * @title IReflinkTrackerEvents
 * @author Frax Finance
 * @notice A collection of events used by the Flox Reflink system.
 */
contract IReflinkTrackerEvents is IReflinkTrackerErrors {
    /**
     * @notice Emitted when the Flox contributor status is updated.
     * @param contributor Address of the cintributor being updated
     * @param isContributor New status assigned to the contributor
     */
    event FloxContributorStatusUpdate(address contributor, bool isContributor);

    /**
     * @notice Emitted when the ownership of the contract is transferred.
     * @param oldOwner Address of the previous owner
     * @param newOwner Address of the new owner
     */
    event OwnerChanged(address oldOwner, address newOwner);

    /**
     * @notice Emitted when a new owner is nominated.
     * @param newOwner Address of the account nominated to be the new owner
     */
    event OwnerNominated(address newOwner);

    /**
     * @notice Emitted when a new referral is logged.
     * @param referrer Address of the referrer
     * @param referee Address of the referee
     * @param referrerPointsAwarded Amount of points awarded to the referrer
     * @param userPointsAwarded Amount of points awarded to the user
     */
    event ReferralAdded(
        address indexed referrer,
        address indexed referee,
        uint64 referrerPointsAwarded,
        uint64 userPointsAwarded
    );

    /**
     * @notice Emitted when a referral is updated.
     * @param previousReferrer Address of the original referrer
     * @param currentReferrer Address of the current referrer
     * @param referee Address of the referee
     * @param referrerPointsAwarded Amount of points awarded to the referrer
     * @param userPointsAwarded Amount of points awarded to the user
     */
    event ReferralUpdated(
        address indexed previousReferrer,
        address indexed currentReferrer,
        address indexed referee,
        uint64 referrerPointsAwarded,
        uint64 userPointsAwarded
    );
}

File 4 of 4 : IReflinkTrackerErrors.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

/**
 * ====================================================================
 * |     ______                   _______                             |
 * |    / _____________ __  __   / ____(_____  ____ _____  ________   |
 * |   / /_  / ___/ __ `| |/_/  / /_  / / __ \/ __ `/ __ \/ ___/ _ \  |
 * |  / __/ / /  / /_/ _>  <   / __/ / / / / / /_/ / / / / /__/  __/  |
 * | /_/   /_/   \__,_/_/|_|  /_/   /_/_/ /_/\__,_/_/ /_/\___/\___/   |
 * |                                                                  |
 * ====================================================================
 * =================== IReflinkTrackerErrors ======================
 * ====================================================================
 * Frax Finance: https://github.com/FraxFinance
 */

/**
 * @title IReflinkTrackerErrors
 * @author Frax Finance
 * @notice A collection of events used by the Flox Reflink system.
 */
contract IReflinkTrackerErrors {
    /// Signifies that the arrays passed to the bulk function do not have the same length.
    error ArrayLengthMissmatch();

    /// Signifies that the referrer address passed is invalid.
    error InvalidReferrerAddress();

    /// Signifies that the user address passed is invalid.
    error InvalidUserAddress();

    /// Signifies that the caller is not a Flox contributor.
    error NotFloxContributor();

    /// Signifies that the caller is not the nominated owner.
    error NotNominatedOwner();

    /// Signifies that the caller is not the owner.
    error NotOwner();

    /// Signifies that the referral is already recorded for this user.
    error ReferralAlreadyExists();

    /// Signifies that the referral does not exist.
    error ReferralDoesNotExist();

    /// Signifies that the attempted status change is the same as the preexisting status.
    error SameContributorStatus();
}

Settings
{
  "remappings": [
    "frax-std/=lib/frax-standard-solidity/src/",
    "@eth-optimism/=lib/optimism/packages/",
    "lib/optimism/packages/contracts-bedrock:src/=lib/optimism/packages/contracts-bedrock/src/",
    "src/=src/",
    "@openzeppelin-4/=node_modules/@openzeppelin-4/",
    "@openzeppelin-5/=node_modules/@openzeppelin-5/",
    "@openzeppelin/=node_modules/@openzeppelin/",
    "@rari-capital/=node_modules/@rari-capital/",
    "ds-test/=lib/frax-standard-solidity/lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/frax-standard-solidity/lib/forge-std/src/",
    "frax-standard-solidity/=lib/frax-standard-solidity/src/",
    "optimism/=lib/optimism/",
    "solidity-bytes-utils/=lib/frax-standard-solidity/lib/solidity-bytes-utils/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 100000
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": true,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ArrayLengthMissmatch","type":"error"},{"inputs":[],"name":"InvalidReferrerAddress","type":"error"},{"inputs":[],"name":"InvalidUserAddress","type":"error"},{"inputs":[],"name":"NotFloxContributor","type":"error"},{"inputs":[],"name":"NotNominatedOwner","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"ReferralAlreadyExists","type":"error"},{"inputs":[],"name":"ReferralDoesNotExist","type":"error"},{"inputs":[],"name":"SameContributorStatus","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contributor","type":"address"},{"indexed":false,"internalType":"bool","name":"isContributor","type":"bool"}],"name":"FloxContributorStatusUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":true,"internalType":"address","name":"referee","type":"address"},{"indexed":false,"internalType":"uint64","name":"referrerPointsAwarded","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"userPointsAwarded","type":"uint64"}],"name":"ReferralAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousReferrer","type":"address"},{"indexed":true,"internalType":"address","name":"currentReferrer","type":"address"},{"indexed":true,"internalType":"address","name":"referee","type":"address"},{"indexed":false,"internalType":"uint64","name":"referrerPointsAwarded","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"userPointsAwarded","type":"uint64"}],"name":"ReferralUpdated","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bytes32","name":"_bridgeTx","type":"bytes32"},{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"uint128","name":"_timestamp","type":"uint128"},{"internalType":"uint64","name":"_userPointsAwarded","type":"uint64"},{"internalType":"uint64","name":"_referrerPointsAwarded","type":"uint64"}],"name":"addReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"bytes32[]","name":"_bridgeTxs","type":"bytes32[]"},{"internalType":"address[]","name":"_referrers","type":"address[]"},{"internalType":"uint128[]","name":"_timestamps","type":"uint128[]"},{"internalType":"uint64[]","name":"_userPointsAwarded","type":"uint64[]"},{"internalType":"uint64[]","name":"_referrerPointsAwarded","type":"uint64[]"}],"name":"bulkAddReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"bytes32[]","name":"_bridgeTxs","type":"bytes32[]"},{"internalType":"address[]","name":"_referrers","type":"address[]"},{"internalType":"uint128[]","name":"_timestamps","type":"uint128[]"},{"internalType":"uint64[]","name":"_userPointsAwarded","type":"uint64[]"},{"internalType":"uint64[]","name":"_referrerPointsAwarded","type":"uint64[]"}],"name":"bulkUpdateReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contributor","type":"address"}],"name":"floxContributors","outputs":[{"internalType":"bool","name":"isContributor","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contributor","type":"address"},{"internalType":"bool","name":"_isContributor","type":"bool"}],"name":"manageFloxContributors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"referralPointsAllocated","outputs":[{"internalType":"bool","name":"_allocated","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"referralSubmitted","outputs":[{"internalType":"bool","name":"_submitted","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"referrals","outputs":[{"internalType":"address","name":"referrer","type":"address"},{"internalType":"bytes32","name":"bridgeTx","type":"bytes32"},{"internalType":"uint128","name":"timestamp","type":"uint128"},{"internalType":"uint64","name":"pointsAwarded","type":"uint64"},{"internalType":"uint64","name":"referrerPointsAwarded","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"referrerUsers","outputs":[{"internalType":"address","name":"user","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"referrers","outputs":[{"internalType":"uint128","name":"referrals","type":"uint128"},{"internalType":"uint64","name":"pointsEarned","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_bridgeTx","type":"bytes32"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"selfAddReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalReferrals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bytes32","name":"_bridgeTx","type":"bytes32"},{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"uint128","name":"_timestamp","type":"uint128"},{"internalType":"uint64","name":"_userPointsAwarded","type":"uint64"},{"internalType":"uint64","name":"_referrerPointsAwarded","type":"uint64"}],"name":"updateReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"users","outputs":[{"internalType":"address","name":"user","type":"address"}],"stateMutability":"view","type":"function"}]

608080604052346026575f80546001600160a01b03191633179055611a7d908161002b8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c9081631627540c14610cc957508063196f491414610c8e578063365b98b214610c305780634a3b68cc14610baa5780634fd9d1e014610b4257806353a47bb714610af15780636d3db8ec14610a895780636e8fe7dc146107ea57806379ba5097146106fc5780637e02bfb3146105d45780637eb8c6411461054f57806380dc2fd5146103ff5780638da5cb5b146103af578063941cc4ae1461033a5780639ca423b31461027c578063f30e6ec614610257578063fb9620ab146102305763fc403b7a146100e2575f80fd5b3461022c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c57610119610d88565b6024359081151580920361022c5773ffffffffffffffffffffffffffffffffffffffff5f541633036102045773ffffffffffffffffffffffffffffffffffffffff1690815f5260026020528060ff60405f2054161515146101dc57816040917fac28464f2c28b0d7f4e568c4369262b204e12fb0a9b88c2f6295576c8e0734d5935f526002602052825f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff831617905582519182526020820152a1005b7fd31fc683000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f30cd7471000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b3461022c57610255610241366110a4565b9461025094919493929361148c565b6114cb565b005b3461022c57610255610268366110a4565b9461027794919493929361148c565b6111f0565b3461022c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5773ffffffffffffffffffffffffffffffffffffffff6102c8610d88565b165f52600360205260a060405f2073ffffffffffffffffffffffffffffffffffffffff81541690600260018201549101549060405192835260208301526fffffffffffffffffffffffffffffffff8116604083015267ffffffffffffffff8160801c16606083015260c01c6080820152f35b3461022c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5773ffffffffffffffffffffffffffffffffffffffff610386610d88565b165f526003602052602067ffffffffffffffff600260405f20015460801c161515604051908152f35b3461022c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461022c5761040d36610f0f565b9461041c94919493929361148c565b80518251811490811591610543575b8115610537575b811561052b575b811561051f575b506104f7575f5b81518110156102555761045a818361115d565b5173ffffffffffffffffffffffffffffffffffffffff1661047b828561115d565b51610486838761115d565b5173ffffffffffffffffffffffffffffffffffffffff166104a7848961115d565b516fffffffffffffffffffffffffffffffff166104c4858b61115d565b5167ffffffffffffffff16916104da868d61115d565b5167ffffffffffffffff16936104ef956114cb565b600101610447565b7f7f4415ae000000000000000000000000000000000000000000000000000000005f5260045ffd5b90508651141587610440565b86518114159150610439565b85518114159150610432565b8451811415915061042b565b3461022c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5773ffffffffffffffffffffffffffffffffffffffff61059b610d88565b165f52600560205260405f206024355f52602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461022c576105e236610f0f565b946105f194919493929361148c565b805182518114908115916106f0575b81156106e4575b81156106d8575b81156106cc575b506104f7575f5b81518110156102555761062f818361115d565b5173ffffffffffffffffffffffffffffffffffffffff16610650828561115d565b5161065b838761115d565b5173ffffffffffffffffffffffffffffffffffffffff1661067c848961115d565b516fffffffffffffffffffffffffffffffff16610699858b61115d565b5167ffffffffffffffff16916106af868d61115d565b5167ffffffffffffffff16936106c4956111f0565b60010161061c565b90508651141587610615565b8651811415915061060e565b85518114159150610607565b84518114159150610600565b3461022c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5760015473ffffffffffffffffffffffffffffffffffffffff81168033036107c2577fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c916040917fffffffffffffffffffffffff00000000000000000000000000000000000000005f549282828516175f551660015573ffffffffffffffffffffffffffffffffffffffff8351921682526020820152a1005b7fb1f6da50000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461022c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5760243573ffffffffffffffffffffffffffffffffffffffff811680910361022c573315610a61578015610a3957335f52600360205260405f20815f52600460205260405f2073ffffffffffffffffffffffffffffffffffffffff825416610a115781547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168417835560043560018401556fffffffffffffffffffffffffffffffff4281166002909401939093555f84815260056020908152604080832085548716845282528083208054339086168117909155600754845260069092529091208054909216179055805461099e929061091690821661119e565b167fffffffffffffffffffffffffffffffff000000000000000000000000000000008254161781556109565f67ffffffffffffffff835460801c166111ce565b7fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b600754600181018091116109e457600755604051905f82525f60208301527f9582e2f379b1ce8359fab92c91654b16a9f6c787ae7c6c051abfeccbb868a0e660403393a3005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f9d999f0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f0aa59f6e000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f702b3d90000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461022c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5773ffffffffffffffffffffffffffffffffffffffff610ad5610d88565b165f5260036020526020600160405f2001541515604051908152f35b3461022c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461022c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5773ffffffffffffffffffffffffffffffffffffffff610b8e610d88565b165f526002602052602060ff60405f2054166040519015158152f35b3461022c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5773ffffffffffffffffffffffffffffffffffffffff610bf6610d88565b165f5260046020526040805f205467ffffffffffffffff8251916fffffffffffffffffffffffffffffffff8116835260801c166020820152f35b3461022c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c576004355f526006602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461022c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c576020600754604051908152f35b3461022c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c57610d00610d88565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610204577f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229173ffffffffffffffffffffffffffffffffffffffff60209216807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558152a1005b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361022c57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff821117610def57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111610def5760051b60200190565b9080601f8301121561022c57813590610e54610e4f83610e1c565b610dab565b9260208085858152019360051b82010191821161022c57602001915b818310610e7d5750505090565b823573ffffffffffffffffffffffffffffffffffffffff8116810361022c57815260209283019201610e70565b9080601f8301121561022c57813590610ec5610e4f83610e1c565b9260208085858152019360051b82010191821161022c57602001915b818310610eee5750505090565b823567ffffffffffffffff8116810361022c57815260209283019201610ee1565b9060c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261022c5760043567ffffffffffffffff811161022c5782610f5991600401610e34565b9160243567ffffffffffffffff811161022c578160238201121561022c57806004013590610f89610e4f83610e1c565b916024602084838152019160051b8301019184831161022c57602401905b828210611094575050509160443567ffffffffffffffff811161022c5782610fd191600401610e34565b9160643567ffffffffffffffff811161022c578160238201121561022c578060040135611000610e4f82610e1c565b916024602084848152019260051b8201019084821161022c57602401915b81831061106b575050509160843567ffffffffffffffff811161022c578261104891600401610eaa565b9160a4359067ffffffffffffffff821161022c5761106891600401610eaa565b90565b82356fffffffffffffffffffffffffffffffff8116810361022c5781526020928301920161101e565b8135815260209182019101610fa7565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60c091011261022c5760043573ffffffffffffffffffffffffffffffffffffffff8116810361022c57906024359060443573ffffffffffffffffffffffffffffffffffffffff8116810361022c57906064356fffffffffffffffffffffffffffffffff8116810361022c579060843567ffffffffffffffff8116810361022c579060a43567ffffffffffffffff8116810361022c5790565b80518210156111715760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6fffffffffffffffffffffffffffffffff6001911601906fffffffffffffffffffffffffffffffff82116109e457565b9067ffffffffffffffff8091169116019067ffffffffffffffff82116109e457565b73ffffffffffffffffffffffffffffffffffffffff16949093909290918515610a615773ffffffffffffffffffffffffffffffffffffffff16938415610a3957855f52600360205260405f20855f52600460205260405f209173ffffffffffffffffffffffffffffffffffffffff825416610a115781547fffffffffffffffffffffffff00000000000000000000000000000000000000001687178255600182015560020180547fffffffffffffffff000000000000000000000000000000000000000000000000166fffffffffffffffffffffffffffffffff90931692909217608084901b77ffffffffffffffff000000000000000000000000000000001617825561142b916113479085905b9077ffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffff00000000000000000000000000000000000000000000000083549260c01b169116179055565b845f52600560205260405f206fffffffffffffffffffffffffffffffff8254165f5260205260405f20867fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556007545f52600660205260405f20867fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556fffffffffffffffffffffffffffffffff6113eb8183541661119e565b167fffffffffffffffffffffffffffffffff000000000000000000000000000000008254161781556109568467ffffffffffffffff835460801c166111ce565b60075491600183018093116109e4577f9582e2f379b1ce8359fab92c91654b16a9f6c787ae7c6c051abfeccbb868a0e6926007556114876040519283928390929167ffffffffffffffff60209181604085019616845216910152565b0390a3565b335f52600260205260ff60405f205416156114a357565b7f6b697ed1000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff16938415610a6157845f52600360205260405f209573ffffffffffffffffffffffffffffffffffffffff875416938415611a1f5773ffffffffffffffffffffffffffffffffffffffff811615611a18575b73ffffffffffffffffffffffffffffffffffffffff1694855f52600460205260405f209380611a0d575b506fffffffffffffffffffffffffffffffff81166119c9575b5067ffffffffffffffff8216156119b0575b67ffffffffffffffff8116156119a2575b67ffffffffffffffff81166118af575b5067ffffffffffffffff8116611858575b50828203611641575b5083547fffffffffffffffffffffffff000000000000000000000000000000000000000016821784556002909301546040805160c083901c815260809290921c67ffffffffffffffff166020830152929391927fa42cf7282089eb14852e1c8a7a62d043d83a2e02bacadf651125b2a54dbfc5d49190819081015b0390a4565b5f945f5b835f5260046020526fffffffffffffffffffffffffffffffff60405f20541681101561184c57835f52600560205260405f20815f526020528573ffffffffffffffffffffffffffffffffffffffff60405f205416146116a657600101611645565b90919293949550915b835f52600460205260405f20917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff84541601916fffffffffffffffffffffffffffffffff83116109e45783546fffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116179093555f8581526005602081815260408084206004835281852080548816865290835281852054988552818520805473ffffffffffffffffffffffffffffffffffffffff909a167fffffffffffffffffffffffff00000000000000000000000000000000000000009a8b161790555486168452808420805489169055898452918152818320865486168452905290208054909416871790935581547fa42cf7282089eb14852e1c8a7a62d043d83a2e02bacadf651125b2a54dbfc5d49361163c93600293919290919061181990821661119e565b167fffffffffffffffffffffffffffffffff000000000000000000000000000000008254161790559594939250506115c1565b509094919293946116af565b6118a99060028701907fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b5f6115b8565b60028701805460c01c91855f52600460205260405f209267ffffffffffffffff845460801c16039267ffffffffffffffff84116109e45781611953936112fe61199c9661193f94907fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b67ffffffffffffffff855460801c166111ce565b83547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660809190911b77ffffffffffffffff0000000000000000000000000000000016178355565b5f6115a7565b50600286015460c01c611597565b600287015460801c67ffffffffffffffff169150611586565b6fffffffffffffffffffffffffffffffff6002890191167fffffffffffffffffffffffffffffffff000000000000000000000000000000008254161790555f611574565b60018901555f61155b565b5083611531565b7fe529d84f000000000000000000000000000000000000000000000000000000005f5260045ffdfea264697066735822122046d22e1e6c6d461004850c52a4e074cbbe9a323e9be8dbfc4887f5f91c99b74464736f6c634300081a0033

Deployed Bytecode

0x6080806040526004361015610012575f80fd5b5f3560e01c9081631627540c14610cc957508063196f491414610c8e578063365b98b214610c305780634a3b68cc14610baa5780634fd9d1e014610b4257806353a47bb714610af15780636d3db8ec14610a895780636e8fe7dc146107ea57806379ba5097146106fc5780637e02bfb3146105d45780637eb8c6411461054f57806380dc2fd5146103ff5780638da5cb5b146103af578063941cc4ae1461033a5780639ca423b31461027c578063f30e6ec614610257578063fb9620ab146102305763fc403b7a146100e2575f80fd5b3461022c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c57610119610d88565b6024359081151580920361022c5773ffffffffffffffffffffffffffffffffffffffff5f541633036102045773ffffffffffffffffffffffffffffffffffffffff1690815f5260026020528060ff60405f2054161515146101dc57816040917fac28464f2c28b0d7f4e568c4369262b204e12fb0a9b88c2f6295576c8e0734d5935f526002602052825f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff831617905582519182526020820152a1005b7fd31fc683000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f30cd7471000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b3461022c57610255610241366110a4565b9461025094919493929361148c565b6114cb565b005b3461022c57610255610268366110a4565b9461027794919493929361148c565b6111f0565b3461022c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5773ffffffffffffffffffffffffffffffffffffffff6102c8610d88565b165f52600360205260a060405f2073ffffffffffffffffffffffffffffffffffffffff81541690600260018201549101549060405192835260208301526fffffffffffffffffffffffffffffffff8116604083015267ffffffffffffffff8160801c16606083015260c01c6080820152f35b3461022c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5773ffffffffffffffffffffffffffffffffffffffff610386610d88565b165f526003602052602067ffffffffffffffff600260405f20015460801c161515604051908152f35b3461022c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461022c5761040d36610f0f565b9461041c94919493929361148c565b80518251811490811591610543575b8115610537575b811561052b575b811561051f575b506104f7575f5b81518110156102555761045a818361115d565b5173ffffffffffffffffffffffffffffffffffffffff1661047b828561115d565b51610486838761115d565b5173ffffffffffffffffffffffffffffffffffffffff166104a7848961115d565b516fffffffffffffffffffffffffffffffff166104c4858b61115d565b5167ffffffffffffffff16916104da868d61115d565b5167ffffffffffffffff16936104ef956114cb565b600101610447565b7f7f4415ae000000000000000000000000000000000000000000000000000000005f5260045ffd5b90508651141587610440565b86518114159150610439565b85518114159150610432565b8451811415915061042b565b3461022c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5773ffffffffffffffffffffffffffffffffffffffff61059b610d88565b165f52600560205260405f206024355f52602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461022c576105e236610f0f565b946105f194919493929361148c565b805182518114908115916106f0575b81156106e4575b81156106d8575b81156106cc575b506104f7575f5b81518110156102555761062f818361115d565b5173ffffffffffffffffffffffffffffffffffffffff16610650828561115d565b5161065b838761115d565b5173ffffffffffffffffffffffffffffffffffffffff1661067c848961115d565b516fffffffffffffffffffffffffffffffff16610699858b61115d565b5167ffffffffffffffff16916106af868d61115d565b5167ffffffffffffffff16936106c4956111f0565b60010161061c565b90508651141587610615565b8651811415915061060e565b85518114159150610607565b84518114159150610600565b3461022c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5760015473ffffffffffffffffffffffffffffffffffffffff81168033036107c2577fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c916040917fffffffffffffffffffffffff00000000000000000000000000000000000000005f549282828516175f551660015573ffffffffffffffffffffffffffffffffffffffff8351921682526020820152a1005b7fb1f6da50000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461022c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5760243573ffffffffffffffffffffffffffffffffffffffff811680910361022c573315610a61578015610a3957335f52600360205260405f20815f52600460205260405f2073ffffffffffffffffffffffffffffffffffffffff825416610a115781547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168417835560043560018401556fffffffffffffffffffffffffffffffff4281166002909401939093555f84815260056020908152604080832085548716845282528083208054339086168117909155600754845260069092529091208054909216179055805461099e929061091690821661119e565b167fffffffffffffffffffffffffffffffff000000000000000000000000000000008254161781556109565f67ffffffffffffffff835460801c166111ce565b7fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b600754600181018091116109e457600755604051905f82525f60208301527f9582e2f379b1ce8359fab92c91654b16a9f6c787ae7c6c051abfeccbb868a0e660403393a3005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f9d999f0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f0aa59f6e000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f702b3d90000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461022c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5773ffffffffffffffffffffffffffffffffffffffff610ad5610d88565b165f5260036020526020600160405f2001541515604051908152f35b3461022c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461022c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5773ffffffffffffffffffffffffffffffffffffffff610b8e610d88565b165f526002602052602060ff60405f2054166040519015158152f35b3461022c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c5773ffffffffffffffffffffffffffffffffffffffff610bf6610d88565b165f5260046020526040805f205467ffffffffffffffff8251916fffffffffffffffffffffffffffffffff8116835260801c166020820152f35b3461022c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c576004355f526006602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461022c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c576020600754604051908152f35b3461022c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022c57610d00610d88565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610204577f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229173ffffffffffffffffffffffffffffffffffffffff60209216807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558152a1005b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361022c57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff821117610def57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111610def5760051b60200190565b9080601f8301121561022c57813590610e54610e4f83610e1c565b610dab565b9260208085858152019360051b82010191821161022c57602001915b818310610e7d5750505090565b823573ffffffffffffffffffffffffffffffffffffffff8116810361022c57815260209283019201610e70565b9080601f8301121561022c57813590610ec5610e4f83610e1c565b9260208085858152019360051b82010191821161022c57602001915b818310610eee5750505090565b823567ffffffffffffffff8116810361022c57815260209283019201610ee1565b9060c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261022c5760043567ffffffffffffffff811161022c5782610f5991600401610e34565b9160243567ffffffffffffffff811161022c578160238201121561022c57806004013590610f89610e4f83610e1c565b916024602084838152019160051b8301019184831161022c57602401905b828210611094575050509160443567ffffffffffffffff811161022c5782610fd191600401610e34565b9160643567ffffffffffffffff811161022c578160238201121561022c578060040135611000610e4f82610e1c565b916024602084848152019260051b8201019084821161022c57602401915b81831061106b575050509160843567ffffffffffffffff811161022c578261104891600401610eaa565b9160a4359067ffffffffffffffff821161022c5761106891600401610eaa565b90565b82356fffffffffffffffffffffffffffffffff8116810361022c5781526020928301920161101e565b8135815260209182019101610fa7565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60c091011261022c5760043573ffffffffffffffffffffffffffffffffffffffff8116810361022c57906024359060443573ffffffffffffffffffffffffffffffffffffffff8116810361022c57906064356fffffffffffffffffffffffffffffffff8116810361022c579060843567ffffffffffffffff8116810361022c579060a43567ffffffffffffffff8116810361022c5790565b80518210156111715760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6fffffffffffffffffffffffffffffffff6001911601906fffffffffffffffffffffffffffffffff82116109e457565b9067ffffffffffffffff8091169116019067ffffffffffffffff82116109e457565b73ffffffffffffffffffffffffffffffffffffffff16949093909290918515610a615773ffffffffffffffffffffffffffffffffffffffff16938415610a3957855f52600360205260405f20855f52600460205260405f209173ffffffffffffffffffffffffffffffffffffffff825416610a115781547fffffffffffffffffffffffff00000000000000000000000000000000000000001687178255600182015560020180547fffffffffffffffff000000000000000000000000000000000000000000000000166fffffffffffffffffffffffffffffffff90931692909217608084901b77ffffffffffffffff000000000000000000000000000000001617825561142b916113479085905b9077ffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffff00000000000000000000000000000000000000000000000083549260c01b169116179055565b845f52600560205260405f206fffffffffffffffffffffffffffffffff8254165f5260205260405f20867fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556007545f52600660205260405f20867fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556fffffffffffffffffffffffffffffffff6113eb8183541661119e565b167fffffffffffffffffffffffffffffffff000000000000000000000000000000008254161781556109568467ffffffffffffffff835460801c166111ce565b60075491600183018093116109e4577f9582e2f379b1ce8359fab92c91654b16a9f6c787ae7c6c051abfeccbb868a0e6926007556114876040519283928390929167ffffffffffffffff60209181604085019616845216910152565b0390a3565b335f52600260205260ff60405f205416156114a357565b7f6b697ed1000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff16938415610a6157845f52600360205260405f209573ffffffffffffffffffffffffffffffffffffffff875416938415611a1f5773ffffffffffffffffffffffffffffffffffffffff811615611a18575b73ffffffffffffffffffffffffffffffffffffffff1694855f52600460205260405f209380611a0d575b506fffffffffffffffffffffffffffffffff81166119c9575b5067ffffffffffffffff8216156119b0575b67ffffffffffffffff8116156119a2575b67ffffffffffffffff81166118af575b5067ffffffffffffffff8116611858575b50828203611641575b5083547fffffffffffffffffffffffff000000000000000000000000000000000000000016821784556002909301546040805160c083901c815260809290921c67ffffffffffffffff166020830152929391927fa42cf7282089eb14852e1c8a7a62d043d83a2e02bacadf651125b2a54dbfc5d49190819081015b0390a4565b5f945f5b835f5260046020526fffffffffffffffffffffffffffffffff60405f20541681101561184c57835f52600560205260405f20815f526020528573ffffffffffffffffffffffffffffffffffffffff60405f205416146116a657600101611645565b90919293949550915b835f52600460205260405f20917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff84541601916fffffffffffffffffffffffffffffffff83116109e45783546fffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116179093555f8581526005602081815260408084206004835281852080548816865290835281852054988552818520805473ffffffffffffffffffffffffffffffffffffffff909a167fffffffffffffffffffffffff00000000000000000000000000000000000000009a8b161790555486168452808420805489169055898452918152818320865486168452905290208054909416871790935581547fa42cf7282089eb14852e1c8a7a62d043d83a2e02bacadf651125b2a54dbfc5d49361163c93600293919290919061181990821661119e565b167fffffffffffffffffffffffffffffffff000000000000000000000000000000008254161790559594939250506115c1565b509094919293946116af565b6118a99060028701907fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b5f6115b8565b60028701805460c01c91855f52600460205260405f209267ffffffffffffffff845460801c16039267ffffffffffffffff84116109e45781611953936112fe61199c9661193f94907fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b67ffffffffffffffff855460801c166111ce565b83547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660809190911b77ffffffffffffffff0000000000000000000000000000000016178355565b5f6115a7565b50600286015460c01c611597565b600287015460801c67ffffffffffffffff169150611586565b6fffffffffffffffffffffffffffffffff6002890191167fffffffffffffffffffffffffffffffff000000000000000000000000000000008254161790555f611574565b60018901555f61155b565b5083611531565b7fe529d84f000000000000000000000000000000000000000000000000000000005f5260045ffdfea264697066735822122046d22e1e6c6d461004850c52a4e074cbbe9a323e9be8dbfc4887f5f91c99b74464736f6c634300081a0033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.