ETH Price: $3,605.75 (+4.63%)
 
Transaction Hash
Method
Block
From
To
Execute214434772024-12-20 11:36:4714 days ago1734694607IN
0x2c3fF880...Cb2875cB2
0 ETH0.0515318245.36236618
Execute214434752024-12-20 11:36:2314 days ago1734694583IN
0x2c3fF880...Cb2875cB2
0 ETH0.0333407247.82445338
Execute214434362024-12-20 11:28:3514 days ago1734694115IN
0x2c3fF880...Cb2875cB2
0 ETH0.0296286632.83012571
Execute214434322024-12-20 11:27:4714 days ago1734694067IN
0x2c3fF880...Cb2875cB2
0 ETH0.0262896835.07550004
Execute214432982024-12-20 11:00:5914 days ago1734692459IN
0x2c3fF880...Cb2875cB2
0 ETH0.0197677325.53354259
Execute214432962024-12-20 11:00:3514 days ago1734692435IN
0x2c3fF880...Cb2875cB2
0 ETH0.0228065226.42032119
Execute214432702024-12-20 10:55:2314 days ago1734692123IN
0x2c3fF880...Cb2875cB2
0 ETH0.019803728.28025989
Execute214432672024-12-20 10:54:4714 days ago1734692087IN
0x2c3fF880...Cb2875cB2
0 ETH0.021377528.05313739
Execute214432642024-12-20 10:54:1114 days ago1734692051IN
0x2c3fF880...Cb2875cB2
0 ETH0.0181196226.24142111
Execute214432132024-12-20 10:43:5914 days ago1734691439IN
0x2c3fF880...Cb2875cB2
0 ETH0.0139671630.62860715
Execute214431772024-12-20 10:36:4714 days ago1734691007IN
0x2c3fF880...Cb2875cB2
0 ETH0.0231750735.44310149
Toggle Implement...214431672024-12-20 10:34:4714 days ago1734690887IN
0x2c3fF880...Cb2875cB2
0 ETH0.0019782741.37699755
Execute211170962024-11-04 21:53:1160 days ago1730757191IN
0x2c3fF880...Cb2875cB2
0 ETH0.0075924411.86522905
Execute211170192024-11-04 21:37:4760 days ago1730756267IN
0x2c3fF880...Cb2875cB2
0 ETH0.005738369.03701659
Execute211170062024-11-04 21:35:1160 days ago1730756111IN
0x2c3fF880...Cb2875cB2
0 ETH0.004388186.91242905
Execute211169582024-11-04 21:25:3560 days ago1730755535IN
0x2c3fF880...Cb2875cB2
0 ETH0.005332558.17899185
Execute211158682024-11-04 17:46:3560 days ago1730742395IN
0x2c3fF880...Cb2875cB2
0 ETH0.000330618.04258544
Toggle Implement...211158662024-11-04 17:46:1160 days ago1730742371IN
0x2c3fF880...Cb2875cB2
0 ETH0.000427028.93372855
Execute211080202024-11-03 15:30:3561 days ago1730647835IN
0x2c3fF880...Cb2875cB2
0 ETH0.005587788.29720578
Execute211080102024-11-03 15:28:3561 days ago1730647715IN
0x2c3fF880...Cb2875cB2
0 ETH0.006954568.74252667
Execute211071682024-11-03 12:38:4761 days ago1730637527IN
0x2c3fF880...Cb2875cB2
0 ETH0.003095953.53330374
Toggle Rebalance...211071392024-11-03 12:32:5961 days ago1730637179IN
0x2c3fF880...Cb2875cB2
0 ETH0.000209564.38096694
Toggle Implement...210956132024-11-01 21:54:1163 days ago1730498051IN
0x2c3fF880...Cb2875cB2
0 ETH0.000363747.60988866
Toggle Rebalance...210950052024-11-01 19:51:3563 days ago1730490695IN
0x2c3fF880...Cb2875cB2
0 ETH0.000276425.77863527

