Contract Overview
ETH Balance: 618.239395245 Ether ($30,868.69)
Mined:  0
No Of Transactions: 68 txns + 40 internalTxns
Misc QRCODE
Address Watch Add To Watch List
Contract Creator 0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adbat txn 0xabcb156584dc5e0d6644d671e81b89ad413b39a1c10a62124e8bb3ca1604f3d9
Token Tracker
  Latest 25 txns from a total Of 68 transactions View All

TxHash Block Age From To Value [TxFee]
0xc54f2b0ef98ead7023c0b0a660d96cddae56dc9f673e177da1e3994730e213b4326728626 days 2 hrs ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00349294
0x11610e87849e2ea90b90a3069486f65b293418eea3dc0164278c9d6bd8983d02326728226 days 2 hrs ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00146449
0x16483b894da1299b03c9b538cf763efab285fa18151640c1a3eac5b881b8cc89326727926 days 2 hrs ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00122288
0x1dce2d60eae3efd3ec6f83611dcac1435e900e71ff82c7197182df9adbc458dc325724127 days 18 hrs ago0xb0cb1e9187a68f1aff89e206bbfa4b4e4fc3b9e1  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.0007695
0x34f172538ea4668d56edc2bd64aa45b749dc09335116619fc2826174ef67fecc325723527 days 18 hrs ago0xb0cb1e9187a68f1aff89e206bbfa4b4e4fc3b9e1  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00075488
0xb0ea3b7dfbf121b9202b4b91761536afdb7d5d3ba5dc1ac1b13394757d7e66fc325467428 days 4 hrs ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00350008
0x190c18c3cae3ec65a48983196b83ba9390aa4bad6c31da62d759b4d3ffc5f12d325467428 days 4 hrs ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00340192
0x3f28129d6eb39503bd32b925550a35258d104fa1889a62f4643336da802baaac295969877 days 23 mins ago0xb0cb1e9187a68f1aff89e206bbfa4b4e4fc3b9e1  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00075488
0xa7e52638043e58a791113ef3e2812cbe2a9211a11bddcce13405d9c45086f47a295966277 days 32 mins ago0xb0cb1e9187a68f1aff89e206bbfa4b4e4fc3b9e1  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00075488
0xc07f28a4bc8adb4d639be0209e6839793012cfcdf2b32e2e28b23313aa6044bf295924677 days 2 hrs ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00112358
0xfda50d86effb7a7ee0cb9016257685e7932a743027c8d2f9c808b4cf042608f6295924077 days 2 hrs ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.0034988
0xd5f98bab4c1055261d9cfdfdd552766f3d674314538704ac5cd6186ec788e6b5295873077 days 3 hrs ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00277644
0x7fef0b64088ac18f8e095756cefc3074283120b8c102ff158a6ae616e20979fe282159699 days 19 hrs ago0xb0cb1e9187a68f1aff89e206bbfa4b4e4fc3b9e1  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00076942
0x0d9aaf704c2359accfce9fd793a57bc0256d70e6585b8a003d9526d282c339df2819363100 days 4 hrs ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00370192
0x525cd6d61f46d60dd05c36ffa063daed8139dd32d11bd28fba971d55de72c5ff2813149101 days 4 hrs ago0x83925de9986d157f6b586bde2a0b0003a13c07c6  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e493.19 Ether0.00091934
0x15e42ef99d53ee687d61e0368d22a512a84d5dec4765b8acea13e55393c192192813008101 days 5 hrs ago0x83925de9986d157f6b586bde2a0b0003a13c07c6  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e1 Ether0.00091934
0xfec1cd57f937c9a2ed001cc8c00586ebaae7351e47cf296eae51879013aca8502745909112 days 7 hrs ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00042882
0x90876300ba9c10602cbb1be880361643df976286e9f0c0ef635eb13052703a5b2745909112 days 7 hrs ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00075488
0x3e3eaa745d018b20b7e1f1a3f8701e4f7450816c715dc768f9060a71256069862745879112 days 7 hrs ago0xb0cb1e9187a68f1aff89e206bbfa4b4e4fc3b9e1  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.02534938
0x571074af9cb58865494cd538224ecc3048ca9bae09416116efbafc3ecef6f4382741394113 days 1 hr ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00214476
0x1aa9bdf2d562bac81021bd3c76ed46896b651746566edf48973425b6525d9f512741394113 days 1 hr ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00340061
0x887c84618c436f8a707ad134e2ce102be17b87f11c6b67717dbc083f7d82eadc2435961163 days 17 hrs ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00050444
0xba014ea03b18b04778deca0e266bbe33f902f5d3d446ef432468d478c4542d132048413227 days 21 hrs ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.0009779
0xfca9798c977d3a4ac47b09ebfb221b0ec189b49f83123e5d5e0b60096685a14d2048404227 days 21 hrs ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00081152
0xb41b76f64ab8118795f7002542592ff847cf71ea698c54f39e533b80b20456032048404227 days 21 hrs ago0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb  IN   0x4b72b8720c1ac721836bd115f248ab45a736197e0 Ether0.00110246

