Contract 0x23b6E397eB3A4eb73b2E2060E704Dee8DB1A784D

 

TxHash Block Age From To Value [TxFee]
0x125815be1685a13fd2e44d95aea16a504a99dbcd8f312cfc6ffe04d938053dcc6206301177 days 11 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.00131144
0x8798ad0f7e1391732bc1d83e476a0e0b46d208a000de15ec771b5e0612f2bc036206267177 days 11 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.00227580426
0xef727a03b21dcb90e862db190223673195c33a58ce0d949ce53bece184c329ce6206254177 days 12 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.00203
0xc0a65128be54547927ab48e7947dc8c73201ba0263a7841bd7d5b45552afa4576156958185 days 20 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.00164480831
0x9a397dd2563e478c8c2221a0cf2e4a779a43dfd544dc4290a42f6583fa923baa6156958185 days 20 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.0001634528
0xb5f6f5cb9bf2f6655aec117aaabc102fb26fc1634dc64df0a1dc3a7707bef4446139094188 days 20 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.000276133074
0x126b2430d926e1af6538bfe152f093e95ed1ae08ee29bde0b5e6f84c80f6a95c6065265201 days 8 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.0001074969
0xc84c89763c68fdc3404954277227c80c36a348dc0409a1ca152ed55ae99ea0b56038220205 days 20 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0.0001 Ether0.000919343
0x861be560b0a11bb4091ba8f237e1bed7c4d150ea1304a9b25c4ddf67394a0a325947316221 days 6 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.001651276
0x9f0aa7aad0c5e793323551fae884d1e3afd43b45bff5d57e15acae6216ea3af55926015224 days 22 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.00235101
0x29f1984ea68c88384a16246d6e3e514bcf495e402294dd460684d34f3249e24f5923215225 days 10 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.00790326
0xd4018f6f823ee74ae86c3088c38cc3c93802672a81326453292967e59c2fd5954941250393 days 13 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.002575734
0x356adc7b4d16aa3f882a8cc0bf783405c791637219b2834948f2ce4064ff631f4925975396 days 6 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.002835108
0xb3b96006ba0d7d6007b0a3e4175c9a10e46f33f1611fc475a03868f37ed4c3174920390397 days 6 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.003571984
0x774b8ffc8c2d417773eeb94eb4223037e5094c3f460d165bdf6ac830d64641184919771397 days 9 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.002568332
0x348b029bf27f06d3605e5f0898e57ce290a0a00ece15605a0eeec0fa360f010c4502961468 days 10 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.00037644
0xc840db0ddad9ceb720f03ddef5dcd2ebe85f9a7e24a715abe52274aa922f9bf54497471469 days 7 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.000335922
0xc13e9bce1197981f9f8f9250720480e5ff98e150a569b4e399df7afa5ba27fc74494522469 days 18 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.00012328
0x51ab07194dd81af72e7456435bd5c7e07d03d180c61a9ea2b3976bc018032ded4314637509 days 5 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.000136264
0xff1fd5745dbc29c20b568d91325a98b34a19593032d55debf0671c21649886fc4310332510 days 17 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.000051271
0x33ea3d05e5c4ecf3bd57cf18d8f01042614bfb483501fafe13f0aff72b48290f4202353541 days 16 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.000051271
0x60798c908dc60aca9ae482a441ab7a73f1ad047229010e2ab132425736f58c264198209542 days 18 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.000066115
0xe9a755ef6dfc8f405ba324f690a17dffbad0bc3760c571ea65d6be15df79bacf4198146542 days 18 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.000076207
0x2217deac1db623482a09cd8d646d4b5c39aba48cd17f4f0733e96222f312e11a4194736543 days 14 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.000066115
0xb22d33accbc85a1abae5c12408a8e160a40fbe414df98a946f03c7aacbe15a474194665543 days 14 hrs ago0x8d7a5b5f6570fd4c2b37117b354360a565f0e929  IN   0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0 Ether0.000066115
[ Download CSV Export 

Latest 25 Internal Transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x125815be1685a13fd2e44d95aea16a504a99dbcd8f312cfc6ffe04d938053dcc6206301177 days 11 hrs ago0x307092dd40b836500e4b8e314694c9544dd0394f0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0.0005 Ether
0xc0a65128be54547927ab48e7947dc8c73201ba0263a7841bd7d5b45552afa4576156958185 days 20 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x137a283c517927ffcf0270ac5ba378a42b89ee950.02 Ether
0x9a397dd2563e478c8c2221a0cf2e4a779a43dfd544dc4290a42f6583fa923baa6156958185 days 20 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x137a283c517927ffcf0270ac5ba378a42b89ee950.02 Ether
0xb5f6f5cb9bf2f6655aec117aaabc102fb26fc1634dc64df0a1dc3a7707bef4446139094188 days 20 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x137a283c517927ffcf0270ac5ba378a42b89ee950.02 Ether
0x126b2430d926e1af6538bfe152f093e95ed1ae08ee29bde0b5e6f84c80f6a95c6065265201 days 8 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0xf3f63ce2eddcae0cb67937c64ab88113fb8fcfe30.001 Ether
0x861be560b0a11bb4091ba8f237e1bed7c4d150ea1304a9b25c4ddf67394a0a325947316221 days 6 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x4b3ddba0426e607fafc0625e53009d33c8e889bf0.000001 Ether
0x9f0aa7aad0c5e793323551fae884d1e3afd43b45bff5d57e15acae6216ea3af55926015224 days 22 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x13e5217eb1ab02bfe739e002cb314b5af72fe35d0.001 Ether
0xd4018f6f823ee74ae86c3088c38cc3c93802672a81326453292967e59c2fd5954941250393 days 13 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x5739e8f832ad70f0068ebb683b02a6ff17b89b280.5 Ether
0x356adc7b4d16aa3f882a8cc0bf783405c791637219b2834948f2ce4064ff631f4925975396 days 6 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x41235dd2928a852aba5563016df7890e880611a90.02 Ether
0xb3b96006ba0d7d6007b0a3e4175c9a10e46f33f1611fc475a03868f37ed4c3174920390397 days 6 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0xd60e7595724c49266e72b8ae7d162ce9c87cfa500.01 Ether
0x348b029bf27f06d3605e5f0898e57ce290a0a00ece15605a0eeec0fa360f010c4502961468 days 10 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x538a06c81f95cea33becad16b8d3fefe08eb4c450.025 Ether
0xc840db0ddad9ceb720f03ddef5dcd2ebe85f9a7e24a715abe52274aa922f9bf54497471469 days 7 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x137a283c517927ffcf0270ac5ba378a42b89ee950.01 Ether
0x51ab07194dd81af72e7456435bd5c7e07d03d180c61a9ea2b3976bc018032ded4314637509 days 5 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0xc3f145347f160e845dbb2d32fbca2371f410d5420.000000040998729039 Ether
0xff1fd5745dbc29c20b568d91325a98b34a19593032d55debf0671c21649886fc4310332510 days 17 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x8d7a5b5f6570fd4c2b37117b354360a565f0e9290.08 Ether
0x33ea3d05e5c4ecf3bd57cf18d8f01042614bfb483501fafe13f0aff72b48290f4202353541 days 16 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x8d7a5b5f6570fd4c2b37117b354360a565f0e9290.2 Ether
0x60798c908dc60aca9ae482a441ab7a73f1ad047229010e2ab132425736f58c264198209542 days 18 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x7c1905c395512b881f76156cd13e7e01755416d80.01 Ether
0xe9a755ef6dfc8f405ba324f690a17dffbad0bc3760c571ea65d6be15df79bacf4198146542 days 18 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x4ea3cbc680490e0947a73c6263cc1ba7b4a43d020.01 Ether
0x2217deac1db623482a09cd8d646d4b5c39aba48cd17f4f0733e96222f312e11a4194736543 days 14 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0xb523ac6e6377b0bb0663ddcaf0d5971ad6deae220.01 Ether
0xb22d33accbc85a1abae5c12408a8e160a40fbe414df98a946f03c7aacbe15a474194665543 days 14 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x0ad05e6bc598f65818689991e17cde4d707fa33d0.01 Ether
0xb0b8673073f575f4c74688cd62ba8d6967b563b800ac53d686e91e67b2967f0e4194555543 days 15 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0xe51194494b04357d68c52210e1c2c431c71cadfe0.01 Ether
0x93194b0e1308209f0990e86d31fb112f0e3144c8b8fc116b6d870d10c44d5f684194548543 days 15 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0xca4b106549be6077fce3229c39e9da9ad843a87d0.01 Ether
0x2a95a99590035c985bb09be7f4f30818c3ab67662523b1c2f090aae739d339454194548543 days 15 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x2483faa596fb6a807bb9e93dfb997822820070230.01 Ether
0xf246177d0eca40cd357cf39a835a06d1d0bcedca08821a2b2b1f9e399c143ce74194527543 days 15 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0xba477849adc6d9bd834a8b63a4e188b804155e440.01 Ether
0x78ab03611bc7f8e97275a8b1c52716c6d8c1729683ac20547c4a12185d1479b94190536544 days 13 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x352097fefb51827b23cf6ac3959e34fce56ddb9f0.01 Ether
0xb742fb59dc0f036f1c9c75912f2cc526b5af8abd358e97c174285fa9096b40ae4190371544 days 14 hrs ago0x23b6e397eb3a4eb73b2e2060e704dee8db1a784d0x741d160ee1c1648b6484e92cf005ad3aefaabfb90.01 Ether
[ Download CSV Export 
Contract Name: Wallet
Compiler Version: v0.3.2-2016-04-18-81ae2a7
Optimization Enabled: No
Runs (Optimizer):  200


Contract Source Code
//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
6060604052600261010860005055604051611b51380380611b51833981016040528080518201919060200180519060200190919080519060200190919050505b805b83835b600060018351016001600050819055503373ffffffffffffffffffffffffffffffffffffffff16600260005060016101008110156100025790900160005b5081905550600161010260005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005081905550600090505b825181101561016e5782818151811015610002579060200190602002015173ffffffffffffffffffffffffffffffffffffffff166002600050826002016101008110156100025790900160005b508190555080600201610102600050600085848151811015610002579060200190602002015173ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055505b80600101905080506100c2565b816000600050819055505b505050806101056000508190555061018f6101ad565b610107600050819055505b505b505050611992806101bf6000396000f35b600062015180420490506101bc565b9056606060405236156100f8576000357c010000000000000000000000000000000000000000000000000000000090048063173825d9146101605780632f54bf6e146101785780634123cb6b146101a457806352375093146101c757806354fd4d50146101ea5780635c52c2f51461020d578063659010e71461021c5780637065cb481461023f578063746c917114610257578063797af6271461027a578063b20d30a9146102a6578063b61d27f6146102be578063b75c7dc614610307578063ba51a6df1461031f578063c2cf732614610337578063cbf0b0c01461036c578063f00d4b5d14610384578063f1736d86146103a5576100f8565b61015e5b600034111561015b577fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3334604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b5b565b005b61017660048080359060200190919050506107c4565b005b61018e60048080359060200190919050506109a5565b6040518082815260200191505060405180910390f35b6101b16004805050610a91565b6040518082815260200191505060405180910390f35b6101d46004805050610b38565b6040518082815260200191505060405180910390f35b6101f76004805050610b42565b6040518082815260200191505060405180910390f35b61021a6004805050610adf565b005b6102296004805050610b2e565b6040518082815260200191505060405180910390f35b610255600480803590602001909190505061066e565b005b6102646004805050610a88565b6040518082815260200191505060405180910390f35b6102906004808035906020019091905050610f0e565b6040518082815260200191505060405180910390f35b6102bc6004808035906020019091905050610a9a565b005b6102f160048080359060200190919080359060200190919080359060200190820180359060200191909192905050610b9e565b6040518082815260200191505060405180910390f35b61031d60048080359060200190919050506103c8565b005b610335600480803590602001909190505061090f565b005b61035660048080359060200190919080359060200190919050506109e7565b6040518082815260200191505060405180910390f35b6103826004808035906020019091905050610b4c565b005b6103a360048080359060200190919080359060200190919050506104ca565b005b6103b26004805050610b24565b6040518082815260200191505060405180910390f35b60006000600061010260005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549250600083141561040f576104c4565b8260020a91506101036000506000858152602001908152602001600020600050905060008282600101600050541611156104c3578060000160008181505480929190600101919050555081816001016000828282505403925050819055507fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b3385604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b5b50505050565b600060003643604051808484808284378201915050828152602001935050505060405180910390206104fb816112db565b1561066757610509836109a5565b156105145750610669565b61010260005060008573ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005054915060008214156105565750610669565b61055e611777565b8273ffffffffffffffffffffffffffffffffffffffff166002600050836101008110156100025790900160005b5081905550600061010260005060008673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055508161010260005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055507fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c8484604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15b505b505050565b600036436040518084848082843782019150508281526020019350505050604051809103902061069d816112db565b156107bf576106ab826109a5565b156106b657506107c1565b6106be611777565b60fa6001600050541015156106d7576106d561153d565b505b60fa6001600050541015156106ec57506107c1565b60016000818150548092919060010191905055508173ffffffffffffffffffffffffffffffffffffffff1660026000506001600050546101008110156100025790900160005b508190555060016000505461010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c382604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b505b50565b600060003643604051808484808284378201915050828152602001935050505060405180910390206107f5816112db565b156109095761010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549150600082141561083c575061090b565b6001600160005054036000600050541115610857575061090b565b60006002600050836101008110156100025790900160005b5081905550600061010260005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055506108b2611777565b6108ba61153d565b507f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da83604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b505b5050565b600036436040518084848082843782019150508281526020019350505050604051809103902061093e816112db565b156109a05760016000505482111561095657506109a2565b81600060005081905550610968611777565b7facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da826040518082815260200191505060405180910390a15b505b50565b6000600061010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050541190506109e2565b919050565b60006000600060006101036000506000878152602001908152602001600020600050925061010260005060008673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000505491506000821415610a505760009350610a7f565b8160020a90506000818460010160005054161415610a755760009350610a7f56610a7e565b60019350610a7f565b5b50505092915050565b60006000505481565b60016000505481565b6000364360405180848480828437820191505082815260200193505050506040518091039020610ac9816112db565b15610ada5781610105600050819055505b505b50565b6000364360405180848480828437820191505082815260200193505050506040518091039020610b0e816112db565b15610b20576000610106600050819055505b505b565b6101056000505481565b6101066000505481565b6101076000505481565b6101086000505481565b6000364360405180848480828437820191505082815260200193505050506040518091039020610b7b816112db565b15610b99578173ffffffffffffffffffffffffffffffffffffffff16ff5b505b50565b6000610ba9336109a5565b15610f0557610bb7846116d7565b15610ca0577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd0043385878686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a18473ffffffffffffffffffffffffffffffffffffffff168484846040518083838082843782019150509250505060006040518083038185876185025a03f1925050505060006001029050610f06565b600036436040518084848082843782019150508281526020019350505050604051809103902090508050610cd381610f0e565b158015610d3357506000610109600050600083815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15610f045784610109600050600083815260200190815260200160002060005060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555083610109600050600083815260200190815260200160002060005060010160005081905550828261010960005060008481526020019081526020016000206000506002016000509190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610e0857803560ff1916838001178555610e39565b82800160010185558215610e39579182015b82811115610e38578235826000505591602001919060010190610e1a565b5b509050610e649190610e46565b80821115610e605760008181506000905550600101610e46565b5090565b50507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32813386888787604051808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b5b5b949350505050565b600081610f1a816112db565b156112d4576000610109600050600085815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156112d357610109600050600084815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610109600050600085815260200190815260200160002060005060010160005054610109600050600086815260200190815260200160002060005060020160005060405180828054600181600116156101000203166002900480156110765780601f1061104b57610100808354040283529160200191611076565b820191906000526020600020905b81548152906001019060200180831161105957829003601f168201915b505091505060006040518083038185876185025a03f192505050507fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a3384610109600050600087815260200190815260200160002060005060010160005054610109600050600088815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101096000506000898152602001908152602001600020600050600201600050604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156112005780601f106111d557610100808354040283529160200191611200565b820191906000526020600020905b8154815290600101906020018083116111e357829003601f168201915b5050965050505050505060405180910390a1610109600050600084815260200190815260200160002060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000506000905560028201600050805460018160011615610100020316600290046000825580601f1061128957506112c6565b601f0160209004906000526020600020908101906112c591906112a7565b808211156112c157600081815060009055506001016112a7565b5090565b5b50505060019150506112d6565b5b505b919050565b600060006000600061010260005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549250600083141561132457611535565b610103600050600086815260200190815260200160002060005091506000826000016000505414156113fd57600060005054826000016000508190555060008260010160005081905550610104600050805480919060010190908154818355818115116113c3578183600052602060002091820191016113c291906113a4565b808211156113be57600081815060009055506001016113a4565b5090565b5b5050508260020160005081905550846101046000508360020160005054815481101561000257906000526020600020900160005b50819055505b8260020a90506000818360010160005054161415611534577fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda3386604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001826000016000505411151561150757610104600050610103600050600087815260200190815260200160002060005060020160005054815481101561000257906000526020600020900160005b50600090556101036000506000868152602001908152602001600020600060008201600050600090556001820160005060009055600282016000506000905550506001935061153556611533565b816000016000818150548092919060019003919050555080826001016000828282505417925050819055505b5b5b505050919050565b60006000600190505b6001600050548110156116d2575b60016000505481108015611580575060006002600050826101008110156100025790900160005b505414155b15611592578080600101915050611554565b5b60016001600050541180156115c45750600060026000506001600050546101008110156100025790900160005b5054145b156115e357600160008181505480929190600190039190505550611593565b600160005054811080156116145750600060026000506001600050546101008110156100025790900160005b505414155b8015611637575060006002600050826101008110156100025790900160005b5054145b156116cd5760026000506001600050546101008110156100025790900160005b50546002600050826101008110156100025790900160005b50819055508061010260005060006002600050846101008110156100025790900160005b5054815260200190815260200160002060005081905550600060026000506001600050546101008110156100025790900160005b50819055505b611546565b5b5090565b60006116e2336109a5565b1561177157610107600050546116f6611980565b111561171b57600061010660005081905550611710611980565b610107600050819055505b610106600050548261010660005054011015801561174757506101056000505482610106600050540111155b15611768578161010660008282825054019250508190555060019050611772565b60009050611772565b5b919050565b60006000610104600050805490509150600090505b8181101561187857610109600050600061010460005083815481101561000257906000526020600020900160005b5054815260200190815260200160002060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000506000905560028201600050805460018160011615610100020316600290046000825580601f1061182a5750611867565b601f0160209004906000526020600020908101906118669190611848565b808211156118625760008181506000905550600101611848565b5090565b5b5050505b806001019050805061178c565b611880611885565b5b5050565b60006000610104600050805490509150600090505b8181101561193857600060010261010460005082815481101561000257906000526020600020900160005b505414151561192a57610103600050600061010460005083815481101561000257906000526020600020900160005b50548152602001908152602001600020600060008201600050600090556001820160005060009055600282016000506000905550505b5b806001019050805061189a565b61010460005080546000825590600052602060002090810190611979919061195b565b80821115611975576000818150600090555060010161195b565b5090565b5b505b5050565b6000620151804204905061198f565b9056

Block Age transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.