Sponsored Link:   Ambrosus Main-Net Launching: Stake AMB in Masternodes and get regular rewards for maintaining network integrity.
Contract Overview
Balance: 13,478.327899212495238615 Ether
Ether Value: $6,225,774.44 (@ $461.91/ETH)
Transactions: 78 txns
Misc
Address Watch: Add To Watch List
Contract Creator: 0x73f0ed546cd7893abc5e04284b68522602603dd4at txn 0xcdda1d9d440ef138b16ffda653c978b4dcff6450ccb4abb304fc3fd484d4cea2
Token Balances:
 Latest 25 txns from a total Of 78 transactions

TxHash Age From To Value [TxFee]
0xd937342ef2c5c8d4caaba380cf1d06bb35d3fad5d10464224259eb778de3f5f229 days 54 mins ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00003812144
0x2ebd15e157b5e0317689fea551a285c93dd657c50ecf0fef5f8f8b01bf6ad1c629 days 1 hr ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000370064
0x1e2efa5e2660e5b87e45a9d63faf3c457e24e2fdc2fbfe19e7de57e6e0c834f564 days 13 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000300174
0x2c6edb3849334a7ddb8c1c9527badd3adf06c0780b17f5a4a1c553a14839f73068 days 15 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.001925748
0x7596411b1b836de04ff8b97438b9ebbc409723bdc6ccff03038e0796920c22f268 days 15 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000476267
0xd6fbfac451b7cd9c2a652b66fcfa68e9e72972f56689188fa3d9c2c20deffd7b68 days 16 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0037032
0x3f3d082de9c92560b7f864bba33062e1d4147711aa8eba846e8f4d574eabb84075 days 23 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000096112
0x27a7459bd316c13d5edaaf719bc0c7f4e673bf61eb74c7c55d9121947df828a375 days 23 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000370064
0x517577162f1ecd94f9359eece4372b22c3296028656e6771493adeb80777eb8783 days 13 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000113136
0xa69f3c8bfed1b240a929e6094032e55195b79030e751c0d6e9572010713a3dc083 days 13 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000064323
0xed69b972c7d2bfecc3342b88c61a3fea78f7b1603a165fa6fb151ed13a454d0c83 days 14 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0008747
0xc9b8214c4917a8a43b4d0efcd0fca01cdc89f356132dbc3495776b8b29ac524883 days 14 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00092516
0x86fa7096cc87f994388aa5eb7ddfa9be0542ed350f7c1d5480183270bcd75127116 days 17 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000173188
0x75aaf792f6a280d5779dfe3a25bbbef2841492230fe28a69fc2bbd516326b199116 days 17 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000700272
0x4ac07fcb44f63396ffdb47f402c10dafd99ad6c12369f4f0b900c0baae4427d7116 days 18 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000233188
0x3e6c5edb28123c42ed4788a4a1e4d30cb0edd06f71b61cd4ebe595b4bb40af4d116 days 18 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000739872
0x4db3410385c8ac1dfbfaeafaf51f6a09f4322ccf3bf4ce6738ec89306f8ed9f6140 days 12 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000524673
0x37ffaaa4ac5ace382feb43dd9029533d5113a8d4e836bc1520870880cdb1c158140 days 12 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00166644
0x144919ed11c4778470d3b9c4987924cbbf1c641d7d8382eb43e645091e2cc418147 days 18 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000301952
0xeba9532b9320c2bfc94528d9c3ac59042a5e878480e38bfa317df7e229f4a6a7147 days 18 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000320655
0x4f4e61b429351926c854958e4a684cf14aaad780b876fc6c7137a38f542fb4f7147 days 18 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.001400544
0x56f2e914f2584256f1d5ffdfea317271546fbcab20478a0a9cb17d2c4851cb5f147 days 18 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00148128
0x4607478835b78ac161f3878aa06a12992e2ec26da3bf80a9bf4c5dfbd8071e6c157 days 1 hr ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00116594
0xc88e4e4db6f2f3ffefd755d32e9876565c07b29c8aa796f1fe866ff710d528d5157 days 1 hr ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00518448
0xc196728243cc0bd101a4a78cc06ef7405e941b187409043f58ea25544b886333183 days 1 hr ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0018872
[ 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
0xd937342ef2c5c8d4caaba380cf1d06bb35d3fad5d10464224259eb778de3f5f2583759329 days 54 mins ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xadd9418c1cc318ddf2fa4ad907a960d244bbbe54106.2 Ether
0x7596411b1b836de04ff8b97438b9ebbc409723bdc6ccff03038e0796920c22f2561197868 days 15 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x048717ea892f23fb0126f00640e2b18072efd9d259.653785553066935567 Ether
0xbce3015c06c8bc2987fd37fd96652e492db51c292bab588d820f18a318d17029561156168 days 17 hrs ago0xa4463f9ff0d87531232c8c4819b536c332da6eac0x24c3235558572cff8054b5a419251d3b0d43e91b59.653785553066935567 Ether
0x3f3d082de9c92560b7f864bba33062e1d4147711aa8eba846e8f4d574eabb840556991675 days 23 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xa4463f9ff0d87531232c8c4819b536c332da6eac433 Ether
0x6f57edf6b77961234f8ba7a9d730ec32cf4343d18ae340408272098306e36f89554022081 days 4 hrs ago0x048717ea892f23fb0126f00640e2b18072efd9d20x24c3235558572cff8054b5a419251d3b0d43e91b433 Ether
0x517577162f1ecd94f9359eece4372b22c3296028656e6771493adeb80777eb87552678183 days 13 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xadd9418c1cc318ddf2fa4ad907a960d244bbbe5437.12 Ether
0x86fa7096cc87f994388aa5eb7ddfa9be0542ed350f7c1d5480183270bcd751275330583116 days 17 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x048717ea892f23fb0126f00640e2b18072efd9d24,172.272695395098616431 Ether
0xef958d0c74da35d07e63eb5d43dc2e00ac12c71c7b8a063fd71333ce88253f735330488116 days 17 hrs ago0xddf0d0b9914d530e0b743808249d9af901f1bd010x24c3235558572cff8054b5a419251d3b0d43e91b4,170.943283630392734079 Ether
0x4ac07fcb44f63396ffdb47f402c10dafd99ad6c12369f4f0b900c0baae4427d75330138116 days 18 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x048717ea892f23fb0126f00640e2b18072efd9d21 Ether
0x4db3410385c8ac1dfbfaeafaf51f6a09f4322ccf3bf4ce6738ec89306f8ed9f65189631140 days 12 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xddf0d0b9914d530e0b743808249d9af901f1bd014,387.67269030985562061 Ether
0x8fe44cfb3aced72fd65166eeddbb1cf5ac6832b2e8f2393737364620fa8ca2bc5189334140 days 13 hrs ago0x3ad2bfea535bf1673f22de61b19f758a2dd0efff0x24c3235558572cff8054b5a419251d3b0d43e91b4,386.67269030985562061 Ether
0x144919ed11c4778470d3b9c4987924cbbf1c641d7d8382eb43e645091e2cc4185147037147 days 18 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xadd9418c1cc318ddf2fa4ad907a960d244bbbe54152.887076893903479662 Ether
0x4607478835b78ac161f3878aa06a12992e2ec26da3bf80a9bf4c5dfbd8071e6c5091925157 days 1 hr ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x3ad2bfea535bf1673f22de61b19f758a2dd0efff4,189.166264672755271486 Ether
0x45a558476441be443e1a5147d556602469c13c601951cdb4054f541d74656fbd5091892157 days 1 hr ago0xd91e45416bfbbec6e2d1ae4ac83b788a21acf5830x24c3235558572cff8054b5a419251d3b0d43e91b4,189.166264672755271486 Ether
0xc196728243cc0bd101a4a78cc06ef7405e941b187409043f58ea25544b8863334937817183 days 1 hr ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xadd9418c1cc318ddf2fa4ad907a960d244bbbe54110.854150341163204067 Ether
0x167ece8b954bcaf905cf336b3df2b6686be77952cf6585fa58564012f0fbe6a24723972220 days 21 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xadd9418c1cc318ddf2fa4ad907a960d244bbbe5455.4 Ether
0xb531b1959bf2d7de96a56361ef3601457f800a4149c8f62bd604e83a1b6083474544081250 days 17 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xd91e45416bfbbec6e2d1ae4ac83b788a21acf583125.40143512187205251 Ether
0x6abf061d8a02ba92da0f47c1649cfd31083e556a39317bf6ecd0407b639937f14544050250 days 18 hrs ago0xa4463f9ff0d87531232c8c4819b536c332da6eac0x24c3235558572cff8054b5a419251d3b0d43e91b112.861291609684847259 Ether
0x0380c1597812a5d91debed7cd67b2926d62cca0768160e1ccfc6f3a416babef74544016250 days 18 hrs ago0xa4463f9ff0d87531232c8c4819b536c332da6eac0x24c3235558572cff8054b5a419251d3b0d43e91b12.540143512187205251 Ether
0x09702e28d5962fad696ce85cfb7662beb139fc8befe26a0be34edc075f5554694498224258 days 2 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xa4463f9ff0d87531232c8c4819b536c332da6eac1,111.06914728103115213 Ether
0x87a3a394347139ab9ad614fc9b22ff6720b75053fed261e338a8cd24295c7d7a4455132265 days 1 hr ago0xd91e45416bfbbec6e2d1ae4ac83b788a21acf5830x24c3235558572cff8054b5a419251d3b0d43e91b1,111.06914728103115213 Ether
0xec2eda17fb7e21d0833a42932ec000820cf1ce54d3c2f014941ab4d2bdc78b654427301269 days 13 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xd91e45416bfbbec6e2d1ae4ac83b788a21acf5835,777.86719603163383851 Ether
0x127e58e5170ca6d22e5cf042cbddff975e884ff6eee5766a4de607356e7455fd4427269269 days 13 hrs ago0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e0x24c3235558572cff8054b5a419251d3b0d43e91b5,777.86719603163383851 Ether
0xf610b4ebad0ef1b88e254692b78d6ed18386c699f0dad1b1fb5f5a060f283f774426974269 days 14 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xd91e45416bfbbec6e2d1ae4ac83b788a21acf5831 Ether
0xc2151f217efe91b1e0a81ae69692b51dc08dd0e15d79d2e195521b86b6a481904190426333 days 12 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e2,500 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 <g@ethdev.com>
// 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.