Sponsored Link: Monaco VISA® - World’s Best Cryptocurrency CardICO LIVE NOW
Contract Overview
ETH Balance: 47,205.0521223486389046 Ether
ETH USD Value: $8,684,313.44 (@ $183.97/ETH)
No Of Transactions: 126 txns + 359 internalTxns
  Latest 25 txns from a total Of 126 transactions View All

TxHash Block Age From To Value [TxFee]
0xe901162bfaab62bbf77b29e142af346aa6a26aba936c46d1c7f1268b092a341a37433554 days 15 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00139303
0x1adbd46e97927b6b1a61662626833f2f8945740d69846302db9e500aef3ad602363934823 days 7 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00077509
0x84e326aa85f042bd627ef35c8850a5fa9a32fdcca035192ec6f87d7984a1abe4363901323 days 9 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00510288
0x0b6c0f4cc80d6eb8f7d85aa879096523ffca76395ff1b5e03634274485a51e4f363168524 days 16 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0008223
0x6f1585eebae7967844cbaabcc6260eb6d6626d0dc5f0daf1303c99fb0d61a8d8363168524 days 16 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00086158
0x5826e2adb6e8812bbe007e2e925b495506c3d8c6c4a7bcaee29d7a0742d7a418363167724 days 16 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00082358
0x401e2c399e3667c8e2616f133bd77e3f1903be88dd9374b266f5fb5325c2fc45363167624 days 16 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00086286
0xb2caafe7aa2614fdfdcfbe5d4608caa640c73e141d36971a13f9b2e0cbe55999363167424 days 16 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00086418
0x95c38593fc3e760969bdcd5a4475bb875959e4395779a7a9ca2cf077d2b008e5363166624 days 16 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00132358
0xcbe71a5c4a13482a3f33dfceab1cf1788de6a461f3827af2bc662561e156bb3d363166024 days 16 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00082486
0x4fdf2d79426df7380ee953d712eb6ff59d71946dcf847b19239a580627fdf6bf363165324 days 16 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00132486
0x22da01d01c49bfc35fc8ad5df6fe536eaed58300685bf5ed16fcea50b65ef726363164324 days 16 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00082486
0x85add3c0b39f2b355e7e8c8b79fc5f2945bf09380d7543630a1c24a3e8c673a8363161624 days 16 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00082486
0x28091dc7c94c6eaed878a5f28747bd01f5efb809b68c2faeeddd1cd2382126a0363156224 days 17 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00082486
0x5e61bcf1b711104187e0ca12bd3c3741035f8eaff2bd4f062a7162d39842e24d363153024 days 17 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0011548
0x049531f8a097fd8e7b4cc16d34285aeb31c23190578d4071bfc14ee05f53da1f363147424 days 17 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00085332
0xc6ef8cc07434802accba2bde033f80fc6e36a4f617c631ea317029d474e54892363141524 days 17 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0011548
0xaa911821158f51c1efb5a38c576e17466d5d08d1cbc69da9c3100000967e3017363126824 days 18 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00143738
0xff439e62437dc1d98c964d7db645800b5362ac75e99a42ada8dccdfde066f06c360403329 days 14 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.01229261
0x3e2c27d1598580c2c75df351aee7ff020c9aca32f6f98c625d5e83eccd91acd5355356938 days 6 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00082486
0x7b9faf9d12a272291efd1ee08d7072c7951e76800d890f2812493d9d2a46e2ea355313938 days 8 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0005774
0x51c0854b96da8025604279b93478816119a5539686c430cc9e2a2a9aa5824588355222438 days 12 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00053389
0x564d24456f5799c4230d0a92ee9c204c66d9f5195d0be8ba8bf26b58b808898a347569751 days 13 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00035934
0x6d5f099721717f5e2ec11ba488465a4811557482f1f8143bb10741770e43640e347135852 days 7 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00052943
0x6db3d371987cf9e3ddb23e7646b0d827820c7d18c6e427f5e0266d84d51f3bbf347002752 days 12 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0004637

[Download: CSV Export ]    
 Internal Transactions as a result of Contract Execution
  Latest 25 Internal Txns from a total of 359 View All