Latest 16 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
211170962024-11-04 21:53:1160 days ago1730757191
0x2c3fF880...Cb2875cB2
0.01921046 ETH
211170962024-11-04 21:53:1160 days ago1730757191
0x2c3fF880...Cb2875cB2
0.01921046 ETH
211170192024-11-04 21:37:4760 days ago1730756267
0x2c3fF880...Cb2875cB2
0.00024631 ETH
211170192024-11-04 21:37:4760 days ago1730756267
0x2c3fF880...Cb2875cB2
0.00024631 ETH
211170062024-11-04 21:35:1160 days ago1730756111
0x2c3fF880...Cb2875cB2
0.00043846 ETH
211170062024-11-04 21:35:1160 days ago1730756111
0x2c3fF880...Cb2875cB2
0.00043846 ETH
211169582024-11-04 21:25:3560 days ago1730755535
0x2c3fF880...Cb2875cB2
0.00037655 ETH
211169582024-11-04 21:25:3560 days ago1730755535
0x2c3fF880...Cb2875cB2
0.00037655 ETH
211080202024-11-03 15:30:3561 days ago1730647835
0x2c3fF880...Cb2875cB2
0.00351504 ETH
211080202024-11-03 15:30:3561 days ago1730647835
0x2c3fF880...Cb2875cB2
0.00351504 ETH
211080102024-11-03 15:28:3561 days ago1730647715
0x2c3fF880...Cb2875cB2
0.00351503 ETH
211080102024-11-03 15:28:3561 days ago1730647715
0x2c3fF880...Cb2875cB2
0.00351502 ETH
211071682024-11-03 12:38:4761 days ago1730637527
0x2c3fF880...Cb2875cB2
0.00218754 ETH
211071682024-11-03 12:38:4761 days ago1730637527
0x2c3fF880...Cb2875cB2
0.00218754 ETH
211071532024-11-03 12:35:4761 days ago1730637347
0x2c3fF880...Cb2875cB2
0.05 ETH
210662882024-10-28 19:42:1167 days ago1730144531  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VaultLiquidator

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 10000000 runs

Other Settings:
paris EvmVersion
File 1 of 4 : proxy.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.21;

import { Owned } from "solmate/src/auth/Owned.sol";

import { SafeTransfer } from "../../libraries/safeTransfer.sol";

