ETH Price: $2,377.95 (-0.23%)

Contract

0xb634316E06cC0B358437CbadD4dC94F1D3a92B3b
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Sweep204806042024-08-08 1:33:1157 days ago1723080791IN
0xb634316E...1D3a92B3b
0 ETH0.00032931.47779526
Sweep204650042024-08-05 21:19:1159 days ago1722892751IN
0xb634316E...1D3a92B3b
0 ETH0.000281545.54372192
Sweep204349242024-08-01 16:35:1163 days ago1722530111IN
0xb634316E...1D3a92B3b
0 ETH0.0018902827.8450291
Sweep204227172024-07-30 23:41:4765 days ago1722382907IN
0xb634316E...1D3a92B3b
0 ETH0.00057442.62208803
Sweep204197032024-07-30 13:35:1165 days ago1722346511IN
0xb634316E...1D3a92B3b
0 ETH0.000524958.7566763
Sweep203639372024-07-22 18:44:1173 days ago1721673851IN
0xb634316E...1D3a92B3b
0 ETH0.00025394.99952885
Sweep203165192024-07-16 3:55:3580 days ago1721102135IN
0xb634316E...1D3a92B3b
0 ETH0.000192864.48117812
Sweep202871382024-07-12 1:27:1184 days ago1720747631IN
0xb634316E...1D3a92B3b
0 ETH0.000233454.59677508
Sweep202713832024-07-09 20:40:2386 days ago1720557623IN
0xb634316E...1D3a92B3b
0 ETH0.000167724.17924242
Sweep202678112024-07-09 8:41:2386 days ago1720514483IN
0xb634316E...1D3a92B3b
0 ETH0.00023094.54658361
Sweep202160942024-07-02 3:17:2394 days ago1719890243IN
0xb634316E...1D3a92B3b
0 ETH0.000622223.14083621
Sweep202064622024-06-30 19:02:2395 days ago1719774143IN
0xb634316E...1D3a92B3b
0 ETH0.000240134.63418825
Sweep202064562024-06-30 19:01:1195 days ago1719774071IN
0xb634316E...1D3a92B3b
0 ETH0.000234054.51691067
Sweep202064472024-06-30 18:59:2395 days ago1719773963IN
0xb634316E...1D3a92B3b
0 ETH0.000221624.27697942
Sweep202064422024-06-30 18:58:2395 days ago1719773903IN
0xb634316E...1D3a92B3b
0 ETH0.000219654.23887563
Sweep202064322024-06-30 18:56:2395 days ago1719773783IN
0xb634316E...1D3a92B3b
0 ETH0.000212514.10125364
Sweep202064272024-06-30 18:55:2395 days ago1719773723IN
0xb634316E...1D3a92B3b
0 ETH0.000208244.01879002
Sweep201794652024-06-27 0:33:2399 days ago1719448403IN
0xb634316E...1D3a92B3b
0 ETH0.000220964.35097295
Sweep201717912024-06-25 22:50:23100 days ago1719355823IN
0xb634316E...1D3a92B3b
0 ETH0.000132743.36267572
Sweep201493192024-06-22 19:26:23103 days ago1719084383IN
0xb634316E...1D3a92B3b
0 ETH0.000156153.01346524
Sweep201493092024-06-22 19:24:23103 days ago1719084263IN
0xb634316E...1D3a92B3b
0 ETH0.000155763.00600506
Sweep201493042024-06-22 19:23:23103 days ago1719084203IN
0xb634316E...1D3a92B3b
0 ETH0.000156213.01459374
Sweep201492942024-06-22 19:21:23103 days ago1719084083IN
0xb634316E...1D3a92B3b
0 ETH0.00015422.97589431
Sweep201492892024-06-22 19:20:23103 days ago1719084023IN
0xb634316E...1D3a92B3b
0 ETH0.000151642.92651753
Sweep201492792024-06-22 19:18:23103 days ago1719083903IN
0xb634316E...1D3a92B3b
0 ETH0.00016383.16121442
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TradeHandler

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 4: TradeHandler.sol
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.17;

import "./VM.sol";
import "./TradeHandlerHelper.sol";

/**
@title Trade Handler
@author yearn.finance
@notice TradeHandler is in charge of tracking which strategy wants to do certain
trade. The strategy registers what they have and what they want and wait for an
async trade. TradeHandler trades are executed by mechs through a weiroll VM.
*/

contract TradeHandler is VM {
    address payable public governance;
    address payable public pendingGovernance;

    // Treasury multisig for sweeps
    address payable public treasury;

    // COW protocol settlement contract address.
    address public settlement;

    // Mechs are addresses other than `settlement` that are authorized to
    // to call `execute()`
    mapping(address => bool) public mechs;

    // Solvers are EOAs authorised by COW protocol's settlement contract to
    // settle batches won at an auction
    mapping(address => bool) public solvers;

    event UpdatedSettlement(address settlement);

    event UpdatedTreasury(address treasury);

    event UpdatedGovernance(address governance);

    event AddedMech(address mech);
    event RemovedMech(address mech);

    event AddedSolver(address solver);
    event RemovedSolver(address solver);

    event TradeEnabled(
        address indexed seller,
        address indexed tokenIn,
        address indexed tokenOut
    );
    event TradeDisabled(
        address indexed seller,
        address indexed tokenIn,
        address indexed tokenOut
    );

    modifier onlyGovernance() {
        require(msg.sender == governance, "!governance");
        _;
    }

    // The settlement contract must be authorized to call `execute()`, but additional
    // safeguards are needed because solvers other than Seasolver are also authorized
    // to call settlement.settle().
    modifier onlyAuthorized() {
        require(
            ((msg.sender == settlement) && solvers[tx.origin]) ||
                ((msg.sender != settlement && mechs[msg.sender])),
            "!authorized"
        );
        _;
    }

    constructor(address payable _governance) {
        governance = _governance;
        treasury = _governance;
        mechs[_governance] = true;
    }

    function setGovernance(address payable _governance)
        external
        onlyGovernance
    {
        pendingGovernance = _governance;
    }

    function setTreasury(address payable _treasury) external onlyGovernance {
        treasury = _treasury;
        emit UpdatedTreasury(_treasury);
    }

    function acceptGovernance() external {
        require(msg.sender == pendingGovernance);
        governance = pendingGovernance;
        delete pendingGovernance;
        emit UpdatedGovernance(governance);
    }

    function setSettlement(address _settlement) external onlyGovernance {
        // Settlement can't be a mech.
        require(!mechs[_settlement]);
        settlement = _settlement;
        emit UpdatedSettlement(_settlement);
    }

    function addMech(address _mech) external onlyGovernance {
        // Settlement can't be set as mech as that would grant
        // other solvers power to execute.
        require(settlement != _mech);
        mechs[_mech] = true;
        emit AddedMech(_mech);
    }

    function removeMech(address _mech) external onlyGovernance {
        delete mechs[_mech];
        emit RemovedMech(_mech);
    }

    function addSolver(address _solver) external onlyGovernance {
        solvers[_solver] = true;
        emit AddedSolver(_solver);
    }

    function removeSolver(address _solver) external onlyGovernance {
        delete solvers[_solver];
        emit RemovedSolver(_solver);
    }

    function enable(address _tokenIn, address _tokenOut) external {
        require(_tokenIn != address(0));
        require(_tokenOut != address(0));

        emit TradeEnabled(msg.sender, _tokenIn, _tokenOut);
    }

    function disable(address _tokenIn, address _tokenOut) external {
        _disable(msg.sender, _tokenIn, _tokenOut);
    }

    function disableByAdmin(
        address _strategy,
        address _tokenIn,
        address _tokenOut
    ) external onlyGovernance {
        _disable(_strategy, _tokenIn, _tokenOut);
    }

    function _disable(
        address _strategy,
        address _tokenIn,
        address _tokenOut
    ) internal {
        emit TradeDisabled(_strategy, _tokenIn, _tokenOut);
    }

    function execute(bytes32[] calldata commands, bytes[] memory state)
        external
        onlyAuthorized
        returns (bytes[] memory)
    {
        return _execute(commands, state);
    }

    function sweep(address[] calldata _tokens, uint256[] calldata _amounts)
        external
    {
        uint256 _size = _tokens.length;
        require(_size == _amounts.length);

        for (uint256 i = 0; i < _size; i++) {
            if (_tokens[i] == address(0)) {
                // Native ETH
                TradeHandlerHelper.safeTransferETH(treasury, _amounts[i]);
            } else {
                // ERC20s
                TradeHandlerHelper.safeTransfer(
                    _tokens[i],
                    treasury,
                    _amounts[i]
                );
            }
        }
    }

    // `fallback` is called when msg.data is not empty
    fallback() external payable {}

    // `receive` is called when msg.data is empty
    receive() external payable {}
}

File 2 of 4: CommandBuilder.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

