ETH Price: $2,733.91 (+0.88%)

Contract

0xFA086D40C50c38a47F9D9864454236174DBcb7FD
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw All43702482017-10-16 7:00:082684 days ago1508137208IN
0xFA086D40...74DBcb7FD
0 ETH0.0005000121
Withdraw All43634832017-10-13 23:31:432686 days ago1507937503IN
0xFA086D40...74DBcb7FD
0 ETH0.001309432
Withdraw All43625172017-10-13 15:30:362687 days ago1507908636IN
0xFA086D40...74DBcb7FD
0 ETH0.0003914212
Withdraw All43625012017-10-13 15:24:322687 days ago1507908272IN
0xFA086D40...74DBcb7FD
0 ETH0.0004892815
Transfer43612952017-10-13 5:26:562687 days ago1507872416IN
0xFA086D40...74DBcb7FD
1 ETH0.0019518421
Transfer43603732017-10-12 21:59:152687 days ago1507845555IN
0xFA086D40...74DBcb7FD
0.5 ETH0.0013941715
Transfer43596822017-10-12 16:26:172688 days ago1507825577IN
0xFA086D40...74DBcb7FD
0 ETH0.0004483721
Modify Whitelist43596442017-10-12 16:08:062688 days ago1507824486IN
0xFA086D40...74DBcb7FD
0 ETH0.0018935415
Modify Whitelist43580992017-10-12 3:08:092688 days ago1507777689IN
0xFA086D40...74DBcb7FD
0 ETH0.0009542421
Modify Whitelist43580962017-10-12 3:06:412688 days ago1507777601IN
0xFA086D40...74DBcb7FD
0 ETH0.0018992421
Transfer43580402017-10-12 2:33:442688 days ago1507775624IN
0xFA086D40...74DBcb7FD
7 ETH0.0025818421
Transfer43580402017-10-12 2:33:442688 days ago1507775624IN
0xFA086D40...74DBcb7FD
0.01 ETH0.002881721
Modify Whitelist43580242017-10-12 2:24:192688 days ago1507775059IN
0xFA086D40...74DBcb7FD
0 ETH0.0076910421

Latest 3 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
43702482017-10-16 7:00:082684 days ago1508137208
0xFA086D40...74DBcb7FD
1 ETH
43625172017-10-13 15:30:362687 days ago1507908636
0xFA086D40...74DBcb7FD
0.5 ETH
43625012017-10-13 15:24:322687 days ago1507908272
0xFA086D40...74DBcb7FD
7 ETH
Loading...
Loading

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

Contract Name:
PresalePool

Compiler Version
v0.4.16+commit.d7661dd9

Optimization Enabled:
Yes with 200 runs

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

pragma solidity ^0.4.15;

// ERC20 Interface
contract ERC20 {
    function transfer(address _to, uint _value) returns (bool success);
    function balanceOf(address _owner) constant returns (uint balance);
}

