Contract

0xe0Ab94c456ff192AD258130bfc9271bF95FE4911

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

-

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Toggle Implement...5171152024-12-17 13:20:043 days ago1734441604IN
0xe0Ab94c4...F95FE4911
0 S0.00525921110

Latest 1 internal transaction

Parent Transaction Hash Block From To
5167382024-12-17 13:02:433 days ago1734440563  Contract Creation0 S
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"}]

60806040523480156200001157600080fd5b50604051620014f4380380620014f483398101604081905262000034916200037c565b600080546001600160a01b0319166001600160a01b03851690811782556040518592907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038316620000d85760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420626520746865207a65726f2061646472657373604482015260640160405180910390fd5b60005b8251811015620001aa57600160026000858481518110620001005762000100620003f9565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060011515838281518110620001585762000158620003f9565b60200260200101516001600160a01b03167fd74bdcde9b66b7d08a366a43b11a78f3c8307dfeeb0a7741005200bfedfe933f60405160405180910390a380620001a1816200040f565b915050620000db565b5060005b81518110156200027d57600160036000848481518110620001d357620001d3620003f9565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600115158282815181106200022b576200022b620003f9565b60200260200101516001600160a01b03167ff8b5205933f2a0c22ab598fc1570a8405c8aec362af89ed1f8d4500d0e6b8f6c60405160405180910390a38062000274816200040f565b915050620001ae565b5050600180546001600160a01b03191661dead17905550620004379050565b80516001600160a01b0381168114620002b457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002e157600080fd5b815160206001600160401b0380831115620003005762000300620002b9565b8260051b604051601f19603f83011681018181108482111715620003285762000328620002b9565b6040529384528581018301938381019250878511156200034757600080fd5b83870191505b84821015620003715762000361826200029c565b835291830191908301906200034d565b979650505050505050565b6000806000606084860312156200039257600080fd5b6200039d846200029c565b60208501519093506001600160401b0380821115620003bb57600080fd5b620003c987838801620002cf565b93506040860151915080821115620003e057600080fd5b50620003ef86828701620002cf565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b6000600182016200043057634e487b7160e01b600052601160045260246000fd5b5060010190565b6110ad80620004476000396000f3fe6080604052600436106100c05760003560e01c806382bc4aaf11610074578063d9e10f451161004e578063d9e10f45146102f0578063edbd766814610310578063f2fde38b14610330576100c7565b806382bc4aaf1461027b5780638da5cb5b1461029b578063a734f06e146102c8576100c7565b80633f221521116100a55780633f221521146101cb5780634e6fd6c4146102105780636b8807181461024b576100c7565b80631cff79cd1461018b57806329e31bdd146101ab576100c7565b366100c757005b60015473ffffffffffffffffffffffffffffffffffffffff1661dead1461015757600061014d600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061035092505050565b9050805160208201f35b6040517f8d0f4ce900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b34801561019757600080fd5b506101896101a6366004610d08565b610396565b3480156101b757600080fd5b506101896101c6366004610d56565b610509565b3480156101d757600080fd5b506101fb6101e6366004610d92565b60026020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561021c57600080fd5b5061022661dead81565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b34801561025757600080fd5b506101fb610266366004610d92565b60036020526000908152604090205460ff1681565b34801561028757600080fd5b50610189610296366004610e4a565b61060e565b3480156102a757600080fd5b506000546102269073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d457600080fd5b5061022673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156102fc57600080fd5b5061018961030b366004610d56565b6106ef565b34801561031c57600080fd5b5061018961032b366004610f1f565b6107ef565b34801561033c57600080fd5b5061018961034b366004610d92565b6109f2565b6060600080835160208501865af43d6040519250601f19601f6020830101168301604052808352806000602085013e8161038e57806000803e806000fd5b505092915050565b3360009081526002602052604090205460ff161580156103ce575060005473ffffffffffffffffffffffffffffffffffffffff163314155b15610405576040517f74bf188c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902054829060ff161580610456575060015473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561048d576040517fc797928700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556104d78383610350565b5050600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917fd74bdcde9b66b7d08a366a43b11a78f3c8307dfeeb0a7741005200bfedfe933f91a35050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461068f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b60005b82518110156106ea576106d78382815181106106b0576106b0610fe9565b60200260200101518383815181106106ca576106ca610fe9565b6020026020010151610350565b50806106e281611018565b915050610692565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b73ffffffffffffffffffffffffffffffffffffffff821660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917ff8b5205933f2a0c22ab598fc1570a8405c8aec362af89ed1f8d4500d0e6b8f6c91a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b60005b82518110156109ec5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168382815181106108b9576108b9610fe9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610904576108ff848383815181106108f2576108f2610fe9565b6020026020010151610ae3565b610941565b61094183828151811061091957610919610fe9565b60200260200101518584848151811061093457610934610fe9565b6020026020010151610b2f565b82818151811061095357610953610fe9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8484815181106109bb576109bb610fe9565b60200260200101516040516109d291815260200190565b60405180910390a3806109e481611018565b915050610873565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60008060008060008587614e20f19050806106ea576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155a6004820152602401610586565b60006040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806109ec576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155a6004820152602401610586565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bf757600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610c7257610c72610bfc565b604052919050565b600082601f830112610c8b57600080fd5b813567ffffffffffffffff811115610ca557610ca5610bfc565b610cd660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610c2b565b818152846020838601011115610ceb57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215610d1b57600080fd5b610d2483610bd3565b9150602083013567ffffffffffffffff811115610d4057600080fd5b610d4c85828601610c7a565b9150509250929050565b60008060408385031215610d6957600080fd5b610d7283610bd3565b915060208301358015158114610d8757600080fd5b809150509250929050565b600060208284031215610da457600080fd5b610dad82610bd3565b9392505050565b600067ffffffffffffffff821115610dce57610dce610bfc565b5060051b60200190565b600082601f830112610de957600080fd5b81356020610dfe610df983610db4565b610c2b565b82815260059290921b84018101918181019086841115610e1d57600080fd5b8286015b84811015610e3f57610e3281610bd3565b8352918301918301610e21565b509695505050505050565b60008060408385031215610e5d57600080fd5b823567ffffffffffffffff80821115610e7557600080fd5b610e8186838701610dd8565b9350602091508185013581811115610e9857600080fd5b8501601f81018713610ea957600080fd5b8035610eb7610df982610db4565b81815260059190911b82018401908481019089831115610ed657600080fd5b8584015b83811015610f0e57803586811115610ef25760008081fd5b610f008c8983890101610c7a565b845250918601918601610eda565b508096505050505050509250929050565b600080600060608486031215610f3457600080fd5b610f3d84610bd3565b925060208085013567ffffffffffffffff80821115610f5b57600080fd5b610f6788838901610dd8565b94506040870135915080821115610f7d57600080fd5b508501601f81018713610f8f57600080fd5b8035610f9d610df982610db4565b81815260059190911b82018301908381019089831115610fbc57600080fd5b928401925b82841015610fda57833582529284019290840190610fc1565b80955050505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212204a334bb73afa7fe1dcc66c7b1765fb124793c3c5b654213d15d483fc45f5737164736f6c634300081500330000000000000000000000009800020b610194dba52cf606e8aa142f9f256166000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000030000000000000000000000003be5c671b20649dca5d916b5698328d54bdaaf88000000000000000000000000b287f8a01a9538656c72fa6ae1ee0117a187be0c000000000000000000000000ab957b471b22d307ac5fbb3fccd4191433b2aa62000000000000000000000000000000000000000000000000000000000000000100000000000000000000000034f82537b836c970cc9b87abc40bb616c3adc975

