Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- ConstantMultiplier
- Optimization enabled
- true
- Compiler version
- v0.8.18+commit.87f61d96
- Optimization runs
- 800
- EVM Version
- paris
- Verified at
- 2024-01-10T19:31:44.018285Z
Constructor Arguments
0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000076a70000000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000ed4e000000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000001da9c000000000000000000000000000000000000000000000000000000000000004e200000000000000000000000000000000000000000000000000000000003b538000000000000000000000000000000000000000000000000000000000000009c40
contracts/staking/multipliers/ConstantMultiplier.sol
// SPDX-License-Identifier: MIT pragma solidity 0.8.18; import { IMultiplier } from "../interfaces/IMultiplier.sol"; contract ConstantMultiplier is IMultiplier { struct MultiplierThreshold { uint256 threshold; uint256 multiplier; } MultiplierThreshold[] public durationThresholds; uint256 public constant MULTIPLIER_BASIS = 1e4; /** * @notice Both arrays should be in ascending order. * @param _durationThresholds The duration thresholds */ constructor(MultiplierThreshold[] memory _durationThresholds) { for (uint256 i = 0; i < _durationThresholds.length; i++) { MultiplierThreshold memory threshold = _durationThresholds[i]; require(threshold.threshold > 0, "ConstantMultiplier::setMultiplierThresholds: threshold = 0"); require(threshold.multiplier > 0, "ConstantMultiplier::setMultiplierThresholds: multiplier = 0"); durationThresholds.push(threshold); } } function applyMultiplier(uint256 _amount, uint256 _duration) external view override returns (uint256) { uint256 multiplier = getMultiplier(_amount, _duration); return (_amount * multiplier) / MULTIPLIER_BASIS; } function getMultiplier(uint256, uint256 _duration) public view override returns (uint256) { return getDurationMultiplier(_duration); } function getDurationGroup(uint256 _duration) public view override returns (uint256) { for (uint256 i = durationThresholds.length - 1; i > 0; i--) { // The duration thresholds are sorted in ascending order MultiplierThreshold memory threshold = durationThresholds[i]; if (_duration >= threshold.threshold) { return i; } } return 0; } function getDurationMultiplier(uint256 _duration) public view override returns (uint256) { uint256 group = getDurationGroup(_duration); return durationThresholds[group].multiplier; } function getDurationThresholds() external view returns (MultiplierThreshold[] memory) { return durationThresholds; } }
contracts/staking/interfaces/IMultiplier.sol
// SPDX-License-Identifier: MIT pragma solidity 0.8.18; interface IMultiplier { /** * Applies a multiplier on the _amount, based on the _pool and _beneficiary. * The multiplier is not necessarily a constant number, it can be a more complex factor. */ function applyMultiplier(uint256 _amount, uint256 _duration) external view returns (uint256); function getMultiplier(uint256 _amount, uint256 _duration) external view returns (uint256); function getDurationGroup(uint256 _duration) external view returns (uint256); function getDurationMultiplier(uint256 _duration) external view returns (uint256); }
Compiler Settings
{"outputSelection":{"*":{"*":["*"],"":["*"]}},"optimizer":{"runs":800,"enabled":true},"metadata":{"useLiteralContent":true,"bytecodeHash":"none"},"libraries":{},"evmVersion":"paris"}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"tuple[]","name":"_durationThresholds","internalType":"struct ConstantMultiplier.MultiplierThreshold[]","components":[{"type":"uint256","name":"threshold","internalType":"uint256"},{"type":"uint256","name":"multiplier","internalType":"uint256"}]}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MULTIPLIER_BASIS","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"applyMultiplier","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"},{"type":"uint256","name":"_duration","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"threshold","internalType":"uint256"},{"type":"uint256","name":"multiplier","internalType":"uint256"}],"name":"durationThresholds","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getDurationGroup","inputs":[{"type":"uint256","name":"_duration","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getDurationMultiplier","inputs":[{"type":"uint256","name":"_duration","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple[]","name":"","internalType":"struct ConstantMultiplier.MultiplierThreshold[]","components":[{"type":"uint256","name":"threshold","internalType":"uint256"},{"type":"uint256","name":"multiplier","internalType":"uint256"}]}],"name":"getDurationThresholds","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getMultiplier","inputs":[{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint256","name":"_duration","internalType":"uint256"}]}]
Contract Creation Code
0x608060405234801561001057600080fd5b5060405161074838038061074883398101604081905261002f91610219565b60005b81518110156101a457600082828151811061004f5761004f6102e5565b6020026020010151905060008160000151116100c65760405162461bcd60e51b815260206004820152603a602482015260008051602061072883398151915260448201527f725468726573686f6c64733a207468726573686f6c64203d203000000000000060648201526084015b60405180910390fd5b600081602001511161012e5760405162461bcd60e51b815260206004820152603b602482015260008051602061072883398151915260448201527f725468726573686f6c64733a206d756c7469706c696572203d2030000000000060648201526084016100bd565b6000805460018101825590805281517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5636002909202918201556020909101517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564909101558061019c816102fb565b915050610032565b5050610322565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156101e3576101e36101ab565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610211576102116101ab565b604052919050565b6000602080838503121561022c57600080fd5b82516001600160401b038082111561024357600080fd5b818501915085601f83011261025757600080fd5b815181811115610269576102696101ab565b610277848260051b016101e9565b818152848101925060069190911b83018401908782111561029757600080fd5b928401925b818410156102da57604084890312156102b55760008081fd5b6102bd6101c1565b84518152858501518682015283526040909301929184019161029c565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161031b57634e487b7160e01b600052601160045260246000fd5b5060010190565b6103f7806103316000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638dbb1e3a1161005b5780638dbb1e3a146100c4578063a1d278dc146100d7578063f1a68465146100ea578063fc21d6a41461011257600080fd5b8063096c07631461008257806340a8d39f146100a8578063457b0809146100b1575b600080fd5b6100956100903660046102d1565b610127565b6040519081526020015b60405180910390f35b61009561271081565b6100956100bf3660046102ea565b610162565b6100956100d23660046102ea565b610192565b6100956100e53660046102d1565b6101a4565b6100fd6100f83660046102d1565b610230565b6040805192835260208301919091520161009f565b61011a61025e565b60405161009f919061030c565b600080610133836101a4565b9050600081815481106101485761014861035b565b906000526020600020906002020160010154915050919050565b60008061016f8484610192565b905061271061017e8286610387565b610188919061039e565b9150505b92915050565b600061019d82610127565b9392505050565b6000805481906101b6906001906103c0565b90505b80156102275760008082815481106101d3576101d361035b565b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050905080600001518410610214575092915050565b508061021f816103d3565b9150506101b9565b50600092915050565b6000818154811061024057600080fd5b60009182526020909120600290910201805460019091015490915082565b60606000805480602002602001604051908101604052809291908181526020016000905b828210156102c857838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610282565b50505050905090565b6000602082840312156102e357600080fd5b5035919050565b600080604083850312156102fd57600080fd5b50508035926020909101359150565b602080825282518282018190526000919060409081850190868401855b8281101561034e57815180518552860151868501529284019290850190600101610329565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761018c5761018c610371565b6000826103bb57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561018c5761018c610371565b6000816103e2576103e2610371565b50600019019056fea164736f6c6343000812000a436f6e7374616e744d756c7469706c6965723a3a7365744d756c7469706c696500000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000076a70000000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000ed4e000000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000001da9c000000000000000000000000000000000000000000000000000000000000004e200000000000000000000000000000000000000000000000000000000003b538000000000000000000000000000000000000000000000000000000000000009c40
Deployed ByteCode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638dbb1e3a1161005b5780638dbb1e3a146100c4578063a1d278dc146100d7578063f1a68465146100ea578063fc21d6a41461011257600080fd5b8063096c07631461008257806340a8d39f146100a8578063457b0809146100b1575b600080fd5b6100956100903660046102d1565b610127565b6040519081526020015b60405180910390f35b61009561271081565b6100956100bf3660046102ea565b610162565b6100956100d23660046102ea565b610192565b6100956100e53660046102d1565b6101a4565b6100fd6100f83660046102d1565b610230565b6040805192835260208301919091520161009f565b61011a61025e565b60405161009f919061030c565b600080610133836101a4565b9050600081815481106101485761014861035b565b906000526020600020906002020160010154915050919050565b60008061016f8484610192565b905061271061017e8286610387565b610188919061039e565b9150505b92915050565b600061019d82610127565b9392505050565b6000805481906101b6906001906103c0565b90505b80156102275760008082815481106101d3576101d361035b565b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050905080600001518410610214575092915050565b508061021f816103d3565b9150506101b9565b50600092915050565b6000818154811061024057600080fd5b60009182526020909120600290910201805460019091015490915082565b60606000805480602002602001604051908101604052809291908181526020016000905b828210156102c857838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610282565b50505050905090565b6000602082840312156102e357600080fd5b5035919050565b600080604083850312156102fd57600080fd5b50508035926020909101359150565b602080825282518282018190526000919060409081850190868401855b8281101561034e57815180518552860151868501529284019290850190600101610329565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761018c5761018c610371565b6000826103bb57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561018c5761018c610371565b6000816103e2576103e2610371565b50600019019056fea164736f6c6343000812000a