Overview
APE Balance
0 APE
APE Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
TripleSlopeRateModel
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 200 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../../interfaces/IInterestRateModel.sol"; contract TripleSlopeRateModel is IInterestRateModel { uint256 public immutable baseBorrowPerSecond; uint256 public immutable borrowPerSecond1; uint256 public immutable kink1; uint256 public immutable borrowPerSecond2; uint256 public immutable kink2; uint256 public immutable borrowPerSecond3; constructor( uint256 baseRatePerSecond_, uint256 borrowPerSecond1_, uint256 kink1_, uint256 borrowPerSecond2_, uint256 kink2_, uint256 borrowPerSecond3_ ) { baseBorrowPerSecond = baseRatePerSecond_; borrowPerSecond1 = borrowPerSecond1_; kink1 = kink1_; borrowPerSecond2 = borrowPerSecond2_; kink2 = kink2_; borrowPerSecond3 = borrowPerSecond3_; } /** * @notice Calculate the utilization rate. * @param cash The cash in the market * @param borrow The borrow in the market * @return The utilization rate */ function getUtilization(uint256 cash, uint256 borrow) public pure returns (uint256) { if (borrow == 0) { return 0; } return (borrow * 1e18) / (cash + borrow); } /** * @notice Get the borrow rate per second. * @param cash The cash in the market * @param borrow The borrow in the market * @return The borrow rate per second */ function getBorrowRate(uint256 cash, uint256 borrow) public view returns (uint256) { uint256 utilization = getUtilization(cash, borrow); if (utilization <= kink1) { // base + utilization * slope1 return baseBorrowPerSecond + (utilization * borrowPerSecond1) / 1e18; } else if (utilization <= kink2) { // base + kink1 * slope1 + (utilization - kink1) * slope2 return baseBorrowPerSecond + (kink1 * borrowPerSecond1) / 1e18 + ((utilization - kink1) * borrowPerSecond2) / 1e18; } else { // base + kink1 * slope1 + (kink2 - kink1) * slope2 + (utilization - kink2) * slope3 return baseBorrowPerSecond + (kink1 * borrowPerSecond1) / 1e18 + ((kink2 - kink1) * borrowPerSecond2) / 1e18 + (utilization - kink2) * borrowPerSecond3 / 1e18; } } /** * @notice Get the supply rate per second. * @param cash The cash in the market * @param borrow The borrow in the market * @return The supply rate per second */ function getSupplyRate(uint256 cash, uint256 borrow) public view returns (uint256) { uint256 borrowRate = getBorrowRate(cash, borrow); uint256 utilization = getUtilization(cash, borrow); return (utilization * borrowRate) / 1e18; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IInterestRateModel { function getUtilization(uint256 cash, uint256 borrow) external pure returns (uint256); function getBorrowRate(uint256 cash, uint256 borrow) external view returns (uint256); function getSupplyRate(uint256 cash, uint256 borrow) external view returns (uint256); }
{ "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"baseRatePerSecond_","type":"uint256"},{"internalType":"uint256","name":"borrowPerSecond1_","type":"uint256"},{"internalType":"uint256","name":"kink1_","type":"uint256"},{"internalType":"uint256","name":"borrowPerSecond2_","type":"uint256"},{"internalType":"uint256","name":"kink2_","type":"uint256"},{"internalType":"uint256","name":"borrowPerSecond3_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"baseBorrowPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"borrowPerSecond1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"borrowPerSecond2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"borrowPerSecond3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"cash","type":"uint256"},{"internalType":"uint256","name":"borrow","type":"uint256"}],"name":"getBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"cash","type":"uint256"},{"internalType":"uint256","name":"borrow","type":"uint256"}],"name":"getSupplyRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"cash","type":"uint256"},{"internalType":"uint256","name":"borrow","type":"uint256"}],"name":"getUtilization","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"kink1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kink2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
61014060405234801561001157600080fd5b506040516107d23803806107d283398101604081905261003091610052565b60809590955260a09390935260c09190915260e052610100526101205261009c565b60008060008060008060c0878903121561006b57600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b60805160a05160c05160e0516101005161012051610672610160600039600081816101ab015261041e01526000818161014a015281816102f50152818161044201526104cb015260008181609d0152818161032501526104860152600081816101840152818161025f01528181610349015281816103b1015281816104aa01526105320152600081816101100152818161029201528181610390015261051101526000818160e9015281816102c7015281816103e5015261056601526106726000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c806346dda3581161006657806346dda3581461013257806350af8cd614610145578063a5cdfa941461016c578063d34f61141461017f578063e3a6fe25146101a657600080fd5b8063158e9c4a146100985780632a11a8a0146100d15780632f1f2c42146100e4578063382be1cd1461010b575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200160405180910390f35b6100bf6100df366004610594565b6101cd565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6100bf610140366004610594565b610212565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6100bf61017a366004610594565b61024e565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6000806101da848461024e565b905060006101e88585610212565b9050670de0b6b3a76400006101fd83836105cc565b61020791906105eb565b925050505b92915050565b6000816102215750600061020c565b61022b828461060d565b61023d83670de0b6b3a76400006105cc565b61024791906105eb565b9392505050565b60008061025b8484610212565b90507f000000000000000000000000000000000000000000000000000000000000000081116102f357670de0b6b3a76400006102b77f0000000000000000000000000000000000000000000000000000000000000000836105cc565b6102c191906105eb565b6102eb907f000000000000000000000000000000000000000000000000000000000000000061060d565b91505061020c565b7f0000000000000000000000000000000000000000000000000000000000000000811161041357670de0b6b3a76400007f000000000000000000000000000000000000000000000000000000000000000061036e7f000000000000000000000000000000000000000000000000000000000000000084610625565b61037891906105cc565b61038291906105eb565b670de0b6b3a76400006103d57f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006105cc565b6103df91906105eb565b610409907f000000000000000000000000000000000000000000000000000000000000000061060d565b6102eb919061060d565b670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006104677f000000000000000000000000000000000000000000000000000000000000000084610625565b61047191906105cc565b61047b91906105eb565b670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006104ef7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610625565b6104f991906105cc565b61050391906105eb565b670de0b6b3a76400006105567f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006105cc565b61056091906105eb565b61058a907f000000000000000000000000000000000000000000000000000000000000000061060d565b610409919061060d565b600080604083850312156105a757600080fd5b50508035926020909101359150565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156105e6576105e66105b6565b500290565b60008261060857634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115610620576106206105b6565b500190565b600082821015610637576106376105b6565b50039056fea2646970667358221220f0288840ba84cad827b7d507ee2ccf5e0f9c73c816d9f4c0735ef77311ecd96064736f6c634300080a0033000000000000000000000000000000000000000000000000000000001c59cb9f0000000000000000000000000000000000000000000000000000000071672e7f0000000000000000000000000000000000000000000000000c7d713b49da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7d713b49da000000000000000000000000000000000000000000000000000000000016262714cf
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100935760003560e01c806346dda3581161006657806346dda3581461013257806350af8cd614610145578063a5cdfa941461016c578063d34f61141461017f578063e3a6fe25146101a657600080fd5b8063158e9c4a146100985780632a11a8a0146100d15780632f1f2c42146100e4578063382be1cd1461010b575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200160405180910390f35b6100bf6100df366004610594565b6101cd565b6100bf7f000000000000000000000000000000000000000000000000000000001c59cb9f81565b6100bf7f0000000000000000000000000000000000000000000000000000000071672e7f81565b6100bf610140366004610594565b610212565b6100bf7f0000000000000000000000000000000000000000000000000c7d713b49da000081565b6100bf61017a366004610594565b61024e565b6100bf7f0000000000000000000000000000000000000000000000000c7d713b49da000081565b6100bf7f00000000000000000000000000000000000000000000000000000016262714cf81565b6000806101da848461024e565b905060006101e88585610212565b9050670de0b6b3a76400006101fd83836105cc565b61020791906105eb565b925050505b92915050565b6000816102215750600061020c565b61022b828461060d565b61023d83670de0b6b3a76400006105cc565b61024791906105eb565b9392505050565b60008061025b8484610212565b90507f0000000000000000000000000000000000000000000000000c7d713b49da000081116102f357670de0b6b3a76400006102b77f0000000000000000000000000000000000000000000000000000000071672e7f836105cc565b6102c191906105eb565b6102eb907f000000000000000000000000000000000000000000000000000000001c59cb9f61060d565b91505061020c565b7f0000000000000000000000000000000000000000000000000c7d713b49da0000811161041357670de0b6b3a76400007f000000000000000000000000000000000000000000000000000000000000000061036e7f0000000000000000000000000000000000000000000000000c7d713b49da000084610625565b61037891906105cc565b61038291906105eb565b670de0b6b3a76400006103d57f0000000000000000000000000000000000000000000000000000000071672e7f7f0000000000000000000000000000000000000000000000000c7d713b49da00006105cc565b6103df91906105eb565b610409907f000000000000000000000000000000000000000000000000000000001c59cb9f61060d565b6102eb919061060d565b670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000016262714cf6104677f0000000000000000000000000000000000000000000000000c7d713b49da000084610625565b61047191906105cc565b61047b91906105eb565b670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006104ef7f0000000000000000000000000000000000000000000000000c7d713b49da00007f0000000000000000000000000000000000000000000000000c7d713b49da0000610625565b6104f991906105cc565b61050391906105eb565b670de0b6b3a76400006105567f0000000000000000000000000000000000000000000000000000000071672e7f7f0000000000000000000000000000000000000000000000000c7d713b49da00006105cc565b61056091906105eb565b61058a907f000000000000000000000000000000000000000000000000000000001c59cb9f61060d565b610409919061060d565b600080604083850312156105a757600080fd5b50508035926020909101359150565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156105e6576105e66105b6565b500290565b60008261060857634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115610620576106206105b6565b500190565b600082821015610637576106376105b6565b50039056fea2646970667358221220f0288840ba84cad827b7d507ee2ccf5e0f9c73c816d9f4c0735ef77311ecd96064736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000001c59cb9f0000000000000000000000000000000000000000000000000000000071672e7f0000000000000000000000000000000000000000000000000c7d713b49da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7d713b49da000000000000000000000000000000000000000000000000000000000016262714cf
-----Decoded View---------------
Arg [0] : baseRatePerSecond_ (uint256): 475646879
Arg [1] : borrowPerSecond1_ (uint256): 1902587519
Arg [2] : kink1_ (uint256): 900000000000000000
Arg [3] : borrowPerSecond2_ (uint256): 0
Arg [4] : kink2_ (uint256): 900000000000000000
Arg [5] : borrowPerSecond3_ (uint256): 95129375951
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000001c59cb9f
Arg [1] : 0000000000000000000000000000000000000000000000000000000071672e7f
Arg [2] : 0000000000000000000000000000000000000000000000000c7d713b49da0000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000c7d713b49da0000
Arg [5] : 00000000000000000000000000000000000000000000000000000016262714cf
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.