ETH Price: $1,977.62 (-1.74%)
 

Overview

ETH Balance

2.827069507674254588 ETH

Eth Value

$5,590.88 (@ $1,977.62/ETH)

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Batch Collect Re...211152812024-11-04 15:48:11482 days ago1730735291IN
0x5Bab0244...6c074D57f
0 ETH0.0005288310.65763023
Batch Collect Re...209735942024-10-15 21:17:47502 days ago1729027067IN
0x5Bab0244...6c074D57f
0 ETH0.0009476116.9370753
Batch Collect Re...208030312024-09-22 2:08:47525 days ago1726970927IN
0x5Bab0244...6c074D57f
0 ETH0.00036287.31164355
Batch Collect Re...207427622024-09-13 16:03:35534 days ago1726243415IN
0x5Bab0244...6c074D57f
0 ETH0.000418818.44054554
Batch Collect Re...207358082024-09-12 16:45:23535 days ago1726159523IN
0x5Bab0244...6c074D57f
0 ETH0.000245274.94298037
Batch Collect Re...207357872024-09-12 16:41:11535 days ago1726159271IN
0x5Bab0244...6c074D57f
0 ETH0.000266685.37457406
Batch Collect Re...207230052024-09-10 21:50:47537 days ago1726005047IN
0x5Bab0244...6c074D57f
0 ETH0.000743114.97591902
Batch Collect Re...206780292024-09-04 15:10:59543 days ago1725462659IN
0x5Bab0244...6c074D57f
0 ETH0.0005982512.05672896
Batch Collect Re...206631852024-09-02 13:29:23545 days ago1725283763IN
0x5Bab0244...6c074D57f
0 ETH0.000197463.97959903
Batch Collect Re...205985382024-08-24 12:44:35554 days ago1724503475IN
0x5Bab0244...6c074D57f
0 ETH0.000053331.0749124
Batch Collect Re...205679742024-08-20 6:13:11558 days ago1724134391IN
0x5Bab0244...6c074D57f
0 ETH0.000064291.2957976
Create Fee Contr...205288182024-08-14 19:00:11564 days ago1723662011IN
0x5Bab0244...6c074D57f
0 ETH0.001127954.44668074
Create Fee Contr...205288132024-08-14 18:59:11564 days ago1723661951IN
0x5Bab0244...6c074D57f
0 ETH0.001057684.16966057
Create Fee Contr...205288062024-08-14 18:57:47564 days ago1723661867IN
0x5Bab0244...6c074D57f
0 ETH0.001106364.36154979
Create Fee Contr...205288002024-08-14 18:56:35564 days ago1723661795IN
0x5Bab0244...6c074D57f
0 ETH0.001220064.80977257
Create Fee Contr...205287942024-08-14 18:55:23564 days ago1723661723IN
0x5Bab0244...6c074D57f
0 ETH0.001283945.06160729
Change Default F...205287692024-08-14 18:50:23564 days ago1723661423IN
0x5Bab0244...6c074D57f
0 ETH0.000157545.45934493
Create Fee Contr...205287552024-08-14 18:47:35564 days ago1723661255IN
0x5Bab0244...6c074D57f
0 ETH0.001490475.87581512
Create Fee Contr...205287512024-08-14 18:46:47564 days ago1723661207IN
0x5Bab0244...6c074D57f
0 ETH0.001525266.01297241
Create Fee Contr...205287452024-08-14 18:45:35564 days ago1723661135IN
0x5Bab0244...6c074D57f
0 ETH0.001459725.75460066
Batch Collect Re...205287162024-08-14 18:39:35564 days ago1723660775IN
0x5Bab0244...6c074D57f
0 ETH0.000208344.19876149
Create Fee Contr...205285942024-08-14 18:14:59564 days ago1723659299IN
0x5Bab0244...6c074D57f
0 ETH0.001258534.96146283
Create Fee Contr...205285792024-08-14 18:11:59564 days ago1723659119IN
0x5Bab0244...6c074D57f
0 ETH0.001264344.98458986
Create Fee Contr...205285542024-08-14 18:06:59564 days ago1723658819IN
0x5Bab0244...6c074D57f
0 ETH0.001500735.91624876
Create Fee Contr...205285482024-08-14 18:05:47564 days ago1723658747IN
0x5Bab0244...6c074D57f
0 ETH0.001604676.32602631
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer211152812024-11-04 15:48:11482 days ago1730735291
0x5Bab0244...6c074D57f
0.57962869 ETH
Transfer209735942024-10-15 21:17:47502 days ago1729027067
0x5Bab0244...6c074D57f
0.03311432 ETH
Transfer208030312024-09-22 2:08:47525 days ago1726970927
0x5Bab0244...6c074D57f
0.26591678 ETH
Transfer207427622024-09-13 16:03:35534 days ago1726243415
0x5Bab0244...6c074D57f
0.0262029 ETH
Transfer207358082024-09-12 16:45:23535 days ago1726159523
0x5Bab0244...6c074D57f
0.04085265 ETH
Transfer207357872024-09-12 16:41:11535 days ago1726159271
0x5Bab0244...6c074D57f
0.08443352 ETH
Transfer207230052024-09-10 21:50:47537 days ago1726005047
0x5Bab0244...6c074D57f
0.25324044 ETH
Transfer206780292024-09-04 15:10:59543 days ago1725462659
0x5Bab0244...6c074D57f
0.18018008 ETH
Transfer206631852024-09-02 13:29:23545 days ago1725283763
0x5Bab0244...6c074D57f
0.24240293 ETH
Transfer205985382024-08-24 12:44:35554 days ago1724503475
0x5Bab0244...6c074D57f
0.14502682 ETH
Transfer205679742024-08-20 6:13:11558 days ago1724134391
0x5Bab0244...6c074D57f
0.02316651 ETH
0x60c06040205288182024-08-14 19:00:11564 days ago1723662011
0x5Bab0244...6c074D57f
 Contract Creation0 ETH