ParentTxHash Block Age From To Value
0xe901162bfaab62bbf77b29e142af346aa6a26aba936c46d1c7f1268b092a341a37433554 days 15 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xb7ac953a304e5b9449aa53e59cb4c75e1fce600837 Ether
0x1adbd46e97927b6b1a61662626833f2f8945740d69846302db9e500aef3ad602363934823 days 7 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x36b0ca172da5a33201efdc398acf9dde8f29d69a10,000 Ether
0x0b6c0f4cc80d6eb8f7d85aa879096523ffca76395ff1b5e03634274485a51e4f363168524 days 16 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x3f00976e5582addadaa829ab17d256373ce02e8a14.16 Ether
0x6f1585eebae7967844cbaabcc6260eb6d6626d0dc5f0daf1303c99fb0d61a8d8363168524 days 16 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xc54c62a43a4a87f4e22014989074790c44179c6811.25 Ether
0x5826e2adb6e8812bbe007e2e925b495506c3d8c6c4a7bcaee29d7a0742d7a418363167724 days 16 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x78db81b33a6fa83734cf9504ec5ec3c7645d11a86.56 Ether
0x401e2c399e3667c8e2616f133bd77e3f1903be88dd9374b266f5fb5325c2fc45363167624 days 16 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xc54c62a43a4a87f4e22014989074790c44179c6820.33 Ether
0xb2caafe7aa2614fdfdcfbe5d4608caa640c73e141d36971a13f9b2e0cbe55999363167424 days 16 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xf96b83b5d3fbb910cb0b350de4b230a51567d1bc20.33 Ether
0x95c38593fc3e760969bdcd5a4475bb875959e4395779a7a9ca2cf077d2b008e5363166624 days 16 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x38e5d1171c133c4e2efaa1734a398fa04481ba9f4.07 Ether
0xcbe71a5c4a13482a3f33dfceab1cf1788de6a461f3827af2bc662561e156bb3d363166024 days 16 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x51ded656442eb0d148ebedda17c221f9ec4a382220.33 Ether
0x4fdf2d79426df7380ee953d712eb6ff59d71946dcf847b19239a580627fdf6bf363165324 days 16 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x3a49bc762fefb2993daae16f976b42aa3bfaf2da25.41 Ether
0x22da01d01c49bfc35fc8ad5df6fe536eaed58300685bf5ed16fcea50b65ef726363164324 days 16 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xafcd3a065812529491667b6d57f168a5fcfc848040.66 Ether
0x85add3c0b39f2b355e7e8c8b79fc5f2945bf09380d7543630a1c24a3e8c673a8363161624 days 16 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x2628277359d9bdc3075a53654a3e1d9a178086dc48.28 Ether
0x28091dc7c94c6eaed878a5f28747bd01f5efb809b68c2faeeddd1cd2382126a0363156224 days 17 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x30b696e897394820731cf85f49e80dcf26c7535663.53 Ether
0x5e61bcf1b711104187e0ca12bd3c3741035f8eaff2bd4f062a7162d39842e24d363153024 days 17 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xcf62cac373b70dbec7b5ff35959eebb6023578e7140 Ether
0x049531f8a097fd8e7b4cc16d34285aeb31c23190578d4071bfc14ee05f53da1f363147424 days 17 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xcb47b46ed57a3d0ffcb3f067db5b3bc0e3e20a98254 Ether
0xc6ef8cc07434802accba2bde033f80fc6e36a4f617c631ea317029d474e54892363141524 days 17 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x43280bb1803619d2b1f274b64d7ad13de2eefb9a850 Ether
0xaa911821158f51c1efb5a38c576e17466d5d08d1cbc69da9c3100000967e3017363126824 days 18 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xda9b9830e0860cb17cc70e9c2cb9ba099b1c0484388 Ether
0xff439e62437dc1d98c964d7db645800b5362ac75e99a42ada8dccdfde066f06c360403329 days 14 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xef638b4305b8a1620f4e0e562e127f1181ae16d2325 Ether
0x3e2c27d1598580c2c75df351aee7ff020c9aca32f6f98c625d5e83eccd91acd5355356938 days 6 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xcbc9881aaace54cff25efe261d36a987be2214301,800 Ether
0x7b9faf9d12a272291efd1ee08d7072c7951e76800d890f2812493d9d2a46e2ea355313938 days 8 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xcbc9881aaace54cff25efe261d36a987be22143099 Ether
0x51c0854b96da8025604279b93478816119a5539686c430cc9e2a2a9aa5824588355222438 days 12 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xcbc9881aaace54cff25efe261d36a987be2214301 Ether
0x564d24456f5799c4230d0a92ee9c204c66d9f5195d0be8ba8bf26b58b808898a347569751 days 13 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xb7ac953a304e5b9449aa53e59cb4c75e1fce6008116.27 Ether
0x6d5f099721717f5e2ec11ba488465a4811557482f1f8143bb10741770e43640e347135852 days 7 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xb7ac953a304e5b9449aa53e59cb4c75e1fce60081 Ether
0x6db3d371987cf9e3ddb23e7646b0d827820c7d18c6e427f5e0266d84d51f3bbf347002752 days 12 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x30b696e897394820731cf85f49e80dcf26c7535660.66 Ether
0x1e4baa96fbcd4e1b081b6e1791f9f92da8d9747f9a9a3162f322aa5d33f33ca2346947152 days 14 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xcb47b46ed57a3d0ffcb3f067db5b3bc0e3e20a98399.84 Ether

