Sponsored Link:   WELL – WORKING HEALTHCARE U.S. PLATFORM - RAISED $3M IN PRE-ICO – JOIN NOW WITH 40% BONUS
  Latest 25 txns from a total Of 208 transactions View All

TxHash Age From To Value [TxFee]
0x9e9d63805665061425997ef8e3bfbaa63e931783e53ce3fbfb645d58e42c74bc6 days 8 hrs ago0xeec32fe22e28cd8bf0d1fc55095db0be37be2374  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.00182542
0x69454a390ff86dc1a716d89b3a3ca2188995fe2898d0204d4522f9794cc6b58311 days 7 hrs ago0xeec32fe22e28cd8bf0d1fc55095db0be37be2374  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.00075488
0x8f806095df7890f6f5157e2d0a4a869ae3543d613a58c7dc68be3517834b471f12 days 3 hrs ago0x55d3412c741bd6a3871c48a2f1987bbb5c4807d4  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.0046258
0x5262e6cdc8f32777a2fe29a201f25d05c995f856b0dd7e206bd7ee33666e0e3736 days 15 hrs ago0xeec32fe22e28cd8bf0d1fc55095db0be37be2374  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.00192168
0x78c4a571fa53708715360420b26cd22b7056deba5d120e65d33d91c63f9fbf2a37 days 11 hrs ago0xeec32fe22e28cd8bf0d1fc55095db0be37be2374  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.014062432
0x0eff52b1c5997d4676e3db12f1887702dc76f2315ce1020c856c0aea1751078538 days 12 hrs ago0xa3ad1e4cbd54d4be96b2e1fe0d3fb373b5accbfb  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.0092484
0xd50b93eaa5bcf1eb0034fcfbe36b14f2b97a90ae0038c12d72c859459b2835bf43 days 10 hrs ago0xeec32fe22e28cd8bf0d1fc55095db0be37be2374  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.003318656
0xea6b4c11d33559194a29f8149debe30affce44b802c70fcfd5f7e8f07f05c2b343 days 10 hrs ago0xeec32fe22e28cd8bf0d1fc55095db0be37be2374  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.00332376
0x6cbeb9cf2cb1db7d7f8963b3d92c1a53b5362c164828dbd07ead9d51cbf1d49844 days 9 hrs ago0xa3ad1e4cbd54d4be96b2e1fe0d3fb373b5accbfb  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.03271378
0xa3a138510351d5e6f14b4338fb185ec32c8e4049dbbf61b185177adbb9f5e05c44 days 13 hrs ago0xa3ad1e4cbd54d4be96b2e1fe0d3fb373b5accbfb  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.0185032
0xf866bc7e83f6f09e8881b0aa74fabec71322b665e65593397a68e6eb39feceb755 days 19 hrs ago0xeec32fe22e28cd8bf0d1fc55095db0be37be2374  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.000792624
0xe4c3948ff78688ccd42213dd86b3191ebb663ab4dadf92687d16643f1e9d67e656 days 2 hrs ago0xa3ad1e4cbd54d4be96b2e1fe0d3fb373b5accbfb  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.00367374
0xafae4aea1112483d4d78090cc628abbd53ea4b1872629591087b760ce1f65ff456 days 2 hrs ago0xa3ad1e4cbd54d4be96b2e1fe0d3fb373b5accbfb  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.007771344
0x5121576241f78015b08ad081b1e1173ddb217f40078bbcf3385f0e05d081461557 days 9 hrs ago0xeec32fe22e28cd8bf0d1fc55095db0be37be2374  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.001056832
0x134a089fcae2e1895267644ea3f908860894e5f2d0aa32e53693d60da10383f058 days 12 hrs ago0xa3ad1e4cbd54d4be96b2e1fe0d3fb373b5accbfb  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.01110192
0xc4e95648aac1ba5a09134c51828d528508092ed3aa37a9e17cb07cda6eb09fdf59 days 8 hrs ago0xeec32fe22e28cd8bf0d1fc55095db0be37be2374  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.00150976
0xc08a94bdaba65cfe5f0b22ba949404223975c718a2b7cf4c87e8fc3b5d8470ce59 days 9 hrs ago0xa3ad1e4cbd54d4be96b2e1fe0d3fb373b5accbfb  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.00633472
0xb972e1156c7e0924b62488021136a525fc1fa114b1c9697e09b3247beaa6243059 days 9 hrs ago0xa3ad1e4cbd54d4be96b2e1fe0d3fb373b5accbfb  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.01480256
0x8f1d2d8a5227e74d7476b550ccf40390cf64912b7b3f9e339b39f4d3825ba91c61 days 6 hrs ago0xeec32fe22e28cd8bf0d1fc55095db0be37be2374  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.00150976
0x273125a105bea51875c03e646c28fe9c2feff527b5f15aafad40acd0de3185ec61 days 6 hrs ago0xeec32fe22e28cd8bf0d1fc55095db0be37be2374  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.0015108
0x6d5740f6eb152527b370c2b6f81240444462cfa8dff756f2f19c3865bc042ddb63 days 27 mins ago0xa3ad1e4cbd54d4be96b2e1fe0d3fb373b5accbfb  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.007771344
0x18ee623055017c640827df031ee308b80abc119b0ad41602efbdaca2c0ad350d64 days 10 hrs ago0xa3ad1e4cbd54d4be96b2e1fe0d3fb373b5accbfb  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.007771344
0x6488898dbe9bd15cec7a298a2b37ed99f3714f9a21eccb2ad7fa81f26a35dd2466 days 16 hrs ago0xeec32fe22e28cd8bf0d1fc55095db0be37be2374  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.001815489042
0x0f7b62b7f41a563c37e32d94a5655df996be7ef81523d2a8f54df45b34cb72d666 days 16 hrs ago0xeec32fe22e28cd8bf0d1fc55095db0be37be2374  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.001813949839
0xdebdfb92e2eac298bca867025ed4a9e71210379f4b745ec5102be6e1d933306467 days 1 hr ago0xa3ad1e4cbd54d4be96b2e1fe0d3fb373b5accbfb  IN   0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100 Ether0.0069976
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
  Latest 25 Internal Txns, Click here to View More View All