0x60c06040205288132024-08-14 18:59:11564 days ago1723661951
0x5Bab0244...6c074D57f
 Contract Creation0 ETH
0x60c06040205288062024-08-14 18:57:47564 days ago1723661867
0x5Bab0244...6c074D57f
 Contract Creation0 ETH
0x60c06040205288002024-08-14 18:56:35564 days ago1723661795
0x5Bab0244...6c074D57f
 Contract Creation0 ETH
0x60c06040205287942024-08-14 18:55:23564 days ago1723661723
0x5Bab0244...6c074D57f
 Contract Creation0 ETH
0x60c06040205287552024-08-14 18:47:35564 days ago1723661255
0x5Bab0244...6c074D57f
 Contract Creation0 ETH
0x60c06040205287512024-08-14 18:46:47564 days ago1723661207
0x5Bab0244...6c074D57f
 Contract Creation0 ETH
0x60c06040205287452024-08-14 18:45:35564 days ago1723661135
0x5Bab0244...6c074D57f
 Contract Creation0 ETH
Transfer205287162024-08-14 18:39:35564 days ago1723660775
0x5Bab0244...6c074D57f
0.93184728 ETH
0x60c06040205285942024-08-14 18:14:59564 days ago1723659299
0x5Bab0244...6c074D57f
 Contract Creation0 ETH
0x60c06040205285792024-08-14 18:11:59564 days ago1723659119
0x5Bab0244...6c074D57f
 Contract Creation0 ETH
0x60c06040205285542024-08-14 18:06:59564 days ago1723658819
0x5Bab0244...6c074D57f
 Contract Creation0 ETH
0x60c06040205285482024-08-14 18:05:47564 days ago1723658747
0x5Bab0244...6c074D57f
 Contract Creation0 ETH
0x60c06040205285122024-08-14 17:58:35564 days ago1723658315
0x5Bab0244...6c074D57f
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FeeRewardsManager

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
// SPDX-License-Identifier: Apache License 2.0
pragma solidity ^0.8.13;

import "@openzeppelin/contracts/access/Ownable2Step.sol";