[Download: CSV Export ]    
Warning: The compiled contract might be susceptible to IdentityPrecompileReturnIgnored (low-severity), HighOrderByteCleanStorage (high-severity), SendFailsForZeroEther (low-severity), DynamicAllocationInfiniteLoop (low-severity), CleanBytesHigherOrderBits (medium/high-severity) Solidity compiler bugs.

Contract Source Code Verified
Note: Displaying matching verified source code at contract 0x5cb5f46a655c02889172323760d12d0e5d83cdaf
Contract Name: Wallet
Compiler Version: v0.3.2-2016-04-18-81ae2a7
Optimization Enabled: No
Online Solidity Editor:  -NA-



  Contract Source Code   Find Similiar Contracts
//sol Wallet
// Multi-sig, daily-limited account proxy/wallet.
// @authors:
// Gav Wood <g@ethdev.com>
// inheritable "property" contract that enables methods to be protected by requiring the acquiescence of either a
// single, or, crucially, each of a number of, designated owners.
// usage:
// use modifiers onlyowner (just own owned) or onlymanyowners(hash), whereby the same hash must be provided by
// some number (specified in constructor) of the set of owners (specified in the constructor, modifiable) before the
// interior is executed.
contract multiowned {

    // TYPES

    // struct for the status of a pending operation.
    struct PendingState {
        uint yetNeeded;
        uint ownersDone;
        uint index;
    }

    // EVENTS

    // this contract only has five types of events: it can accept a confirmation, in which case
    // we record owner and operation (hash) alongside it.
    event Confirmation(address owner, bytes32 operation);
    event Revoke(address owner, bytes32 operation);
    // some others are in the case of an owner changing.
    event OwnerChanged(address oldOwner, address newOwner);
    event OwnerAdded(address newOwner);
    event OwnerRemoved(address oldOwner);
    // the last one is emitted if the required signatures change
    event RequirementChanged(uint newRequirement);

    // MODIFIERS

    // simple single-sig function modifier.
    modifier onlyowner {
        if (isOwner(msg.sender))
            _
    }
    // multi-sig function modifier: the operation must have an intrinsic hash in order
    // that later attempts can be realised as the same underlying operation and
    // thus count as confirmations.
    modifier onlymanyowners(bytes32 _operation) {
        if (confirmAndCheck(_operation))
            _
    }

    // METHODS

    // constructor is given number of sigs required to do protected "onlymanyowners" transactions
    // as well as the selection of addresses capable of confirming them.
    function multiowned(address[] _owners, uint _required) {
        m_numOwners = _owners.length + 1;
        m_owners[1] = uint(msg.sender);
        m_ownerIndex[uint(msg.sender)] = 1;
        for (uint i = 0; i < _owners.length; ++i)
        {
            m_owners[2 + i] = uint(_owners[i]);
            m_ownerIndex[uint(_owners[i])] = 2 + i;
        }
        m_required = _required;
    }
    
    // Revokes a prior confirmation of the given operation
    function revoke(bytes32 _operation) external {
        uint ownerIndex = m_ownerIndex[uint(msg.sender)];
        // make sure they're an owner
        if (ownerIndex == 0) return;
        uint ownerIndexBit = 2**ownerIndex;
        var pending = m_pending[_operation];
        if (pending.ownersDone & ownerIndexBit > 0) {
            pending.yetNeeded++;
            pending.ownersDone -= ownerIndexBit;
            Revoke(msg.sender, _operation);
        }
    }
    
    // Replaces an owner `_from` with another `_to`.
    function changeOwner(address _from, address _to) onlymanyowners(sha3(msg.data, block.number)) external {
        if (isOwner(_to)) return;
        uint ownerIndex = m_ownerIndex[uint(_from)];
        if (ownerIndex == 0) return;

        clearPending();
        m_owners[ownerIndex] = uint(_to);
        m_ownerIndex[uint(_from)] = 0;
        m_ownerIndex[uint(_to)] = ownerIndex;
        OwnerChanged(_from, _to);
    }
    
    function addOwner(address _owner) onlymanyowners(sha3(msg.data, block.number)) external {
        if (isOwner(_owner)) return;

        clearPending();
        if (m_numOwners >= c_maxOwners)
            reorganizeOwners();
        if (m_numOwners >= c_maxOwners)
            return;
        m_numOwners++;
        m_owners[m_numOwners] = uint(_owner);
        m_ownerIndex[uint(_owner)] = m_numOwners;
        OwnerAdded(_owner);
    }
    
    function removeOwner(address _owner) onlymanyowners(sha3(msg.data, block.number)) external {
        uint ownerIndex = m_ownerIndex[uint(_owner)];
        if (ownerIndex == 0) return;
        if (m_required > m_numOwners - 1) return;

        m_owners[ownerIndex] = 0;
        m_ownerIndex[uint(_owner)] = 0;
        clearPending();
        reorganizeOwners(); //make sure m_numOwner is equal to the number of owners and always points to the optimal free slot
        OwnerRemoved(_owner);
    }
    
    function changeRequirement(uint _newRequired) onlymanyowners(sha3(msg.data, block.number)) external {
        if (_newRequired > m_numOwners) return;
        m_required = _newRequired;
        clearPending();
        RequirementChanged(_newRequired);
    }
    
    function isOwner(address _addr) returns (bool) {
        return m_ownerIndex[uint(_addr)] > 0;
    }
    
    function hasConfirmed(bytes32 _operation, address _owner) constant returns (bool) {
        var pending = m_pending[_operation];
        uint ownerIndex = m_ownerIndex[uint(_owner)];

        // make sure they're an owner
        if (ownerIndex == 0) return false;

        // determine the bit to set for this owner.
        uint ownerIndexBit = 2**ownerIndex;
        if (pending.ownersDone & ownerIndexBit == 0) {
            return false;
        } else {
            return true;
        }
    }
    
    // INTERNAL METHODS

    function confirmAndCheck(bytes32 _operation) internal returns (bool) {
        // determine what index the present sender is:
        uint ownerIndex = m_ownerIndex[uint(msg.sender)];
        // make sure they're an owner
        if (ownerIndex == 0) return;

        var pending = m_pending[_operation];
        // if we're not yet working on this operation, switch over and reset the confirmation status.
        if (pending.yetNeeded == 0) {
            // reset count of confirmations needed.
            pending.yetNeeded = m_required;
            // reset which owners have confirmed (none) - set our bitmap to 0.
            pending.ownersDone = 0;
            pending.index = m_pendingIndex.length++;
            m_pendingIndex[pending.index] = _operation;
        }
        // determine the bit to set for this owner.
        uint ownerIndexBit = 2**ownerIndex;
        // make sure we (the message sender) haven't confirmed this operation previously.
        if (pending.ownersDone & ownerIndexBit == 0) {
            Confirmation(msg.sender, _operation);
            // ok - check if count is enough to go ahead.
            if (pending.yetNeeded <= 1) {
                // enough confirmations: reset and run interior.
                delete m_pendingIndex[m_pending[_operation].index];
                delete m_pending[_operation];
                return true;
            }
            else
            {
                // not enough: record that this owner in particular confirmed.
                pending.yetNeeded--;
                pending.ownersDone |= ownerIndexBit;
            }
        }
    }

    function reorganizeOwners() private returns (bool) {
        uint free = 1;
        while (free < m_numOwners)
        {
            while (free < m_numOwners && m_owners[free] != 0) free++;
            while (m_numOwners > 1 && m_owners[m_numOwners] == 0) m_numOwners--;
            if (free < m_numOwners && m_owners[m_numOwners] != 0 && m_owners[free] == 0)
            {
                m_owners[free] = m_owners[m_numOwners];
                m_ownerIndex[m_owners[free]] = free;
                m_owners[m_numOwners] = 0;
            }
        }
    }
    
    function clearPending() internal {
        uint length = m_pendingIndex.length;
        for (uint i = 0; i < length; ++i)
            if (m_pendingIndex[i] != 0)
                delete m_pending[m_pendingIndex[i]];
        delete m_pendingIndex;
    }
        
    // FIELDS

    // the number of owners that must confirm the same operation before it is run.
    uint public m_required;
    // pointer used to find a free slot in m_owners
    uint public m_numOwners;
    
    // list of owners
    uint[256] m_owners;
    uint constant c_maxOwners = 250;
    // index on the list of owners to allow reverse lookup
    mapping(uint => uint) m_ownerIndex;
    // the ongoing operations.
    mapping(bytes32 => PendingState) m_pending;
    bytes32[] m_pendingIndex;
}