[Download: CSV Export ]    
 Internal Transactions as a result of Contract Execution
  Latest 25 Internal Txns from a total of 40 View All
ParentTxHash Block Age From To Value
0x1dce2d60eae3efd3ec6f83611dcac1435e900e71ff82c7197182df9adbc458dc325724127 days 18 hrs ago0x4b72b8720c1ac721836bd115f248ab45a736197e0xa6cc83cab18fbdf21310463d37e0dd2e8d3e3f6022,000 Ether
0x34f172538ea4668d56edc2bd64aa45b749dc09335116619fc2826174ef67fecc325723527 days 18 hrs ago0x4b72b8720c1ac721836bd115f248ab45a736197e0x0aba55c93cf7292f71067b0ba0d8b464592895ca11,000 Ether
0x3f28129d6eb39503bd32b925550a35258d104fa1889a62f4643336da802baaac295969877 days 23 mins ago0x4b72b8720c1ac721836bd115f248ab45a736197e0x6d18a38cbf9b0a0f894a0a76b6b113af161fce6a1,000 Ether
0xa7e52638043e58a791113ef3e2812cbe2a9211a11bddcce13405d9c45086f47a295966277 days 32 mins ago0x4b72b8720c1ac721836bd115f248ab45a736197e0x0aba55c93cf7292f71067b0ba0d8b464592895ca10,000 Ether
0xc07f28a4bc8adb4d639be0209e6839793012cfcdf2b32e2e28b23313aa6044bf295924677 days 2 hrs ago0x4b72b8720c1ac721836bd115f248ab45a736197e0x6d18a38cbf9b0a0f894a0a76b6b113af161fce6a2 Ether
0x7fef0b64088ac18f8e095756cefc3074283120b8c102ff158a6ae616e20979fe282159699 days 19 hrs ago0x4b72b8720c1ac721836bd115f248ab45a736197e0x56186c7fb53390bb29ded9a3cbf478b84b304b4910,000 Ether
0x90876300ba9c10602cbb1be880361643df976286e9f0c0ef635eb13052703a5b2745909112 days 7 hrs ago0x4b72b8720c1ac721836bd115f248ab45a736197e0xd1ccfbf0a0dc2a9ed8a496b07e81dd8ecd7cb00e2,000 Ether
0xdbf6de4751ef675d2039966ff80fe5b8841fcce3754de9453624fd4a5102abcd2579019139 days 21 hrs ago0xaa1a6e3e6ef20068f7f8d8c835d2d22fd51164440x4b72b8720c1ac721836bd115f248ab45a736197e234.57 Ether
0x3766e5094a69e366e8786c2dc5a89159211d04048613c7467be8db3dca0513a92422421165 days 23 hrs ago0xaa1a6e3e6ef20068f7f8d8c835d2d22fd51164440x4b72b8720c1ac721836bd115f248ab45a736197e295.19 Ether
0x840f5c1fe45089c690838cc3b49d7a05e50639d4fa35ab3b838b74dc43482c2a2420817166 days 5 hrs ago0xaa1a6e3e6ef20068f7f8d8c835d2d22fd51164440x4b72b8720c1ac721836bd115f248ab45a736197e303.49 Ether
0xba014ea03b18b04778deca0e266bbe33f902f5d3d446ef432468d478c4542d132048413227 days 21 hrs ago0x4b72b8720c1ac721836bd115f248ab45a736197e0x1ca4a86bba124426507d1ef67ad271cc5a02820a0.1 Ether
0x873d43a75274c652cc0229b209226d0d12af6f9dad77558939c73178881dd1482048368227 days 21 hrs ago0x4b72b8720c1ac721836bd115f248ab45a736197e0x3b6902f964aa8768356f6bcf2eee1caa700117350.01 Ether
0xa9b9a9073568c878b949e8ef4a4d30f6ab2d77d3090453643303611605d71f082048238227 days 22 hrs ago0x4b72b8720c1ac721836bd115f248ab45a736197e0x1ca4a86bba124426507d1ef67ad271cc5a02820a1 Ether
0xa008cdafe06712bb31f696c0f75a06e8f9825b136013be2affe4ebba9d9bb6e52029554231 days 24 mins ago0xaa1a6e3e6ef20068f7f8d8c835d2d22fd51164440x4b72b8720c1ac721836bd115f248ab45a736197e367.96 Ether
0x1a16b564726ea78f6607eb2558bf2e950770413377355a957f58d1b6b1cce50b2018076232 days 21 hrs ago0x1ca4a86bba124426507d1ef67ad271cc5a02820a0x4b72b8720c1ac721836bd115f248ab45a736197e93 Ether
0x2bc9cae74f5bb908c6a680b7cb85ba8cd913f2d06c113f95124a229f658528212018044232 days 22 hrs ago0x1ca4a86bba124426507d1ef67ad271cc5a02820a0x4b72b8720c1ac721836bd115f248ab45a736197e100 Ether
0x4cce30658903e36f76c8fcdddbb9f3e4e8d1f039eba658731199b80475a88bd02018035232 days 22 hrs ago0x4b72b8720c1ac721836bd115f248ab45a736197e0x1ca4a86bba124426507d1ef67ad271cc5a02820a0.01 Ether
0x9365f05ed40e7ccdbca2fa94ba342ed1ab6fce4a7e84dd5add28a98bfde6bb392018030232 days 22 hrs ago0x4b72b8720c1ac721836bd115f248ab45a736197e0x1ca4a86bba124426507d1ef67ad271cc5a02820a0.1 Ether
0xb9e228977c8cb75c0ea4ed46b5a201bca15953afe24eabfbd0d9ebe5f232488a2017861232 days 22 hrs ago0x4b72b8720c1ac721836bd115f248ab45a736197e0x3b6902f964aa8768356f6bcf2eee1caa700117351 Ether
0x56333b6d687fe90a078d740cd3be090b8e455caaebcb226643f1b77b615b1ef82017848232 days 22 hrs ago0x4b72b8720c1ac721836bd115f248ab45a736197e0x45c036eee109589cf6e2e11b7476ab887bacbd3e1 Ether
0x2c1413c53d0c9a3bd7030f22a5434abf4363eb39dfced3c38a55e8746cba50092017839232 days 22 hrs ago0x4b72b8720c1ac721836bd115f248ab45a736197e0xd1220a0cf47c7b9be7a2e6ba89f429762e7b9adb5 Ether
0xd931717ec06b0e0d5b925fe51d7b1df469b7850cdcf2405be162e2314beffbb32017247233 days 1 hr ago0x1ca4a86bba124426507d1ef67ad271cc5a02820a0x4b72b8720c1ac721836bd115f248ab45a736197e1,000 Ether
0x86ffe65db6d720d46448e21fe6cb75292f1c9358500a8ac6dea2652bf48fcf9a2017160233 days 1 hr ago0x4b72b8720c1ac721836bd115f248ab45a736197e0x1ca4a86bba124426507d1ef67ad271cc5a02820a1,000 Ether
0xea0762d0014c98ec4acb5f387f5bad9894add9dd2e768e46e7d22a16ae5aa6c52016944233 days 2 hrs ago0x4b72b8720c1ac721836bd115f248ab45a736197e0x1ca4a86bba124426507d1ef67ad271cc5a02820a10,000 Ether
0xea0762d0014c98ec4acb5f387f5bad9894add9dd2e768e46e7d22a16ae5aa6c52016944233 days 2 hrs ago0x1ca4a86bba124426507d1ef67ad271cc5a02820a0x4b72b8720c1ac721836bd115f248ab45a736197e10,000 Ether
Contract Source Code Verified
Note: Displaying matching verified source code at contract 0x5cb5f46a655c02889172323760d12d0e5d83cdaf
Contract Name: Wallet
Compiler Version: v0.3.2-2016-04-18-81ae2a7
Optimization Enabled: No
Online Solidity Editor:  -NA-



  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