// We use a library for the `calculateRewards` function because the less code in
// `RewardsCollector` the less expensive it is to deploy the collector contract.
// We can call the library instead of deploying the library's code again and
// again.
library CalculateAndSendRewards {
    // Fee denominator, if `feeNominator = 500`,
    // the tax is 500/10000 = 5/100 = 5%.
    uint32 public constant FEE_DENOMINATOR = 10_000;
    event CollectedReward(
        address withdrawalCredential,
        uint256 withdrawnAmount,
        address feeRewardsManager,
        uint256 fee
    );

    function calculateAndSendRewards(
        uint32 feeNominator,
        address feeRewardsManager,
        address withdrawalCredential
    ) public {
        require(address(this).balance != 0, "Nothing to distribute");

        uint256 feeAmount = (address(this).balance * feeNominator) /
            FEE_DENOMINATOR;
        uint256 withdrawAmount = address(this).balance - feeAmount;
        emit CollectedReward(
            withdrawalCredential,
            withdrawAmount,
            feeRewardsManager,
            feeAmount
        );
        // This can be used to call this contract again (reentrancy) but since
        // all funds from this contract are used for the feeRewardsManager.
        (bool feeRewardsManagerSent, ) = payable(feeRewardsManager).call{
            value: feeAmount
        }("");
        require(
            feeRewardsManagerSent,
            "Failed to send Ether back to owner contract"
        );
        (bool sent, ) = payable(withdrawalCredential).call{
            value: withdrawAmount
        }("");
        require(sent, "Failed to send Ether back to withdrawal credential");
    }
}

contract RewardsCollector {
    // 1 - fee % will go to the user in this address.
    address public immutable withdrawalCredential;

    // Fee's numerator.
    uint32 public feeNumerator;

    // This is the contract that created the `RewardsCollector`.
    // Do not use owner here because this contract is going to be
    // created multiple times for each `withdrawal credential` and
    // we don't need any function for the ownership except when changing
    // the fee.
    address public immutable parentContract;

    // Allow receiving MEV and other rewards.
    receive() external payable {}

    function collectRewards() public payable {
        CalculateAndSendRewards.calculateAndSendRewards(
            feeNumerator,
            parentContract,
            withdrawalCredential
        );
    }

    constructor(address _withdrawalCredential) {
        withdrawalCredential = _withdrawalCredential;
        parentContract = msg.sender;
    }

    function changeFeeNumerator(uint32 _newFeeNumerator) public {
        require(
            msg.sender == parentContract,
            "ChangeFee not called from parent contract"
        );
        // Do not let fee be > 1 (with 10_000 denominator).
        require(_newFeeNumerator <= 10_000, "Invalid fee numerator");
        feeNumerator = _newFeeNumerator;
    }
}

