ETH Price: $3,310.58 (-0.87%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VariableInterestRate

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 100000 runs

Other Settings:
default evmVersion
File 1 of 3 : VariableInterestRate.sol
// SPDX-License-Identifier: ISC
pragma solidity ^0.8.17;

// ====================================================================
// |     ______                   _______                             |
// |    / _____________ __  __   / ____(_____  ____ _____  ________   |
// |   / /_  / ___/ __ `| |/_/  / /_  / / __ \/ __ `/ __ \/ ___/ _ \  |
// |  / __/ / /  / /_/ _>  <   / __/ / / / / / /_/ / / / / /__/  __/  |
// | /_/   /_/   \__,_/_/|_|  /_/   /_/_/ /_/\__,_/_/ /_/\___/\___/   |
// |                                                                  |
// ====================================================================
// ====================== VariableInterestRate ========================
// ====================================================================
// Frax Finance: https://github.com/FraxFinance

// Primary Author
// Drake Evans: https://github.com/DrakeEvans

// Reviewers
// Dennis: https://github.com/denett

// ====================================================================

import "@openzeppelin/contracts/utils/Strings.sol";
import "./interfaces/IRateCalculatorV2.sol";

/// @title A formula for calculating interest rates as a function of utilization and time
/// @author Drake Evans github.com/drakeevans
/// @notice A Contract for calculating interest rates as a function of utilization and time
contract VariableInterestRate is IRateCalculatorV2 {
    using Strings for uint256;

    // Name Suffix
    string public suffix;

    // Utilization Settings
    /// @notice The minimimum utilization wherein no adjustment to full utilization and vertex rates occurs
    uint256 public immutable MIN_TARGET_UTIL;
    /// @notice The maximum utilization wherein no adjustment to full utilization and vertex rates occurs
    uint256 public immutable MAX_TARGET_UTIL;
    /// @notice The utilization at which the slope increases
    uint256 public immutable VERTEX_UTILIZATION;
    /// @notice precision of utilization calculations
    uint256 public constant UTIL_PREC = 1e5; // 5 decimals

    // Interest Rate Settings (all rates are per second), 365.24 days per year
    /// @notice The minimum interest rate (per second) when utilization is 100%
    uint256 public immutable MIN_FULL_UTIL_RATE; // 18 decimals
    /// @notice The maximum interest rate (per second) when utilization is 100%
    uint256 public immutable MAX_FULL_UTIL_RATE; // 18 decimals
    /// @notice The interest rate (per second) when utilization is 0%
    uint256 public immutable ZERO_UTIL_RATE; // 18 decimals
    /// @notice The interest rate half life in seconds, determines rate of adjustments to rate curve
    uint256 public immutable RATE_HALF_LIFE; // 1 decimals
    /// @notice The percent of the delta between max and min
    uint256 public immutable VERTEX_RATE_PERCENT; // 18 decimals
    /// @notice The precision of interest rate calculations
    uint256 public constant RATE_PREC = 1e18; // 18 decimals

    /// @notice The ```constructor``` function
    /// @param _vertexUtilization The utilization at which the slope increases
    /// @param _vertexRatePercentOfDelta The percent of the delta between max and min, defines vertex rate
    /// @param _minUtil The minimimum utilization wherein no adjustment to full utilization and vertex rates occurs
    /// @param _maxUtil The maximum utilization wherein no adjustment to full utilization and vertex rates occurs
    /// @param _zeroUtilizationRate The interest rate (per second) when utilization is 0%
    /// @param _minFullUtilizationRate The minimum interest rate at 100% utilization
    /// @param _maxFullUtilizationRate The maximum interest rate at 100% utilization
    /// @param _rateHalfLife The half life parameter for interest rate adjustments
    constructor(
        string memory _suffix,
        uint256 _vertexUtilization,
        uint256 _vertexRatePercentOfDelta,
        uint256 _minUtil,
        uint256 _maxUtil,
        uint256 _zeroUtilizationRate,
        uint256 _minFullUtilizationRate,
        uint256 _maxFullUtilizationRate,
        uint256 _rateHalfLife
    ) {
        suffix = _suffix;
        MIN_TARGET_UTIL = _minUtil;
        MAX_TARGET_UTIL = _maxUtil;
        VERTEX_UTILIZATION = _vertexUtilization;
        ZERO_UTIL_RATE = _zeroUtilizationRate;
        MIN_FULL_UTIL_RATE = _minFullUtilizationRate;
        MAX_FULL_UTIL_RATE = _maxFullUtilizationRate;
        RATE_HALF_LIFE = _rateHalfLife;
        VERTEX_RATE_PERCENT = _vertexRatePercentOfDelta;
    }

    /// @notice The ```name``` function returns the name of the rate contract
    /// @return memory name of contract
    function name() external view returns (string memory) {
        return
            string(
                abi.encodePacked(
                    "Variable Rate V2 ",
                    suffix
                )
            );
    }

    /// @notice The ```version``` function returns the semantic version of the rate contract
    /// @dev Follows semantic versioning
    /// @return _major Major version
    /// @return _minor Minor version
    /// @return _patch Patch version
    function version() external pure returns (uint256 _major, uint256 _minor, uint256 _patch) {
        _major = 2;
        _minor = 0;
        _patch = 0;
    }

    /// @notice The ```getFullUtilizationInterest``` function calculate the new maximum interest rate, i.e. rate when utilization is 100%
    /// @dev Given in interest per second
    /// @param _deltaTime The elapsed time since last update given in seconds
    /// @param _utilization The utilization %, given with 5 decimals of precision
    /// @param _fullUtilizationInterest The interest value when utilization is 100%, given with 18 decimals of precision
    /// @return _newFullUtilizationInterest The new maximum interest rate
    function getFullUtilizationInterest(uint256 _deltaTime, uint256 _utilization, uint64 _fullUtilizationInterest)
        internal
        view
        returns (uint64 _newFullUtilizationInterest)
    {
        if (_utilization < MIN_TARGET_UTIL) {
            // 18 decimals
            uint256 _deltaUtilization = ((MIN_TARGET_UTIL - _utilization) * 1e18) / MIN_TARGET_UTIL;
            // 36 decimals
            uint256 _decayGrowth = (RATE_HALF_LIFE * 1e36) + (_deltaUtilization * _deltaUtilization * _deltaTime);
            // 18 decimals
            _newFullUtilizationInterest = uint64((_fullUtilizationInterest * (RATE_HALF_LIFE * 1e36)) / _decayGrowth);
        } else if (_utilization > MAX_TARGET_UTIL) {
            // 18 decimals
            uint256 _deltaUtilization = ((_utilization - MAX_TARGET_UTIL) * 1e18) / (UTIL_PREC - MAX_TARGET_UTIL);
            // 36 decimals
            uint256 _decayGrowth = (RATE_HALF_LIFE * 1e36) + (_deltaUtilization * _deltaUtilization * _deltaTime);
            // 18 decimals
            _newFullUtilizationInterest = uint64((_fullUtilizationInterest * _decayGrowth) / (RATE_HALF_LIFE * 1e36));
        } else {
            _newFullUtilizationInterest = _fullUtilizationInterest;
        }
        if (_newFullUtilizationInterest > MAX_FULL_UTIL_RATE) {
            _newFullUtilizationInterest = uint64(MAX_FULL_UTIL_RATE);
        } else if (_newFullUtilizationInterest < MIN_FULL_UTIL_RATE) {
            _newFullUtilizationInterest = uint64(MIN_FULL_UTIL_RATE);
        }
    }

    /// @notice The ```getNewRate``` function calculates interest rates using two linear functions f(utilization)
    /// @param _deltaTime The elapsed time since last update, given in seconds
    /// @param _utilization The utilization %, given with 5 decimals of precision
    /// @param _oldFullUtilizationInterest The interest value when utilization is 100%, given with 18 decimals of precision
    /// @return _newRatePerSec The new interest rate, 18 decimals of precision
    /// @return _newFullUtilizationInterest The new max interest rate, 18 decimals of precision
    function getNewRate(uint256 _deltaTime, uint256 _utilization, uint64 _oldFullUtilizationInterest)
        external
        view
        returns (uint64 _newRatePerSec, uint64 _newFullUtilizationInterest)
    {
        _newFullUtilizationInterest = getFullUtilizationInterest(_deltaTime, _utilization, _oldFullUtilizationInterest);

        // _vertexInterest is calculated as the percentage of the detla between min and max interest
        uint256 _vertexInterest = (((_newFullUtilizationInterest - ZERO_UTIL_RATE) * VERTEX_RATE_PERCENT) / RATE_PREC) +
            ZERO_UTIL_RATE;
        if (_utilization < VERTEX_UTILIZATION) {
            // For readability, the following formula is equivalent to:
            // uint256 _slope = ((_vertexInterest - ZERO_UTIL_RATE) * UTIL_PREC) / VERTEX_UTILIZATION;
            // _newRatePerSec = uint64(ZERO_UTIL_RATE + ((_utilization * _slope) / UTIL_PREC));

            // 18 decimals
            _newRatePerSec = uint64(
                ZERO_UTIL_RATE + (_utilization * (_vertexInterest - ZERO_UTIL_RATE)) / VERTEX_UTILIZATION
            );
        } else {
            // For readability, the following formula is equivalent to:
            // uint256 _slope = (((_newFullUtilizationInterest - _vertexInterest) * UTIL_PREC) / (UTIL_PREC - VERTEX_UTILIZATION));
            // _newRatePerSec = uint64(_vertexInterest + (((_utilization - VERTEX_UTILIZATION) * _slope) / UTIL_PREC));

            // 18 decimals
            _newRatePerSec = uint64(
                _vertexInterest +
                    ((_utilization - VERTEX_UTILIZATION) * (_newFullUtilizationInterest - _vertexInterest)) /
                    (UTIL_PREC - VERTEX_UTILIZATION)
            );
        }
    }
}

File 2 of 3 : IRateCalculatorV2.sol
// SPDX-License-Identifier: ISC
pragma solidity ^0.8.17;

interface IRateCalculatorV2 {
    function name() external view returns (string memory);

    function version() external view returns (uint256, uint256, uint256);

    function getNewRate(uint256 _deltaTime, uint256 _utilization, uint64 _maxInterest)
        external
        view
        returns (uint64 _newRatePerSec, uint64 _newMaxInterest);
}

File 3 of 3 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

Settings
{
  "metadata": {
    "bytecodeHash": "none"
  },
  "viaIR": true,
  "optimizer": {
    "enabled": true,
    "runs": 100000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_suffix","type":"string"},{"internalType":"uint256","name":"_vertexUtilization","type":"uint256"},{"internalType":"uint256","name":"_vertexRatePercentOfDelta","type":"uint256"},{"internalType":"uint256","name":"_minUtil","type":"uint256"},{"internalType":"uint256","name":"_maxUtil","type":"uint256"},{"internalType":"uint256","name":"_zeroUtilizationRate","type":"uint256"},{"internalType":"uint256","name":"_minFullUtilizationRate","type":"uint256"},{"internalType":"uint256","name":"_maxFullUtilizationRate","type":"uint256"},{"internalType":"uint256","name":"_rateHalfLife","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"MAX_FULL_UTIL_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TARGET_UTIL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_FULL_UTIL_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_TARGET_UTIL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RATE_HALF_LIFE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RATE_PREC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UTIL_PREC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERTEX_RATE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERTEX_UTILIZATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO_UTIL_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deltaTime","type":"uint256"},{"internalType":"uint256","name":"_utilization","type":"uint256"},{"internalType":"uint64","name":"_oldFullUtilizationInterest","type":"uint64"}],"name":"getNewRate","outputs":[{"internalType":"uint64","name":"_newRatePerSec","type":"uint64"},{"internalType":"uint64","name":"_newFullUtilizationInterest","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"suffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"_major","type":"uint256"},{"internalType":"uint256","name":"_minor","type":"uint256"},{"internalType":"uint256","name":"_patch","type":"uint256"}],"stateMutability":"pure","type":"function"}]

