FRAX Price: $0.81 (-0.50%)

Contract

0x81C2E3CdD563aa5D408420d1fC4c7Fb1ba21737f

Overview

FRAX Balance | FXTL Balance

0 FRAX | 48,307 FXTL

FRAX Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Transfer Contrac...264756222025-10-06 14:45:55111 days ago1759761955IN
0x81C2E3Cd...1ba21737f
0 FRAX0.000133650.00100025
Transfer Contrac...264755262025-10-06 14:42:43111 days ago1759761763IN
0x81C2E3Cd...1ba21737f
0 FRAX0.000139160.00100026

View more zero value Internal Transactions in Advanced View mode

Advanced mode:

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VNXManager

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, None license
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./irbac.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

/**
  @title VNXManager
  @author Eugene Rupakov <[email protected]>
  @notice Implements runtime configurable Role Based Access Control, Contract Management.
  @notice 05/07/2024 Updated by Wazen to compliy with OpenZippelin V5
*/
contract VNXManager is IRBAC, Ownable {
  /**
   * @dev Throws if called by any account other than the admin
   */
  modifier onlyAdmin() {
    require(isAdmin(), "RBAC: caller is not the admin");
    _;
  }

  /**
   * @dev Returns true if the caller is the admin role
   */
  function isAdmin() public view returns (bool) {
    return hasRole(msg.sender, 0);
  }

  function transferContractOwnership(address targetContract, address newOwner) onlyAdmin external returns(bool)
  {
    require(targetContract != address(0), "Target contract cannot be zero address");
    require(newOwner != address(0), "newOwner cannot be zero address");

    Ownable c = Ownable(targetContract);
    require(c.owner()!=newOwner, "New owner should differ from current");
    c.transferOwnership(newOwner);

    return true;
  }

  /**
   * @notice A role which will be used to group users.
   * @dev The role id is its position in the roles array.
   * @param description A description for the role.
   * @param admin The only role that can add or remove bearers from
   * this role. To have the role bearers to be also the role admins 
   * you should pass roles.length as the admin role.
   * @param bearers Addresses belonging to this role.
   * @param bearersCount total count of addresses belonging to this role.
   */
  struct Role {
    string description;
    uint256 admin;
    mapping (address => bool) bearers;
    uint256 bearersCount;
  }
  /**
   * @notice All roles ever created.
   */
  Role[] public roles;
  /**
   * @notice The contract constructor, empty as of now.
   */
  constructor() {
    addRootRole("Superadmin");
  }
  /**
   * @notice Create a new role that has itself as an admin. 
   * msg.sender is added as a bearer.
   * @param roleDescription The description of the role created.
   * @return The role id.
   */
  function addRootRole(string memory roleDescription)
    public override
    returns(uint256)
  {
    uint256 role = addRole(roleDescription, roles.length);
    roles[role].bearers[msg.sender] = true;
    roles[role].bearersCount++;
    emit BearerAdded(msg.sender, role);
    return role;
  }
  /**
   * @notice Create a new role.
   * @param roleDescription The description of the role created.
   * @param admin The role that is allowed to add and remove
   * bearers from the role being created.
   * @return The role id.
   */
  function addRole(string memory roleDescription, uint256 admin)
    public override
    returns(uint256)
  {
    require(admin <= roles.length, "Admin role doesn't exist.");
    Role storage r = roles.push();
    r.description = roleDescription;
    r.admin = admin;
    uint256 role = roles.length - 1;
    emit RoleCreated(role);
    return role;
  }
  /**
   * @notice Retrieve the number of roles in the contract.
   */
  function totalRoles()
    external override
    view
    returns(uint256)
  {
    return roles.length;
  }
  /**
   * @notice Verify whether an account is a bearer of a role
   * @param account The account to verify.
   * @param role The role to look into.
   * @return Whether the account is a bearer of the role.
   */
  function hasRole(address account, uint256 role)
    public override
    view
    returns(bool)
  {
    return role < roles.length && roles[role].bearers[account];
  }
  /**
   * @notice A method to add a bearer to a role
   * @param account The account to add as a bearer.
   * @param role The role to add the bearer to.
   */
  function addBearer(address account, uint256 role)
    external override
  {
    require(
      role < roles.length,
      "Role doesn't exist."
    );
    require(
      hasRole(msg.sender, roles[role].admin),
      "User can't add bearers."
    );
    require(
      !hasRole(account, role),
      "Account is bearer of role."
    );
    roles[role].bearers[account] = true;
    roles[role].bearersCount++;
    emit BearerAdded(account, role);
  }
  /**
   * @notice A method to remove a bearer from a role
   * @param account The account to remove as a bearer.
   * @param role The role to remove the bearer from.
   */
  function removeBearer(address account, uint256 role)
    external override
  {
    require(
      role < roles.length,
      "Role doesn't exist."
    );
    require(
      hasRole(msg.sender, roles[role].admin),
      "User can't remove bearers."
    );
    require(
      hasRole(account, role),
      "Account is not bearer of role."
    );
    if ( role == roles[role].admin && roles[role].bearersCount == 1) {
      revert("Cannot remove last role admin");
    }

    delete roles[role].bearers[account];
    roles[role].bearersCount--;
    emit BearerRemoved(account, role);
  }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IRBAC {
  event RoleCreated(uint256 role);
  event BearerAdded(address indexed account, uint256 role);
  event BearerRemoved(address indexed account, uint256 role);

  function addRootRole(string calldata roleDescription) external returns(uint256);
  function removeBearer(address account, uint256 role) external;
  function addRole(string calldata roleDescription, uint256 admin) external returns(uint256);
  function totalRoles() external view returns(uint256);
  function hasRole(address account, uint256 role) external view returns(bool);
  function addBearer(address account, uint256 role) external;
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "paris",
  "viaIR": true,
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"role","type":"uint256"}],"name":"BearerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"role","type":"uint256"}],"name":"BearerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"role","type":"uint256"}],"name":"RoleCreated","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"role","type":"uint256"}],"name":"addBearer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"roleDescription","type":"string"},{"internalType":"uint256","name":"admin","type":"uint256"}],"name":"addRole","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"roleDescription","type":"string"}],"name":"addRootRole","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"role","type":"uint256"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"role","type":"uint256"}],"name":"removeBearer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"roles","outputs":[{"internalType":"string","name":"description","type":"string"},{"internalType":"uint256","name":"admin","type":"uint256"},{"internalType":"uint256","name":"bearersCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRoles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"targetContract","type":"address"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferContractOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608034620003095760008054336001600160a01b0319821681178355919291906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08480a36040906001600160401b0381830181811183821017620002f5578352600a82526020906929bab832b930b236b4b760b11b8284015260019283549168010000000000000000831015620002e1578483018555620000a9836200030e565b50918051918211620002cd5782548681811c91168015620002c2575b86821014620002ae579081601f88959493116200025a575b508590601f8311600114620001f35789919083620001e7575b5050600019600383901b1c191690831b1781555b015581546000198082019390918411620001d3577f5ae7bf8c4c39be741ec8e27386e1453106504ca4b4351e28065a5ca97415d430838651868152a1600262000153856200030e565b50338852018352848620805460ff191682179055600362000174856200030e565b5001918254908114620001bf577fd81f2841f8b3997e1937995d307db36db75c385165bbad7916db26732d8ccb179495965001905583519283523392a251610e609081620003458239f35b634e487b7160e01b87526011600452602487fd5b634e487b7160e01b86526011600452602486fd5b015190503880620000f6565b838a52868a209190601f1984168b5b8982821062000243575050908487959493921062000229575b505050811b0181556200010a565b015160001960f88460031b161c191690553880806200021b565b8385015186558b9890950194938401930162000202565b9091928094508952858920601f840160051c810191878510620002a3575b90601f8996959493920160051c01905b818110620002975750620000dd565b8a815588950162000288565b909150819062000278565b634e487b7160e01b89526022600452602489fd5b90607f1690620000c5565b634e487b7160e01b88526041600452602488fd5b634e487b7160e01b87526041600452602487fd5b634e487b7160e01b85526041600452602485fd5b600080fd5b6001548110156200032e57600160005260206000209060021b0190600090565b634e487b7160e01b600052603260045260246000fdfe6040608081526004908136101561001557600080fd5b600090813560e01c806359f5a164146107915780635c97f4a214610769578063715018a61461070f578063790e118c146106f157806380fce6a5146105ad5780638da5cb5b14610586578063a02be7711461053c578063b6db75a014610517578063bfda4a49146103ec578063e65cd6e314610216578063f2fde38b146101535763f6169705146100a557600080fd5b3461014f57602036600319011261014f57823567ffffffffffffffff811161014b576100e36100da6020958493369101610a3f565b60015490610be7565b9260026100ef85610a96565b5033835201855220805460ff19166001179055600361010d83610a96565b50016101198154610bc2565b905580518281527fd81f2841f8b3997e1937995d307db36db75c385165bbad7916db26732d8ccb17843392a251908152f35b8280fd5b5080fd5b50823461014b57602036600319011261014b5761016e6109ec565b90610177610b20565b6001600160a01b039182169283156101c457505082546001600160a01b0319811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b50823461014b578160031936011261014b576102306109ec565b91602435916102426001548410610de8565b610259600161025085610a96565b50015433610dae565b156103aa576102688385610dae565b1561036857600161027884610a96565b500154831480610351575b61030f57600261029284610a96565b506001600160a01b039095168087529401602052818520805460ff1916905560036102bc84610a96565b50019081549081156102fc5750600019019055519081527f18dd68c3b9a992261fefcaa58c659f0a628d54692027be4c0662c2365fbb819a90602090a280f35b634e487b7160e01b875260119052602486fd5b6020606492519162461bcd60e51b8352820152601d60248201527f43616e6e6f742072656d6f7665206c61737420726f6c652061646d696e0000006044820152fd5b506001600361035f85610a96565b50015414610283565b6020606492519162461bcd60e51b8352820152601e60248201527f4163636f756e74206973206e6f7420626561726572206f6620726f6c652e00006044820152fd5b6020606492519162461bcd60e51b8352820152601a60248201527f557365722063616e27742072656d6f766520626561726572732e0000000000006044820152fd5b50823461014b5760209081600319360112610513573591600192835481101561050f5761041890610a96565b508151938486835461042981610ae6565b908184528785821691826000146104f15750506001146104b0575b506003929161045891989594980387610a07565b86015495015490805195869460608652865194856060880152805b868110610499575060808098508688010152850152830152601f80199101168101030190f35b8089018301518a8201608001528997508201610473565b9291505082875285858089209389945b8186106104d857509293919250908201016003610444565b80548a87018401529190940193889250879184016104c0565b60ff19168186015291151560051b8401909101915060039050610444565b8480fd5b8380fd5b503461014f578160031936011261014f57602090610533610b78565b90519015158152f35b50903461058357816003193601126105835782359067ffffffffffffffff8211610583575061057360209361057c92369101610a3f565b60243590610be7565b9051908152f35b80fd5b503461014f578160031936011261014f57905490516001600160a01b039091168152602090f35b50823461014b578160031936011261014b576105c76109ec565b91602435916105d96001548410610de8565b6105e7600161025085610a96565b156106af576105f68385610dae565b61066d575081602091600261062b7fd81f2841f8b3997e1937995d307db36db75c385165bbad7916db26732d8ccb1795610a96565b506001600160a01b0390961680885295018352808620805460ff19166001179055600361065783610a96565b50016106638154610bc2565b905551908152a280f35b6020606492519162461bcd60e51b8352820152601a60248201527f4163636f756e7420697320626561726572206f6620726f6c652e0000000000006044820152fd5b6020606492519162461bcd60e51b8352820152601760248201527f557365722063616e27742061646420626561726572732e0000000000000000006044820152fd5b503461014f578160031936011261014f576020906001549051908152f35b8234610583578060031936011261058357610728610b20565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461014f578060031936011261014f576020906105336107886109ec565b60243590610dae565b5090346105835781600319360112610583576107ab6109ec565b6001600160a01b03936024918235868116919082900361050f576107cd610b78565b156109aa578616908115610959578015610917578551638da5cb5b60e01b81526020979088818681875afa90811561090d579083929188916108cd575b50161461088057813b1561050f578492918484928851978893849263f2fde38b60e01b8452878401525af1801561087657610849575b85855160018152f35b67ffffffffffffffff841161086657505050815238808080610840565b634e487b7160e01b825260419052fd5b85513d84823e3d90fd5b608483858989519262461bcd60e51b8452830152808201527f4e6577206f776e65722073686f756c64206469666665722066726f6d206375726044820152631c995b9d60e21b6064820152fd5b809293508a8092503d8311610906575b6108e78183610a07565b8101031261090257518181168103610902579082913861080a565b8680fd5b503d6108dd565b88513d89823e3d90fd5b855162461bcd60e51b8152602081850152601f818601527f6e65774f776e65722063616e6e6f74206265207a65726f2061646472657373006044820152606490fd5b855162461bcd60e51b81526020818501526026818601527f54617267657420636f6e74726163742063616e6e6f74206265207a65726f206160448201526564647265737360d01b6064820152608490fd5b855162461bcd60e51b8152602081850152601d818601527f524241433a2063616c6c6572206973206e6f74207468652061646d696e0000006044820152606490fd5b600435906001600160a01b0382168203610a0257565b600080fd5b90601f8019910116810190811067ffffffffffffffff821117610a2957604052565b634e487b7160e01b600052604160045260246000fd5b81601f82011215610a025780359067ffffffffffffffff8211610a295760405192610a74601f8401601f191660200185610a07565b82845260208383010111610a0257816000926020809301838601378301015290565b600154811015610ad057600160005260021b7fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60190600090565b634e487b7160e01b600052603260045260246000fd5b90600182811c92168015610b16575b6020831014610b0057565b634e487b7160e01b600052602260045260246000fd5b91607f1691610af5565b6000546001600160a01b03163303610b3457565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b6001541580159081610b88575090565b9050610ad057336000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf860205260ff6040600020541690565b6000198114610bd15760010190565b634e487b7160e01b600052601160045260246000fd5b906001918254808311610d695768010000000000000000811015610a29578084610c1392018555610a96565b50815167ffffffffffffffff8111610a29578492610c318354610ae6565b601f8111610d14575b50602090601f8311600114610cae576000919083610ca3575b5050600019600383901b1c191690831b1781555b0155546000198101908111610bd1577f5ae7bf8c4c39be741ec8e27386e1453106504ca4b4351e28065a5ca97415d4306020604051838152a190565b015190503880610c53565b90601f1983169184600052816000209260005b818110610cfc57509084879594939210610ce3575b505050811b018155610c67565b015160001960f88460031b161c19169055388080610cd6565b82840151855589979094019360209384019301610cc1565b9091929350600084815260208120601f850160051c81019260208610610d5f575b90601f899796959493920160051c01915b828110610d54575050610c3a565b818155889601610d46565b9092508290610d35565b60405162461bcd60e51b815260206004820152601960248201527f41646d696e20726f6c6520646f65736e27742065786973742e000000000000006044820152606490fd5b60015482109182610dbe57505090565b60029250610dcb90610a96565b509060018060a01b03166000520160205260ff6040600020541690565b15610def57565b60405162461bcd60e51b81526020600482015260136024820152722937b632903237b2b9b713ba1032bc34b9ba1760691b6044820152606490fdfea26469706673582212200ab8bd1fb119b8a7deb8578430750053b223f5445478e06b76bba5edd0a1e9ec64736f6c63430008140033