contract FeeRewardsManager is Ownable2Step {
    uint32 public defaultFeeNumerator;

    constructor(uint32 _defaultFeeNumerator) Ownable(msg.sender) {
        // Do not let fee be > 1 (with 10_000 denominator).
        require(_defaultFeeNumerator <= 10_000, "Invalid fee numerator");
        defaultFeeNumerator = _defaultFeeNumerator;
    }

    event ContractDeployed(address contractAddress, uint32 feeNumerator);

    function changeDefaultFee(uint32 _newFeeNumerator) public onlyOwner {
        // Do not let fee be > 1 (with 10_000 denominator).
        require(_newFeeNumerator <= 10_000, "Invalid fee numerator");
        defaultFeeNumerator = _newFeeNumerator;
    }

    function createFeeContract(
        address _withdrawalCredential
    ) public returns (address payable) {
        bytes32 withdrawalCredentialBytes = bytes32(
            uint256(uint160(_withdrawalCredential))
        );
        // Uses CREATE2 opcode.
        RewardsCollector rewardsCollector = new RewardsCollector{
            salt: withdrawalCredentialBytes
        }(_withdrawalCredential);
        rewardsCollector.changeFeeNumerator(defaultFeeNumerator);
        emit ContractDeployed(address(rewardsCollector), defaultFeeNumerator);
        return payable(address(rewardsCollector));
    }

    // Predicts the address of a new contract that will be a `fee_recipient` of
    // an Ethereum validator.
    // Given the `_withdrawalCredential` we can instantiate a contract that will
    // be deployed at a deterministic address, calculated given the
    // `_withdrawalCredential`, the current contract address and the current
    // contract's bytecode.
    function predictFeeContractAddress(
        address _withdrawalCredential
    ) public view returns (address) {
        bytes memory bytecode = type(RewardsCollector).creationCode;
        bytecode = abi.encodePacked(
            bytecode,
            abi.encode(_withdrawalCredential)
        );
        bytes32 withdrawalCredentialBytes = bytes32(
            uint256(uint160(_withdrawalCredential))
        );
        bytes32 hash = keccak256(
            abi.encodePacked(
                bytes1(0xff),
                address(this),
                withdrawalCredentialBytes,
                keccak256(bytecode)
            )
        );
        return address(uint160(uint(hash)));
    }

    function changeFeeNumerator(
        address payable _feeContract,
        uint32 _newFee
    ) public onlyOwner {
        RewardsCollector(_feeContract).changeFeeNumerator(_newFee);
    }

    function batchCollectRewards(
        address payable[] calldata feeAddresses
    ) public {
        for (uint32 i = 0; i < feeAddresses.length; ++i) {
            RewardsCollector(feeAddresses[i]).collectRewards();
        }
    }

    receive() external payable {}

    // Withdraws Eth from the manager contract.
    function getEth(address addr) external onlyOwner {
        (bool sent, ) = payable(addr).call{value: address(this).balance}("");
        require(sent, "Failed to get Eth from contract");
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol)

pragma solidity ^0.8.20;

import {Ownable} from "./Ownable.sol";

/**
 * @dev Contract module which provides access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This extension of the {Ownable} contract includes a two-step mechanism to transfer
 * ownership, where the new owner must call {acceptOwnership} in order to replace the
 * old one. This can help prevent common mistakes, such as transfers of ownership to
 * incorrect accounts, or to contracts that are unable to interact with the
 * permission system.
 *
 * The initial owner is specified at deployment time in the constructor for `Ownable`. This
 * can later be changed with {transferOwnership} and {acceptOwnership}.
 *
 * This module is used through inheritance. It will make available all functions
 * from parent (Ownable).
 */
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Returns the address of the pending owner.
     */
    function pendingOwner() public view virtual returns (address) {
        return _pendingOwner;
    }

    /**
     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    /**
     * @dev The new owner accepts the ownership transfer.
     */
    function acceptOwnership() public virtual {
        address sender = _msgSender();
        if (pendingOwner() != sender) {
            revert OwnableUnauthorizedAccount(sender);
        }
        _transferOwnership(sender);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @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 {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @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;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

Settings
{
  "remappings": [
    "@openzeppelin/=lib/openzeppelin-contracts/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "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/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "viaIR": false,
  "libraries": {
    "src/FeeRewardsManager.sol": {
      "CalculateAndSendRewards": "0x8D03884EF3F39ec263F3D7c3954A868468ff8497"
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"uint32","name":"_defaultFeeNumerator","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"uint32","name":"feeNumerator","type":"uint32"}],"name":"ContractDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"feeAddresses","type":"address[]"}],"name":"batchCollectRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_newFeeNumerator","type":"uint32"}],"name":"changeDefaultFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_feeContract","type":"address"},{"internalType":"uint32","name":"_newFee","type":"uint32"}],"name":"changeFeeNumerator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_withdrawalCredential","type":"address"}],"name":"createFeeContract","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultFeeNumerator","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_withdrawalCredential","type":"address"}],"name":"predictFeeContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50604051610f5b380380610f5b83398101604081905261002f9161014d565b338061005657604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61005f816100e1565b506127108163ffffffff1611156100b85760405162461bcd60e51b815260206004820152601560248201527f496e76616c696420666565206e756d657261746f720000000000000000000000604482015260640161004d565b6001805463ffffffff909216600160a01b0263ffffffff60a01b1990921691909117905561017a565b600180546001600160a01b03191690556100fa816100fd565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561015f57600080fd5b815163ffffffff8116811461017357600080fd5b9392505050565b610dd2806101896000396000f3fe6080604052600436106100ab5760003560e01c80638da5cb5b116100645780638da5cb5b14610180578063a900ccec1461019e578063af3f6f4d146101be578063e30c3978146101f7578063ef5828d014610215578063f2fde38b1461023557600080fd5b806301361090146100b75780632630be4e146100d9578063673c949d146100f95780636a953e0914610136578063715018a61461015657806379ba50971461016b57600080fd5b366100b257005b600080fd5b3480156100c357600080fd5b506100d76100d2366004610816565b610255565b005b3480156100e557600080fd5b506100d76100f436600461084b565b6102c0565b34801561010557600080fd5b506101196101143660046108c0565b610366565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014257600080fd5b506100d76101513660046108c0565b61047e565b34801561016257600080fd5b506100d7610532565b34801561017757600080fd5b506100d7610546565b34801561018c57600080fd5b506000546001600160a01b0316610119565b3480156101aa57600080fd5b506101196101b93660046108c0565b61058a565b3480156101ca57600080fd5b506001546101e290600160a01b900463ffffffff1681565b60405163ffffffff909116815260200161012d565b34801561020357600080fd5b506001546001600160a01b0316610119565b34801561022157600080fd5b506100d76102303660046108e4565b61065b565b34801561024157600080fd5b506100d76102503660046108c0565b6106d9565b61025d61074a565b6040516335c8427760e01b815263ffffffff821660048201526001600160a01b038316906335c8427790602401600060405180830381600087803b1580156102a457600080fd5b505af11580156102b8573d6000803e3d6000fd5b505050505050565b60005b63ffffffff81168211156103615782828263ffffffff168181106102e9576102e96108ff565b90506020020160208101906102fe91906108c0565b6001600160a01b03166370bb45b36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561033857600080fd5b505af115801561034c573d6000803e3d6000fd5b505050508061035a90610915565b90506102c3565b505050565b600080826001600160a01b031660001b905060008184604051610388906107db565b6001600160a01b0390911681526020018190604051809103906000f59050801580156103b8573d6000803e3d6000fd5b506001546040516335c8427760e01b8152600160a01b90910463ffffffff1660048201529091506001600160a01b038216906335c8427790602401600060405180830381600087803b15801561040d57600080fd5b505af1158015610421573d6000803e3d6000fd5b5050600154604080516001600160a01b0386168152600160a01b90920463ffffffff1660208301527f620dca0c9d04f7cea9d7f31e571d74acccd54c21dc8ff8855ec1d5a21733c26b935001905060405180910390a19392505050565b61048661074a565b6000816001600160a01b03164760405160006040518083038185875af1925050503d80600081146104d3576040519150601f19603f3d011682016040523d82523d6000602084013e6104d8565b606091505b505090508061052e5760405162461bcd60e51b815260206004820152601f60248201527f4661696c656420746f20676574204574682066726f6d20636f6e74726163740060448201526064015b60405180910390fd5b5050565b61053a61074a565b6105446000610777565b565b60015433906001600160a01b0316811461057e5760405163118cdaa760e01b81526001600160a01b0382166004820152602401610525565b61058781610777565b50565b6000806040518060200161059d906107db565b601f1982820381018352601f9091011660408181526001600160a01b038616602083015291925082910160408051601f19818403018152908290526105e59291602001610976565b60408051601f1981840301815282825280516020918201206001600160f81b0319828501523060601b6bffffffffffffffffffffffff191660218501526001600160a01b039690961660358401526055808401969096528151808403909601865260759092019052835193019290922092915050565b61066361074a565b6127108163ffffffff1611156106b35760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103332b290373ab6b2b930ba37b960591b6044820152606401610525565b6001805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6106e161074a565b600180546001600160a01b0383166001600160a01b031990911681179091556107126000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000546001600160a01b031633146105445760405163118cdaa760e01b8152336004820152602401610525565b600180546001600160a01b031916905561058781600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6104098061099483390190565b6001600160a01b038116811461058757600080fd5b803563ffffffff8116811461081157600080fd5b919050565b6000806040838503121561082957600080fd5b8235610834816107e8565b9150610842602084016107fd565b90509250929050565b6000806020838503121561085e57600080fd5b823567ffffffffffffffff8082111561087657600080fd5b818501915085601f83011261088a57600080fd5b81358181111561089957600080fd5b8660208260051b85010111156108ae57600080fd5b60209290920196919550909350505050565b6000602082840312156108d257600080fd5b81356108dd816107e8565b9392505050565b6000602082840312156108f657600080fd5b6108dd826107fd565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff80831681810361093c57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b6000815160005b81811015610967576020818501810151868301520161094d565b50600093019283525090919050565b600061098b6109858386610946565b84610946565b94935050505056fe60c060405234801561001057600080fd5b5060405161040938038061040983398101604081905261002f91610044565b6001600160a01b03166080523360a052610074565b60006020828403121561005657600080fd5b81516001600160a01b038116811461006d57600080fd5b9392505050565b60805160a05161035d6100ac60003960008181606c01528181610146015261025c01526000818160e70152610284015261035d6000f3fe60806040526004361061004e5760003560e01c8063230b9da31461005a57806335c84277146100ab57806370bb45b3146100cd57806383059303146100d5578063e86dea4a1461010957600080fd5b3661005557005b600080fd5b34801561006657600080fd5b5061008e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100b757600080fd5b506100cb6100c63660046102fa565b61013b565b005b6100cb610236565b3480156100e157600080fd5b5061008e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561011557600080fd5b506000546101269063ffffffff1681565b60405163ffffffff90911681526020016100a2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101ca5760405162461bcd60e51b815260206004820152602960248201527f4368616e6765466565206e6f742063616c6c65642066726f6d20706172656e746044820152680818dbdb9d1c9858dd60ba1b60648201526084015b60405180910390fd5b6127108163ffffffff16111561021a5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103332b290373ab6b2b930ba37b960591b60448201526064016101c1565b6000805463ffffffff191663ffffffff92909216919091179055565b60005460405162a1b0d360e71b815263ffffffff90911660048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000166044820152738d03884ef3f39ec263f3d7c3954a868468ff8497906350d869809060640160006040518083038186803b1580156102e057600080fd5b505af41580156102f4573d6000803e3d6000fd5b50505050565b60006020828403121561030c57600080fd5b813563ffffffff8116811461032057600080fd5b939250505056fea2646970667358221220dedd6e81267a3223fee9cbafd3198b4e3a87c70d5c77006b127bdbb16a8d6c9064736f6c63430008140033a2646970667358221220329aaff78029e413c142aa23bdae08b8518c0e9660d94ceee57df6f2e35d147564736f6c634300081400330000000000000000000000000000000000000000000000000000000000000af0

