ETH Price: $2,430.69 (-9.58%)

Contract

0xc20DE37170B45774e6CD3d2304017fc962f27252
Transaction Hash
Block
From
To
Set Current Rewa...1761784822024-01-31 21:28:22731 days ago1706736502IN
Livepeer: Minter
0 ETH0.000030270.1
Migrate To New M...1761782662024-01-31 21:27:31731 days ago1706736451IN
Livepeer: Minter
0 ETH0.000038970.1

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
4273738962026-02-01 4:04:191 hr ago1769918659
Livepeer: Minter
0.00000106 ETH
4273437792026-02-01 1:58:574 hrs ago1769911137
Livepeer: Minter
0.00023852 ETH
4273197262026-02-01 0:18:525 hrs ago1769905132
Livepeer: Minter
0.05334786 ETH
4272420822026-01-31 18:56:3311 hrs ago1769885793
Livepeer: Minter
0.09290506 ETH
4272379702026-01-31 18:39:2511 hrs ago1769884765
Livepeer: Minter
0.01007471 ETH
4272163882026-01-31 17:10:2812 hrs ago1769879428
Livepeer: Minter
0.00549268 ETH
4272109762026-01-31 16:48:0913 hrs ago1769878089
Livepeer: Minter
0.3 ETH
4272109502026-01-31 16:48:0213 hrs ago1769878082
Livepeer: Minter
0.3 ETH
4272035292026-01-31 16:17:2313 hrs ago1769876243
Livepeer: Minter
0.00648 ETH
4271959242026-01-31 15:45:5314 hrs ago1769874353
Livepeer: Minter
0.06022392 ETH
4271810342026-01-31 14:44:3315 hrs ago1769870673
Livepeer: Minter
0.00383242 ETH
4271496712026-01-31 12:34:2717 hrs ago1769862867
Livepeer: Minter
0.00240552 ETH
4271496002026-01-31 12:34:0917 hrs ago1769862849
Livepeer: Minter
0.01525766 ETH
4271495772026-01-31 12:34:0317 hrs ago1769862843
Livepeer: Minter
0.02395072 ETH
4271495602026-01-31 12:33:5917 hrs ago1769862839
Livepeer: Minter
0.00674805 ETH
4271495442026-01-31 12:33:5517 hrs ago1769862835
Livepeer: Minter
0.51465912 ETH
4271275392026-01-31 11:02:2818 hrs ago1769857348
Livepeer: Minter
0.00849222 ETH
4270309222026-01-31 4:20:5325 hrs ago1769833253
Livepeer: Minter
0.00000087 ETH
4269501342026-01-30 22:45:1031 hrs ago1769813110
Livepeer: Minter
0.00231511 ETH
4269410922026-01-30 22:07:3731 hrs ago1769810857
Livepeer: Minter
0.02 ETH
4269225742026-01-30 20:50:4833 hrs ago1769806248
Livepeer: Minter
0.0335419 ETH
4269191392026-01-30 20:36:3533 hrs ago1769805395
Livepeer: Minter
0.00216001 ETH
4269065922026-01-30 19:44:3434 hrs ago1769802274
Livepeer: Minter
0.324 ETH
4269065712026-01-30 19:44:2934 hrs ago1769802269
Livepeer: Minter
0.324 ETH
4269058452026-01-30 19:41:2934 hrs ago1769802089
Livepeer: Minter
0.03785866 ETH
View All Internal Transactions

Latest 25 Deposits

L2 Txn Hash L1 Deposit Txn Value Token
0x3b3cb80a501e966b5edfccff88abe5e60b4662a7f84da20aa1cc6a1fb01b80cc2022-12-16 19:33:351142 days ago16712192154,172.586852618975968944 Livepeer Tok... (LPT)
0x0610ab4da3061bdf52b1be31fc7ddcbfd8a1712420ae43dd4c07e5c1a9d51c382022-08-30 21:07:421250 days ago16618936622.681001020699655154 Livepeer Tok... (LPT)
0x0610ab4da3061bdf52b1be31fc7ddcbfd8a1712420ae43dd4c07e5c1a9d51c382022-08-30 21:07:421250 days ago1661893662538.88289199631054942 Livepeer Tok... (LPT)
0x5700433b98b03904712aa50ef7f9d8af87f132c25ce1d31337e67fcefcdb92292022-06-15 17:37:001326 days ago16553146200.000000000000000001 Livepeer Tok... (LPT)
0x5700433b98b03904712aa50ef7f9d8af87f132c25ce1d31337e67fcefcdb92292022-06-15 17:37:001326 days ago165531462012.393886249692969334 Livepeer Tok... (LPT)
0x0939413709f0147edb4e6a6a79f2dba1b2c491e066c9b611a14ced04bd154bc92022-05-25 1:21:231348 days ago165344168355,000 Livepeer Tok... (LPT)
0x85998aaaad482865aca82b9c3ebce770db4676494c4f536e94d03d38f91653a22022-05-19 17:45:341353 days ago165298233455,000 Livepeer Tok... (LPT)
0xec8c2c30fce1e0aee3253701dfa7894678fb268e24f59a27d69532c866d1a6892022-05-13 4:19:181360 days ago16524155580.000000000000000001 Livepeer Tok... (LPT)
0xec8c2c30fce1e0aee3253701dfa7894678fb268e24f59a27d69532c866d1a6892022-05-13 4:19:181360 days ago165241555830.013236921742483554 Livepeer Tok... (LPT)
0xee2acc427478eae23634a6dbc6226b06a75de524296e99268d4db1004c0159722022-05-09 17:18:531363 days ago165211673355,000 Livepeer Tok... (LPT)
0xa88eb0df857a1e7ba41d541c4f73c4f104e3916088641f3a319821de13dd1d1b2022-05-08 22:47:391364 days ago165205005911.56 Livepeer Tok... (LPT)
0x6a3e3485b9876c7da56a0f97f3ed7fa3253740425398eac9972a7ad536ba7a4e2022-05-08 3:47:551365 days ago1651981675291 Livepeer Tok... (LPT)
0xd63cf4009f51350dcfd28bb8ed4ba82d9ef939ff794ee0b09270a5a2c4b52d5b2022-05-05 9:32:251367 days ago16517431450.000000000000000001 Livepeer Tok... (LPT)
0xd63cf4009f51350dcfd28bb8ed4ba82d9ef939ff794ee0b09270a5a2c4b52d5b2022-05-05 9:32:251367 days ago165174314524.227869737495557834 Livepeer Tok... (LPT)
0xcf69a712d11a72aef4d75f835a89c4209863d87c4b460c6ef4ffa4c99db6a8d92022-05-04 21:59:361368 days ago165170157624.20610000000000003 Livepeer Tok... (LPT)
0x3ddce96bf6542d5be775018a77cd6784f72d52d52119fcd7bb82cac25b3069232022-04-27 5:30:281376 days ago165103742819.5159 Livepeer Tok... (LPT)
0xf3164887a4f82fe5531bc06f48c80842c8563568b18b068b9ee10f4964d868142022-04-26 22:25:311376 days ago1651011931125.675114342324796425 Livepeer Tok... (LPT)
0x7ed92358781386aaf9e0011e9940a12ffc59de331213f532ba2931a175834fb22022-04-24 18:07:281378 days ago1650823648354.630406790857985593 Livepeer Tok... (LPT)
0x8ae86fd878f249205bd0726196dc92e20513ce6c1e3d1cecbb08afcf1a5b05c62022-04-22 5:47:211381 days ago1650606441140 Livepeer Tok... (LPT)
0x87316196305e535824cc7c948b5048a4af0f6d918bc32dd2ef122557756440402022-04-15 5:20:551388 days ago16500000550.000000000000000003 Livepeer Tok... (LPT)
0x87316196305e535824cc7c948b5048a4af0f6d918bc32dd2ef122557756440402022-04-15 5:20:551388 days ago165000005534.656882785114295576 Livepeer Tok... (LPT)
0xf266290e63f4ac48bffb27b4fda34edb87e3248195f5d5179e31bd7a718b6fa82022-04-10 21:19:511392 days ago164962559145 Livepeer Tok... (LPT)
0x20db0e1d3792dd061bb31fff6c61ccaa21fb3443a097254dd3d67f789918a7822022-04-07 15:58:151395 days ago16493470950.000000000000000001 Livepeer Tok... (LPT)
0x20db0e1d3792dd061bb31fff6c61ccaa21fb3443a097254dd3d67f789918a7822022-04-07 15:58:151395 days ago164934709513.352375225204029933 Livepeer Tok... (LPT)
0x984bacdbad28b11cd0060055633c4831ca6084ddab4820e28e170cf19d92d0762022-04-07 1:13:191396 days ago1649293999522.7014545471733 Livepeer Tok... (LPT)
View All Deposits

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Minter

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import "../Manager.sol";
import "./IMinter.sol";
import "./ILivepeerToken.sol";
import "../rounds/IRoundsManager.sol";
import "../bonding/IBondingManager.sol";
import "../libraries/MathUtilsV2.sol";

