Latest 25 txns

TxHash Age From To Value [TxFee]
0xa635afb60cd6729a65c0d357785f95f3c80360f73d59cdc3ed7943359fc4aab8323 days 2 hrs ago0x79c9582ec62a7874e3bb4b0fb85a2fc233bed0ee  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.00075488
0x4420f387cf89b5f8ab27155efc853ef7efd4762b46ef1e32a07c89249e2f67d9323 days 2 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.00350136
0x215febbbbfc4b842c09c0d56e65b2372eed4765d47e4433054683dea54fa24ff323 days 2 hrs ago0x79c9582ec62a7874e3bb4b0fb85a2fc233bed0ee  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.00075488
0x7d2cd8c4537d34f2d76366aa33c3e3d2b28e648a2ca0049db63a64f7306f3e3f323 days 3 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.00349752
0x0f121973ef417f188faa49154782db3bd0f32402764cfaa4abf014d8fed54069323 days 3 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.00112358
0xf763095ae3c7e800b1af9f9af4a6faffd8010452699551d5b376bc4871a71355323 days 3 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.00042754
0xad196af1ff99785193b1f6ad92996c682e63883cc9f55186abfc9a8097f87743323 days 3 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.0034988
0xd05385e9fecd0b392456cd7908079fccd5ce3381e6804cd381fa7d52fcfcc20c323 days 3 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.00042882
0x59812a2c2af6153faf20a134d357e1214f834f28067ab6c98be25d9eb524e664323 days 3 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.00350136
0x0b50fa78de76ac36f55cae8c9fb26b7664094b975739df57fbd5267242a00213323 days 4 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.00042882
0xaac9f65c4a8dbd5e5a23fec3b39beb4fe581f4c3879eabf9bb82d9fea772ae1f323 days 4 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.0037032
0xd87ff37cc2d39d13862a50d9bfb26cea28c2f4d5954d3f198737211e9678410c325 days 2 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.006171789
0xe7e282581147842bd0994afad4ef67d610a5d5f8ff7027171c25002e80900bc5325 days 2 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.006171789
0x5c8724fa73457ac56907195c569b8d9c2cc2afa1c110fa3481877af6d4339a65325 days 2 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.006171789
0xfef8f85bc1d12e4bd8d1bca3520942d348b3356cbecc65d1ed5888ca99b25815325 days 4 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.00075488
0x8ac07fe2612b0d738f314b44922cfd5ffb9b31218a768c9bbfb3911394f74821325 days 4 hrs ago0x79c9582ec62a7874e3bb4b0fb85a2fc233bed0ee  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.003569328
0x4e0922d4649deb048631bb1862244179072c2a3b5c86cf8f4cc60e0976c50db6326 days 7 hrs ago0x79c9582ec62a7874e3bb4b0fb85a2fc233bed0ee  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.00075488
0x3649fef1ae10ba543c83c8e2abd00fb75817190fe0044610db69eda24b64a2c3326 days 7 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.00349752
0x440d6dae7da3554e11bce0573351e7888359b9cb10e7926b0ebc57608477f7c7326 days 7 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.00102542
0x1fcc6d4c639d3f2c988b0819333f285717be3e9654efc9102cac3dce4d0b36b1328 days 21 hrs ago0x79c9582ec62a7874e3bb4b0fb85a2fc233bed0ee  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.0039132
0xb868733c1601e8fe315c19781c6bdeff33777422e4644245229fa47bccf59f3c328 days 21 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.0076118
0xefa4e3a57deb1197319df839da0cd8bdeaea3e3fc80c120c1fdbf455835855d4328 days 21 hrs ago0x79c9582ec62a7874e3bb4b0fb85a2fc233bed0ee  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.0048052
0xac3f48d0a6a7ebcc123ee9cee1dfcdc3ff7abfe6444abf4015d7c2b3ca96eec3328 days 22 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.00349752
0x2e0ab76936b95634fb7317555b292cb8511fcec453463ed47b836d356d9e5236329 days 2 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN   0x7357fdb8420a4066305ab9a586a3c86a3edf22b30 Ether0.00132542
0x8b38fde2ec24e5f4714ca5d862dddbe8820fd61f0e223fd35f3f3d07363a60f2330 days 7 hrs ago0x6e95d8d04b0dfbb87baeb136a460b442e1f3393c  IN    Contract Creation0 Ether0.042397908
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Note: There is limited (beta) support for tracking Internal Transactions on Rinkeby

 Latest 25 Internal Txns, Click here to View More View All