Deployed Bytecode

0x6080604052600436106100ab5760003560e01c80638da5cb5b116100645780638da5cb5b14610180578063a900ccec1461019e578063af3f6f4d146101be578063e30c3978146101f7578063ef5828d014610215578063f2fde38b1461023557600080fd5b806301361090146100b75780632630be4e146100d9578063673c949d146100f95780636a953e0914610136578063715018a61461015657806379ba50971461016b57600080fd5b366100b257005b600080fd5b3480156100c357600080fd5b506100d76100d2366004610816565b610255565b005b3480156100e557600080fd5b506100d76100f436600461084b565b6102c0565b34801561010557600080fd5b506101196101143660046108c0565b610366565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014257600080fd5b506100d76101513660046108c0565b61047e565b34801561016257600080fd5b506100d7610532565b34801561017757600080fd5b506100d7610546565b34801561018c57600080fd5b506000546001600160a01b0316610119565b3480156101aa57600080fd5b506101196101b93660046108c0565b61058a565b3480156101ca57600080fd5b506001546101e290600160a01b900463ffffffff1681565b60405163ffffffff909116815260200161012d565b34801561020357600080fd5b506001546001600160a01b0316610119565b34801561022157600080fd5b506100d76102303660046108e4565b61065b565b34801561024157600080fd5b506100d76102503660046108c0565b6106d9565b61025d61074a565b6040516335c8427760e01b815263ffffffff821660048201526001600160a01b038316906335c8427790602401600060405180830381600087803b1580156102a457600080fd5b505af11580156102b8573d6000803e3d6000fd5b505050505050565b60005b63ffffffff81168211156103615782828263ffffffff168181106102e9576102e96108ff565b90506020020160208101906102fe91906108c0565b6001600160a01b03166370bb45b36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561033857600080fd5b505af115801561034c573d6000803e3d6000fd5b505050508061035a90610915565b90506102c3565b505050565b600080826001600160a01b031660001b905060008184604051610388906107db565b6001600160a01b0390911681526020018190604051809103906000f59050801580156103b8573d6000803e3d6000fd5b506001546040516335c8427760e01b8152600160a01b90910463ffffffff1660048201529091506001600160a01b038216906335c8427790602401600060405180830381600087803b15801561040d57600080fd5b505af1158015610421573d6000803e3d6000fd5b5050600154604080516001600160a01b0386168152600160a01b90920463ffffffff1660208301527f620dca0c9d04f7cea9d7f31e571d74acccd54c21dc8ff8855ec1d5a21733c26b935001905060405180910390a19392505050565b61048661074a565b6000816001600160a01b03164760405160006040518083038185875af1925050503d80600081146104d3576040519150601f19603f3d011682016040523d82523d6000602084013e6104d8565b606091505b505090508061052e5760405162461bcd60e51b815260206004820152601f60248201527f4661696c656420746f20676574204574682066726f6d20636f6e74726163740060448201526064015b60405180910390fd5b5050565b61053a61074a565b6105446000610777565b565b60015433906001600160a01b0316811461057e5760405163118cdaa760e01b81526001600160a01b0382166004820152602401610525565b61058781610777565b50565b6000806040518060200161059d906107db565b601f1982820381018352601f9091011660408181526001600160a01b038616602083015291925082910160408051601f19818403018152908290526105e59291602001610976565b60408051601f1981840301815282825280516020918201206001600160f81b0319828501523060601b6bffffffffffffffffffffffff191660218501526001600160a01b039690961660358401526055808401969096528151808403909601865260759092019052835193019290922092915050565b61066361074a565b6127108163ffffffff1611156106b35760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103332b290373ab6b2b930ba37b960591b6044820152606401610525565b6001805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6106e161074a565b600180546001600160a01b0383166001600160a01b031990911681179091556107126000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000546001600160a01b031633146105445760405163118cdaa760e01b8152336004820152602401610525565b600180546001600160a01b031916905561058781600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6104098061099483390190565b6001600160a01b038116811461058757600080fd5b803563ffffffff8116811461081157600080fd5b919050565b6000806040838503121561082957600080fd5b8235610834816107e8565b9150610842602084016107fd565b90509250929050565b6000806020838503121561085e57600080fd5b823567ffffffffffffffff8082111561087657600080fd5b818501915085601f83011261088a57600080fd5b81358181111561089957600080fd5b8660208260051b85010111156108ae57600080fd5b60209290920196919550909350505050565b6000602082840312156108d257600080fd5b81356108dd816107e8565b9392505050565b6000602082840312156108f657600080fd5b6108dd826107fd565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff80831681810361093c57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b6000815160005b81811015610967576020818501810151868301520161094d565b50600093019283525090919050565b600061098b6109858386610946565b84610946565b94935050505056fe60c060405234801561001057600080fd5b5060405161040938038061040983398101604081905261002f91610044565b6001600160a01b03166080523360a052610074565b60006020828403121561005657600080fd5b81516001600160a01b038116811461006d57600080fd5b9392505050565b60805160a05161035d6100ac60003960008181606c01528181610146015261025c01526000818160e70152610284015261035d6000f3fe60806040526004361061004e5760003560e01c8063230b9da31461005a57806335c84277146100ab57806370bb45b3146100cd57806383059303146100d5578063e86dea4a1461010957600080fd5b3661005557005b600080fd5b34801561006657600080fd5b5061008e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100b757600080fd5b506100cb6100c63660046102fa565b61013b565b005b6100cb610236565b3480156100e157600080fd5b5061008e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561011557600080fd5b506000546101269063ffffffff1681565b60405163ffffffff90911681526020016100a2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101ca5760405162461bcd60e51b815260206004820152602960248201527f4368616e6765466565206e6f742063616c6c65642066726f6d20706172656e746044820152680818dbdb9d1c9858dd60ba1b60648201526084015b60405180910390fd5b6127108163ffffffff16111561021a5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103332b290373ab6b2b930ba37b960591b60448201526064016101c1565b6000805463ffffffff191663ffffffff92909216919091179055565b60005460405162a1b0d360e71b815263ffffffff90911660048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000166044820152738d03884ef3f39ec263f3d7c3954a868468ff8497906350d869809060640160006040518083038186803b1580156102e057600080fd5b505af41580156102f4573d6000803e3d6000fd5b50505050565b60006020828403121561030c57600080fd5b813563ffffffff8116811461032057600080fd5b939250505056fea2646970667358221220dedd6e81267a3223fee9cbafd3198b4e3a87c70d5c77006b127bdbb16a8d6c9064736f6c63430008140033a2646970667358221220329aaff78029e413c142aa23bdae08b8518c0e9660d94ceee57df6f2e35d147564736f6c63430008140033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000af0

-----Decoded View---------------
Arg [0] : _defaultFeeNumerator (uint32): 2800

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000af0


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ 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.