ETH Price: $2,659.17 (-2.88%)

Contract

0x7b126ab811f278f288bf1d62d47334351dA20d1d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim Ownership55327982018-04-30 15:26:302486 days ago1525101990IN
0x7b126ab8...51dA20d1d
0 ETH0.0007961741
Transfer Ownersh...55327662018-04-30 15:19:492486 days ago1525101589IN
0x7b126ab8...51dA20d1d
0 ETH0.000265156
Deauthorize Addr...55327372018-04-30 15:11:362486 days ago1525101096IN
0x7b126ab8...51dA20d1d
0 ETH0.000184886
Deauthorize Addr...55327272018-04-30 15:09:132486 days ago1525100953IN
0x7b126ab8...51dA20d1d
0 ETH0.000184886
Deauthorize Addr...55327222018-04-30 15:06:422486 days ago1525100802IN
0x7b126ab8...51dA20d1d
0 ETH0.000184886
Authorize Addres...54093332018-04-09 12:58:092507 days ago1523278689IN
0x7b126ab8...51dA20d1d
0 ETH0.000124432
Deauthorize Addr...53654842018-04-02 6:24:032514 days ago1522650243IN
0x7b126ab8...51dA20d1d
0 ETH0.000092443
Authorize Addres...53654672018-04-02 6:20:322514 days ago1522650032IN
0x7b126ab8...51dA20d1d
0 ETH0.000186643
Authorize Addres...53304342018-03-27 9:38:552520 days ago1522143535IN
0x7b126ab8...51dA20d1d
0 ETH0.000215883

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenTransferDelegate

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-03-26
*/