library CommandBuilder {

    uint256 constant IDX_VARIABLE_LENGTH = 0x80;
    uint256 constant IDX_VALUE_MASK = 0x7f;
    uint256 constant IDX_END_OF_ARGS = 0xff;
    uint256 constant IDX_USE_STATE = 0xfe;

    function buildInputs(
        bytes[] memory state,
        bytes4 selector,
        bytes32 indices
    ) internal view returns (bytes memory ret) {
        uint256 free; // Pointer to first free byte in tail part of message
        uint256 idx;

        // Determine the length of the encoded data
        for (uint256 i; i < 32;) {
            idx = uint8(indices[i]);
            if (idx == IDX_END_OF_ARGS) break;
            unchecked{free += 32;}
            unchecked{++i;}
        }

        // Encode it
        uint256 bytesWritten;
        assembly {
            ret := mload(0x40)
            bytesWritten := add(bytesWritten, 4)
            mstore(0x40, add(ret, and(add(add(bytesWritten, 0x20), 0x1f), not(0x1f))))
            mstore(add(ret, 32), selector)
        }
        uint256 count = 0;
        bytes memory stateData; // Optionally encode the current state if the call requires it
        for (uint256 i; i < 32;) {
            idx = uint8(indices[i]);
            if (idx == IDX_END_OF_ARGS) break;

            if (idx & IDX_VARIABLE_LENGTH != 0) {
                if (idx == IDX_USE_STATE) {
                    assembly {
                        bytesWritten := add(bytesWritten, 32)
                        mstore(0x40, add(ret, and(add(add(bytesWritten, 0x20), 0x1f), not(0x1f))))
                        mstore(add(add(ret, 36), count), free)
                    }
                    if (stateData.length == 0) {
                        stateData = abi.encode(state);
                    }
                    assembly {
                        bytesWritten := add(bytesWritten, mload(stateData))
                        mstore(0x40, add(ret, and(add(add(bytesWritten, 0x20), 0x1f), not(0x1f))))
                    }
                    memcpy(stateData, 32, ret, free + 4, stateData.length - 32);
                    free += stateData.length - 32;
                } else {
                    bytes memory stateVar = state[idx & IDX_VALUE_MASK];
                    uint256 arglen = stateVar.length;

                    // Variable length data; put a pointer in the slot and write the data at the end
                    assembly {
                        bytesWritten := add(bytesWritten, 32)
                        mstore(0x40, add(ret, and(add(add(bytesWritten, 0x20), 0x1f), not(0x1f))))
                        mstore(add(add(ret, 36), count), free)
                    }
                    assembly {
                        bytesWritten := add(bytesWritten, arglen)
                        mstore(0x40, add(ret, and(add(add(bytesWritten, 0x20), 0x1f), not(0x1f))))
                    }
                    memcpy(
                        stateVar,
                        0,
                        ret,
                        free + 4,
                        arglen
                    );
                    free += arglen;
                }
            } else {
                // Fixed length data; write it directly
                bytes memory stateVar = state[idx & IDX_VALUE_MASK];
                assembly {
                    bytesWritten := add(bytesWritten, mload(stateVar))
                    mstore(0x40, add(ret, and(add(add(bytesWritten, 0x20), 0x1f), not(0x1f))))
                    mstore(add(add(ret, 36), count), mload(add(stateVar, 32)))
                }
            }
            unchecked{count += 32;}
            unchecked{++i;}
        }
        assembly {
            mstore(ret, bytesWritten)
        }
    }

    function writeOutputs(
        bytes[] memory state,
        bytes1 index,
        bytes memory output
    ) internal pure returns (bytes[] memory) {
        uint256 idx = uint8(index);
        if (idx == IDX_END_OF_ARGS) return state;

        if (idx & IDX_VARIABLE_LENGTH != 0) {
            if (idx == IDX_USE_STATE) {
                state = abi.decode(output, (bytes[]));
            } else {
                // Check the first field is 0x20 (because we have only a single return value)
                uint256 argptr;
                assembly {
                    argptr := mload(add(output, 32))
                }
                require(
                    argptr == 32,
                    "Only one return value permitted (variable)"
                );

                assembly {
                    // Overwrite the first word of the return data with the length - 32
                    mstore(add(output, 32), sub(mload(output), 32))
                    // Insert a pointer to the return data, starting at the second word, into state
                    mstore(
                        add(add(state, 32), mul(and(idx, IDX_VALUE_MASK), 32)),
                        add(output, 32)
                    )
                }
            }
        } else {
            // Single word
            require(
                output.length == 32,
                "Only one return value permitted (static)"
            );

            state[idx & IDX_VALUE_MASK] = output;
        }

        return state;
    }

    function writeTuple(
        bytes[] memory state,
        bytes1 index,
        bytes memory output
    ) internal view {
        uint256 idx = uint256(uint8(index));
        if (idx == IDX_END_OF_ARGS) return;

        bytes memory entry = state[idx & IDX_VALUE_MASK] = new bytes(output.length + 32);

        memcpy(output, 0, entry, 32, output.length);
        assembly {
            let l := mload(output)
            mstore(add(entry, 32), l)
        }
    }

    function memcpy(
        bytes memory src,
        uint256 srcidx,
        bytes memory dest,
        uint256 destidx,
        uint256 len
    ) internal view {
        assembly {
            pop(
                staticcall(
                    gas(),
                    4,
                    add(add(src, 32), srcidx),
                    len,
                    add(add(dest, 32), destidx),
                    len
                )
            )
        }
    }
}

File 3 of 4: TradeHandlerHelper.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

library TradeHandlerHelper {
    function insertElement(
        bytes calldata tuple,
        uint256 index,
        bytes32 element,
        bool returnRaw
    ) public pure returns (bytes memory newTuple) {
        uint256 byteIndex;
        unchecked {
            byteIndex = index * 32;
        }
        require(byteIndex <= tuple.length);
        newTuple = bytes.concat(tuple[:byteIndex], element, tuple[byteIndex:]);
        if (returnRaw) {
            assembly {
                return(add(newTuple, 32), tuple.length)
            }
        }
    }

    function replaceElement(
        bytes calldata tuple,
        uint256 index,
        bytes32 element,
        bool returnRaw
    ) public pure returns (bytes memory newTuple) {
        uint256 byteIndex;
        unchecked {
            byteIndex = index * 32;
            require(tuple.length >= 32 && byteIndex <= tuple.length - 32);
            newTuple = bytes.concat(
                tuple[:byteIndex],
                element,
                tuple[byteIndex + 32:]
            );
        }
        if (returnRaw) {
            assembly {
                return(add(newTuple, 32), tuple.length)
            }
        }
    }

    function getElement(bytes memory tuple, uint256 index)
        public
        pure
        returns (bytes32)
    {
        assembly {
            return(add(tuple, mul(add(index, 1), 32)), 32)
        }
    }

    function power(uint256 a, uint256 b) public pure returns (uint256) {
        return a**b;
    }

    function sum(uint256 a, uint256 b) public pure returns (uint256) {
        return a + b;
    }

    function subtract(uint256 a, uint256 b) public pure returns (uint256) {
        return a - b;
    }

    function multiply(uint256 a, uint256 b) public pure returns (uint256) {
        return a * b;
    }

    function divide(uint256 a, uint256 b) public pure returns (uint256) {
        return a / b;
    }

    /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts
    /// also when the token returns `false`.
    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) external {
        // solhint-disable-next-line no-inline-assembly
        assembly {
            let freeMemoryPointer := mload(0x40)
            mstore(
                freeMemoryPointer,
                0xa9059cbb00000000000000000000000000000000000000000000000000000000
            )
            mstore(
                add(freeMemoryPointer, 4),
                and(to, 0xffffffffffffffffffffffffffffffffffffffff)
            )
            mstore(add(freeMemoryPointer, 36), value)

            if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {
                returndatacopy(0, 0, returndatasize())
                revert(0, returndatasize())
            }
        }

        require(getLastTransferResult(token), "!transfer");
    }

    /// @dev Wrapper around a call to the ERC20 function `transferFrom` that
    /// reverts also when the token returns `false`.
    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) external {
        // solhint-disable-next-line no-inline-assembly
        assembly {
            let freeMemoryPointer := mload(0x40)
            mstore(
                freeMemoryPointer,
                0x23b872dd00000000000000000000000000000000000000000000000000000000
            )
            mstore(
                add(freeMemoryPointer, 4),
                and(from, 0xffffffffffffffffffffffffffffffffffffffff)
            )
            mstore(
                add(freeMemoryPointer, 36),
                and(to, 0xffffffffffffffffffffffffffffffffffffffff)
            )
            mstore(add(freeMemoryPointer, 68), value)

            if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {
                returndatacopy(0, 0, returndatasize())
                revert(0, returndatasize())
            }
        }

        require(getLastTransferResult(token), "!transferFrom");
    }

    /// @dev Verifies that the last return was a successful `transfer*` call.
    /// This is done by checking that the return data is either empty, or
    /// is a valid ABI encoded boolean.
    function getLastTransferResult(address token)
        private
        view
        returns (bool success)
    {
        // NOTE: Inspecting previous return data requires assembly. Note that
        // we write the return data to memory 0 in the case where the return
        // data size is 32, this is OK since the first 64 bytes of memory are
        // reserved by Solidy as a scratch space that can be used within
        // assembly blocks.
        // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>
        // solhint-disable-next-line no-inline-assembly
        assembly {
            /// @dev Revert with an ABI encoded Solidity error with a message
            /// that fits into 32-bytes.
            ///
            /// An ABI encoded Solidity error has the following memory layout:
            ///
            /// ------------+----------------------------------
            ///  byte range | value
            /// ------------+----------------------------------
            ///  0x00..0x04 |        selector("Error(string)")
            ///  0x04..0x24 |      string offset (always 0x20)
            ///  0x24..0x44 |                    string length
            ///  0x44..0x64 | string value, padded to 32-bytes
            function revertWithMessage(length, message) {
                mstore(0x00, "\x08\xc3\x79\xa0")
                mstore(0x04, 0x20)
                mstore(0x24, length)
                mstore(0x44, message)
                revert(0x00, 0x64)
            }

            switch returndatasize()
            // Non-standard ERC20 transfer without return.
            case 0 {
                // NOTE: When the return data size is 0, verify that there
                // is code at the address. This is done in order to maintain
                // compatibility with Solidity calling conventions.
                // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>
                if iszero(extcodesize(token)) {
                    revertWithMessage(20, "!contract")
                }

                success := 1
            }
            // Standard ERC20 transfer returning boolean success value.
            case 32 {
                returndatacopy(0, 0, returndatasize())

                // NOTE: For ABI encoding v1, any non-zero value is accepted
                // as `true` for a boolean. In order to stay compatible with
                // OpenZeppelin's `SafeERC20` library which is known to work
                // with the existing ERC20 implementation we care about,
                // make sure we return success for any non-zero return value
                // from the `transfer*` call.
                success := iszero(iszero(mload(0)))
            }
            default {
                revertWithMessage(31, "malformed") // malformed transfer result
            }
        }
    }

    function safeTransferETH(address to, uint256 amount) external {
        bool success;

        assembly {
            // Transfer the ETH and store if it succeeded or not.
            success := call(gas(), to, amount, 0, 0, 0, 0)
        }

        require(success, "!safeTransferETH");
    }
}

File 4 of 4: VM.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

import "./CommandBuilder.sol";

