Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
RewardsConfig
Compiler Version
v0.8.22+commit.4fc1097e
Optimization Enabled:
Yes with 10000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL 1.1 pragma solidity =0.8.22; import "openzeppelin-contracts/contracts/access/Ownable.sol"; import "./interfaces/IRewardsConfig.sol"; // Contract owned by the DAO with parameters modifiable only by the DAO contract RewardsConfig is IRewardsConfig, Ownable { event RewardsEmitterDailyPercentChanged(uint256 newRewardsEmitterDailyPercent); event EmissionsWeeklyPercentChanged(uint256 newEmissionsWeeklyPercent); event StakingRewardsPercentChanged(uint256 newStakingRewardsPercent); // The target daily percent of rewards distributed by the stakingRewardsEmitter and liquidityRewardsEmitter (from the ZERO token balance in each emitter contract). // Rewards Emitters distribute ZERO token rewards over time to the SharedRewards contracts where the rewards can be claimed by users. // Range: .25% to 2.5% with an adjustment of 0.25% uint256 public rewardsEmitterDailyPercentTimes1000 = 250; // Defaults to 0.25% with a 1000x multiplier // The weekly percent of ZERO token emissions that will be distributed from Emissions.sol to the Liquidity and veZERO Holder Reward Emitters. // Range: .25% to 1.0% with an adjustment of 0.25% uint256 public emissionsWeeklyPercentTimes1000 = 250; // Defaults to 0.25% with a 1000x multiplier // By default, veZERO holders get 50% and liquidity providers get 50% of emissions and arbitrage profits sent to ZeroRewards // Range: 25% to 75% with an adjustment of 5% uint256 public stakingRewardsPercent = 75; // Defaults to 75% of emissions and arbitrage profits for stakers function changeRewardsEmitterDailyPercent(bool increase) external onlyOwner { if (increase) { if (rewardsEmitterDailyPercentTimes1000 < 2500) rewardsEmitterDailyPercentTimes1000 = rewardsEmitterDailyPercentTimes1000 + 250; } else { if (rewardsEmitterDailyPercentTimes1000 > 250) rewardsEmitterDailyPercentTimes1000 = rewardsEmitterDailyPercentTimes1000 - 250; } emit RewardsEmitterDailyPercentChanged(rewardsEmitterDailyPercentTimes1000); } function changeEmissionsWeeklyPercent(bool increase) external onlyOwner { if (increase) { if (emissionsWeeklyPercentTimes1000 < 1000) emissionsWeeklyPercentTimes1000 = emissionsWeeklyPercentTimes1000 + 250; } else { if (emissionsWeeklyPercentTimes1000 > 250) emissionsWeeklyPercentTimes1000 = emissionsWeeklyPercentTimes1000 - 250; } emit EmissionsWeeklyPercentChanged(emissionsWeeklyPercentTimes1000); } function changeStakingRewardsPercent(bool increase) external onlyOwner { if (increase) { if (stakingRewardsPercent < 75) stakingRewardsPercent = stakingRewardsPercent + 5; } else { if (stakingRewardsPercent > 25) stakingRewardsPercent = stakingRewardsPercent - 5; } emit StakingRewardsPercentChanged(stakingRewardsPercent); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: BUSL 1.1 pragma solidity =0.8.22; interface IRewardsConfig { function changeRewardsEmitterDailyPercent(bool increase) external; // onlyOwner function changeEmissionsWeeklyPercent(bool increase) external; // onlyOwner function changeStakingRewardsPercent(bool increase) external; // onlyOwner // Views function emissionsWeeklyPercentTimes1000() external view returns (uint256); function rewardsEmitterDailyPercentTimes1000() external view returns (uint256); function stakingRewardsPercent() external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "remappings": [ "chainlink/=lib/chainlink/", "ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/openzeppelin-contracts/lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "openzeppelin/=lib/openzeppelin-contracts/contracts/", "v3-core/=lib/v3-core/contracts/" ], "optimizer": { "enabled": true, "runs": 10000 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newEmissionsWeeklyPercent","type":"uint256"}],"name":"EmissionsWeeklyPercentChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newRewardsEmitterDailyPercent","type":"uint256"}],"name":"RewardsEmitterDailyPercentChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newStakingRewardsPercent","type":"uint256"}],"name":"StakingRewardsPercentChanged","type":"event"},{"inputs":[{"internalType":"bool","name":"increase","type":"bool"}],"name":"changeEmissionsWeeklyPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"increase","type":"bool"}],"name":"changeRewardsEmitterDailyPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"increase","type":"bool"}],"name":"changeStakingRewardsPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emissionsWeeklyPercentTimes1000","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsEmitterDailyPercentTimes1000","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingRewardsPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260fa60015560fa600255604b60035534801561001f57600080fd5b506100293361002e565b61007e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61059a8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80638ffd0c3a11610076578063df11d42d1161005b578063df11d42d1461011b578063ed8a5e771461012e578063f2fde38b1461014157600080fd5b80638ffd0c3a14610109578063dab2e5c31461011257600080fd5b806323dd537b146100a857806370ef6258146100bd578063715018a6146100d95780638da5cb5b146100e1575b600080fd5b6100bb6100b63660046104aa565b610154565b005b6100c660035481565b6040519081526020015b60405180910390f35b6100bb6101e0565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d0565b6100c660025481565b6100c660015481565b6100bb6101293660046104aa565b6101f4565b6100bb61013c3660046104aa565b610276565b6100bb61014f3660046104d3565b6102f8565b61015c6103b4565b801561018457604b600354101561017f5760035461017b906005610538565b6003555b6101a2565b601960035411156101a257600560035461019e9190610551565b6003555b7fd807b5262f0887ab27a2968c64eee546da2a81bc553a0cb6e8513df5919d52cf6003546040516101d591815260200190565b60405180910390a150565b6101e86103b4565b6101f26000610435565b565b6101fc6103b4565b8015610225576103e860025410156102205760025461021c9060fa610538565b6002555b610243565b60fa60025411156102435760fa60025461023f9190610551565b6002555b7f2aa4dd9f1c9a07d3b257a93561d953fee1edac23981051080570ff4ac4a774786002546040516101d591815260200190565b61027e6103b4565b80156102a7576109c460015410156102a25760015461029e9060fa610538565b6001555b6102c5565b60fa60015411156102c55760fa6001546102c19190610551565b6001555b7f7eedf8bde069edc0a2a0d978087e44e3f99d4f7b03a79f21be09c940f065d0526001546040516101d591815260200190565b6103006103b4565b73ffffffffffffffffffffffffffffffffffffffff81166103a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103b181610435565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156104bc57600080fd5b813580151581146104cc57600080fd5b9392505050565b6000602082840312156104e557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146104cc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561054b5761054b610509565b92915050565b8181038181111561054b5761054b61050956fea26469706673582212203f109ffca4a54acc4832c67b527b3f75292d6f3c9a26d74ae29c52da6811ce8864736f6c63430008160033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100a35760003560e01c80638ffd0c3a11610076578063df11d42d1161005b578063df11d42d1461011b578063ed8a5e771461012e578063f2fde38b1461014157600080fd5b80638ffd0c3a14610109578063dab2e5c31461011257600080fd5b806323dd537b146100a857806370ef6258146100bd578063715018a6146100d95780638da5cb5b146100e1575b600080fd5b6100bb6100b63660046104aa565b610154565b005b6100c660035481565b6040519081526020015b60405180910390f35b6100bb6101e0565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d0565b6100c660025481565b6100c660015481565b6100bb6101293660046104aa565b6101f4565b6100bb61013c3660046104aa565b610276565b6100bb61014f3660046104d3565b6102f8565b61015c6103b4565b801561018457604b600354101561017f5760035461017b906005610538565b6003555b6101a2565b601960035411156101a257600560035461019e9190610551565b6003555b7fd807b5262f0887ab27a2968c64eee546da2a81bc553a0cb6e8513df5919d52cf6003546040516101d591815260200190565b60405180910390a150565b6101e86103b4565b6101f26000610435565b565b6101fc6103b4565b8015610225576103e860025410156102205760025461021c9060fa610538565b6002555b610243565b60fa60025411156102435760fa60025461023f9190610551565b6002555b7f2aa4dd9f1c9a07d3b257a93561d953fee1edac23981051080570ff4ac4a774786002546040516101d591815260200190565b61027e6103b4565b80156102a7576109c460015410156102a25760015461029e9060fa610538565b6001555b6102c5565b60fa60015411156102c55760fa6001546102c19190610551565b6001555b7f7eedf8bde069edc0a2a0d978087e44e3f99d4f7b03a79f21be09c940f065d0526001546040516101d591815260200190565b6103006103b4565b73ffffffffffffffffffffffffffffffffffffffff81166103a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103b181610435565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156104bc57600080fd5b813580151581146104cc57600080fd5b9392505050565b6000602082840312156104e557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146104cc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561054b5761054b610509565b92915050565b8181038181111561054b5761054b61050956fea26469706673582212203f109ffca4a54acc4832c67b527b3f75292d6f3c9a26d74ae29c52da6811ce8864736f6c63430008160033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
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.