contract VaultLiquidator is Owned {
    address constant public ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    address constant public DEAD_ADDRESS = 0x000000000000000000000000000000000000dEaD;

    // @notice temporary implementation address set for fallback
    address private _implementation;

    // @notice whitelisted rebalancers
    mapping (address => bool) public rebalancer; 
    // @notice whitelisted implementations
    mapping (address => bool) public implementation;
    
    error FluidVaultT1Liquidator__InvalidOperation();
    error FluidVaultT1Liquidator__InvalidImplementation();
    error FluidVaultT1Liquidator__InvalidFallback();

    event ToggleRebalancer(
        address indexed rebalancer,
        bool indexed status
    );

    event ToggleImplementation(
        address indexed implementation,
        bool indexed status
    );

    event Withdraw(
        address indexed to,
        address indexed token,
        uint256 amount
    );

    constructor (
        address owner_,
        address[] memory rebalancers_,
        address[] memory implementations_
    ) Owned(owner_) {
        require(owner_ != address(0), "Owner cannot be the zero address");

        for (uint256 i = 0; i < rebalancers_.length; i++) {
            rebalancer[rebalancers_[i]] = true;
            emit ToggleRebalancer(rebalancers_[i], true);
        }

        for (uint256 i = 0; i < implementations_.length; i++) {
            implementation[implementations_[i]] = true;
            emit ToggleImplementation(implementations_[i], true);
        }

        _implementation = DEAD_ADDRESS;
    }

    modifier isRebalancer() {
        if (!rebalancer[msg.sender] && msg.sender != owner) {
            revert FluidVaultT1Liquidator__InvalidOperation();
        }
        _;
    }

    modifier isImplementation(address implementation_) {
        if (!implementation[implementation_] || _implementation != DEAD_ADDRESS) {
            revert FluidVaultT1Liquidator__InvalidImplementation();
        }
        _implementation = implementation_;
        _;
        _implementation = address(DEAD_ADDRESS);
    }

    function _spell(address target_, bytes memory data_) internal returns (bytes memory response_) {
        assembly {
            let succeeded := delegatecall(gas(), target_, add(data_, 0x20), mload(data_), 0, 0)
            let size := returndatasize()

            response_ := mload(0x40)
            mstore(0x40, add(response_, and(add(add(size, 0x20), 0x1f), not(0x1f))))
            mstore(response_, size)
            returndatacopy(add(response_, 0x20), 0, size)

            if iszero(succeeded) {
                // throw if delegatecall failed
                returndatacopy(0x00, 0x00, size)
                revert(0x00, size)
            }
        }
    }

    function toggleRebalancer(address rebalancer_, bool status_) public onlyOwner {
        rebalancer[rebalancer_] = status_;
        emit ToggleRebalancer(rebalancer_, status_);
    }

    function toggleImplementation(address implementation_, bool status_) public onlyOwner {
        implementation[implementation_] = status_;
        emit ToggleImplementation(implementation_, status_);
    }

    function spell(address[] memory targets_, bytes[] memory calldatas_) public onlyOwner {
        for (uint256 i = 0; i < targets_.length; i++) {
            _spell(targets_[i], calldatas_[i]);
        }
    }

    function withdraw(address to_, address[] memory tokens_, uint256[] memory amounts_) public onlyOwner {
        for (uint i = 0; i < tokens_.length; i++) {
            if (tokens_[i] == ETH_ADDRESS) {
                SafeTransfer.safeTransferNative(payable(to_), amounts_[i]);
            } else {
                SafeTransfer.safeTransfer(tokens_[i], to_, amounts_[i]);
            }
            emit Withdraw(to_, tokens_[i], amounts_[i]);
        }
    }

    receive() payable external {}

    function execute(address implementation_, bytes memory data_) public isRebalancer() isImplementation(implementation_) {
        _spell(implementation_, data_);
    }

    fallback() external payable {
        if (_implementation != DEAD_ADDRESS) {
            bytes memory response_ = _spell(_implementation, msg.data);
            assembly {
                return(add(response_, 32), mload(response_))
            }
        } else {
            revert FluidVaultT1Liquidator__InvalidFallback();
        }
    }
}

File 2 of 4 : errorTypes.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.21;

library LibsErrorTypes {
    /***********************************|
    |         LiquidityCalcs            | 
    |__________________________________*/

    /// @notice thrown when supply or borrow exchange price is zero at calc token data (token not configured yet)
    uint256 internal constant LiquidityCalcs__ExchangePriceZero = 70001;

    /// @notice thrown when rate data is set to a version that is not implemented
    uint256 internal constant LiquidityCalcs__UnsupportedRateVersion = 70002;

    /// @notice thrown when the calculated borrow rate turns negative. This should never happen.
    uint256 internal constant LiquidityCalcs__BorrowRateNegative = 70003;

    /***********************************|
    |           SafeTransfer            | 
    |__________________________________*/

    /// @notice thrown when safe transfer from for an ERC20 fails
    uint256 internal constant SafeTransfer__TransferFromFailed = 71001;

    /// @notice thrown when safe transfer for an ERC20 fails
    uint256 internal constant SafeTransfer__TransferFailed = 71002;

    /***********************************|
    |           SafeApprove             | 
    |__________________________________*/

    /// @notice thrown when safe approve from for an ERC20 fails
    uint256 internal constant SafeApprove__ApproveFailed = 81001;
}

File 3 of 4 : safeTransfer.sol
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity 0.8.21;

import { LibsErrorTypes as ErrorTypes } from "./errorTypes.sol";