// inheritable "property" contract that enables methods to be protected by placing a linear limit (specifiable)
// on a particular resource per calendar day. is multiowned to allow the limit to be altered. resource that method
// uses is specified in the modifier.
contract daylimit is multiowned {

    // MODIFIERS

    // simple modifier for daily limit.
    modifier limitedDaily(uint _value) {
        if (underLimit(_value))
            _
    }

    // METHODS

    // constructor - stores initial daily limit and records the present day's index.
    function daylimit(uint _limit) {
        m_dailyLimit = _limit;
        m_lastDay = today();
    }
    // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today.
    function setDailyLimit(uint _newLimit) onlymanyowners(sha3(msg.data, block.number)) external {
        m_dailyLimit = _newLimit;
    }
    // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today.
    function resetSpentToday() onlymanyowners(sha3(msg.data, block.number)) external {
        m_spentToday = 0;
    }
    
    // INTERNAL METHODS
    
    // checks to see if there is at least `_value` left from the daily limit today. if there is, subtracts it and
    // returns true. otherwise just returns false.
    function underLimit(uint _value) internal onlyowner returns (bool) {
        // reset the spend limit if we're on a different day to last time.
        if (today() > m_lastDay) {
            m_spentToday = 0;
            m_lastDay = today();
        }
        // check to see if there's enough left - if so, subtract and return true.
        if (m_spentToday + _value >= m_spentToday && m_spentToday + _value <= m_dailyLimit) {
            m_spentToday += _value;
            return true;
        }
        return false;
    }
    // determines today's index.
    function today() private constant returns (uint) { return now / 1 days; }

    // FIELDS

    uint public m_dailyLimit;
    uint public m_spentToday;
    uint public m_lastDay;
}

