Sponsored:   Color - Revolutionizing the Dapp Ecosystem, Bounty & Airdrop, Get 240,000 COL NOW!
 Latest 25 txns from a total Of 118 transactions

TxHash Age From To Value [TxFee]
0x1669fd54493d2269798b051a8c4c953217566b11266ca3918463cbb4d51c495712 days 21 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.006034874
0x4b524744be12f7f1190c23a96ac0843f0cc4dd6bd03486be438a3edeca667b9746 days 53 mins ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.003375438
0x3133393cba463ea6b4f85e16ea1893030a3951ca8fc1d50da1eaf9de84bbcd7558 days 20 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000051143
0xd7a8757148884e21b9deb60360e3d3e7460e330af77df2881362b7986884bf6794 days 3 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.00052694
0xe04390f20e35a502a12b32429ba37b1a6204767cf65d5ae2f0322837ae6d1f8695 days 5 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000460287
0x566484092eb754ebedb679c37a8279bb5529d57e7f30f83e2c9cd9837f9f8177108 days 23 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000153813
0xc3403ead2fe1b45c942eb9a6e1f14a9e0ff12aa621ff578a10677c0e49ff861f117 days 5 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.00010267
0x5ea3fd64c9d7d41a45e33016889a9986d14d8a919e0d667bebe5cf910100de91118 days 28 mins ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000154005
0x98d28bdefe91dfa88207de0932ea41d85117ceca546851738366e32fa55fe067119 days 18 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000102286
0x6e5d1fb25867f8fd0d1dfc1269920306d3aac89b12b27f26dd9f493309428b38139 days 3 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000066143
0xc2384eb6556b35bc6c623188c6f8f791748ad5e9bb7e099ec47492fdcb5121cc139 days 21 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x49ed20f3e7a4b430f77f8795e3d474f41a4ed72a470103650ef70082a03da7ad139 days 21 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x69fbfda5a531a4ba671dc9985ef1869a69a739a0ba555cb3997a42e26ee1e656139 days 21 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.00078666
0xef60a2153a42ad4231474003f53c42a8cefce966bf6bfffc4ecdb15e7086c029139 days 21 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0xa507effa0c82bc0760636d5defa2fca61a17a1c969792784239508beb5dd73c9139 days 21 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0xc428c2316aaed6c2b00797369943622152f8cdd3761f067a204777735a1fd274139 days 21 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x0c1c4e9ce7fd83bc4f6a231a71758361e882f58f85d06e5428d33e512d635a61139 days 21 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x9bde9e5a2164d4f439f25f88627043078885824b063b6b8541a181a7b7ad2c58139 days 21 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x82f103b17ebfd2ee752164eb9023ce976055e53de6029c471c8fa439fe75a0ad139 days 21 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x57371a6930b75ef756192bb74d8b41a697d7ba20b4c9a486f859d230a04f9e7e139 days 21 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x3bf16a8b073fc84302a606182490447442722ee8023dd125672bfd0cbf7d6726139 days 21 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x29348a2ac29d1cf722f224dccfeb7dc81e321845c7e1b83c693ceec6d7e18b0a139 days 21 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000684936
0x13e3816838ca3e311e390631647570b7d24df8a6293a7504c51f2e508de9a901147 days 20 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000204572
0x3db1e54fef8b44200bd7ecf98530168c177154a166ffbcc88dc03985aba53ae5169 days 47 mins ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000164204
0x18a12a609c14dcfff88c6b631647caa262c5663ecca000adba5c11259a1c7e40169 days 1 hr ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000210776
[ 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
0x267693e91e9bc95c2fb96a2477b191adcf1c8ec1b1aefdeaf9d26c72b21bac2d618576440 mins ago0x58ad1baf107b61d5e2d1c2057104b4158c803ee90x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xe3cc09515555d3b8dbfeee4da6a0e980a2a5cef40fca1a97ba3431e30f26aaa061856381 hr 6 mins ago0xf7312d1af91520fe769413e187fbe656aa4183d20x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x04cb22d3f0add0465b6e7204b4a6955c101c05cf6b92b55ed98e72eb567800c0618283312 hrs 24 mins ago0x58ad1baf107b61d5e2d1c2057104b4158c803ee90x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xeb118091d12a7f8232e15185f1fa9899a37b1d1c5e73f539e0ba4a43997f772b618118719 hrs 1 min ago0x3eb0d4db5840c358c169941e469ab5bf38b1e78c0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x32cc75ca3d74dae1d0842649a3cf83bc2d4ae1364b0d91f516216f348812db6a618109519 hrs 25 mins ago0xa29ab72b1c5adf327becc5b050c3d041575377580x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x1bcc74cfefedaeb636b32538bb420e541e799b5cc9514d1fb6fcfc505091223661798531 day 34 mins ago0xf7312d1af91520fe769413e187fbe656aa4183d20x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x71fda18d2b7ec703421bf71f690fe175ef472f4255d702818edf42784e00cf2f61796221 day 1 hr ago0xeddfddc20d3dc1d1d686364145d8918ba49f6b1e0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x4e228d39fc873df0137caa1d5c30944485d89ccf7b9bdd8df04ce594470676cc61745341 day 22 hrs ago0x0f4e72dc582d270cecf7d2ea9e06e694c98c85d10x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x2a3b1ee106ce3dde46d97aa86f52448fe44ec731b28eaea7c3f290287b8594d261744261 day 22 hrs ago0x0f4e72dc582d270cecf7d2ea9e06e694c98c85d10x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x9321765422c60593ce92402fca072c4aee66eadee70420dc2c000f8928bea1da61742701 day 23 hrs ago0x4349448c26e97949bfc0de20c597de7503bcbf8f0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0xfff43b89e36dbbce8c512214e13054674aae0651bbb3ebec12815557a58673c161694572 days 18 hrs ago0x228996f54346637392fc7900a715d346a68572bd0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xb23601a4c46443311a414379ced5b4ea81bb292e7896c3cba7a19a288a1376ae61676993 days 1 hr ago0x3d84be69e3dfa9b19a282f8313ae4350a0eb46ed0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x427228a626324296ed92242eeb401ea3e7055d644ecacd54cce2fea8e5b783d961676673 days 1 hr ago0x3d84be69e3dfa9b19a282f8313ae4350a0eb46ed0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x5ab79aa0302fec549f33aee0d1607a2d4981eab0e47b53558aedf7cd3e7b309f61673423 days 3 hrs ago0xa29ab72b1c5adf327becc5b050c3d041575377580x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xc0f56835da8be765f33daa9a6dccd0e9f86830e47928354c9c6e93c11e646c0761637903 days 17 hrs ago0x98b60a23e676c05ad18b7baae6b56e40cb6bc4820x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x2d39b97ba3c14015633a1d5c5dbe198c2abd800fc72a237191fad0ababb73bae61637693 days 17 hrs ago0x98b60a23e676c05ad18b7baae6b56e40cb6bc4820x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xc868a9d140da1f8fd283272637e53b446953405f1ad70e302cdf1878becfeb2161629233 days 21 hrs ago0x972a13d92bd3e7d4b4c9253a455d3966cc4f61ec0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x5888423e2df4dd3616d47f9c73f8e3d6979a8a2f9c83a98bc1d0e5564c1f106a61627943 days 21 hrs ago0xca4be29d0f743d921d83dc03d622bd004391f7f80x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xd47f23b0ed8a369ac584b3fe3430a223d845797a63a4057213479eac8af4a6c961627813 days 21 hrs ago0x8a9f90447c79781917455f6b1c6ae2b8c56762e50x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x9874a4e8daa4fc71a70444b278ea31d0c557978031640b42e347f9d4c5c6bf8f61627813 days 21 hrs ago0x3d84be69e3dfa9b19a282f8313ae4350a0eb46ed0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xa95ef7fd87ff0b625a4eb81dae7363b6c05cfe361ed8545b3c820e44f06fe89961627813 days 21 hrs ago0x3d84be69e3dfa9b19a282f8313ae4350a0eb46ed0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x5e221227605a07b8569a328b8e956d6a960787b848570060ffeba3213e10cab161627813 days 21 hrs ago0xa29ab72b1c5adf327becc5b050c3d041575377580x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x3732b3e9f175d056002e625a2ed38f996424e73cb723079ba40d713318784a2e61627813 days 21 hrs ago0xb9fb78488471f6f41c479ef57f9e6e5232b091010x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x6a71ec4eb8673213896ed6df7edc1803f245bb1b34d5f56194965dd9fe3446ef61574214 days 19 hrs ago0xb9fb78488471f6f41c479ef57f9e6e5232b091010x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x5cc9dabd3c1742b450bc2bb4412eb0274bff6972a199f020715dfe5d82ab82b361572684 days 20 hrs ago0x3d84be69e3dfa9b19a282f8313ae4350a0eb46ed0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 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.