Deployed Bytecode

0x6080604052600436106100c05760003560e01c806382bc4aaf11610074578063d9e10f451161004e578063d9e10f45146102f0578063edbd766814610310578063f2fde38b14610330576100c7565b806382bc4aaf1461027b5780638da5cb5b1461029b578063a734f06e146102c8576100c7565b80633f221521116100a55780633f221521146101cb5780634e6fd6c4146102105780636b8807181461024b576100c7565b80631cff79cd1461018b57806329e31bdd146101ab576100c7565b366100c757005b60015473ffffffffffffffffffffffffffffffffffffffff1661dead1461015757600061014d600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061035092505050565b9050805160208201f35b6040517f8d0f4ce900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b34801561019757600080fd5b506101896101a6366004610d08565b610396565b3480156101b757600080fd5b506101896101c6366004610d56565b610509565b3480156101d757600080fd5b506101fb6101e6366004610d92565b60026020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561021c57600080fd5b5061022661dead81565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b34801561025757600080fd5b506101fb610266366004610d92565b60036020526000908152604090205460ff1681565b34801561028757600080fd5b50610189610296366004610e4a565b61060e565b3480156102a757600080fd5b506000546102269073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d457600080fd5b5061022673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156102fc57600080fd5b5061018961030b366004610d56565b6106ef565b34801561031c57600080fd5b5061018961032b366004610f1f565b6107ef565b34801561033c57600080fd5b5061018961034b366004610d92565b6109f2565b6060600080835160208501865af43d6040519250601f19601f6020830101168301604052808352806000602085013e8161038e57806000803e806000fd5b505092915050565b3360009081526002602052604090205460ff161580156103ce575060005473ffffffffffffffffffffffffffffffffffffffff163314155b15610405576040517f74bf188c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902054829060ff161580610456575060015473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561048d576040517fc797928700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556104d78383610350565b5050600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917fd74bdcde9b66b7d08a366a43b11a78f3c8307dfeeb0a7741005200bfedfe933f91a35050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461068f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b60005b82518110156106ea576106d78382815181106106b0576106b0610fe9565b60200260200101518383815181106106ca576106ca610fe9565b6020026020010151610350565b50806106e281611018565b915050610692565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b73ffffffffffffffffffffffffffffffffffffffff821660008181526003602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917ff8b5205933f2a0c22ab598fc1570a8405c8aec362af89ed1f8d4500d0e6b8f6c91a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b60005b82518110156109ec5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168382815181106108b9576108b9610fe9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610904576108ff848383815181106108f2576108f2610fe9565b6020026020010151610ae3565b610941565b61094183828151811061091957610919610fe9565b60200260200101518584848151811061093457610934610fe9565b6020026020010151610b2f565b82818151811061095357610953610fe9565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb8484815181106109bb576109bb610fe9565b60200260200101516040516109d291815260200190565b60405180910390a3806109e481611018565b915050610873565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610586565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60008060008060008587614e20f19050806106ea576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155a6004820152602401610586565b60006040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806109ec576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155a6004820152602401610586565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bf757600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610c7257610c72610bfc565b604052919050565b600082601f830112610c8b57600080fd5b813567ffffffffffffffff811115610ca557610ca5610bfc565b610cd660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610c2b565b818152846020838601011115610ceb57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215610d1b57600080fd5b610d2483610bd3565b9150602083013567ffffffffffffffff811115610d4057600080fd5b610d4c85828601610c7a565b9150509250929050565b60008060408385031215610d6957600080fd5b610d7283610bd3565b915060208301358015158114610d8757600080fd5b809150509250929050565b600060208284031215610da457600080fd5b610dad82610bd3565b9392505050565b600067ffffffffffffffff821115610dce57610dce610bfc565b5060051b60200190565b600082601f830112610de957600080fd5b81356020610dfe610df983610db4565b610c2b565b82815260059290921b84018101918181019086841115610e1d57600080fd5b8286015b84811015610e3f57610e3281610bd3565b8352918301918301610e21565b509695505050505050565b60008060408385031215610e5d57600080fd5b823567ffffffffffffffff80821115610e7557600080fd5b610e8186838701610dd8565b9350602091508185013581811115610e9857600080fd5b8501601f81018713610ea957600080fd5b8035610eb7610df982610db4565b81815260059190911b82018401908481019089831115610ed657600080fd5b8584015b83811015610f0e57803586811115610ef25760008081fd5b610f008c8983890101610c7a565b845250918601918601610eda565b508096505050505050509250929050565b600080600060608486031215610f3457600080fd5b610f3d84610bd3565b925060208085013567ffffffffffffffff80821115610f5b57600080fd5b610f6788838901610dd8565b94506040870135915080821115610f7d57600080fd5b508501601f81018713610f8f57600080fd5b8035610f9d610df982610db4565b81815260059190911b82018301908381019089831115610fbc57600080fd5b928401925b82841015610fda57833582529284019290840190610fc1565b80955050505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212204a334bb73afa7fe1dcc66c7b1765fb124793c3c5b654213d15d483fc45f5737164736f6c63430008150033

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

0000000000000000000000009800020b610194dba52cf606e8aa142f9f256166000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000030000000000000000000000003be5c671b20649dca5d916b5698328d54bdaaf88000000000000000000000000b287f8a01a9538656c72fa6ae1ee0117a187be0c000000000000000000000000ab957b471b22d307ac5fbb3fccd4191433b2aa62000000000000000000000000000000000000000000000000000000000000000100000000000000000000000034f82537b836c970cc9b87abc40bb616c3adc975

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

-----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] : 00000000000000000000000034f82537b836c970cc9b87abc40bb616c3adc975


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  ]
[ 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.