ETH Price: $2,653.29 (+0.64%)

Contract

0x4d869def870AdB3B73BDb35f4a3C4d76C6E22975
 
Transaction Hash
Method
Block
From
To
Withdraw Token118690752021-02-16 16:57:551341 days ago1613494675IN
0x4d869def...6C6E22975
0 ETH0.00787264165
Withdraw Token118690602021-02-16 16:55:211341 days ago1613494521IN
0x4d869def...6C6E22975
0 ETH0.00879054165
Withdraw Token118690552021-02-16 16:54:251341 days ago1613494465IN
0x4d869def...6C6E22975
0 ETH0.00787264165
Withdraw Token118690392021-02-16 16:50:451341 days ago1613494245IN
0x4d869def...6C6E22975
0 ETH0.00788484148
Withdraw Token118690372021-02-16 16:50:251341 days ago1613494225IN
0x4d869def...6C6E22975
0 ETH0.0070296146
Withdraw Token118630572021-02-15 18:40:361342 days ago1613414436IN
0x4d869def...6C6E22975
0 ETH0.00409025125
Withdraw Token118630562021-02-15 18:40:231342 days ago1613414423IN
0x4d869def...6C6E22975
0 ETH0.00428181130
Withdraw Token118630522021-02-15 18:39:521342 days ago1613414392IN
0x4d869def...6C6E22975
0 ETH0.00428467130
Withdraw Token118630492021-02-15 18:39:131342 days ago1613414353IN
0x4d869def...6C6E22975
0 ETH0.00447369130
Withdraw Token118630462021-02-15 18:38:421342 days ago1613414322IN
0x4d869def...6C6E22975
0 ETH0.0043108130
Withdraw Token118630422021-02-15 18:38:031342 days ago1613414283IN
0x4d869def...6C6E22975
0 ETH0.00497744130
Withdraw Token118630392021-02-15 18:37:551342 days ago1613414275IN
0x4d869def...6C6E22975
0 ETH0.00425269130
Withdraw Token117860782021-02-03 22:50:541353 days ago1612392654IN
0x4d869def...6C6E22975
0 ETH0.01434054207
Withdraw Token112630332020-11-15 14:51:081434 days ago1605451868IN
0x4d869def...6C6E22975
0 ETH0.00195340
Withdraw Token109079452020-09-21 20:13:021489 days ago1600719182IN
0x4d869def...6C6E22975
0 ETH0.0036362295
Withdraw Token109078052020-09-21 19:43:481489 days ago1600717428IN
0x4d869def...6C6E22975
0 ETH0.0030750294
Withdraw Token106921902020-08-19 18:37:491522 days ago1597862269IN
0x4d869def...6C6E22975
0 ETH0.00389284119
Withdraw Token105855202020-08-03 7:34:131538 days ago1596440053IN
0x4d869def...6C6E22975
0 ETH0.0018646457
Withdraw Token105854612020-08-03 7:21:511538 days ago1596439311IN
0x4d869def...6C6E22975
0 ETH0.0017954156
Withdraw Token105854612020-08-03 7:21:511538 days ago1596439311IN
0x4d869def...6C6E22975
0 ETH0.0014590444
Withdraw Token105854522020-08-03 7:19:231538 days ago1596439163IN
0x4d869def...6C6E22975
0 ETH0.0020515656
Withdraw Token105854492020-08-03 7:18:331538 days ago1596439113IN
0x4d869def...6C6E22975
0 ETH0.002140655
Withdraw Token105854462020-08-03 7:17:401538 days ago1596439060IN
0x4d869def...6C6E22975
0 ETH0.0017998755
Withdraw Token105208572020-07-24 7:27:071548 days ago1595575627IN
0x4d869def...6C6E22975
0 ETH0.0023714672
Withdraw Token105208462020-07-24 7:23:571548 days ago1595575437IN
0x4d869def...6C6E22975
0 ETH0.0026377272
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xaFDC6417...1F08AA472
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
FeeHolder

Compiler Version
v0.5.7+commit.6da8b019

Optimization Enabled:
Yes with 10000 runs

Other Settings:
constantinople EvmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2019-09-23
*/

// File: contracts/iface/IFeeHolder.sol

