Sponsored Link:   SHIFT.cash - smart-contract based car title lending platform, 30 billion market, 35+ employees. Join NOW.
Contract Overview
ETH Balance: 0 Ether
ETH USD Value: $0
No Of Transactions: 55 txns
  Latest 25 txns from a total Of 55 transactions View All

TxHash Age From To Value [TxFee]
0x30295ab6e604dc865432cc1a487171d44eef1141772dbf56f71c7b5f4c5c2e76243 days 17 mins ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.001899395
0xa2f063e15aa2338ec8729c32e7e8ea79830696cf0bb2ebc4e6d6b0f33a9b66e1244 days 18 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.001451581
0x051a36933211507be0c1d6abe9fc3ae96bbb9adb0f07a09fb58ec4b26356242b247 days 2 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.00198729
0xca962b2032b5373104cb4421295bd58d18e4ceeaf5b5641568a8d130e5f6be9c247 days 3 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.00123537
0xb38f7620a0bb43bd9b7cafa28582190721564fa46285ec834510567fe81b2aeb247 days 3 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.00123537
0x6488f74cc5cdbc54394f72b8e5466f972abafd2a4bebf29cc442f905b7f27dbc247 days 4 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.00123729
0x79813214dda78e3e08edce94f02a028bc8f115e44f2356d0d2902a66cac76b31247 days 5 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.003113421
0xbb2aa843706b5761267093cf9dd59a11e5fc14a548b4cfa32884b8f6c420cb43247 days 5 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.004504524
0xb48a818ffe4645c161ccd9f6622819e03784310d1da85c1aa849dcb3eea15d75247 days 6 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.001180705
0x585cc307c64d5678bc433c427c08d2694b933a454818e0a7a645b7bc74ce2587247 days 6 hrs ago0x4f9c2c28a0d5a6e3aeb3ab42147bd5adc3e540a3  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750.655498275882771 Ether0.001009035
0xbde8af7746618f9f01f7d594411abeb233b87294d22fc26ce3202c2acd6f9981249 days 5 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.00256675
0x8a1314027d9ea7760b09d4f9c572abf002951a78b86c21a2e60e68697d34dec2250 days 7 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.00102414
0xc91778eeea857cceaf7b6ff9e4baff1d43907832fa2819c016f048d5e2ebbffc251 days 10 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.001076691
0x05d3611434000080fca9b77a6951735f652181c98ad8ee6d39aa63ea09cdad7f259 days 7 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.001075347
0xfc17ef49d80f0d6efaf959b2460d9957aba0e32ae90370301b02f9d6d22e0028263 days 4 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.00090453
0x63b79db55b10461b0d64cd7e47a6eb5962a54fdc5e23d3da507f4ed625c328a4263 days 4 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.001457346
0xa36b579826d17d76e846770223061cab85140c4782a06a93718e5d58c0c68242263 days 4 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.00167937
0x173ffb46d0a3cadae668c07582116fb10de151d8803599546a762e6aa70663a5264 days 55 mins ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.001997073
0x37ae2f06646ff21f1b7870d5984ec898f6c7936d9f793cd582694a39f37763c1264 days 1 hr ago0x8f1cb63e7c2952a6d9742fcb203db8e40d6658c5  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750.1 Ether0.001233265
0xf07bad435e65afce63e7396ba42fac4f0075887b9dd7b9d60b89525d6875ce5a266 days 5 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.001075347
0x5ecb88f94dd8b567d084f591fd7eae996492f3dc38b9f1619373abfd96363547268 days 5 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.0013223
0xed1dcb364afbc3b57dd8e7ddb868a8a116a6e226755cdc58c9d29c991579a035268 days 5 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.0008223
0xdde2fde251aa0740d2a56eafbb2895b7f54622885fd06cc9017d5cc2cf1416c4268 days 5 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.00132358
0x8428e78dcc608215990324a7c9d80dea2a176008c23ff374474c015f201ed274268 days 6 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.0013223
0xa9e6e31a87b73ee44cf4d3b50f34601b59fd76ca4778ccfd01c05d7b2f918e5d268 days 7 hrs ago0x13db30a1b5a26ab16eb11106b0e224f47da317ec  IN   0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750 Ether0.000864759
[ 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
0x30295ab6e604dc865432cc1a487171d44eef1141772dbf56f71c7b5f4c5c2e763934628243 days 17 mins ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x13db30a1b5a26ab16eb11106b0e224f47da317ec0.023155242478302144 Ether
0xa2f063e15aa2338ec8729c32e7e8ea79830696cf0bb2ebc4e6d6b0f33a9b66e13925960244 days 18 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750xc43c9d8ee60250a2a421968701c91050a41dae590.16653898677680445 Ether
0x051a36933211507be0c1d6abe9fc3ae96bbb9adb0f07a09fb58ec4b26356242b3914378247 days 2 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x40ee7318b2f71c4697a4a01056fcc3ca8a6264b90.00312998841904285 Ether
0xca962b2032b5373104cb4421295bd58d18e4ceeaf5b5641568a8d130e5f6be9c3914131247 days 3 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x1ffd1d427bb81f7d38cc58b027697be0989490280.1 Ether
0xb38f7620a0bb43bd9b7cafa28582190721564fa46285ec834510567fe81b2aeb3914121247 days 3 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x800fc32ce61b2d196e9dea82fd0a5328af8e06f30.1 Ether
0x6488f74cc5cdbc54394f72b8e5466f972abafd2a4bebf29cc442f905b7f27dbc3914052247 days 4 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x13db30a1b5a26ab16eb11106b0e224f47da317ec0.123 Ether
0x79813214dda78e3e08edce94f02a028bc8f115e44f2356d0d2902a66cac76b313913761247 days 5 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x0d4ff074e51f2b09f97c78531f03cd39bd8dcba60.123456789 Ether
0xbb2aa843706b5761267093cf9dd59a11e5fc14a548b4cfa32884b8f6c420cb433913733247 days 5 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x35aee1cfbc32b67bc81cde99c6be5a0d953e1ed50.015256461111280627 Ether
0xb48a818ffe4645c161ccd9f6622819e03784310d1da85c1aa849dcb3eea15d753913698247 days 6 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x7fb768a519e864a8576aab18b479e035521250fd0.001082272282076396 Ether
0xbde8af7746618f9f01f7d594411abeb233b87294d22fc26ce3202c2acd6f99813903955249 days 5 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750xb4574a42944b4a060fde6beae96215941dae3f3b0.027413032155486718 Ether
0x8a1314027d9ea7760b09d4f9c572abf002951a78b86c21a2e60e68697d34dec23898519250 days 7 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x749dc6b50e46531e87b60a148a6b04f56c25b9c30.01 Ether
0xc91778eeea857cceaf7b6ff9e4baff1d43907832fa2819c016f048d5e2ebbffc3892538251 days 10 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x1b3e9be0dc04aafbe04d37ea804eb054debf6e4d0.001 Ether
0x05d3611434000080fca9b77a6951735f652181c98ad8ee6d39aa63ea09cdad7f3850832259 days 7 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x2d3ac850ee6983d015efbebf689b28dab07cc02a0.01 Ether
0xfc17ef49d80f0d6efaf959b2460d9957aba0e32ae90370301b02f9d6d22e00283830488263 days 4 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x1419faedcf8aec4530246bbe299551079dd1a30c0.01 Ether
0x63b79db55b10461b0d64cd7e47a6eb5962a54fdc5e23d3da507f4ed625c328a43830471263 days 4 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750xa17849d2998e9ffa42467f7ba6419b55b2fcaf4a0.01994654326405234 Ether
0xa36b579826d17d76e846770223061cab85140c4782a06a93718e5d58c0c682423830429263 days 4 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x7fb768a519e864a8576aab18b479e035521250fd0.003917727717923604 Ether
0x173ffb46d0a3cadae668c07582116fb10de151d8803599546a762e6aa70663a53826118264 days 55 mins ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750xae1716ab61d108c13d3f923801aee2ab19f78a4e0.02 Ether
0xf07bad435e65afce63e7396ba42fac4f0075887b9dd7b9d60b89525d6875ce5a3814688266 days 5 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x1419faedcf8aec4530246bbe299551079dd1a30c0.01 Ether
0x5ecb88f94dd8b567d084f591fd7eae996492f3dc38b9f1619373abfd963635473804355268 days 5 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x1419faedcf8aec4530246bbe299551079dd1a30c0.01 Ether
0xed1dcb364afbc3b57dd8e7ddb868a8a116a6e226755cdc58c9d29c991579a0353804328268 days 5 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x2d3ac850ee6983d015efbebf689b28dab07cc02a0.05 Ether
0xdde2fde251aa0740d2a56eafbb2895b7f54622885fd06cc9017d5cc2cf1416c43804292268 days 5 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x36ac70c02a564985b540fa4edea3ff8ac10ab14f0.25 Ether
0x8428e78dcc608215990324a7c9d80dea2a176008c23ff374474c015f201ed2743804234268 days 6 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x1cfbb7f3b455de0205049b9496300f2f17f4c9380.01 Ether
0xa9e6e31a87b73ee44cf4d3b50f34601b59fd76ca4778ccfd01c05d7b2f918e5d3804008268 days 7 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x800fc32ce61b2d196e9dea82fd0a5328af8e06f30.1 Ether
0x0104bd9cfdc02b0258b806352f59ae91a3694062b7ba2d1bf4299437d9f72fba3803925268 days 7 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x6fff4ac7e2fc09149d9a6a57081579ad9df366f30.002 Ether
0x5d42f0aac3e8cadfb8fe74de8296b8595d13ec1ea10b694ff5e512467c7a9c493761287276 days 2 hrs ago0xed1804c1f11a46ba8cb0bd2a9fb82255d51989750x1aed44d0a165bf05562b0d2a089bdc96593614770.005 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.