Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ProtocolConfig
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 20000 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; import "./IProtocolConfig.sol"; contract ProtocolConfig is IProtocolConfig { error E_OnlyAdmin(); error E_InvalidVault(); error E_InvalidReceiver(); error E_InvalidConfigValue(); error E_InvalidAdmin(); struct InterestFeeRange { bool exists; uint16 minInterestFee; uint16 maxInterestFee; } struct ProtocolFeeConfig { bool exists; address feeReceiver; uint16 protocolFeeShare; } // max valid value of the EVault's ConfigAmount custom type, signifying 100% uint16 internal constant CONFIG_SCALE = 1e4; /// @dev admin address address public admin; /// @dev protocol fee receiver, unless a vault has it configured otherwise address public feeReceiver; /// @dev protocol fee share, except for vaults configured otherwise uint16 internal protocolFeeShare; /// @dev min interest fee, except for vaults configured otherwise uint16 internal minInterestFee; /// @dev max interest fee, except for vaults configured otherwise uint16 internal maxInterestFee; /// @dev per-vault configuration of min/max interest fee range, takes priority over defaults mapping(address vault => InterestFeeRange) internal _interestFeeRanges; /// @dev per-vault configuration of protocol fee config, takes priority over defaults mapping(address vault => ProtocolFeeConfig) internal _protocolFeeConfig; /// @notice Set global default allowed interest fee limits /// @param newMinInterestFee lower limit of allowed interest fee /// @param newMaxInterestFee upper limit of allowed interest fee event SetInterestFeeRange(uint16 newMinInterestFee, uint16 newMaxInterestFee); /// @notice Set new fee receiver address /// @param newFeeReceiver new fee receiver address event SetFeeReceiver(address indexed newFeeReceiver); /// @notice Set allowed interest fee limits override for a vault /// @param vault address of the vault /// @param exists if true a new setting was recorded, if false the override was disabled for the vault /// @param minInterestFee lower limit of allowed interest fee /// @param maxInterestFee upper limit of allowed interest fee event SetVaultInterestFeeRange(address indexed vault, bool exists, uint16 minInterestFee, uint16 maxInterestFee); /// @notice Set interest fee configuration override for a vault /// @param vault address of the vault /// @param exists if true a new setting was recorded, if false the override was disabled for the vault /// @param feeReceiver address to receive protocol fees /// @param protocolFeeShare new protocol fee share event SetFeeConfigSetting(address indexed vault, bool exists, address indexed feeReceiver, uint16 protocolFeeShare); /// @notice Set a new global default protocol fee share /// @param protocolFeeShare previous default protocol fee share /// @param newProtocolFeeShare new default protocol fee share event SetProtocolFeeShare(uint16 protocolFeeShare, uint16 newProtocolFeeShare); /// @notice Transfer admin rights to a new address /// @param newAdmin address of the new admin event SetAdmin(address indexed newAdmin); /// @dev constructor /// @param admin_ admin's address /// @param feeReceiver_ the address of the protocol fee receiver constructor(address admin_, address feeReceiver_) { if (admin_ == address(0)) revert E_InvalidAdmin(); if (feeReceiver_ == address(0)) revert E_InvalidReceiver(); admin = admin_; feeReceiver = feeReceiver_; minInterestFee = 0.1e4; maxInterestFee = 1e4; protocolFeeShare = 0.5e4; } /// @inheritdoc IProtocolConfig function isValidInterestFee(address vault, uint16 interestFee) external view returns (bool) { InterestFeeRange memory range = _interestFeeRanges[vault]; if (range.exists) { return interestFee >= range.minInterestFee && interestFee <= range.maxInterestFee; } return interestFee >= minInterestFee && interestFee <= maxInterestFee; } /// @inheritdoc IProtocolConfig function protocolFeeConfig(address vault) external view returns (address, uint16) { ProtocolFeeConfig memory config = _protocolFeeConfig[vault]; if (config.exists) { return (config.feeReceiver, config.protocolFeeShare); } return (feeReceiver, protocolFeeShare); } /// @inheritdoc IProtocolConfig function interestFeeRange(address vault) external view returns (uint16, uint16) { InterestFeeRange memory ranges = _interestFeeRanges[vault]; if (ranges.exists) { return (ranges.minInterestFee, ranges.maxInterestFee); } return (minInterestFee, maxInterestFee); } // Admin functions /// @dev modifier to check if sender is admin address modifier onlyAdmin() { if (msg.sender != admin) revert E_OnlyAdmin(); _; } /// @notice set admin address /// @param newAdmin admin's address function setAdmin(address newAdmin) external onlyAdmin { if (newAdmin == address(0)) revert E_InvalidAdmin(); admin = newAdmin; emit SetAdmin(newAdmin); } /// @notice set protocol fee receiver /// @dev can only be called by admin /// @param newReceiver new receiver address function setFeeReceiver(address newReceiver) external onlyAdmin { if (newReceiver == address(0)) revert E_InvalidReceiver(); feeReceiver = newReceiver; emit SetFeeReceiver(newReceiver); } /// @notice set protocol fee share /// @dev can only be called by admin /// @param newProtocolFeeShare new protocol fee share function setProtocolFeeShare(uint16 newProtocolFeeShare) external onlyAdmin { if (newProtocolFeeShare > CONFIG_SCALE) revert E_InvalidConfigValue(); emit SetProtocolFeeShare(protocolFeeShare, newProtocolFeeShare); protocolFeeShare = newProtocolFeeShare; } /// @notice set generic min interest fee /// @dev can only be called by admin /// @param minInterestFee_ new min interest fee /// @param maxInterestFee_ new max interest fee function setInterestFeeRange(uint16 minInterestFee_, uint16 maxInterestFee_) external onlyAdmin { if (maxInterestFee_ > CONFIG_SCALE || minInterestFee_ > maxInterestFee_) revert E_InvalidConfigValue(); minInterestFee = minInterestFee_; maxInterestFee = maxInterestFee_; emit SetInterestFeeRange(minInterestFee_, maxInterestFee_); } /// @notice set interest fee range for specific vault /// @dev can only be called by admin /// @param vault vault's address /// @param exists_ a boolean to set or unset the ranges. When false, the generic ranges will be used for the vault /// @param minInterestFee_ min interest fee /// @param maxInterestFee_ max interest fee function setVaultInterestFeeRange(address vault, bool exists_, uint16 minInterestFee_, uint16 maxInterestFee_) external onlyAdmin { if (vault == address(0)) revert E_InvalidVault(); if (maxInterestFee_ > CONFIG_SCALE || minInterestFee_ > maxInterestFee_) revert E_InvalidConfigValue(); _interestFeeRanges[vault] = InterestFeeRange({exists: exists_, minInterestFee: minInterestFee_, maxInterestFee: maxInterestFee_}); emit SetVaultInterestFeeRange(vault, exists_, minInterestFee_, maxInterestFee_); } /// @notice set protocol fee config for specific vault /// @dev can only be called by admin /// @param vault vault's address /// @param exists_ a boolean to set or unset the config. When false, the generic config will be used for the vault /// @param feeReceiver_ fee receiver address /// @param protocolFeeShare_ fee share function setVaultFeeConfig(address vault, bool exists_, address feeReceiver_, uint16 protocolFeeShare_) external onlyAdmin { if (vault == address(0)) revert E_InvalidVault(); if (exists_ && feeReceiver_ == address(0)) revert E_InvalidReceiver(); if (protocolFeeShare_ > CONFIG_SCALE) revert E_InvalidConfigValue(); _protocolFeeConfig[vault] = ProtocolFeeConfig({exists: exists_, feeReceiver: feeReceiver_, protocolFeeShare: protocolFeeShare_}); emit SetFeeConfigSetting(vault, exists_, feeReceiver_, protocolFeeShare_); } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.8.0; /// @title IProtocolConfig /// @custom:security-contact [email protected] /// @author Euler Labs (https://www.eulerlabs.com/) /// @notice Interface of the contract centralizing the protocol's (DAO's) configuration for all the EVault deployments interface IProtocolConfig { /// @notice check if a vault's interest fee is valid /// @param vault address of the vault /// @param interestFee an interest fee value to check /// @dev an interest fee is considered valid only when it is greater than or equal the min interest fee and less /// than or equal the max interest fee /// @dev if a vault has a specific interest fee ranges set by admin, it will be used, otherwise the generic ones /// will be checked against /// @return bool true for valid, else false function isValidInterestFee(address vault, uint16 interestFee) external view returns (bool); /// @notice get protocol fee config for a certain vault /// @param vault address of the vault /// @dev if vault == address(0), the generic config will be returned /// @return address protocol fee receiver /// @return uint16 protocol fee share function protocolFeeConfig(address vault) external view returns (address, uint16); /// @notice get interest fee ranges for a certain vault /// @param vault address of the vault /// @dev if vault == address(0), the generic ranges will be returned /// @return uint16 min interest fee /// @return uint16 max interest fee function interestFeeRange(address vault) external view returns (uint16, uint16); }
{ "remappings": [ "lib/euler-price-oracle:@openzeppelin/contracts/=lib/euler-price-oracle/lib/openzeppelin-contracts/contracts/", "lib/native-token-transfers/evm:openzeppelin-contracts/contracts/=lib/native-token-transfers/evm/lib/openzeppelin-contracts/contracts/", "lib/euler-earn:@openzeppelin/=lib/euler-earn/lib/openzeppelin-contracts/", "lib/euler-earn:@openzeppelin-upgradeable/=lib/euler-earn/lib/openzeppelin-contracts-upgradeable/contracts/", "lib/euler-earn:ethereum-vault-connector/=lib/euler-earn/lib/ethereum-vault-connector/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "ethereum-vault-connector/=lib/ethereum-vault-connector/src/", "evc/=lib/ethereum-vault-connector/src/", "evk/=lib/euler-vault-kit/src/", "evk-test/=lib/euler-vault-kit/test/", "euler-price-oracle/=lib/euler-price-oracle/src/", "euler-price-oracle-test/=lib/euler-price-oracle/test/", "fee-flow/=lib/fee-flow/src/", "reward-streams/=lib/reward-streams/src/", "@openzeppelin/=lib/openzeppelin-contracts/contracts/", "euler-earn/=lib/euler-earn/src/", "native-token-transfers/=lib/native-token-transfers/evm/src/", "@openzeppelin-upgradeable/=lib/euler-earn/lib/openzeppelin-contracts-upgradeable/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@pendle/core-v2/=lib/euler-price-oracle/lib/pendle-core-v2-public/contracts/", "@pyth/=lib/euler-price-oracle/lib/pyth-sdk-solidity/", "@redstone/evm-connector/=lib/euler-price-oracle/lib/redstone-oracles-monorepo/packages/evm-connector/contracts/", "@solady/=lib/euler-price-oracle/lib/solady/src/", "@uniswap/v3-core/=lib/euler-price-oracle/lib/v3-core/", "@uniswap/v3-periphery/=lib/euler-price-oracle/lib/v3-periphery/", "ERC4626/=lib/euler-earn/lib/properties/lib/ERC4626/contracts/", "crytic-properties/=lib/euler-earn/lib/properties/contracts/", "ds-test/=lib/ethereum-vault-connector/lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", "euler-vault-kit/=lib/euler-vault-kit/", "forge-gas-snapshot/=lib/euler-vault-kit/lib/permit2/lib/forge-gas-snapshot/src/", "forge-std/=lib/forge-std/src/", "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/", "layerzero-devtools/=lib/layerzero-devtools/packages/toolbox-foundry/src/", "layerzero-v2/=lib/layerzero-v2/", "openzeppelin/=lib/ethereum-vault-connector/lib/openzeppelin-contracts/contracts/", "pendle-core-v2-public/=lib/euler-price-oracle/lib/pendle-core-v2-public/contracts/", "permit2/=lib/euler-vault-kit/lib/permit2/", "properties/=lib/euler-earn/lib/properties/contracts/", "pyth-sdk-solidity/=lib/euler-price-oracle/lib/pyth-sdk-solidity/", "redstone-oracles-monorepo/=lib/euler-price-oracle/lib/", "solady/=lib/euler-price-oracle/lib/solady/src/", "solidity-bytes-utils/=lib/native-token-transfers/evm/lib/solidity-bytes-utils/contracts/", "solmate/=lib/fee-flow/lib/solmate/src/", "v3-core/=lib/euler-price-oracle/lib/v3-core/contracts/", "v3-periphery/=lib/euler-price-oracle/lib/v3-periphery/contracts/", "wormhole-solidity-sdk/=lib/native-token-transfers/evm/lib/wormhole-solidity-sdk/src/" ], "optimizer": { "enabled": true, "runs": 20000 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"admin_","type":"address"},{"internalType":"address","name":"feeReceiver_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"E_InvalidAdmin","type":"error"},{"inputs":[],"name":"E_InvalidConfigValue","type":"error"},{"inputs":[],"name":"E_InvalidReceiver","type":"error"},{"inputs":[],"name":"E_InvalidVault","type":"error"},{"inputs":[],"name":"E_OnlyAdmin","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"SetAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vault","type":"address"},{"indexed":false,"internalType":"bool","name":"exists","type":"bool"},{"indexed":true,"internalType":"address","name":"feeReceiver","type":"address"},{"indexed":false,"internalType":"uint16","name":"protocolFeeShare","type":"uint16"}],"name":"SetFeeConfigSetting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newFeeReceiver","type":"address"}],"name":"SetFeeReceiver","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newMinInterestFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newMaxInterestFee","type":"uint16"}],"name":"SetInterestFeeRange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"protocolFeeShare","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newProtocolFeeShare","type":"uint16"}],"name":"SetProtocolFeeShare","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vault","type":"address"},{"indexed":false,"internalType":"bool","name":"exists","type":"bool"},{"indexed":false,"internalType":"uint16","name":"minInterestFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"maxInterestFee","type":"uint16"}],"name":"SetVaultInterestFeeRange","type":"event"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"name":"interestFeeRange","outputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"uint16","name":"interestFee","type":"uint16"}],"name":"isValidInterestFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"}],"name":"protocolFeeConfig","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newReceiver","type":"address"}],"name":"setFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"minInterestFee_","type":"uint16"},{"internalType":"uint16","name":"maxInterestFee_","type":"uint16"}],"name":"setInterestFeeRange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newProtocolFeeShare","type":"uint16"}],"name":"setProtocolFeeShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"bool","name":"exists_","type":"bool"},{"internalType":"address","name":"feeReceiver_","type":"address"},{"internalType":"uint16","name":"protocolFeeShare_","type":"uint16"}],"name":"setVaultFeeConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"bool","name":"exists_","type":"bool"},{"internalType":"uint16","name":"minInterestFee_","type":"uint16"},{"internalType":"uint16","name":"maxInterestFee_","type":"uint16"}],"name":"setVaultInterestFeeRange","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561000f575f80fd5b5060405161109d38038061109d83398101604081905261002e916100ee565b6001600160a01b0382166100555760405163914f65bd60e01b815260040160405180910390fd5b6001600160a01b03811661007c576040516301db9f3960e41b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b039384161790556001805491909216600163ffff000160a01b031990911617607d60b31b1765ffff0000ffff60a01b19166504e20000027160a31b17905561011f565b80516001600160a01b03811681146100e9575f80fd5b919050565b5f80604083850312156100ff575f80fd5b610108836100d3565b9150610116602084016100d3565b90509250929050565b610f718061012c5f395ff3fe608060405234801561000f575f80fd5b50600436106100c4575f3560e01c806368cfa7551161007d578063efdcd97411610058578063efdcd974146101f3578063f851a44014610206578063f889ff0e14610225575f80fd5b806368cfa75514610188578063704b6c021461019b578063b3f00674146101ae575f80fd5b806323f29636116100ad57806323f29636146100f057806343f5f7a514610123578063460690f414610146575f80fd5b8063101c72b0146100c85780631ac40d7c146100dd575b5f80fd5b6100db6100d6366004610dfc565b610238565b005b6100db6100eb366004610e2d565b6103a9565b6101036100fe366004610e70565b6104e0565b6040805161ffff9384168152929091166020830152015b60405180910390f35b610136610131366004610e89565b6105a0565b604051901515815260200161011a565b610159610154366004610e70565b610696565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161011a565b6100db610196366004610eb2565b61075f565b6100db6101a9366004610e70565b61096f565b6001546101ce9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161011a565b6100db610201366004610e70565b610a78565b5f546101ce9073ffffffffffffffffffffffffffffffffffffffff1681565b6100db610233366004610f03565b610b83565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610288576040517fed15320200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff821611806102a357508061ffff168261ffff16115b156102da576040517f264ececf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff1676010000000000000000000000000000000000000000000061ffff8581169182027fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff16929092177801000000000000000000000000000000000000000000000000928516928302179092556040805192835260208301919091527f6499165f14c86e20b75246609677babcd7454ce8200d1701097127fb3fd70330910160405180910390a15050565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146103f9576040517fed15320200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff82161115610439576040517f264ececf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040805161ffff740100000000000000000000000000000000000000009093048316815291831660208301527f16eebe46bba70764f544f754c7d30a6bd1e64e536d3295887b6b39d90f7ed8f3910160405180910390a16001805461ffff90921674010000000000000000000000000000000000000000027fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602090815260408083208151606081018352905460ff8116158015835261ffff6101008304811695840195909552630100000090910490931691810191909152829161055757806020015181604001519250925050915091565b505060015461ffff760100000000000000000000000000000000000000000000820481169478010000000000000000000000000000000000000000000000009092041692509050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602090815260408083208151606081018352905460ff8116158015835261ffff61010083048116958401959095526301000000909104909316918101919091529061063257806020015161ffff168361ffff161015801561062a5750806040015161ffff168361ffff1611155b915050610690565b60015461ffff76010000000000000000000000000000000000000000000090910481169084161080159061068c575060015461ffff7801000000000000000000000000000000000000000000000000909104811690841611155b9150505b92915050565b73ffffffffffffffffffffffffffffffffffffffff8181165f9081526003602090815260408083208151606081018352905460ff81161580158352610100820490961693820193909352750100000000000000000000000000000000000000000090920461ffff1690820152909182919061071f57806020015181604001519250925050915091565b505060015473ffffffffffffffffffffffffffffffffffffffff8116937401000000000000000000000000000000000000000090910461ffff1692509050565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146107af576040517fed15320200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166107fc576040517f528a2cc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff8216118061081757508061ffff168261ffff16115b1561084e576040517f264ececf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516060808201835285151580835261ffff868116602080860182815288841687890181815273ffffffffffffffffffffffffffffffffffffffff8e165f818152600286528b902099518a549451925188166301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff93909816610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff911515919091167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009095169490941793909317169490941790965586519384528301529381019390935290917f106bcb6716b2dda8ade6fcfa9f298af444fccef5a5fae729cfa78aa47aeb0a9b910160405180910390a250505050565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146109bf576040517fed15320200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a0c576040517f914f65bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a191a250565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610ac8576040517fed15320200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b15576040517f1db9f39000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fffb40bfdfd246e95f543d08d9713c339f1d90fa9265e39b4f562f9011d7c919f905f90a250565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610bd3576040517fed15320200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416610c20576040517f528a2cc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828015610c41575073ffffffffffffffffffffffffffffffffffffffff8216155b15610c78576040517f1db9f39000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff82161115610cb8576040517f264ececf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825284151580825273ffffffffffffffffffffffffffffffffffffffff858116602080850182815261ffff8881168789018181528d87165f818152600387528b902099518a54955192517fffffffffffffffffffffff0000000000000000000000000000000000000000009096169015157fffffffffffffffffffffff0000000000000000000000000000000000000000ff16176101009290981691909102969096177fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000939092169290920217909555855193845283019390935291927f8e9825cb7981d9cb2b6f5cd06c51cebc071af35be054156f8f5b9c1996cfdfa6910160405180910390a350505050565b803561ffff81168114610df7575f80fd5b919050565b5f8060408385031215610e0d575f80fd5b610e1683610de6565b9150610e2460208401610de6565b90509250929050565b5f60208284031215610e3d575f80fd5b610e4682610de6565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610df7575f80fd5b5f60208284031215610e80575f80fd5b610e4682610e4d565b5f8060408385031215610e9a575f80fd5b610e1683610e4d565b80358015158114610df7575f80fd5b5f805f8060808587031215610ec5575f80fd5b610ece85610e4d565b9350610edc60208601610ea3565b9250610eea60408601610de6565b9150610ef860608601610de6565b905092959194509250565b5f805f8060808587031215610f16575f80fd5b610f1f85610e4d565b9350610f2d60208601610ea3565b9250610eea60408601610e4d56fea2646970667358221220d31e54de91ea0bd80c0fb4e226411195a394d82832caa168ecc4f9d50817005a64736f6c63430008180033000000000000000000000000b49f50798b7014034bd7804912cc40dde9ef82a2000000000000000000000000b49f50798b7014034bd7804912cc40dde9ef82a2
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106100c4575f3560e01c806368cfa7551161007d578063efdcd97411610058578063efdcd974146101f3578063f851a44014610206578063f889ff0e14610225575f80fd5b806368cfa75514610188578063704b6c021461019b578063b3f00674146101ae575f80fd5b806323f29636116100ad57806323f29636146100f057806343f5f7a514610123578063460690f414610146575f80fd5b8063101c72b0146100c85780631ac40d7c146100dd575b5f80fd5b6100db6100d6366004610dfc565b610238565b005b6100db6100eb366004610e2d565b6103a9565b6101036100fe366004610e70565b6104e0565b6040805161ffff9384168152929091166020830152015b60405180910390f35b610136610131366004610e89565b6105a0565b604051901515815260200161011a565b610159610154366004610e70565b610696565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161011a565b6100db610196366004610eb2565b61075f565b6100db6101a9366004610e70565b61096f565b6001546101ce9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161011a565b6100db610201366004610e70565b610a78565b5f546101ce9073ffffffffffffffffffffffffffffffffffffffff1681565b6100db610233366004610f03565b610b83565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610288576040517fed15320200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff821611806102a357508061ffff168261ffff16115b156102da576040517f264ececf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff1676010000000000000000000000000000000000000000000061ffff8581169182027fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff16929092177801000000000000000000000000000000000000000000000000928516928302179092556040805192835260208301919091527f6499165f14c86e20b75246609677babcd7454ce8200d1701097127fb3fd70330910160405180910390a15050565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146103f9576040517fed15320200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff82161115610439576040517f264ececf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040805161ffff740100000000000000000000000000000000000000009093048316815291831660208301527f16eebe46bba70764f544f754c7d30a6bd1e64e536d3295887b6b39d90f7ed8f3910160405180910390a16001805461ffff90921674010000000000000000000000000000000000000000027fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602090815260408083208151606081018352905460ff8116158015835261ffff6101008304811695840195909552630100000090910490931691810191909152829161055757806020015181604001519250925050915091565b505060015461ffff760100000000000000000000000000000000000000000000820481169478010000000000000000000000000000000000000000000000009092041692509050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602090815260408083208151606081018352905460ff8116158015835261ffff61010083048116958401959095526301000000909104909316918101919091529061063257806020015161ffff168361ffff161015801561062a5750806040015161ffff168361ffff1611155b915050610690565b60015461ffff76010000000000000000000000000000000000000000000090910481169084161080159061068c575060015461ffff7801000000000000000000000000000000000000000000000000909104811690841611155b9150505b92915050565b73ffffffffffffffffffffffffffffffffffffffff8181165f9081526003602090815260408083208151606081018352905460ff81161580158352610100820490961693820193909352750100000000000000000000000000000000000000000090920461ffff1690820152909182919061071f57806020015181604001519250925050915091565b505060015473ffffffffffffffffffffffffffffffffffffffff8116937401000000000000000000000000000000000000000090910461ffff1692509050565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146107af576040517fed15320200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166107fc576040517f528a2cc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff8216118061081757508061ffff168261ffff16115b1561084e576040517f264ececf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516060808201835285151580835261ffff868116602080860182815288841687890181815273ffffffffffffffffffffffffffffffffffffffff8e165f818152600286528b902099518a549451925188166301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff93909816610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff911515919091167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009095169490941793909317169490941790965586519384528301529381019390935290917f106bcb6716b2dda8ade6fcfa9f298af444fccef5a5fae729cfa78aa47aeb0a9b910160405180910390a250505050565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146109bf576040517fed15320200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a0c576040517f914f65bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a191a250565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610ac8576040517fed15320200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b15576040517f1db9f39000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fffb40bfdfd246e95f543d08d9713c339f1d90fa9265e39b4f562f9011d7c919f905f90a250565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610bd3576040517fed15320200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416610c20576040517f528a2cc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828015610c41575073ffffffffffffffffffffffffffffffffffffffff8216155b15610c78576040517f1db9f39000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff82161115610cb8576040517f264ececf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825284151580825273ffffffffffffffffffffffffffffffffffffffff858116602080850182815261ffff8881168789018181528d87165f818152600387528b902099518a54955192517fffffffffffffffffffffff0000000000000000000000000000000000000000009096169015157fffffffffffffffffffffff0000000000000000000000000000000000000000ff16176101009290981691909102969096177fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000939092169290920217909555855193845283019390935291927f8e9825cb7981d9cb2b6f5cd06c51cebc071af35be054156f8f5b9c1996cfdfa6910160405180910390a350505050565b803561ffff81168114610df7575f80fd5b919050565b5f8060408385031215610e0d575f80fd5b610e1683610de6565b9150610e2460208401610de6565b90509250929050565b5f60208284031215610e3d575f80fd5b610e4682610de6565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610df7575f80fd5b5f60208284031215610e80575f80fd5b610e4682610e4d565b5f8060408385031215610e9a575f80fd5b610e1683610e4d565b80358015158114610df7575f80fd5b5f805f8060808587031215610ec5575f80fd5b610ece85610e4d565b9350610edc60208601610ea3565b9250610eea60408601610de6565b9150610ef860608601610de6565b905092959194509250565b5f805f8060808587031215610f16575f80fd5b610f1f85610e4d565b9350610f2d60208601610ea3565b9250610eea60408601610e4d56fea2646970667358221220d31e54de91ea0bd80c0fb4e226411195a394d82832caa168ecc4f9d50817005a64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b49f50798b7014034bd7804912cc40dde9ef82a2000000000000000000000000b49f50798b7014034bd7804912cc40dde9ef82a2
-----Decoded View---------------
Arg [0] : admin_ (address): 0xb49F50798B7014034bd7804912CC40ddE9eF82A2
Arg [1] : feeReceiver_ (address): 0xb49F50798B7014034bd7804912CC40ddE9eF82A2
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000b49f50798b7014034bd7804912cc40dde9ef82a2
Arg [1] : 000000000000000000000000b49f50798b7014034bd7804912cc40dde9ef82a2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ 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.