*
Sponsored Link:   Buy your 1st Ethereum in 5 minutes. Trusted by more than 100k buyers.
Contract Overview
ETH Balance: 3,978.650067421635386003 Ether
ETH USD Value: $2,727,125.90 (@ $685.44/ETH)
No Of Transactions: 44 txns
  Latest 25 txns from a total Of 44 transactions View All

TxHash Age From To Value [TxFee]
0xb6388812977c7fd0d3a63980c39c3b7402f1df310ffff07fc3ce1b9ef24209de4 days 15 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.00102542
0x9c350eceaa569b28b4bdfeb25e21272447b7de94e4b6d47333fa4be9dfba7c8022 days 14 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.0010267
0xa46d63727b9d3bf8ba36e4c01b0936dc53fc301e82d57a42cff91aaed80edf0651 days 10 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000330968
0x15a071c2dd7f0ef7b38c1f105cd303e2e13feb469957cd6fa95b9deb7f7817ea51 days 10 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000609656
0x6354d66ac245752efb3e1b81017913c46d0348fd88ac8b715bbc6d97ce1c752952 days 20 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.00051271
0x47f46e8d2596dea88689a1d404d9799cd92f7b8443e6effa447947472e15581661 days 22 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.001076691
0xbb50a8ff6d7880b9f2e7712cfad4f6275463221bd3f94c82d88d2ba7bf81a0a074 days 16 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.001333046
0x3a35fff61c54b2d76809de53bbfd10cb74fcda1fabe0c10fffa41dfeb764435786 days 21 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.001076691
0x3fde21e18ddbdc7fa8f1145cc3a9209474c9d99cb1aa6a750df83b4195878085128 days 14 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000905938
0xc00b85f721c589a85a3a7f7b8d1c376323d88fdb786f68773ca4d460fab066e7128 days 14 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.001676554
0xb05eb8c568f2aaf8427a566407073889dfc0188b13ad70f97c3663ff8561bd88133 days 14 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.0010267
0x3eb4efa7e6b976ca21f0091ee73d7888ac79fea0469366abdf503bc6fe2e7456149 days 1 hr ago0x877f4b4cdfb3b00c987a9d5d9b9e9e462c90340d  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000513954
0x2aec7ae45fa6dc0a7a9562cf2ba4c70b414bfa21d3bd580f6de6813b2d39249b149 days 1 hr ago0x877f4b4cdfb3b00c987a9d5d9b9e9e462c90340d  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000516642
0xc4e05ccf79b7df149a64c1087ea9cefc16f148113299d511352d52c0ea471263154 days 12 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.0010267
0x187b3b8375f3386e6e0d98033071f9f1562953d3c01c2d6072ddc59489e71670181 days 12 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.001076691
0xefb9d6688fbdca7068570dda2a9f61cb6ad24540d8fa7d07c27f8c96021fc700193 days 17 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.001180705
0xe77c7f52d5af9df7bf899ac7fd1bc94fb3a1fdebce0203dad7a588dd8a4b71c0195 days 14 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.001078035
0x8a7ea4437dfd915213846d7ccb9670bdba82d6412dc6d0c41ed80cee6905311a211 days 17 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.00102542
0xfdb19293d897ba5172c8fa4a18432a261926695eaf1555240b25e5eaf56e6eb2214 days 17 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.00102542
0x2edb9b209577386c7daf26a4c01477adca77cab52e971f0baec2d99db3715746215 days 20 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.00102542
0x497308a1c1ae474c225d80ff396b101889f88d692fda35a7525f1e4be73897b6219 days 17 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.00102542
0xf3bfe46409e5f308b27019b429bebe067baf8b43c72fede31a2c852e286218c6221 days 19 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.00102542
0xfe141d543651060bc2fe3e99fe7273a6bfb2adf8d1181caf7bf3cea8ec223350224 days 20 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.0010267
0x6814f53c8c21002930c249a3189b32a3ee6d3a6f17ae25cfd5a327eaff6fb692227 days 10 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.00102798
0x3e0d1dbd3652c400604014d9148805f2c04b6defc47c80b62a42d83d6e41b578231 days 8 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.00102542
[ 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
0xb6388812977c7fd0d3a63980c39c3b7402f1df310ffff07fc3ce1b9ef24209de47124794 days 15 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0xf7459cb2a7f9655e52f0082e65c70c4646efd8331 Ether
0x9c350eceaa569b28b4bdfeb25e21272447b7de94e4b6d47333fa4be9dfba7c80460554522 days 14 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0xadd9418c1cc318ddf2fa4ad907a960d244bbbe5465.5 Ether
0xa46d63727b9d3bf8ba36e4c01b0936dc53fc301e82d57a42cff91aaed80edf06442649451 days 10 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0xadd9418c1cc318ddf2fa4ad907a960d244bbbe5485.370850976642535172 Ether
0x15a071c2dd7f0ef7b38c1f105cd303e2e13feb469957cd6fa95b9deb7f7817ea442644251 days 10 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0xadd9418c1cc318ddf2fa4ad907a960d244bbbe540.0001 Ether
0x6354d66ac245752efb3e1b81017913c46d0348fd88ac8b715bbc6d97ce1c7529441773052 days 20 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd411 Ether
0x47f46e8d2596dea88689a1d404d9799cd92f7b8443e6effa447947472e155816436630461 days 22 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd414 Ether
0xbb50a8ff6d7880b9f2e7712cfad4f6275463221bd3f94c82d88d2ba7bf81a0a0432950674 days 16 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd48.1 Ether
0x3a35fff61c54b2d76809de53bbfd10cb74fcda1fabe0c10fffa41dfeb7644357429276886 days 21 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd41 Ether
0x3fde21e18ddbdc7fa8f1145cc3a9209474c9d99cb1aa6a750df83b41958780854135244128 days 14 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x00b552e18162bd016857298c7977854ecc3b7b2d56.2 Ether
0xc00b85f721c589a85a3a7f7b8d1c376323d88fdb786f68773ca4d460fab066e74135205128 days 14 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x00b552e18162bd016857298c7977854ecc3b7b2d1 Ether
0xb05eb8c568f2aaf8427a566407073889dfc0188b13ad70f97c3663ff8561bd884114916133 days 14 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd420 Ether
0xc4e05ccf79b7df149a64c1087ea9cefc16f148113299d511352d52c0ea4712634020547154 days 12 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x0a75e0c62215eaf1a86b477f4899854789bff83c42 Ether
0x187b3b8375f3386e6e0d98033071f9f1562953d3c01c2d6072ddc59489e716703886733181 days 12 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd410 Ether
0xefb9d6688fbdca7068570dda2a9f61cb6ad24540d8fa7d07c27f8c96021fc7003822392193 days 17 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd425 Ether
0xe77c7f52d5af9df7bf899ac7fd1bc94fb3a1fdebce0203dad7a588dd8a4b71c03812664195 days 14 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x0a75e0c62215eaf1a86b477f4899854789bff83c32 Ether
0x8a7ea4437dfd915213846d7ccb9670bdba82d6412dc6d0c41ed80cee6905311a3725230211 days 17 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x5de92686587b10cd47e03b71f2e2350606fcaf1410 Ether
0xfdb19293d897ba5172c8fa4a18432a261926695eaf1555240b25e5eaf56e6eb23708895214 days 17 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd45 Ether
0x2edb9b209577386c7daf26a4c01477adca77cab52e971f0baec2d99db37157463702839215 days 20 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd45 Ether
0x497308a1c1ae474c225d80ff396b101889f88d692fda35a7525f1e4be73897b63680978219 days 17 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd48 Ether
0xf3bfe46409e5f308b27019b429bebe067baf8b43c72fede31a2c852e286218c63669237221 days 19 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd48 Ether
0xfe141d543651060bc2fe3e99fe7273a6bfb2adf8d1181caf7bf3cea8ec2233503651900224 days 20 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd425 Ether
0x6814f53c8c21002930c249a3189b32a3ee6d3a6f17ae25cfd5a327eaff6fb6923637177227 days 10 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x0a75e0c62215eaf1a86b477f4899854789bff83c12.82111615478903 Ether
0x3e0d1dbd3652c400604014d9148805f2c04b6defc47c80b62a42d83d6e41b5783615068231 days 8 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x5de92686587b10cd47e03b71f2e2350606fcaf1410 Ether
0xd17786b1acd4e6c4f646bd58a82acb35792dbf01339eaab42a3db1c396d3691e3612116231 days 21 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd415 Ether
0x712e74ca9edc83a65b1e0549b270f6042553433482fffbeb02f231ad2db008bd3601092233 days 20 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd410 Ether
[ Download CSV Export  ] 
Contract Name: Wallet
Compiler Version: v0.3.2-2016-04-18-81ae2a7
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts
//sol Wallet
// Multi-sig, daily-limited account proxy/wallet.
// @authors:
// Gav Wood <[email protected]>
// inheritable "property" contract that enables methods to be protected by requiring the acquiescence of either a
// single, or, crucially, each of a number of, designated owners.
// usage:
// use modifiers onlyowner (just own owned) or onlymanyowners(hash), whereby the same hash must be provided by
// some number (specified in constructor) of the set of owners (specified in the constructor, modifiable) before the
// interior is executed.
contract multiowned {

    // TYPES

    // struct for the status of a pending operation.
    struct PendingState {
        uint yetNeeded;
        uint ownersDone;
        uint index;
    }

    // EVENTS

    // this contract only has five types of events: it can accept a confirmation, in which case
    // we record owner and operation (hash) alongside it.
    event Confirmation(address owner, bytes32 operation);
    event Revoke(address owner, bytes32 operation);
    // some others are in the case of an owner changing.
    event OwnerChanged(address oldOwner, address newOwner);
    event OwnerAdded(address newOwner);
    event OwnerRemoved(address oldOwner);
    // the last one is emitted if the required signatures change
    event RequirementChanged(uint newRequirement);

    // MODIFIERS

    // simple single-sig function modifier.
    modifier onlyowner {
        if (isOwner(msg.sender))
            _
    }
    // multi-sig function modifier: the operation must have an intrinsic hash in order
    // that later attempts can be realised as the same underlying operation and
    // thus count as confirmations.
    modifier onlymanyowners(bytes32 _operation) {
        if (confirmAndCheck(_operation))
            _
    }

    // METHODS

    // constructor is given number of sigs required to do protected "onlymanyowners" transactions
    // as well as the selection of addresses capable of confirming them.
    function multiowned(address[] _owners, uint _required) {
        m_numOwners = _owners.length + 1;
        m_owners[1] = uint(msg.sender);
        m_ownerIndex[uint(msg.sender)] = 1;
        for (uint i = 0; i < _owners.length; ++i)
        {
            m_owners[2 + i] = uint(_owners[i]);
            m_ownerIndex[uint(_owners[i])] = 2 + i;
        }
        m_required = _required;
    }
    
    // Revokes a prior confirmation of the given operation
    function revoke(bytes32 _operation) external {
        uint ownerIndex = m_ownerIndex[uint(msg.sender)];
        // make sure they're an owner
        if (ownerIndex == 0) return;
        uint ownerIndexBit = 2**ownerIndex;
        var pending = m_pending[_operation];
        if (pending.ownersDone & ownerIndexBit > 0) {
            pending.yetNeeded++;
            pending.ownersDone -= ownerIndexBit;
            Revoke(msg.sender, _operation);
        }
    }
    
    // Replaces an owner `_from` with another `_to`.
    function changeOwner(address _from, address _to) onlymanyowners(sha3(msg.data, block.number)) external {
        if (isOwner(_to)) return;
        uint ownerIndex = m_ownerIndex[uint(_from)];
        if (ownerIndex == 0) return;

        clearPending();
        m_owners[ownerIndex] = uint(_to);
        m_ownerIndex[uint(_from)] = 0;
        m_ownerIndex[uint(_to)] = ownerIndex;
        OwnerChanged(_from, _to);
    }
    
    function addOwner(address _owner) onlymanyowners(sha3(msg.data, block.number)) external {
        if (isOwner(_owner)) return;

        clearPending();
        if (m_numOwners >= c_maxOwners)
            reorganizeOwners();
        if (m_numOwners >= c_maxOwners)
            return;
        m_numOwners++;
        m_owners[m_numOwners] = uint(_owner);
        m_ownerIndex[uint(_owner)] = m_numOwners;
        OwnerAdded(_owner);
    }
    
    function removeOwner(address _owner) onlymanyowners(sha3(msg.data, block.number)) external {
        uint ownerIndex = m_ownerIndex[uint(_owner)];
        if (ownerIndex == 0) return;
        if (m_required > m_numOwners - 1) return;

        m_owners[ownerIndex] = 0;
        m_ownerIndex[uint(_owner)] = 0;
        clearPending();
        reorganizeOwners(); //make sure m_numOwner is equal to the number of owners and always points to the optimal free slot
        OwnerRemoved(_owner);
    }
    
    function changeRequirement(uint _newRequired) onlymanyowners(sha3(msg.data, block.number)) external {
        if (_newRequired > m_numOwners) return;
        m_required = _newRequired;
        clearPending();
        RequirementChanged(_newRequired);
    }
    
    function isOwner(address _addr) returns (bool) {
        return m_ownerIndex[uint(_addr)] > 0;
    }
    
    function hasConfirmed(bytes32 _operation, address _owner) constant returns (bool) {
        var pending = m_pending[_operation];
        uint ownerIndex = m_ownerIndex[uint(_owner)];

        // make sure they're an owner
        if (ownerIndex == 0) return false;

        // determine the bit to set for this owner.
        uint ownerIndexBit = 2**ownerIndex;
        if (pending.ownersDone & ownerIndexBit == 0) {
            return false;
        } else {
            return true;
        }
    }
    
    // INTERNAL METHODS

    function confirmAndCheck(bytes32 _operation) internal returns (bool) {
        // determine what index the present sender is:
        uint ownerIndex = m_ownerIndex[uint(msg.sender)];
        // make sure they're an owner
        if (ownerIndex == 0) return;

        var pending = m_pending[_operation];
        // if we're not yet working on this operation, switch over and reset the confirmation status.
        if (pending.yetNeeded == 0) {
            // reset count of confirmations needed.
            pending.yetNeeded = m_required;
            // reset which owners have confirmed (none) - set our bitmap to 0.
            pending.ownersDone = 0;
            pending.index = m_pendingIndex.length++;
            m_pendingIndex[pending.index] = _operation;
        }
        // determine the bit to set for this owner.
        uint ownerIndexBit = 2**ownerIndex;
        // make sure we (the message sender) haven't confirmed this operation previously.
        if (pending.ownersDone & ownerIndexBit == 0) {
            Confirmation(msg.sender, _operation);
            // ok - check if count is enough to go ahead.
            if (pending.yetNeeded <= 1) {
                // enough confirmations: reset and run interior.
                delete m_pendingIndex[m_pending[_operation].index];
                delete m_pending[_operation];
                return true;
            }
            else
            {
                // not enough: record that this owner in particular confirmed.
                pending.yetNeeded--;
                pending.ownersDone |= ownerIndexBit;
            }
        }
    }

    function reorganizeOwners() private returns (bool) {
        uint free = 1;
        while (free < m_numOwners)
        {
            while (free < m_numOwners && m_owners[free] != 0) free++;
            while (m_numOwners > 1 && m_owners[m_numOwners] == 0) m_numOwners--;
            if (free < m_numOwners && m_owners[m_numOwners] != 0 && m_owners[free] == 0)
            {
                m_owners[free] = m_owners[m_numOwners];
                m_ownerIndex[m_owners[free]] = free;
                m_owners[m_numOwners] = 0;
            }
        }
    }
    
    function clearPending() internal {
        uint length = m_pendingIndex.length;
        for (uint i = 0; i < length; ++i)
            if (m_pendingIndex[i] != 0)
                delete m_pending[m_pendingIndex[i]];
        delete m_pendingIndex;
    }
        
    // FIELDS

    // the number of owners that must confirm the same operation before it is run.
    uint public m_required;
    // pointer used to find a free slot in m_owners
    uint public m_numOwners;
    
    // list of owners
    uint[256] m_owners;
    uint constant c_maxOwners = 250;
    // index on the list of owners to allow reverse lookup
    mapping(uint => uint) m_ownerIndex;
    // the ongoing operations.
    mapping(bytes32 => PendingState) m_pending;
    bytes32[] m_pendingIndex;
}

// inheritable "property" contract that enables methods to be protected by placing a linear limit (specifiable)
// on a particular resource per calendar day. is multiowned to allow the limit to be altered. resource that method
// uses is specified in the modifier.
contract daylimit is multiowned {

    // MODIFIERS

    // simple modifier for daily limit.
    modifier limitedDaily(uint _value) {
        if (underLimit(_value))
            _
    }

    // METHODS

    // constructor - stores initial daily limit and records the present day's index.
    function daylimit(uint _limit) {
        m_dailyLimit = _limit;
        m_lastDay = today();
    }
    // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today.
    function setDailyLimit(uint _newLimit) onlymanyowners(sha3(msg.data, block.number)) external {
        m_dailyLimit = _newLimit;
    }
    // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today.
    function resetSpentToday() onlymanyowners(sha3(msg.data, block.number)) external {
        m_spentToday = 0;
    }
    
    // INTERNAL METHODS
    
    // checks to see if there is at least `_value` left from the daily limit today. if there is, subtracts it and
    // returns true. otherwise just returns false.
    function underLimit(uint _value) internal onlyowner returns (bool) {
        // reset the spend limit if we're on a different day to last time.
        if (today() > m_lastDay) {
            m_spentToday = 0;
            m_lastDay = today();
        }
        // check to see if there's enough left - if so, subtract and return true.
        if (m_spentToday + _value >= m_spentToday && m_spentToday + _value <= m_dailyLimit) {
            m_spentToday += _value;
            return true;
        }
        return false;
    }
    // determines today's index.
    function today() private constant returns (uint) { return now / 1 days; }

    // FIELDS

    uint public m_dailyLimit;
    uint public m_spentToday;
    uint public m_lastDay;
}

// interface contract for multisig proxy contracts; see below for docs.
contract multisig {

    // EVENTS

    // logged events:
    // Funds has arrived into the wallet (record how much).
    event Deposit(address from, uint value);
    // Single transaction going out of the wallet (record who signed for it, how much, and to whom it's going).
    event SingleTransact(address owner, uint value, address to, bytes data);
    // Multi-sig transaction going out of the wallet (record who signed for it last, the operation hash, how much, and to whom it's going).
    event MultiTransact(address owner, bytes32 operation, uint value, address to, bytes data);
    // Confirmation still needed for a transaction.
    event ConfirmationNeeded(bytes32 operation, address initiator, uint value, address to, bytes data);
    
    // FUNCTIONS
    
    // TODO: document
    function changeOwner(address _from, address _to) external;
    function execute(address _to, uint _value, bytes _data) external returns (bytes32);
    function confirm(bytes32 _h) returns (bool);
}

// usage:
// bytes32 h = Wallet(w).from(oneOwner).transact(to, value, data);
// Wallet(w).from(anotherOwner).confirm(h);
contract Wallet is multisig, multiowned, daylimit {

    uint public version = 2;

    // TYPES

    // Transaction structure to remember details of transaction lest it need be saved for a later call.
    struct Transaction {
        address to;
        uint value;
        bytes data;
    }

    // METHODS

    // constructor - just pass on the owner array to the multiowned and
    // the limit to daylimit
    function Wallet(address[] _owners, uint _required, uint _daylimit)
            multiowned(_owners, _required) daylimit(_daylimit) {
    }
    
    // kills the contract sending everything to `_to`.
    function kill(address _to) onlymanyowners(sha3(msg.data, block.number)) external {
        suicide(_to);
    }
    
    // gets called when no other function matches
    function() {
        // just being sent some cash?
        if (msg.value > 0)
            Deposit(msg.sender, msg.value);
    }
    
    // Outside-visible transact entry point. Executes transacion immediately if below daily spend limit.
    // If not, goes into multisig process. We provide a hash on return to allow the sender to provide
    // shortcuts for the other confirmations (allowing them to avoid replicating the _to, _value
    // and _data arguments). They still get the option of using them if they want, anyways.
    function execute(address _to, uint _value, bytes _data) external onlyowner returns (bytes32 _r) {
        // first, take the opportunity to check that we're under the daily limit.
        if (underLimit(_value)) {
            SingleTransact(msg.sender, _value, _to, _data);
            // yes - just execute the call.
            _to.call.value(_value)(_data);
            return 0;
        }
        // determine our operation hash.
        _r = sha3(msg.data, block.number);
        if (!confirm(_r) && m_txs[_r].to == 0) {
            m_txs[_r].to = _to;
            m_txs[_r].value = _value;
            m_txs[_r].data = _data;
            ConfirmationNeeded(_r, msg.sender, _value, _to, _data);
        }
    }
    
    // confirm a transaction through just the hash. we use the previous transactions map, m_txs, in order
    // to determine the body of the transaction from the hash provided.
    function confirm(bytes32 _h) onlymanyowners(_h) returns (bool) {
        if (m_txs[_h].to != 0) {
            m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data);
            MultiTransact(msg.sender, _h, m_txs[_h].value, m_txs[_h].to, m_txs[_h].data);
            delete m_txs[_h];
            return true;
        }
    }
    
    // INTERNAL METHODS
    
    function clearPending() internal {
        uint length = m_pendingIndex.length;
        for (uint i = 0; i < length; ++i)
            delete m_txs[m_pendingIndex[i]];
        super.clearPending();
    }

    // FIELDS

    // pending transactions we have at present.
    mapping (bytes32 => Transaction) m_txs;
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"removeOwner","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"m_numOwners","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"m_lastDay","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"resetSpentToday","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"m_spentToday","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"addOwner","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"m_required","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_h","type":"bytes32"}],"name":"confirm","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"_newLimit","type":"uint256"}],"name":"setDailyLimit","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"execute","outputs":[{"name":"_r","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"_operation","type":"bytes32"}],"name":"revoke","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_newRequired","type":"uint256"}],"name":"changeRequirement","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"_operation","type":"bytes32"},{"name":"_owner","type":"address"}],"name":"hasConfirmed","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"kill","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"changeOwner","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"m_dailyLimit","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"_owners","type":"address[]"},{"name":"_required","type":"uint256"},{"name":"_daylimit","type":"uint256"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Confirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Revoke","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"}],"name":"OwnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newRequirement","type":"uint256"}],"name":"RequirementChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"SingleTransact","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"MultiTransact","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"operation","type":"bytes32"},{"indexed":false,"name":"initiator","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"ConfirmationNeeded","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052600261010860005055604051611b51380380611b51833981016040528080518201919060200180519060200190919080519060200190919050505b805b83835b600060018351016001600050819055503373ffffffffffffffffffffffffffffffffffffffff16600260005060016101008110156100025790900160005b5081905550600161010260005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005081905550600090505b825181101561016e5782818151811015610002579060200190602002015173ffffffffffffffffffffffffffffffffffffffff166002600050826002016101008110156100025790900160005b508190555080600201610102600050600085848151811015610002579060200190602002015173ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055505b80600101905080506100c2565b816000600050819055505b505050806101056000508190555061018f6101ad565b610107600050819055505b505b505050611992806101bf6000396000f35b600062015180420490506101bc565b9056606060405236156100f8576000357c010000000000000000000000000000000000000000000000000000000090048063173825d9146101605780632f54bf6e146101785780634123cb6b146101a457806352375093146101c757806354fd4d50146101ea5780635c52c2f51461020d578063659010e71461021c5780637065cb481461023f578063746c917114610257578063797af6271461027a578063b20d30a9146102a6578063b61d27f6146102be578063b75c7dc614610307578063ba51a6df1461031f578063c2cf732614610337578063cbf0b0c01461036c578063f00d4b5d14610384578063f1736d86146103a5576100f8565b61015e5b600034111561015b577fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3334604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b5b565b005b61017660048080359060200190919050506107c4565b005b61018e60048080359060200190919050506109a5565b6040518082815260200191505060405180910390f35b6101b16004805050610a91565b6040518082815260200191505060405180910390f35b6101d46004805050610b38565b6040518082815260200191505060405180910390f35b6101f76004805050610b42565b6040518082815260200191505060405180910390f35b61021a6004805050610adf565b005b6102296004805050610b2e565b6040518082815260200191505060405180910390f35b610255600480803590602001909190505061066e565b005b6102646004805050610a88565b6040518082815260200191505060405180910390f35b6102906004808035906020019091905050610f0e565b6040518082815260200191505060405180910390f35b6102bc6004808035906020019091905050610a9a565b005b6102f160048080359060200190919080359060200190919080359060200190820180359060200191909192905050610b9e565b6040518082815260200191505060405180910390f35b61031d60048080359060200190919050506103c8565b005b610335600480803590602001909190505061090f565b005b61035660048080359060200190919080359060200190919050506109e7565b6040518082815260200191505060405180910390f35b6103826004808035906020019091905050610b4c565b005b6103a360048080359060200190919080359060200190919050506104ca565b005b6103b26004805050610b24565b6040518082815260200191505060405180910390f35b60006000600061010260005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549250600083141561040f576104c4565b8260020a91506101036000506000858152602001908152602001600020600050905060008282600101600050541611156104c3578060000160008181505480929190600101919050555081816001016000828282505403925050819055507fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b3385604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b5b50505050565b600060003643604051808484808284378201915050828152602001935050505060405180910390206104fb816112db565b1561066757610509836109a5565b156105145750610669565b61010260005060008573ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005054915060008214156105565750610669565b61055e611777565b8273ffffffffffffffffffffffffffffffffffffffff166002600050836101008110156100025790900160005b5081905550600061010260005060008673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055508161010260005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055507fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c8484604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15b505b505050565b600036436040518084848082843782019150508281526020019350505050604051809103902061069d816112db565b156107bf576106ab826109a5565b156106b657506107c1565b6106be611777565b60fa6001600050541015156106d7576106d561153d565b505b60fa6001600050541015156106ec57506107c1565b60016000818150548092919060010191905055508173ffffffffffffffffffffffffffffffffffffffff1660026000506001600050546101008110156100025790900160005b508190555060016000505461010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c382604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b505b50565b600060003643604051808484808284378201915050828152602001935050505060405180910390206107f5816112db565b156109095761010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549150600082141561083c575061090b565b6001600160005054036000600050541115610857575061090b565b60006002600050836101008110156100025790900160005b5081905550600061010260005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055506108b2611777565b6108ba61153d565b507f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da83604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b505b5050565b600036436040518084848082843782019150508281526020019350505050604051809103902061093e816112db565b156109a05760016000505482111561095657506109a2565b81600060005081905550610968611777565b7facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da826040518082815260200191505060405180910390a15b505b50565b6000600061010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050541190506109e2565b919050565b60006000600060006101036000506000878152602001908152602001600020600050925061010260005060008673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000505491506000821415610a505760009350610a7f565b8160020a90506000818460010160005054161415610a755760009350610a7f56610a7e565b60019350610a7f565b5b50505092915050565b60006000505481565b60016000505481565b6000364360405180848480828437820191505082815260200193505050506040518091039020610ac9816112db565b15610ada5781610105600050819055505b505b50565b6000364360405180848480828437820191505082815260200193505050506040518091039020610b0e816112db565b15610b20576000610106600050819055505b505b565b6101056000505481565b6101066000505481565b6101076000505481565b6101086000505481565b6000364360405180848480828437820191505082815260200193505050506040518091039020610b7b816112db565b15610b99578173ffffffffffffffffffffffffffffffffffffffff16ff5b505b50565b6000610ba9336109a5565b15610f0557610bb7846116d7565b15610ca0577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd0043385878686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a18473ffffffffffffffffffffffffffffffffffffffff168484846040518083838082843782019150509250505060006040518083038185876185025a03f1925050505060006001029050610f06565b600036436040518084848082843782019150508281526020019350505050604051809103902090508050610cd381610f0e565b158015610d3357506000610109600050600083815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15610f045784610109600050600083815260200190815260200160002060005060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555083610109600050600083815260200190815260200160002060005060010160005081905550828261010960005060008481526020019081526020016000206000506002016000509190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610e0857803560ff1916838001178555610e39565b82800160010185558215610e39579182015b82811115610e38578235826000505591602001919060010190610e1a565b5b509050610e649190610e46565b80821115610e605760008181506000905550600101610e46565b5090565b50507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32813386888787604051808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b5b5b949350505050565b600081610f1a816112db565b156112d4576000610109600050600085815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156112d357610109600050600084815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610109600050600085815260200190815260200160002060005060010160005054610109600050600086815260200190815260200160002060005060020160005060405180828054600181600116156101000203166002900480156110765780601f1061104b57610100808354040283529160200191611076565b820191906000526020600020905b81548152906001019060200180831161105957829003601f168201915b505091505060006040518083038185876185025a03f192505050507fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a3384610109600050600087815260200190815260200160002060005060010160005054610109600050600088815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101096000506000898152602001908152602001600020600050600201600050604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156112005780601f106111d557610100808354040283529160200191611200565b820191906000526020600020905b8154815290600101906020018083116111e357829003601f168201915b5050965050505050505060405180910390a1610109600050600084815260200190815260200160002060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000506000905560028201600050805460018160011615610100020316600290046000825580601f1061128957506112c6565b601f0160209004906000526020600020908101906112c591906112a7565b808211156112c157600081815060009055506001016112a7565b5090565b5b50505060019150506112d6565b5b505b919050565b600060006000600061010260005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549250600083141561132457611535565b610103600050600086815260200190815260200160002060005091506000826000016000505414156113fd57600060005054826000016000508190555060008260010160005081905550610104600050805480919060010190908154818355818115116113c3578183600052602060002091820191016113c291906113a4565b808211156113be57600081815060009055506001016113a4565b5090565b5b5050508260020160005081905550846101046000508360020160005054815481101561000257906000526020600020900160005b50819055505b8260020a90506000818360010160005054161415611534577fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda3386604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001826000016000505411151561150757610104600050610103600050600087815260200190815260200160002060005060020160005054815481101561000257906000526020600020900160005b50600090556101036000506000868152602001908152602001600020600060008201600050600090556001820160005060009055600282016000506000905550506001935061153556611533565b816000016000818150548092919060019003919050555080826001016000828282505417925050819055505b5b5b505050919050565b60006000600190505b6001600050548110156116d2575b60016000505481108015611580575060006002600050826101008110156100025790900160005b505414155b15611592578080600101915050611554565b5b60016001600050541180156115c45750600060026000506001600050546101008110156100025790900160005b5054145b156115e357600160008181505480929190600190039190505550611593565b600160005054811080156116145750600060026000506001600050546101008110156100025790900160005b505414155b8015611637575060006002600050826101008110156100025790900160005b5054145b156116cd5760026000506001600050546101008110156100025790900160005b50546002600050826101008110156100025790900160005b50819055508061010260005060006002600050846101008110156100025790900160005b5054815260200190815260200160002060005081905550600060026000506001600050546101008110156100025790900160005b50819055505b611546565b5b5090565b60006116e2336109a5565b1561177157610107600050546116f6611980565b111561171b57600061010660005081905550611710611980565b610107600050819055505b610106600050548261010660005054011015801561174757506101056000505482610106600050540111155b15611768578161010660008282825054019250508190555060019050611772565b60009050611772565b5b919050565b60006000610104600050805490509150600090505b8181101561187857610109600050600061010460005083815481101561000257906000526020600020900160005b5054815260200190815260200160002060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000506000905560028201600050805460018160011615610100020316600290046000825580601f1061182a5750611867565b601f0160209004906000526020600020908101906118669190611848565b808211156118625760008181506000905550600101611848565b5090565b5b5050505b806001019050805061178c565b611880611885565b5b5050565b60006000610104600050805490509150600090505b8181101561193857600060010261010460005082815481101561000257906000526020600020900160005b505414151561192a57610103600050600061010460005083815481101561000257906000526020600020900160005b50548152602001908152602001600020600060008201600050600090556001820160005060009055600282016000506000905550505b5b806001019050805061189a565b61010460005080546000825590600052602060002090810190611979919061195b565b80821115611975576000818150600090555060010161195b565b5090565b5b505b5050565b6000620151804204905061198f565b9056

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.