/*
  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.4.19;
/// @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);
    }
    function sub(uint a, uint b) internal pure returns (uint) {
        require(b <= a);
        return a - b;
    }
    function add(uint a, uint b) internal pure returns (uint c) {
        c = a + b;
        require(c >= a);
    }
    function tolerantSub(uint a, uint b) internal pure returns (uint c) {
        return (a >= b) ? a - b : 0;
    }
    /// @dev calculate the square of Coefficient of Variation (CV)
    /// https://en.wikipedia.org/wiki/Coefficient_of_variation
    function cvsquare(
        uint[] arr,
        uint scale
        )
        internal
        pure
        returns (uint)
    {
        uint len = arr.length;
        require(len > 1);
        require(scale > 0);
        uint avg = 0;
        for (uint i = 0; i < len; i++) {
            avg += arr[i];
        }
        avg = avg / len;
        if (avg == 0) {
            return 0;
        }
        uint cvs = 0;
        uint s;
        uint item;
        for (i = 0; i < len; i++) {
            item = arr[i];
            s = item > avg ? item - avg : avg - item;
            cvs += mul(s, s);
        }
        return ((mul(mul(cvs, scale), scale) / avg) / avg) / (len - 1);
    }
}
/*
  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.
*/
/*
  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 Token Interface
/// @dev see https://github.com/ethereum/EIPs/issues/20
/// @author Daniel Wang - <[email protected]>
contract ERC20 {
    uint public totalSupply;
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function balanceOf(address who) view public returns (uint256);
    function allowance(address owner, address spender) view public returns (uint256);
    function transfer(address to, uint256 value) public returns (bool);
    function transferFrom(address from, address to, uint256 value) public returns (bool);
    function approve(address spender, uint256 value) public returns (bool);
}
/*
  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.
*/
/*
  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.
    function Ownable() public {
        owner = msg.sender;
    }
    /// @dev Throws if called by any account other than the owner.
    modifier onlyOwner() {
        require(msg.sender == 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) onlyOwner public {
        require(newOwner != 0x0);
        OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}
/// @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);
        _;
    }
    /// @dev Allows the current owner to set the pendingOwner address.
    /// @param newOwner The address to transfer ownership to.
    function transferOwnership(address newOwner) onlyOwner public {
        require(newOwner != 0x0 && newOwner != owner);
        pendingOwner = newOwner;
    }
    /// @dev Allows the pendingOwner address to finalize the transfer.
    function claimOwnership() onlyPendingOwner public {
        OwnershipTransferred(owner, pendingOwner);
        owner = pendingOwner;
        pendingOwner = 0x0;
    }
}
/// @title TokenTransferDelegate
/// @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 TokenTransferDelegate is Claimable {
    using MathUint for uint;
    ////////////////////////////////////////////////////////////////////////////
    /// Variables                                                            ///
    ////////////////////////////////////////////////////////////////////////////
    mapping(address => AddressInfo) private addressInfos;
    address public latestAddress;
    ////////////////////////////////////////////////////////////////////////////
    /// Structs                                                              ///
    ////////////////////////////////////////////////////////////////////////////
    struct AddressInfo {
        address previous;
        uint32  index;
        bool    authorized;
    }
    ////////////////////////////////////////////////////////////////////////////
    /// Modifiers                                                            ///
    ////////////////////////////////////////////////////////////////////////////
    modifier onlyAuthorized() {
        require(addressInfos[msg.sender].authorized);
        _;
    }
    ////////////////////////////////////////////////////////////////////////////
    /// Events                                                               ///
    ////////////////////////////////////////////////////////////////////////////
    event AddressAuthorized(address indexed addr, uint32 number);
    event AddressDeauthorized(address indexed addr, uint32 number);
    ////////////////////////////////////////////////////////////////////////////
    /// Public Functions                                                     ///
    ////////////////////////////////////////////////////////////////////////////
    /// @dev Disable default function.
    function () payable public {
        revert();
    }
    /// @dev Add a Loopring protocol address.
    /// @param addr A loopring protocol address.
    function authorizeAddress(address addr)
        onlyOwner
        external
    {
        AddressInfo storage addrInfo = addressInfos[addr];
        if (addrInfo.index != 0) { // existing
            if (addrInfo.authorized == false) { // re-authorize
                addrInfo.authorized = true;
                AddressAuthorized(addr, addrInfo.index);
            }
        } else {
            address prev = latestAddress;
            if (prev == 0x0) {
                addrInfo.index = 1;
                addrInfo.authorized = true;
            } else {
                addrInfo.previous = prev;
                addrInfo.index = addressInfos[prev].index + 1;
            }
            addrInfo.authorized = true;
            latestAddress = addr;
            AddressAuthorized(addr, addrInfo.index);
        }
    }
    /// @dev Remove a Loopring protocol address.
    /// @param addr A loopring protocol address.
    function deauthorizeAddress(address addr)
        onlyOwner
        external
    {
        uint32 index = addressInfos[addr].index;
        if (index != 0) {
            addressInfos[addr].authorized = false;
            AddressDeauthorized(addr, index);
        }
    }
    function getLatestAuthorizedAddresses(uint max)
        external
        view
        returns (address[] addresses)
    {
        addresses = new address[](max);
        address addr = latestAddress;
        AddressInfo memory addrInfo;
        uint count = 0;
        while (addr != 0x0 && count < max) {
            addrInfo = addressInfos[addr];
            if (addrInfo.index == 0) {
                break;
            }
            addresses[count++] = addr;
            addr = addrInfo.previous;
        }
    }
    /// @dev Invoke ERC20 transferFrom method.
    /// @param token Address of token to transfer.
    /// @param from Address to transfer token from.
    /// @param to Address to transfer token to.
    /// @param value Amount of token to transfer.
    function transferToken(
        address token,
        address from,
        address to,
        uint    value)
        onlyAuthorized
        external
    {
        if (value > 0 && from != to && to != 0x0) {
            require(
                ERC20(token).transferFrom(from, to, value)
            );
        }
    }
    function batchTransferToken(
        address lrcTokenAddress,
        address minerFeeRecipient,
        uint8 walletSplitPercentage,
        bytes32[] batch)
        onlyAuthorized
        external
    {
        uint len = batch.length;
        require(len % 7 == 0);
        require(walletSplitPercentage > 0 && walletSplitPercentage < 100);
        ERC20 lrc = ERC20(lrcTokenAddress);
        for (uint i = 0; i < len; i += 7) {
            address owner = address(batch[i]);
            address prevOwner = address(batch[(i + len - 7) % len]);
            // Pay token to previous order, or to miner as previous order's
            // margin split or/and this order's margin split.
            ERC20 token = ERC20(address(batch[i + 1]));
            // Here batch[i + 2] has been checked not to be 0.
            if (owner != prevOwner) {
                require(
                    token.transferFrom(
                        owner,
                        prevOwner,
                        uint(batch[i + 2])
                    )
                );
            }
            // Miner pays LRx fee to order owner
            uint lrcReward = uint(batch[i + 4]);
            if (lrcReward != 0 && minerFeeRecipient != owner) {
                require(
                    lrc.transferFrom(
                        minerFeeRecipient,
                        owner,
                        lrcReward
                    )
                );
            }
            // Split margin-split income between miner and wallet
            splitPayFee(
                token,
                uint(batch[i + 3]),
                owner,
                minerFeeRecipient,
                address(batch[i + 6]),
                walletSplitPercentage
            );
            // Split LRx fee income between miner and wallet
            splitPayFee(
                lrc,
                uint(batch[i + 5]),
                owner,
                minerFeeRecipient,
                address(batch[i + 6]),
                walletSplitPercentage
            );
        }
    }
    function isAddressAuthorized(address addr)
        public
        view
        returns (bool)
    {
        return addressInfos[addr].authorized;
    }
    function splitPayFee(
        ERC20   token,
        uint    fee,
        address owner,
        address minerFeeRecipient,
        address walletFeeRecipient,
        uint    walletSplitPercentage
        )
        internal
    {
        if (fee == 0) {
            return;
        }
        uint walletFee = (walletFeeRecipient == 0x0) ? 0 : fee.mul(walletSplitPercentage) / 100;
        uint minerFee = fee - walletFee;
        if (walletFee > 0 && walletFeeRecipient != owner) {
            require(
                token.transferFrom(
                    owner,
                    walletFeeRecipient,
                    walletFee
                )
            );
        }
        if (minerFee > 0 && minerFeeRecipient != 0x0 && minerFeeRecipient != owner) {
            require(
                token.transferFrom(
                    owner,
                    minerFeeRecipient,
                    minerFee
                )
            );
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"latestAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"max","type":"uint256"}],"name":"getLatestAuthorizedAddresses","outputs":[{"name":"addresses","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"lrcTokenAddress","type":"address"},{"name":"minerFeeRecipient","type":"address"},{"name":"walletSplitPercentage","type":"uint8"},{"name":"batch","type":"bytes32[]"}],"name":"batchTransferToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"authorizeAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"isAddressAuthorized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"deauthorizeAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"number","type":"uint32"}],"name":"AddressAuthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"number","type":"uint32"}],"name":"AddressDeauthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

606060405260008054600160a060020a033316600160a060020a0319909116179055610dce806100306000396000f3006060604052600436106100955763ffffffff60e060020a6000350416630d0567ae811461009a5780632097dd04146100c95780632c54de4f146101325780633a373db7146101625780634a5db3b51461019c5780634e71e0c8146101bb5780638da5cb5b146101ce578063ced3fb9c146101e1578063e30c397814610214578063f2fde38b14610227578063f73857cc14610246575b600080fd5b34156100a557600080fd5b6100ad610265565b604051600160a060020a03909116815260200160405180910390f35b34156100d457600080fd5b6100df600435610274565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561011e578082015183820152602001610106565b505050509050019250505060405180910390f35b341561013d57600080fd5b610160600160a060020a0360043581169060243581169060443516606435610385565b005b341561016d57600080fd5b610160600160a060020a0360048035821691602480359091169160ff6044351691606435908101910135610484565b34156101a757600080fd5b610160600160a060020a0360043516610758565b34156101c657600080fd5b610160610975565b34156101d957600080fd5b6100ad610a03565b34156101ec57600080fd5b610200600160a060020a0360043516610a12565b604051901515815260200160405180910390f35b341561021f57600080fd5b6100ad610a37565b341561023257600080fd5b610160600160a060020a0360043516610a46565b341561025157600080fd5b610160600160a060020a0360043516610ac1565b600354600160a060020a031681565b61027c610d70565b6000610286610d82565b6000846040518059106102965750595b9080825280602002602001820160405250600354909450600160a060020a03169250600090505b600160a060020a038316158015906102d457508481105b1561037d57600160a060020a03831660009081526002602052604090819020906060905190810160409081529154600160a060020a038116825260a060020a810463ffffffff166020830190815260c060020a90910460ff1615159282019290925292505163ffffffff16151561034a5761037d565b8284828060010193508151811061035d57fe5b600160a060020a03909216602092830290910190910152815192506102bd565b505050919050565b33600160a060020a031660009081526002602052604090205460c060020a900460ff1615156103b357600080fd5b6000811180156103d5575081600160a060020a031683600160a060020a031614155b80156103e95750600160a060020a03821615155b1561047e5783600160a060020a03166323b872dd84848460006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561045857600080fd5b6102c65a03f1151561046957600080fd5b50505060405180519050151561047e57600080fd5b50505050565b33600160a060020a031660009081526002602052604081205481908190819081908190819060c060020a900460ff1615156104be57600080fd5b87965060078706156104cf57600080fd5b60008a60ff161180156104e5575060648a60ff16105b15156104f057600080fd5b8b9550600094505b8685101561074a5788888681811061050c57fe5b6020029190910135945089905088886006198882010181151561052b57fe5b0681811061053557fe5b60200291909101359350899050886001870181811061055057fe5b6020029190910135925050600160a060020a038481169084161461061657600160a060020a0382166323b872dd85858c8c60028b0181811061058e57fe5b6020029190910135905060006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156105f057600080fd5b6102c65a03f1151561060157600080fd5b50505060405180519050151561061657600080fd5b88886004870181811061062557fe5b60200291909101359150508015801590610651575083600160a060020a03168b600160a060020a031614155b156106e65785600160a060020a03166323b872dd8c868460006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156106c057600080fd5b6102c65a03f115156106d157600080fd5b5050506040518051905015156106e657600080fd5b61072c828a8a600389018181106106f957fe5b60200291909101359050868e8d8d60068c0181811061071457fe5b9050602002013560001916600190048f60ff16610b71565b61073f868a8a600589018181106106f957fe5b6007850194506104f8565b505050505050505050505050565b60008054819033600160a060020a0390811691161461077657600080fd5b600160a060020a0383166000908152600260205260409020805490925060a060020a900463ffffffff161561082557815460c060020a900460ff16151561082057815460c060020a60ff02191660c060020a17808355600160a060020a038416907f3b61204456cbbcb12a2d6b3006f6a24187ac7d5eeef361a93bad25888eebbb309063ffffffff60a060020a9091041660405163ffffffff909116815260200160405180910390a25b610970565b50600354600160a060020a031680151561087557815460c060020a60ff021977ffffffff00000000000000000000000000000000000000001990911660a060020a171660c060020a1782556108e5565b8154600160a060020a03821673ffffffffffffffffffffffffffffffffffffffff1990911681178084556000918252600260205260409091205463ffffffff60a060020a918290048116600101160277ffffffff0000000000000000000000000000000000000000199091161782555b815460c060020a60ff02191660c060020a17825560038054600160a060020a03851673ffffffffffffffffffffffffffffffffffffffff19909116811790915582547f3b61204456cbbcb12a2d6b3006f6a24187ac7d5eeef361a93bad25888eebbb309063ffffffff60a060020a9091041660405163ffffffff909116815260200160405180910390a25b505050565b60015433600160a060020a0390811691161461099057600080fd5b600154600054600160a060020a0391821691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b600054600160a060020a031681565b600160a060020a031660009081526002602052604090205460c060020a900460ff1690565b600154600160a060020a031681565b60005433600160a060020a03908116911614610a6157600080fd5b600160a060020a03811615801590610a875750600054600160a060020a03828116911614155b1515610a9257600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000805433600160a060020a03908116911614610add57600080fd5b50600160a060020a03811660009081526002602052604090205460a060020a900463ffffffff168015610b6d57600160a060020a03821660008181526002602052604090819020805460c060020a60ff02191690557fa407c1ccf2240ac410f40f8008c27443bf0d10c03f6fb4565e5796d3bf86a5be9083905163ffffffff909116815260200160405180910390a25b5050565b600080861515610b8057610d3b565b600160a060020a03841615610bb0576064610ba1888563ffffffff610d4516565b811515610baa57fe5b04610bb3565b60005b915050808603600082118015610bdb575085600160a060020a031684600160a060020a031614155b15610c705787600160a060020a03166323b872dd87868560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c4a57600080fd5b6102c65a03f11515610c5b57600080fd5b505050604051805190501515610c7057600080fd5b600081118015610c885750600160a060020a03851615155b8015610ca6575085600160a060020a031685600160a060020a031614155b15610d3b5787600160a060020a03166323b872dd87878460006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610d1557600080fd5b6102c65a03f11515610d2657600080fd5b505050604051805190501515610d3b57600080fd5b5050505050505050565b818102821580610d5f5750818382811515610d5c57fe5b04145b1515610d6a57600080fd5b92915050565b60206040519081016040526000815290565b6060604051908101604090815260008083526020830181905290820152905600a165627a7a72305820a1b7d385efdaf4e54d3427a5908e08b4387acb3d1f3199465deb7cc128bf2ef90029

Deployed Bytecode

0x6060604052600436106100955763ffffffff60e060020a6000350416630d0567ae811461009a5780632097dd04146100c95780632c54de4f146101325780633a373db7146101625780634a5db3b51461019c5780634e71e0c8146101bb5780638da5cb5b146101ce578063ced3fb9c146101e1578063e30c397814610214578063f2fde38b14610227578063f73857cc14610246575b600080fd5b34156100a557600080fd5b6100ad610265565b604051600160a060020a03909116815260200160405180910390f35b34156100d457600080fd5b6100df600435610274565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561011e578082015183820152602001610106565b505050509050019250505060405180910390f35b341561013d57600080fd5b610160600160a060020a0360043581169060243581169060443516606435610385565b005b341561016d57600080fd5b610160600160a060020a0360048035821691602480359091169160ff6044351691606435908101910135610484565b34156101a757600080fd5b610160600160a060020a0360043516610758565b34156101c657600080fd5b610160610975565b34156101d957600080fd5b6100ad610a03565b34156101ec57600080fd5b610200600160a060020a0360043516610a12565b604051901515815260200160405180910390f35b341561021f57600080fd5b6100ad610a37565b341561023257600080fd5b610160600160a060020a0360043516610a46565b341561025157600080fd5b610160600160a060020a0360043516610ac1565b600354600160a060020a031681565b61027c610d70565b6000610286610d82565b6000846040518059106102965750595b9080825280602002602001820160405250600354909450600160a060020a03169250600090505b600160a060020a038316158015906102d457508481105b1561037d57600160a060020a03831660009081526002602052604090819020906060905190810160409081529154600160a060020a038116825260a060020a810463ffffffff166020830190815260c060020a90910460ff1615159282019290925292505163ffffffff16151561034a5761037d565b8284828060010193508151811061035d57fe5b600160a060020a03909216602092830290910190910152815192506102bd565b505050919050565b33600160a060020a031660009081526002602052604090205460c060020a900460ff1615156103b357600080fd5b6000811180156103d5575081600160a060020a031683600160a060020a031614155b80156103e95750600160a060020a03821615155b1561047e5783600160a060020a03166323b872dd84848460006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561045857600080fd5b6102c65a03f1151561046957600080fd5b50505060405180519050151561047e57600080fd5b50505050565b33600160a060020a031660009081526002602052604081205481908190819081908190819060c060020a900460ff1615156104be57600080fd5b87965060078706156104cf57600080fd5b60008a60ff161180156104e5575060648a60ff16105b15156104f057600080fd5b8b9550600094505b8685101561074a5788888681811061050c57fe5b6020029190910135945089905088886006198882010181151561052b57fe5b0681811061053557fe5b60200291909101359350899050886001870181811061055057fe5b6020029190910135925050600160a060020a038481169084161461061657600160a060020a0382166323b872dd85858c8c60028b0181811061058e57fe5b6020029190910135905060006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156105f057600080fd5b6102c65a03f1151561060157600080fd5b50505060405180519050151561061657600080fd5b88886004870181811061062557fe5b60200291909101359150508015801590610651575083600160a060020a03168b600160a060020a031614155b156106e65785600160a060020a03166323b872dd8c868460006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156106c057600080fd5b6102c65a03f115156106d157600080fd5b5050506040518051905015156106e657600080fd5b61072c828a8a600389018181106106f957fe5b60200291909101359050868e8d8d60068c0181811061071457fe5b9050602002013560001916600190048f60ff16610b71565b61073f868a8a600589018181106106f957fe5b6007850194506104f8565b505050505050505050505050565b60008054819033600160a060020a0390811691161461077657600080fd5b600160a060020a0383166000908152600260205260409020805490925060a060020a900463ffffffff161561082557815460c060020a900460ff16151561082057815460c060020a60ff02191660c060020a17808355600160a060020a038416907f3b61204456cbbcb12a2d6b3006f6a24187ac7d5eeef361a93bad25888eebbb309063ffffffff60a060020a9091041660405163ffffffff909116815260200160405180910390a25b610970565b50600354600160a060020a031680151561087557815460c060020a60ff021977ffffffff00000000000000000000000000000000000000001990911660a060020a171660c060020a1782556108e5565b8154600160a060020a03821673ffffffffffffffffffffffffffffffffffffffff1990911681178084556000918252600260205260409091205463ffffffff60a060020a918290048116600101160277ffffffff0000000000000000000000000000000000000000199091161782555b815460c060020a60ff02191660c060020a17825560038054600160a060020a03851673ffffffffffffffffffffffffffffffffffffffff19909116811790915582547f3b61204456cbbcb12a2d6b3006f6a24187ac7d5eeef361a93bad25888eebbb309063ffffffff60a060020a9091041660405163ffffffff909116815260200160405180910390a25b505050565b60015433600160a060020a0390811691161461099057600080fd5b600154600054600160a060020a0391821691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b600054600160a060020a031681565b600160a060020a031660009081526002602052604090205460c060020a900460ff1690565b600154600160a060020a031681565b60005433600160a060020a03908116911614610a6157600080fd5b600160a060020a03811615801590610a875750600054600160a060020a03828116911614155b1515610a9257600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000805433600160a060020a03908116911614610add57600080fd5b50600160a060020a03811660009081526002602052604090205460a060020a900463ffffffff168015610b6d57600160a060020a03821660008181526002602052604090819020805460c060020a60ff02191690557fa407c1ccf2240ac410f40f8008c27443bf0d10c03f6fb4565e5796d3bf86a5be9083905163ffffffff909116815260200160405180910390a25b5050565b600080861515610b8057610d3b565b600160a060020a03841615610bb0576064610ba1888563ffffffff610d4516565b811515610baa57fe5b04610bb3565b60005b915050808603600082118015610bdb575085600160a060020a031684600160a060020a031614155b15610c705787600160a060020a03166323b872dd87868560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c4a57600080fd5b6102c65a03f11515610c5b57600080fd5b505050604051805190501515610c7057600080fd5b600081118015610c885750600160a060020a03851615155b8015610ca6575085600160a060020a031685600160a060020a031614155b15610d3b5787600160a060020a03166323b872dd87878460006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610d1557600080fd5b6102c65a03f11515610d2657600080fd5b505050604051805190501515610d3b57600080fd5b5050505050505050565b818102821580610d5f5750818382811515610d5c57fe5b04145b1515610d6a57600080fd5b92915050565b60206040519081016040526000815290565b6060604051908101604090815260008083526020830181905290820152905600a165627a7a72305820a1b7d385efdaf4e54d3427a5908e08b4387acb3d1f3199465deb7cc128bf2ef90029

Swarm Source

bzzr://a1b7d385efdaf4e54d3427a5908e08b4387acb3d1f3199465deb7cc128bf2ef9

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.