FRAX Price: $0.83 (+3.89%)

Contract

0x7f444B035E55C2956653f69F0366A7045a9bE846

Overview

FRAX Balance | FXTL Balance

0 FRAX | 0 FXTL

FRAX Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Add Fxtl Contrib...9034192024-02-22 15:59:09707 days ago1708617549IN
0x7f444B03...45a9bE846
0 FRAX0.000212463.00000025

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:
FxtlPoints

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
london EvmVersion
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.8.0;

// ====================================================================
// |     ______                   _______                             |
// |    / _____________ __  __   / ____(_____  ____ _____  ________   |
// |   / /_  / ___/ __ `| |/_/  / /_  / / __ \/ __ `/ __ \/ ___/ _ \  |
// |  / __/ / /  / /_/ _>  <   / __/ / / / / / /_/ / / / / /__/  __/  |
// | /_/   /_/   \__,_/_/|_|  /_/   /_/_/ /_/\__,_/_/ /_/\___/\___/   |
// |                                                                  |
// ====================================================================
// =========================== Fxtl Points ============================
// ====================================================================

import { Owned } from "../vefxs/Owned.sol";
import { IFxtlPointsEvents } from "./IFxtlPointsEvents.sol";

/**
 * @title FxtlPoints
 * @author Frax Finance
 * @notice A simple Fxtl point tracking smart contract.
 */
contract FxtlPoints is Owned, IFxtlPointsEvents {
    mapping(address => bool) public isFxtlContributor;
    mapping(address => uint256) public fxtlPointsBalances;

    /**
     * @notice Used to initialize the smart contract.
     * @dev The initial owner is set as the deployer of the smart contract.
     */
    constructor() Owned(msg.sender) {}

    /**
     * @notice Retrieves the Fxtl points balances of multiple point owners at the same time.
     * @param _pointOwners An array of point owners
     * @return An array of Fxtl points balances
     */
    function bulkFxtlPointsBalances(address[] memory _pointOwners) external view returns (uint256[] memory) {
        uint256[] memory balances = new uint256[](_pointOwners.length);

        for (uint256 i; i < _pointOwners.length; ) {
            balances[i] = fxtlPointsBalances[_pointOwners[i]];

            unchecked {
                ++i;
            }
        }

        return balances;
    }

    /**
     * @notice Adds a Fxtl contributor.
     * @dev Can only be called by the owner.
     * @param _contributor The address of the Fxtl contributor to add
     */
    function addFxtlContributor(address _contributor) external {
        _onlyOwner();
        if (isFxtlContributor[_contributor]) revert AlreadyFxtlContributor();
        isFxtlContributor[_contributor] = true;
        emit FxtlContributorAdded(_contributor);
    }

    /**
     * @notice Removes a Fxtl contributor.
     * @dev Can only be called by the owner.
     * @param _contributor The address of the Fxtl contributor to remove
     */
    function removeFxtlContributor(address _contributor) external {
        _onlyOwner();
        if (!isFxtlContributor[_contributor]) revert NotFxtlContributor();
        isFxtlContributor[_contributor] = false;
        emit FxtlContributorRemoved(_contributor);
    }

    /**
     * @notice Adds Fxtl points to a recipient.
     * @dev Can only be called by a Fxtl contributor.
     * @param _recipient Recipient of the Fxtl points
     * @param _amount Amount of Fxtl points to add to the recipient
     */
    function addFxtlPoints(address _recipient, uint256 _amount) external {
        _onlyFxtlContributor();
        fxtlPointsBalances[_recipient] += _amount;
        emit FxtlPointsAdded(_recipient, _amount);
    }

    /**
     * @notice Removes Fxtl points from a point owner.
     * @dev Can only be called by a Fxtl contributor.
     * @dev Can only remove the amount of Fxtl points that the point owner has.
     * @param _pointOwner Owner of the Fxtl points being removed
     * @param _amount Amount of Fxtl points to remove from the point owner
     */
    function removeFxtlPoints(address _pointOwner, uint256 _amount) external {
        _onlyFxtlContributor();
        if (fxtlPointsBalances[_pointOwner] < _amount) {
            revert InsufficientFxtlPoints(fxtlPointsBalances[_pointOwner], _amount);
        }
        fxtlPointsBalances[_pointOwner] -= _amount;
        emit FxtlPointsRemoved(_pointOwner, _amount);
    }

    /**
     * @notice Adds Fxtl points to multiple recipients.
     * @dev Can only be called by a Fxtl contributor.
     * @dev If the arrays are different lengths, the operation will be reverted.
     * @param _recipients An array of recipients of the Fxtl points
     * @param _amounts An array of amounts of Fxtl points to add to the recipients
     */
    function bulkAddFxtlPoints(address[] memory _recipients, uint256[] memory _amounts) external {
        _onlyFxtlContributor();
        if (_recipients.length != _amounts.length) revert ArrayLengthMismatch();
        for (uint256 i; i < _recipients.length; ) {
            fxtlPointsBalances[_recipients[i]] += _amounts[i];
            emit FxtlPointsAdded(_recipients[i], _amounts[i]);

            unchecked {
                ++i;
            }
        }
    }

    /**
     * @notice Removes Fxtl points from multiple point owners.
     * @dev Can only be called by a Fxtl contributor.
     * @dev If the arrays are different lengths, the operation will be reverted.
     * @dev Can only remove the amount of Fxtl points that the point owner has.
     * @param _pointOwners An array of owners of the Fxtl points being removed
     * @param _amounts An array of amounts of Fxtl points to remove from the point owners
     */
    function bulkRemoveFxtlPoints(address[] memory _pointOwners, uint256[] memory _amounts) external {
        _onlyFxtlContributor();
        if (_pointOwners.length != _amounts.length) revert ArrayLengthMismatch();
        for (uint256 i; i < _pointOwners.length; ) {
            if (fxtlPointsBalances[_pointOwners[i]] < _amounts[i]) {
                revert InsufficientFxtlPoints(fxtlPointsBalances[_pointOwners[i]], _amounts[i]);
            }
            fxtlPointsBalances[_pointOwners[i]] -= _amounts[i];
            emit FxtlPointsRemoved(_pointOwners[i], _amounts[i]);

            unchecked {
                ++i;
            }
        }
    }

    /**
     * @notice Checks if an address is a Fxtl contributor.
     * @dev The operation will be reverted if the caller is not a Fxtlx contributor.
     */
    function _onlyFxtlContributor() internal view {
        if (!isFxtlContributor[msg.sender]) revert NotFxtlContributor();
    }

    /// @notice The address is already a Fxtl contributor
    error AlreadyFxtlContributor();
    /// @notice The array lengths are mismatched
    error ArrayLengthMismatch();
    /**
     * @notice The amount of Fxtl points is insufficient.
     * @param available The amount of Fxtl points available
     * @param attempted The amount of Fxtl points attempted to be removed
     */
    error InsufficientFxtlPoints(uint256 available, uint256 attempted);
    /// @notice Only Fxtl contributor is allowed to perform this call
    error NotFxtlContributor();
}

// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.8.0;

// ====================================================================
// |     ______                   _______                             |
// |    / _____________ __  __   / ____(_____  ____ _____  ________   |
// |   / /_  / ___/ __ `| |/_/  / /_  / / __ \/ __ `/ __ \/ ___/ _ \  |
// |  / __/ / /  / /_/ _>  <   / __/ / / / / / /_/ / / / / /__/  __/  |
// | /_/   /_/   \__,_/_/|_|  /_/   /_/_/ /_/\__,_/_/ /_/\___/\___/   |
// |                                                                  |
// ====================================================================
// ===============================Owned================================
// ====================================================================

/// @title Owned
/// @notice The Owned contract has an owner address, and provides basic access control.
contract Owned {
    address public owner;
    address public nominatedOwner;

    constructor(address _owner) {
        if (_owner == address(0)) revert OwnerCannotBeZeroAddress();
        owner = _owner;
        emit OwnerChanged(address(0), _owner);
    }

    function nominateNewOwner(address _owner) external {
        _onlyOwner();
        if (_owner == address(0)) revert OwnerCannotBeZeroAddress();
        nominatedOwner = _owner;
        emit OwnerNominated(_owner);
    }

    function acceptOwnership() external {
        if (msg.sender != nominatedOwner) revert InvalidOwnershipAcceptance();
        address oldOwner = owner;
        owner = nominatedOwner;
        nominatedOwner = address(0);
        emit OwnerChanged(oldOwner, owner);
    }

    function _onlyOwner() internal view {
        if (msg.sender != owner) revert OnlyOwner();
    }

    event OwnerNominated(address indexed nominatedOwner);
    event OwnerChanged(address indexed previousOwner, address indexed newOwner);

    error InvalidOwnershipAcceptance();
    error OwnerCannotBeZeroAddress();
    error OnlyOwner();
}