Deployed Bytecode

0x6040608081526004908136101561001557600080fd5b600090813560e01c806359f5a164146107915780635c97f4a214610769578063715018a61461070f578063790e118c146106f157806380fce6a5146105ad5780638da5cb5b14610586578063a02be7711461053c578063b6db75a014610517578063bfda4a49146103ec578063e65cd6e314610216578063f2fde38b146101535763f6169705146100a557600080fd5b3461014f57602036600319011261014f57823567ffffffffffffffff811161014b576100e36100da6020958493369101610a3f565b60015490610be7565b9260026100ef85610a96565b5033835201855220805460ff19166001179055600361010d83610a96565b50016101198154610bc2565b905580518281527fd81f2841f8b3997e1937995d307db36db75c385165bbad7916db26732d8ccb17843392a251908152f35b8280fd5b5080fd5b50823461014b57602036600319011261014b5761016e6109ec565b90610177610b20565b6001600160a01b039182169283156101c457505082546001600160a01b0319811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b50823461014b578160031936011261014b576102306109ec565b91602435916102426001548410610de8565b610259600161025085610a96565b50015433610dae565b156103aa576102688385610dae565b1561036857600161027884610a96565b500154831480610351575b61030f57600261029284610a96565b506001600160a01b039095168087529401602052818520805460ff1916905560036102bc84610a96565b50019081549081156102fc5750600019019055519081527f18dd68c3b9a992261fefcaa58c659f0a628d54692027be4c0662c2365fbb819a90602090a280f35b634e487b7160e01b875260119052602486fd5b6020606492519162461bcd60e51b8352820152601d60248201527f43616e6e6f742072656d6f7665206c61737420726f6c652061646d696e0000006044820152fd5b506001600361035f85610a96565b50015414610283565b6020606492519162461bcd60e51b8352820152601e60248201527f4163636f756e74206973206e6f7420626561726572206f6620726f6c652e00006044820152fd5b6020606492519162461bcd60e51b8352820152601a60248201527f557365722063616e27742072656d6f766520626561726572732e0000000000006044820152fd5b50823461014b5760209081600319360112610513573591600192835481101561050f5761041890610a96565b508151938486835461042981610ae6565b908184528785821691826000146104f15750506001146104b0575b506003929161045891989594980387610a07565b86015495015490805195869460608652865194856060880152805b868110610499575060808098508688010152850152830152601f80199101168101030190f35b8089018301518a8201608001528997508201610473565b9291505082875285858089209389945b8186106104d857509293919250908201016003610444565b80548a87018401529190940193889250879184016104c0565b60ff19168186015291151560051b8401909101915060039050610444565b8480fd5b8380fd5b503461014f578160031936011261014f57602090610533610b78565b90519015158152f35b50903461058357816003193601126105835782359067ffffffffffffffff8211610583575061057360209361057c92369101610a3f565b60243590610be7565b9051908152f35b80fd5b503461014f578160031936011261014f57905490516001600160a01b039091168152602090f35b50823461014b578160031936011261014b576105c76109ec565b91602435916105d96001548410610de8565b6105e7600161025085610a96565b156106af576105f68385610dae565b61066d575081602091600261062b7fd81f2841f8b3997e1937995d307db36db75c385165bbad7916db26732d8ccb1795610a96565b506001600160a01b0390961680885295018352808620805460ff19166001179055600361065783610a96565b50016106638154610bc2565b905551908152a280f35b6020606492519162461bcd60e51b8352820152601a60248201527f4163636f756e7420697320626561726572206f6620726f6c652e0000000000006044820152fd5b6020606492519162461bcd60e51b8352820152601760248201527f557365722063616e27742061646420626561726572732e0000000000000000006044820152fd5b503461014f578160031936011261014f576020906001549051908152f35b8234610583578060031936011261058357610728610b20565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461014f578060031936011261014f576020906105336107886109ec565b60243590610dae565b5090346105835781600319360112610583576107ab6109ec565b6001600160a01b03936024918235868116919082900361050f576107cd610b78565b156109aa578616908115610959578015610917578551638da5cb5b60e01b81526020979088818681875afa90811561090d579083929188916108cd575b50161461088057813b1561050f578492918484928851978893849263f2fde38b60e01b8452878401525af1801561087657610849575b85855160018152f35b67ffffffffffffffff841161086657505050815238808080610840565b634e487b7160e01b825260419052fd5b85513d84823e3d90fd5b608483858989519262461bcd60e51b8452830152808201527f4e6577206f776e65722073686f756c64206469666665722066726f6d206375726044820152631c995b9d60e21b6064820152fd5b809293508a8092503d8311610906575b6108e78183610a07565b8101031261090257518181168103610902579082913861080a565b8680fd5b503d6108dd565b88513d89823e3d90fd5b855162461bcd60e51b8152602081850152601f818601527f6e65774f776e65722063616e6e6f74206265207a65726f2061646472657373006044820152606490fd5b855162461bcd60e51b81526020818501526026818601527f54617267657420636f6e74726163742063616e6e6f74206265207a65726f206160448201526564647265737360d01b6064820152608490fd5b855162461bcd60e51b8152602081850152601d818601527f524241433a2063616c6c6572206973206e6f74207468652061646d696e0000006044820152606490fd5b600435906001600160a01b0382168203610a0257565b600080fd5b90601f8019910116810190811067ffffffffffffffff821117610a2957604052565b634e487b7160e01b600052604160045260246000fd5b81601f82011215610a025780359067ffffffffffffffff8211610a295760405192610a74601f8401601f191660200185610a07565b82845260208383010111610a0257816000926020809301838601378301015290565b600154811015610ad057600160005260021b7fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60190600090565b634e487b7160e01b600052603260045260246000fd5b90600182811c92168015610b16575b6020831014610b0057565b634e487b7160e01b600052602260045260246000fd5b91607f1691610af5565b6000546001600160a01b03163303610b3457565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b6001541580159081610b88575090565b9050610ad057336000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf860205260ff6040600020541690565b6000198114610bd15760010190565b634e487b7160e01b600052601160045260246000fd5b906001918254808311610d695768010000000000000000811015610a29578084610c1392018555610a96565b50815167ffffffffffffffff8111610a29578492610c318354610ae6565b601f8111610d14575b50602090601f8311600114610cae576000919083610ca3575b5050600019600383901b1c191690831b1781555b0155546000198101908111610bd1577f5ae7bf8c4c39be741ec8e27386e1453106504ca4b4351e28065a5ca97415d4306020604051838152a190565b015190503880610c53565b90601f1983169184600052816000209260005b818110610cfc57509084879594939210610ce3575b505050811b018155610c67565b015160001960f88460031b161c19169055388080610cd6565b82840151855589979094019360209384019301610cc1565b9091929350600084815260208120601f850160051c81019260208610610d5f575b90601f899796959493920160051c01915b828110610d54575050610c3a565b818155889601610d46565b9092508290610d35565b60405162461bcd60e51b815260206004820152601960248201527f41646d696e20726f6c6520646f65736e27742065786973742e000000000000006044820152606490fd5b60015482109182610dbe57505090565b60029250610dcb90610a96565b509060018060a01b03166000520160205260ff6040600020541690565b15610def57565b60405162461bcd60e51b81526020600482015260136024820152722937b632903237b2b9b713ba1032bc34b9ba1760691b6044820152606490fdfea26469706673582212200ab8bd1fb119b8a7deb8578430750053b223f5445478e06b76bba5edd0a1e9ec64736f6c63430008140033