// interface contract for multisig proxy contracts; see below for docs.
contract multisig {

    // EVENTS

    // logged events:
    // Funds has arrived into the wallet (record how much).
    event Deposit(address from, uint value);
    // Single transaction going out of the wallet (record who signed for it, how much, and to whom it's going).
    event SingleTransact(address owner, uint value, address to, bytes data);
    // Multi-sig transaction going out of the wallet (record who signed for it last, the operation hash, how much, and to whom it's going).
    event MultiTransact(address owner, bytes32 operation, uint value, address to, bytes data);
    // Confirmation still needed for a transaction.
    event ConfirmationNeeded(bytes32 operation, address initiator, uint value, address to, bytes data);
    
    // FUNCTIONS
    
    // TODO: document
    function changeOwner(address _from, address _to) external;
    function execute(address _to, uint _value, bytes _data) external returns (bytes32);
    function confirm(bytes32 _h) returns (bool);
}

// usage:
// bytes32 h = Wallet(w).from(oneOwner).transact(to, value, data);
// Wallet(w).from(anotherOwner).confirm(h);
contract Wallet is multisig, multiowned, daylimit {

    uint public version = 2;

    // TYPES

    // Transaction structure to remember details of transaction lest it need be saved for a later call.
    struct Transaction {
        address to;
        uint value;
        bytes data;
    }

    // METHODS

    // constructor - just pass on the owner array to the multiowned and
    // the limit to daylimit
    function Wallet(address[] _owners, uint _required, uint _daylimit)
            multiowned(_owners, _required) daylimit(_daylimit) {
    }
    
    // kills the contract sending everything to `_to`.
    function kill(address _to) onlymanyowners(sha3(msg.data, block.number)) external {
        suicide(_to);
    }
    
    // gets called when no other function matches
    function() {
        // just being sent some cash?
        if (msg.value > 0)
            Deposit(msg.sender, msg.value);
    }
    
    // Outside-visible transact entry point. Executes transacion immediately if below daily spend limit.
    // If not, goes into multisig process. We provide a hash on return to allow the sender to provide
    // shortcuts for the other confirmations (allowing them to avoid replicating the _to, _value
    // and _data arguments). They still get the option of using them if they want, anyways.
    function execute(address _to, uint _value, bytes _data) external onlyowner returns (bytes32 _r) {
        // first, take the opportunity to check that we're under the daily limit.
        if (underLimit(_value)) {
            SingleTransact(msg.sender, _value, _to, _data);
            // yes - just execute the call.
            _to.call.value(_value)(_data);
            return 0;
        }
        // determine our operation hash.
        _r = sha3(msg.data, block.number);
        if (!confirm(_r) && m_txs[_r].to == 0) {
            m_txs[_r].to = _to;
            m_txs[_r].value = _value;
            m_txs[_r].data = _data;
            ConfirmationNeeded(_r, msg.sender, _value, _to, _data);
        }
    }
    
    // confirm a transaction through just the hash. we use the previous transactions map, m_txs, in order
    // to determine the body of the transaction from the hash provided.
    function confirm(bytes32 _h) onlymanyowners(_h) returns (bool) {
        if (m_txs[_h].to != 0) {
            m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data);
            MultiTransact(msg.sender, _h, m_txs[_h].value, m_txs[_h].to, m_txs[_h].data);
            delete m_txs[_h];
            return true;
        }
    }
    
    // INTERNAL METHODS
    
    function clearPending() internal {
        uint length = m_pendingIndex.length;
        for (uint i = 0; i < length; ++i)
            delete m_txs[m_pendingIndex[i]];
        super.clearPending();
    }

    // FIELDS

    // pending transactions we have at present.
    mapping (bytes32 => Transaction) m_txs;
}

  Contract ABI  