ParentTxHash Block Age From To Value
0x28650623a20ab20f9b51cef5a4b20b19df849c5bb665f7b560f1e3297d59e220854227315 days 17 hrs ago0x65e4af57c2e98de18b896560afb646df0148795b0x7357fdb8420a4066305ab9a586a3c86a3edf22b31 Ether
0x498041300dd108770f446e8cfacdce4274eff9f8a2bfcaabba00f8b971800fb7854227315 days 17 hrs ago0x65e4af57c2e98de18b896560afb646df0148795b0x7357fdb8420a4066305ab9a586a3c86a3edf22b30.6 Ether
0xdff6a17352f6f2792b36ffb0af4a23adff9c136eb1573aef500e9f4437dafb4b854174315 days 17 hrs ago0x65e4af57c2e98de18b896560afb646df0148795b0x7357fdb8420a4066305ab9a586a3c86a3edf22b31.1 Ether
0x7d341eea2d8bfbff27479d7d7e58da66af402edc77b83818194e513641d3ce17854098315 days 18 hrs ago0x65e4af57c2e98de18b896560afb646df0148795b0x7357fdb8420a4066305ab9a586a3c86a3edf22b31.5 Ether
0xe3aefd73cd74bcea12e4688c874dc70fa0c20c19dcb07032e8ea26e1d31493f3846136317 days 3 hrs ago0x070d74f3fe90c9ee9f68a4f82438bbd3e8483d8d0x7357fdb8420a4066305ab9a586a3c86a3edf22b35 Ether
0xcfc02ad7a08b84a224fe8a77d2e1cff44a5c4f40d063487a668876e09b7e74f7846074317 days 3 hrs ago0x070d74f3fe90c9ee9f68a4f82438bbd3e8483d8d0x7357fdb8420a4066305ab9a586a3c86a3edf22b31.5 Ether
0x443d086a4c33586d44e6d28c1ccb1c875839b515efa5505fc331610972ed5bd1846065317 days 3 hrs ago0x070d74f3fe90c9ee9f68a4f82438bbd3e8483d8d0x7357fdb8420a4066305ab9a586a3c86a3edf22b31 Ether
0x8a04995e8ec9da00f7eccd463ecf125e7ef35e10498dda0d62767ae4ab2bcfc0845052317 days 7 hrs ago0x4fed0e069a3c27a5903f77c52dfe2e73132436630x7357fdb8420a4066305ab9a586a3c86a3edf22b31 Ether
0xcea536d1b542308761409a86eaf01c513cded7cb5e92e2decfbc3c44ed191710842214317 days 19 hrs ago0xc1c313cb65b00a7fd0d3736ba54edc5d5b53e8230x7357fdb8420a4066305ab9a586a3c86a3edf22b30.00001 Ether
0x6ba0ddc0bd316785209c2e53731542112830f4472754abffec6f9d2aa070efc7842176317 days 19 hrs ago0xc1c313cb65b00a7fd0d3736ba54edc5d5b53e8230x7357fdb8420a4066305ab9a586a3c86a3edf22b31 Ether
0x6ea3b0eb7e0f6085b98e0d8fde716ac1e4141943ad6e2b61601f35b659b125b7842163317 days 19 hrs ago0xc1c313cb65b00a7fd0d3736ba54edc5d5b53e8230x7357fdb8420a4066305ab9a586a3c86a3edf22b32 Ether
0x2580aecc904e09ec425729dbeff16d721a6b410bb3bd25e0a8aabc2b85ef4fc4839349318 days 7 hrs ago0x5965bb923f48550db5b50b5d072745f50beb40740x7357fdb8420a4066305ab9a586a3c86a3edf22b30.05 Ether
0x292ccd5c9c3e7f526cb374374a77897b4269b36a6e53189d3d0717b191db9810837061318 days 17 hrs ago0x24940a4bb8508b77e4c6cf5a2692b248f87c289a0x7357fdb8420a4066305ab9a586a3c86a3edf22b30.2 Ether
0x298a54564cf50a0c8ffa47c0a325e5048d330128b8c794bd2d0c2662d59a9cdc837056318 days 17 hrs ago0x24940a4bb8508b77e4c6cf5a2692b248f87c289a0x7357fdb8420a4066305ab9a586a3c86a3edf22b31.5 Ether
0xd02a3f66ef261508454ff861b2eabee39c372eb68782df5c293919093986d8e0836651318 days 18 hrs ago0x24940a4bb8508b77e4c6cf5a2692b248f87c289a0x7357fdb8420a4066305ab9a586a3c86a3edf22b31.2 Ether
0x60b3689c9d5b031495be5637b671a3e3e984d90cc7f2f70444a81c5f801e04a6834047319 days 5 hrs ago0xa52ab6708cfa61c2de076d361732b2ef49fd0db50x7357fdb8420a4066305ab9a586a3c86a3edf22b31 Ether
0xdd48c6fee2e9ae5d9a0d663b56dc59f9db096557a2e298bb3fb320e0c8af012b833929319 days 6 hrs ago0xa52ab6708cfa61c2de076d361732b2ef49fd0db50x7357fdb8420a4066305ab9a586a3c86a3edf22b32 Ether
0x644fea37caed1920beb5751a5ceeb324f9b90c6d8b60bf1a7bdf0fb007ae0fa6822088321 days 7 hrs ago0x8fa7a16ab47a597a773cb500e13137aab1ac12b20x7357fdb8420a4066305ab9a586a3c86a3edf22b30.5 Ether
0xc82fa6740182797f76a3c9c129536f3d9685f52ac8b646196aadf959d14feb73822075321 days 7 hrs ago0x8fa7a16ab47a597a773cb500e13137aab1ac12b20x7357fdb8420a4066305ab9a586a3c86a3edf22b30.5 Ether
0xa64785253dee2522529f1ae49c0c2c0524f3a03bc4ae22487e5b2d92e446352e817430322 days 2 hrs ago0x56ae69b149fbf66084e8c8cf082b00baf1ce08500x7357fdb8420a4066305ab9a586a3c86a3edf22b31 Ether
0x8ae0e780b125bc43202c2704ffd74ca8e4dd717274cdd7daa4be1c631598a020817427322 days 2 hrs ago0x56ae69b149fbf66084e8c8cf082b00baf1ce08500x7357fdb8420a4066305ab9a586a3c86a3edf22b32 Ether
0xc77deaea61769640bedc040821ed7c1f18336653eec21dcee461fb2b8dc6cdc0817310322 days 3 hrs ago0x56ae69b149fbf66084e8c8cf082b00baf1ce08500x7357fdb8420a4066305ab9a586a3c86a3edf22b31.5 Ether
0x482d1ba5424d6f9bbc96cb060284a7dca02ddcc5f786b59ba979891b3aa3d81e817304322 days 3 hrs ago0x56ae69b149fbf66084e8c8cf082b00baf1ce08500x7357fdb8420a4066305ab9a586a3c86a3edf22b31 Ether
0x2b27a3e7a606ddfc0c0876dd5e5ced648822a03732dd43929ffeb273bb4b0348811970323 days 1 hr ago0xa61e055e91fead6127f81cd1b9e6098ebcb9895d0x7357fdb8420a4066305ab9a586a3c86a3edf22b31 Ether
0xe48aea05820a1c7dac4a3e7ef31cf72ba6eca7ad756181bdf966dcc8ee25aacf811926323 days 1 hr ago0xa61e055e91fead6127f81cd1b9e6098ebcb9895d0x7357fdb8420a4066305ab9a586a3c86a3edf22b35.5 Ether
[ Download CSV Export  ] 
Contract Name: Wallet
Compiler Version: v0.1.7+commit.b4e666c
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
6060604052600261010860005055604051611b51380380611b51833981016040528080518201919060200180519060200190919080519060200190919050505b805b83835b600060018351016001600050819055503373ffffffffffffffffffffffffffffffffffffffff16600260005060016101008110156100025790900160005b5081905550600161010260005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005081905550600090505b825181101561016e5782818151811015610002579060200190602002015173ffffffffffffffffffffffffffffffffffffffff166002600050826002016101008110156100025790900160005b508190555080600201610102600050600085848151811015610002579060200190602002015173ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055505b80600101905080506100c2565b816000600050819055505b505050806101056000508190555061018f6101ad565b610107600050819055505b505b505050611992806101bf6000396000f35b600062015180420490506101bc565b9056606060405236156100f8576000357c010000000000000000000000000000000000000000000000000000000090048063173825d9146101605780632f54bf6e146101785780634123cb6b146101a457806352375093146101c757806354fd4d50146101ea5780635c52c2f51461020d578063659010e71461021c5780637065cb481461023f578063746c917114610257578063797af6271461027a578063b20d30a9146102a6578063b61d27f6146102be578063b75c7dc614610307578063ba51a6df1461031f578063c2cf732614610337578063cbf0b0c01461036c578063f00d4b5d14610384578063f1736d86146103a5576100f8565b61015e5b600034111561015b577fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3334604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b5b565b005b61017660048080359060200190919050506107c4565b005b61018e60048080359060200190919050506109a5565b6040518082815260200191505060405180910390f35b6101b16004805050610a91565b6040518082815260200191505060405180910390f35b6101d46004805050610b38565b6040518082815260200191505060405180910390f35b6101f76004805050610b42565b6040518082815260200191505060405180910390f35b61021a6004805050610adf565b005b6102296004805050610b2e565b6040518082815260200191505060405180910390f35b610255600480803590602001909190505061066e565b005b6102646004805050610a88565b6040518082815260200191505060405180910390f35b6102906004808035906020019091905050610f0e565b6040518082815260200191505060405180910390f35b6102bc6004808035906020019091905050610a9a565b005b6102f160048080359060200190919080359060200190919080359060200190820180359060200191909192905050610b9e565b6040518082815260200191505060405180910390f35b61031d60048080359060200190919050506103c8565b005b610335600480803590602001909190505061090f565b005b61035660048080359060200190919080359060200190919050506109e7565b6040518082815260200191505060405180910390f35b6103826004808035906020019091905050610b4c565b005b6103a360048080359060200190919080359060200190919050506104ca565b005b6103b26004805050610b24565b6040518082815260200191505060405180910390f35b60006000600061010260005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549250600083141561040f576104c4565b8260020a91506101036000506000858152602001908152602001600020600050905060008282600101600050541611156104c3578060000160008181505480929190600101919050555081816001016000828282505403925050819055507fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b3385604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b5b50505050565b600060003643604051808484808284378201915050828152602001935050505060405180910390206104fb816112db565b1561066757610509836109a5565b156105145750610669565b61010260005060008573ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005054915060008214156105565750610669565b61055e611777565b8273ffffffffffffffffffffffffffffffffffffffff166002600050836101008110156100025790900160005b5081905550600061010260005060008673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055508161010260005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055507fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c8484604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15b505b505050565b600036436040518084848082843782019150508281526020019350505050604051809103902061069d816112db565b156107bf576106ab826109a5565b156106b657506107c1565b6106be611777565b60fa6001600050541015156106d7576106d561153d565b505b60fa6001600050541015156106ec57506107c1565b60016000818150548092919060010191905055508173ffffffffffffffffffffffffffffffffffffffff1660026000506001600050546101008110156100025790900160005b508190555060016000505461010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c382604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b505b50565b600060003643604051808484808284378201915050828152602001935050505060405180910390206107f5816112db565b156109095761010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549150600082141561083c575061090b565b6001600160005054036000600050541115610857575061090b565b60006002600050836101008110156100025790900160005b5081905550600061010260005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055506108b2611777565b6108ba61153d565b507f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da83604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b505b5050565b600036436040518084848082843782019150508281526020019350505050604051809103902061093e816112db565b156109a05760016000505482111561095657506109a2565b81600060005081905550610968611777565b7facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da826040518082815260200191505060405180910390a15b505b50565b6000600061010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050541190506109e2565b919050565b60006000600060006101036000506000878152602001908152602001600020600050925061010260005060008673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000505491506000821415610a505760009350610a7f565b8160020a90506000818460010160005054161415610a755760009350610a7f56610a7e565b60019350610a7f565b5b50505092915050565b60006000505481565b60016000505481565b6000364360405180848480828437820191505082815260200193505050506040518091039020610ac9816112db565b15610ada5781610105600050819055505b505b50565b6000364360405180848480828437820191505082815260200193505050506040518091039020610b0e816112db565b15610b20576000610106600050819055505b505b565b6101056000505481565b6101066000505481565b6101076000505481565b6101086000505481565b6000364360405180848480828437820191505082815260200193505050506040518091039020610b7b816112db565b15610b99578173ffffffffffffffffffffffffffffffffffffffff16ff5b505b50565b6000610ba9336109a5565b15610f0557610bb7846116d7565b15610ca0577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd0043385878686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a18473ffffffffffffffffffffffffffffffffffffffff168484846040518083838082843782019150509250505060006040518083038185876185025a03f1925050505060006001029050610f06565b600036436040518084848082843782019150508281526020019350505050604051809103902090508050610cd381610f0e565b158015610d3357506000610109600050600083815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15610f045784610109600050600083815260200190815260200160002060005060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555083610109600050600083815260200190815260200160002060005060010160005081905550828261010960005060008481526020019081526020016000206000506002016000509190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610e0857803560ff1916838001178555610e39565b82800160010185558215610e39579182015b82811115610e38578235826000505591602001919060010190610e1a565b5b509050610e649190610e46565b80821115610e605760008181506000905550600101610e46565b5090565b50507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32813386888787604051808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b5b5b949350505050565b600081610f1a816112db565b156112d4576000610109600050600085815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156112d357610109600050600084815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610109600050600085815260200190815260200160002060005060010160005054610109600050600086815260200190815260200160002060005060020160005060405180828054600181600116156101000203166002900480156110765780601f1061104b57610100808354040283529160200191611076565b820191906000526020600020905b81548152906001019060200180831161105957829003601f168201915b505091505060006040518083038185876185025a03f192505050507fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a3384610109600050600087815260200190815260200160002060005060010160005054610109600050600088815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101096000506000898152602001908152602001600020600050600201600050604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156112005780601f106111d557610100808354040283529160200191611200565b820191906000526020600020905b8154815290600101906020018083116111e357829003601f168201915b5050965050505050505060405180910390a1610109600050600084815260200190815260200160002060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000506000905560028201600050805460018160011615610100020316600290046000825580601f1061128957506112c6565b601f0160209004906000526020600020908101906112c591906112a7565b808211156112c157600081815060009055506001016112a7565b5090565b5b50505060019150506112d6565b5b505b919050565b600060006000600061010260005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549250600083141561132457611535565b610103600050600086815260200190815260200160002060005091506000826000016000505414156113fd57600060005054826000016000508190555060008260010160005081905550610104600050805480919060010190908154818355818115116113c3578183600052602060002091820191016113c291906113a4565b808211156113be57600081815060009055506001016113a4565b5090565b5b5050508260020160005081905550846101046000508360020160005054815481101561000257906000526020600020900160005b50819055505b8260020a90506000818360010160005054161415611534577fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda3386604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001826000016000505411151561150757610104600050610103600050600087815260200190815260200160002060005060020160005054815481101561000257906000526020600020900160005b50600090556101036000506000868152602001908152602001600020600060008201600050600090556001820160005060009055600282016000506000905550506001935061153556611533565b816000016000818150548092919060019003919050555080826001016000828282505417925050819055505b5b5b505050919050565b60006000600190505b6001600050548110156116d2575b60016000505481108015611580575060006002600050826101008110156100025790900160005b505414155b15611592578080600101915050611554565b5b60016001600050541180156115c45750600060026000506001600050546101008110156100025790900160005b5054145b156115e357600160008181505480929190600190039190505550611593565b600160005054811080156116145750600060026000506001600050546101008110156100025790900160005b505414155b8015611637575060006002600050826101008110156100025790900160005b5054145b156116cd5760026000506001600050546101008110156100025790900160005b50546002600050826101008110156100025790900160005b50819055508061010260005060006002600050846101008110156100025790900160005b5054815260200190815260200160002060005081905550600060026000506001600050546101008110156100025790900160005b50819055505b611546565b5b5090565b60006116e2336109a5565b1561177157610107600050546116f6611980565b111561171b57600061010660005081905550611710611980565b610107600050819055505b610106600050548261010660005054011015801561174757506101056000505482610106600050540111155b15611768578161010660008282825054019250508190555060019050611772565b60009050611772565b5b919050565b60006000610104600050805490509150600090505b8181101561187857610109600050600061010460005083815481101561000257906000526020600020900160005b5054815260200190815260200160002060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000506000905560028201600050805460018160011615610100020316600290046000825580601f1061182a5750611867565b601f0160209004906000526020600020908101906118669190611848565b808211156118625760008181506000905550600101611848565b5090565b5b5050505b806001019050805061178c565b611880611885565b5b5050565b60006000610104600050805490509150600090505b8181101561193857600060010261010460005082815481101561000257906000526020600020900160005b505414151561192a57610103600050600061010460005083815481101561000257906000526020600020900160005b50548152602001908152602001600020600060008201600050600090556001820160005060009055600282016000506000905550505b5b806001019050805061189a565b61010460005080546000825590600052602060002090810190611979919061195b565b80821115611975576000818150600090555060010161195b565b5090565b5b505b5050565b6000620151804204905061198f565b9056000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000aedd884a464e9e6bfaa89614cec52a42c2f8379e0000000000000000000000001214485a156661f054dc83aa7254a47797a5c1b80000000000000000000000007b45fd77334a98dd0203edb2c81222bee0f9f794

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward