Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
JumpRateModelV5
Compiler Version
v0.5.16+commit.9c3226ce
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.5.16; import "./InterestRateModel.sol"; import "../math/SafeMath.sol"; import "../Ownable.sol"; /** * @title Compound's JumpRateModel Contract V3 * @author Compound (modified by Dharma Labs) * @notice Version 2 modifies Version 1 by enabling updateable parameters. * @notice Version 3 includes Ownable and have updatable blocksPerYear. * @notice Version 4 moves blocksPerYear to the constructor. * @notice Version 5 moves to timestamp instead of block based rates. */ contract JumpRateModelV5 is InterestRateModel, Ownable { using SafeMath for uint; event NewInterestParams(uint baseRatePerSecond, uint multiplierPerSecond, uint jumpMultiplierPerSecond, uint kink); /** * @notice The approximate number of seconds per year that is assumed by the interest rate model */ uint constant public secondsPerYear = 365 days; /** * @notice The multiplier of utilization rate that gives the slope of the interest rate */ uint public multiplierPerSecond; /** * @notice The base interest rate which is the y-intercept when utilization rate is 0 */ uint public baseRatePerSecond; /** * @notice The multiplierPerSecond after hitting a specified utilization point */ uint public jumpMultiplierPerSecond; /** * @notice The utilization point at which the jump multiplier is applied */ uint public kink; /** * @notice A name for user-friendliness, e.g. WBTC */ string public name; /** * @notice Construct an interest rate model * @param baseRatePerYear The approximate target base APR, as a mantissa (scaled by 1e18) * @param multiplierPerYear The rate of increase in interest rate wrt utilization (scaled by 1e18) * @param jumpMultiplierPerYear The multiplierPerSecond after hitting a specified utilization point * @param kink_ The utilization point at which the jump multiplier is applied * @param owner_ Sets the owner of the contract to someone other than msgSender * @param name_ User-friendly name for the new contract */ constructor(uint baseRatePerYear, uint multiplierPerYear, uint jumpMultiplierPerYear, uint kink_, address owner_, string memory name_) public { name = name_; _transferOwnership(owner_); updateJumpRateModelInternal(baseRatePerYear, multiplierPerYear, jumpMultiplierPerYear, kink_); } /** * @notice Update the parameters of the interest rate model (only callable by owner, i.e. Timelock) * @param baseRatePerYear The approximate target base APR, as a mantissa (scaled by 1e18) * @param multiplierPerYear The rate of increase in interest rate wrt utilization (scaled by 1e18) * @param jumpMultiplierPerYear The multiplierPerSecond after hitting a specified utilization point * @param kink_ The utilization point at which the jump multiplier is applied */ function updateJumpRateModel(uint baseRatePerYear, uint multiplierPerYear, uint jumpMultiplierPerYear, uint kink_) external onlyOwner { updateJumpRateModelInternal(baseRatePerYear, multiplierPerYear, jumpMultiplierPerYear, kink_); } /** * @notice Calculates the utilization rate of the market: `borrows / (cash + borrows - reserves)` * @param cash The amount of cash in the market * @param borrows The amount of borrows in the market * @param reserves The amount of reserves in the market (currently unused) * @return The utilization rate as a mantissa between [0, 1e18] */ function utilizationRate(uint cash, uint borrows, uint reserves) public pure returns (uint) { // Utilization rate is 0 when there are no borrows if (borrows == 0) { return 0; } return borrows.mul(1e18).div(cash.add(borrows).sub(reserves)); } /** * @notice Calculates the current borrow rate per second, with the error code expected by the market * @param cash The amount of cash in the market * @param borrows The amount of borrows in the market * @param reserves The amount of reserves in the market * @return The borrow rate percentage per second as a mantissa (scaled by 1e18) */ function getBorrowRate(uint cash, uint borrows, uint reserves) public view returns (uint) { uint util = utilizationRate(cash, borrows, reserves); if (util <= kink) { return util.mul(multiplierPerSecond).div(1e18).add(baseRatePerSecond); } else { uint normalRate = kink.mul(multiplierPerSecond).div(1e18).add(baseRatePerSecond); uint excessUtil = util.sub(kink); return excessUtil.mul(jumpMultiplierPerSecond).div(1e18).add(normalRate); } } /** * @notice Calculates the current supply rate per second * @param cash The amount of cash in the market * @param borrows The amount of borrows in the market * @param reserves The amount of reserves in the market * @param reserveFactorMantissa The current reserve factor for the market * @return The supply rate percentage per second as a mantissa (scaled by 1e18) */ function getSupplyRate(uint cash, uint borrows, uint reserves, uint reserveFactorMantissa) public view returns (uint) { uint oneMinusReserveFactor = uint(1e18).sub(reserveFactorMantissa); uint borrowRate = getBorrowRate(cash, borrows, reserves); uint rateToPool = borrowRate.mul(oneMinusReserveFactor).div(1e18); return utilizationRate(cash, borrows, reserves).mul(rateToPool).div(1e18); } /** * @notice Internal function to update the parameters of the interest rate model * @param baseRatePerYear The approximate target base APR, as a mantissa (scaled by 1e18) * @param multiplierPerYear The rate of increase in interest rate wrt utilization (scaled by 1e18) * @param jumpMultiplierPerYear The multiplierPerSecond after hitting a specified utilization point * @param kink_ The utilization point at which the jump multiplier is applied */ function updateJumpRateModelInternal(uint baseRatePerYear, uint multiplierPerYear, uint jumpMultiplierPerYear, uint kink_) internal { baseRatePerSecond = baseRatePerYear.div(secondsPerYear); multiplierPerSecond = (multiplierPerYear.mul(1e18)).div(secondsPerYear.mul(kink_)); jumpMultiplierPerSecond = jumpMultiplierPerYear.div(secondsPerYear); kink = kink_; emit NewInterestParams(baseRatePerSecond, multiplierPerSecond, jumpMultiplierPerSecond, kink); } }
pragma solidity ^0.5.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
pragma solidity ^0.5.16; // From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/Math.sol // Subject to the MIT license. /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the addition of two unsigned integers, reverting with custom message on overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, errorMessage); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on underflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot underflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction underflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on underflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot underflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @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, string memory errorMessage) internal pure returns (uint256) { // 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 0; } uint256 c = a * b; require(c / a == b, errorMessage); return c; } /** * @dev Returns the integer division of two unsigned integers. * Reverts 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) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. * Reverts 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) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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 mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
pragma solidity ^0.5.16; /** * @title Compound's InterestRateModel Interface * @author Compound */ contract InterestRateModel { /// @notice Indicator that this is an InterestRateModel contract (for inspection) bool public constant isInterestRateModel = true; /** * @notice Calculates the current borrow interest rate per block * @param cash The total amount of cash the market has * @param borrows The total amount of borrows the market has outstanding * @param reserves The total amount of reserves the market has * @return The borrow rate per block (as a percentage, and scaled by 1e18) */ function getBorrowRate(uint cash, uint borrows, uint reserves) external view returns (uint); /** * @notice Calculates the current supply interest rate per block * @param cash The total amount of cash the market has * @param borrows The total amount of borrows the market has outstanding * @param reserves The total amount of reserves the market has * @param reserveFactorMantissa The current reserve factor the market has * @return The supply rate per block (as a percentage, and scaled by 1e18) */ function getSupplyRate(uint cash, uint borrows, uint reserves, uint reserveFactorMantissa) external view returns (uint); }
pragma solidity ^0.5.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"baseRatePerYear","type":"uint256"},{"internalType":"uint256","name":"multiplierPerYear","type":"uint256"},{"internalType":"uint256","name":"jumpMultiplierPerYear","type":"uint256"},{"internalType":"uint256","name":"kink_","type":"uint256"},{"internalType":"address","name":"owner_","type":"address"},{"internalType":"string","name":"name_","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"baseRatePerSecond","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"multiplierPerSecond","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"jumpMultiplierPerSecond","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"kink","type":"uint256"}],"name":"NewInterestParams","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"constant":true,"inputs":[],"name":"baseRatePerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"cash","type":"uint256"},{"internalType":"uint256","name":"borrows","type":"uint256"},{"internalType":"uint256","name":"reserves","type":"uint256"}],"name":"getBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"cash","type":"uint256"},{"internalType":"uint256","name":"borrows","type":"uint256"},{"internalType":"uint256","name":"reserves","type":"uint256"},{"internalType":"uint256","name":"reserveFactorMantissa","type":"uint256"}],"name":"getSupplyRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isInterestRateModel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"jumpMultiplierPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"kink","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"multiplierPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secondsPerYear","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"baseRatePerYear","type":"uint256"},{"internalType":"uint256","name":"multiplierPerYear","type":"uint256"},{"internalType":"uint256","name":"jumpMultiplierPerYear","type":"uint256"},{"internalType":"uint256","name":"kink_","type":"uint256"}],"name":"updateJumpRateModel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"cash","type":"uint256"},{"internalType":"uint256","name":"borrows","type":"uint256"},{"internalType":"uint256","name":"reserves","type":"uint256"}],"name":"utilizationRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200107d3803806200107d833981810160405260c08110156200003757600080fd5b815160208301516040808501516060860151608087015160a0880180519451969895979396929591949293820192846401000000008211156200007957600080fd5b9083019060208201858111156200008f57600080fd5b8251640100000000811182820188101715620000aa57600080fd5b82525081516020918201929091019080838360005b83811015620000d9578181015183820152602001620000bf565b50505050905090810190601f168015620001075780820380516001836020036101000a031916815260200191505b50604052505050600062000120620001a660201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350916000805160206200105d833981519152908290a35080516200016e90600590602084019062000489565b5062000183826001600160e01b03620001ab16565b6200019a868686866001600160e01b036200023c16565b5050505050506200052b565b335b90565b6001600160a01b038116620001f25760405162461bcd60e51b8152600401808060200182810382526026815260200180620010166026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216916000805160206200105d83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6200025a6301e13380856200033160201b6200073d1790919060201c565b600255620002b36200027d6301e133808362000384602090811b620006db17901c565b6200029f670de0b6b3a7640000866200038460201b620006db1790919060201c565b6200033160201b6200073d1790919060201c565b600155620002d2826301e1338062000331602090811b6200073d17901c565b60038190556004829055600254600154604080519283526020830191909152818101929092526060810183905290517f6960ab234c7ef4b0c9197100f5393cfcde7c453ac910a27bd2000aa1dd4c068d9181900360800190a150505050565b60006200037b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620003e260201b60201c565b90505b92915050565b60008262000395575060006200037e565b82820282848281620003a357fe5b04146200037b5760405162461bcd60e51b81526004018080602001828103825260218152602001806200103c6021913960400191505060405180910390fd5b60008183620004725760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620004365781810151838201526020016200041c565b50505050905090810190601f168015620004645780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200047f57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004cc57805160ff1916838001178555620004fc565b82800160010185558215620004fc579182015b82811115620004fc578251825591602001919060010190620004df565b506200050a9291506200050e565b5090565b620001a891905b808211156200050a576000815560010162000515565b610adb806200053b6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063715018a611610097578063b816881611610066578063b816881614610274578063d90e0264146102a3578063f2fde38b146102ab578063fd2da339146102d1576100f5565b8063715018a61461023857806372cf84a7146102405780638da5cb5b146102485780638f32d59b1461026c576100f5565b80632191f92a116100d35780632191f92a146101e3578063252e40b1146101ff57806346f608ff146102075780636e71e2d81461020f576100f5565b806306fdde03146100fa57806315f24053146101775780632037f3e7146101b2575b600080fd5b6101026102d9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561013c578181015183820152602001610124565b50505050905090810190601f1680156101695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a06004803603606081101561018d57600080fd5b5080359060208101359060400135610367565b60408051918252519081900360200190f35b6101e1600480360360808110156101c857600080fd5b508035906020810135906040810135906060013561043f565b005b6101eb6104aa565b604080519115158252519081900360200190f35b6101a06104af565b6101a06104b7565b6101a06004803603606081101561022557600080fd5b50803590602081013590604001356104bd565b6101e161050f565b6101a06105b2565b6102506105b8565b604080516001600160a01b039092168252519081900360200190f35b6101eb6105c7565b6101a06004803603608081101561028a57600080fd5b50803590602081013590604081013590606001356105eb565b6101a061066a565b6101e1600480360360208110156102c157600080fd5b50356001600160a01b0316610670565b6101a06106d5565b6005805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561035f5780601f106103345761010080835404028352916020019161035f565b820191906000526020600020905b81548152906001019060200180831161034257829003601f168201915b505050505081565b6000806103758585856104bd565b905060045481116103c7576103bf6002546103b3670de0b6b3a76400006103a7600154866106db90919063ffffffff16565b9063ffffffff61073d16565b9063ffffffff61077f16565b915050610438565b60006103f26002546103b3670de0b6b3a76400006103a76001546004546106db90919063ffffffff16565b9050600061040b600454846107d990919063ffffffff16565b9050610432826103b3670de0b6b3a76400006103a7600354866106db90919063ffffffff16565b93505050505b9392505050565b6104476105c7565b610498576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6104a48484848461081b565b50505050565b600181565b6301e1338081565b60015481565b6000826104cc57506000610438565b6105076104ef836104e3878763ffffffff61077f16565b9063ffffffff6107d916565b6103a785670de0b6b3a764000063ffffffff6106db16565b949350505050565b6105176105c7565b610568576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60035481565b6000546001600160a01b031690565b600080546001600160a01b03166105dc6108bf565b6001600160a01b031614905090565b600080610606670de0b6b3a76400008463ffffffff6107d916565b90506000610615878787610367565b90506000610635670de0b6b3a76400006103a7848663ffffffff6106db16565b905061065e670de0b6b3a76400006103a7836106528c8c8c6104bd565b9063ffffffff6106db16565b98975050505050505050565b60025481565b6106786105c7565b6106c9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6106d2816108c3565b50565b60045481565b6000826106ea57506000610737565b828202828482816106f757fe5b04146107345760405162461bcd60e51b8152600401808060200182810382526021815260200180610a866021913960400191505060405180910390fd5b90505b92915050565b600061073483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610963565b600082820183811015610734576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061073483836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f7700815250610a05565b61082f846301e1338063ffffffff61073d16565b6002556108496104ef6301e133808363ffffffff6106db16565b600155610860826301e1338063ffffffff61073d16565b60038190556004829055600254600154604080519283526020830191909152818101929092526060810183905290517f6960ab234c7ef4b0c9197100f5393cfcde7c453ac910a27bd2000aa1dd4c068d9181900360800190a150505050565b3390565b6001600160a01b0381166109085760405162461bcd60e51b8152600401808060200182810382526026815260200180610a606026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081836109ef5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109b457818101518382015260200161099c565b50505050905090810190601f1680156109e15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816109fb57fe5b0495945050505050565b60008184841115610a575760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109b457818101518382015260200161099c565b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a7231582022981b003877fe90eb2d35c4e082a22cc573fd5a8ebc611d146f27e799aed9bd64736f6c634300051000324f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c68af0bb1400000000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000641f26c67a5d0829ae61019131093b6a7c7d18a300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000007537461626c657300000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c8063715018a611610097578063b816881611610066578063b816881614610274578063d90e0264146102a3578063f2fde38b146102ab578063fd2da339146102d1576100f5565b8063715018a61461023857806372cf84a7146102405780638da5cb5b146102485780638f32d59b1461026c576100f5565b80632191f92a116100d35780632191f92a146101e3578063252e40b1146101ff57806346f608ff146102075780636e71e2d81461020f576100f5565b806306fdde03146100fa57806315f24053146101775780632037f3e7146101b2575b600080fd5b6101026102d9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561013c578181015183820152602001610124565b50505050905090810190601f1680156101695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a06004803603606081101561018d57600080fd5b5080359060208101359060400135610367565b60408051918252519081900360200190f35b6101e1600480360360808110156101c857600080fd5b508035906020810135906040810135906060013561043f565b005b6101eb6104aa565b604080519115158252519081900360200190f35b6101a06104af565b6101a06104b7565b6101a06004803603606081101561022557600080fd5b50803590602081013590604001356104bd565b6101e161050f565b6101a06105b2565b6102506105b8565b604080516001600160a01b039092168252519081900360200190f35b6101eb6105c7565b6101a06004803603608081101561028a57600080fd5b50803590602081013590604081013590606001356105eb565b6101a061066a565b6101e1600480360360208110156102c157600080fd5b50356001600160a01b0316610670565b6101a06106d5565b6005805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561035f5780601f106103345761010080835404028352916020019161035f565b820191906000526020600020905b81548152906001019060200180831161034257829003601f168201915b505050505081565b6000806103758585856104bd565b905060045481116103c7576103bf6002546103b3670de0b6b3a76400006103a7600154866106db90919063ffffffff16565b9063ffffffff61073d16565b9063ffffffff61077f16565b915050610438565b60006103f26002546103b3670de0b6b3a76400006103a76001546004546106db90919063ffffffff16565b9050600061040b600454846107d990919063ffffffff16565b9050610432826103b3670de0b6b3a76400006103a7600354866106db90919063ffffffff16565b93505050505b9392505050565b6104476105c7565b610498576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6104a48484848461081b565b50505050565b600181565b6301e1338081565b60015481565b6000826104cc57506000610438565b6105076104ef836104e3878763ffffffff61077f16565b9063ffffffff6107d916565b6103a785670de0b6b3a764000063ffffffff6106db16565b949350505050565b6105176105c7565b610568576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60035481565b6000546001600160a01b031690565b600080546001600160a01b03166105dc6108bf565b6001600160a01b031614905090565b600080610606670de0b6b3a76400008463ffffffff6107d916565b90506000610615878787610367565b90506000610635670de0b6b3a76400006103a7848663ffffffff6106db16565b905061065e670de0b6b3a76400006103a7836106528c8c8c6104bd565b9063ffffffff6106db16565b98975050505050505050565b60025481565b6106786105c7565b6106c9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6106d2816108c3565b50565b60045481565b6000826106ea57506000610737565b828202828482816106f757fe5b04146107345760405162461bcd60e51b8152600401808060200182810382526021815260200180610a866021913960400191505060405180910390fd5b90505b92915050565b600061073483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610963565b600082820183811015610734576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061073483836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f7700815250610a05565b61082f846301e1338063ffffffff61073d16565b6002556108496104ef6301e133808363ffffffff6106db16565b600155610860826301e1338063ffffffff61073d16565b60038190556004829055600254600154604080519283526020830191909152818101929092526060810183905290517f6960ab234c7ef4b0c9197100f5393cfcde7c453ac910a27bd2000aa1dd4c068d9181900360800190a150505050565b3390565b6001600160a01b0381166109085760405162461bcd60e51b8152600401808060200182810382526026815260200180610a606026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081836109ef5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109b457818101518382015260200161099c565b50505050905090810190601f1680156109e15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816109fb57fe5b0495945050505050565b60008184841115610a575760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109b457818101518382015260200161099c565b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a7231582022981b003877fe90eb2d35c4e082a22cc573fd5a8ebc611d146f27e799aed9bd64736f6c63430005100032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c68af0bb1400000000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000641f26c67a5d0829ae61019131093b6a7c7d18a300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000007537461626c657300000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseRatePerYear (uint256): 0
Arg [1] : multiplierPerYear (uint256): 200000000000000000
Arg [2] : jumpMultiplierPerYear (uint256): 1000000000000000000
Arg [3] : kink_ (uint256): 500000000000000000
Arg [4] : owner_ (address): 0x641f26c67A5D0829Ae61019131093B6a7c7d18a3
Arg [5] : name_ (string): Stables
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 00000000000000000000000000000000000000000000000002c68af0bb140000
Arg [2] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [3] : 00000000000000000000000000000000000000000000000006f05b59d3b20000
Arg [4] : 000000000000000000000000641f26c67a5d0829ae61019131093b6a7c7d18a3
Arg [5] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [7] : 537461626c657300000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.