/// @notice provides minimalistic methods for safe transfers, e.g. ERC20 safeTransferFrom
library SafeTransfer {
    uint256 internal constant MAX_NATIVE_TRANSFER_GAS = 20000; // pass max. 20k gas for native transfers

    error FluidSafeTransferError(uint256 errorId_);

    /// @dev Transfer `amount_` of `token_` from `from_` to `to_`, spending the approval given by `from_` to the
    /// calling contract. If `token_` returns no value, non-reverting calls are assumed to be successful.
    /// Minimally modified from Solmate SafeTransferLib (address as input param for token, Custom Error):
    /// https://github.com/transmissions11/solmate/blob/50e15bb566f98b7174da9b0066126a4c3e75e0fd/src/utils/SafeTransferLib.sol#L31-L63
    function safeTransferFrom(address token_, address from_, address to_, uint256 amount_) internal {
        bool success_;

        /// @solidity memory-safe-assembly
        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata into memory, beginning with the function selector.
            mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000)
            mstore(add(freeMemoryPointer, 4), and(from_, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "from_" argument.
            mstore(add(freeMemoryPointer, 36), and(to_, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to_" argument.
            mstore(add(freeMemoryPointer, 68), amount_) // Append the "amount_" argument. Masking not required as it's a full 32 byte type.

            success_ := and(
                // Set success to whether the call reverted, if not we check it either
                // returned exactly 1 (can't just be non-zero data), or had no return data.
                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),
                // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3.
                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.
                // Counterintuitively, this call must be positioned second to the or() call in the
                // surrounding and() call or else returndatasize() will be zero during the computation.
                call(gas(), token_, 0, freeMemoryPointer, 100, 0, 32)
            )
        }

        if (!success_) {
            revert FluidSafeTransferError(ErrorTypes.SafeTransfer__TransferFromFailed);
        }
    }

    /// @dev Transfer `amount_` of `token_` to `to_`.
    /// If `token_` returns no value, non-reverting calls are assumed to be successful.
    /// Minimally modified from Solmate SafeTransferLib (address as input param for token, Custom Error):
    /// https://github.com/transmissions11/solmate/blob/50e15bb566f98b7174da9b0066126a4c3e75e0fd/src/utils/SafeTransferLib.sol#L65-L95
    function safeTransfer(address token_, address to_, uint256 amount_) internal {
        bool success_;

        /// @solidity memory-safe-assembly
        assembly {
            // Get a pointer to some free memory.
            let freeMemoryPointer := mload(0x40)

            // Write the abi-encoded calldata into memory, beginning with the function selector.
            mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000)
            mstore(add(freeMemoryPointer, 4), and(to_, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to_" argument.
            mstore(add(freeMemoryPointer, 36), amount_) // Append the "amount_" argument. Masking not required as it's a full 32 byte type.

            success_ := and(
                // Set success to whether the call reverted, if not we check it either
                // returned exactly 1 (can't just be non-zero data), or had no return data.
                or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())),
                // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2.
                // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space.
                // Counterintuitively, this call must be positioned second to the or() call in the
                // surrounding and() call or else returndatasize() will be zero during the computation.
                call(gas(), token_, 0, freeMemoryPointer, 68, 0, 32)
            )
        }

        if (!success_) {
            revert FluidSafeTransferError(ErrorTypes.SafeTransfer__TransferFailed);
        }
    }

    /// @dev Transfer `amount_` of ` native token to `to_`.
    /// Minimally modified from Solmate SafeTransferLib (Custom Error):
    /// https://github.com/transmissions11/solmate/blob/50e15bb566f98b7174da9b0066126a4c3e75e0fd/src/utils/SafeTransferLib.sol#L15-L25
    function safeTransferNative(address to_, uint256 amount_) internal {
        bool success_;

        /// @solidity memory-safe-assembly
        assembly {
            // Transfer the ETH and store if it succeeded or not. Pass limited gas
            success_ := call(MAX_NATIVE_TRANSFER_GAS, to_, amount_, 0, 0, 0, 0)
        }

        if (!success_) {
            revert FluidSafeTransferError(ErrorTypes.SafeTransfer__TransferFailed);
        }
    }
}