Deployed Bytecode Sourcemap

369:4653:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;369:4653:3;;;;;;;;;;;2318:38;369:4653;;;;;;;;;:::i;:::-;2343:5;369:4653;2318:38;;:::i;:::-;2362:11;:19;:11;;;:::i;:::-;-1:-1:-1;2382:10:3;369:4653;;2362:19;369:4653;;;;;-1:-1:-1;;369:4653:3;2343:5;369:4653;;;;2406:11;;;:::i;:::-;:24;;:26;369:4653;;2406:26;:::i;:::-;369:4653;;;;;;;2443:29;2382:10;;2443:29;;369:4653;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;369:4653:3;;;;;;:::i;:::-;1063:62:0;;;:::i;:::-;-1:-1:-1;;;;;369:4653:3;;;;2162:22:0;;369:4653:3;;-1:-1:-1;;369:4653:3;;-1:-1:-1;;;;;;369:4653:3;;;;;;;2566:40:0;369:4653:3;;2566:40:0;369:4653:3;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;369:4653:3;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;4519:69;369:4653;;4534:19;;4519:69;:::i;:::-;4609:38;369:4653;4629:11;;;:::i;:::-;:17;;369:4653;4617:10;4609:38;:::i;:::-;369:4653;;;4710:22;;;;:::i;:::-;369:4653;;;;4797:11;;;:::i;:::-;:17;;369:4653;4789:25;;:58;;;369:4653;4784:119;;4916:19;:11;;;:::i;:::-;-1:-1:-1;;;;;;369:4653:3;;;;;;4916:19;;369:4653;;;;;;;-1:-1:-1;;369:4653:3;;;;4950:11;;;:::i;:::-;:24;;369:4653;;;;;;;;-1:-1:-1;;;369:4653:3;;;;;;;4987:28;;369:4653;;4987:28;369:4653;;;-1:-1:-1;;;369:4653:3;;;;;;;;4784:119;369:4653;;;;;;;;4857:39;;;;369:4653;;;;;;;;;;;4857:39;4789:58;4818:11;369:4653;;4818:11;;;:::i;:::-;:24;;369:4653;4818:29;4789:58;;369:4653;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1856:19;;;;;;;;:::i;:::-;369:4653;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1856:19;;369:4653;1856:19;;369:4653;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;369:4653:3;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;369:4653:3;;;;-1:-1:-1;369:4653:3;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;369:4653:3;;;;;;;-1:-1:-1;;369:4653:3;;;;;;;;;;;;;;;;-1:-1:-1;369:4653:3;;-1:-1:-1;369:4653:3;;1856:19;;;;369:4653;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;369:4653:3;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;3892:69;369:4653;;3907:19;;3892:69;:::i;:::-;3982:38;369:4653;4002:11;;;:::i;3982:38::-;369:4653;;;4081:22;;;;:::i;:::-;369:4653;;4151:11;;369:4653;4151:11;:19;:11;4229:26;4151:11;;:::i;:::-;-1:-1:-1;;;;;;369:4653:3;;;;;;4151:19;;369:4653;;;;;;;-1:-1:-1;;369:4653:3;;;;;;4192:11;;;:::i;:::-;:24;;:26;369:4653;;4192:26;:::i;:::-;369:4653;;;;;;4229:26;369:4653;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3249:5;369:4653;;;;;;;;;;;;;;;;;;;;1063:62:0;;:::i;:::-;369:4653:3;;-1:-1:-1;;;;;;369:4653:3;;;;;;-1:-1:-1;;;;;369:4653:3;2566:40:0;369:4653:3;;2566:40:0;369:4653:3;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;369:4653:3;;;;;;;;;;;;;;;521:9;;:::i;:::-;369:4653;;;;;863:28;;;369:4653;;948:22;;369:4653;;;;-1:-1:-1;;;1062:9:3;;369:4653;;;;;1062:9;369:4653;1062:9;;;;;;;;;;;;;;;;369:4653;;;1062:19;369:4653;;1128:29;;;;;369:4653;;;;;;;;;;;;;;;;1128:29;;;;;369:4653;1128:29;;;;;;;;369:4653;;;;;;;;1128:29;369:4653;;;;;;;;;;1128:29;;;;;;369:4653;-1:-1:-1;;;369:4653:3;;;;;;1128:29;369:4653;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;369:4653:3;;;;;1062:9;;;;;;;;;;;;;;;;;;;:::i;:::-;;;369:4653;;;;;;;;;;;;1062:9;;;;;;369:4653;;;;1062:9;;;;;;369:4653;;;;;;;;;;;;-1:-1:-1;;;369:4653:3;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;369:4653:3;;;;;;;;;;;;;;;;;-1:-1:-1;;;369:4653:3;;;;;;;;;;-1:-1:-1;;;369:4653:3;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;369:4653:3;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;369:4653:3;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;369:4653:3;;;;;;;;;;;;;;:::o;:::-;3914:5;369:4653;;;;;;3914:5;-1:-1:-1;369:4653:3;;;;;;-1:-1:-1;369:4653:3;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;1359:130:0;1273:6;369:4653:3;-1:-1:-1;;;;;369:4653:3;734:10:1;1422:23:0;369:4653:3;;1359:130:0:o;369:4653:3:-;;;;;;;;;;;;;;;;;;;;;;;;;647:86;3600:5;369:4653;3593:19;;;:51;;;;699:29;647:86;:::o;3593:51::-;369:4653;;;;714:10;-1:-1:-1;369:4653:3;3616:19;369:4653;;;;-1:-1:-1;369:4653:3;;;647:86;:::o;369:4653::-;-1:-1:-1;;369:4653:3;;;;;;;:::o;:::-;;;;;;;;;;;;2735:351;;2864:5;369:4653;;;2855:21;;;369:4653;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;2735:351;369:4653;;;;;;;;;;-1:-1:-1;;369:4653:3;;;;;-1:-1:-1;;;;369:4653:3;;;;;;;;;;;;;;2984:7;369:4653;;-1:-1:-1;;369:4653:3;;;;;;;3047:17;369:4653;;;;;;3047:17;2735:351;:::o;369:4653::-;;;;-1:-1:-1;369:4653:3;;;;;;;;;;;;-1:-1:-1;369:4653:3;;-1:-1:-1;369:4653:3;;-1:-1:-1;369:4653:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;369:4653:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;369:4653:3;;;;;;;-1:-1:-1;;;369:4653:3;;;;;;;;;;;;;;;;;;;;3483:166;3600:5;369:4653;3593:19;;:51;;;;3586:58;;3483:166;:::o;3593:51::-;3616:19;:11;;;;;:::i;:::-;369:4653;;;;;;;;-1:-1:-1;369:4653:3;3616:19;369:4653;;;;-1:-1:-1;369:4653:3;;;3483:166;:::o;369:4653::-;;;;:::o;:::-;;;-1:-1:-1;;;369:4653:3;;;;;;;;;;;;-1:-1:-1;;;369:4653:3;;;;;;

Swarm Source

ipfs://0ab8bd1fb119b8a7deb8578430750053b223f5445478e06b76bba5edd0a1e9ec

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.