S Price: $0.58098 (-2.36%)

Contract

0xc2f9FE90bd17e017898b6EfDaa73c34Fddde299e

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Admin59798062025-01-31 5:29:1352 days ago1738301353IN
0xc2f9FE90...Fddde299e
0 S0.0022053775.625
Set Fee Receiver59797282025-01-31 5:27:3552 days ago1738301255IN
0xc2f9FE90...Fddde299e
0 S0.0025754882.5
Set Fee Receiver53245552025-01-25 1:46:5559 days ago1737769615IN
0xc2f9FE90...Fddde299e
0 S0.0023382274.9

Parent Transaction Hash Block From To
View All Internal Transactions
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
File 1 of 2 : ProtocolConfig.sol
// 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_);
    }
}

File 2 of 2 : IProtocolConfig.sol
// 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);
}

Settings
{
  "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

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"}]

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


Block Transaction Gas Used Reward
view all blocks ##produced##

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.