Latest 25 transactions from a total of 2412 transactions

TxHash Age From To Value [TxFee]
0x0a49eb969be41e68ca79245008c3329995bcc2f9070ef9c8f2e82e06a015065d1 hr 30 mins ago0x28049f49903c4ba5a8d2ebd5d720ca5c1ba7ddac  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x60b2a5d97a19232dc2958983c1a42225b1dbe1836e110f60655b70967f577b291 hr 34 mins ago0xe58d9286952c275ba00a3ed284a789b1060f8456  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x3134499ecee3df63d2e23e2ccbbebfa2d4bd219ca3fb7b138c7e1b5b9be264632 hrs 22 mins ago0xc235879dc7b013f05eb6679788e3c4b549066a58  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x81bfba8a1776b6cbce0cccafe9b7a590952819975f25fff3e7903e8d75ecfb123 hrs 12 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x4d516ca4f84328347f91e06a34f54b800f99acfd3b59784c9b9efbde2383f9a63 hrs 16 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xfc32e60e4a35b338103b0c80aa9ee380b4ed3ead4a86c3411593f518ea0323b23 hrs 17 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xee44c12f45f415fb9a0d6651b29791d83a9c11b92352b6a3fd1548cbce2f721c3 hrs 18 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xa15ab1e17838cb61cee1eee0a2e22a0288cb56c17de281163224ff1d38b91a453 hrs 20 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x07d6573ca7b573164311f4aa66cd51c6db9fb0f03dfb12d6e1f649833288fc774 hrs 2 mins ago0x90247aa86bda18e5d5e0c69882a0be1055caedd3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x4b987c376432c461a05841fee90c7a98e737c5961d865d56473b1e4632b199105 hrs 3 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x5522f403c9ee918fd096d2d592ff48a6a0a4d98018218439da34c6be02848cf65 hrs 41 mins ago0x60ad8863cd0ce6ea5a25cdc228bcd17b19268cbd  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x1e6c680e9cf61bf039aaf74d51d0a0888c95fbf2ba12dd7ed5d66f1e240c136020 hrs 2 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x8c906a1a71186592169ca45768bff35bfbca7f864adb15a7b2b74829814be4f620 hrs 7 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x4e7a229878fc31438950192e421ed62ea4032964526f35f53ccb6611f35c3b6420 hrs 9 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x901d9fa3d48a77bcbc555c18448b672f384f9a72b60fd8611473cf31c0f05b1d20 hrs 12 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xfc8f6c4dbe6c70b5021f53a69f40193a4ead30abe38cfd7577c9ba5bafd3fe5520 hrs 15 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x67e038d1e7df526ad9760e1c9c58e16cdc85532ffb2dd98a6017464011e471ec20 hrs 16 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xc411919e8ea641da8ac669c26a74977a3b618958cf163e0554a788228c8e510720 hrs 18 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xdd60917c14a4a3a72ee9bf11e721ee9383bf77abbb6429b1b186d1a8ea29ff6b20 hrs 20 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xcf672f984278b8de83bdba5b702b02eaa2ac5b0be34d581ec594aee92989a26420 hrs 23 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x9bb590c5401cfd25dd94fdeb9974f9d4d4d92221fb7da136174cbb392be1d28520 hrs 24 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x3442d47e41d2bb855e1dd86d195caa2ad736b2a8a64ff896bd8463753df5cc7b20 hrs 26 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xa70c43a46b4520d85527d5e0e2229db8c7acdb114a79d22bd2517e0233902b0821 hrs 29 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x7b7c7ae5b19aff85615642aaa28fa8506eefdeab204eb42143ba0cdbf381cb2b21 hrs 32 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x940363b9c94a573911db990cdfa6413944aefbbdca6cf0f950ca9e8f187c4f2b22 hrs 35 mins ago0xc235879dc7b013f05eb6679788e3c4b549066a58  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
[ 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
0x3348bbde6e7e50a02e4196605405b9673dbc5928ea242b87665268f10989659c70853573 hrs 23 mins ago0xdfa90104c61bb0be12e93c9d5e205b95264872f70x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x43dd283b09c7c72a41e2c42829c281151b49cae8e1afaf41af35ba4a31f021eb70840448 hrs 56 mins ago0xe47ac46eec3e830db1ba7a893053522303ecc7a80x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x3be63098888fca48f8f1b68a69f6fdece31ec59f5679ca810fe184c413db901670740872 days 3 hrs ago0x90437880ec51a3d376db9bacc88ae011b9da1bcb0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x74b513e18bc9a2976fd362eb2743b278d8793aee520709ef12f9307ac7c4e21f70605134 days 13 hrs ago0x4a82c38a558ecdbc14afdc8d94eef0996b1c76d50x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x6235cdbac3fad6cc8a7f7947b35a2d281636cfcd8162a56f5bad53f0ce4cef0870592614 days 19 hrs ago0x74571475f052a569946df96beb7f4b53fe3825830x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x83fcca665e1626d5af7ecf956e1386b0259eadb3bca7a924182cb0d3dce8641a70408888 days 2 hrs ago0x6f7f59eac7a7316942e4b835db6ca4c4620102530x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x086bb84ab627e836fd5dd33b5f1bba524eaa5ecd98b824cc7d765cc934471bff702916210 days 4 hrs ago0xf2c74132288595dbc2b6af7ba42dd90a2257ebcc0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xf0e10ae9018bc57b182579cba525ccee8d43a5f5a35d980f935650c32f8c0197702915710 days 4 hrs ago0xf2c74132288595dbc2b6af7ba42dd90a2257ebcc0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xf0d527f39efe55bc354ad5dcbff89664d6254f55bba64b7d6b151367aa7831f3702915010 days 4 hrs ago0xf2c74132288595dbc2b6af7ba42dd90a2257ebcc0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xe976c67ac74a0ee1c0d53bac2a756d82f239e7fb2dceaaa3e0cc31312161eff3702419711 days 2 hrs ago0x6f7f59eac7a7316942e4b835db6ca4c4620102530x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xbe3d0c16e6d0561e6cf2e0e6d2834f509c6880f42e99b26735192afba818fefa702419711 days 2 hrs ago0x6f7f59eac7a7316942e4b835db6ca4c4620102530x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x7670551a0606cad7073f63b69652537b1757c5cd0d757730982e687c09ec6855702405811 days 2 hrs ago0x6f7f59eac7a7316942e4b835db6ca4c4620102530x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xc28b8c8676213c462966a1c1d9f5dfaaead6f6193ae53ae88918cdee018e313c700102915 days 5 hrs ago0x6f7f59eac7a7316942e4b835db6ca4c4620102530x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0xf69a245ff11c3c1eb6bf2da0cc1681b1dd46ec3b73e14cb16b2c013ed0ba7159699034317 days 1 hr ago0xc7b27f19d90a1365cd8267bf112f6d315f0636bf0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0xcf80586b4a4e7cab77834a16ba67076dc3625ea540cffd6834ce1a3b35e54cf6699032917 days 1 hr ago0xc7b27f19d90a1365cd8267bf112f6d315f0636bf0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x0ed551877c514e6afd79db0eba16abe2f5f6e1595ce05c1b31b5775d5b2dc7dc699013117 days 2 hrs ago0xc7b27f19d90a1365cd8267bf112f6d315f0636bf0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0xa757c49168532b3c878bc39023a046f488a9ac3cfc4ac8b9917df528a275ea08695455423 days 2 hrs ago0xe2859a9a61d28c981751cb214e170a96438d4d940x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x9b24c95c5229baf9d403146c586c3281b00b408e9f838c298c2041535d3acfaf694341224 days 23 hrs ago0x2c8269ec894763cd1b5ea18162be10682f22a20f0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x70f72f9f6cbdf70ede31ae6107316d0a927621274f7c42ac4cf30875f8dd2817694268725 days 2 hrs ago0xdfa90104c61bb0be12e93c9d5e205b95264872f70x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x0416e2e1de4d5bd11054a9856618966f22b2e624a17adf18bc4df5cba5816228694239525 days 3 hrs ago0xdfa90104c61bb0be12e93c9d5e205b95264872f70x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x32afe9845488fcc284fbb19cded14fc8126b2cd3d30a6b46766b3594822ed583692524528 days 1 hr ago0x40c9db7b665da42edf9effa8228d9e1e049463410x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x3f844798c6c0ee622864ed6393f09c1867cea19e0812f897e4d3ce9bd81e4dfb692522928 days 1 hr ago0x40c9db7b665da42edf9effa8228d9e1e049463410x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0xd48b232a3f2c3f4f7b0f2c2a7eec9ab42b83a5e28f610306e7d394e8a8aa6813691932129 days 1 hr ago0xddb40308001820198fb4fa57e872ac264d361c9c0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x879f0de7e6e6fbef2388f495956541b25446ac686fc93b1592b56ebedb451474690743131 days 2 hrs ago0xc7b27f19d90a1365cd8267bf112f6d315f0636bf0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x1bb459d36d4229237089a7b26a5926aa2a4125978aabaaaab091f2ec6b3e8f99690736131 days 2 hrs ago0xc7b27f19d90a1365cd8267bf112f6d315f0636bf0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
[ Download CSV Export  ] 
Contract Name: Wallet
Compiler Text: 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 transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.