abstract contract VM {
    using CommandBuilder for bytes[];

    uint256 constant FLAG_CT_DELEGATECALL = 0x00;
    uint256 constant FLAG_CT_CALL = 0x01;
    uint256 constant FLAG_CT_STATICCALL = 0x02;
    uint256 constant FLAG_CT_VALUECALL = 0x03;
    uint256 constant FLAG_CT_MASK = 0x03;
    uint256 constant FLAG_EXTENDED_COMMAND = 0x40;
    uint256 constant FLAG_TUPLE_RETURN = 0x80;

    uint256 constant SHORT_COMMAND_FILL = 0x000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

    address immutable self;

    error ExecutionFailed(
        uint256 command_index,
        address target,
        string message
    );

    constructor() {
        self = address(this);
    }

    function _execute(bytes32[] calldata commands, bytes[] memory state)
      internal returns (bytes[] memory)
    {
        bytes32 command;
        uint256 flags;
        bytes32 indices;

        bool success;
        bytes memory outdata;

        uint256 commandsLength = commands.length;
        for (uint256 i; i < commandsLength;) {
            command = commands[i];
            flags = uint256(command >> 216) & 0xFF; // more efficient
            // flags = uint256(uint8(bytes1(command << 32))); // more readable

            if (flags & FLAG_EXTENDED_COMMAND != 0) {
                indices = commands[++i];
            } else {
                indices = bytes32(uint256(command << 40) | SHORT_COMMAND_FILL);
            }

            if (flags & FLAG_CT_MASK == FLAG_CT_DELEGATECALL) {
                (success, outdata) = address(uint160(uint256(command))).delegatecall( // target
                    // inputs
                    state.buildInputs(
                        //selector
                        bytes4(command),
                        indices
                    )
                );
            } else if (flags & FLAG_CT_MASK == FLAG_CT_CALL) {
                (success, outdata) = address(uint160(uint256(command))).call( // target
                    // inputs
                    state.buildInputs(
                        //selector
                        bytes4(command),
                        indices
                    )
                );
            } else if (flags & FLAG_CT_MASK == FLAG_CT_STATICCALL) {
                (success, outdata) = address(uint160(uint256(command))).staticcall( // target
                    // inputs
                    state.buildInputs(
                        //selector
                        bytes4(command),
                        indices
                    )
                );
            } else if (flags & FLAG_CT_MASK == FLAG_CT_VALUECALL) {
                uint256 callEth;
                bytes memory v = state[uint8(bytes1(indices))];
                require(v.length == 32, "_execute: value call has no value indicated.");
                assembly {
                    callEth := mload(add(v, 0x20))
                }
                (success, outdata) = address(uint160(uint256(command))).call{ // target
                    value: callEth
                }(
                    // inputs
                    state.buildInputs(
                        //selector
                        bytes4(command),
                        bytes32(uint256(indices << 8) | CommandBuilder.IDX_END_OF_ARGS)
                    )
                );
            } else {
                revert("Invalid calltype");
            }

            if (!success) {
                if (outdata.length > 0) {
                    assembly {
                        outdata := add(outdata, 68)
                    }
                }
                revert ExecutionFailed({
                    command_index: 0,
                    target: address(uint160(uint256(command))),
                    message: outdata.length > 0 ? string(outdata) : "Unknown"
                });
            }

            if (flags & FLAG_TUPLE_RETURN != 0) {
                state.writeTuple(bytes1(command << 88), outdata);
            } else {
                state = state.writeOutputs(bytes1(command << 88), outdata);
            }
            unchecked{++i;}
        }
        return state;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_governance","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"command_index","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"string","name":"message","type":"string"}],"name":"ExecutionFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"mech","type":"address"}],"name":"AddedMech","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"solver","type":"address"}],"name":"AddedSolver","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"mech","type":"address"}],"name":"RemovedMech","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"solver","type":"address"}],"name":"RemovedSolver","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"}],"name":"TradeDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"}],"name":"TradeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"governance","type":"address"}],"name":"UpdatedGovernance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"settlement","type":"address"}],"name":"UpdatedSettlement","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"treasury","type":"address"}],"name":"UpdatedTreasury","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"acceptGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mech","type":"address"}],"name":"addMech","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_solver","type":"address"}],"name":"addSolver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"}],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategy","type":"address"},{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"}],"name":"disableByAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"}],"name":"enable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"commands","type":"bytes32[]"},{"internalType":"bytes[]","name":"state","type":"bytes[]"}],"name":"execute","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mechs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingGovernance","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_mech","type":"address"}],"name":"removeMech","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_solver","type":"address"}],"name":"removeSolver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_settlement","type":"address"}],"name":"setSettlement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"settlement","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"solvers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405234801561001057600080fd5b506040516119b53803806119b583398101604081905261002f9161007b565b30608052600080546001600160a01b03929092166001600160a01b031992831681178255600280549093168117909255908152600460205260409020805460ff191660011790556100ab565b60006020828403121561008d57600080fd5b81516001600160a01b03811681146100a457600080fd5b9392505050565b6080516118f26100c3600039600050506118f26000f3fe60806040526004361061010b5760003560e01c80638f4e6f371161009a578063d0adcdf611610061578063d0adcdf614610316578063de792d5f14610336578063ec58f4b814610363578063f0f4426014610383578063f39c38a0146103a357005b80638f4e6f37146102765780638fd57b92146102965780639cd38be5146102b65780639ed6c6f6146102d6578063ab033ea9146102f657005b806351160630116100de57806351160630146101ae57806357f58d98146101e65780635aa6e6751461021657806361d027b31461023657806366f88f821461025657005b8062b8ff9214610114578063238efcbc1461013457806349d6e212146101495780634c8541261461018e57005b3661011257005b005b34801561012057600080fd5b5061011261012f36600461132f565b6103c3565b34801561014057600080fd5b50610112610406565b34801561015557600080fd5b5061017961016436600461137a565b60046020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561019a57600080fd5b506101126101a9366004611397565b61047b565b3480156101ba57600080fd5b506003546101ce906001600160a01b031681565b6040516001600160a01b039091168152602001610185565b3480156101f257600080fd5b5061017961020136600461137a565b60056020526000908152604090205460ff1681565b34801561022257600080fd5b506000546101ce906001600160a01b031681565b34801561024257600080fd5b506002546101ce906001600160a01b031681565b34801561026257600080fd5b5061011261027136600461137a565b6104e0565b34801561028257600080fd5b5061011261029136600461137a565b610562565b3480156102a257600080fd5b506101126102b136600461137a565b610600565b3480156102c257600080fd5b506101126102d1366004611397565b61067b565b3480156102e257600080fd5b506101126102f136600461141c565b61068a565b34801561030257600080fd5b5061011261031136600461137a565b610864565b34801561032257600080fd5b5061011261033136600461137a565b6108b0565b34801561034257600080fd5b5061035661035136600461151b565b610948565b6040516101859190611688565b34801561036f57600080fd5b5061011261037e36600461137a565b6109f3565b34801561038f57600080fd5b5061011261039e36600461137a565b610a71565b3480156103af57600080fd5b506001546101ce906001600160a01b031681565b6000546001600160a01b031633146103f65760405162461bcd60e51b81526004016103ed906116ea565b60405180910390fd5b610401838383610ae9565b505050565b6001546001600160a01b0316331461041d57600080fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040519081527f17fdeaa3d89b13aa2b63d35b4629f020be603156d5afcf4aba89bfa93d5f579d9060200160405180910390a1565b6001600160a01b03821661048e57600080fd5b6001600160a01b0381166104a157600080fd5b6040516001600160a01b03808316919084169033907f39e31092deb8f976532f8f405a66c2a1f574b4494ba37cbc2915c1914a9689f290600090a45050565b6000546001600160a01b0316331461050a5760405162461bcd60e51b81526004016103ed906116ea565b6001600160a01b038116600081815260046020908152604091829020805460ff1916905590519182527f74cbb97aad2128ac02cf33c1dd8791a60aae9afab06f3a411169bdae081277c591015b60405180910390a150565b6000546001600160a01b0316331461058c5760405162461bcd60e51b81526004016103ed906116ea565b6001600160a01b03811660009081526004602052604090205460ff16156105b257600080fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f1fa4026b4d339f83c1501efed0d8a25130bf25d6e1b2b0a2c48c8225b2d0fb1e90602001610557565b6000546001600160a01b0316331461062a5760405162461bcd60e51b81526004016103ed906116ea565b6001600160a01b038116600081815260056020908152604091829020805460ff1916905590519182527f736584b2af2b5be32a90fa808de47de356f4e8d00b0c131f3e3c61240b5d71909101610557565b610686338383610ae9565b5050565b8281811461069757600080fd5b60005b8181101561085c5760008686838181106106b6576106b661170f565b90506020020160208101906106cb919061137a565b6001600160a01b03160361077d57600254731b45a86e58b97df309bae0e6c4bbcd40f5a23d5490637c4368c1906001600160a01b03168686858181106107135761071361170f565b6040516001600160e01b031960e087901b1681526001600160a01b039094166004850152602002919091013560248301525060440160006040518083038186803b15801561076057600080fd5b505af4158015610774573d6000803e3d6000fd5b5050505061084a565b731b45a86e58b97df309bae0e6c4bbcd40f5a23d5463d1660f998787848181106107a9576107a961170f565b90506020020160208101906107be919061137a565b6002546001600160a01b03168787868181106107dc576107dc61170f565b6040516001600160e01b031960e088901b1681526001600160a01b0395861660048201529490931660248501525060209091020135604482015260640160006040518083038186803b15801561083157600080fd5b505af4158015610845573d6000803e3d6000fd5b505050505b806108548161173b565b91505061069a565b505050505050565b6000546001600160a01b0316331461088e5760405162461bcd60e51b81526004016103ed906116ea565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108da5760405162461bcd60e51b81526004016103ed906116ea565b6003546001600160a01b038083169116036108f457600080fd5b6001600160a01b038116600081815260046020908152604091829020805460ff1916600117905590519182527fb43754e0033076ed886a3bee063313d9f0da4612cd15041451f9ccf4108205bd9101610557565b6003546060906001600160a01b03163314801561097457503260009081526005602052604090205460ff165b806109a457506003546001600160a01b031633148015906109a457503360009081526004602052604090205460ff165b6109de5760405162461bcd60e51b815260206004820152600b60248201526a08585d5d1a1bdc9a5e995960aa1b60448201526064016103ed565b6109e9848484610b38565b90505b9392505050565b6000546001600160a01b03163314610a1d5760405162461bcd60e51b81526004016103ed906116ea565b6001600160a01b038116600081815260056020908152604091829020805460ff1916600117905590519182527f68f4df5a91ac3c3a2468604a418ba454518d42eb6fcedccca0c00bd1129bcc7f9101610557565b6000546001600160a01b03163314610a9b5760405162461bcd60e51b81526004016103ed906116ea565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fa6df481f77da1f4c92eb330341e03585d46106fcf522f8e6b6b2afbea56eefdc90602001610557565b806001600160a01b0316826001600160a01b0316846001600160a01b03167fb670ba64017b695a17160f17252635c78b7e4b57d1efcf9a6968b9c03e7b596660405160405180910390a4505050565b606060008080808487825b81811015610eee578a8a82818110610b5d57610b5d61170f565b90506020020135965060d887901c60001c60ff16955060408616600014610ba9578a8a610b898361173b565b925082818110610b9b57610b9b61170f565b905060200201359450610bba565b602887901b6001600160d01b031794505b60038616610c2f576001600160a01b038716610bd78a8988610efd565b604051610be49190611754565b600060405180830381855af49150503d8060008114610c1f576040519150601f19603f3d011682016040523d82523d6000602084013e610c24565b606091505b509094509250610e52565b60016003871603610c99576001600160a01b038716610c4f8a8988610efd565b604051610c5c9190611754565b6000604051808303816000865af19150503d8060008114610c1f576040519150601f19603f3d011682016040523d82523d6000602084013e610c24565b60026003871603610d01576001600160a01b038716610cb98a8988610efd565b604051610cc69190611754565b600060405180830381855afa9150503d8060008114610c1f576040519150601f19603f3d011682016040523d82523d6000602084013e610c24565b600380871603610e17576000808a8760f81c60ff1681518110610d2657610d2661170f565b602002602001015190508051602014610d965760405162461bcd60e51b815260206004820152602c60248201527f5f657865637574653a2076616c75652063616c6c20686173206e6f2076616c7560448201526b329034b73234b1b0ba32b21760a11b60648201526084016103ed565b602081015191506001600160a01b03891682610dba8d8c60088c901b60ff17610efd565b604051610dc79190611754565b60006040518083038185875af1925050503d8060008114610e04576040519150601f19603f3d011682016040523d82523d6000602084013e610e09565b606091505b509096509450610e52915050565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c69642063616c6c7479706560801b60448201526064016103ed565b83610eb757825115610e65576044830192505b60008760001c6000855111610e9957604051806040016040528060078152602001662ab735b737bbb760c91b815250610e9b565b845b60405163ef3dcb2f60e01b81526004016103ed93929190611770565b6080861615610ed457610ecf89605889901b856110fd565b610ee6565b610ee389605889901b856111a5565b98505b600101610b43565b50969998505050505050505050565b606060008060005b6020811015610f3c57848160208110610f2057610f2061170f565b1a915060fe19820115610f3c5760209290920191600101610f05565b5060408051808201909152602081018690529250600460006060815b60208110156110ee57878160208110610f7357610f7361170f565b1a945060fe198501156110ee57608085161561109f5760fe850361102f57601f19605f85011687016040526024838801018690528151602090940193600003610fd95789604051602001610fc79190611688565b60405160208183030381529060405291505b8151603f9401938401601f1916870160405261101082602089610ffd8a60046117a3565b6020875161100b91906117bc565b6112fd565b6020825161101e91906117bc565b61102890876117a3565b95506110df565b60008a607f8716815181106110465761104661170f565b6020908102919091018101518051868b016024018a9052968701605f8101601f19168b016040529091019590915061108c8260008b6110868c60046117a3565b856112fd565b61109681896117a3565b975050506110df565b60008a607f8716815181106110b6576110b661170f565b6020908102919091018101518051603f9701968701601f19168a01604052015184890160240152505b60209290920191600101610f58565b50505083525090949350505050565b60f882901c60fe1981016111115750505050565b60008251602061112191906117a3565b67ffffffffffffffff81111561113957611139611488565b6040519080825280601f01601f191660200182016040528015611163576020820181803683370190505b5085607f8416815181106111795761117961170f565b60200260200101819052905061119583600083602087516112fd565b8251806020830152505050505050565b606060f883901c60fe1981016111be57849150506109ec565b60808116156112705760fe81036111ea57828060200190518101906111e391906117cf565b94506112f4565b6020838101519081146112525760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79206f6e652072657475726e2076616c7565207065726d697474656420604482015269287661726961626c652960b01b60648201526084016103ed565b508251601f19016020848101918252607f83168102870101526112f4565b82516020146112d25760405162461bcd60e51b815260206004820152602860248201527f4f6e6c79206f6e652072657475726e2076616c7565207065726d697474656420604482015267287374617469632960c01b60648201526084016103ed565b8285607f8316815181106112e8576112e861170f565b60200260200101819052505b50929392505050565b808260208501018286602089010160045afa505050505050565b6001600160a01b038116811461132c57600080fd5b50565b60008060006060848603121561134457600080fd5b833561134f81611317565b9250602084013561135f81611317565b9150604084013561136f81611317565b809150509250925092565b60006020828403121561138c57600080fd5b81356109ec81611317565b600080604083850312156113aa57600080fd5b82356113b581611317565b915060208301356113c581611317565b809150509250929050565b60008083601f8401126113e257600080fd5b50813567ffffffffffffffff8111156113fa57600080fd5b6020830191508360208260051b850101111561141557600080fd5b9250929050565b6000806000806040858703121561143257600080fd5b843567ffffffffffffffff8082111561144a57600080fd5b611456888389016113d0565b9096509450602087013591508082111561146f57600080fd5b5061147c878288016113d0565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156114c7576114c7611488565b604052919050565b600067ffffffffffffffff8211156114e9576114e9611488565b5060051b60200190565b600067ffffffffffffffff82111561150d5761150d611488565b50601f01601f191660200190565b6000806000604080858703121561153157600080fd5b843567ffffffffffffffff8082111561154957600080fd5b611555888389016113d0565b909650945060209150868201358181111561156f57600080fd5b8701601f8101891361158057600080fd5b803561159361158e826114cf565b61149e565b81815260059190911b8201840190848101908b8311156115b257600080fd5b8584015b83811015611626578035868111156115ce5760008081fd5b8501603f81018e136115e05760008081fd5b878101356115f061158e826114f3565b8181528f8b8385010111156116055760008081fd5b818b84018b83013760009181018a01919091528452509186019186016115b6565b50809750505050505050509250925092565b60005b8381101561165357818101518382015260200161163b565b50506000910152565b60008151808452611674816020860160208601611638565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156116dd57603f198886030184526116cb85835161165c565b945092850192908501906001016116af565b5092979650505050505050565b6020808252600b908201526a21676f7665726e616e636560a81b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161174d5761174d611725565b5060010190565b60008251611766818460208701611638565b9190910192915050565b8381526001600160a01b038316602082015260606040820181905260009061179a9083018461165c565b95945050505050565b808201808211156117b6576117b6611725565b92915050565b818103818111156117b6576117b6611725565b600060208083850312156117e257600080fd5b825167ffffffffffffffff808211156117fa57600080fd5b818501915085601f83011261180e57600080fd5b815161181c61158e826114cf565b81815260059190911b8301840190848101908883111561183b57600080fd5b8585015b838110156118af578051858111156118575760008081fd5b8601603f81018b136118695760008081fd5b87810151604061187b61158e836114f3565b8281528d828486010111156118905760008081fd5b61189f838c8301848701611638565b865250505091860191860161183f565b509897505050505050505056fea2646970667358221220bc488897086574fb93bc838a9bd5eb177f591f592d440e94ff6c9c70abfc7a2964736f6c634300081100330000000000000000000000002757ae02f65db7ce8cf2b2261c58f07a0170e58e