File 3 of 3 : IFxtlPointsEvents.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.8.0;

// ====================================================================
// |     ______                   _______                             |
// |    / _____________ __  __   / ____(_____  ____ _____  ________   |
// |   / /_  / ___/ __ `| |/_/  / /_  / / __ \/ __ `/ __ \/ ___/ _ \  |
// |  / __/ / /  / /_/ _>  <   / __/ / / / / / /_/ / / / / /__/  __/  |
// | /_/   /_/   \__,_/_/|_|  /_/   /_/_/ /_/\__,_/_/ /_/\___/\___/   |
// |                                                                  |
// ====================================================================
// ======================== IFxtlPointsEvents =========================
// ====================================================================

/**
 * @title IFxtlPointsEvents
 * @author Frax Finance
 * @notice A collection of events used by the Flox FxtlPoints
 */
contract IFxtlPointsEvents {
    /**
     * @notice Emitted when a new address is added as a Fxtl Contributor.
     * @param contributor The address added as the contributor
     */
    event FxtlContributorAdded(address indexed contributor);

    /**
     * @notice Emitted when an address is removed as a Fxtl Contributor.
     * @param contributor The address removed as the contributor
     */
    event FxtlContributorRemoved(address indexed contributor);

    /**
     * @notice Emitted when Fxtl points are added to an address.
     * @param recipient The address receiving the Fxtl points
     * @param amount The amount of Fxtl points added
     */
    event FxtlPointsAdded(address indexed recipient, uint256 amount);

    /**
     * @notice Emitted when Fxtl points are removed from an address.
     * @param pointOwner The address losing the Fxtl points
     * @param amount The amount of Fxtl points removed
     */
    event FxtlPointsRemoved(address indexed pointOwner, uint256 amount);
}

