Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
| Transaction Hash |
Method
|
Block
|
From
|
To
|
Amount
|
||||
|---|---|---|---|---|---|---|---|---|---|
Latest 15 internal transactions
| Parent Transaction Hash | Block | From | To | Amount | ||
|---|---|---|---|---|---|---|
| 23984454 | 222 days ago | 0 ETH | ||||
| 23984195 | 222 days ago | 0 ETH | ||||
| 23984097 | 222 days ago | 0 ETH | ||||
| 23984086 | 222 days ago | 0 ETH | ||||
| 23983615 | 222 days ago | 0 ETH | ||||
| 23983601 | 222 days ago | 0 ETH | ||||
| 23982962 | 222 days ago | 0 ETH | ||||
| 23978320 | 222 days ago | 0 ETH | ||||
| 23977832 | 222 days ago | 0 ETH | ||||
| 23922652 | 223 days ago | 0 ETH | ||||
| 23922611 | 223 days ago | 0 ETH | ||||
| 23919184 | 223 days ago | 0 ETH | ||||
| 23914000 | 223 days ago | 0 ETH | ||||
| 23913761 | 223 days ago | 0 ETH | ||||
| 21750561 | 248 days ago | 0 ETH |
Loading...
Loading
Contract Name:
TwoKinksInterestRateModel
Compiler Version
v0.8.25+commit.b61c2a91
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BSD-3-Clause
pragma solidity 0.8.25;
import { TimeManagerV8 } from "@venusprotocol/solidity-utilities/contracts/TimeManagerV8.sol";
import { InterestRateModel } from "./InterestRateModel.sol";
import { EXP_SCALE, MANTISSA_ONE } from "./lib/constants.sol";
/**
* @title TwoKinksInterestRateModel
* @author Venus
* @notice An interest rate model with two different slope increase or decrease each after a certain utilization threshold called **kink** is reached.
*/
contract TwoKinksInterestRateModel is InterestRateModel, TimeManagerV8 {
////////////////////// SLOPE 1 //////////////////////
/**
* @notice The multiplier of utilization rate per block or second that gives the slope 1 of the interest rate scaled by EXP_SCALE
*/
int256 public immutable MULTIPLIER_PER_BLOCK_OR_SECOND;
/**
* @notice The base interest rate per block or second which is the y-intercept when utilization rate is 0 scaled by EXP_SCALE
*/
int256 public immutable BASE_RATE_PER_BLOCK_OR_SECOND;
////////////////////// SLOPE 2 //////////////////////
/**
* @notice The utilization point at which the multiplier2 is applied
*/
int256 public immutable KINK_1;
/**
* @notice The multiplier of utilization rate per block or second that gives the slope 2 of the interest rate scaled by EXP_SCALE
*/
int256 public immutable MULTIPLIER_2_PER_BLOCK_OR_SECOND;
/**
* @notice The base interest rate per block or second which is the y-intercept when utilization rate hits KINK_1 scaled by EXP_SCALE
*/
int256 public immutable BASE_RATE_2_PER_BLOCK_OR_SECOND;
/**
* @notice The maximum kink interest rate scaled by EXP_SCALE
*/
int256 public immutable RATE_1;
////////////////////// SLOPE 3 //////////////////////
/**
* @notice The utilization point at which the jump multiplier is applied
*/
int256 public immutable KINK_2;
/**
* @notice The multiplier of utilization rate per block or second that gives the slope 3 of interest rate scaled by EXP_SCALE
*/
int256 public immutable JUMP_MULTIPLIER_PER_BLOCK_OR_SECOND;
/**
* @notice The maximum kink interest rate scaled by EXP_SCALE
*/
int256 public immutable RATE_2;
/**
* @notice Thrown when a negative value is not allowed
*/
error NegativeValueNotAllowed();
/**
* @notice Thrown when the kink points are not in the correct order
*/
error InvalidKink();
/**
* @notice Construct an interest rate model
* @param baseRatePerYear_ The approximate target base APR, as a mantissa (scaled by EXP_SCALE)
* @param multiplierPerYear_ The rate of increase or decrease in interest rate wrt utilization (scaled by EXP_SCALE)
* @param kink1_ The utilization point at which the multiplier2 is applied
* @param multiplier2PerYear_ The rate of increase or decrease in interest rate wrt utilization after hitting KINK_1 (scaled by EXP_SCALE)
* @param baseRate2PerYear_ The additonal base APR after hitting KINK_1, as a mantissa (scaled by EXP_SCALE)
* @param kink2_ The utilization point at which the jump multiplier is applied
* @param jumpMultiplierPerYear_ The multiplier after hitting KINK_2
* @param timeBased_ A boolean indicating whether the contract is based on time or block.
* @param blocksPerYear_ The number of blocks per year
*/
constructor(
int256 baseRatePerYear_,
int256 multiplierPerYear_,
int256 kink1_,
int256 multiplier2PerYear_,
int256 baseRate2PerYear_,
int256 kink2_,
int256 jumpMultiplierPerYear_,
bool timeBased_,
uint256 blocksPerYear_
) TimeManagerV8(timeBased_, blocksPerYear_) {
if (baseRatePerYear_ < 0 || baseRate2PerYear_ < 0) {
revert NegativeValueNotAllowed();
}
if (kink2_ <= kink1_ || kink1_ <= 0) {
revert InvalidKink();
}
int256 blocksOrSecondsPerYear_ = int256(blocksOrSecondsPerYear);
BASE_RATE_PER_BLOCK_OR_SECOND = baseRatePerYear_ / blocksOrSecondsPerYear_;
MULTIPLIER_PER_BLOCK_OR_SECOND = multiplierPerYear_ / blocksOrSecondsPerYear_;
KINK_1 = kink1_;
MULTIPLIER_2_PER_BLOCK_OR_SECOND = multiplier2PerYear_ / blocksOrSecondsPerYear_;
BASE_RATE_2_PER_BLOCK_OR_SECOND = baseRate2PerYear_ / blocksOrSecondsPerYear_;
KINK_2 = kink2_;
JUMP_MULTIPLIER_PER_BLOCK_OR_SECOND = jumpMultiplierPerYear_ / blocksOrSecondsPerYear_;
int256 expScale = int256(EXP_SCALE);
RATE_1 = (((KINK_1 * MULTIPLIER_PER_BLOCK_OR_SECOND) / expScale) + BASE_RATE_PER_BLOCK_OR_SECOND);
int256 slope2Util;
unchecked {
slope2Util = KINK_2 - KINK_1;
}
RATE_2 = ((slope2Util * MULTIPLIER_2_PER_BLOCK_OR_SECOND) / expScale) + BASE_RATE_2_PER_BLOCK_OR_SECOND;
}
/**
* @notice Calculates the current borrow rate per slot (block or 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 badDebt The amount of badDebt in the market
* @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)
*/
function getBorrowRate(
uint256 cash,
uint256 borrows,
uint256 reserves,
uint256 badDebt
) external view override returns (uint256) {
return _getBorrowRate(cash, borrows, reserves, badDebt);
}
/**
* @notice Calculates the current supply rate per slot (block or 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
* @param badDebt The amount of badDebt in the market
* @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)
*/
function getSupplyRate(
uint256 cash,
uint256 borrows,
uint256 reserves,
uint256 reserveFactorMantissa,
uint256 badDebt
) public view virtual override returns (uint256) {
uint256 oneMinusReserveFactor = MANTISSA_ONE - reserveFactorMantissa;
uint256 borrowRate = _getBorrowRate(cash, borrows, reserves, badDebt);
uint256 rateToPool = (borrowRate * oneMinusReserveFactor) / EXP_SCALE;
uint256 incomeToDistribute = borrows * rateToPool;
uint256 supply = cash + borrows + badDebt - reserves;
return incomeToDistribute / supply;
}
/**
* @notice Calculates the utilization rate of the market: `(borrows + badDebt) / (cash + borrows + badDebt - 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)
* @param badDebt The amount of badDebt in the market
* @return The utilization rate as a mantissa between [0, MANTISSA_ONE]
*/
function utilizationRate(
uint256 cash,
uint256 borrows,
uint256 reserves,
uint256 badDebt
) public pure returns (uint256) {
// Utilization rate is 0 when there are no borrows and badDebt
if ((borrows + badDebt) == 0) {
return 0;
}
uint256 rate = ((borrows + badDebt) * EXP_SCALE) / (cash + borrows + badDebt - reserves);
if (rate > EXP_SCALE) {
rate = EXP_SCALE;
}
return rate;
}
/**
* @notice Calculates the current borrow rate per slot (block or 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
* @param badDebt The amount of badDebt in the market
* @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)
*/
function _getBorrowRate(
uint256 cash,
uint256 borrows,
uint256 reserves,
uint256 badDebt
) internal view returns (uint256) {
int256 util = int256(utilizationRate(cash, borrows, reserves, badDebt));
int256 expScale = int256(EXP_SCALE);
if (util < KINK_1) {
return _minCap(((util * MULTIPLIER_PER_BLOCK_OR_SECOND) / expScale) + BASE_RATE_PER_BLOCK_OR_SECOND);
} else if (util < KINK_2) {
int256 slope2Util;
unchecked {
slope2Util = util - KINK_1;
}
int256 rate2 = ((slope2Util * MULTIPLIER_2_PER_BLOCK_OR_SECOND) / expScale) +
BASE_RATE_2_PER_BLOCK_OR_SECOND;
return _minCap(RATE_1 + rate2);
} else {
int256 slope3Util;
unchecked {
slope3Util = util - KINK_2;
}
int256 rate3 = ((slope3Util * JUMP_MULTIPLIER_PER_BLOCK_OR_SECOND) / expScale);
return _minCap(RATE_1 + RATE_2 + rate3);
}
}
/**
* @notice Returns 0 if number is less than 0, otherwise returns the input
* @param number The first number
* @return The maximum of 0 and input number
*/
function _minCap(int256 number) internal pure returns (uint256) {
int256 zero;
return uint256(number > zero ? number : zero);
}
}// SPDX-License-Identifier: BSD-3-Clause
pragma solidity 0.8.25;
import { SECONDS_PER_YEAR } from "./constants.sol";
abstract contract TimeManagerV8 {
/// @notice Stores blocksPerYear if isTimeBased is true else secondsPerYear is stored
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable
uint256 public immutable blocksOrSecondsPerYear;
/// @notice Acknowledges if a contract is time based or not
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable
bool public immutable isTimeBased;
/// @notice Stores the current block timestamp or block number depending on isTimeBased
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable
function() view returns (uint256) private immutable _getCurrentSlot;
/**
* @dev This empty reserved space is put in place to allow future versions to add new
* variables without shifting down storage in the inheritance chain
* See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
*/
uint256[48] private __gap;
/// @notice Thrown when blocks per year is invalid
error InvalidBlocksPerYear();
/// @notice Thrown when time based but blocks per year is provided
error InvalidTimeBasedConfiguration();
/**
* @param timeBased_ A boolean indicating whether the contract is based on time or block
* If timeBased is true than blocksPerYear_ param is ignored as blocksOrSecondsPerYear is set to SECONDS_PER_YEAR
* @param blocksPerYear_ The number of blocks per year
* @custom:error InvalidBlocksPerYear is thrown if blocksPerYear entered is zero and timeBased is false
* @custom:error InvalidTimeBasedConfiguration is thrown if blocksPerYear entered is non zero and timeBased is true
* @custom:oz-upgrades-unsafe-allow constructor
*/
constructor(bool timeBased_, uint256 blocksPerYear_) {
if (!timeBased_ && blocksPerYear_ == 0) {
revert InvalidBlocksPerYear();
}
if (timeBased_ && blocksPerYear_ != 0) {
revert InvalidTimeBasedConfiguration();
}
isTimeBased = timeBased_;
blocksOrSecondsPerYear = timeBased_ ? SECONDS_PER_YEAR : blocksPerYear_;
_getCurrentSlot = timeBased_ ? _getBlockTimestamp : _getBlockNumber;
}
/**
* @dev Function to simply retrieve block number or block timestamp
* @return Current block number or block timestamp
*/
function getBlockNumberOrTimestamp() public view virtual returns (uint256) {
return _getCurrentSlot();
}
/**
* @dev Returns the current timestamp in seconds
* @return The current timestamp
*/
function _getBlockTimestamp() private view returns (uint256) {
return block.timestamp;
}
/**
* @dev Returns the current block number
* @return The current block number
*/
function _getBlockNumber() private view returns (uint256) {
return block.number;
}
}// SPDX-License-Identifier: BSD-3-Clause pragma solidity ^0.8.25; /// @dev Base unit for computations, usually used in scaling (multiplications, divisions) uint256 constant EXP_SCALE = 1e18; /// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions uint256 constant MANTISSA_ONE = EXP_SCALE; /// @dev The approximate number of seconds per year uint256 constant SECONDS_PER_YEAR = 31_536_000;
// SPDX-License-Identifier: BSD-3-Clause
pragma solidity 0.8.25;
/**
* @title Compound's InterestRateModel Interface
* @author Compound
*/
abstract contract InterestRateModel {
/**
* @notice Calculates the current borrow interest rate per slot (block or second)
* @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 badDebt The amount of badDebt in the market
* @return The borrow rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)
*/
function getBorrowRate(
uint256 cash,
uint256 borrows,
uint256 reserves,
uint256 badDebt
) external view virtual returns (uint256);
/**
* @notice Calculates the current supply interest rate per slot (block or second)
* @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
* @param badDebt The amount of badDebt in the market
* @return The supply rate percentage per slot (block or second) as a mantissa (scaled by EXP_SCALE)
*/
function getSupplyRate(
uint256 cash,
uint256 borrows,
uint256 reserves,
uint256 reserveFactorMantissa,
uint256 badDebt
) external view virtual returns (uint256);
/**
* @notice Indicator that this is an InterestRateModel contract (for inspection)
* @return Always true
*/
function isInterestRateModel() external pure virtual returns (bool) {
return true;
}
}// SPDX-License-Identifier: BSD-3-Clause pragma solidity ^0.8.25; /// @dev The approximate number of seconds per year uint256 constant SECONDS_PER_YEAR = 31_536_000; /// @dev Base unit for computations, usually used in scaling (multiplications, divisions) uint256 constant EXP_SCALE = 1e18; /// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions uint256 constant MANTISSA_ONE = EXP_SCALE;
{
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs",
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [],
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract ABI
API[{"inputs":[{"internalType":"int256","name":"baseRatePerYear_","type":"int256"},{"internalType":"int256","name":"multiplierPerYear_","type":"int256"},{"internalType":"int256","name":"kink1_","type":"int256"},{"internalType":"int256","name":"multiplier2PerYear_","type":"int256"},{"internalType":"int256","name":"baseRate2PerYear_","type":"int256"},{"internalType":"int256","name":"kink2_","type":"int256"},{"internalType":"int256","name":"jumpMultiplierPerYear_","type":"int256"},{"internalType":"bool","name":"timeBased_","type":"bool"},{"internalType":"uint256","name":"blocksPerYear_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidBlocksPerYear","type":"error"},{"inputs":[],"name":"InvalidKink","type":"error"},{"inputs":[],"name":"InvalidTimeBasedConfiguration","type":"error"},{"inputs":[],"name":"NegativeValueNotAllowed","type":"error"},{"inputs":[],"name":"BASE_RATE_2_PER_BLOCK_OR_SECOND","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_RATE_PER_BLOCK_OR_SECOND","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"JUMP_MULTIPLIER_PER_BLOCK_OR_SECOND","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KINK_1","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KINK_2","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MULTIPLIER_2_PER_BLOCK_OR_SECOND","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MULTIPLIER_PER_BLOCK_OR_SECOND","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RATE_1","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RATE_2","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksOrSecondsPerYear","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockNumberOrTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"cash","type":"uint256"},{"internalType":"uint256","name":"borrows","type":"uint256"},{"internalType":"uint256","name":"reserves","type":"uint256"},{"internalType":"uint256","name":"badDebt","type":"uint256"}],"name":"getBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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"},{"internalType":"uint256","name":"badDebt","type":"uint256"}],"name":"getSupplyRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isInterestRateModel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"isTimeBased","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"cash","type":"uint256"},{"internalType":"uint256","name":"borrows","type":"uint256"},{"internalType":"uint256","name":"reserves","type":"uint256"},{"internalType":"uint256","name":"badDebt","type":"uint256"}],"name":"utilizationRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}]Contract Creation Code
61020060405234801561001157600080fd5b50604051610ca8380380610ca883398101604081905261003091610209565b81818115801561003e575080155b1561005c576040516302723dfb60e21b815260040160405180910390fd5b81801561006857508015155b156100865760405163ae0fcab360e01b815260040160405180910390fd5b81151560a05281610097578061009d565b6301e133805b608052816100b45761020160201b610480176100bf565b61020560201b610484175b6001600160401b031660c052505060008912806100dc5750600085125b156100fa576040516341820e7560e11b815260040160405180910390fd5b868413158061010a575060008713155b1561012857604051637099641d60e11b815260040160405180910390fd5b608051610135818b610298565b61010052610143818a610298565b60e0526101208890526101568188610298565b610140526101648187610298565b610160526101a08590526101788185610298565b6101c0526101005160e05161012051670de0b6b3a76400009291839161019e91906102d4565b6101a89190610298565b6101b2919061030a565b61018052610120516101a0516101605161014051929091039183906101d790846102d4565b6101e19190610298565b6101eb919061030a565b6101e052506103329a5050505050505050505050565b4390565b4290565b60008060008060008060008060006101208a8c03121561022857600080fd5b8951985060208a0151975060408a0151965060608a0151955060808a0151945060a08a0151935060c08a0151925060e08a0151801515811461026957600080fd5b809250506101008a015190509295985092959850929598565b634e487b7160e01b600052601160045260246000fd5b6000826102b557634e487b7160e01b600052601260045260246000fd5b600160ff1b8214600019841416156102cf576102cf610282565b500590565b80820260008212600160ff1b841416156102f0576102f0610282565b818105831482151761030457610304610282565b92915050565b808201828112600083128015821682158216171561032a5761032a610282565b505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610891610417600039600081816102180152610687015260008181610169015261064d0152600081816101ca0152818161053d0152610624015260008181610109015281816105f301526106a80152600081816102c7015261058a0152600081816102f601526105af0152600081816101f1015281816104a401526105650152600081816101a301526104cf01526000818161027901526104f401526000610454015260006102a00152600061023f01526108916000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c80635d0054c411610097578063c7ad089511610066578063c7ad08951461029b578063d783c4c8146102c2578063e1d146fb146102e9578063ef882f19146102f157600080fd5b80635d0054c4146102135780636857249c1461023a57806370d3c43f14610261578063a22ed0f81461027457600080fd5b80632191f92a116100d35780632191f92a1461018b57806333da32671461019e57806338afe9c4146101c55780633b53e888146101ec57600080fd5b8062084e8914610104578063073b8a741461013e5780630cde8d1c1461015157806310c68e4b14610164575b600080fd5b61012b7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61012b61014c3660046106e5565b610318565b61012b61015f366004610717565b610331565b61012b7f000000000000000000000000000000000000000000000000000000000000000081565b60015b6040519015158152602001610135565b61012b7f000000000000000000000000000000000000000000000000000000000000000081565b61012b7f000000000000000000000000000000000000000000000000000000000000000081565b61012b7f000000000000000000000000000000000000000000000000000000000000000081565b61012b7f000000000000000000000000000000000000000000000000000000000000000081565b61012b7f000000000000000000000000000000000000000000000000000000000000000081565b61012b61026f3660046106e5565b6103c4565b61012b7f000000000000000000000000000000000000000000000000000000000000000081565b61018e7f000000000000000000000000000000000000000000000000000000000000000081565b61012b7f000000000000000000000000000000000000000000000000000000000000000081565b61012b61044d565b61012b7f000000000000000000000000000000000000000000000000000000000000000081565b600061032685858585610488565b90505b949350505050565b60008061034684670de0b6b3a7640000610768565b9050600061035688888887610488565b90506000670de0b6b3a764000061036d8484610781565b61037791906107ae565b90506000610385828a610781565b9050600088876103958c8e6107c2565b61039f91906107c2565b6103a99190610768565b90506103b581836107ae565b9b9a5050505050505050505050565b60006103d082856107c2565b6000036103df57506000610329565b600083836103ed87896107c2565b6103f791906107c2565b6104019190610768565b670de0b6b3a764000061041485886107c2565b61041e9190610781565b61042891906107ae565b9050670de0b6b3a76400008111156103265750670de0b6b3a764000095945050505050565b600061047b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16565b905090565b4390565b4290565b600080610497868686866103c4565b9050670de0b6b3a76400007f000000000000000000000000000000000000000000000000000000000000000082121561053b576105327f0000000000000000000000000000000000000000000000000000000000000000826105197f0000000000000000000000000000000000000000000000000000000000000000866107d5565b6105239190610805565b61052d9190610833565b6106cc565b92505050610329565b7f0000000000000000000000000000000000000000000000000000000000000000821215610622577f0000000000000000000000000000000000000000000000000000000000000000820360007f0000000000000000000000000000000000000000000000000000000000000000836105d47f0000000000000000000000000000000000000000000000000000000000000000856107d5565b6105de9190610805565b6105e89190610833565b905061061761052d827f0000000000000000000000000000000000000000000000000000000000000000610833565b945050505050610329565b7f000000000000000000000000000000000000000000000000000000000000000082036000826106727f0000000000000000000000000000000000000000000000000000000000000000846107d5565b61067c9190610805565b9050610617816105237f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610833565b6000808083136106dc57806106de565b825b9392505050565b600080600080608085870312156106fb57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a0868803121561072f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561077b5761077b610752565b92915050565b808202811582820484141761077b5761077b610752565b634e487b7160e01b600052601260045260246000fd5b6000826107bd576107bd610798565b500490565b8082018082111561077b5761077b610752565b80820260008212600160ff1b841416156107f1576107f1610752565b818105831482151761077b5761077b610752565b60008261081457610814610798565b600160ff1b82146000198414161561082e5761082e610752565b500590565b808201828112600083128015821682158216171561085357610853610752565b50509291505056fea264697066735822122041efee9a74a0a97d8aa0303dcaa41d2664d817542f0d86ea7ea347b935e7418464736f6c634300081900330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000009b6e64a8ec6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7d713b49da000000000000000000000000000000000000000000000000000022b1c8c1227a000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ff5760003560e01c80635d0054c411610097578063c7ad089511610066578063c7ad08951461029b578063d783c4c8146102c2578063e1d146fb146102e9578063ef882f19146102f157600080fd5b80635d0054c4146102135780636857249c1461023a57806370d3c43f14610261578063a22ed0f81461027457600080fd5b80632191f92a116100d35780632191f92a1461018b57806333da32671461019e57806338afe9c4146101c55780633b53e888146101ec57600080fd5b8062084e8914610104578063073b8a741461013e5780630cde8d1c1461015157806310c68e4b14610164575b600080fd5b61012b7f0000000000000000000000000000000000000000000000000000000097343dfe81565b6040519081526020015b60405180910390f35b61012b61014c3660046106e5565b610318565b61012b61015f366004610717565b610331565b61012b7f000000000000000000000000000000000000000000000000000000127520915781565b60015b6040519015158152602001610135565b61012b7f000000000000000000000000000000000000000000000000000000000000000081565b61012b7f0000000000000000000000000000000000000000000000000c7d713b49da000081565b61012b7f0000000000000000000000000000000000000000000000000b1a2bc2ec50000081565b61012b7f00000000000000000000000000000000000000000000000000000000844db63e81565b61012b7f0000000000000000000000000000000000000000000000000000000001e1338081565b61012b61026f3660046106e5565b6103c4565b61012b7f00000000000000000000000000000000000000000000000000000000bd014d7e81565b61018e7f000000000000000000000000000000000000000000000000000000000000000181565b61012b7f000000000000000000000000000000000000000000000000000000000000000081565b61012b61044d565b61012b7f000000000000000000000000000000000000000000000000000000052b091e7481565b600061032685858585610488565b90505b949350505050565b60008061034684670de0b6b3a7640000610768565b9050600061035688888887610488565b90506000670de0b6b3a764000061036d8484610781565b61037791906107ae565b90506000610385828a610781565b9050600088876103958c8e6107c2565b61039f91906107c2565b6103a99190610768565b90506103b581836107ae565b9b9a5050505050505050505050565b60006103d082856107c2565b6000036103df57506000610329565b600083836103ed87896107c2565b6103f791906107c2565b6104019190610768565b670de0b6b3a764000061041485886107c2565b61041e9190610781565b61042891906107ae565b9050670de0b6b3a76400008111156103265750670de0b6b3a764000095945050505050565b600061047b7f000000000000000000000000000000000000000000000000000002050000048463ffffffff16565b905090565b4390565b4290565b600080610497868686866103c4565b9050670de0b6b3a76400007f0000000000000000000000000000000000000000000000000b1a2bc2ec50000082121561053b576105327f0000000000000000000000000000000000000000000000000000000000000000826105197f00000000000000000000000000000000000000000000000000000000bd014d7e866107d5565b6105239190610805565b61052d9190610833565b6106cc565b92505050610329565b7f0000000000000000000000000000000000000000000000000c7d713b49da0000821215610622577f0000000000000000000000000000000000000000000000000b1a2bc2ec500000820360007f0000000000000000000000000000000000000000000000000000000000000000836105d47f000000000000000000000000000000000000000000000000000000052b091e74856107d5565b6105de9190610805565b6105e89190610833565b905061061761052d827f0000000000000000000000000000000000000000000000000000000097343dfe610833565b945050505050610329565b7f0000000000000000000000000000000000000000000000000c7d713b49da000082036000826106727f0000000000000000000000000000000000000000000000000000001275209157846107d5565b61067c9190610805565b9050610617816105237f00000000000000000000000000000000000000000000000000000000844db63e7f0000000000000000000000000000000000000000000000000000000097343dfe610833565b6000808083136106dc57806106de565b825b9392505050565b600080600080608085870312156106fb57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a0868803121561072f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561077b5761077b610752565b92915050565b808202811582820484141761077b5761077b610752565b634e487b7160e01b600052601260045260246000fd5b6000826107bd576107bd610798565b500490565b8082018082111561077b5761077b610752565b80820260008212600160ff1b841416156107f1576107f1610752565b818105831482151761077b5761077b610752565b60008261081457610814610798565b600160ff1b82146000198414161561082e5761082e610752565b500590565b808201828112600083128015821682158216171561085357610853610752565b50509291505056fea264697066735822122041efee9a74a0a97d8aa0303dcaa41d2664d817542f0d86ea7ea347b935e7418464736f6c63430008190033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000009b6e64a8ec6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7d713b49da000000000000000000000000000000000000000000000000000022b1c8c1227a000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseRatePerYear_ (int256): 0
Arg [1] : multiplierPerYear_ (int256): 100000000000000000
Arg [2] : kink1_ (int256): 800000000000000000
Arg [3] : multiplier2PerYear_ (int256): 700000000000000000
Arg [4] : baseRate2PerYear_ (int256): 0
Arg [5] : kink2_ (int256): 900000000000000000
Arg [6] : jumpMultiplierPerYear_ (int256): 2500000000000000000
Arg [7] : timeBased_ (bool): True
Arg [8] : blocksPerYear_ (uint256): 0
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [2] : 0000000000000000000000000000000000000000000000000b1a2bc2ec500000
Arg [3] : 00000000000000000000000000000000000000000000000009b6e64a8ec60000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000c7d713b49da0000
Arg [6] : 00000000000000000000000000000000000000000000000022b1c8c1227a0000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.