Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 427373896 | 1 hr ago | 0.00000106 ETH | ||||
| 427343779 | 4 hrs ago | 0.00023852 ETH | ||||
| 427319726 | 5 hrs ago | 0.05334786 ETH | ||||
| 427242082 | 11 hrs ago | 0.09290506 ETH | ||||
| 427237970 | 11 hrs ago | 0.01007471 ETH | ||||
| 427216388 | 12 hrs ago | 0.00549268 ETH | ||||
| 427210976 | 13 hrs ago | 0.3 ETH | ||||
| 427210950 | 13 hrs ago | 0.3 ETH | ||||
| 427203529 | 13 hrs ago | 0.00648 ETH | ||||
| 427195924 | 14 hrs ago | 0.06022392 ETH | ||||
| 427181034 | 15 hrs ago | 0.00383242 ETH | ||||
| 427149671 | 17 hrs ago | 0.00240552 ETH | ||||
| 427149600 | 17 hrs ago | 0.01525766 ETH | ||||
| 427149577 | 17 hrs ago | 0.02395072 ETH | ||||
| 427149560 | 17 hrs ago | 0.00674805 ETH | ||||
| 427149544 | 17 hrs ago | 0.51465912 ETH | ||||
| 427127539 | 18 hrs ago | 0.00849222 ETH | ||||
| 427030922 | 25 hrs ago | 0.00000087 ETH | ||||
| 426950134 | 31 hrs ago | 0.00231511 ETH | ||||
| 426941092 | 31 hrs ago | 0.02 ETH | ||||
| 426922574 | 33 hrs ago | 0.0335419 ETH | ||||
| 426919139 | 33 hrs ago | 0.00216001 ETH | ||||
| 426906592 | 34 hrs ago | 0.324 ETH | ||||
| 426906571 | 34 hrs ago | 0.324 ETH | ||||
| 426905845 | 34 hrs ago | 0.03785866 ETH |
Latest 25 Deposits
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Minter
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity Standard Json-Input format)
// 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();
}
}{
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs",
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [],
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$70,738,899.28
Net Worth in ETH
29,102.45255
Token Allocations
LPT
99.39%
ETH
0.61%
Multichain Portfolio | 35 Chains
Loading...
Loading
Loading...
Loading
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.