Sponsored Link:   Buy your 1st Ethereum in 5 minutes. Trusted by more than 100k buyers.
Contract Overview
ETH Balance: 0 Ether
ETH USD Value: $0
No Of Transactions: 94 txns
Misc
Address Watch Add To Watch List
Contract Creator 0x246c1243e51cab00064ebb199eaf463449f7928fat txn 0xc6f445bab31c2d937abfb2e2d27893de6421523ac386265f3de287a55151ebe9
Token Tracker
  Latest 25 txns from a total Of 94 transactions View All

TxHash Age From To Value [TxFee]
0x4197f1ccfb88960fddccae4314d139cfb0ca2ae51760196c30c8bf9ff33f32bb89 days 18 hrs ago0xc2d9f9c9dd6f76784a8f56f936953b6661a12da8  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00113232
0x698007b5956e7022601cf287bcdea2f956ce1e159679c044d462b376422eb44389 days 18 hrs ago0xce20efb3786237d661082d4b2b9e1438dc6108ee  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00524784
0x261cf2bf03ca69fe0fa489833c0e46449053c050f066b5311e362e220374588689 days 19 hrs ago0xce20efb3786237d661082d4b2b9e1438dc6108ee  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00113232
0xc8348aa488ca730b3fdb07c1e83600df5d31e0601798b20f07aa58e420e0fa0189 days 19 hrs ago0xce20efb3786237d661082d4b2b9e1438dc6108ee  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00113232
0xef71c99a41c8a51ddc1291be9e571de29cb2e8fd3277dc95cf40f4e0eb4f657e89 days 19 hrs ago0xce20efb3786237d661082d4b2b9e1438dc6108ee  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00113232
0xb5b50eede6ce8838766f5f1dbda94e39483c859c023f004a55c83061e8f759d789 days 19 hrs ago0x246c1243e51cab00064ebb199eaf463449f7928f  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00524592
0x68fc76a11b95f262a2718419bc2c0f06d5ffa99cb575bacb7392f2a7e0706d9789 days 19 hrs ago0x246c1243e51cab00064ebb199eaf463449f7928f  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00524208
0x0a603542651cb273b7bf58bee7a20d9876f1d5b27dc26de36c4e8ff587e2afd989 days 19 hrs ago0x246c1243e51cab00064ebb199eaf463449f7928f  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.0046207
0x444a198424e3af3c97dbd5b7f56e638fb66d51a3d95af750e7a0ec4b4bc437c291 days 17 hrs ago0x246c1243e51cab00064ebb199eaf463449f7928f  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.001145624755
0xa0e7cca0a5bdd9b3037dd83fa625273dd163a14188182a6e22d08bcd33f0e4a191 days 17 hrs ago0x246c1243e51cab00064ebb199eaf463449f7928f  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.001185429599
0xb420659affa670df634e644ba5108e1761cd5009bad7a6592fdc0d18685fbb1f91 days 17 hrs ago0x246c1243e51cab00064ebb199eaf463449f7928f  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.001455033292
0x0546be3ee2b71655a9e4c4b56b1946ef2f6dd899470a147512bdf8c988e148e6113 days 19 hrs ago0xce20efb3786237d661082d4b2b9e1438dc6108ee  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00075488
0x26d2463e629ab383beb8a5bf11805908fbcbe396f1941d00864ecdd3c091a77f113 days 19 hrs ago0xce20efb3786237d661082d4b2b9e1438dc6108ee  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00075488
0x298b6b092cbefeaef8cd6d0aab23672da14b5dbe64f447db67470f1969b3633e113 days 19 hrs ago0xce20efb3786237d661082d4b2b9e1438dc6108ee  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00075488
0x471ae54e9da03d935a933a7ded514afede5f16f8bbae0de039c4a911a8450ede113 days 19 hrs ago0x246c1243e51cab00064ebb199eaf463449f7928f  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00349472
0x12d6a3eea7b252d7050e234ebdaf7994b25aa7a12df627cb3a5bb6f37947dce7113 days 19 hrs ago0x246c1243e51cab00064ebb199eaf463449f7928f  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00042882
0x7f1f24c8f5ca9c28922a0d60a4ee81e7dc8ef804bbac4e23b77ae0a9fedf10fc113 days 19 hrs ago0x246c1243e51cab00064ebb199eaf463449f7928f  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00075488
0xd31b250d4d29dc6838d9c2ca1b8fc354047e5ecf534887c5f002216f457a497f113 days 19 hrs ago0x246c1243e51cab00064ebb199eaf463449f7928f  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00349344
0x8178134133215c2b937fcc72a37bbedd6a897eb39a738d87bbb89d924f8e9d39113 days 19 hrs ago0x246c1243e51cab00064ebb199eaf463449f7928f  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00369656
0x5940c2f8ae2d3ecb51c09afa5d741f6338747ac11d8398a28596f6d6a2f65633119 days 13 hrs ago0xce20efb3786237d661082d4b2b9e1438dc6108ee  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.004559746751
0x5afb5be38f55e327859346fded5e025d4f0eab0093370a79b7091b9c8c7de62d121 days 20 hrs ago0xce20efb3786237d661082d4b2b9e1438dc6108ee  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.000825534275
0x1b831c37fa493a57460d807fb4b9f332167b8fccdf3cfed7a5499442672cce70125 days 11 hrs ago0x246c1243e51cab00064ebb199eaf463449f7928f  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.00385791671
0x929f648b7d8f78585ac5de9058dbb770749cf87cc044dcae35cca33684512f54140 days 13 hrs ago0xce20efb3786237d661082d4b2b9e1438dc6108ee  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.000792624
0x747498d92fd86a50e8a7333e855d19a1f69ebd99cfe9a86a5cc20609e5ba435c140 days 13 hrs ago0xce20efb3786237d661082d4b2b9e1438dc6108ee  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.000792624
0x13e618760421d94b10f876bfd6f82fafae77b009d81a2c0e6c16e8180e591066140 days 13 hrs ago0x246c1243e51cab00064ebb199eaf463449f7928f  IN   0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00 Ether0.003669456
[ 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
0x4197f1ccfb88960fddccae4314d139cfb0ca2ae51760196c30c8bf9ff33f32bb427656889 days 18 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x91a4de919e69606590b963f137468dfb2c68a2996,814.0498138386 Ether
0xc8348aa488ca730b3fdb07c1e83600df5d31e0601798b20f07aa58e420e0fa01427648789 days 19 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x270b22be16e84d1383c4f1a0b384089b492e88bc16.55 Ether
0xef71c99a41c8a51ddc1291be9e571de29cb2e8fd3277dc95cf40f4e0eb4f657e427648589 days 19 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x38ceccbe1c2d7d8d67f365b13d813700d045acdf21.66 Ether
0x0546be3ee2b71655a9e4c4b56b1946ef2f6dd899470a147512bdf8c988e148e64189814113 days 19 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x5884125bb2bbc3e8b02e94ebf1eacf97489ad3c31.2 Ether
0x26d2463e629ab383beb8a5bf11805908fbcbe396f1941d00864ecdd3c091a77f4189813113 days 19 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x38ceccbe1c2d7d8d67f365b13d813700d045acdf13.58 Ether
0x298b6b092cbefeaef8cd6d0aab23672da14b5dbe64f447db67470f1969b3633e4189812113 days 19 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x7f2edb1195091625322ff3be9d802fcc84790eb210.04 Ether
0x7f1f24c8f5ca9c28922a0d60a4ee81e7dc8ef804bbac4e23b77ae0a9fedf10fc4189772113 days 19 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x1f4504f99328764429a9e1d677227e04117361eb2.15 Ether
0x5afb5be38f55e327859346fded5e025d4f0eab0093370a79b7091b9c8c7de62d4156345121 days 20 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x7f6da78982c4b0d7414d6fc47fce730fee8c9bff13.7 Ether
0x929f648b7d8f78585ac5de9058dbb770749cf87cc044dcae35cca33684512f544077203140 days 13 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x38ceccbe1c2d7d8d67f365b13d813700d045acdf22.07 Ether
0x747498d92fd86a50e8a7333e855d19a1f69ebd99cfe9a86a5cc20609e5ba435c4077201140 days 13 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x7f2edb1195091625322ff3be9d802fcc84790eb222.07 Ether
0x649f5bcecc9e152a0cd889d4e42246806dc7a0d3ebd8f58e9799a36d1cd752553942353168 days 19 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x5884125bb2bbc3e8b02e94ebf1eacf97489ad3c32.36 Ether
0xaa08c85d2de7ec6c324ff5502bcb806228d83fa91420149b3c41ef032ae264aa3934104170 days 11 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x38ceccbe1c2d7d8d67f365b13d813700d045acdf16.08 Ether
0x56122a733fdc4af0a73ed9b366f32c16cce8e3115bc1f280302c2549e490d0613934103170 days 11 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x7f2edb1195091625322ff3be9d802fcc84790eb216.08 Ether
0xc75d565fcda7e2cebd223ea0f4cdfec79f7901b514d48ed60a6231b6536f04973934101170 days 11 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x270b22be16e84d1383c4f1a0b384089b492e88bc28.41 Ether
0xe1682dfd29cde3b16ecbfda58ddd3c4dc653a40f0c9a902256c2ac82b3c118ae3871295182 days 18 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00xd39379d7887c6a9ebd01007e2b96efc77465204725,195.564 Ether
0x95a6dc9896d8297f46a3eba4c64aceb55d9505151676c74d919030092a765d543769650201 days 22 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x38ceccbe1c2d7d8d67f365b13d813700d045acdf22.9 Ether
0xe0bfa15d98adb4a29d9b3fd4499f9be6149f5da70462d8274b12a2ccc5b3259f3769650201 days 22 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x7f2edb1195091625322ff3be9d802fcc84790eb222.9 Ether
0x247a82b620f932b95b9740c5bc34124c05849680eb10f04ff59f1a1d75be80c33769647201 days 22 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x270b22be16e84d1383c4f1a0b384089b492e88bc39.83 Ether
0xc40e06c4163c8d61352be21be678cfda268d9e345f54018724e2a32ebfac13a53616899229 days 10 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00xd39379d7887c6a9ebd01007e2b96efc7746520473,688.17 Ether
0xc8d45e39db4617016f56b2c23deb3bcfb4d7e37274a929bb1aec4190db7e91253616283229 days 12 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x7f2edb1195091625322ff3be9d802fcc84790eb2123.47 Ether
0x914d5079ed3e1df493fb1223c8febb0b67f930e990d10e74229dd439229dc0ea3616241229 days 13 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x38ceccbe1c2d7d8d67f365b13d813700d045acdf58.26 Ether
0x17828cf8865da781abdf250b1d520f54cd6bfb82c7dac48dbe9b01c32f93aa3b3616239229 days 13 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x270b22be16e84d1383c4f1a0b384089b492e88bc112.66 Ether
0x5b5f5d4e4bdbd11f10864f870fed3e5cb421c26027f9a8f47a930b8ac84aca843616176229 days 13 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x38ceccbe1c2d7d8d67f365b13d813700d045acdf0.1 Ether
0x1236a8e37ea2743805d160e9abc4a241de085224899f35249deb1623a664df7a3616173229 days 13 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00x7f2edb1195091625322ff3be9d802fcc84790eb20.1 Ether
0x489050342582a4cd51e68e514664a156336587088e591781be83d3673e513dd53498803249 days 19 hrs ago0x5e01f73fede1f844d3c6fbd1383aeb2307a7a2b00xd39379d7887c6a9ebd01007e2b96efc7746520474,635.85 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.