Deployed Bytecode

0x60806040526004361061010b5760003560e01c80638f4e6f371161009a578063d0adcdf611610061578063d0adcdf614610316578063de792d5f14610336578063ec58f4b814610363578063f0f4426014610383578063f39c38a0146103a357005b80638f4e6f37146102765780638fd57b92146102965780639cd38be5146102b65780639ed6c6f6146102d6578063ab033ea9146102f657005b806351160630116100de57806351160630146101ae57806357f58d98146101e65780635aa6e6751461021657806361d027b31461023657806366f88f821461025657005b8062b8ff9214610114578063238efcbc1461013457806349d6e212146101495780634c8541261461018e57005b3661011257005b005b34801561012057600080fd5b5061011261012f36600461132f565b6103c3565b34801561014057600080fd5b50610112610406565b34801561015557600080fd5b5061017961016436600461137a565b60046020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561019a57600080fd5b506101126101a9366004611397565b61047b565b3480156101ba57600080fd5b506003546101ce906001600160a01b031681565b6040516001600160a01b039091168152602001610185565b3480156101f257600080fd5b5061017961020136600461137a565b60056020526000908152604090205460ff1681565b34801561022257600080fd5b506000546101ce906001600160a01b031681565b34801561024257600080fd5b506002546101ce906001600160a01b031681565b34801561026257600080fd5b5061011261027136600461137a565b6104e0565b34801561028257600080fd5b5061011261029136600461137a565b610562565b3480156102a257600080fd5b506101126102b136600461137a565b610600565b3480156102c257600080fd5b506101126102d1366004611397565b61067b565b3480156102e257600080fd5b506101126102f136600461141c565b61068a565b34801561030257600080fd5b5061011261031136600461137a565b610864565b34801561032257600080fd5b5061011261033136600461137a565b6108b0565b34801561034257600080fd5b5061035661035136600461151b565b610948565b6040516101859190611688565b34801561036f57600080fd5b5061011261037e36600461137a565b6109f3565b34801561038f57600080fd5b5061011261039e36600461137a565b610a71565b3480156103af57600080fd5b506001546101ce906001600160a01b031681565b6000546001600160a01b031633146103f65760405162461bcd60e51b81526004016103ed906116ea565b60405180910390fd5b610401838383610ae9565b505050565b6001546001600160a01b0316331461041d57600080fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040519081527f17fdeaa3d89b13aa2b63d35b4629f020be603156d5afcf4aba89bfa93d5f579d9060200160405180910390a1565b6001600160a01b03821661048e57600080fd5b6001600160a01b0381166104a157600080fd5b6040516001600160a01b03808316919084169033907f39e31092deb8f976532f8f405a66c2a1f574b4494ba37cbc2915c1914a9689f290600090a45050565b6000546001600160a01b0316331461050a5760405162461bcd60e51b81526004016103ed906116ea565b6001600160a01b038116600081815260046020908152604091829020805460ff1916905590519182527f74cbb97aad2128ac02cf33c1dd8791a60aae9afab06f3a411169bdae081277c591015b60405180910390a150565b6000546001600160a01b0316331461058c5760405162461bcd60e51b81526004016103ed906116ea565b6001600160a01b03811660009081526004602052604090205460ff16156105b257600080fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f1fa4026b4d339f83c1501efed0d8a25130bf25d6e1b2b0a2c48c8225b2d0fb1e90602001610557565b6000546001600160a01b0316331461062a5760405162461bcd60e51b81526004016103ed906116ea565b6001600160a01b038116600081815260056020908152604091829020805460ff1916905590519182527f736584b2af2b5be32a90fa808de47de356f4e8d00b0c131f3e3c61240b5d71909101610557565b610686338383610ae9565b5050565b8281811461069757600080fd5b60005b8181101561085c5760008686838181106106b6576106b661170f565b90506020020160208101906106cb919061137a565b6001600160a01b03160361077d57600254731b45a86e58b97df309bae0e6c4bbcd40f5a23d5490637c4368c1906001600160a01b03168686858181106107135761071361170f565b6040516001600160e01b031960e087901b1681526001600160a01b039094166004850152602002919091013560248301525060440160006040518083038186803b15801561076057600080fd5b505af4158015610774573d6000803e3d6000fd5b5050505061084a565b731b45a86e58b97df309bae0e6c4bbcd40f5a23d5463d1660f998787848181106107a9576107a961170f565b90506020020160208101906107be919061137a565b6002546001600160a01b03168787868181106107dc576107dc61170f565b6040516001600160e01b031960e088901b1681526001600160a01b0395861660048201529490931660248501525060209091020135604482015260640160006040518083038186803b15801561083157600080fd5b505af4158015610845573d6000803e3d6000fd5b505050505b806108548161173b565b91505061069a565b505050505050565b6000546001600160a01b0316331461088e5760405162461bcd60e51b81526004016103ed906116ea565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108da5760405162461bcd60e51b81526004016103ed906116ea565b6003546001600160a01b038083169116036108f457600080fd5b6001600160a01b038116600081815260046020908152604091829020805460ff1916600117905590519182527fb43754e0033076ed886a3bee063313d9f0da4612cd15041451f9ccf4108205bd9101610557565b6003546060906001600160a01b03163314801561097457503260009081526005602052604090205460ff165b806109a457506003546001600160a01b031633148015906109a457503360009081526004602052604090205460ff165b6109de5760405162461bcd60e51b815260206004820152600b60248201526a08585d5d1a1bdc9a5e995960aa1b60448201526064016103ed565b6109e9848484610b38565b90505b9392505050565b6000546001600160a01b03163314610a1d5760405162461bcd60e51b81526004016103ed906116ea565b6001600160a01b038116600081815260056020908152604091829020805460ff1916600117905590519182527f68f4df5a91ac3c3a2468604a418ba454518d42eb6fcedccca0c00bd1129bcc7f9101610557565b6000546001600160a01b03163314610a9b5760405162461bcd60e51b81526004016103ed906116ea565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fa6df481f77da1f4c92eb330341e03585d46106fcf522f8e6b6b2afbea56eefdc90602001610557565b806001600160a01b0316826001600160a01b0316846001600160a01b03167fb670ba64017b695a17160f17252635c78b7e4b57d1efcf9a6968b9c03e7b596660405160405180910390a4505050565b606060008080808487825b81811015610eee578a8a82818110610b5d57610b5d61170f565b90506020020135965060d887901c60001c60ff16955060408616600014610ba9578a8a610b898361173b565b925082818110610b9b57610b9b61170f565b905060200201359450610bba565b602887901b6001600160d01b031794505b60038616610c2f576001600160a01b038716610bd78a8988610efd565b604051610be49190611754565b600060405180830381855af49150503d8060008114610c1f576040519150601f19603f3d011682016040523d82523d6000602084013e610c24565b606091505b509094509250610e52565b60016003871603610c99576001600160a01b038716610c4f8a8988610efd565b604051610c5c9190611754565b6000604051808303816000865af19150503d8060008114610c1f576040519150601f19603f3d011682016040523d82523d6000602084013e610c24565b60026003871603610d01576001600160a01b038716610cb98a8988610efd565b604051610cc69190611754565b600060405180830381855afa9150503d8060008114610c1f576040519150601f19603f3d011682016040523d82523d6000602084013e610c24565b600380871603610e17576000808a8760f81c60ff1681518110610d2657610d2661170f565b602002602001015190508051602014610d965760405162461bcd60e51b815260206004820152602c60248201527f5f657865637574653a2076616c75652063616c6c20686173206e6f2076616c7560448201526b329034b73234b1b0ba32b21760a11b60648201526084016103ed565b602081015191506001600160a01b03891682610dba8d8c60088c901b60ff17610efd565b604051610dc79190611754565b60006040518083038185875af1925050503d8060008114610e04576040519150601f19603f3d011682016040523d82523d6000602084013e610e09565b606091505b509096509450610e52915050565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c69642063616c6c7479706560801b60448201526064016103ed565b83610eb757825115610e65576044830192505b60008760001c6000855111610e9957604051806040016040528060078152602001662ab735b737bbb760c91b815250610e9b565b845b60405163ef3dcb2f60e01b81526004016103ed93929190611770565b6080861615610ed457610ecf89605889901b856110fd565b610ee6565b610ee389605889901b856111a5565b98505b600101610b43565b50969998505050505050505050565b606060008060005b6020811015610f3c57848160208110610f2057610f2061170f565b1a915060fe19820115610f3c5760209290920191600101610f05565b5060408051808201909152602081018690529250600460006060815b60208110156110ee57878160208110610f7357610f7361170f565b1a945060fe198501156110ee57608085161561109f5760fe850361102f57601f19605f85011687016040526024838801018690528151602090940193600003610fd95789604051602001610fc79190611688565b60405160208183030381529060405291505b8151603f9401938401601f1916870160405261101082602089610ffd8a60046117a3565b6020875161100b91906117bc565b6112fd565b6020825161101e91906117bc565b61102890876117a3565b95506110df565b60008a607f8716815181106110465761104661170f565b6020908102919091018101518051868b016024018a9052968701605f8101601f19168b016040529091019590915061108c8260008b6110868c60046117a3565b856112fd565b61109681896117a3565b975050506110df565b60008a607f8716815181106110b6576110b661170f565b6020908102919091018101518051603f9701968701601f19168a01604052015184890160240152505b60209290920191600101610f58565b50505083525090949350505050565b60f882901c60fe1981016111115750505050565b60008251602061112191906117a3565b67ffffffffffffffff81111561113957611139611488565b6040519080825280601f01601f191660200182016040528015611163576020820181803683370190505b5085607f8416815181106111795761117961170f565b60200260200101819052905061119583600083602087516112fd565b8251806020830152505050505050565b606060f883901c60fe1981016111be57849150506109ec565b60808116156112705760fe81036111ea57828060200190518101906111e391906117cf565b94506112f4565b6020838101519081146112525760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79206f6e652072657475726e2076616c7565207065726d697474656420604482015269287661726961626c652960b01b60648201526084016103ed565b508251601f19016020848101918252607f83168102870101526112f4565b82516020146112d25760405162461bcd60e51b815260206004820152602860248201527f4f6e6c79206f6e652072657475726e2076616c7565207065726d697474656420604482015267287374617469632960c01b60648201526084016103ed565b8285607f8316815181106112e8576112e861170f565b60200260200101819052505b50929392505050565b808260208501018286602089010160045afa505050505050565b6001600160a01b038116811461132c57600080fd5b50565b60008060006060848603121561134457600080fd5b833561134f81611317565b9250602084013561135f81611317565b9150604084013561136f81611317565b809150509250925092565b60006020828403121561138c57600080fd5b81356109ec81611317565b600080604083850312156113aa57600080fd5b82356113b581611317565b915060208301356113c581611317565b809150509250929050565b60008083601f8401126113e257600080fd5b50813567ffffffffffffffff8111156113fa57600080fd5b6020830191508360208260051b850101111561141557600080fd5b9250929050565b6000806000806040858703121561143257600080fd5b843567ffffffffffffffff8082111561144a57600080fd5b611456888389016113d0565b9096509450602087013591508082111561146f57600080fd5b5061147c878288016113d0565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156114c7576114c7611488565b604052919050565b600067ffffffffffffffff8211156114e9576114e9611488565b5060051b60200190565b600067ffffffffffffffff82111561150d5761150d611488565b50601f01601f191660200190565b6000806000604080858703121561153157600080fd5b843567ffffffffffffffff8082111561154957600080fd5b611555888389016113d0565b909650945060209150868201358181111561156f57600080fd5b8701601f8101891361158057600080fd5b803561159361158e826114cf565b61149e565b81815260059190911b8201840190848101908b8311156115b257600080fd5b8584015b83811015611626578035868111156115ce5760008081fd5b8501603f81018e136115e05760008081fd5b878101356115f061158e826114f3565b8181528f8b8385010111156116055760008081fd5b818b84018b83013760009181018a01919091528452509186019186016115b6565b50809750505050505050509250925092565b60005b8381101561165357818101518382015260200161163b565b50506000910152565b60008151808452611674816020860160208601611638565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156116dd57603f198886030184526116cb85835161165c565b945092850192908501906001016116af565b5092979650505050505050565b6020808252600b908201526a21676f7665726e616e636560a81b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161174d5761174d611725565b5060010190565b60008251611766818460208701611638565b9190910192915050565b8381526001600160a01b038316602082015260606040820181905260009061179a9083018461165c565b95945050505050565b808201808211156117b6576117b6611725565b92915050565b818103818111156117b6576117b6611725565b600060208083850312156117e257600080fd5b825167ffffffffffffffff808211156117fa57600080fd5b818501915085601f83011261180e57600080fd5b815161181c61158e826114cf565b81815260059190911b8301840190848101908883111561183b57600080fd5b8585015b838110156118af578051858111156118575760008081fd5b8601603f81018b136118695760008081fd5b87810151604061187b61158e836114f3565b8281528d828486010111156118905760008081fd5b61189f838c8301848701611638565b865250505091860191860161183f565b509897505050505050505056fea2646970667358221220bc488897086574fb93bc838a9bd5eb177f591f592d440e94ff6c9c70abfc7a2964736f6c63430008110033

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

0000000000000000000000002757ae02f65db7ce8cf2b2261c58f07a0170e58e

-----Decoded View---------------
Arg [0] : _governance (address): 0x2757AE02F65dB7Ce8CF2b2261c58f07a0170e58e

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002757ae02f65db7ce8cf2b2261c58f07a0170e58e


Libraries Used


Deployed Bytecode Sourcemap

406:5024:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4057:191;;;;;;;;;;-1:-1:-1;4057:191:1;;;;;:::i;:::-;;:::i;2562:212::-;;;;;;;;;;;;;:::i;782:37::-;;;;;;;;;;-1:-1:-1;782:37:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1101:14:4;;1094:22;1076:41;;1064:2;1049:18;782:37:1;;;;;;;;3711:213;;;;;;;;;;-1:-1:-1;3711:213:1;;;;;:::i;:::-;;:::i;649:25::-;;;;;;;;;;-1:-1:-1;649:25:1;;;;-1:-1:-1;;;;;649:25:1;;;;;;-1:-1:-1;;;;;1685:32:4;;;1667:51;;1655:2;1640:18;649:25:1;1521:203:4;942:39:1;;;;;;;;;;-1:-1:-1;942:39:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;440:33;;;;;;;;;;-1:-1:-1;440:33:1;;;;-1:-1:-1;;;;;440:33:1;;;562:31;;;;;;;;;;-1:-1:-1;562:31:1;;;;-1:-1:-1;;;;;562:31:1;;;3290:128;;;;;;;;;;-1:-1:-1;3290:128:1;;;;;:::i;:::-;;:::i;2780:231::-;;;;;;;;;;-1:-1:-1;2780:231:1;;;;;:::i;:::-;;:::i;3565:140::-;;;;;;;;;;-1:-1:-1;3565:140:1;;;;;:::i;:::-;;:::i;3930:121::-;;;;;;;;;;-1:-1:-1;3930:121:1;;;;;:::i;:::-;;:::i;4640:612::-;;;;;;;;;;-1:-1:-1;4640:612:1;;;;;:::i;:::-;;:::i;2256:144::-;;;;;;;;;;-1:-1:-1;2256:144:1;;;;;:::i;:::-;;:::i;3017:267::-;;;;;;;;;;-1:-1:-1;3017:267:1;;;;;:::i;:::-;;:::i;4440:194::-;;;;;;;;;;-1:-1:-1;4440:194:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3424:135::-;;;;;;;;;;-1:-1:-1;3424:135:1;;;;;:::i;:::-;;:::i;2406:150::-;;;;;;;;;;-1:-1:-1;2406:150:1;;;;;:::i;:::-;;:::i;479:40::-;;;;;;;;;;-1:-1:-1;479:40:1;;;;-1:-1:-1;;;;;479:40:1;;;4057:191;1606:10;;-1:-1:-1;;;;;1606:10:1;1592;:24;1584:48;;;;-1:-1:-1;;;1584:48:1;;;;;;;:::i;:::-;;;;;;;;;4201:40:::1;4210:9;4221:8;4231:9;4201:8;:40::i;:::-;4057:191:::0;;;:::o;2562:212::-;2631:17;;-1:-1:-1;;;;;2631:17:1;2617:10;:31;2609:40;;;;;;2672:17;;;;2659:30;;-1:-1:-1;;;;;2672:17:1;;-1:-1:-1;;;;;;2659:30:1;;;;;;;;2699:24;;;;;;2738:29;;1667:51:4;;;2738:29:1;;1655:2:4;1640:18;2738:29:1;;;;;;;2562:212::o;3711:213::-;-1:-1:-1;;;;;3791:22:1;;3783:31;;;;;;-1:-1:-1;;;;;3832:23:1;;3824:32;;;;;;3872:45;;-1:-1:-1;;;;;3872:45:1;;;;;;;;3885:10;;3872:45;;;;;3711:213;;:::o;3290:128::-;1606:10;;-1:-1:-1;;;;;1606:10:1;1592;:24;1584:48;;;;-1:-1:-1;;;1584:48:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;3366:12:1;::::1;;::::0;;;:5:::1;:12;::::0;;;;;;;;3359:19;;-1:-1:-1;;3359:19:1::1;::::0;;3393:18;;1667:51:4;;;3393:18:1::1;::::0;1640::4;3393::1::1;;;;;;;;3290:128:::0;:::o;2780:231::-;1606:10;;-1:-1:-1;;;;;1606:10:1;1592;:24;1584:48;;;;-1:-1:-1;;;1584:48:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;2906:18:1;::::1;;::::0;;;:5:::1;:18;::::0;;;;;::::1;;2905:19;2897:28;;;::::0;::::1;;2935:10;:24:::0;;-1:-1:-1;;;;;;2935:24:1::1;-1:-1:-1::0;;;;;2935:24:1;::::1;::::0;;::::1;::::0;;;2974:30:::1;::::0;1667:51:4;;;2974:30:1::1;::::0;1655:2:4;1640:18;2974:30:1::1;1521:203:4::0;3565:140:1;1606:10;;-1:-1:-1;;;;;1606:10:1;1592;:24;1584:48;;;;-1:-1:-1;;;1584:48:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;3645:16:1;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;;3638:23;;-1:-1:-1;;3638:23:1::1;::::0;;3676:22;;1667:51:4;;;3676:22:1::1;::::0;1640:18:4;3676:22:1::1;1521:203:4::0;3930:121:1;4003:41;4012:10;4024:8;4034:9;4003:8;:41::i;:::-;3930:121;;:::o;4640:612::-;4759:7;4791:24;;;4783:33;;;;;;4832:9;4827:419;4851:5;4847:1;:9;4827:419;;;4903:1;4881:7;;4889:1;4881:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4881:24:1;;4877:359;;4990:8;;4955:18;;:34;;-1:-1:-1;;;;;4990:8:1;5000;;5009:1;5000:11;;;;;;;:::i;:::-;4955:57;;-1:-1:-1;;;;;;4955:57:1;;;;;;;-1:-1:-1;;;;;8377:32:4;;;4955:57:1;;;8359:51:4;5000:11:1;;;;;;;8426:18:4;;;8419:34;-1:-1:-1;8332:18:4;;4955:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4877:359;;;5077:18;:31;5130:7;;5138:1;5130:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;5162:8;;-1:-1:-1;;;;;5162:8:1;5192;;5201:1;5192:11;;;;;;;:::i;:::-;5077:144;;-1:-1:-1;;;;;;5077:144:1;;;;;;;-1:-1:-1;;;;;8738:15:4;;;5077:144:1;;;8720:34:4;8790:15;;;;8770:18;;;8763:43;-1:-1:-1;5192:11:1;;;;;;8822:18:4;;;8815:34;8655:18;;5077:144:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4877:359;4858:3;;;;:::i;:::-;;;;4827:419;;;;4733:519;4640:612;;;;:::o;2256:144::-;1606:10;;-1:-1:-1;;;;;1606:10:1;1592;:24;1584:48;;;;-1:-1:-1;;;1584:48:1;;;;;;;:::i;:::-;2362:17:::1;:31:::0;;-1:-1:-1;;;;;;2362:31:1::1;-1:-1:-1::0;;;;;2362:31:1;;;::::1;::::0;;;::::1;::::0;;2256:144::o;3017:267::-;1606:10;;-1:-1:-1;;;;;1606:10:1;1592;:24;1584:48;;;;-1:-1:-1;;;1584:48:1;;;;;;;:::i;:::-;3197:10:::1;::::0;-1:-1:-1;;;;;3197:19:1;;::::1;:10:::0;::::1;:19:::0;3189:28:::1;;;::::0;::::1;;-1:-1:-1::0;;;;;3227:12:1;::::1;;::::0;;;:5:::1;:12;::::0;;;;;;;;:19;;-1:-1:-1;;3227:19:1::1;3242:4;3227:19;::::0;;3261:16;;1667:51:4;;;3261:16:1::1;::::0;1640:18:4;3261:16:1::1;1521:203:4::0;4440:194:1;1937:10;;4565:14;;-1:-1:-1;;;;;1937:10:1;1923;:24;1922:48;;;;-1:-1:-1;1960:9:1;1952:18;;;;:7;:18;;;;;;;;1922:48;1921:119;;;-1:-1:-1;2007:10:1;;-1:-1:-1;;;;;2007:10:1;1993;:24;;;;:45;;-1:-1:-1;2027:10:1;2021:17;;;;:5;:17;;;;;;;;1993:45;1900:177;;;;-1:-1:-1;;;1900:177:1;;9334:2:4;1900:177:1;;;9316:21:4;9373:2;9353:18;;;9346:30;-1:-1:-1;;;9392:18:4;;;9385:41;9443:18;;1900:177:1;9132:335:4;1900:177:1;4602:25:::1;4611:8;;4621:5;4602:8;:25::i;:::-;4595:32;;2087:1;4440:194:::0;;;;;:::o;3424:135::-;1606:10;;-1:-1:-1;;;;;1606:10:1;1592;:24;1584:48;;;;-1:-1:-1;;;1584:48:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;3494:16:1;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;;:23;;-1:-1:-1;;3494:23:1::1;3513:4;3494:23;::::0;;3532:20;;1667:51:4;;;3532:20:1::1;::::0;1640:18:4;3532:20:1::1;1521:203:4::0;2406:150:1;1606:10;;-1:-1:-1;;;;;1606:10:1;1592;:24;1584:48;;;;-1:-1:-1;;;1584:48:1;;;;;;;:::i;:::-;2488:8:::1;:20:::0;;-1:-1:-1;;;;;;2488:20:1::1;-1:-1:-1::0;;;;;2488:20:1;::::1;::::0;;::::1;::::0;;;2523:26:::1;::::0;1667:51:4;;;2523:26:1::1;::::0;1655:2:4;1640:18;2523:26:1::1;1521:203:4::0;4254:180:1;4417:9;-1:-1:-1;;;;;4382:45:1;4407:8;-1:-1:-1;;;;;4382:45:1;4396:9;-1:-1:-1;;;;;4382:45:1;;;;;;;;;;;4254:180;;;:::o;793:3450:3:-;886:14;916:15;;;;886:14;1068:8;916:15;1093:3122;1113:14;1109:1;:18;1093:3122;;;1154:8;;1163:1;1154:11;;;;;;;:::i;:::-;;;;;;;1144:21;;1206:3;1195:7;:14;;1187:23;;1213:4;1187:30;1179:38;;425:4;1333:5;:29;1366:1;1333:34;1329:197;;1397:8;;1406:3;;;:::i;:::-;;;;1397:13;;;;;;;:::i;:::-;;;;;;;1387:23;;1329:197;;;1486:2;1475:13;;;-1:-1:-1;;;;;1467:43:3;;-1:-1:-1;1329:197:3;374:4;1544:20;;1540:1960;;-1:-1:-1;;;;;1629:47:3;;1738:148;:5;1653:7;1857;1738:17;:148::i;:::-;1629:275;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1608:296:3;;-1:-1:-1;1608:296:3;-1:-1:-1;1540:1960:3;;;237:4;374;1929:5;:20;:36;1925:1575;;-1:-1:-1;;;;;2006:39:3;;2107:148;:5;2030:7;2226;2107:17;:148::i;:::-;2006:267;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1925:1575;285:4;374;2298:5;:20;:42;2294:1206;;-1:-1:-1;;;;;2381:45:3;;2488:148;:5;2405:7;2607;2488:17;:148::i;:::-;2381:273;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2294:1206;332:4;374;2679:5;:20;:41;2675:825;;2740:15;2773:14;2790:5;2809:7;2796:22;;2790:29;;;;;;;;;;:::i;:::-;;;;;;;2773:46;;2845:1;:8;2857:2;2845:14;2837:71;;;;-1:-1:-1;;;2837:71:3;;9966:2:4;2837:71:3;;;9948:21:4;10005:2;9985:18;;;9978:30;10044:34;10024:18;;;10017:62;-1:-1:-1;;;10095:18:4;;;10088:42;10147:19;;2837:71:3;9764:408:4;2837:71:3;2981:4;2974:12;;2968:19;;-1:-1:-1;;;;;;3043:39:3;;2968:19;3198:204;:5;3067:7;3344:1;3333:12;;;215:4:0;3325:54:3;3198:17;:204::i;:::-;3043:377;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3022:398:3;;-1:-1:-1;3022:398:3;-1:-1:-1;2675:825:3;;-1:-1:-1;;2675:825:3;;3459:26;;-1:-1:-1;;;3459:26:3;;10379:2:4;3459:26:3;;;10361:21:4;10418:2;10398:18;;;10391:30;-1:-1:-1;;;10437:18:4;;;10430:46;10493:18;;3459:26:3;10177:340:4;2675:825:3;3519:7;3514:435;;3550:14;;:18;3546:148;;3651:2;3642:7;3638:16;3627:27;;3546:148;3771:1;3826:7;3818:16;;3884:1;3867:7;:14;:18;:48;;;;;;;;;;;;;;;-1:-1:-1;;;3867:48:3;;;;;;3895:7;3867:48;3718:216;;-1:-1:-1;;;3718:216:3;;;;;;;;;;:::i;3514:435::-;472:4;3967:25;;:30;3963:214;;4017:48;:5;4052:2;4041:13;;;4057:7;4017:16;:48::i;:::-;3963:214;;;4112:50;:5;4149:2;4138:13;;;4154:7;4112:18;:50::i;:::-;4104:58;;3963:214;4200:3;;1093:3122;;;-1:-1:-1;4231:5:3;;793:3450;-1:-1:-1;;;;;;;;;793:3450:3:o;269:3487:0:-;399:16;427:12;503:11;582:9;577:183;597:2;593:1;:6;577:183;;;628:7;636:1;628:10;;;;;;;:::i;:::-;;;-1:-1:-1;;;657:22:0;;653:33;681:5;653:33;718:2;710:10;;;;;745:3;;577:183;;;-1:-1:-1;857:4:0;851:11;;937:60;;;924:74;;;972:4;1018:12;;1011:30;;;851:11;-1:-1:-1;909:1:0;791:20;1087:22;791:20;1182:2501;1202:2;1198:1;:6;1182:2501;;;1233:7;1241:1;1233:10;;;;;;;:::i;:::-;;;-1:-1:-1;;;1262:22:0;;1258:33;1286:5;1258:33;126:4;1310:25;;:30;1306:2303;;258:4;1364:3;:20;1360:1799;;-1:-1:-1;;1531:34:0;;;1527:50;1518:60;;1535:23;1505:74;1624:2;1611:24;;;;1604:38;;;1689:16;;1477:2;1459:21;;;;1709:1;1689:21;1685:105;;1761:5;1750:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;1738:29;;1685:105;1880:16;;1948:34;1862:35;;1948:34;;;-1:-1:-1;;1944:50:0;1935:60;;1929:4;1922:74;2039:59;1886:9;1970:4;1939:3;2066:8;:4;2073:1;2066:8;:::i;:::-;2095:2;2076:9;:16;:21;;;;:::i;:::-;2039:6;:59::i;:::-;2147:2;2128:9;:16;:21;;;;:::i;:::-;2120:29;;;;:::i;:::-;;;1306:2303;;1360:1799;2196:21;2220:5;170:4;2226:3;:20;2220:27;;;;;;;;:::i;:::-;;;;;;;;;;;;2286:15;;2628:24;;;2641:2;2628:24;2621:38;;;2753:25;;;2548:34;2829;;-1:-1:-1;;2825:50:0;2816:60;;2552:23;2803:74;2753:25;;;;2220:27;;-1:-1:-1;2920:184:0;2220:27;2269:14;2539:3;3042:8;2654:4;3049:1;3042:8;:::i;:::-;3076:6;2920;:184::i;:::-;3126:14;3134:6;3126:14;;:::i;:::-;;;2174:985;;1306:2303;;;3253:21;3277:5;170:4;3283:3;:20;3277:27;;;;;;;;:::i;:::-;;;;;;;;;;;;3387:15;;3450:34;3369;;3450;;;-1:-1:-1;;3446:50:0;3437:60;;3431:4;3424:74;3558:17;3552:24;3526;;;3539:2;3526:24;3519:58;-1:-1:-1;1306:2303:0;3641:2;3632:11;;;;;3668:3;;1182:2501;;;-1:-1:-1;;;3715:25:0;;-1:-1:-1;3722:3:0;;269:3487;-1:-1:-1;;;;269:3487:0:o;5285:464::-;5438:12;;;;-1:-1:-1;;5465:22:0;;5461:35;;5489:7;5285:464;;;:::o;5461:35::-;5506:18;5567:6;:13;5583:2;5567:18;;;;:::i;:::-;5557:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5557:29:0;;5527:5;170:4;5533:3;:20;5527:27;;;;;;;;:::i;:::-;;;;;;:59;;;5506:80;;5597:43;5604:6;5612:1;5615:5;5622:2;5626:6;:13;5597:6;:43::i;:::-;5688:6;5682:13;5731:1;5726:2;5719:5;5715:14;5708:25;;5659:84;;5285:464;;;:::o;3762:1517::-;3894:14;3934:12;;;;-1:-1:-1;;3960:22:0;;3956:40;;3991:5;3984:12;;;;;3956:40;126:4;4011:25;;:30;4007:1243;;258:4;4061:3;:20;4057:956;;4120:6;4109:29;;;;;;;;;;;;:::i;:::-;4101:37;;4007:1243;;4057:956;4362:2;4350:15;;;4344:22;;4430:12;;4401:125;;;;-1:-1:-1;;;4401:125:0;;13028:2:4;4401:125:0;;;13010:21:4;13067:2;13047:18;;;13040:30;13106:34;13086:18;;;13079:62;-1:-1:-1;;;13157:18:4;;;13150:40;13207:19;;4401:125:0;12826:406:4;4401:125:0;-1:-1:-1;4692:13:0;;-1:-1:-1;;4688:22:0;4707:2;4671:15;;;4664:47;;;4897:14;4888:24;;4884:33;;4864:54;;;4832:149;4007:1243;;;5095:6;:13;5112:2;5095:19;5070:118;;;;-1:-1:-1;;;5070:118:0;;13439:2:4;5070:118:0;;;13421:21:4;13478:2;13458:18;;;13451:30;13517:34;13497:18;;;13490:62;-1:-1:-1;;;13568:18:4;;;13561:38;13616:19;;5070:118:0;13237:404:4;5070:118:0;5233:6;5203:5;170:4;5209:3;:20;5203:27;;;;;;;;:::i;:::-;;;;;;:36;;;;4007:1243;-1:-1:-1;5267:5:0;;3762:1517;-1:-1:-1;;;3762:1517:0:o;5755:467::-;6171:3;6141:7;6136:2;6130:4;6126:13;6122:27;6097:3;6068:6;6063:2;6058:3;6054:12;6050:25;6027:1;6000:5;5968:224;5947:259;5755:467;;;;;:::o;14:131:4:-;-1:-1:-1;;;;;89:31:4;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:529::-;227:6;235;243;296:2;284:9;275:7;271:23;267:32;264:52;;;312:1;309;302:12;264:52;351:9;338:23;370:31;395:5;370:31;:::i;:::-;420:5;-1:-1:-1;477:2:4;462:18;;449:32;490:33;449:32;490:33;:::i;:::-;542:7;-1:-1:-1;601:2:4;586:18;;573:32;614:33;573:32;614:33;:::i;:::-;666:7;656:17;;;150:529;;;;;:::o;684:247::-;743:6;796:2;784:9;775:7;771:23;767:32;764:52;;;812:1;809;802:12;764:52;851:9;838:23;870:31;895:5;870:31;:::i;1128:388::-;1196:6;1204;1257:2;1245:9;1236:7;1232:23;1228:32;1225:52;;;1273:1;1270;1263:12;1225:52;1312:9;1299:23;1331:31;1356:5;1331:31;:::i;:::-;1381:5;-1:-1:-1;1438:2:4;1423:18;;1410:32;1451:33;1410:32;1451:33;:::i;:::-;1503:7;1493:17;;;1128:388;;;;;:::o;1953:367::-;2016:8;2026:6;2080:3;2073:4;2065:6;2061:17;2057:27;2047:55;;2098:1;2095;2088:12;2047:55;-1:-1:-1;2121:20:4;;2164:18;2153:30;;2150:50;;;2196:1;2193;2186:12;2150:50;2233:4;2225:6;2221:17;2209:29;;2293:3;2286:4;2276:6;2273:1;2269:14;2261:6;2257:27;2253:38;2250:47;2247:67;;;2310:1;2307;2300:12;2247:67;1953:367;;;;;:::o;2325:773::-;2447:6;2455;2463;2471;2524:2;2512:9;2503:7;2499:23;2495:32;2492:52;;;2540:1;2537;2530:12;2492:52;2580:9;2567:23;2609:18;2650:2;2642:6;2639:14;2636:34;;;2666:1;2663;2656:12;2636:34;2705:70;2767:7;2758:6;2747:9;2743:22;2705:70;:::i;:::-;2794:8;;-1:-1:-1;2679:96:4;-1:-1:-1;2882:2:4;2867:18;;2854:32;;-1:-1:-1;2898:16:4;;;2895:36;;;2927:1;2924;2917:12;2895:36;;2966:72;3030:7;3019:8;3008:9;3004:24;2966:72;:::i;:::-;2325:773;;;;-1:-1:-1;3057:8:4;-1:-1:-1;;;;2325:773:4:o;3363:127::-;3424:10;3419:3;3415:20;3412:1;3405:31;3455:4;3452:1;3445:15;3479:4;3476:1;3469:15;3495:275;3566:2;3560:9;3631:2;3612:13;;-1:-1:-1;;3608:27:4;3596:40;;3666:18;3651:34;;3687:22;;;3648:62;3645:88;;;3713:18;;:::i;:::-;3749:2;3742:22;3495:275;;-1:-1:-1;3495:275:4:o;3775:181::-;3833:4;3866:18;3858:6;3855:30;3852:56;;;3888:18;;:::i;:::-;-1:-1:-1;3933:1:4;3929:14;3945:4;3925:25;;3775:181::o;3961:186::-;4009:4;4042:18;4034:6;4031:30;4028:56;;;4064:18;;:::i;:::-;-1:-1:-1;4130:2:4;4109:15;-1:-1:-1;;4105:29:4;4136:4;4101:40;;3961:186::o;4152:1989::-;4281:6;4289;4297;4328:2;4371;4359:9;4350:7;4346:23;4342:32;4339:52;;;4387:1;4384;4377:12;4339:52;4427:9;4414:23;4456:18;4497:2;4489:6;4486:14;4483:34;;;4513:1;4510;4503:12;4483:34;4552:70;4614:7;4605:6;4594:9;4590:22;4552:70;:::i;:::-;4641:8;;-1:-1:-1;4526:96:4;-1:-1:-1;4695:2:4;;-1:-1:-1;4735:18:4;;;4722:32;4766:16;;;4763:36;;;4795:1;4792;4785:12;4763:36;4818:24;;4873:4;4865:13;;4861:27;-1:-1:-1;4851:55:4;;4902:1;4899;4892:12;4851:55;4938:2;4925:16;4961:58;4977:41;5015:2;4977:41;:::i;:::-;4961:58;:::i;:::-;5053:15;;;5135:1;5131:10;;;;5123:19;;5119:28;;;5084:12;;;;5159:19;;;5156:39;;;5191:1;5188;5181:12;5156:39;5223:2;5219;5215:11;5235:876;5251:6;5246:3;5243:15;5235:876;;;5337:3;5324:17;5373:2;5360:11;5357:19;5354:109;;;5417:1;5446:2;5442;5435:14;5354:109;5486:20;;5541:2;5533:11;;5529:25;-1:-1:-1;5519:123:4;;5596:1;5625:2;5621;5614:14;5519:123;5686:2;5682;5678:11;5665:25;5716:48;5732:31;5760:2;5732:31;:::i;5716:48::-;5791:2;5784:5;5777:17;5835:7;5830:2;5825;5821;5817:11;5813:20;5810:33;5807:126;;;5885:1;5915:3;5910;5903:16;5807:126;5988:2;5983;5979;5975:11;5970:2;5963:5;5959:14;5946:45;6036:1;6015:14;;;6011:23;;6004:34;;;;6051:18;;-1:-1:-1;6089:12:4;;;;5268;;5235:876;;;5239:3;6130:5;6120:15;;;;;;;;;4152:1989;;;;;:::o;6146:250::-;6231:1;6241:113;6255:6;6252:1;6249:13;6241:113;;;6331:11;;;6325:18;6312:11;;;6305:39;6277:2;6270:10;6241:113;;;-1:-1:-1;;6388:1:4;6370:16;;6363:27;6146:250::o;6401:270::-;6442:3;6480:5;6474:12;6507:6;6502:3;6495:19;6523:76;6592:6;6585:4;6580:3;6576:14;6569:4;6562:5;6558:16;6523:76;:::i;:::-;6653:2;6632:15;-1:-1:-1;;6628:29:4;6619:39;;;;6660:4;6615:50;;6401:270;-1:-1:-1;;6401:270:4:o;6676:800::-;6836:4;6865:2;6905;6894:9;6890:18;6935:2;6924:9;6917:21;6958:6;6993;6987:13;7024:6;7016;7009:22;7062:2;7051:9;7047:18;7040:25;;7124:2;7114:6;7111:1;7107:14;7096:9;7092:30;7088:39;7074:53;;7162:2;7154:6;7150:15;7183:1;7193:254;7207:6;7204:1;7201:13;7193:254;;;7300:2;7296:7;7284:9;7276:6;7272:22;7268:36;7263:3;7256:49;7328:39;7360:6;7351;7345:13;7328:39;:::i;:::-;7318:49;-1:-1:-1;7425:12:4;;;;7390:15;;;;7229:1;7222:9;7193:254;;;-1:-1:-1;7464:6:4;;6676:800;-1:-1:-1;;;;;;;6676:800:4:o;7481:335::-;7683:2;7665:21;;;7722:2;7702:18;;;7695:30;-1:-1:-1;;;7756:2:4;7741:18;;7734:41;7807:2;7792:18;;7481:335::o;8037:127::-;8098:10;8093:3;8089:20;8086:1;8079:31;8129:4;8126:1;8119:15;8153:4;8150:1;8143:15;8860:127;8921:10;8916:3;8912:20;8909:1;8902:31;8952:4;8949:1;8942:15;8976:4;8973:1;8966:15;8992:135;9031:3;9052:17;;;9049:43;;9072:18;;:::i;:::-;-1:-1:-1;9119:1:4;9108:13;;8992:135::o;9472:287::-;9601:3;9639:6;9633:13;9655:66;9714:6;9709:3;9702:4;9694:6;9690:17;9655:66;:::i;:::-;9737:16;;;;;9472:287;-1:-1:-1;;9472:287:4:o;10522:395::-;10717:25;;;-1:-1:-1;;;;;10778:32:4;;10773:2;10758:18;;10751:60;10847:2;10842;10827:18;;10820:30;;;-1:-1:-1;;10867:44:4;;10892:18;;10884:6;10867:44;:::i;:::-;10859:52;10522:395;-1:-1:-1;;;;;10522:395:4:o;10922:125::-;10987:9;;;11008:10;;;11005:36;;;11021:18;;:::i;:::-;10922:125;;;;:::o;11052:128::-;11119:9;;;11140:11;;;11137:37;;;11154:18;;:::i;11185:1636::-;11289:6;11320:2;11363;11351:9;11342:7;11338:23;11334:32;11331:52;;;11379:1;11376;11369:12;11331:52;11412:9;11406:16;11441:18;11482:2;11474:6;11471:14;11468:34;;;11498:1;11495;11488:12;11468:34;11536:6;11525:9;11521:22;11511:32;;11581:7;11574:4;11570:2;11566:13;11562:27;11552:55;;11603:1;11600;11593:12;11552:55;11632:2;11626:9;11655:58;11671:41;11709:2;11671:41;:::i;11655:58::-;11747:15;;;11829:1;11825:10;;;;11817:19;;11813:28;;;11778:12;;;;11853:19;;;11850:39;;;11885:1;11882;11875:12;11850:39;11917:2;11913;11909:11;11929:862;11945:6;11940:3;11937:15;11929:862;;;12024:3;12018:10;12060:2;12047:11;12044:19;12041:109;;;12104:1;12133:2;12129;12122:14;12041:109;12173:20;;12228:2;12220:11;;12216:25;-1:-1:-1;12206:123:4;;12283:1;12312:2;12308;12301:14;12206:123;12366:2;12362;12358:11;12352:18;12393:2;12421:48;12437:31;12465:2;12437:31;:::i;12421:48::-;12496:2;12489:5;12482:17;12540:7;12535:2;12530;12526;12522:11;12518:20;12515:33;12512:126;;;12590:1;12620:3;12615;12608:16;12512:126;12651:67;12715:2;12710;12703:5;12699:14;12694:2;12690;12686:11;12651:67;:::i;:::-;12731:18;;-1:-1:-1;;;12769:12:4;;;;11962;;11929:862;;;-1:-1:-1;12810:5:4;11185:1636;-1:-1:-1;;;;;;;;11185:1636:4:o