[{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"removeOwner","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"m_numOwners","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"m_lastDay","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"resetSpentToday","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"m_spentToday","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"addOwner","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"m_required","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_h","type":"bytes32"}],"name":"confirm","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"_newLimit","type":"uint256"}],"name":"setDailyLimit","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"execute","outputs":[{"name":"_r","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"_operation","type":"bytes32"}],"name":"revoke","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_newRequired","type":"uint256"}],"name":"changeRequirement","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"_operation","type":"bytes32"},{"name":"_owner","type":"address"}],"name":"hasConfirmed","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"kill","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"changeOwner","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"m_dailyLimit","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"_owners","type":"address[]"},{"name":"_required","type":"uint256"},{"name":"_daylimit","type":"uint256"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Confirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Revoke","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"}],"name":"OwnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newRequirement","type":"uint256"}],"name":"RequirementChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"SingleTransact","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"MultiTransact","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"operation","type":"bytes32"},{"indexed":false,"name":"initiator","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"ConfirmationNeeded","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052600261010860005055604051611b51380380611b51833981016040528080518201919060200180519060200190919080519060200190919050505b805b83835b600060018351016001600050819055503373ffffffffffffffffffffffffffffffffffffffff16600260005060016101008110156100025790900160005b5081905550600161010260005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005081905550600090505b825181101561016e5782818151811015610002579060200190602002015173ffffffffffffffffffffffffffffffffffffffff166002600050826002016101008110156100025790900160005b508190555080600201610102600050600085848151811015610002579060200190602002015173ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055505b80600101905080506100c2565b816000600050819055505b505050806101056000508190555061018f6101ad565b610107600050819055505b505b505050611992806101bf6000396000f35b600062015180420490506101bc565b9056606060405236156100f8576000357c010000000000000000000000000000000000000000000000000000000090048063173825d9146101605780632f54bf6e146101785780634123cb6b146101a457806352375093146101c757806354fd4d50146101ea5780635c52c2f51461020d578063659010e71461021c5780637065cb481461023f578063746c917114610257578063797af6271461027a578063b20d30a9146102a6578063b61d27f6146102be578063b75c7dc614610307578063ba51a6df1461031f578063c2cf732614610337578063cbf0b0c01461036c578063f00d4b5d14610384578063f1736d86146103a5576100f8565b61015e5b600034111561015b577fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3334604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b5b565b005b61017660048080359060200190919050506107c4565b005b61018e60048080359060200190919050506109a5565b6040518082815260200191505060405180910390f35b6101b16004805050610a91565b6040518082815260200191505060405180910390f35b6101d46004805050610b38565b6040518082815260200191505060405180910390f35b6101f76004805050610b42565b6040518082815260200191505060405180910390f35b61021a6004805050610adf565b005b6102296004805050610b2e565b6040518082815260200191505060405180910390f35b610255600480803590602001909190505061066e565b005b6102646004805050610a88565b6040518082815260200191505060405180910390f35b6102906004808035906020019091905050610f0e565b6040518082815260200191505060405180910390f35b6102bc6004808035906020019091905050610a9a565b005b6102f160048080359060200190919080359060200190919080359060200190820180359060200191909192905050610b9e565b6040518082815260200191505060405180910390f35b61031d60048080359060200190919050506103c8565b005b610335600480803590602001909190505061090f565b005b61035660048080359060200190919080359060200190919050506109e7565b6040518082815260200191505060405180910390f35b6103826004808035906020019091905050610b4c565b005b6103a360048080359060200190919080359060200190919050506104ca565b005b6103b26004805050610b24565b6040518082815260200191505060405180910390f35b60006000600061010260005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549250600083141561040f576104c4565b8260020a91506101036000506000858152602001908152602001600020600050905060008282600101600050541611156104c3578060000160008181505480929190600101919050555081816001016000828282505403925050819055507fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b3385604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b5b50505050565b600060003643604051808484808284378201915050828152602001935050505060405180910390206104fb816112db565b1561066757610509836109a5565b156105145750610669565b61010260005060008573ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005054915060008214156105565750610669565b61055e611777565b8273ffffffffffffffffffffffffffffffffffffffff166002600050836101008110156100025790900160005b5081905550600061010260005060008673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055508161010260005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055507fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c8484604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15b505b505050565b600036436040518084848082843782019150508281526020019350505050604051809103902061069d816112db565b156107bf576106ab826109a5565b156106b657506107c1565b6106be611777565b60fa6001600050541015156106d7576106d561153d565b505b60fa6001600050541015156106ec57506107c1565b60016000818150548092919060010191905055508173ffffffffffffffffffffffffffffffffffffffff1660026000506001600050546101008110156100025790900160005b508190555060016000505461010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c382604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b505b50565b600060003643604051808484808284378201915050828152602001935050505060405180910390206107f5816112db565b156109095761010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549150600082141561083c575061090b565b6001600160005054036000600050541115610857575061090b565b60006002600050836101008110156100025790900160005b5081905550600061010260005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055506108b2611777565b6108ba61153d565b507f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da83604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b505b5050565b600036436040518084848082843782019150508281526020019350505050604051809103902061093e816112db565b156109a05760016000505482111561095657506109a2565b81600060005081905550610968611777565b7facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da826040518082815260200191505060405180910390a15b505b50565b6000600061010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050541190506109e2565b919050565b60006000600060006101036000506000878152602001908152602001600020600050925061010260005060008673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000505491506000821415610a505760009350610a7f565b8160020a90506000818460010160005054161415610a755760009350610a7f56610a7e565b60019350610a7f565b5b50505092915050565b60006000505481565b60016000505481565b6000364360405180848480828437820191505082815260200193505050506040518091039020610ac9816112db565b15610ada5781610105600050819055505b505b50565b6000364360405180848480828437820191505082815260200193505050506040518091039020610b0e816112db565b15610b20576000610106600050819055505b505b565b6101056000505481565b6101066000505481565b6101076000505481565b6101086000505481565b6000364360405180848480828437820191505082815260200193505050506040518091039020610b7b816112db565b15610b99578173ffffffffffffffffffffffffffffffffffffffff16ff5b505b50565b6000610ba9336109a5565b15610f0557610bb7846116d7565b15610ca0577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd0043385878686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a18473ffffffffffffffffffffffffffffffffffffffff168484846040518083838082843782019150509250505060006040518083038185876185025a03f1925050505060006001029050610f06565b600036436040518084848082843782019150508281526020019350505050604051809103902090508050610cd381610f0e565b158015610d3357506000610109600050600083815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15610f045784610109600050600083815260200190815260200160002060005060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555083610109600050600083815260200190815260200160002060005060010160005081905550828261010960005060008481526020019081526020016000206000506002016000509190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610e0857803560ff1916838001178555610e39565b82800160010185558215610e39579182015b82811115610e38578235826000505591602001919060010190610e1a565b5b509050610e649190610e46565b80821115610e605760008181506000905550600101610e46565b5090565b50507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32813386888787604051808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b5b5b949350505050565b600081610f1a816112db565b156112d4576000610109600050600085815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156112d357610109600050600084815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610109600050600085815260200190815260200160002060005060010160005054610109600050600086815260200190815260200160002060005060020160005060405180828054600181600116156101000203166002900480156110765780601f1061104b57610100808354040283529160200191611076565b820191906000526020600020905b81548152906001019060200180831161105957829003601f168201915b505091505060006040518083038185876185025a03f192505050507fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a3384610109600050600087815260200190815260200160002060005060010160005054610109600050600088815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101096000506000898152602001908152602001600020600050600201600050604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156112005780601f106111d557610100808354040283529160200191611200565b820191906000526020600020905b8154815290600101906020018083116111e357829003601f168201915b5050965050505050505060405180910390a1610109600050600084815260200190815260200160002060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000506000905560028201600050805460018160011615610100020316600290046000825580601f1061128957506112c6565b601f0160209004906000526020600020908101906112c591906112a7565b808211156112c157600081815060009055506001016112a7565b5090565b5b50505060019150506112d6565b5b505b919050565b600060006000600061010260005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549250600083141561132457611535565b610103600050600086815260200190815260200160002060005091506000826000016000505414156113fd57600060005054826000016000508190555060008260010160005081905550610104600050805480919060010190908154818355818115116113c3578183600052602060002091820191016113c291906113a4565b808211156113be57600081815060009055506001016113a4565b5090565b5b5050508260020160005081905550846101046000508360020160005054815481101561000257906000526020600020900160005b50819055505b8260020a90506000818360010160005054161415611534577fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda3386604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001826000016000505411151561150757610104600050610103600050600087815260200190815260200160002060005060020160005054815481101561000257906000526020600020900160005b50600090556101036000506000868152602001908152602001600020600060008201600050600090556001820160005060009055600282016000506000905550506001935061153556611533565b816000016000818150548092919060019003919050555080826001016000828282505417925050819055505b5b5b505050919050565b60006000600190505b6001600050548110156116d2575b60016000505481108015611580575060006002600050826101008110156100025790900160005b505414155b15611592578080600101915050611554565b5b60016001600050541180156115c45750600060026000506001600050546101008110156100025790900160005b5054145b156115e357600160008181505480929190600190039190505550611593565b600160005054811080156116145750600060026000506001600050546101008110156100025790900160005b505414155b8015611637575060006002600050826101008110156100025790900160005b5054145b156116cd5760026000506001600050546101008110156100025790900160005b50546002600050826101008110156100025790900160005b50819055508061010260005060006002600050846101008110156100025790900160005b5054815260200190815260200160002060005081905550600060026000506001600050546101008110156100025790900160005b50819055505b611546565b5b5090565b60006116e2336109a5565b1561177157610107600050546116f6611980565b111561171b57600061010660005081905550611710611980565b610107600050819055505b610106600050548261010660005054011015801561174757506101056000505482610106600050540111155b15611768578161010660008282825054019250508190555060019050611772565b60009050611772565b5b919050565b60006000610104600050805490509150600090505b8181101561187857610109600050600061010460005083815481101561000257906000526020600020900160005b5054815260200190815260200160002060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000506000905560028201600050805460018160011615610100020316600290046000825580601f1061182a5750611867565b601f0160209004906000526020600020908101906118669190611848565b808211156118625760008181506000905550600101611848565b5090565b5b5050505b806001019050805061178c565b611880611885565b5b5050565b60006000610104600050805490509150600090505b8181101561193857600060010261010460005082815481101561000257906000526020600020900160005b505414151561192a57610103600050600061010460005083815481101561000257906000526020600020900160005b50548152602001908152602001600020600060008201600050600090556001820160005060009055600282016000506000905550505b5b806001019050805061189a565b61010460005080546000825590600052602060002090810190611979919061195b565b80821115611975576000818150600090555060010161195b565b5090565b5b505b5050565b6000620151804204905061198f565b9056
View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward