false
false
0

Contract Address Details

0x1faA6e5913e5fDfC85d961E86f7AacFC9A7e6C3f

Contract Name
ConstantMultiplier
Creator
0xfd0a18–e4e16a at 0x03aebd–f88f36
Balance
0 EMC ( )
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
7332828
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