ParentTxHash Block Age From To Value
0x9e9d63805665061425997ef8e3bfbaa63e931783e53ce3fbfb645d58e42c74bc50834946 days 8 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100xb6e8173f64eeba244ae9c21c9abd2ecae723d7e810 Ether
0x69454a390ff86dc1a716d89b3a3ca2188995fe2898d0204d4522f9794cc6b583505401511 days 7 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100x4f4bf053e072d9d2ea431780bc498623f88e74cb1,000 Ether
0x5262e6cdc8f32777a2fe29a201f25d05c995f856b0dd7e206bd7ee33666e0e37490604736 days 15 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100x7e513f55e7a4b9a40a1d5ca3bb76c5067488c9113,200 Ether
0xd50b93eaa5bcf1eb0034fcfbe36b14f2b97a90ae0038c12d72c859459b2835bf486912343 days 10 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100x7e513f55e7a4b9a40a1d5ca3bb76c5067488c9111,500 Ether
0xea6b4c11d33559194a29f8149debe30affce44b802c70fcfd5f7e8f07f05c2b3486912243 days 10 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100xd8d16424241b0a744de38c67ca234c24c692c4ce2,000 Ether
0xf866bc7e83f6f09e8881b0aa74fabec71322b665e65593397a68e6eb39feceb7479851955 days 19 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100x8832bf79dfa9d20e32e6769f689bffc419cffb33637 Ether
0x5121576241f78015b08ad081b1e1173ddb217f40078bbcf3385f0e05d0814615478872457 days 9 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100xcd8df080695e4f1659774f70fb46d53fe395ba3d1,000 Ether
0xc4e95648aac1ba5a09134c51828d528508092ed3aa37a9e17cb07cda6eb09fdf477739459 days 8 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100x6ac6f40271ea987aaeaeecb0be2f36c8fc2c650a2,000 Ether
0x8f1d2d8a5227e74d7476b550ccf40390cf64912b7b3f9e339b39f4d3825ba91c476666961 days 6 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100xcd8df080695e4f1659774f70fb46d53fe395ba3d1,000 Ether
0x273125a105bea51875c03e646c28fe9c2feff527b5f15aafad40acd0de3185ec476666261 days 6 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100xd8d16424241b0a744de38c67ca234c24c692c4ce1,187 Ether
0x6488898dbe9bd15cec7a298a2b37ed99f3714f9a21eccb2ad7fa81f26a35dd24473564166 days 16 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100xcd8df080695e4f1659774f70fb46d53fe395ba3d1,500 Ether
0x0f7b62b7f41a563c37e32d94a5655df996be7ef81523d2a8f54df45b34cb72d6473549466 days 16 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100xcd8df080695e4f1659774f70fb46d53fe395ba3d1,090 Ether
0x8bb928a4e78dc080ee0da5fbef98304dad834c8f89ac3b3ed8141d90d3709788470385672 days 5 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100xcd8df080695e4f1659774f70fb46d53fe395ba3d1,000 Ether
0xfee8a6fac39d362ddd0b9e17da9ab5753a6164232e3b91e57d86a1be4c0b89c0470385472 days 5 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100xcd8df080695e4f1659774f70fb46d53fe395ba3d5 Ether
0x98c9f763f2a6abe388ef3d0648e54e1f4acbfa8703e17f50debe7bc6bb72b195469772373 days 6 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100xeec32fe22e28cd8bf0d1fc55095db0be37be23740.1 Ether
0xa1d010189f53c0a2f355f62f154c77b89129b7651add207a598609beaaa31ae7468088876 days 5 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100x2c9cf2fe0d35c2e0bbd69e35f0ecdafea48cc8dc1 Ether
0xfa829a92b0835770f820a34eddc4339bfdf92ac3a282ea04443cb037b9a5720b466768478 days 13 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100x74f485f0822b44549af0030bbd91ad83080fe745118.62 Ether
0x7c0d75cfffd1486d204b9408008e31c822bb4615b6625d561cd6b2641cc24923463157284 days 11 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100xe05eeb31abcd9eb8cbc0d01690a8e1f812f0bfa4500 Ether
0xb7cf359e9ce56244a6a24429b3a260f57a29fee8bba245b7769b84d8163a44ce463155384 days 11 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100xd8d16424241b0a744de38c67ca234c24c692c4ce1,500 Ether
0xcaa839aab8706245b861baff16e1c891fc8614a91f923dba43a7dd60a970f3c0456668894 days 22 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100x076a2167662bf436f0d1ecef57d42d9d6f1b2abe270 Ether
0xf952cb845661a2fa1b4f458c49bec0ad3effbfb28664514557a980c264cde103456668894 days 22 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100x69703554d14e730a70c9b378803bd51b9daf9bd4228 Ether
0x07dfb98de8964459a7db354c219c9ce19553f242d0bcd528159446efbf70006e4499405105 days 18 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100x2d95589014a84b97a6a270a3830e976737e8b000210 Ether
0x42577d4325fa086848c62ff7569b89373138b29bf3cf503833f7db94979fc8274495431106 days 9 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100x2d95589014a84b97a6a270a3830e976737e8b0001 Ether
0x28920326fe923daef15eff3efd3206332eb721dab14fdd142dce80d00553a4ed4467027110 days 23 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100x076a2167662bf436f0d1ecef57d42d9d6f1b2abe121 Ether
0xff9b3143eecb030af61af8230d9340715cc7b785d9a99133370b77f8c82656554464001111 days 11 hrs ago0xdf62d2bcbfb92af1987a10fc5641e7c24dc93f100xd2bbb95549e6121f16c103688d5f214799bb8673104 Ether
[ Download CSV Export  ] 
Contract Name: Wallet
Compiler Version: v0.3.2-2016-04-18-81ae2a7
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts
//sol Wallet
// Multi-sig, daily-limited account proxy/wallet.
// @authors:
// Gav Wood <[email protected]>
// 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
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.