/*

  Copyright 2017 Loopring Project Ltd (Loopring Foundation).

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/
pragma solidity 0.5.7;

/// @author Kongliang Zhong - <[email protected]>
/// @title IFeeHolder - A contract holding fees.
contract IFeeHolder {

    event TokenWithdrawn(
        address owner,
        address token,
        uint value
    );

    // A map of all fee balances
    mapping(address => mapping(address => uint)) public feeBalances;

    /// @dev   Allows withdrawing the tokens to be burned by
    ///        authorized contracts.
    /// @param token The token to be used to burn buy and burn LRC
    /// @param value The amount of tokens to withdraw
    function withdrawBurned(
        address token,
        uint value
        )
        external
        returns (bool success);

    /// @dev   Allows withdrawing the fee payments funds
    ///        msg.sender is the recipient of the fee and the address
    ///        to which the tokens will be sent.
    /// @param token The token to withdraw
    /// @param value The amount of tokens to withdraw
    function withdrawToken(
        address token,
        uint value
        )
        external
        returns (bool success);

    function batchAddFeeBalances(
        bytes32[] calldata batch
        )
        external;
}

// File: contracts/iface/ITradeDelegate.sol

/*

  Copyright 2017 Loopring Project Ltd (Loopring Foundation).

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/


/// @title ITradeDelegate
/// @dev Acts as a middle man to transfer ERC20 tokens on behalf of different
/// versions of Loopring protocol to avoid ERC20 re-authorization.
/// @author Daniel Wang - <[email protected]>.
contract ITradeDelegate {

    function batchTransfer(
        bytes32[] calldata batch
        )
        external;


    /// @dev Add a Loopring protocol address.
    /// @param addr A loopring protocol address.
    function authorizeAddress(
        address addr
        )
        external;

    /// @dev Remove a Loopring protocol address.
    /// @param addr A loopring protocol address.
    function deauthorizeAddress(
        address addr
        )
        external;

    function isAddressAuthorized(
        address addr
        )
        public
        view
        returns (bool);


    function suspend()
        external;

    function resume()
        external;

    function kill()
        external;
}

// File: contracts/lib/Ownable.sol

/*

  Copyright 2017 Loopring Project Ltd (Loopring Foundation).

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/


/// @title Ownable
/// @dev The Ownable contract has an owner address, and provides basic
///      authorization control functions, this simplifies the implementation of
///      "user permissions".
contract Ownable {
    address public owner;

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

    /// @dev The Ownable constructor sets the original `owner` of the contract
    ///      to the sender.
    constructor()
        public
    {
        owner = msg.sender;
    }

    /// @dev Throws if called by any account other than the owner.
    modifier onlyOwner()
    {
        require(msg.sender == owner, "NOT_OWNER");
        _;
    }

    /// @dev Allows the current owner to transfer control of the contract to a
    ///      newOwner.
    /// @param newOwner The address to transfer ownership to.
    function transferOwnership(
        address newOwner
        )
        public
        onlyOwner
    {
        require(newOwner != address(0x0), "ZERO_ADDRESS");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}

// File: contracts/lib/Claimable.sol

/*

  Copyright 2017 Loopring Project Ltd (Loopring Foundation).

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/



/// @title Claimable
/// @dev Extension for the Ownable contract, where the ownership needs
///      to be claimed. This allows the new owner to accept the transfer.
contract Claimable is Ownable {
    address public pendingOwner;

    /// @dev Modifier throws if called by any account other than the pendingOwner.
    modifier onlyPendingOwner() {
        require(msg.sender == pendingOwner, "UNAUTHORIZED");
        _;
    }

    /// @dev Allows the current owner to set the pendingOwner address.
    /// @param newOwner The address to transfer ownership to.
    function transferOwnership(
        address newOwner
        )
        public
        onlyOwner
    {
        require(newOwner != address(0x0) && newOwner != owner, "INVALID_ADDRESS");
        pendingOwner = newOwner;
    }

    /// @dev Allows the pendingOwner address to finalize the transfer.
    function claimOwnership()
        public
        onlyPendingOwner
    {
        emit OwnershipTransferred(owner, pendingOwner);
        owner = pendingOwner;
        pendingOwner = address(0x0);
    }
}

// File: contracts/lib/ERC20SafeTransfer.sol

/*

  Copyright 2017 Loopring Project Ltd (Loopring Foundation).

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/


/// @title ERC20 safe transfer
/// @dev see https://github.com/sec-bit/badERC20Fix
/// @author Brecht Devos - <[email protected]>
library ERC20SafeTransfer {

    function safeTransfer(
        address token,
        address to,
        uint256 value)
        internal
        returns (bool success)
    {
        // A transfer is successful when 'call' is successful and depending on the token:
        // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false)
        // - A single boolean is returned: this boolean needs to be true (non-zero)

        // bytes4(keccak256("transfer(address,uint256)")) = 0xa9059cbb
        bytes memory callData = abi.encodeWithSelector(
            bytes4(0xa9059cbb),
            to,
            value
        );
        (success, ) = token.call(callData);
        return checkReturnValue(success);
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value)
        internal
        returns (bool success)
    {
        // A transferFrom is successful when 'call' is successful and depending on the token:
        // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false)
        // - A single boolean is returned: this boolean needs to be true (non-zero)

        // bytes4(keccak256("transferFrom(address,address,uint256)")) = 0x23b872dd
        bytes memory callData = abi.encodeWithSelector(
            bytes4(0x23b872dd),
            from,
            to,
            value
        );
        (success, ) = token.call(callData);
        return checkReturnValue(success);
    }

    function checkReturnValue(
        bool success
        )
        internal
        pure
        returns (bool)
    {
        // A transfer/transferFrom is successful when 'call' is successful and depending on the token:
        // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false)
        // - A single boolean is returned: this boolean needs to be true (non-zero)
        if (success) {
            assembly {
                switch returndatasize()
                // Non-standard ERC20: nothing is returned so if 'call' was successful we assume the transfer succeeded
                case 0 {
                    success := 1
                }
                // Standard ERC20: a single boolean value is returned which needs to be true
                case 32 {
                    returndatacopy(0, 0, 32)
                    success := mload(0)
                }
                // None of the above: not successful
                default {
                    success := 0
                }
            }
        }
        return success;
    }

}

// File: contracts/lib/MathUint.sol

/*

  Copyright 2017 Loopring Project Ltd (Loopring Foundation).

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/


/// @title Utility Functions for uint
/// @author Daniel Wang - <[email protected]>
library MathUint {

    function mul(
        uint a,
        uint b
        )
        internal
        pure
        returns (uint c)
    {
        c = a * b;
        require(a == 0 || c / a == b, "INVALID_VALUE");
    }

    function sub(
        uint a,
        uint b
        )
        internal
        pure
        returns (uint)
    {
        require(b <= a, "INVALID_VALUE");
        return a - b;
    }

    function add(
        uint a,
        uint b
        )
        internal
        pure
        returns (uint c)
    {
        c = a + b;
        require(c >= a, "INVALID_VALUE");
    }

    function hasRoundingError(
        uint value,
        uint numerator,
        uint denominator
        )
        internal
        pure
        returns (bool)
    {
        uint multiplied = mul(value, numerator);
        uint remainder = multiplied % denominator;
        // Return true if the rounding error is larger than 1%
        return mul(remainder, 100) > multiplied;
    }
}

// File: contracts/iface/Errors.sol

/*

  Copyright 2017 Loopring Project Ltd (Loopring Foundation).

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/


/// @title Errors
contract Errors {
    string constant ZERO_VALUE                 = "ZERO_VALUE";
    string constant ZERO_ADDRESS               = "ZERO_ADDRESS";
    string constant INVALID_VALUE              = "INVALID_VALUE";
    string constant INVALID_ADDRESS            = "INVALID_ADDRESS";
    string constant INVALID_SIZE               = "INVALID_SIZE";
    string constant INVALID_SIG                = "INVALID_SIG";
    string constant INVALID_STATE              = "INVALID_STATE";
    string constant NOT_FOUND                  = "NOT_FOUND";
    string constant ALREADY_EXIST              = "ALREADY_EXIST";
    string constant REENTRY                    = "REENTRY";
    string constant UNAUTHORIZED               = "UNAUTHORIZED";
    string constant UNIMPLEMENTED              = "UNIMPLEMENTED";
    string constant UNSUPPORTED                = "UNSUPPORTED";
    string constant TRANSFER_FAILURE           = "TRANSFER_FAILURE";
    string constant WITHDRAWAL_FAILURE         = "WITHDRAWAL_FAILURE";
    string constant BURN_FAILURE               = "BURN_FAILURE";
    string constant BURN_RATE_FROZEN           = "BURN_RATE_FROZEN";
    string constant BURN_RATE_MINIMIZED        = "BURN_RATE_MINIMIZED";
    string constant UNAUTHORIZED_ONCHAIN_ORDER = "UNAUTHORIZED_ONCHAIN_ORDER";
    string constant INVALID_CANDIDATE          = "INVALID_CANDIDATE";
    string constant ALREADY_VOTED              = "ALREADY_VOTED";
    string constant NOT_OWNER                  = "NOT_OWNER";
}

// File: contracts/lib/NoDefaultFunc.sol

/*

  Copyright 2017 Loopring Project Ltd (Loopring Foundation).

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/



/// @title NoDefaultFunc
/// @dev Disable default functions.
contract NoDefaultFunc is Errors {
    function ()
        external
        payable
    {
        revert(UNSUPPORTED);
    }
}

// File: contracts/impl/FeeHolder.sol

/*

  Copyright 2017 Loopring Project Ltd (Loopring Foundation).

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/









/// @author Kongliang Zhong - <[email protected]>
contract FeeHolder is IFeeHolder, NoDefaultFunc {
    using MathUint for uint;
    using ERC20SafeTransfer for address;

    address public delegateAddress = address(0x0);

    constructor(address _delegateAddress) public {
        require(_delegateAddress != address(0x0), ZERO_ADDRESS);
        delegateAddress = _delegateAddress;
    }

    modifier onlyAuthorized() {
        ITradeDelegate delegate = ITradeDelegate(delegateAddress);
        bool isAuthorized = delegate.isAddressAuthorized(msg.sender);
        require(isAuthorized, UNAUTHORIZED);
        _;
    }

    function batchAddFeeBalances(bytes32[] calldata batch)
        external
        onlyAuthorized
    {
        uint length = batch.length;
        require(length % 3 == 0, INVALID_SIZE);

        address token;
        address owner;
        uint value;
        uint start = 68;
        uint end = start + length * 32;
        for (uint p = start; p < end; p += 96) {
            assembly {
                token := calldataload(add(p,  0))
                owner := calldataload(add(p, 32))
                value := calldataload(add(p, 64))
            }
            feeBalances[token][owner] = feeBalances[token][owner].add(value);
        }
    }

    function withdrawBurned(address token, uint value)
        external
        onlyAuthorized
        returns (bool)
    {
        return withdraw(token, address(this), msg.sender, value);
    }

    function withdrawToken(address token, uint value)
        external
        returns (bool)
    {
        return withdraw(token, msg.sender, msg.sender, value);
    }

    function withdraw(address token, address from, address to, uint value)
        internal
        returns (bool success)
    {
        require(feeBalances[token][from] >= value, INVALID_VALUE);
        feeBalances[token][from] = feeBalances[token][from].sub(value);
        // Token transfer needs to be done after the state changes to prevent a reentrancy attack
        success = token.safeTransfer(to, value);
        require(success, TRANSFER_FAILURE);
        emit TokenWithdrawn(from, token, value);
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"feeBalances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"batch","type":"bytes32[]"}],"name":"batchAddFeeBalances","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"delegateAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"value","type":"uint256"}],"name":"withdrawBurned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"value","type":"uint256"}],"name":"withdrawToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_delegateAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TokenWithdrawn","type":"event"}]

Deployed Bytecode

0x60806040526004361061005a5760003560e01c80636d96a2aa116100435780636d96a2aa14610207578063787748a7146102455780639e281a981461029f5761005a565b80634566f48a1461012e5780634a874dd914610188575b6040518060400160405280600b81526020017f554e535550504f525445440000000000000000000000000000000000000000008152506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156100f35781810151838201526020016100db565b50505050905090810190601f1680156101205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b34801561013a57600080fd5b506101766004803603604081101561015157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166102e5565b60408051918252519081900360200190f35b34801561019457600080fd5b50610205600480360360208110156101ab57600080fd5b8101906020810181356401000000008111156101c657600080fd5b8201836020820111156101d857600080fd5b803590602001918460208302840111640100000000831117156101fa57600080fd5b5090925090506102ff565b005b34801561021357600080fd5b5061021c61058b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561025157600080fd5b5061028b6004803603604081101561026857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356105a7565b604080519115158252519081900360200190f35b3480156102ab57600080fd5b5061028b600480360360408110156102c257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356106fb565b600060208181529281526040808220909352908152205481565b600154604080517fced3fb9c000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff90921691600091839163ced3fb9c91602480820192602092909190829003018186803b15801561037557600080fd5b505afa158015610389573d6000803e3d6000fd5b505050506040513d602081101561039f57600080fd5b505160408051808201909152600c81527f554e415554484f52495a4544000000000000000000000000000000000000000060208201529091508161043e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283519092839260449091019190850190808383600083156100f35781810151838201526020016100db565b5060408051808201909152600c81527f494e56414c49445f53495a4500000000000000000000000000000000000000006020820152839060038206156104df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283519092839260449091019190850190808383600083156100f35781810151838201526020016100db565b50600080806044602085028101815b8181101561057e57803573ffffffffffffffffffffffffffffffffffffffff818116600090815260208181526040808320828701359485168452909152908190205492985090965082013594506105459085610712565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a16835292905220556060016104ee565b5050505050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b600154604080517fced3fb9c000000000000000000000000000000000000000000000000000000008152336004820152905160009273ffffffffffffffffffffffffffffffffffffffff16918391839163ced3fb9c916024808301926020929190829003018186803b15801561061c57600080fd5b505afa158015610630573d6000803e3d6000fd5b505050506040513d602081101561064657600080fd5b505160408051808201909152600c81527f554e415554484f52495a454400000000000000000000000000000000000000006020820152909150816106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283519092839260449091019190850190808383600083156100f35781810151838201526020016100db565b506106f285303387610784565b95945050505050565b600061070983333385610784565b90505b92915050565b8181018281101561070c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f56414c554500000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081815260408083209387168352928152828220548351808501909452600d84527f494e56414c49445f56414c55450000000000000000000000000000000000000091840191909152909190831115610856576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283519092839260449091019190850190808383600083156100f35781810151838201526020016100db565b5073ffffffffffffffffffffffffffffffffffffffff80861660009081526020818152604080832093881683529290522054610898908363ffffffff6109df16565b73ffffffffffffffffffffffffffffffffffffffff808716600081815260208181526040808320948a16835293905291909120919091556108e090848463ffffffff610a5616565b9050806040518060400160405280601081526020017f5452414e534645525f4641494c555245000000000000000000000000000000008152509061097f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283519092839260449091019190850190808383600083156100f35781810151838201526020016100db565b506040805173ffffffffffffffffffffffffffffffffffffffff80871682528716602082015280820184905290517f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e56209181900360600190a1949350505050565b600082821115610a5057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f56414c554500000000000000000000000000000000000000604482015290519081900360640190fd5b50900390565b6040805173ffffffffffffffffffffffffffffffffffffffff8085166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017815292518251600094928816928492918291908083835b60208310610b2a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610aed565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610b8c576040519150601f19603f3d011682016040523d82523d6000602084013e610b91565b606091505b5050809250506106f28260008115610bd2573d8015610bbb5760208114610bc45760009250610bd0565b60019250610bd0565b60206000803e60005192505b505b509056fea165627a7a72305820127734695ccbeacfa2413cc7e49bc4c2a4ec9c88baed0dd14722d5230ebe3fa90029

Deployed Bytecode Sourcemap

16310:2174:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15545:11;;;;;;;;;;;;;;;;;15538:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15538:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;966:63;;8:9:-1;5:2;;;30:1;27;20:12;5:2;966:63:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;966:63:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;16904:666;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16904:666:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16904:666:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;16904:666:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16904:666:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;16904:666:0;;-1:-1:-1;16904:666:0;-1:-1:-1;16904:666:0;:::i;:::-;;16439:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16439:45:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17578:197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17578:197:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17578:197:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;17783:169;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17783:169:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17783:169:0;;;;;;;;;:::i;966:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;16904:666::-;16743:15;;16790:40;;;;;;16819:10;16790:40;;;;;;16743:15;;;;;16702:23;;16743:15;;16790:28;;:40;;;;;;;;;;;;;;;16743:15;16790:40;;;5:2:-1;;;;30:1;27;20:12;5:2;16790:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16790:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16790:40:0;16863:12;;;;;;;;;;;;;16790:40;16863:12;;;16790:40;;-1:-1:-1;16790:40:0;16841:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;16841:35:0;-1:-1:-1;17079:12:0;;;;;;;;;;;;;;;;;17031:5;;17071:1;17062:10;;:15;17054:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;17054:38:0;-1:-1:-1;17105:13:0;;;17187:2;17228;17219:11;;17211:19;;17187:2;17241:322;17266:3;17262:1;:7;17241:322;;;17332:24;;17515:18;;;;17353:1;17515:18;;;17403:2;17515:18;;;17454:2;17515:18;;;17396:10;;;17383:24;17515:25;;;;;;;;;;;;;17332:24;;-1:-1:-1;17383:24:0;;-1:-1:-1;17447:10:0;;17434:24;;-1:-1:-1;17515:36:0;;17434:24;17515:29;:36::i;:::-;17487:18;;;;:11;:18;;;;;;;;;;;:25;;;;;;;;;:64;17276:2;17271:7;17241:322;;;;16887:1;;;;;;16904:666;;;;:::o;16439:45::-;;;;;;:::o;17578:197::-;16743:15;;16790:40;;;;;;16819:10;16790:40;;;;;;17689:4;;16743:15;;;17689:4;;16743:15;;16790:28;;:40;;;;;;;;;;;;;;16743:15;16790:40;;;5:2:-1;;;;30:1;27;20:12;5:2;16790:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16790:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16790:40:0;16863:12;;;;;;;;;;;;;16790:40;16863:12;;;16790:40;;-1:-1:-1;16790:40:0;16841:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;16841:35:0;;17718:49;17727:5;17742:4;17749:10;17761:5;17718:8;:49::i;:::-;17711:56;17578:197;-1:-1:-1;;;;;17578:197:0:o;17783:169::-;17869:4;17898:46;17907:5;17914:10;17926;17938:5;17898:8;:46::i;:::-;17891:53;;17783:169;;;;;:::o;11903:192::-;12039:5;;;12063:6;;;;12055:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17960:519;18105:18;;;;18067:12;18105:18;;;;;;;;;;;:24;;;;;;;;;;;;18140:13;;;;;;;;;;;;;;;;;;;18067:12;;18140:13;18105:33;-1:-1:-1;18105:33:0;18097:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;18097:57:0;-1:-1:-1;18192:18:0;;;;:11;:18;;;;;;;;;;;:24;;;;;;;;;;:35;;18221:5;18192:35;:28;:35;:::i;:::-;18165:18;;;;:11;:18;;;;;;;;;;;:24;;;;;;;;;;;;:62;;;;18347:29;;18366:2;18370:5;18347:29;:18;:29;:::i;:::-;18337:39;;18395:7;18404:16;;;;;;;;;;;;;;;;;18387:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;18387:34:0;-1:-1:-1;18437:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17960:519;;;;;;:::o;11702:193::-;11810:4;11845:1;11840;:6;;11832:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11882:5:0;;;11702:193::o;8016:739::-;8556:103;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8556:103:0;;;;;;;25:18:-1;;61:17;;8556:103:0;182:15:-1;8593:18:0;179:29:-1;160:49;;8684:20:0;;;;8144:12;;8684:10;;;;8556:103;;8684:20;;;25:18:-1;8684:20:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;8684:20:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;8670:34:0;;;;;8722:25;8739:7;9682:4;10005:7;10001:666;;;10064:16;10219:61;;;;10397:2;10392:115;;;;10621:1;10610:12;;10057:584;;10219:61;10260:1;10249:12;;10219:61;;10392:115;10444:2;10441:1;10438;10423:24;10486:1;10480:8;10469:19;;10057:584;;10038:618;-1:-1:-1;10684:7:0;9572:1127::o

Swarm Source

bzzr://127734695ccbeacfa2413cc7e49bc4c2a4ec9c88baed0dd14722d5230ebe3fa9

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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.