61018060405234620002e85762000f8c803803806200001e81620002ed565b9283398101610120908183820312620002e85782516001600160401b039190828111620002e857840191601f90828285011215620002e857835190808211620002bd57602091601f19956200007984888785011601620002ed565b95828752848383010111620002e857839060005b838110620002d35750506000918601015281870151604088015195606089015160808a01519160a08b01519460c08c01519660e08d015198610100809e01519a8051938411620002bd57600054926001938481811c91168015620002b2575b828210146200029c5783811162000251575b5080928511600114620001e7575083945090839291600094620001db575b50501b916000199060031b1c1916176000555b60805260a05260c052855260e052845261014090815261016091825260405192610c78948562000314863960805185818161022f0152610658015260a0518581816104df0152610825015260c0518581816103a101526105ff015260e051858181610477015261087e0152518481816103020152610a8a015251838181610335015261074b0152518281816102980152818161055a01526108d701525181818161037301526106b10152f35b0151925038806200011c565b9294849081166000805284600020946000905b888383106200023657505050106200021c575b505050811b016000556200012f565b015160001960f88460031b161c191690553880806200020d565b858701518855909601959485019487935090810190620001fa565b60008052816000208480880160051c82019284891062000292575b0160051c019085905b82811062000285575050620000fe565b6000815501859062000275565b925081926200026c565b634e487b7160e01b600052602260045260246000fd5b90607f1690620000ec565b634e487b7160e01b600052604160045260246000fd5b8181018301518882018401528592016200008d565b600080fd5b6040519190601f01601f191682016001600160401b03811183821017620002bd5760405256fe608060408181526004918236101561001657600080fd5b600092833560e01c9182624c98af14610a555750816306fdde03146108fa57816317784ca4146108a157816331bf879d1461084857816340797eda146107ef57816354fd4d50146107aa5781636cd3cc771461076e5781638e75618c1461071557816391474c49146106d457816395da99fc1461067b5781639c07327014610622578163c4168125146105c9578163cd3181d5146101db575063f7073c3a146100be57600080fd5b346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d7578051908280546100fb81610b13565b808552916001918083169081156101915750600114610135575b50505061012782610131940383610b66565b5191829182610aad565b0390f35b80809650527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828610610179575050506101278260206101319582010194610115565b8054602087870181019190915290950194810161015c565b6101319750869350602092506101279491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b82010194610115565b5080fd5b839150346101d75760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757803591602490813560443567ffffffffffffffff95868216918281036105c5577f000000000000000000000000000000000000000000000000000000000000000090818510156104da57506102628482610bd6565b670de0b6b3a7640000908181029181830414901517156104af579061028691610c25565b6ec097ce7bc90715b34b9f10000000007f000000000000000000000000000000000000000000000000000000000000000081810293929181159185041417156104af5788969594936102f988946102f36102ed87966102e8876102fe98610c12565b610c12565b82610c5e565b92610c12565b610c25565b165b7f0000000000000000000000000000000000000000000000000000000000000000908281168281111561047057505016925b847f000000000000000000000000000000000000000000000000000000000000000094169561039e85670de0b6b3a7640000610398610371838c610bd6565b7f000000000000000000000000000000000000000000000000000000000000000090610c12565b04610c5e565b917f00000000000000000000000000000000000000000000000000000000000000009485851060001461040057505050916102f96103ea926103e4866103f09796610bd6565b90610c12565b90610c5e565b16915b8351921682526020820152f35b929650928461041f9295965061041591610bd6565b6103e48789610bd6565b92620186a094850394851161044757505050916103ea610440928694610c25565b16916103f3565b6011907f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b90959291507f00000000000000000000000000000000000000000000000000000000000000008091106104a5575b5050610332565b169350848961049e565b868660118a7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9192917f000000000000000000000000000000000000000000000000000000000000000091508890828611156105b65750506105168185610bd6565b670de0b6b3a7640000908181029181830414901517156104af57620186a09182039182116104af579061054891610c25565b6ec097ce7bc90715b34b9f10000000007f000000000000000000000000000000000000000000000000000000000000000081810294929181159186041417156104af5788969594936102f988946103e46105aa87966102e8876105b098610c12565b84610c5e565b16610300565b91509594939250859150610300565b8480fd5b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d75760209051670de0b6b3a76400008152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d75760209051620186a08152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d75760609181519160028352816020840152820152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d7578051906020927f5661726961626c6520526174652056322000000000000000000000000000000084840152809381549161096383610b13565b92600190818116908115610a0d57506001146109b0575b6101318686610127828b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283610b66565b90808093949750527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8683106109f9575050505061012782603161013195820101943861097a565b8054868401603101529183019181016109da565b6101319850879450603193506101279592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168284015280151502820101943861097a565b8490346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d7576020907f00000000000000000000000000000000000000000000000000000000000000008152f35b60208082528251818301819052939260005b858110610aff575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006040809697860101520116010190565b818101830151848201604001528201610abf565b90600182811c92168015610b5c575b6020831014610b2d57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691610b22565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610ba757604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b91908203918211610be357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810292918115918404141715610be357565b8115610c2f570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b91908201809211610be35756fea164736f6c6343000811000a000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000155cc00000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000124f80000000000000000000000000000000000000000000000000000000000014c0800000000000000000000000000000000000000000000000000000000096ea886000000000000000000000000000000000000000000000000000000005e52953c000000000000000000000000000000000000000000000000000002e0e52de4c0000000000000000000000000000000000000000000000000000000000002a30000000000000000000000000000000000000000000000000000000000000000255b302e3520302e32402e38373520352d31306b5d2032206461797320282e37352d2e383529000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060408181526004918236101561001657600080fd5b600092833560e01c9182624c98af14610a555750816306fdde03146108fa57816317784ca4146108a157816331bf879d1461084857816340797eda146107ef57816354fd4d50146107aa5781636cd3cc771461076e5781638e75618c1461071557816391474c49146106d457816395da99fc1461067b5781639c07327014610622578163c4168125146105c9578163cd3181d5146101db575063f7073c3a146100be57600080fd5b346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d7578051908280546100fb81610b13565b808552916001918083169081156101915750600114610135575b50505061012782610131940383610b66565b5191829182610aad565b0390f35b80809650527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828610610179575050506101278260206101319582010194610115565b8054602087870181019190915290950194810161015c565b6101319750869350602092506101279491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b82010194610115565b5080fd5b839150346101d75760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757803591602490813560443567ffffffffffffffff95868216918281036105c5577f00000000000000000000000000000000000000000000000000000000000124f890818510156104da57506102628482610bd6565b670de0b6b3a7640000908181029181830414901517156104af579061028691610c25565b6ec097ce7bc90715b34b9f10000000007f000000000000000000000000000000000000000000000000000000000002a30081810293929181159185041417156104af5788969594936102f988946102f36102ed87966102e8876102fe98610c12565b610c12565b82610c5e565b92610c12565b610c25565b165b7f000000000000000000000000000000000000000000000000000002e0e52de4c0908281168281111561047057505016925b847f00000000000000000000000000000000000000000000000000000000096ea88694169561039e85670de0b6b3a7640000610398610371838c610bd6565b7f00000000000000000000000000000000000000000000000002c68af0bb14000090610c12565b04610c5e565b917f00000000000000000000000000000000000000000000000000000000000155cc9485851060001461040057505050916102f96103ea926103e4866103f09796610bd6565b90610c12565b90610c5e565b16915b8351921682526020820152f35b929650928461041f9295965061041591610bd6565b6103e48789610bd6565b92620186a094850394851161044757505050916103ea610440928694610c25565b16916103f3565b6011907f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b90959291507f000000000000000000000000000000000000000000000000000000005e52953c8091106104a5575b5050610332565b169350848961049e565b868660118a7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9192917f0000000000000000000000000000000000000000000000000000000000014c0891508890828611156105b65750506105168185610bd6565b670de0b6b3a7640000908181029181830414901517156104af57620186a09182039182116104af579061054891610c25565b6ec097ce7bc90715b34b9f10000000007f000000000000000000000000000000000000000000000000000000000002a30081810294929181159186041417156104af5788969594936102f988946103e46105aa87966102e8876105b098610c12565b84610c5e565b16610300565b91509594939250859150610300565b8480fd5b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757602090517f00000000000000000000000000000000000000000000000000000000000155cc8152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757602090517f00000000000000000000000000000000000000000000000000000000000124f88152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757602090517f00000000000000000000000000000000000000000000000002c68af0bb1400008152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d75760209051670de0b6b3a76400008152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757602090517f00000000000000000000000000000000000000000000000000000000096ea8868152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d75760209051620186a08152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d75760609181519160028352816020840152820152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757602090517f0000000000000000000000000000000000000000000000000000000000014c088152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757602090517f000000000000000000000000000000000000000000000000000000005e52953c8152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d757602090517f000000000000000000000000000000000000000000000000000000000002a3008152f35b5050346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d7578051906020927f5661726961626c6520526174652056322000000000000000000000000000000084840152809381549161096383610b13565b92600190818116908115610a0d57506001146109b0575b6101318686610127828b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283610b66565b90808093949750527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8683106109f9575050505061012782603161013195820101943861097a565b8054868401603101529183019181016109da565b6101319850879450603193506101279592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168284015280151502820101943861097a565b8490346101d757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d7576020907f000000000000000000000000000000000000000000000000000002e0e52de4c08152f35b60208082528251818301819052939260005b858110610aff575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006040809697860101520116010190565b818101830151848201604001528201610abf565b90600182811c92168015610b5c575b6020831014610b2d57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691610b22565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610ba757604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b91908203918211610be357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810292918115918404141715610be357565b8115610c2f570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b91908201809211610be35756fea164736f6c6343000811000a

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

