Overview
APE Balance
0 APE
APE Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
TripleSlopeRateModel
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.5.16; import "./InterestRateModel.sol"; import "./SafeMath.sol"; /** * @title Zeno Lend's TripleSlopeRateModel Contract * @author Zeno Lend */ contract TripleSlopeRateModel is InterestRateModel { using SafeMath for uint256; event NewInterestParams( uint256 baseRatePerBlock, uint256 multiplierPerBlock, uint256 jumpMultiplierPerBlock, uint256 kink1, uint256 kink2, uint256 roof ); /** * @notice The approximate number of blocks per year that is assumed by the interest rate model */ uint256 public constant blocksPerYear = 31536000; /** * @notice The minimum roof value used for calculating borrow rate. */ uint256 internal constant minRoofValue = 1e18; /** * @notice The multiplier of utilization rate that gives the slope of the interest rate */ uint256 public multiplierPerBlock; /** * @notice The base interest rate which is the y-intercept when utilization rate is 0 */ uint256 public baseRatePerBlock; /** * @notice The multiplierPerBlock after hitting a specified utilization point */ uint256 public jumpMultiplierPerBlock; /** * @notice The utilization point at which the interest rate is fixed */ uint256 public kink1; /** * @notice The utilization point at which the jump multiplier is applied */ uint256 public kink2; /** * @notice The utilization point at which the rate is fixed */ uint256 public roof; /** * @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 multiplierPerBlock after hitting a specified utilization point * @param kink1_ The utilization point at which the interest rate is fixed * @param kink2_ The utilization point at which the jump multiplier is applied * @param roof_ The utilization point at which the borrow rate is fixed */ constructor( uint256 baseRatePerYear, uint256 multiplierPerYear, uint256 jumpMultiplierPerYear, uint256 kink1_, uint256 kink2_, uint256 roof_ ) public { updateTripleRateModelInternal(baseRatePerYear, multiplierPerYear, jumpMultiplierPerYear, kink1_, kink2_, roof_); } /** * @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( uint256 cash, uint256 borrows, uint256 reserves ) public view returns (uint256) { // Utilization rate is 0 when there are no borrows if (borrows == 0) { return 0; } uint256 util = borrows.mul(1e18).div(cash.add(borrows).sub(reserves)); // If the utilization is above the roof, cap it. if (util > roof) { util = roof; } return util; } /** * @notice Calculates the current borrow rate per block, 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 block as a mantissa (scaled by 1e18) */ function getBorrowRate( uint256 cash, uint256 borrows, uint256 reserves ) public view returns (uint256) { uint256 util = utilizationRate(cash, borrows, reserves); if (util <= kink1) { return util.mul(multiplierPerBlock).div(1e18).add(baseRatePerBlock); } else if (util <= kink2) { return kink1.mul(multiplierPerBlock).div(1e18).add(baseRatePerBlock); } else { uint256 normalRate = kink1.mul(multiplierPerBlock).div(1e18).add(baseRatePerBlock); uint256 excessUtil = util.sub(kink2); return excessUtil.mul(jumpMultiplierPerBlock).div(1e18).add(normalRate); } } /** * @notice Calculates the current supply rate per block * @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 block as a mantissa (scaled by 1e18) */ function getSupplyRate( uint256 cash, uint256 borrows, uint256 reserves, uint256 reserveFactorMantissa ) public view returns (uint256) { uint256 oneMinusReserveFactor = uint256(1e18).sub(reserveFactorMantissa); uint256 borrowRate = getBorrowRate(cash, borrows, reserves); uint256 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 multiplierPerBlock after hitting a specified utilization point * @param kink1_ The utilization point at which the interest rate is fixed * @param kink2_ The utilization point at which the jump multiplier is applied * @param roof_ The utilization point at which the borrow rate is fixed */ function updateTripleRateModelInternal( uint256 baseRatePerYear, uint256 multiplierPerYear, uint256 jumpMultiplierPerYear, uint256 kink1_, uint256 kink2_, uint256 roof_ ) internal { require(kink1_ <= kink2_, "kink1 must less than or equal to kink2"); require(roof_ >= minRoofValue, "invalid roof value"); baseRatePerBlock = baseRatePerYear.div(blocksPerYear); multiplierPerBlock = (multiplierPerYear.mul(1e18)).div(blocksPerYear.mul(kink1_)); jumpMultiplierPerBlock = jumpMultiplierPerYear.div(blocksPerYear); kink1 = kink1_; kink2 = kink2_; roof = roof_; emit NewInterestParams(baseRatePerBlock, multiplierPerBlock, jumpMultiplierPerBlock, kink1, kink2, roof); } }
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( uint256 cash, uint256 borrows, uint256 reserves ) external view returns (uint256); /** * @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( uint256 cash, uint256 borrows, uint256 reserves, uint256 reserveFactorMantissa ) external view returns (uint256); }
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; } }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
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":"kink1_","type":"uint256"},{"internalType":"uint256","name":"kink2_","type":"uint256"},{"internalType":"uint256","name":"roof_","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"baseRatePerBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"multiplierPerBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"jumpMultiplierPerBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"kink1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"kink2","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"roof","type":"uint256"}],"name":"NewInterestParams","type":"event"},{"constant":true,"inputs":[],"name":"baseRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"blocksPerYear","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":"jumpMultiplierPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"kink1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"kink2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"multiplierPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"roof","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":"utilizationRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516109f33803806109f3833981810160405260c081101561003357600080fd5b508051602082015160408301516060840151608085015160a090950151939492939192909161006f8686868686866001600160e01b0361007a16565b505050505050610357565b818311156100b95760405162461bcd60e51b81526004018080602001828103825260268152602001806109cd6026913960400191505060405180910390fd5b670de0b6b3a764000081101561010b576040805162461bcd60e51b8152602060048201526012602482015271696e76616c696420726f6f662076616c756560701b604482015290519081900360640190fd5b6101266301e133808761020b60201b6104161790919060201c565b6001556101766101456301e133808561025c602090811b6103b417901c565b610164670de0b6b3a76400008861025c60201b6103b41790919060201c565b61020b60201b6104161790919060201c565b600055610192846301e1338061020b602090811b61041617901c565b600281905560038490556004839055600582905560015460005460408051928352602083019190915281810192909252606081018590526080810184905260a0810183905290517f4b73aac5f6a6d7f85af810fb244e35fa994ef635f5806dadef27143533fb64369181900360c00190a1505050505050565b600061025383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506102b560201b60201c565b90505b92915050565b60008261026b57506000610256565b8282028284828161027857fe5b04146102535760405162461bcd60e51b81526004018080602001828103825260218152602001806109ac6021913960400191505060405180910390fd5b600081836103415760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156103065781810151838201526020016102ee565b50505050905090810190601f1680156103335780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161034d57fe5b0495945050505050565b610646806103666000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80638726bb89116100715780638726bb891461013e578063a385fb9614610146578063b81688161461014e578063b9f9850a1461017d578063d34f611414610185578063f14039de1461018d576100a9565b806315f24053146100ae5780632191f92a146100e957806350af8cd614610105578063573be0fb1461010d5780636e71e2d814610115575b600080fd5b6100d7600480360360608110156100c457600080fd5b5080359060208101359060400135610195565b60408051918252519081900360200190f35b6100f161029f565b604080519115158252519081900360200190f35b6100d76102a4565b6100d76102aa565b6100d76004803603606081101561012b57600080fd5b50803590602081013590604001356102b0565b6100d7610315565b6100d761031b565b6100d76004803603608081101561016457600080fd5b5080359060208101359060408101359060600135610323565b6100d76103a2565b6100d76103a8565b6100d76103ae565b6000806101a38585856102b0565b905060035481116101f5576101ed6001546101e1670de0b6b3a76400006101d5600054866103b490919063ffffffff16565b9063ffffffff61041616565b9063ffffffff61045816565b915050610298565b6004548111610227576101ed6001546101e1670de0b6b3a76400006101d56000546003546103b490919063ffffffff16565b60006102526001546101e1670de0b6b3a76400006101d56000546003546103b490919063ffffffff16565b9050600061026b600454846104b290919063ffffffff16565b9050610292826101e1670de0b6b3a76400006101d5600254866103b490919063ffffffff16565b93505050505b9392505050565b600181565b60045481565b60055481565b6000826102bf57506000610298565b60006102fc6102e4846102d8888863ffffffff61045816565b9063ffffffff6104b216565b6101d586670de0b6b3a764000063ffffffff6103b416565b905060055481111561030d57506005545b949350505050565b60005481565b6301e1338081565b60008061033e670de0b6b3a76400008463ffffffff6104b216565b9050600061034d878787610195565b9050600061036d670de0b6b3a76400006101d5848663ffffffff6103b416565b9050610396670de0b6b3a76400006101d58361038a8c8c8c6102b0565b9063ffffffff6103b416565b98975050505050505050565b60025481565b60035481565b60015481565b6000826103c357506000610410565b828202828482816103d057fe5b041461040d5760405162461bcd60e51b81526004018080602001828103825260218152602001806105f16021913960400191505060405180910390fd5b90505b92915050565b600061040d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506104f4565b60008282018381101561040d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061040d83836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f7700815250610596565b600081836105805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561054557818101518382015260200161052d565b50505050905090810190601f1680156105725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161058c57fe5b0495945050505050565b600081848411156105e85760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561054557818101518382015260200161052d565b50505090039056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72315820a84e154aa150123c2732213ffb4eca65d96b089606732060bb0942aa777ef23464736f6c63430005110032536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776b696e6b31206d757374206c657373207468616e206f7220657175616c20746f206b696e6b32000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f161421c8e00000000000000000000000000000000000000000000000000004563918244f4000000000000000000000000000000000000000000000000000009b6e64a8ec600000000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000014d1120d7b160000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80638726bb89116100715780638726bb891461013e578063a385fb9614610146578063b81688161461014e578063b9f9850a1461017d578063d34f611414610185578063f14039de1461018d576100a9565b806315f24053146100ae5780632191f92a146100e957806350af8cd614610105578063573be0fb1461010d5780636e71e2d814610115575b600080fd5b6100d7600480360360608110156100c457600080fd5b5080359060208101359060400135610195565b60408051918252519081900360200190f35b6100f161029f565b604080519115158252519081900360200190f35b6100d76102a4565b6100d76102aa565b6100d76004803603606081101561012b57600080fd5b50803590602081013590604001356102b0565b6100d7610315565b6100d761031b565b6100d76004803603608081101561016457600080fd5b5080359060208101359060408101359060600135610323565b6100d76103a2565b6100d76103a8565b6100d76103ae565b6000806101a38585856102b0565b905060035481116101f5576101ed6001546101e1670de0b6b3a76400006101d5600054866103b490919063ffffffff16565b9063ffffffff61041616565b9063ffffffff61045816565b915050610298565b6004548111610227576101ed6001546101e1670de0b6b3a76400006101d56000546003546103b490919063ffffffff16565b60006102526001546101e1670de0b6b3a76400006101d56000546003546103b490919063ffffffff16565b9050600061026b600454846104b290919063ffffffff16565b9050610292826101e1670de0b6b3a76400006101d5600254866103b490919063ffffffff16565b93505050505b9392505050565b600181565b60045481565b60055481565b6000826102bf57506000610298565b60006102fc6102e4846102d8888863ffffffff61045816565b9063ffffffff6104b216565b6101d586670de0b6b3a764000063ffffffff6103b416565b905060055481111561030d57506005545b949350505050565b60005481565b6301e1338081565b60008061033e670de0b6b3a76400008463ffffffff6104b216565b9050600061034d878787610195565b9050600061036d670de0b6b3a76400006101d5848663ffffffff6103b416565b9050610396670de0b6b3a76400006101d58361038a8c8c8c6102b0565b9063ffffffff6103b416565b98975050505050505050565b60025481565b60035481565b60015481565b6000826103c357506000610410565b828202828482816103d057fe5b041461040d5760405162461bcd60e51b81526004018080602001828103825260218152602001806105f16021913960400191505060405180910390fd5b90505b92915050565b600061040d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506104f4565b60008282018381101561040d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061040d83836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f7700815250610596565b600081836105805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561054557818101518382015260200161052d565b50505050905090810190601f1680156105725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161058c57fe5b0495945050505050565b600081848411156105e85760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561054557818101518382015260200161052d565b50505090039056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72315820a84e154aa150123c2732213ffb4eca65d96b089606732060bb0942aa777ef23464736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f161421c8e00000000000000000000000000000000000000000000000000004563918244f4000000000000000000000000000000000000000000000000000009b6e64a8ec600000000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000014d1120d7b160000
-----Decoded View---------------
Arg [0] : baseRatePerYear (uint256): 0
Arg [1] : multiplierPerYear (uint256): 140000000000000000
Arg [2] : jumpMultiplierPerYear (uint256): 5000000000000000000
Arg [3] : kink1_ (uint256): 700000000000000000
Arg [4] : kink2_ (uint256): 800000000000000000
Arg [5] : roof_ (uint256): 1500000000000000000
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 00000000000000000000000000000000000000000000000001f161421c8e0000
Arg [2] : 0000000000000000000000000000000000000000000000004563918244f40000
Arg [3] : 00000000000000000000000000000000000000000000000009b6e64a8ec60000
Arg [4] : 0000000000000000000000000000000000000000000000000b1a2bc2ec500000
Arg [5] : 00000000000000000000000000000000000000000000000014d1120d7b160000
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.