File 4 of 4 : Owned.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Simple single owner authorization mixin.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Owned.sol)
abstract contract Owned {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

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

    /*//////////////////////////////////////////////////////////////
                            OWNERSHIP STORAGE
    //////////////////////////////////////////////////////////////*/

    address public owner;

    modifier onlyOwner() virtual {
        require(msg.sender == owner, "UNAUTHORIZED");

        _;
    }

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(address _owner) {
        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    /*//////////////////////////////////////////////////////////////
                             OWNERSHIP LOGIC
    //////////////////////////////////////////////////////////////*/

    function transferOwnership(address newOwner) public virtual onlyOwner {
        owner = newOwner;

        emit OwnershipTransferred(msg.sender, newOwner);
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 10000000
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address[]","name":"rebalancers_","type":"address[]"},{"internalType":"address[]","name":"implementations_","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"errorId_","type":"uint256"}],"name":"FluidSafeTransferError","type":"error"},{"inputs":[],"name":"FluidVaultT1Liquidator__InvalidFallback","type":"error"},{"inputs":[],"name":"FluidVaultT1Liquidator__InvalidImplementation","type":"error"},{"inputs":[],"name":"FluidVaultT1Liquidator__InvalidOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"ToggleImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rebalancer","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"ToggleRebalancer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DEAD_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETH_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"implementation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rebalancer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets_","type":"address[]"},{"internalType":"bytes[]","name":"calldatas_","type":"bytes[]"}],"name":"spell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"bool","name":"status_","type":"bool"}],"name":"toggleImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rebalancer_","type":"address"},{"internalType":"bool","name":"status_","type":"bool"}],"name":"toggleRebalancer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"address[]","name":"tokens_","type":"address[]"},{"internalType":"uint256[]","name":"amounts_","type":"uint256[]"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50604051620014f4380380620014f483398101604081905262000034916200037c565b600080546001600160a01b0319166001600160a01b03851690811782556040518592907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038316620000d85760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420626520746865207a65726f2061646472657373604482015260640160405180910390fd5b60005b8251811015620001aa57600160026000858481518110620001005762000100620003f9565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060011515838281518110620001585762000158620003f9565b60200260200101516001600160a01b03167fd74bdcde9b66b7d08a366a43b11a78f3c8307dfeeb0a7741005200bfedfe933f60405160405180910390a380620001a1816200040f565b915050620000db565b5060005b81518110156200027d57600160036000848481518110620001d357620001d3620003f9565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600115158282815181106200022b576200022b620003f9565b60200260200101516001600160a01b03167ff8b5205933f2a0c22ab598fc1570a8405c8aec362af89ed1f8d4500d0e6b8f6c60405160405180910390a38062000274816200040f565b915050620001ae565b5050600180546001600160a01b03191661dead17905550620004379050565b80516001600160a01b0381168114620002b457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002e157600080fd5b815160206001600160401b0380831115620003005762000300620002b9565b8260051b604051601f19603f83011681018181108482111715620003285762000328620002b9565b6040529384528581018301938381019250878511156200034757600080fd5b83870191505b84821015620003715762000361826200029c565b835291830191908301906200034d565b979650505050505050565b6000806000606084860312156200039257600080fd5b6200039d846200029c565b60208501519093506001600160401b0380821115620003bb57600080fd5b620003c987838801620002cf565b93506040860151915080821115620003e057600080fd5b50620003ef86828701620002cf565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b6000600182016200043057634e487b7160e01b600052601160045260246000fd5b5060010190565b6110ad80620004476000396000f3fe6080604052600436106100c05760003560e01c806382bc4aaf11610074578063d9e10f451161004e578063d9e10f45146102f0578063edbd766814610310578063f2fde38b14610330576100c7565b806382bc4aaf1461027b5780638da5cb5b1461029b578063a734f06e146102c8576100c7565b80633f221521116100a55780633f221521146101cb5780634e6fd6c4146102105780636b8807181461024b576100c7565b80631cff79cd1461018b57806329e31bdd146101ab576100c7565b366100c757005b60015473ffffffffffffffffffffffffffffffffffffffff1661dead1461015757600061014d600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061035092505050565b9050805160208201f35b6040517f8d0f4ce900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b34801561019757600080fd5b506101896101a6366004610d08565b610396565b3480156101b757600080fd5b506101896101c6366004610d56565b610509565b3480156101d757600080fd5b506101fb6101e6366004610d92565b60026020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561021c57600080fd5b5061022661dead81565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b34801561025757600080fd5b506101fb610266366004610d92565b60036020526000908152604090205460ff1681565b34801561028757600080fd5b50610189610296366004610e4a565b61060e565b3480156102a757600080fd5b506000546102269073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d457600080fd5b5061022673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156102fc57600080fd5b5061018961030b366004610d56565b6106ef565b34801561031c57600080fd5b5061018961032b366004610f1f565b6107ef565b34801561033c57600080fd5b5061018961034b366004610d92565b6109f2565b6060600080835160208501865af43d6040519250601f19601f6020830101168301604052808352806000602085013e8161038e57806000803e806000fd5b505092915050565b3360009081526002602052604090205460ff161580156103ce575060005473ffffffffffffffffffffffffffffffffffffffff163314155b15610405576040517f74bf188c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902054829060ff161580610456575060015473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561048d576040517fc797928700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556104d78383610350565b5050600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917fd74bdcde9b66b7d08a366a43b11a78f3c8307dfeeb0a7741005200bfedfe933f91a35050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461068f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b60005b82518110156106ea576106d78382815181106106b0576106b0610fe9565b60200260200101518383815181106106ca576106ca610fe9565b6020026020010151610350565b50806106e281611018565b915050610692565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b73ffffffffffffffffffffffffffffffffffffffff821660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917ff8b5205933f2a0c22ab598fc1570a8405c8aec362af89ed1f8d4500d0e6b8f6c91a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b60005b82518110156109ec5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168382815181106108b9576108b9610fe9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610904576108ff848383815181106108f2576108f2610fe9565b6020026020010151610ae3565b610941565b61094183828151811061091957610919610fe9565b60200260200101518584848151811061093457610934610fe9565b6020026020010151610b2f565b82818151811061095357610953610fe9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8484815181106109bb576109bb610fe9565b60200260200101516040516109d291815260200190565b60405180910390a3806109e481611018565b915050610873565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60008060008060008587614e20f19050806106ea576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155a6004820152602401610586565b60006040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806109ec576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155a6004820152602401610586565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bf757600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610c7257610c72610bfc565b604052919050565b600082601f830112610c8b57600080fd5b813567ffffffffffffffff811115610ca557610ca5610bfc565b610cd660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610c2b565b818152846020838601011115610ceb57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215610d1b57600080fd5b610d2483610bd3565b9150602083013567ffffffffffffffff811115610d4057600080fd5b610d4c85828601610c7a565b9150509250929050565b60008060408385031215610d6957600080fd5b610d7283610bd3565b915060208301358015158114610d8757600080fd5b809150509250929050565b600060208284031215610da457600080fd5b610dad82610bd3565b9392505050565b600067ffffffffffffffff821115610dce57610dce610bfc565b5060051b60200190565b600082601f830112610de957600080fd5b81356020610dfe610df983610db4565b610c2b565b82815260059290921b84018101918181019086841115610e1d57600080fd5b8286015b84811015610e3f57610e3281610bd3565b8352918301918301610e21565b509695505050505050565b60008060408385031215610e5d57600080fd5b823567ffffffffffffffff80821115610e7557600080fd5b610e8186838701610dd8565b9350602091508185013581811115610e9857600080fd5b8501601f81018713610ea957600080fd5b8035610eb7610df982610db4565b81815260059190911b82018401908481019089831115610ed657600080fd5b8584015b83811015610f0e57803586811115610ef25760008081fd5b610f008c8983890101610c7a565b845250918601918601610eda565b508096505050505050509250929050565b600080600060608486031215610f3457600080fd5b610f3d84610bd3565b925060208085013567ffffffffffffffff80821115610f5b57600080fd5b610f6788838901610dd8565b94506040870135915080821115610f7d57600080fd5b508501601f81018713610f8f57600080fd5b8035610f9d610df982610db4565b81815260059190911b82018301908381019089831115610fbc57600080fd5b928401925b82841015610fda57833582529284019290840190610fc1565b80955050505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212204a334bb73afa7fe1dcc66c7b1765fb124793c3c5b654213d15d483fc45f5737164736f6c634300081500330000000000000000000000009800020b610194dba52cf606e8aa142f9f256166000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000030000000000000000000000003be5c671b20649dca5d916b5698328d54bdaaf88000000000000000000000000b287f8a01a9538656c72fa6ae1ee0117a187be0c000000000000000000000000ab957b471b22d307ac5fbb3fccd4191433b2aa620000000000000000000000000000000000000000000000000000000000000001000000000000000000000000bf70e5982ca299d0f34fdb0192eb6b2693d784f2