000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000155cc00000000000000000000000000000000000000000000000002c68af0bb14000000000000000000000000000000000000000000000000000000000000000124f80000000000000000000000000000000000000000000000000000000000014c0800000000000000000000000000000000000000000000000000000000096ea886000000000000000000000000000000000000000000000000000000005e52953c000000000000000000000000000000000000000000000000000002e0e52de4c0000000000000000000000000000000000000000000000000000000000002a30000000000000000000000000000000000000000000000000000000000000000255b302e3520302e32402e38373520352d31306b5d2032206461797320282e37352d2e383529000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _suffix (string): [0.5 [email protected] 5-10k] 2 days (.75-.85)
Arg [1] : _vertexUtilization (uint256): 87500
Arg [2] : _vertexRatePercentOfDelta (uint256): 200000000000000000
Arg [3] : _minUtil (uint256): 75000
Arg [4] : _maxUtil (uint256): 85000
Arg [5] : _zeroUtilizationRate (uint256): 158247046
Arg [6] : _minFullUtilizationRate (uint256): 1582470460
Arg [7] : _maxFullUtilizationRate (uint256): 3164940920000
Arg [8] : _rateHalfLife (uint256): 172800

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [1] : 00000000000000000000000000000000000000000000000000000000000155cc
Arg [2] : 00000000000000000000000000000000000000000000000002c68af0bb140000
Arg [3] : 00000000000000000000000000000000000000000000000000000000000124f8
Arg [4] : 0000000000000000000000000000000000000000000000000000000000014c08
Arg [5] : 00000000000000000000000000000000000000000000000000000000096ea886
Arg [6] : 000000000000000000000000000000000000000000000000000000005e52953c
Arg [7] : 000000000000000000000000000000000000000000000000000002e0e52de4c0
Arg [8] : 000000000000000000000000000000000000000000000000000000000002a300
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000025
Arg [10] : 5b302e3520302e32402e38373520352d31306b5d2032206461797320282e3735
Arg [11] : 2d2e383529000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

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.