false
false
0
The new Blockscout UI is now open source! Learn how to
deploy it here
- We're indexing this chain right now. Some of the counts may be inaccurate.
Blockchain
Blocks
Blocks
Uncles
Forked Blocks (Reorgs)
Transactions
Validated
Pending
Verified contracts
Withdrawals
Tokens
All
ETH
APIs
GraphQL
RPC
Eth RPC
Mainnet
/
Search
/
Search
Connection Lost
New Solidity Smart Contract Verification
Contract Address
The 0x address supplied on contract creation.
Is Yul contract
No
Yes
Select Yes if you want to verify Yul contract.
Contract Name
Must match the name specified in the code. For example, in
contract MyContract {..}
MyContract
is the contract name.
Include nightly builds
No
Yes
Select yes if you want to show nightly builds.
Compiler
The compiler version is specified in
pragma solidity X.X.X
. Use the compiler version rather than the nightly build. If using the Solidity compiler, run
solc —version
to check.
EVM Version
homestead
tangerineWhistle
spuriousDragon
byzantium
constantinople
petersburg
istanbul
berlin
london
paris
shanghai
cancun
default
The EVM version the contract is written for. If the bytecode does not match the version, we try to verify using the latest EVM version.
EVM version details
.
Optimization
No
Yes
If you enabled optimization during compilation, select yes.
Optimization runs
Enter the Solidity Contract Code
// SPDX-License-Identifier: BSD-3-Clause pragma solidity 0.8.17; import "./interfaces/IKinkMultiplierModel.sol"; import "./interfaces/IInterestRateModel.sol"; contract KinkMultiplierModel is IKinkMultiplierModel, IInterestRateModel { uint256 public constant blocksPerYear = 2628000; // 12 second block interval uint256 public immutable interestRateMultiplierPerBlock; uint256 public immutable initialRatePerBlock; uint256 public immutable kinkCurveMultiplierPerBlock; uint256 public immutable kinkPoint; /// @param initialRatePerYear The approximate target initial APR, as a mantissa (scaled by 1e18) /// @param interestRateMultiplierPerYear Interest rate to utilisation rate increase ratio (scaled by 1e18) /// @param kinkCurveMultiplierPerYear The multiplier per year after hitting a kink point /// @param kinkPoint_ The utilisation point at which the kink curve multiplier is applied constructor( uint256 initialRatePerYear, uint256 interestRateMultiplierPerYear, uint256 kinkCurveMultiplierPerYear, uint256 kinkPoint_ ) { require(kinkPoint_ > 0); initialRatePerBlock = initialRatePerYear / blocksPerYear; interestRateMultiplierPerBlock = interestRateMultiplierPerYear / blocksPerYear; kinkCurveMultiplierPerBlock = kinkCurveMultiplierPerYear / blocksPerYear; kinkPoint = kinkPoint_; } /// @inheritdoc IInterestRateModel function getBorrowRate( uint256 cash, uint256 borrows, uint256 protocolInterest ) public view returns (uint256) { uint256 util = utilisationRate(cash, borrows, protocolInterest); if (util <= kinkPoint) { return (util * interestRateMultiplierPerBlock) / 1e18 + initialRatePerBlock; } else { uint256 normalRate = (kinkPoint * interestRateMultiplierPerBlock) / 1e18 + initialRatePerBlock; uint256 excessUtil = util - kinkPoint; return (excessUtil * kinkCurveMultiplierPerBlock) / 1e18 + normalRate; } } /// @inheritdoc IInterestRateModel function getSupplyRate( uint256 cash, uint256 borrows, uint256 protocolInterest, uint256 protocolInterestFactorMantissa ) external view returns (uint256) { uint256 oneMinusProtocolInterestFactor = 1e18 - protocolInterestFactorMantissa; uint256 borrowRate = getBorrowRate(cash, borrows, protocolInterest); uint256 rateToPool = (borrowRate * oneMinusProtocolInterestFactor) / 1e18; return (utilisationRate(cash, borrows, protocolInterest) * rateToPool) / 1e18; } /// @inheritdoc IKinkMultiplierModel function utilisationRate( uint256 cash, uint256 borrows, uint256 protocolInterest ) public pure returns (uint256) { // Utilisation rate is 0 when there are no borrows if (borrows == 0) return 0; return (borrows * 1e18) / (cash + borrows - protocolInterest); } }
We recommend using flattened code. This is necessary if your code utilizes a library or inherits dependencies. Use the
POA solidity flattener or the
truffle flattener
.
Try to fetch constructor arguments automatically
No
Yes
ABI-encoded Constructor Arguments (if required by the contract)
0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095626ee78400000000000000000000000000000000000000000000000000005b2d5430ce5100000000000000000000000000000000000000000000000000000853a0d2313c0000
Add arguments in
ABI hex encoded form
. Constructor arguments are written right to left, and will be found at the end of the input created bytecode. They may also be
parsed here.
Add Contract Libraries
Contract Libraries
Library 1 Name
A library name called in the .sol file. Multiple libraries (up to 10) may be added for each contract. Click the Add Library button to add an additional one.
Library 1 Address
The 0x library address. This can be found in the generated json file or Truffle output (if using truffle).
Library 2 Name
Library 2 Address
Library 3 Name
Library 3 Address
Library 4 Name
Library 4 Address
Library 5 Name
Library 5 Address
Library 6 Name
Library 6 Address
Library 7 Name
Library 7 Address
Library 8 Name
Library 8 Address
Library 9 Name
Library 9 Address
Library 10 Name
Library 10 Address
Add Library
Loading...
Verify & publish
Cancel
Ok
Ok
Ok
No
Yes