Deployed Bytecode

0x6080604052600436106100c05760003560e01c806382bc4aaf11610074578063d9e10f451161004e578063d9e10f45146102f0578063edbd766814610310578063f2fde38b14610330576100c7565b806382bc4aaf1461027b5780638da5cb5b1461029b578063a734f06e146102c8576100c7565b80633f221521116100a55780633f221521146101cb5780634e6fd6c4146102105780636b8807181461024b576100c7565b80631cff79cd1461018b57806329e31bdd146101ab576100c7565b366100c757005b60015473ffffffffffffffffffffffffffffffffffffffff1661dead1461015757600061014d600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061035092505050565b9050805160208201f35b6040517f8d0f4ce900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b34801561019757600080fd5b506101896101a6366004610d08565b610396565b3480156101b757600080fd5b506101896101c6366004610d56565b610509565b3480156101d757600080fd5b506101fb6101e6366004610d92565b60026020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561021c57600080fd5b5061022661dead81565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b34801561025757600080fd5b506101fb610266366004610d92565b60036020526000908152604090205460ff1681565b34801561028757600080fd5b50610189610296366004610e4a565b61060e565b3480156102a757600080fd5b506000546102269073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d457600080fd5b5061022673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156102fc57600080fd5b5061018961030b366004610d56565b6106ef565b34801561031c57600080fd5b5061018961032b366004610f1f565b6107ef565b34801561033c57600080fd5b5061018961034b366004610d92565b6109f2565b6060600080835160208501865af43d6040519250601f19601f6020830101168301604052808352806000602085013e8161038e57806000803e806000fd5b505092915050565b3360009081526002602052604090205460ff161580156103ce575060005473ffffffffffffffffffffffffffffffffffffffff163314155b15610405576040517f74bf188c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902054829060ff161580610456575060015473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561048d576040517fc797928700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556104d78383610350565b5050600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917fd74bdcde9b66b7d08a366a43b11a78f3c8307dfeeb0a7741005200bfedfe933f91a35050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461068f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b60005b82518110156106ea576106d78382815181106106b0576106b0610fe9565b60200260200101518383815181106106ca576106ca610fe9565b6020026020010151610350565b50806106e281611018565b915050610692565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b73ffffffffffffffffffffffffffffffffffffffff821660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917ff8b5205933f2a0c22ab598fc1570a8405c8aec362af89ed1f8d4500d0e6b8f6c91a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b60005b82518110156109ec5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168382815181106108b9576108b9610fe9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610904576108ff848383815181106108f2576108f2610fe9565b6020026020010151610ae3565b610941565b61094183828151811061091957610919610fe9565b60200260200101518584848151811061093457610934610fe9565b6020026020010151610b2f565b82818151811061095357610953610fe9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8484815181106109bb576109bb610fe9565b60200260200101516040516109d291815260200190565b60405180910390a3806109e481611018565b915050610873565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60008060008060008587614e20f19050806106ea576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155a6004820152602401610586565b60006040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806109ec576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155a6004820152602401610586565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bf757600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610c7257610c72610bfc565b604052919050565b600082601f830112610c8b57600080fd5b813567ffffffffffffffff811115610ca557610ca5610bfc565b610cd660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610c2b565b818152846020838601011115610ceb57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215610d1b57600080fd5b610d2483610bd3565b9150602083013567ffffffffffffffff811115610d4057600080fd5b610d4c85828601610c7a565b9150509250929050565b60008060408385031215610d6957600080fd5b610d7283610bd3565b915060208301358015158114610d8757600080fd5b809150509250929050565b600060208284031215610da457600080fd5b610dad82610bd3565b9392505050565b600067ffffffffffffffff821115610dce57610dce610bfc565b5060051b60200190565b600082601f830112610de957600080fd5b81356020610dfe610df983610db4565b610c2b565b82815260059290921b84018101918181019086841115610e1d57600080fd5b8286015b84811015610e3f57610e3281610bd3565b8352918301918301610e21565b509695505050505050565b60008060408385031215610e5d57600080fd5b823567ffffffffffffffff80821115610e7557600080fd5b610e8186838701610dd8565b9350602091508185013581811115610e9857600080fd5b8501601f81018713610ea957600080fd5b8035610eb7610df982610db4565b81815260059190911b82018401908481019089831115610ed657600080fd5b8584015b83811015610f0e57803586811115610ef25760008081fd5b610f008c8983890101610c7a565b845250918601918601610eda565b508096505050505050509250929050565b600080600060608486031215610f3457600080fd5b610f3d84610bd3565b925060208085013567ffffffffffffffff80821115610f5b57600080fd5b610f6788838901610dd8565b94506040870135915080821115610f7d57600080fd5b508501601f81018713610f8f57600080fd5b8035610f9d610df982610db4565b81815260059190911b82018301908381019089831115610fbc57600080fd5b928401925b82841015610fda57833582529284019290840190610fc1565b80955050505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212204a334bb73afa7fe1dcc66c7b1765fb124793c3c5b654213d15d483fc45f5737164736f6c63430008150033

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

