Latest 25 txns From a total of 708 Transactions

TxHash Age From To Value [TxFee]
0x090917e01fc555a827bb9cc9ff65c0d5ca7a4b4fa2474f39a25e90e21a9eabcf1 min ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x49f820f61dcce53c405bafcb79be0d78aca9964dc50f414c0df346aa661a04cf5 mins ago0xebb8e8161ae6f9ec962be35dcb797c3596c77b03  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xdbaeda5197085688b193cee8bf9f2932bf066323624d8a65bc1a2df31c9854e756 mins ago0x9043b613bf055a7ae973d99688b7975f6c623a58  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xd91ebcd3b49e684952e202a90807735003eb043919abe3d6bf527d504d6dace41 hr 1 min ago0x9043b613bf055a7ae973d99688b7975f6c623a58  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xe0a5ca3920bd7658099e5788df79252bc98886077f5ac4233e1bb8a64ec52cbb1 hr 6 mins ago0x9043b613bf055a7ae973d99688b7975f6c623a58  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x0b74699818e831bedee0c0801b775e94976109748f91fab36121998901b508311 hr 8 mins ago0x9043b613bf055a7ae973d99688b7975f6c623a58  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x00a4a39669fd4bb49160e444992106b4d0b7d64e6cf1d0ff08d25867d14ce6861 hr 10 mins ago0x9043b613bf055a7ae973d99688b7975f6c623a58  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x6053e3e3ce3baa5da7da110501b1051970426e67cc68a8149ed6c69140a5b3c51 hr 13 mins ago0x9043b613bf055a7ae973d99688b7975f6c623a58  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x404c989206dfa1e639c970ec8e2ee057d8d39f9a7779f43b5737a0375d641aa61 hr 15 mins ago0xebb8e8161ae6f9ec962be35dcb797c3596c77b03  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x7f2d7cbdbf45d00cd7fc50a437408bb14e771a840978524002539d90ae6ba3d21 hr 15 mins ago0x9043b613bf055a7ae973d99688b7975f6c623a58  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x02ed06eeb2bb316354c9e722b7fa2d6017515d78846ccb119f86d4f442e7d2db1 hr 20 mins ago0x9043b613bf055a7ae973d99688b7975f6c623a58  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xdf069769f036f203a0bce254194fa1e998197a69b84c0e36bc26b84d9d71d4cb1 hr 24 mins ago0x9043b613bf055a7ae973d99688b7975f6c623a58  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xf5c837d507d03c1b8fe8885992ae1d4c5b29fa026342e790f5a0fda64b0485802 hrs 11 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x4491d60d86323195c37aaa987569fe6860cc0a3781fbfaa09275b1f73b7f01632 hrs 13 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xab047143ca35ce93b0c8c7c94b78f72c00d6082fd43a37ae62b4c974907954fa2 hrs 59 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xf5a43939ab136cc9e2a0e7f1e4209e9f40680475f9da92dba1f1ce03d74249933 hrs 41 mins ago0xb1f623c192ec76882c427b109a680f4fd83a0b89  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xbd353c2270bf632a35d56181fc60bdb30d83c32a9b28de7e7a84cddc0c79b38b5 hrs 20 mins ago0x9043b613bf055a7ae973d99688b7975f6c623a58  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xbb268bd018ad6cb274e0f485b47f38eb826df492717bcd3f8ab2a5eff0dea94b6 hrs 11 mins ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x22f29d6afd4faded0779f5c5591dccd92875baffcf16a805084e4c26ca07d0a616 hrs 52 mins ago0xebb8e8161ae6f9ec962be35dcb797c3596c77b03  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x0e93aee7ea0c9cd28f2241ea18039e04989dffea7572bb2ca66120890a58050b19 hrs 1 min ago0x395c48921120b123f3121fb39222107c0296d70a  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0xf96a4a706d767b5b870c1c3d5b43bfcd118b92d8690b43ec453a5ca1e2ba054321 hrs 28 mins ago0x32f3ea4021ef98affb04799f2dd6a4a4d1ce23a5  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x83aafab63ac776b85aa5ebc0b64a3bb1ea75004b7c1b46d78c3ed147491c8fda21 hrs 37 mins ago0x32f3ea4021ef98affb04799f2dd6a4a4d1ce23a5  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x036b5f13b879a14f18b460253373f86a8b6ab3f0ef25e09d4de019d720a3c4e421 hrs 48 mins ago0x32f3ea4021ef98affb04799f2dd6a4a4d1ce23a5  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x51b83ec3b9f605244a692ae5b30b03d694c4750ab4de13bc999954f25e41b30421 hrs 50 mins ago0x32f3ea4021ef98affb04799f2dd6a4a4d1ce23a5  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.0004 Ether0.000470883
0x824e0f25a198d27dfc7ee6816a97fdb58c1bb7a520348edd35e3a36f463206fb21 hrs 53 mins ago0x32f3ea4021ef98affb04799f2dd6a4a4d1ce23a5  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
0x60c3548de65f4775dea1cfb0765b35d504bdc5926957ea200b13dc553122f7ed65351556 hrs 45 mins ago0xf1343b09ac14634e186bbb85eb2e1471e36c54400x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0xca98f4099b6ba0bdf8dd088efbe7c0fbe9269fc4968ba2f882ac292fc268a01165247781 day 23 hrs ago0x6f7f59eac7a7316942e4b835db6ca4c4620102530x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xffbb69d78ba15f8ffe09452793d3a7c09a411ddcc16de2f19ca692041485683f65240342 days 2 hrs ago0x05ad771deda66d1e163a4cb24f052e54227060a20x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x75697d488cbebe4dcfada70dfe5557e56ed7e1d99193cefbd601fa10f6137ae965240172 days 2 hrs ago0x7762d82cc1518bba8c40dd231dde58d784378e600x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x261a5845f329f109274f541af1bfb09cc85879339944c712ac288420d2f9017d65236362 days 3 hrs ago0xc7b27f19d90a1365cd8267bf112f6d315f0636bf0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x874afe164802e5861a5fd28bc589c40b5d0f9b03d6fa8b18ff11b7acc0ab6d2465233792 days 4 hrs ago0xe2ebe1b79c17f5459c8a44d15a44ce585d62f7430x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x59dfd0035b579ca02af4c370b4df8dc7af3162e3aa90f97b8db1ec97a5dd4bf465233612 days 5 hrs ago0x7762d82cc1518bba8c40dd231dde58d784378e600x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xaccdce72234e41da1ca507faf26b7a1816ab59bff2dd976c4872dd291ef3e0f065233412 days 5 hrs ago0xbcaae94369edddb2daf89d8c40020c028e0475f80x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x739b10ee36d506ed5a1c0e92644a64c781ac3d295b3133362d628fee7391facf65233212 days 5 hrs ago0x7762d82cc1518bba8c40dd231dde58d784378e600x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xb5a2512a303ae19010d8da7b911725c4d810973fc456faa4fff4c966956bdaf665232892 days 5 hrs ago0x7762d82cc1518bba8c40dd231dde58d784378e600x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xe671fcfae159d4d21079da7acd82ae3017edff7cfeeb61ffd08491867a1ddca465194082 days 20 hrs ago0x24d1388739e785d282ab89c4eaa40e6964c674fd0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x83a5b96e6d3c730bca8ce89e16afe7d757b88001d1f7488c2f76108292ad2d9065194012 days 20 hrs ago0x24d1388739e785d282ab89c4eaa40e6964c674fd0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0xe8ae1bf3c2cbc877c1b97c5a739f2736c66981d3c374f5409c5e62766d6eb37065183833 days 29 mins ago0xc410b8897e07a12583ca37c9cf300eab403602ac0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x1318c5516a629a33a800428dffd2da87d83e16ca38f4e573fbf0c069daffa3a565175523 days 3 hrs ago0x6f7f59eac7a7316942e4b835db6ca4c4620102530x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x7a6b44a42bde9b2ce78c2da4ab99e23a5a47206d59288d01b142d8beb5a4f29165174973 days 3 hrs ago0x6f7f59eac7a7316942e4b835db6ca4c4620102530x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x6193768c47764321fb0e38ffb482de3083ef86d400f1ee5390f24d9bd2b0127165174733 days 4 hrs ago0x6f7f59eac7a7316942e4b835db6ca4c4620102530x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x79c3b28aa7390f3c082dcf73428dbb849a30aee7886376015c9b305c1853278c65066304 days 22 hrs ago0xc7b27f19d90a1365cd8267bf112f6d315f0636bf0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x942ed6e893c085f88b6caca38b31442f7b502bd940b5927cfa96845f2e5959da65008745 days 20 hrs ago0xc410b8897e07a12583ca37c9cf300eab403602ac0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0xae0b53a100437f8ee51d3520ec25fad29d8386d35ccf8fa0a7237a5113fc6b6a64940686 days 23 hrs ago0x6f7f59eac7a7316942e4b835db6ca4c4620102530x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x60484fd8b5e97c3aafa5fb4898957ae0fd01869c972d75edd2b16603a8c1a9a264874438 days 1 hr ago0xf1343b09ac14634e186bbb85eb2e1471e36c54400x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0xb733f28ecf38ed956f1bb721afbfaa54ca2c578509237fc6268c91a20763d87364821738 days 21 hrs ago0xc7b27f19d90a1365cd8267bf112f6d315f0636bf0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xa89726ee6be6b353077bba7d1e59d14a98b63e8a62b454abb7b713a1b2ac768864754039 days 23 hrs ago0xf2c74132288595dbc2b6af7ba42dd90a2257ebcc0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x50c2880a7df81113035c5527e0d84d1cc289c38f4650d526f9714999b491f091647001710 days 20 hrs ago0x9ba544db042b897f11c675c5ce1f8f35c6450e810x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0xf2baf375ad11facdd60d020175cea81e1162c6493a4ebe9e26acde4e15828f74645628213 days 2 hrs ago0x877f99fa3a94dfebc3aa5e60babf0aea8f13e0a10x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x8df6eccf802e982d9b060bdfa7ef460dabdcaccf2ee7ed99e765f9bc1332ad47645626513 days 2 hrs ago0x877f99fa3a94dfebc3aa5e60babf0aea8f13e0a10x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.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.