Sponsored Link:   Buy your 1st Ethereum in 5 minutes. Trusted by more than 100k buyers.
Contract Overview
ETH Balance: 0.0167609854600171 Ether
ETH USD Value: $6.08 (@ $362.67/ETH)
No Of Transactions: 168 txns
  Latest 25 txns from a total Of 168 transactions View All

TxHash Age From To Value [TxFee]
0xc649fa3f89839a6eaf15b3d90dd40d2ca904f815ec42e9698403230982f1cacb143 days 16 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.000809264
0xdeccb409028e09aa787b16cb5c11c967a04f5990b7f55cc566636afcb9a81916143 days 16 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.000442908
0xe6df07aac9bb9f29813e156fa3e28662930418350e5753887dc3e70d6b6b303f143 days 17 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.000668224
0x326848887a5dc716fdb8555dabdd0e21b24319e5beb184d06a5f51961d176fcc149 days 20 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.000232476
0xa1facbf089bb72057b0bd94c506175d51af8c43cdd3a6c6ce1907f38d3aab327149 days 20 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.00965536
0x5057b59d2c11402cd48a9f4b7437dbad37d980d7c7270885f7e1df2631fe91b2149 days 20 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.00902781
0xcbc4a10dcc213843a925616be24559e9b550652822fae0b9900291f5ddb592f1199 days 23 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.002980348
0x51b486adc98c19d0b006c9152b1f124586ff040009e7b864e8cd48d4f9f44d0f200 days 6 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.00075818
0x0e850043c8dab7537b845c3877d83a6a7f1db70a3583bc5f1e561c74c9b42a3e202 days 21 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.003693107545
0xbc88a43bbc6b48509c28ee30856ccbe265b0822ebe3b39d336290b1420e350bf203 days 8 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.00051271
0x7c5a6ad86eafa2fc6807e9c4d1507f512f939ca297bedd00725bd37ed7106b54205 days 48 mins ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.00046514
0x1f24dcd37a7258ba48c141a3a160ad370bf7934f675704a038d15ad61239331e205 days 2 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.00051271
0x3f8f7f1106b188b72d8daf328cdf4fe688ac54e30d623b617e1ec18a6cc86a0c205 days 19 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.00065784
0x5b97d4f119475dd313ff46c7a11422cbc92c59121751747a55c0259c78b0da85205 days 20 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.000786506
0xfd2c4cb5c594be2f015522315eb1e018fea7cb3f98ebc0b614064fe0d8959e94206 days 7 mins ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.0009033
0x19c8ce7452f209bab0bc7b42545ccddc867291d861ff4f7f02a8fc8b81fb183b206 days 25 mins ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.00088352
0x31ff23e860a5b4bad1184ebeffca903f416dcb314c2ba20bb6226b4c957c939b206 days 5 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.0009421
0x71f7bd43d2cf2b58e49cc4703081e028c343b89880f706bd9dd34d146cae4781206 days 5 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.00094082
0xd6a9fc1ef137d61cedf943cdb389a574f46ac03e15e9a617377731a35c7cd583206 days 5 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.01930424
0xcd8cf5e5de481985381958b2c6a3b8743ae7558f523e9953f738069d1caeebca206 days 5 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.01930296
0xa156eda54e33cc607ac4477fd1e9eca8d3393d448cecc0fb3a7e25c6b07c0103206 days 5 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.00245166
0x0be07c1c92974d9ea9c6f19a243d18e6024e2feb35b019e57f97c601ddf732af207 days 6 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.00094338
0xd3025d1885d47d91e5d943bbbdd8444dd1b712b2a18bf8f2183c26e6ca1e2679207 days 7 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.0193004
0x7a724cad2578729114a9ac374601bf032dbe5456c5e63b3c5f38a57c986e0d4c207 days 7 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.00108536
0xc4e6ae1ee7e886c08c08b8ce576d9abbde451f0c03a0c9ad4816391aad0930f4208 days 2 hrs ago0x5b878ba97bae92fc0aa6133edbf2f58d52350d65  IN   0x0b5fa328278442956d405d8b501571e20b96260e0 Ether0.00217852
[ 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
0x326848887a5dc716fdb8555dabdd0e21b24319e5beb184d06a5f51961d176fcc3919291149 days 20 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0x988d48cc545059e68200412c6b1ba298892b61900.01 Ether
0xcbc4a10dcc213843a925616be24559e9b550652822fae0b9900291f5ddb592f13649755199 days 23 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0x34833001d99851b85729606f241ca872d1a1e4610.001 Ether
0x0e850043c8dab7537b845c3877d83a6a7f1db70a3583bc5f1e561c74c9b42a3e3633382202 days 21 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0xb669857de6ef4e8df8050a30f417db6fa73d9bc10.02 Ether
0xbc88a43bbc6b48509c28ee30856ccbe265b0822ebe3b39d336290b1420e350bf3630730203 days 8 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0xaefcd0f8a1cbd231cecaa9bfd9ffb82a6eaaa4620.22 Ether
0x7c5a6ad86eafa2fc6807e9c4d1507f512f939ca297bedd00725bd37ed7106b543621242205 days 48 mins ago0x9b229a66ed40f9cb7bfb270f10643e22aceca00c0x0b5fa328278442956d405d8b501571e20b96260e0.2 Ether
0x1f24dcd37a7258ba48c141a3a160ad370bf7934f675704a038d15ad61239331e3620756205 days 2 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0xd0d20cda01cb1eb2092cd1859eaf21a31b400a790.15 Ether
0x3f8f7f1106b188b72d8daf328cdf4fe688ac54e30d623b617e1ec18a6cc86a0c3616823205 days 19 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0xaefcd0f8a1cbd231cecaa9bfd9ffb82a6eaaa4620.03 Ether
0x5b97d4f119475dd313ff46c7a11422cbc92c59121751747a55c0259c78b0da853616692205 days 20 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0xd0d20cda01cb1eb2092cd1859eaf21a31b400a790.2 Ether
0x4168c673d3c4ecf808c053617154fbc354cdc8148fb9e0bc429d8ce1782a3c443603679208 days 3 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0x3dd99671eff7a32d4ad0885264ca378916ac9cfe0.05 Ether
0x6473c972e74d932436adb5713d3a1bab058fd6b589277b2b1c712c7de507823c3598173209 days 2 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0x5b878ba97bae92fc0aa6133edbf2f58d52350d650.1 Ether
0x91dff00a2c1265e966b336938b2618cf66cd81eb1e18b1ec4ab82cc05747d4103591316210 days 6 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0xaefcd0f8a1cbd231cecaa9bfd9ffb82a6eaaa4620.05 Ether
0xc74c5a84ffeec7c9368fe7e2d22b69c80d5a4e3f8f94c99d0e37f5b0802ac80b3591316210 days 6 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0xd0d20cda01cb1eb2092cd1859eaf21a31b400a790.05 Ether
0x5cd7e348abee585f8e71f5e26800af7f2f2851f16980a4f009f4076c9bc6bf5f3583084211 days 16 hrs ago0xd0573658ba25934d9bc4d13412bf7350ce6dbc860x0b5fa328278442956d405d8b501571e20b96260e0.5345 Ether
0x930a1c08dfa37063172069d7eb2f8edb43de24a699c68f8061c3f89a658b66f03583016211 days 16 hrs ago0x3dd99671eff7a32d4ad0885264ca378916ac9cfe0x0b5fa328278442956d405d8b501571e20b96260e0.1125 Ether
0xac616f62118a4a4e2a7c2c4d809ea9dc7a116896ea28d73da2e2c1a07414c3f63580622212 days 2 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0x721948a802f41159348e67fbcfaccea8a2b04c270.01 Ether
0xd5f1368fe9c455a6b57831832462e830ae64038841b5ad17f84634b1bbfb7cce3576354212 days 20 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0xd6fc84a46dc9631999b64caf8ccf9f942c8fd8f20.001 Ether
0x96ecf8396a31877f34337ceee984d060ed4f51f8f3ab062a18bd750b037cced83575539212 days 23 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0xaefcd0f8a1cbd231cecaa9bfd9ffb82a6eaaa4620.01 Ether
0x84d934688f356e8bc5d9975e6d73fd67270df04d8f379bd79dcd812bb80b1ec93575470212 days 23 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0x3d48587aa16d91a2e37198b5b428674bdaddf0380.01 Ether
0x3bb998a4046d8af9601120b801087ec8e8e07e97d22a648d854d9338c87ebc653571838213 days 14 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0x3d48587aa16d91a2e37198b5b428674bdaddf0380.01 Ether
0xaa49b1ab32f065bb548841cb02f3f51f8f04530a4dfb4ef6e68b6f1213eac9843571838213 days 14 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0xaefcd0f8a1cbd231cecaa9bfd9ffb82a6eaaa4620.01 Ether
0x1064cb0cf2d654559ee77c5451cf36dbc8dd082a37289b2e78e882bf58fa29f93571125213 days 17 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0x3d48587aa16d91a2e37198b5b428674bdaddf0380.01 Ether
0xf3edacbb4f66b5c2086c4666c31c81a978430ec120b00a9b163104287eb0c04b3551083217 days 4 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0xd0d20cda01cb1eb2092cd1859eaf21a31b400a790.04 Ether
0x6b71f545aeed513f30c85d3ff9eb26a5732dad75124ac374f79768debbc0e16c3551046217 days 4 hrs ago0xd6fc84a46dc9631999b64caf8ccf9f942c8fd8f20x0b5fa328278442956d405d8b501571e20b96260e0.1 Ether
0xe2aa03c5227337e6b650e99e1d4e35ed05d0a761e70e89104a745cffae9d2c3d3550792217 days 5 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0xc3d0dd58fabc127f0b2a378c1bf3df8b4494806b0.02 Ether
0x4e0ed46f200bd41862a3a13dcde3b3184dcb355a1dabf9f44e112ab9430013d83550270217 days 7 hrs ago0x0b5fa328278442956d405d8b501571e20b96260e0x5b878ba97bae92fc0aa6133edbf2f58d52350d650.05 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.