0000000000000000000000009800020b610194dba52cf606e8aa142f9f256166000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000030000000000000000000000003be5c671b20649dca5d916b5698328d54bdaaf88000000000000000000000000b287f8a01a9538656c72fa6ae1ee0117a187be0c000000000000000000000000ab957b471b22d307ac5fbb3fccd4191433b2aa620000000000000000000000000000000000000000000000000000000000000001000000000000000000000000bf70e5982ca299d0f34fdb0192eb6b2693d784f2

-----Decoded View---------------
Arg [0] : owner_ (address): 0x9800020b610194dBa52CF606E8Aa142F9F256166
Arg [1] : rebalancers_ (address[]): 0x3BE5C671b20649DCA5D916b5698328D54BdAAf88,0xb287f8A01a9538656c72Fa6aE1EE0117A187Be0C,0xAb957B471b22d307AC5fbB3FCcD4191433B2AA62
Arg [2] : implementations_ (address[]): 0xBf70e5982Ca299d0f34fDB0192eb6b2693D784F2

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000009800020b610194dba52cf606e8aa142f9f256166
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [4] : 0000000000000000000000003be5c671b20649dca5d916b5698328d54bdaaf88
Arg [5] : 000000000000000000000000b287f8a01a9538656c72fa6ae1ee0117a187be0c
Arg [6] : 000000000000000000000000ab957b471b22d307ac5fbb3fccd4191433b2aa62
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [8] : 000000000000000000000000bf70e5982ca299d0f34fdb0192eb6b2693d784f2


Block Transaction Difficulty 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
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.