Swarm Source

ipfs://bc488897086574fb93bc838a9bd5eb177f591f592d440e94ff6c9c70abfc7a29

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
Chain Token Portfolio % Price Amount Value
ETH4.38%$0.99985444.7941$44.79
ETH3.53%$1.0634.1146$36.13
ETH3.48%$0.47443775.1767$35.67
ETH3.45%$1.0533.6476$35.36
ETH3.31%$1.0133.6717$33.86
ETH3.28%$0.99827533.597$33.54
ETH3.11%$0.99757831.9107$31.83
ETH2.96%$2,562.940.0118$30.33
ETH2.91%$0.99431229.9885$29.82
ETH2.90%$0.246189120.7327$29.72
ETH2.60%$0.993126.7941$26.61
ETH2.58%$0.99812926.4937$26.44
ETH2.24%$0.47077548.5984$22.88
ETH2.16%$0.26086484.8988$22.15
ETH2.15%$3.755.8809$22.05
ETH1.96%$1.118.2699$20.1
ETH1.90%$61,1740.00031767$19.43
ETH1.81%$0.99706418.5395$18.49
ETH1.78%$63.0295$18.18
ETH1.71%$2,371.10.00740081$17.55
ETH1.51%$2,366.120.00654903$15.5
ETH1.40%$2,542.390.00565241$14.37
ETH1.40%$61,0700.00023517$14.36
ETH1.36%$0.52987226.2622$13.92
ETH1.30%$1.0912.1995$13.32
ETH1.28%$1.58.7207$13.08
ETH1.23%$0.99613212.6476$12.6
ETH1.11%$9.951.1383$11.33
ETH1.09%$0.99464211.1688$11.11
ETH0.99%$65.730.1546$10.16
ETH0.97%$0.9997639.9456$9.94
ETH0.91%$127.30.0734$9.34
ETH0.88%$1.18.1775$9
ETH0.87%$0.9996698.8783$8.88
ETH0.85%$2,424.730.00357323$8.66
ETH0.80%$2,371.090.00345773$8.2
ETH0.79%$15.490.523$8.1
ETH0.78%$0.026002308.5766$8.02
ETH0.78%$2,490.40.00319812$7.96
ETH0.73%$1.086.938$7.47
ETH0.73%$1,452.640.00513023$7.45
ETH0.73%$2,684.310.00276998$7.44
ETH0.72%$33.640.2179$7.33
ETH0.71%$138.810.0523$7.26
ETH0.68%$0.0851982.044$6.99
ETH0.66%$0.9992926.7673$6.76
ETH0.65%$1.16.0412$6.67
ETH0.64%$2,806.70.00233073$6.54
ETH0.60%$0.9991416.1418$6.14
ETH0.58%$0.9999375.9439$5.94
ETH0.58%$1.893.13$5.92
ETH0.58%$0.6323169.3421$5.91
ETH0.57%$0.12487847.0416$5.87
ETH0.56%$1.673.4184$5.71
ETH0.55%$0.34105416.3829$5.59
ETH0.54%$0.049698111.2899$5.53
ETH0.53%$0.9987335.4092$5.4
ETH0.53%$5.241.0308$5.4
ETH0.50%$0.8463036.0162$5.09
ETH0.49%$0.15483832.4063$5.02
ETH0.49%$0.999265.003$5
ETH0.47%$3.021.5874$4.79
ETH0.44%$0.9796434.5876$4.49
ETH0.42%$0.16816625.2837$4.25
ETH0.41%$0.25655316.3339$4.19
ETH0.41%$4,951.950.00083993$4.16
ETH0.40%$9.790.42$4.11
ETH0.40%$0.006479630.6854$4.09
ETH0.38%$0.9995233.86$3.86
ETH0.37%$0.9809563.8158$3.74
ETH0.36%$0.026481139.041$3.68
ETH0.35%$2,455.10.00146045$3.59
ETH0.33%$0.610885.4583$3.33
ETH0.31%$2,377.080.0013397$3.18
ETH0.30%$0.25168412.3618$3.11
ETH0.28%$0.6895914.1779$2.88
ETH0.28%$0.19987214.1$2.82
ETH0.27%$1.941.407$2.73
ETH0.24%$0.9831552.5232$2.48
ETH0.24%$2,479.450.00097611$2.42
ETH0.23%$6.660.3608$2.4
ETH0.23%$0.2468299.5643$2.36
ETH0.22%$2.980.7727$2.3
ETH0.22%$1.032.1952$2.25
ETH0.22%$1.371.637$2.24
ETH0.20%$0.014568138.2899$2.01
ETH0.19%$0.13001714.8613$1.93
ETH0.18%$2,379.120.00079482$1.89
ETH0.18%$1.151.6396$1.89
ETH0.18%$0.9982051.8481$1.84
ETH0.18%$2,492.450.00073888$1.84
ETH0.17%$3.910.4421$1.73
ETH0.17%$1.11.5699$1.73
ETH0.13%$0.00001498,778.7117$1.33
ETH0.12%$0.04040929.9287$1.21
ETH0.12%$21.870.0543$1.19
ETH0.11%$0.011547100.0474$1.16
ETH0.11%$0.10089911.4139$1.15
ETH0.11%$2,771.580.00040043$1.11
ETH0.10%$2,572.80.00041172$1.06
ETH0.10%$5.150.2049$1.06
ETH0.10%$0.01156888.5648$1.02
ETH0.10%$0.2832163.6038$1.02
ETH0.10%$11.0026$1
ETH0.10%$0.9989110.9967$0.9956
ETH0.10%$1.070.9267$0.9934
ETH0.10%$2,416.950.00040821$0.9866
ETH0.09%$0.1425876.7907$0.9682
ETH0.09%$69.220.014$0.9674
ETH0.09%$36.530.026$0.9513
ETH0.09%$0.02743733.0186$0.9059
ETH0.09%$0.999590.8915$0.8911
ETH0.08%$1.20.6848$0.8217
ETH0.07%$16.690.0448$0.7471
ETH0.07%$0.3128692.3009$0.7198
ETH0.06%$66.520.00956303$0.6361
ETH0.06%$0.01582139.8854$0.631
ETH0.06%$2,412.460.00024937$0.6015
ETH0.05%<$0.0000014,304,385.1178$0.5423
ETH0.05%$0.0237921.036$0.5004
ETH0.05%$0.1019944.6424$0.4735
ETH0.04%$2,619.990.0001673$0.4383
ETH0.04%$150.210.00261361$0.3925
ETH0.04%$0.2241641.6797$0.3765
ETH0.03%$0.2865581.1223$0.3216
ETH0.03%$1.960.1575$0.3081
ETH0.03%$0.0408947.0691$0.289
ETH0.03%$1.380.1942$0.268
ETH0.02%$1.120.217$0.2434
ETH0.02%$0.8165070.2892$0.2361
ETH0.02%$0.4229980.5215$0.2205
ETH0.02%$1.250.1568$0.1959
ETH0.02%$0.9949140.1788$0.1778
ETH0.02%$1.040.1633$0.1689
ETH0.01%$0.7892450.1796$0.1417
ETH0.01%$0.00488927.8231$0.136
ETH0.01%$0.1960750.6707$0.1314
ETH0.01%$0.1063011.195$0.127
ETH0.01%$0.0272914.4037$0.1201
ETH0.01%$0.9967870.106$0.1056
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.