contract PresalePool {
    enum State { Open, Failed, Closed, Paid }
    State public state;

    address[] public admins;

    uint public minContribution;
    uint public maxContribution;
    uint public maxPoolTotal;

    address[] public participants;

    bool public whitelistAll;

    struct ParticipantState {
        uint contribution;
        uint remaining;
        bool whitelisted;
        bool exists;
    }
    mapping (address => ParticipantState) public balances;
    uint public poolTotal;

    address presaleAddress;
    bool refundable;
    uint gasFundTotal;

    ERC20 public token;

    event Deposit(
        address indexed _from,
        uint _value
    );
    event Payout(
        address indexed _to,
        uint _value
    );
    event Withdrawl(
        address indexed _to,
        uint _value
    );

    modifier onlyAdmins() {
        require(isAdmin(msg.sender));
        _;
    }

    modifier onState(State s) {
        require(state == s);
        _;
    }

    modifier stateAllowsConfiguration() {
        require(state == State.Open || state == State.Closed);
        _;
    }

    bool locked;
    modifier noReentrancy() {
        require(!locked);
        locked = true;
        _;
        locked = false;
    }

    function PresalePool(uint _minContribution, uint _maxContribution, uint _maxPoolTotal, address[] _admins) payable {
        state = State.Open;
        admins.push(msg.sender);

        setContributionSettings(_minContribution, _maxContribution, _maxPoolTotal);

        whitelistAll = true;

        for (uint i = 0; i < _admins.length; i++) {
            var admin = _admins[i];
            if (!isAdmin(admin)) {
                admins.push(admin);
            }
        }

        deposit();
    }

    function () payable {
        deposit();
    }

    function close() public onlyAdmins onState(State.Open) {
        state = State.Closed;
    }

    function open() public onlyAdmins onState(State.Closed) {
        state = State.Open;
    }

    function fail() public onlyAdmins stateAllowsConfiguration {
        state = State.Failed;
    }

    function payToPresale(address _presaleAddress) public onlyAdmins onState(State.Closed) {
        state = State.Paid;
        presaleAddress = _presaleAddress;
        refundable = true;
        presaleAddress.transfer(poolTotal);
    }

    function refundPresale() payable public onState(State.Paid) {
        require(refundable && msg.value >= poolTotal);
        require(msg.sender == presaleAddress || isAdmin(msg.sender));
        gasFundTotal = msg.value - poolTotal;
        state = State.Failed;
    }

    function setToken(address tokenAddress) public onlyAdmins {
        token = ERC20(tokenAddress);
    }

    function withdrawAll() public {
        uint total = balances[msg.sender].remaining;
        balances[msg.sender].remaining = 0;

        if (state == State.Open || state == State.Failed) {
            total += balances[msg.sender].contribution;
            if (gasFundTotal > 0) {
                uint gasRefund = (balances[msg.sender].contribution * gasFundTotal) / (poolTotal);
                gasFundTotal -= gasRefund;
                total += gasRefund;
            }
            poolTotal -= balances[msg.sender].contribution;
            balances[msg.sender].contribution = 0;
        } else {
            require(state == State.Paid);
        }

        msg.sender.transfer(total);
        Withdrawl(msg.sender, total);
    }

    function withdraw(uint amount) public onState(State.Open) {
        uint total = balances[msg.sender].remaining + balances[msg.sender].contribution;
        require(total >= amount);
        uint debit = min(balances[msg.sender].remaining, amount);
        balances[msg.sender].remaining -= debit;
        debit = amount - debit;
        balances[msg.sender].contribution -= debit;
        poolTotal -= debit;

        (balances[msg.sender].contribution, balances[msg.sender].remaining) = getContribution(msg.sender, 0);
        // must respect the minContribution limit
        require(balances[msg.sender].remaining == 0 || balances[msg.sender].contribution > 0);
        msg.sender.transfer(amount);
        Withdrawl(msg.sender, amount);
    }

    function transferMyTokens() public onState(State.Paid) noReentrancy {
        uint tokenBalance = token.balanceOf(address(this));
        require(tokenBalance > 0);

        uint participantContribution = balances[msg.sender].contribution;
        uint participantShare = participantContribution * tokenBalance / poolTotal;

        poolTotal -= participantContribution;
        balances[msg.sender].contribution = 0;
        refundable = false;
        require(token.transfer(msg.sender, participantShare));

        Payout(msg.sender, participantShare);
    }

    address[] public failures;
    function transferAllTokens() public onlyAdmins onState(State.Paid) noReentrancy returns (address[]) {
        uint tokenBalance = token.balanceOf(address(this));
        require(tokenBalance > 0);
        delete failures;

        for (uint i = 0; i < participants.length; i++) {
            address participant = participants[i];
            uint participantContribution = balances[participant].contribution;

            if (participantContribution > 0) {
                uint participantShare = participantContribution * tokenBalance / poolTotal;

                poolTotal -= participantContribution;
                balances[participant].contribution = 0;

                if (token.transfer(participant, participantShare)) {
                    refundable = false;
                    Payout(participant, participantShare);
                    tokenBalance -= participantShare;
                    if (tokenBalance == 0) {
                        break;
                    }
                } else {
                    balances[participant].contribution = participantContribution;
                    poolTotal += participantContribution;
                    failures.push(participant);
                }
            }
        }

        return failures;
    }

    function modifyWhitelist(address[] toInclude, address[] toExclude) public onlyAdmins stateAllowsConfiguration {
        bool previous = whitelistAll;
        uint i;
        if (previous) {
            require(toExclude.length == 0);
            for (i = 0; i < participants.length; i++) {
                balances[participants[i]].whitelisted = false;
            }
            whitelistAll = false;
        }

        for (i = 0; i < toInclude.length; i++) {
            balances[toInclude[i]].whitelisted = true;
        }

        address excludedParticipant;
        uint contribution;
        if (previous) {
            for (i = 0; i < participants.length; i++) {
                excludedParticipant = participants[i];
                if (!balances[excludedParticipant].whitelisted) {
                    contribution = balances[excludedParticipant].contribution;
                    balances[excludedParticipant].contribution = 0;
                    balances[excludedParticipant].remaining += contribution;
                    poolTotal -= contribution;
                }
            }
        } else {
            for (i = 0; i < toExclude.length; i++) {
                excludedParticipant = toExclude[i];
                balances[excludedParticipant].whitelisted = false;
                contribution = balances[excludedParticipant].contribution;
                balances[excludedParticipant].contribution = 0;
                balances[excludedParticipant].remaining += contribution;
                poolTotal -= contribution;
            }
        }
    }

    function removeWhitelist() public onlyAdmins stateAllowsConfiguration {
        if (!whitelistAll) {
            whitelistAll = true;
            for (uint i = 0; i < participants.length; i++) {
                balances[participants[i]].whitelisted = true;
            }
        }
    }

    function setContributionSettings(uint _minContribution, uint _maxContribution, uint _maxPoolTotal) public onlyAdmins stateAllowsConfiguration {
        // we raised the minContribution threshold
        bool recompute = (minContribution < _minContribution);
        // we lowered the maxContribution threshold
        recompute = recompute || (maxContribution > _maxContribution);
        // we did not have a maxContribution threshold and now we do
        recompute = recompute || (maxContribution == 0 && _maxContribution > 0);
        // we want to make maxPoolTotal lower than the current pool total
        recompute = recompute || (poolTotal > _maxPoolTotal);

        minContribution = _minContribution;
        maxContribution = _maxContribution;
        maxPoolTotal = _maxPoolTotal;

        if (maxContribution > 0) {
            require(maxContribution >= minContribution);
        }
        if (maxPoolTotal > 0) {
            require(maxPoolTotal >= minContribution);
            require(maxPoolTotal >= maxContribution);
        }

        if (recompute) {
            poolTotal = 0;
            for (uint i = 0; i < participants.length; i++) {
                address participant = participants[i];
                var balance = balances[participant];
                (balance.contribution, balance.remaining) = getContribution(participant, 0);
                poolTotal += balance.contribution;
            }
        }
    }

    function getParticipantBalances() public returns(address[], uint[], uint[], bool[], bool[]) {
        uint[] memory contribution = new uint[](participants.length);
        uint[] memory remaining = new uint[](participants.length);
        bool[] memory whitelisted = new bool[](participants.length);
        bool[] memory exists = new bool[](participants.length);

        for (uint i = 0; i < participants.length; i++) {
            var balance = balances[participants[i]];
            contribution[i] = balance.contribution;
            remaining[i] = balance.remaining;
            whitelisted[i] = balance.whitelisted;
            exists[i] = balance.exists;
        }

        return (participants, contribution, remaining, whitelisted, exists);
    }

    function deposit() internal onState(State.Open) {
        if (msg.value > 0) {
            require(included(msg.sender));
            (balances[msg.sender].contribution, balances[msg.sender].remaining) = getContribution(msg.sender, msg.value);
            // must respect the maxContribution and maxPoolTotal limits
            require(balances[msg.sender].remaining == 0);
            balances[msg.sender].whitelisted = true;
            poolTotal += msg.value;
            if (!balances[msg.sender].exists) {
                balances[msg.sender].exists = true;
                participants.push(msg.sender);
            }
            Deposit(msg.sender, msg.value);
        }
    }

    function isAdmin(address addr) internal constant returns (bool) {
        for (uint i = 0; i < admins.length; i++) {
            if (admins[i] == addr) {
                return true;
            }
        }
        return false;
    }

    function included(address participant) internal constant returns (bool) {
        return whitelistAll || balances[participant].whitelisted || isAdmin(participant);
    }

    function getContribution(address participant, uint amount) internal constant returns (uint, uint) {
        var balance = balances[participant];
        uint total = balance.remaining + balance.contribution + amount;
        uint contribution = total;
        if (!included(participant)) {
            return (0, total);
        }
        if (maxContribution > 0) {
            contribution = min(maxContribution, contribution);
        }
        if (maxPoolTotal > 0) {
            contribution = min(maxPoolTotal - poolTotal, contribution);
        }
        if (contribution < minContribution) {
            return (0, total);
        }
        return (contribution, total - contribution);
    }

    function min(uint a, uint b) internal pure returns (uint _min) {
        if (a < b) {
            return a;
        }
        return b;
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"}],"name":"setToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"admins","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"removeWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_presaleAddress","type":"address"}],"name":"payToPresale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"refundPresale","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balances","outputs":[{"name":"contribution","type":"uint256"},{"name":"remaining","type":"uint256"},{"name":"whitelisted","type":"bool"},{"name":"exists","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"participants","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"getParticipantBalances","outputs":[{"name":"","type":"address[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"bool[]"},{"name":"","type":"bool[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"close","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"transferAllTokens","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"whitelistAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"poolTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxContribution","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_minContribution","type":"uint256"},{"name":"_maxContribution","type":"uint256"},{"name":"_maxPoolTotal","type":"uint256"}],"name":"setContributionSettings","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"fail","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minContribution","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"failures","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"toInclude","type":"address[]"},{"name":"toExclude","type":"address[]"}],"name":"modifyWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"transferMyTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxPoolTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"open","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_minContribution","type":"uint256"},{"name":"_maxContribution","type":"uint256"},{"name":"_maxPoolTotal","type":"uint256"},{"name":"_admins","type":"address[]"}],"payable":true,"stateMutability":"payable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Payout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Withdrawl","type":"event"}]

Deployed Bytecode

0x6060604052361561012d5763ffffffff60e060020a600035041663144fa6d7811461013957806314bfd6d01461015a57806317f708fb1461018c5780631fff2d8a146101a157806326bdd814146101c257806327e235e3146101cc5780632e1a7d4d1461021957806335c1d34914610231578063390a05a81461026357806343d726d6146103e35780634c96f0cc146103f85780635d54e6121461045f578063704d4db014610486578063853828b6146104ab5780638d3d6576146104c0578063a8083b74146104e5578063a9cc471814610503578063aaffadf314610518578063bf4d5af41461053d578063c19d93fb1461056f578063def86cbb146105a6578063f231647214610637578063f3cc24361461064c578063fc0c546a14610671578063fcfff16f146106a0575b5b6101366106b5565b5b005b341561014457600080fd5b610136600160a060020a0360043516610810565b005b341561016557600080fd5b610170600435610851565b604051600160a060020a03909116815260200160405180910390f35b341561019757600080fd5b610136610883565b005b34156101ac57600080fd5b610136600160a060020a0360043516610965565b005b610136610a21565b005b34156101d757600080fd5b6101eb600160a060020a0360043516610ab4565b6040519384526020840192909252151560408084019190915290151560608301526080909101905180910390f35b341561022457600080fd5b610136600435610ae1565b005b341561023c57600080fd5b610170600435610c62565b604051600160a060020a03909116815260200160405180910390f35b341561026e57600080fd5b610276610c94565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b838110156102c75780820151818401525b6020016102ae565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b838110156103075780820151818401525b6020016102ee565b50505050905001868103845289818151815260200191508051906020019060200280838360005b838110156103475780820151818401525b60200161032e565b50505050905001868103835288818151815260200191508051906020019060200280838360005b838110156103875780820151818401525b60200161036e565b50505050905001868103825287818151815260200191508051906020019060200280838360005b838110156103c75780820151818401525b6020016103ae565b505050509050019a505050505050505050505060405180910390f35b34156103ee57600080fd5b610136610ed0565b005b341561040357600080fd5b61040b610f22565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561044b5780820151818401525b602001610432565b505050509050019250505060405180910390f35b341561046a57600080fd5b61047261127a565b604051901515815260200160405180910390f35b341561049157600080fd5b610499611283565b60405190815260200160405180910390f35b34156104b657600080fd5b610136611289565b005b34156104cb57600080fd5b6104996113ff565b60405190815260200160405180910390f35b34156104f057600080fd5b610136600435602435604435611405565b005b341561050e57600080fd5b610136611585565b005b341561052357600080fd5b6104996115ee565b60405190815260200160405180910390f35b341561054857600080fd5b6101706004356115f4565b604051600160a060020a03909116815260200160405180910390f35b341561057a57600080fd5b610582611626565b6040518082600381111561059257fe5b60ff16815260200191505060405180910390f35b34156105b157600080fd5b61013660046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437820191505050505050919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284375094965061162f95505050505050565b005b341561064257600080fd5b6101366118a0565b005b341561065757600080fd5b610499611aac565b60405190815260200160405180910390f35b341561067c57600080fd5b610170611ab2565b604051600160a060020a03909116815260200160405180910390f35b34156106ab57600080fd5b610136611ac1565b005b6000805b60005460ff1660038111156106ca57fe5b146106d457600080fd5b600034111561080b576106e633611b11565b15156106f157600080fd5b6106fb3334611b58565b600160a060020a033316600090815260076020526040902060018101829055919091551561072857600080fd5b600160a060020a0333166000908152600760205260409020600201805460ff19166001178155600880543401905554610100900460ff1615156107cd57600160a060020a0333166000908152600760205260409020600201805461ff001916610100179055600580546001810161079f8382611c8b565b916000526020600020900160005b8154600160a060020a033381166101009390930a92830292021916179055505b33600160a060020a03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405190815260200160405180910390a25b5b5b50565b61081933611bfe565b151561082457600080fd5b600b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b600180548290811061085f57fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b600061088e33611bfe565b151561089957600080fd5b60005b60005460ff1660038111156108ad57fe5b14806108ca575060025b60005460ff1660038111156108c857fe5b145b15156108d557600080fd5b60065460ff16151561080b57506006805460ff1916600117905560005b60055481101561080b5760016007600060058481548110151561091157fe5b906000526020600020900160005b90546101009190910a9004600160a060020a031681526020810191909152604001600020600201805460ff19169115159190911790555b6001016108f2565b5b5b5b5b50565b61096e33611bfe565b151561097957600080fd5b6002805b60005460ff16600381111561098e57fe5b1461099857600080fd5b600080546003919060ff19166001835b02179055506009805460a060020a60ff0219600160a060020a0380861673ffffffffffffffffffffffffffffffffffffffff19909316929092171660a060020a179182905560085491169080156108fc0290604051600060405180830381858888f193505050501515610a1a57600080fd5b5b5b505b50565b6003805b60005460ff166003811115610a3657fe5b14610a4057600080fd5b60095460a060020a900460ff168015610a5b57506008543410155b1515610a6657600080fd5b60095433600160a060020a0390811691161480610a875750610a8733611bfe565b5b1515610a9357600080fd5b6008543403600a55600080546001919060ff191682805b02179055505b5b50565b60076020526000908152604090208054600182015460029092015490919060ff8082169161010090041684565b60008080805b60005460ff166003811115610af857fe5b14610b0257600080fd5b600160a060020a0333166000908152600760205260409020805460019091015401925083831015610b3257600080fd5b600160a060020a033316600090815260076020526040902060010154610b589085611c71565b33600160a060020a038116600090815260076020526040812060018101805485900390558054938803938490039055600880548490039055919350610b9c91611b58565b600160a060020a033316600090815260076020526040902060018101829055919091551580610be15750600160a060020a033316600090815260076020526040812054115b1515610bec57600080fd5b600160a060020a03331684156108fc0285604051600060405180830381858888f193505050501515610c1d57600080fd5b33600160a060020a03167f65ac0d8bb8cbc0e989ebd02ddc5161d7c499f7c21792e43fcf170314fe6bcc3f8560405190815260200160405180910390a25b5b50505050565b600580548290811061085f57fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b610c9c611cb5565b610ca4611cb5565b610cac611cb5565b610cb4611cb5565b610cbc611cb5565b610cc4611cb5565b610ccc611cb5565b610cd4611cb5565b610cdc611cb5565b6005546000908190604051805910610cf15750595b908082528060200260200182016040525b50600554909650604051805910610d165750595b908082528060200260200182016040525b50600554909550604051805910610d3b5750595b908082528060200260200182016040525b50600554909450604051805910610d605750595b908082528060200260200182016040525b509250600091505b600554821015610e565760076000600584815481101515610d9657fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000208054909150868381518110610dd957fe5b602090810290910101526001810154858381518110610df457fe5b60209081029091010152600281015460ff16848381518110610e1257fe5b911515602092830290910190910152600281015460ff61010090910416838381518110610e3b57fe5b9115156020928302909101909101525b600190910190610d79565b60058686868684805480602002602001604051908101604052809291908181526020018280548015610eb157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610e93575b505050505094509a509a509a509a509a505b5050505050509091929394565b610ed933611bfe565b1515610ee457600080fd5b6000805b60005460ff166003811115610ef957fe5b14610f0357600080fd5b600080546002919060ff1916600183610aaa565b02179055505b5b505b565b610f2a611cb5565b6000806000806000610f3b33611bfe565b1515610f4657600080fd5b6003805b60005460ff166003811115610f5b57fe5b14610f6557600080fd5b600b5460a060020a900460ff1615610f7c57600080fd5b600b805460a060020a60ff02191660a060020a1790819055600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610fea57600080fd5b6102c65a03f11515610ffb57600080fd5b50505060405180519650506000861161101357600080fd5b61101f600c6000611ceb565b600094505b60055485101561120057600580548690811061103c57fe5b906000526020600020900160005b9054600160a060020a036101009290920a9004166000818152600760205260408120549195509093508311156111f35760085486840281151561108957fe5b600880548690039055600160a060020a03808716600090815260076020526040808220829055600b5494909304955092169163a9059cbb9187918691516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561110d57600080fd5b6102c65a03f1151561111e57600080fd5b5050506040518051905015611190576009805460a060020a60ff0219169055600160a060020a0384167f5afeca38b2064c23a692c4cf353015d80ab3ecc417b4f893f372690c11fbd9a68360405190815260200160405180910390a2948190039485151561118b57611200565b6111f3565b600160a060020a03841660009081526007602052604090208390556008805484019055600c8054600181016111c58382611c8b565b916000526020600020900160005b8154600160a060020a038089166101009390930a92830292021916179055505b5b5b600190940193611024565b600c80548060200260200160405190810160405280929190818152602001828054801561125657602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611238575b505050505096505b600b805460a060020a60ff02191690555b5b505b505050505090565b60065460ff1681565b60085481565b600160a060020a033316600090815260076020526040812060010180549082905590805b60005460ff1660038111156112be57fe5b14806112db575060015b60005460ff1660038111156112d957fe5b145b1561136d57600160a060020a033316600090815260076020526040812054600a54930192111561134357600854600a54600160a060020a0333166000908152600760205260409020540281151561132e57fe5b600a8054929091049182900390559182019190505b600160a060020a03331660009081526007602052604081208054600880549190910390555561138b565b60035b60005460ff16600381111561138157fe5b1461138b57600080fd5b5b600160a060020a03331682156108fc0283604051600060405180830381858888f1935050505015156113bd57600080fd5b33600160a060020a03167f65ac0d8bb8cbc0e989ebd02ddc5161d7c499f7c21792e43fcf170314fe6bcc3f8360405190815260200160405180910390a25b5050565b60035481565b60008060008061141433611bfe565b151561141f57600080fd5b60005b60005460ff16600381111561143357fe5b1480611450575060025b60005460ff16600381111561144e57fe5b145b151561145b57600080fd5b86600254109350838061146f575085600354115b9350838061148857506003541580156114885750600086115b5b93508380611498575084600854115b600288905560038790556004869055935060008611156114c35760025460035410156114c357600080fd5b5b600060045411156114f15760025460045410156114e057600080fd5b60035460045410156114f157600080fd5b5b8315611578576000600881905592505b60055483101561157857600580548490811061151a57fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416600081815260076020526040812091935090915061155b908390611b58565b60018301558082556008805490910190555b600190920191611502565b5b5b5b5b50505050505050565b61158e33611bfe565b151561159957600080fd5b60005b60005460ff1660038111156115ad57fe5b14806115ca575060025b60005460ff1660038111156115c857fe5b145b15156115d557600080fd5b600080546001919060ff191682805b02179055505b5b5b565b60025481565b600c80548290811061085f57fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b60005460ff1681565b60008060008061163e33611bfe565b151561164957600080fd5b60005b60005460ff16600381111561165d57fe5b148061167a575060025b60005460ff16600381111561167857fe5b145b151561168557600080fd5b60065460ff169350831561171e5784511561169f57600080fd5b600092505b600554831015611713576000600760006005868154811015156116c357fe5b906000526020600020900160005b90546101009190910a9004600160a060020a031681526020810191909152604001600020600201805460ff19169115159190911790555b6001909201916116a4565b6006805460ff191690555b600092505b855183101561177f5760016007600088868151811061173e57fe5b90602001906020020151600160a060020a031681526020810191909152604001600020600201805460ff19169115159190911790555b600190920191611723565b831561182457600092505b60055483101561181f5760058054849081106117a257fe5b906000526020600020900160005b9054600160a060020a036101009290920a90041660008181526007602052604090206002015490925060ff1615156118135750600160a060020a038116600090815260076020526040812080549181556001018054820190556008805482900390555b5b60019092019161178a565b611894565b600092505b84518310156118945784838151811061183e57fe5b90602001906020020151600160a060020a038116600090815260076020526040812060028101805460ff19169055805491815560010180548201905560088054829003905590925090505b600190920191611829565b5b5b5b5b505050505050565b600080806003805b60005460ff1660038111156118b957fe5b146118c357600080fd5b600b5460a060020a900460ff16156118da57600080fd5b600b805460a060020a60ff02191660a060020a1790819055600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561194857600080fd5b6102c65a03f1151561195957600080fd5b50505060405180519450506000841161197157600080fd5b600160a060020a03331660009081526007602052604090205460085490935084840281151561199c57fe5b60088054869003905533600160a060020a038181166000908152600760205260408082208290556009805460a060020a60ff0219169055600b5495909404965093169263a9059cbb92869190516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611a3057600080fd5b6102c65a03f11515611a4157600080fd5b505050604051805190501515611a5657600080fd5b33600160a060020a03167f5afeca38b2064c23a692c4cf353015d80ab3ecc417b4f893f372690c11fbd9a68360405190815260200160405180910390a25b600b805460a060020a60ff02191690555b5b50505050565b60045481565b600b54600160a060020a031681565b611aca33611bfe565b1515611ad557600080fd5b6002805b60005460ff166003811115611aea57fe5b14611af457600080fd5b60008054819060ff1916600182610aaa565b02179055505b5b505b565b60065460009060ff1680611b405750600160a060020a03821660009081526007602052604090206002015460ff165b80611b4f5750611b4f82611bfe565b5b90505b919050565b600160a060020a03821660009081526007602052604081208054600182015483929101840180611b8787611b11565b1515611b9b57600094509092508290611bf4565b60006003541115611bb557611bb260035482611c71565b90505b60006004541115611bd357611bd06008546004540382611c71565b90505b600254811015611beb57600094509092508290611bf4565b80818303945094505b5050509250929050565b6000805b600154811015611c665782600160a060020a0316600182815481101515611c2557fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a03161415611c5d5760019150611c6b565b5b600101611c02565b600091505b50919050565b600081831015611c82575081611c85565b50805b92915050565b815481835581811511611caf57600083815260209020611caf918101908301611d0d565b5b505050565b60206040519081016040526000815290565b60206040519081016040526000815290565b60206040519081016040526000815290565b508054600082559060005260206000209081019061080b9190611d0d565b5b50565b611d2b91905b80821115611d275760008155600101611d13565b5090565b905600a165627a7a72305820fa3372d264e6f716085c85bfa5952d5cf818fbea45d00ed1fa0a3f93e184d26d0029

Swarm Source

bzzr://fa3372d264e6f716085c85bfa5952d5cf818fbea45d00ed1fa0a3f93e184d26d

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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