import "@openzeppelin/contracts/utils/math/SafeMath.sol";

interface IL2LPTDataCache {
    function l1CirculatingSupply() external view returns (uint256);
}

/**
 * @title Minter
 * @dev Manages inflation rate and the minting of new tokens for each round of the Livepeer protocol
 */
contract Minter is Manager, IMinter {
    using SafeMath for uint256;

    // Per round inflation rate
    uint256 public inflation;
    // Change in inflation rate per round until the target bonding rate is achieved
    uint256 public inflationChange;
    // Target bonding rate
    uint256 public targetBondingRate;

    // Current number of mintable tokens. Reset every round
    uint256 public currentMintableTokens;
    // Current number of minted tokens. Reset every round
    uint256 public currentMintedTokens;

    // Checks if caller is BondingManager
    modifier onlyBondingManager() {
        require(msg.sender == controller.getContract(keccak256("BondingManager")), "msg.sender not BondingManager");
        _;
    }

    // Checks if caller is RoundsManager
    modifier onlyRoundsManager() {
        require(msg.sender == controller.getContract(keccak256("RoundsManager")), "msg.sender not RoundsManager");
        _;
    }

    // Checks if caller is either BondingManager or JobsManager
    modifier onlyBondingManagerOrJobsManager() {
        require(
            msg.sender == controller.getContract(keccak256("BondingManager")) ||
                msg.sender == controller.getContract(keccak256("JobsManager")),
            "msg.sender not BondingManager or JobsManager"
        );
        _;
    }

    // Checks if caller is either the currently registered Minter or JobsManager
    modifier onlyMinterOrJobsManager() {
        require(
            msg.sender == controller.getContract(keccak256("Minter")) ||
                msg.sender == controller.getContract(keccak256("JobsManager")),
            "msg.sender not Minter or JobsManager"
        );
        _;
    }

    /**
     * @notice Minter constructor
     * @param _inflation Base inflation rate as a percentage of current total token supply
     * @param _inflationChange Change in inflation rate each round (increase or decrease) if target bonding rate is not achieved
     * @param _targetBondingRate Target bonding rate as a percentage of total bonded tokens / total token supply
     */
    constructor(
        address _controller,
        uint256 _inflation,
        uint256 _inflationChange,
        uint256 _targetBondingRate
    ) Manager(_controller) {
        // Inflation must be valid percentage
        require(MathUtils.validPerc(_inflation), "_inflation is invalid percentage");
        // Inflation change must be valid percentage
        require(MathUtils.validPerc(_inflationChange), "_inflationChange is invalid percentage");
        // Target bonding rate must be valid percentage
        require(MathUtils.validPerc(_targetBondingRate), "_targetBondingRate is invalid percentage");

        inflation = _inflation;
        inflationChange = _inflationChange;
        targetBondingRate = _targetBondingRate;
    }

    /**
     * @notice Set targetBondingRate. Only callable by Controller owner
     * @param _targetBondingRate Target bonding rate as a percentage of total bonded tokens / total token supply
     */
    function setTargetBondingRate(uint256 _targetBondingRate) external onlyControllerOwner {
        // Must be valid percentage
        require(MathUtils.validPerc(_targetBondingRate), "_targetBondingRate is invalid percentage");

        targetBondingRate = _targetBondingRate;

        emit ParameterUpdate("targetBondingRate");
    }

    /**
     * @notice Set inflationChange. Only callable by Controller owner
     * @param _inflationChange Inflation change as a percentage of total token supply
     */
    function setInflationChange(uint256 _inflationChange) external onlyControllerOwner {
        // Must be valid percentage
        require(MathUtils.validPerc(_inflationChange), "_inflationChange is invalid percentage");

        inflationChange = _inflationChange;

        emit ParameterUpdate("inflationChange");
    }

    /**
     * @notice Migrate to a new Minter by transferring the current Minter's LPT + ETH balance to the new Minter
     * @dev Only callable by Controller owner
     * @param _newMinter Address of new Minter
     */
    function migrateToNewMinter(IMinter _newMinter) external onlyControllerOwner {
        // New Minter cannot be the current Minter
        require(_newMinter != this, "new Minter cannot be current Minter");
        // Check for null address
        require(address(_newMinter) != address(0), "new Minter cannot be null address");

        IController newMinterController = _newMinter.getController();
        // New Minter must have same Controller as current Minter
        require(newMinterController == controller, "new Minter Controller must be current Controller");
        // New Minter's Controller must have the current Minter registered
        require(newMinterController.getContract(keccak256("Minter")) == address(this), "new Minter must be registered");

        // Transfer current Minter's token balance to new Minter
        livepeerToken().transfer(address(_newMinter), livepeerToken().balanceOf(address(this)));
        // Transfer current Minter's ETH balance to new Minter
        _newMinter.depositETH{ value: address(this).balance }();
    }

    /**
     * @notice Create reward based on a fractional portion of the mintable tokens for the current round
     * @param _fracNum Numerator of fraction (active transcoder's stake)
     * @param _fracDenom Denominator of fraction (total active stake)
     */
    function createReward(uint256 _fracNum, uint256 _fracDenom)
        external
        onlyBondingManager
        whenSystemNotPaused
        returns (uint256)
    {
        // Compute and mint fraction of mintable tokens to include in reward
        uint256 mintAmount = MathUtils.percOf(currentMintableTokens, _fracNum, _fracDenom);
        // Update amount of minted tokens for round
        currentMintedTokens = currentMintedTokens.add(mintAmount);
        // Minted tokens must not exceed mintable tokens
        require(currentMintedTokens <= currentMintableTokens, "minted tokens cannot exceed mintable tokens");
        // Mint new tokens
        livepeerToken().mint(address(this), mintAmount);

        // Reward = minted tokens
        return mintAmount;
    }

    /**
     * @notice Transfer tokens to a receipient. Only callable by BondingManager - always trusts BondingManager
     * @param _to Recipient address
     * @param _amount Amount of tokens
     */
    function trustedTransferTokens(address _to, uint256 _amount) external onlyBondingManager whenSystemNotPaused {
        livepeerToken().transfer(_to, _amount);
    }

    /**
     * @notice Burn tokens. Only callable by BondingManager - always trusts BondingManager
     * @param _amount Amount of tokens to burn
     */
    function trustedBurnTokens(uint256 _amount) external onlyBondingManager whenSystemNotPaused {
        livepeerToken().burn(_amount);
    }

    /**
     * @notice Withdraw ETH to a recipient. Only callable by BondingManager or TicketBroker - always trusts these two contracts
     * @param _to Recipient address
     * @param _amount Amount of ETH
     */
    function trustedWithdrawETH(address payable _to, uint256 _amount)
        external
        onlyBondingManagerOrJobsManager
        whenSystemNotPaused
    {
        _to.transfer(_amount);
    }

    /**
     * @notice Deposit ETH to this contract. Only callable by the currently registered Minter or JobsManager
     */
    function depositETH() external payable onlyMinterOrJobsManager returns (bool) {
        return true;
    }

    /**
     * @notice Set inflation and mintable tokens for the round. Only callable by the RoundsManager
     */
    function setCurrentRewardTokens() external onlyRoundsManager whenSystemNotPaused {
        setInflation();

        // Set mintable tokens based upon current inflation and current total token supply
        currentMintableTokens = MathUtils.percOf(getGlobalTotalSupply(), inflation);
        currentMintedTokens = 0;

        emit SetCurrentRewardTokens(currentMintableTokens, inflation);
    }

    /**
     * @dev Returns Controller interface
     */
    function getController() public view returns (IController) {
        return controller;
    }

    /**
     * @notice Calculate and return global LPT total supply
     * @return Global LPT total supply
     */
    function getGlobalTotalSupply() public view returns (uint256) {
        // Global total supply = L2 total supply + L1 circulating supply
        return livepeerToken().totalSupply().add(l2LPTDataCache().l1CirculatingSupply());
    }

    /**
     * @dev Set inflation based upon the current bonding rate and target bonding rate
     */
    function setInflation() internal {
        uint256 currentBondingRate;
        uint256 totalSupply = getGlobalTotalSupply();

        if (totalSupply > 0) {
            uint256 totalBonded = bondingManager().getTotalBonded();
            currentBondingRate = MathUtils.percPoints(totalBonded, totalSupply);
        }

        if (currentBondingRate < targetBondingRate) {
            // Bonding rate is below the target - increase inflation
            inflation = inflation.add(inflationChange);
        } else if (currentBondingRate > targetBondingRate) {
            // Bonding rate is above the target - decrease inflation
            if (inflationChange > inflation) {
                inflation = 0;
            } else {
                inflation = inflation.sub(inflationChange);
            }
        }
    }

    /**
     * @dev Returns LivepeerToken interface
     */
    function livepeerToken() internal view returns (ILivepeerToken) {
        return ILivepeerToken(controller.getContract(keccak256("LivepeerToken")));
    }

    /**
     * @dev Returns BondingManager interface
     */
    function bondingManager() internal view returns (IBondingManager) {
        return IBondingManager(controller.getContract(keccak256("BondingManager")));
    }

    /**
     * @dev Returns L2LPTDataCache interface
     */
    function l2LPTDataCache() internal view returns (IL2LPTDataCache) {
        return IL2LPTDataCache(controller.getContract(keccak256("L2LPTDataCache")));
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import "./zeppelin/Pausable.sol";

abstract contract IController is Pausable {
    event SetContractInfo(bytes32 id, address contractAddress, bytes20 gitCommitHash);

    function setContractInfo(
        bytes32 _id,
        address _contractAddress,
        bytes20 _gitCommitHash
    ) external virtual;

    function updateController(bytes32 _id, address _controller) external virtual;

    function getContract(bytes32 _id) public view virtual returns (address);
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

interface IManager {
    event SetController(address controller);
    event ParameterUpdate(string param);

    function setController(address _controller) external;
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import "./IManager.sol";
import "./IController.sol";

contract Manager is IManager {
    // Controller that contract is registered with
    IController public controller;

    // Check if sender is controller
    modifier onlyController() {
        _onlyController();
        _;
    }

    // Check if sender is controller owner
    modifier onlyControllerOwner() {
        _onlyControllerOwner();
        _;
    }

    // Check if controller is not paused
    modifier whenSystemNotPaused() {
        _whenSystemNotPaused();
        _;
    }

    // Check if controller is paused
    modifier whenSystemPaused() {
        _whenSystemPaused();
        _;
    }

    constructor(address _controller) {
        controller = IController(_controller);
    }

    /**
     * @notice Set controller. Only callable by current controller
     * @param _controller Controller contract address
     */
    function setController(address _controller) external onlyController {
        controller = IController(_controller);

        emit SetController(_controller);
    }

    function _onlyController() private view {
        require(msg.sender == address(controller), "caller must be Controller");
    }

    function _onlyControllerOwner() private view {
        require(msg.sender == controller.owner(), "caller must be Controller owner");
    }

    function _whenSystemNotPaused() private view {
        require(!controller.paused(), "system is paused");
    }

    function _whenSystemPaused() private view {
        require(controller.paused(), "system is not paused");
    }
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

/**
 * @title Interface for BondingManager
 * TODO: switch to interface type
 */
interface IBondingManager {
    event TranscoderUpdate(address indexed transcoder, uint256 rewardCut, uint256 feeShare);
    event TranscoderActivated(address indexed transcoder, uint256 activationRound);
    event TranscoderDeactivated(address indexed transcoder, uint256 deactivationRound);
    event TranscoderSlashed(address indexed transcoder, address finder, uint256 penalty, uint256 finderReward);
    event Reward(address indexed transcoder, uint256 amount);
    event Bond(
        address indexed newDelegate,
        address indexed oldDelegate,
        address indexed delegator,
        uint256 additionalAmount,
        uint256 bondedAmount
    );
    event Unbond(
        address indexed delegate,
        address indexed delegator,
        uint256 unbondingLockId,
        uint256 amount,
        uint256 withdrawRound
    );
    event Rebond(address indexed delegate, address indexed delegator, uint256 unbondingLockId, uint256 amount);
    event TransferBond(
        address indexed oldDelegator,
        address indexed newDelegator,
        uint256 oldUnbondingLockId,
        uint256 newUnbondingLockId,
        uint256 amount
    );
    event WithdrawStake(address indexed delegator, uint256 unbondingLockId, uint256 amount, uint256 withdrawRound);
    event WithdrawFees(address indexed delegator, address recipient, uint256 amount);
    event EarningsClaimed(
        address indexed delegate,
        address indexed delegator,
        uint256 rewards,
        uint256 fees,
        uint256 startRound,
        uint256 endRound
    );

    // Deprecated events
    // These event signatures can be used to construct the appropriate topic hashes to filter for past logs corresponding
    // to these deprecated events.
    // event Bond(address indexed delegate, address indexed delegator);
    // event Unbond(address indexed delegate, address indexed delegator);
    // event WithdrawStake(address indexed delegator);
    // event TranscoderUpdate(address indexed transcoder, uint256 pendingRewardCut, uint256 pendingFeeShare, uint256 pendingPricePerSegment, bool registered);
    // event TranscoderEvicted(address indexed transcoder);
    // event TranscoderResigned(address indexed transcoder);

    // External functions
    function updateTranscoderWithFees(
        address _transcoder,
        uint256 _fees,
        uint256 _round
    ) external;

    function slashTranscoder(
        address _transcoder,
        address _finder,
        uint256 _slashAmount,
        uint256 _finderFee
    ) external;

    function setCurrentRoundTotalActiveStake() external;

    // Public functions
    function getTranscoderPoolSize() external view returns (uint256);

    function transcoderTotalStake(address _transcoder) external view returns (uint256);

    function isActiveTranscoder(address _transcoder) external view returns (bool);

    function getTotalBonded() external view returns (uint256);
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import "@openzeppelin/contracts/utils/math/SafeMath.sol";

library MathUtils {
    using SafeMath for uint256;

    // Divisor used for representing percentages
    uint256 public constant PERC_DIVISOR = 1000000000;

    /**
     * @dev Returns whether an amount is a valid percentage out of PERC_DIVISOR
     * @param _amount Amount that is supposed to be a percentage
     */
    function validPerc(uint256 _amount) internal pure returns (bool) {
        return _amount <= PERC_DIVISOR;
    }

    /**
     * @dev Compute percentage of a value with the percentage represented by a fraction
     * @param _amount Amount to take the percentage of
     * @param _fracNum Numerator of fraction representing the percentage
     * @param _fracDenom Denominator of fraction representing the percentage
     */
    function percOf(
        uint256 _amount,
        uint256 _fracNum,
        uint256 _fracDenom
    ) internal pure returns (uint256) {
        return _amount.mul(percPoints(_fracNum, _fracDenom)).div(PERC_DIVISOR);
    }

    /**
     * @dev Compute percentage of a value with the percentage represented by a fraction over PERC_DIVISOR
     * @param _amount Amount to take the percentage of
     * @param _fracNum Numerator of fraction representing the percentage with PERC_DIVISOR as the denominator
     */
    function percOf(uint256 _amount, uint256 _fracNum) internal pure returns (uint256) {
        return _amount.mul(_fracNum).div(PERC_DIVISOR);
    }

    /**
     * @dev Compute percentage representation of a fraction
     * @param _fracNum Numerator of fraction represeting the percentage
     * @param _fracDenom Denominator of fraction represeting the percentage
     */
    function percPoints(uint256 _fracNum, uint256 _fracDenom) internal pure returns (uint256) {
        return _fracNum.mul(PERC_DIVISOR).div(_fracDenom);
    }
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

/**
 * @title RoundsManager interface
 */
interface IRoundsManager {
    // Events
    event NewRound(uint256 indexed round, bytes32 blockHash);

    // Deprecated events
    // These event signatures can be used to construct the appropriate topic hashes to filter for past logs corresponding
    // to these deprecated events.
    // event NewRound(uint256 round)

    // External functions
    function initializeRound() external;

    function lipUpgradeRound(uint256 _lip) external view returns (uint256);

    // Public functions
    function blockNum() external view returns (uint256);

    function blockHash(uint256 _block) external view returns (bytes32);

    function blockHashForRound(uint256 _round) external view returns (bytes32);

    function currentRound() external view returns (uint256);

    function currentRoundStartBlock() external view returns (uint256);

    function currentRoundInitialized() external view returns (bool);

    function currentRoundLocked() external view returns (bool);
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

interface ILivepeerToken is IERC20 {
    function mint(address _to, uint256 _amount) external;

    function burn(uint256 _amount) external;
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import "../IController.sol";

/**
 * @title Minter interface
 */
interface IMinter {
    // Events
    event SetCurrentRewardTokens(uint256 currentMintableTokens, uint256 currentInflation);

    // External functions
    function createReward(uint256 _fracNum, uint256 _fracDenom) external returns (uint256);

    function trustedTransferTokens(address _to, uint256 _amount) external;

    function trustedBurnTokens(uint256 _amount) external;

    function trustedWithdrawETH(address payable _to, uint256 _amount) external;

    function depositETH() external payable returns (bool);

    function setCurrentRewardTokens() external;

    function currentMintableTokens() external view returns (uint256);

    function currentMintedTokens() external view returns (uint256);

    // Public functions
    function getController() external view returns (IController);
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address public owner;

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

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor() {
        owner = msg.sender;
    }

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

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0));
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import "./Ownable.sol";

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
    event Pause();
    event Unpause();

    bool public paused;

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     */
    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     */
    modifier whenPaused() {
        require(paused);
        _;
    }

    /**
     * @dev called by the owner to pause, triggers stopped state
     */
    function pause() public onlyOwner whenNotPaused {
        paused = true;
        emit Pause();
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function unpause() public onlyOwner whenPaused {
        paused = false;
        emit Unpause();
    }
}

Settings
{
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_controller","type":"address"},{"internalType":"uint256","name":"_inflation","type":"uint256"},{"internalType":"uint256","name":"_inflationChange","type":"uint256"},{"internalType":"uint256","name":"_targetBondingRate","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"param","type":"string"}],"name":"ParameterUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"controller","type":"address"}],"name":"SetController","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"currentMintableTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentInflation","type":"uint256"}],"name":"SetCurrentRewardTokens","type":"event"},{"inputs":[],"name":"controller","outputs":[{"internalType":"contract IController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fracNum","type":"uint256"},{"internalType":"uint256","name":"_fracDenom","type":"uint256"}],"name":"createReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentMintableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentMintedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getController","outputs":[{"internalType":"contract IController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inflation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inflationChange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IMinter","name":"_newMinter","type":"address"}],"name":"migrateToNewMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setCurrentRewardTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_inflationChange","type":"uint256"}],"name":"setInflationChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_targetBondingRate","type":"uint256"}],"name":"setTargetBondingRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"targetBondingRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"trustedBurnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"trustedTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"trustedWithdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162001c8038038062001c808339810160408190526200003491620001bd565b600080546001600160a01b0319166001600160a01b0386161790556200006683620001b3602090811b620013ae17901c565b620000b85760405162461bcd60e51b815260206004820181905260248201527f5f696e666c6174696f6e20697320696e76616c69642070657263656e7461676560448201526064015b60405180910390fd5b620000ce82620001b360201b620013ae1760201c565b6200012b5760405162461bcd60e51b815260206004820152602660248201527f5f696e666c6174696f6e4368616e676520697320696e76616c69642070657263604482015265656e7461676560d01b6064820152608401620000af565b6200014181620001b360201b620013ae1760201c565b620001a05760405162461bcd60e51b815260206004820152602860248201527f5f746172676574426f6e64696e675261746520697320696e76616c69642070656044820152677263656e7461676560c01b6064820152608401620000af565b600192909255600255600355506200020a565b633b9aca00101590565b60008060008060808587031215620001d457600080fd5b84516001600160a01b0381168114620001ec57600080fd5b60208601516040870151606090970151919890975090945092505050565b611a66806200021a6000396000f3fe6080604052600436106101095760003560e01c806392eefe9b11610095578063c7ee98c211610064578063c7ee98c214610298578063e7a49c2b146102b8578063ece2064c146102d8578063f6326fb3146102ed578063f77c47911461030557600080fd5b806392eefe9b146102365780639ae6309a14610256578063a7c835141461026c578063be0522e01461028257600080fd5b80633018205f116100dc5780633018205f146101995780635507442d146101cb57806377bde142146101e05780637dbedad514610200578063821b771f1461022057600080fd5b8063010e3c1c1461010e57806318d217ad1461013057806320283da9146101505780632de22cdb14610170575b600080fd5b34801561011a57600080fd5b5061012e61012936600461185f565b610325565b005b34801561013c57600080fd5b5061012e61014b366004611890565b6103fd565b34801561015c57600080fd5b5061012e61016b3660046118ad565b610835565b34801561017c57600080fd5b5061018660055481565b6040519081526020015b60405180910390f35b3480156101a557600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610190565b3480156101d757600080fd5b50610186610a27565b3480156101ec57600080fd5b5061012e6101fb36600461185f565b610b27565b34801561020c57600080fd5b5061018661021b3660046118d9565b610bf3565b34801561022c57600080fd5b5061018660035481565b34801561024257600080fd5b5061012e610251366004611890565b610db0565b34801561026257600080fd5b5061018660045481565b34801561027857600080fd5b5061018660025481565b34801561028e57600080fd5b5061018660015481565b3480156102a457600080fd5b5061012e6102b336600461185f565b610e06565b3480156102c457600080fd5b5061012e6102d33660046118ad565b610f31565b3480156102e457600080fd5b5061012e61107e565b6102f56111ea565b6040519015158152602001610190565b34801561031157600080fd5b506000546101b3906001600160a01b031681565b61032d6113b8565b61033b81633b9aca00101590565b61039b5760405162461bcd60e51b815260206004820152602660248201527f5f696e666c6174696f6e4368616e676520697320696e76616c69642070657263604482015265656e7461676560d01b60648201526084015b60405180910390fd5b60028190556040517f9f5033568d78ae30f29f01e944f97b2216493bd19d1b46d429673acff3dcd674906103f2906020808252600f908201526e696e666c6174696f6e4368616e676560881b604082015260600190565b60405180910390a150565b6104056113b8565b6001600160a01b03811630141561046a5760405162461bcd60e51b815260206004820152602360248201527f6e6577204d696e7465722063616e6e6f742062652063757272656e74204d696e6044820152623a32b960e91b6064820152608401610392565b6001600160a01b0381166104ca5760405162461bcd60e51b815260206004820152602160248201527f6e6577204d696e7465722063616e6e6f74206265206e756c6c206164647265736044820152607360f81b6064820152608401610392565b6000816001600160a01b0316633018205f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561050557600080fd5b505afa158015610519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053d91906118fb565b6000549091506001600160a01b038083169116146105b65760405162461bcd60e51b815260206004820152603060248201527f6e6577204d696e74657220436f6e74726f6c6c6572206d75737420626520637560448201526f393932b73a1021b7b73a3937b63632b960811b6064820152608401610392565b604051631c2d8fb360e31b81527f6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940600482015230906001600160a01b0383169063e16c7d989060240160206040518083038186803b15801561061757600080fd5b505afa15801561062b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064f91906118fb565b6001600160a01b0316146106a55760405162461bcd60e51b815260206004820152601d60248201527f6e6577204d696e746572206d75737420626520726567697374657265640000006044820152606401610392565b6106ad61149e565b6001600160a01b031663a9059cbb836106c461149e565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b15801561070557600080fd5b505afa158015610719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073d9190611918565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bb9190611931565b50816001600160a01b031663f6326fb3476040518263ffffffff1660e01b81526004016020604051808303818588803b1580156107f757600080fd5b505af115801561080b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108309190611931565b505050565b600054604051631c2d8fb360e31b8152600080516020611a1183398151915260048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b15801561088657600080fd5b505afa15801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be91906118fb565b6001600160a01b0316336001600160a01b031614806109885750600054604051631c2d8fb360e31b81527f3d7456535a3155a46f15a2313c3915bd07137ffdc56464f4fc9a82bae7215c2d60048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b15801561093b57600080fd5b505afa15801561094f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097391906118fb565b6001600160a01b0316336001600160a01b0316145b6109e95760405162461bcd60e51b815260206004820152602c60248201527f6d73672e73656e646572206e6f7420426f6e64696e674d616e61676572206f7260448201526b102537b139a6b0b730b3b2b960a11b6064820152608401610392565b6109f161153b565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610830573d6000803e3d6000fd5b6000610b22610a346115ff565b6001600160a01b031663fb1c5ee96040518163ffffffff1660e01b815260040160206040518083038186803b158015610a6c57600080fd5b505afa158015610a80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa49190611918565b610aac61149e565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae457600080fd5b505afa158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1c9190611918565b90611650565b905090565b610b2f6113b8565b610b3d81633b9aca00101590565b610b9a5760405162461bcd60e51b815260206004820152602860248201527f5f746172676574426f6e64696e675261746520697320696e76616c69642070656044820152677263656e7461676560c01b6064820152608401610392565b60038190556040517f9f5033568d78ae30f29f01e944f97b2216493bd19d1b46d429673acff3dcd674906103f290602080825260119082015270746172676574426f6e64696e675261746560781b604082015260600190565b60008054604051631c2d8fb360e31b8152600080516020611a1183398151915260048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b158015610c4557600080fd5b505afa158015610c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7d91906118fb565b6001600160a01b0316336001600160a01b031614610cad5760405162461bcd60e51b815260040161039290611953565b610cb561153b565b6000610cc46004548585611663565b600554909150610cd49082611650565b60058190556004541015610d3e5760405162461bcd60e51b815260206004820152602b60248201527f6d696e74656420746f6b656e732063616e6e6f7420657863656564206d696e7460448201526a61626c6520746f6b656e7360a81b6064820152608401610392565b610d4661149e565b6040516340c10f1960e01b8152306004820152602481018390526001600160a01b0391909116906340c10f1990604401600060405180830381600087803b158015610d9057600080fd5b505af1158015610da4573d6000803e3d6000fd5b50929695505050505050565b610db861168f565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70906020016103f2565b600054604051631c2d8fb360e31b8152600080516020611a1183398151915260048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b158015610e5757600080fd5b505afa158015610e6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8f91906118fb565b6001600160a01b0316336001600160a01b031614610ebf5760405162461bcd60e51b815260040161039290611953565b610ec761153b565b610ecf61149e565b6001600160a01b03166342966c68826040518263ffffffff1660e01b8152600401610efc91815260200190565b600060405180830381600087803b158015610f1657600080fd5b505af1158015610f2a573d6000803e3d6000fd5b5050505050565b600054604051631c2d8fb360e31b8152600080516020611a1183398151915260048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b158015610f8257600080fd5b505afa158015610f96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fba91906118fb565b6001600160a01b0316336001600160a01b031614610fea5760405162461bcd60e51b815260040161039290611953565b610ff261153b565b610ffa61149e565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201849052919091169063a9059cbb90604401602060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108309190611931565b600054604051631c2d8fb360e31b81527fe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe860048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b1580156110e157600080fd5b505afa1580156110f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111991906118fb565b6001600160a01b0316336001600160a01b0316146111795760405162461bcd60e51b815260206004820152601c60248201527f6d73672e73656e646572206e6f7420526f756e64734d616e61676572000000006044820152606401610392565b61118161153b565b6111896116e9565b61119c611194610a27565b6001546117d8565b600481905560006005556001546040517f39567a366345edf17f50c1967a31b597745186c4632f34c4f8ebe06b6890784d926111e092908252602082015260400190565b60405180910390a1565b60008054604051631c2d8fb360e31b81527f6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e994060048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b15801561124e57600080fd5b505afa158015611262573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128691906118fb565b6001600160a01b0316336001600160a01b031614806113505750600054604051631c2d8fb360e31b81527f3d7456535a3155a46f15a2313c3915bd07137ffdc56464f4fc9a82bae7215c2d60048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b15801561130357600080fd5b505afa158015611317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133b91906118fb565b6001600160a01b0316336001600160a01b0316145b6113a85760405162461bcd60e51b8152602060048201526024808201527f6d73672e73656e646572206e6f74204d696e746572206f72204a6f62734d616e60448201526330b3b2b960e11b6064820152608401610392565b50600190565b633b9aca00101590565b60008054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561140457600080fd5b505afa158015611418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c91906118fb565b6001600160a01b0316336001600160a01b03161461149c5760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206d75737420626520436f6e74726f6c6c6572206f776e6572006044820152606401610392565b565b60008054604051631c2d8fb360e31b81527f3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba760048201526001600160a01b039091169063e16c7d98906024015b60206040518083038186803b15801561150357600080fd5b505afa158015611517573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2291906118fb565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561158757600080fd5b505afa15801561159b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bf9190611931565b1561149c5760405162461bcd60e51b815260206004820152601060248201526f1cde5cdd195b481a5cc81c185d5cd95960821b6044820152606401610392565b60008054604051631c2d8fb360e31b81527f8ecfba413a4e4715a264d70a55d3a35bf60b2954c56759310202f3928162320060048201526001600160a01b039091169063e16c7d98906024016114eb565b600061165c82846119a0565b9392505050565b6000611687633b9aca0061168161167a86866117ec565b87906117fc565b90611808565b949350505050565b6000546001600160a01b0316331461149c5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206d75737420626520436f6e74726f6c6c6572000000000000006044820152606401610392565b6000806116f4610a27565b90508015611786576000611706611814565b6001600160a01b0316635c50c3566040518163ffffffff1660e01b815260040160206040518083038186803b15801561173e57600080fd5b505afa158015611752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117769190611918565b905061178281836117ec565b9250505b6003548210156117a65760025460015461179f91611650565b6001555050565b6003548211156117d45760015460025411156117c55760006001555050565b60025460015461179f91611853565b5050565b600061165c633b9aca0061168185856117fc565b600061165c8261168185633b9aca005b600061165c82846119b8565b600061165c82846119d7565b60008054604051631c2d8fb360e31b8152600080516020611a1183398151915260048201526001600160a01b039091169063e16c7d98906024016114eb565b600061165c82846119f9565b60006020828403121561187157600080fd5b5035919050565b6001600160a01b038116811461188d57600080fd5b50565b6000602082840312156118a257600080fd5b813561165c81611878565b600080604083850312156118c057600080fd5b82356118cb81611878565b946020939093013593505050565b600080604083850312156118ec57600080fd5b50508035926020909101359150565b60006020828403121561190d57600080fd5b815161165c81611878565b60006020828403121561192a57600080fd5b5051919050565b60006020828403121561194357600080fd5b8151801515811461165c57600080fd5b6020808252601d908201527f6d73672e73656e646572206e6f7420426f6e64696e674d616e61676572000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156119b3576119b361198a565b500190565b60008160001904831182151516156119d2576119d261198a565b500290565b6000826119f457634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611a0b57611a0b61198a565b50039056fe2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37a2646970667358221220db57b965514cfe4b52b46bdf103e3b470bfc74fa3aa90d88525bf052a4e3455164736f6c63430008090033000000000000000000000000d8e8328501e9645d16cf49539efc04f734606ee40000000000000000000000000000000000000000000000000000000000035d5400000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000001dcd6500

Deployed Bytecode

0x6080604052600436106101095760003560e01c806392eefe9b11610095578063c7ee98c211610064578063c7ee98c214610298578063e7a49c2b146102b8578063ece2064c146102d8578063f6326fb3146102ed578063f77c47911461030557600080fd5b806392eefe9b146102365780639ae6309a14610256578063a7c835141461026c578063be0522e01461028257600080fd5b80633018205f116100dc5780633018205f146101995780635507442d146101cb57806377bde142146101e05780637dbedad514610200578063821b771f1461022057600080fd5b8063010e3c1c1461010e57806318d217ad1461013057806320283da9146101505780632de22cdb14610170575b600080fd5b34801561011a57600080fd5b5061012e61012936600461185f565b610325565b005b34801561013c57600080fd5b5061012e61014b366004611890565b6103fd565b34801561015c57600080fd5b5061012e61016b3660046118ad565b610835565b34801561017c57600080fd5b5061018660055481565b6040519081526020015b60405180910390f35b3480156101a557600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610190565b3480156101d757600080fd5b50610186610a27565b3480156101ec57600080fd5b5061012e6101fb36600461185f565b610b27565b34801561020c57600080fd5b5061018661021b3660046118d9565b610bf3565b34801561022c57600080fd5b5061018660035481565b34801561024257600080fd5b5061012e610251366004611890565b610db0565b34801561026257600080fd5b5061018660045481565b34801561027857600080fd5b5061018660025481565b34801561028e57600080fd5b5061018660015481565b3480156102a457600080fd5b5061012e6102b336600461185f565b610e06565b3480156102c457600080fd5b5061012e6102d33660046118ad565b610f31565b3480156102e457600080fd5b5061012e61107e565b6102f56111ea565b6040519015158152602001610190565b34801561031157600080fd5b506000546101b3906001600160a01b031681565b61032d6113b8565b61033b81633b9aca00101590565b61039b5760405162461bcd60e51b815260206004820152602660248201527f5f696e666c6174696f6e4368616e676520697320696e76616c69642070657263604482015265656e7461676560d01b60648201526084015b60405180910390fd5b60028190556040517f9f5033568d78ae30f29f01e944f97b2216493bd19d1b46d429673acff3dcd674906103f2906020808252600f908201526e696e666c6174696f6e4368616e676560881b604082015260600190565b60405180910390a150565b6104056113b8565b6001600160a01b03811630141561046a5760405162461bcd60e51b815260206004820152602360248201527f6e6577204d696e7465722063616e6e6f742062652063757272656e74204d696e6044820152623a32b960e91b6064820152608401610392565b6001600160a01b0381166104ca5760405162461bcd60e51b815260206004820152602160248201527f6e6577204d696e7465722063616e6e6f74206265206e756c6c206164647265736044820152607360f81b6064820152608401610392565b6000816001600160a01b0316633018205f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561050557600080fd5b505afa158015610519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053d91906118fb565b6000549091506001600160a01b038083169116146105b65760405162461bcd60e51b815260206004820152603060248201527f6e6577204d696e74657220436f6e74726f6c6c6572206d75737420626520637560448201526f393932b73a1021b7b73a3937b63632b960811b6064820152608401610392565b604051631c2d8fb360e31b81527f6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940600482015230906001600160a01b0383169063e16c7d989060240160206040518083038186803b15801561061757600080fd5b505afa15801561062b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064f91906118fb565b6001600160a01b0316146106a55760405162461bcd60e51b815260206004820152601d60248201527f6e6577204d696e746572206d75737420626520726567697374657265640000006044820152606401610392565b6106ad61149e565b6001600160a01b031663a9059cbb836106c461149e565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b15801561070557600080fd5b505afa158015610719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073d9190611918565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561078357600080fd5b505af1158015610797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bb9190611931565b50816001600160a01b031663f6326fb3476040518263ffffffff1660e01b81526004016020604051808303818588803b1580156107f757600080fd5b505af115801561080b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906108309190611931565b505050565b600054604051631c2d8fb360e31b8152600080516020611a1183398151915260048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b15801561088657600080fd5b505afa15801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be91906118fb565b6001600160a01b0316336001600160a01b031614806109885750600054604051631c2d8fb360e31b81527f3d7456535a3155a46f15a2313c3915bd07137ffdc56464f4fc9a82bae7215c2d60048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b15801561093b57600080fd5b505afa15801561094f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097391906118fb565b6001600160a01b0316336001600160a01b0316145b6109e95760405162461bcd60e51b815260206004820152602c60248201527f6d73672e73656e646572206e6f7420426f6e64696e674d616e61676572206f7260448201526b102537b139a6b0b730b3b2b960a11b6064820152608401610392565b6109f161153b565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610830573d6000803e3d6000fd5b6000610b22610a346115ff565b6001600160a01b031663fb1c5ee96040518163ffffffff1660e01b815260040160206040518083038186803b158015610a6c57600080fd5b505afa158015610a80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa49190611918565b610aac61149e565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae457600080fd5b505afa158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1c9190611918565b90611650565b905090565b610b2f6113b8565b610b3d81633b9aca00101590565b610b9a5760405162461bcd60e51b815260206004820152602860248201527f5f746172676574426f6e64696e675261746520697320696e76616c69642070656044820152677263656e7461676560c01b6064820152608401610392565b60038190556040517f9f5033568d78ae30f29f01e944f97b2216493bd19d1b46d429673acff3dcd674906103f290602080825260119082015270746172676574426f6e64696e675261746560781b604082015260600190565b60008054604051631c2d8fb360e31b8152600080516020611a1183398151915260048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b158015610c4557600080fd5b505afa158015610c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7d91906118fb565b6001600160a01b0316336001600160a01b031614610cad5760405162461bcd60e51b815260040161039290611953565b610cb561153b565b6000610cc46004548585611663565b600554909150610cd49082611650565b60058190556004541015610d3e5760405162461bcd60e51b815260206004820152602b60248201527f6d696e74656420746f6b656e732063616e6e6f7420657863656564206d696e7460448201526a61626c6520746f6b656e7360a81b6064820152608401610392565b610d4661149e565b6040516340c10f1960e01b8152306004820152602481018390526001600160a01b0391909116906340c10f1990604401600060405180830381600087803b158015610d9057600080fd5b505af1158015610da4573d6000803e3d6000fd5b50929695505050505050565b610db861168f565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f70906020016103f2565b600054604051631c2d8fb360e31b8152600080516020611a1183398151915260048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b158015610e5757600080fd5b505afa158015610e6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8f91906118fb565b6001600160a01b0316336001600160a01b031614610ebf5760405162461bcd60e51b815260040161039290611953565b610ec761153b565b610ecf61149e565b6001600160a01b03166342966c68826040518263ffffffff1660e01b8152600401610efc91815260200190565b600060405180830381600087803b158015610f1657600080fd5b505af1158015610f2a573d6000803e3d6000fd5b5050505050565b600054604051631c2d8fb360e31b8152600080516020611a1183398151915260048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b158015610f8257600080fd5b505afa158015610f96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fba91906118fb565b6001600160a01b0316336001600160a01b031614610fea5760405162461bcd60e51b815260040161039290611953565b610ff261153b565b610ffa61149e565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201849052919091169063a9059cbb90604401602060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108309190611931565b600054604051631c2d8fb360e31b81527fe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe860048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b1580156110e157600080fd5b505afa1580156110f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111991906118fb565b6001600160a01b0316336001600160a01b0316146111795760405162461bcd60e51b815260206004820152601c60248201527f6d73672e73656e646572206e6f7420526f756e64734d616e61676572000000006044820152606401610392565b61118161153b565b6111896116e9565b61119c611194610a27565b6001546117d8565b600481905560006005556001546040517f39567a366345edf17f50c1967a31b597745186c4632f34c4f8ebe06b6890784d926111e092908252602082015260400190565b60405180910390a1565b60008054604051631c2d8fb360e31b81527f6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e994060048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b15801561124e57600080fd5b505afa158015611262573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128691906118fb565b6001600160a01b0316336001600160a01b031614806113505750600054604051631c2d8fb360e31b81527f3d7456535a3155a46f15a2313c3915bd07137ffdc56464f4fc9a82bae7215c2d60048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b15801561130357600080fd5b505afa158015611317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133b91906118fb565b6001600160a01b0316336001600160a01b0316145b6113a85760405162461bcd60e51b8152602060048201526024808201527f6d73672e73656e646572206e6f74204d696e746572206f72204a6f62734d616e60448201526330b3b2b960e11b6064820152608401610392565b50600190565b633b9aca00101590565b60008054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561140457600080fd5b505afa158015611418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c91906118fb565b6001600160a01b0316336001600160a01b03161461149c5760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206d75737420626520436f6e74726f6c6c6572206f776e6572006044820152606401610392565b565b60008054604051631c2d8fb360e31b81527f3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba760048201526001600160a01b039091169063e16c7d98906024015b60206040518083038186803b15801561150357600080fd5b505afa158015611517573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2291906118fb565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561158757600080fd5b505afa15801561159b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bf9190611931565b1561149c5760405162461bcd60e51b815260206004820152601060248201526f1cde5cdd195b481a5cc81c185d5cd95960821b6044820152606401610392565b60008054604051631c2d8fb360e31b81527f8ecfba413a4e4715a264d70a55d3a35bf60b2954c56759310202f3928162320060048201526001600160a01b039091169063e16c7d98906024016114eb565b600061165c82846119a0565b9392505050565b6000611687633b9aca0061168161167a86866117ec565b87906117fc565b90611808565b949350505050565b6000546001600160a01b0316331461149c5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206d75737420626520436f6e74726f6c6c6572000000000000006044820152606401610392565b6000806116f4610a27565b90508015611786576000611706611814565b6001600160a01b0316635c50c3566040518163ffffffff1660e01b815260040160206040518083038186803b15801561173e57600080fd5b505afa158015611752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117769190611918565b905061178281836117ec565b9250505b6003548210156117a65760025460015461179f91611650565b6001555050565b6003548211156117d45760015460025411156117c55760006001555050565b60025460015461179f91611853565b5050565b600061165c633b9aca0061168185856117fc565b600061165c8261168185633b9aca005b600061165c82846119b8565b600061165c82846119d7565b60008054604051631c2d8fb360e31b8152600080516020611a1183398151915260048201526001600160a01b039091169063e16c7d98906024016114eb565b600061165c82846119f9565b60006020828403121561187157600080fd5b5035919050565b6001600160a01b038116811461188d57600080fd5b50565b6000602082840312156118a257600080fd5b813561165c81611878565b600080604083850312156118c057600080fd5b82356118cb81611878565b946020939093013593505050565b600080604083850312156118ec57600080fd5b50508035926020909101359150565b60006020828403121561190d57600080fd5b815161165c81611878565b60006020828403121561192a57600080fd5b5051919050565b60006020828403121561194357600080fd5b8151801515811461165c57600080fd5b6020808252601d908201527f6d73672e73656e646572206e6f7420426f6e64696e674d616e61676572000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156119b3576119b361198a565b500190565b60008160001904831182151516156119d2576119d261198a565b500290565b6000826119f457634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611a0b57611a0b61198a565b50039056fe2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37a2646970667358221220db57b965514cfe4b52b46bdf103e3b470bfc74fa3aa90d88525bf052a4e3455164736f6c63430008090033

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

000000000000000000000000d8e8328501e9645d16cf49539efc04f734606ee40000000000000000000000000000000000000000000000000000000000035d5400000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000001dcd6500

-----Decoded View---------------
Arg [0] : _controller (address): 0xD8E8328501E9645d16Cf49539efC04f734606ee4
Arg [1] : _inflation (uint256): 220500
Arg [2] : _inflationChange (uint256): 500
Arg [3] : _targetBondingRate (uint256): 500000000

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000d8e8328501e9645d16cf49539efc04f734606ee4
Arg [1] : 0000000000000000000000000000000000000000000000000000000000035d54
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [3] : 000000000000000000000000000000000000000000000000000000001dcd6500


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  ]
[ Download: CSV Export  ]
[ 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.