Settings
{
  "remappings": [
    "frax-std/=lib/frax-standard-solidity/src/",
    "@eth-optimism/=lib/optimism/packages/",
    "@openzeppelin-new/=node_modules/@openzeppelin-new/",
    "@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/",
    "multicall/=lib/optimism/packages/contracts-periphery/lib/multicall/src/",
    "optimism/=lib/optimism/",
    "solidity-bytes-utils/=lib/frax-standard-solidity/lib/solidity-bytes-utils/"
  ],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "none"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyFxtlContributor","type":"error"},{"inputs":[],"name":"ArrayLengthMismatch","type":"error"},{"inputs":[{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint256","name":"attempted","type":"uint256"}],"name":"InsufficientFxtlPoints","type":"error"},{"inputs":[],"name":"InvalidOwnershipAcceptance","type":"error"},{"inputs":[],"name":"NotFxtlContributor","type":"error"},{"inputs":[],"name":"OnlyOwner","type":"error"},{"inputs":[],"name":"OwnerCannotBeZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contributor","type":"address"}],"name":"FxtlContributorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contributor","type":"address"}],"name":"FxtlContributorRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FxtlPointsAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pointOwner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FxtlPointsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"nominatedOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contributor","type":"address"}],"name":"addFxtlContributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"addFxtlPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"bulkAddFxtlPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pointOwners","type":"address[]"}],"name":"bulkFxtlPointsBalances","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pointOwners","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"bulkRemoveFxtlPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"fxtlPointsBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFxtlContributor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_contributor","type":"address"}],"name":"removeFxtlContributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pointOwner","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"removeFxtlPoints","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5033600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610078576040517fc81abf6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c60405160405180910390a35061169e806101236000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80636112f9af1161008c5780638da5cb5b116100665780638da5cb5b146101e8578063c171c65514610206578063d58fd49a14610222578063d614c58a1461023e576100cf565b80636112f9af1461017e5780636665e190146101ae57806379ba5097146101de576100cf565b80630f836e07146100d45780631627540c146100f057806325fda3d11461010c5780632bbd3e84146101285780634d0b54d81461014457806353a47bb714610160575b600080fd5b6100ee60048036038101906100e991906110cc565b61026e565b005b61010a6004803603810190610105919061110c565b61031e565b005b61012660048036038101906101219190611355565b610413565b005b610142600480360381019061013d919061110c565b6106ab565b005b61015e60048036038101906101599190611355565b6107d4565b005b61016861093f565b60405161017591906113dc565b60405180910390f35b610198600480360381019061019391906113f7565b610965565b6040516101a591906114fe565b60405180910390f35b6101c860048036038101906101c3919061110c565b610a4f565b6040516101d5919061152f565b60405180910390f35b6101e6610a67565b005b6101f0610c35565b6040516101fd91906113dc565b60405180910390f35b610220600480360381019061021b91906110cc565b610c59565b005b61023c6004803603810190610237919061110c565b610dce565b005b6102586004803603810190610253919061110c565b610ef8565b6040516102659190611565565b60405180910390f35b610276610f18565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546102c591906115af565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167f0268f4679db7123d479021367abc6a8700ae63b3e9fcb2c97d0462e92027482f82604051610312919061152f565b60405180910390a25050565b610326610f9d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361038c576040517fc81abf6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2260405160405180910390a250565b61041b610f18565b8051825114610456576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156106a65781818151811061047557610474611605565b5b60200260200101516003600085848151811061049457610493611605565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561058f57600360008483815181106104f4576104f3611605565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061054a57610549611605565b5b60200260200101516040517fd81a0a75000000000000000000000000000000000000000000000000000000008152600401610586929190611634565b60405180910390fd5b8181815181106105a2576105a1611605565b5b6020026020010151600360008584815181106105c1576105c0611605565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610612919061165d565b9250508190555082818151811061062c5761062b611605565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f13b227187fa31fdbea8b86995ac447e1a9aadd3f2381e562111bfe82e242b3b783838151811061067e5761067d611605565b5b6020026020010151604051610693919061152f565b60405180910390a2806001019050610459565b505050565b6106b3610f9d565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610736576040517f8e6c615c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fd12b6212ff135eb13602620025372b793c032c25d91b4626f5122dd6ddd3da7d60405160405180910390a250565b6107dc610f18565b8051825114610817576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561093a5781818151811061083657610835611605565b5b60200260200101516003600085848151811061085557610854611605565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108a691906115af565b925050819055508281815181106108c0576108bf611605565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f0268f4679db7123d479021367abc6a8700ae63b3e9fcb2c97d0462e92027482f83838151811061091257610911611605565b5b6020026020010151604051610927919061152f565b60405180910390a280600101905061081a565b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000825167ffffffffffffffff8111156109845761098361114f565b5b6040519080825280602002602001820160405280156109b25781602001602082028036833780820191505090505b50905060005b8351811015610a4557600360008583815181106109d8576109d7611605565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110610a2e57610a2d611605565b5b6020026020010181815250508060010190506109b8565b5080915050919050565b60036020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aee576040517fd74b334e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c60405160405180910390a350565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c61610f18565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610d2657600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816040517fd81a0a75000000000000000000000000000000000000000000000000000000008152600401610d1d929190611634565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d75919061165d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167f13b227187fa31fdbea8b86995ac447e1a9aadd3f2381e562111bfe82e242b3b782604051610dc2919061152f565b60405180910390a25050565b610dd6610f9d565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e5a576040517ffb3b211f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fe65fe402339208383f5099232b75931c31cab59b26dc286ec0ab4de32d3dd0fa60405160405180910390a250565b60026020528060005260406000206000915054906101000a900460ff1681565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f9b576040517f8e6c615c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611022576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061106382611038565b9050919050565b61107381611058565b811461107e57600080fd5b50565b6000813590506110908161106a565b92915050565b6000819050919050565b6110a981611096565b81146110b457600080fd5b50565b6000813590506110c6816110a0565b92915050565b600080604083850312156110e3576110e261102e565b5b60006110f185828601611081565b9250506020611102858286016110b7565b9150509250929050565b6000602082840312156111225761112161102e565b5b600061113084828501611081565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6111878261113e565b810181811067ffffffffffffffff821117156111a6576111a561114f565b5b80604052505050565b60006111b9611024565b90506111c5828261117e565b919050565b600067ffffffffffffffff8211156111e5576111e461114f565b5b602082029050602081019050919050565b600080fd5b600061120e611209846111ca565b6111af565b90508083825260208201905060208402830185811115611231576112306111f6565b5b835b8181101561125a57806112468882611081565b845260208401935050602081019050611233565b5050509392505050565b600082601f83011261127957611278611139565b5b81356112898482602086016111fb565b91505092915050565b600067ffffffffffffffff8211156112ad576112ac61114f565b5b602082029050602081019050919050565b60006112d16112cc84611292565b6111af565b905080838252602082019050602084028301858111156112f4576112f36111f6565b5b835b8181101561131d578061130988826110b7565b8452602084019350506020810190506112f6565b5050509392505050565b600082601f83011261133c5761133b611139565b5b813561134c8482602086016112be565b91505092915050565b6000806040838503121561136c5761136b61102e565b5b600083013567ffffffffffffffff81111561138a57611389611033565b5b61139685828601611264565b925050602083013567ffffffffffffffff8111156113b7576113b6611033565b5b6113c385828601611327565b9150509250929050565b6113d681611058565b82525050565b60006020820190506113f160008301846113cd565b92915050565b60006020828403121561140d5761140c61102e565b5b600082013567ffffffffffffffff81111561142b5761142a611033565b5b61143784828501611264565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61147581611096565b82525050565b6000611487838361146c565b60208301905092915050565b6000602082019050919050565b60006114ab82611440565b6114b5818561144b565b93506114c08361145c565b8060005b838110156114f15781516114d8888261147b565b97506114e383611493565b9250506001810190506114c4565b5085935050505092915050565b6000602082019050818103600083015261151881846114a0565b905092915050565b61152981611096565b82525050565b60006020820190506115446000830184611520565b92915050565b60008115159050919050565b61155f8161154a565b82525050565b600060208201905061157a6000830184611556565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115ba82611096565b91506115c583611096565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156115fa576115f9611580565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006040820190506116496000830185611520565b6116566020830184611520565b9392505050565b600061166882611096565b915061167383611096565b92508282101561168657611685611580565b5b82820390509291505056fea164736f6c634300080f000a

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80636112f9af1161008c5780638da5cb5b116100665780638da5cb5b146101e8578063c171c65514610206578063d58fd49a14610222578063d614c58a1461023e576100cf565b80636112f9af1461017e5780636665e190146101ae57806379ba5097146101de576100cf565b80630f836e07146100d45780631627540c146100f057806325fda3d11461010c5780632bbd3e84146101285780634d0b54d81461014457806353a47bb714610160575b600080fd5b6100ee60048036038101906100e991906110cc565b61026e565b005b61010a6004803603810190610105919061110c565b61031e565b005b61012660048036038101906101219190611355565b610413565b005b610142600480360381019061013d919061110c565b6106ab565b005b61015e60048036038101906101599190611355565b6107d4565b005b61016861093f565b60405161017591906113dc565b60405180910390f35b610198600480360381019061019391906113f7565b610965565b6040516101a591906114fe565b60405180910390f35b6101c860048036038101906101c3919061110c565b610a4f565b6040516101d5919061152f565b60405180910390f35b6101e6610a67565b005b6101f0610c35565b6040516101fd91906113dc565b60405180910390f35b610220600480360381019061021b91906110cc565b610c59565b005b61023c6004803603810190610237919061110c565b610dce565b005b6102586004803603810190610253919061110c565b610ef8565b6040516102659190611565565b60405180910390f35b610276610f18565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546102c591906115af565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167f0268f4679db7123d479021367abc6a8700ae63b3e9fcb2c97d0462e92027482f82604051610312919061152f565b60405180910390a25050565b610326610f9d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361038c576040517fc81abf6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2260405160405180910390a250565b61041b610f18565b8051825114610456576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156106a65781818151811061047557610474611605565b5b60200260200101516003600085848151811061049457610493611605565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561058f57600360008483815181106104f4576104f3611605565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061054a57610549611605565b5b60200260200101516040517fd81a0a75000000000000000000000000000000000000000000000000000000008152600401610586929190611634565b60405180910390fd5b8181815181106105a2576105a1611605565b5b6020026020010151600360008584815181106105c1576105c0611605565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610612919061165d565b9250508190555082818151811061062c5761062b611605565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f13b227187fa31fdbea8b86995ac447e1a9aadd3f2381e562111bfe82e242b3b783838151811061067e5761067d611605565b5b6020026020010151604051610693919061152f565b60405180910390a2806001019050610459565b505050565b6106b3610f9d565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610736576040517f8e6c615c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fd12b6212ff135eb13602620025372b793c032c25d91b4626f5122dd6ddd3da7d60405160405180910390a250565b6107dc610f18565b8051825114610817576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561093a5781818151811061083657610835611605565b5b60200260200101516003600085848151811061085557610854611605565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108a691906115af565b925050819055508281815181106108c0576108bf611605565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f0268f4679db7123d479021367abc6a8700ae63b3e9fcb2c97d0462e92027482f83838151811061091257610911611605565b5b6020026020010151604051610927919061152f565b60405180910390a280600101905061081a565b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000825167ffffffffffffffff8111156109845761098361114f565b5b6040519080825280602002602001820160405280156109b25781602001602082028036833780820191505090505b50905060005b8351811015610a4557600360008583815181106109d8576109d7611605565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110610a2e57610a2d611605565b5b6020026020010181815250508060010190506109b8565b5080915050919050565b60036020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aee576040517fd74b334e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c60405160405180910390a350565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c61610f18565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610d2657600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816040517fd81a0a75000000000000000000000000000000000000000000000000000000008152600401610d1d929190611634565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d75919061165d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167f13b227187fa31fdbea8b86995ac447e1a9aadd3f2381e562111bfe82e242b3b782604051610dc2919061152f565b60405180910390a25050565b610dd6610f9d565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e5a576040517ffb3b211f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fe65fe402339208383f5099232b75931c31cab59b26dc286ec0ab4de32d3dd0fa60405160405180910390a250565b60026020528060005260406000206000915054906101000a900460ff1681565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f9b576040517f8e6c615c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611022576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061106382611038565b9050919050565b61107381611058565b811461107e57600080fd5b50565b6000813590506110908161106a565b92915050565b6000819050919050565b6110a981611096565b81146110b457600080fd5b50565b6000813590506110c6816110a0565b92915050565b600080604083850312156110e3576110e261102e565b5b60006110f185828601611081565b9250506020611102858286016110b7565b9150509250929050565b6000602082840312156111225761112161102e565b5b600061113084828501611081565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6111878261113e565b810181811067ffffffffffffffff821117156111a6576111a561114f565b5b80604052505050565b60006111b9611024565b90506111c5828261117e565b919050565b600067ffffffffffffffff8211156111e5576111e461114f565b5b602082029050602081019050919050565b600080fd5b600061120e611209846111ca565b6111af565b90508083825260208201905060208402830185811115611231576112306111f6565b5b835b8181101561125a57806112468882611081565b845260208401935050602081019050611233565b5050509392505050565b600082601f83011261127957611278611139565b5b81356112898482602086016111fb565b91505092915050565b600067ffffffffffffffff8211156112ad576112ac61114f565b5b602082029050602081019050919050565b60006112d16112cc84611292565b6111af565b905080838252602082019050602084028301858111156112f4576112f36111f6565b5b835b8181101561131d578061130988826110b7565b8452602084019350506020810190506112f6565b5050509392505050565b600082601f83011261133c5761133b611139565b5b813561134c8482602086016112be565b91505092915050565b6000806040838503121561136c5761136b61102e565b5b600083013567ffffffffffffffff81111561138a57611389611033565b5b61139685828601611264565b925050602083013567ffffffffffffffff8111156113b7576113b6611033565b5b6113c385828601611327565b9150509250929050565b6113d681611058565b82525050565b60006020820190506113f160008301846113cd565b92915050565b60006020828403121561140d5761140c61102e565b5b600082013567ffffffffffffffff81111561142b5761142a611033565b5b61143784828501611264565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61147581611096565b82525050565b6000611487838361146c565b60208301905092915050565b6000602082019050919050565b60006114ab82611440565b6114b5818561144b565b93506114c08361145c565b8060005b838110156114f15781516114d8888261147b565b97506114e383611493565b9250506001810190506114c4565b5085935050505092915050565b6000602082019050818103600083015261151881846114a0565b905092915050565b61152981611096565b82525050565b60006020820190506115446000830184611520565b92915050565b60008115159050919050565b61155f8161154a565b82525050565b600060208201905061157a6000830184611556565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115ba82611096565b91506115c583611096565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156115fa576115f9611580565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006040820190506116496000830185611520565b6116566020830184611520565b9392505050565b600061166882611096565b915061167383611096565b92508282101561168657611685611580565b5b82820390509291505056fea164736f6c634300080f000a

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.