Contract Overview | Etheroll_MultiSig2
Balance: 3,776.350067421635386003 Ether
Ether Value: $765,541.69 (@ $202.72/ETH)
Transactions: 60 txns
Misc:
Address Watch: Add To Watch List
Contract Creator: 0x73f0ed546cd7893abc5e04284b68522602603dd4at txn 0x1bdb64f3f4854fe930005c2e03dd4e4771470bfea737ece15ae2c26d4106686a
Token Balance:
 Latest 25 txns From a total of 60 Transactions

TxHash Age From To Value [TxFee]
0xf88f497418c652b900b82a5c078f8ff33421dd080e4ee50aef68861e91722f188 days 11 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.00030801
0xf0996cb7d0c5557df9334fa3ebb070d78eb45b7476148aa1a70716ae17b4925666 days 5 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.001258617
0xc635a9f4c222f2cc179340df720581780698102281fd06547661af4b7ba3d36766 days 5 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.001389759
0x17925b2550045d80cb97ae4bd5a6782392cd94b774647729bab79dd4c152146d66 days 5 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.000926506
0x28c2328006ac3d6a4ecf3fce96db26717d946d108ed4e984202104c01668e5bd66 days 5 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.00076271
0x106cec48f996794dbbeda5a3e524745281aa5f2830aaf17dbe157841ec1c910769 days 3 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.000820336
0xf41d8bf24a4a5840087bfb10ab44b721275c28f3df29a0c3793506fe589aad5471 days 1 hr ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.01754233
0x19dd3d1c9263b5486bfc8c5d49652b037f4ed96ad07318d8b2b53871d1636e3178 days 6 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.001296607
0x6cb870417353e9795656f284676c05dcbbde1809e5fa5e64160d38074bf9ebdc100 days 2 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.000563981
0x7494bafda0f39b800511a203510853ead983697f29a5393e9751aac92fcff5d1168 days 10 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.000198537
0xf4643007bceb097f57b0f6422248783649e8dd9c09116d46011223456cee8eba168 days 10 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.000228813
0x1f97ba3f6d40e733c162be55cf5d79c74dee8d84a90d7337864e2069ea9c8237169 days 10 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.000198537
0x5cb8ac9df839c23cdd60a6c5f29df1c72e73130ab7e27c6a8064fb49a706c55b169 days 10 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.000228621
0xfa203e66f3130d1b273ee04ce9fa5020c4a39b8232915896c96c22d830cf2933171 days 9 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.000153813
0x004c71fec1bd900ae76ed5e825099092a6563ef5309565e5df9da9b5e7f55d68199 days 5 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.00020534
0x1c5b86a0593ac5f1354001a70e2d32a55ba20e8e02d0915ecba90569eba67683239 days 7 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.000256355
0xb6388812977c7fd0d3a63980c39c3b7402f1df310ffff07fc3ce1b9ef24209de312 days 6 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.00102542
0x9c350eceaa569b28b4bdfeb25e21272447b7de94e4b6d47333fa4be9dfba7c80330 days 5 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.0010267
0xa46d63727b9d3bf8ba36e4c01b0936dc53fc301e82d57a42cff91aaed80edf06359 days 1 hr ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.000330968
0x15a071c2dd7f0ef7b38c1f105cd303e2e13feb469957cd6fa95b9deb7f7817ea359 days 1 hr ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.000609656
0x6354d66ac245752efb3e1b81017913c46d0348fd88ac8b715bbc6d97ce1c7529360 days 11 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.00051271
0x47f46e8d2596dea88689a1d404d9799cd92f7b8443e6effa447947472e155816369 days 13 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.001076691
0xbb50a8ff6d7880b9f2e7712cfad4f6275463221bd3f94c82d88d2ba7bf81a0a0382 days 7 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.001333046
0x3a35fff61c54b2d76809de53bbfd10cb74fcda1fabe0c10fffa41dfeb7644357394 days 12 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.001076691
0x3fde21e18ddbdc7fa8f1145cc3a9209474c9d99cb1aa6a750df83b4195878085436 days 5 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   Etheroll_MultiSig20 Ether0.000905938
[ 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
0xf88f497418c652b900b82a5c078f8ff33421dd080e4ee50aef68861e91722f1864919818 days 11 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd430 Ether
0xf0996cb7d0c5557df9334fa3ebb070d78eb45b7476148aa1a70716ae17b49256614455366 days 5 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x6cbc5df5a156410414634da202875748d7eb6be619 Ether
0xc635a9f4c222f2cc179340df720581780698102281fd06547661af4b7ba3d367614441866 days 5 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x8a489b750d3bb7d3496d7ffadcde3d6126e6ea9418 Ether
0x17925b2550045d80cb97ae4bd5a6782392cd94b774647729bab79dd4c152146d614441266 days 5 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x41e30f35f8d21bfb86a33c2360aadbb807ebbed318 Ether
0x28c2328006ac3d6a4ecf3fce96db26717d946d108ed4e984202104c01668e5bd614440466 days 5 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x2ee41ee6d02c5177786a83f5bbbc3fad37fe4dc718 Ether
0x106cec48f996794dbbeda5a3e524745281aa5f2830aaf17dbe157841ec1c9107612719769 days 3 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd45 Ether
0xf41d8bf24a4a5840087bfb10ab44b721275c28f3df29a0c3793506fe589aad54611587971 days 1 hr ago0xa86a60d53e6f474e049be54824551bb99f05adee0xea8834c447600cc4513cd5d8f2cf744e807dea6f5 Ether
0x19dd3d1c9263b5486bfc8c5d49652b037f4ed96ad07318d8b2b53871d1636e31607335678 days 6 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x7e83dc1a90c29da3fa6c2a83d9857545deb357ab10 Ether
0x6cb870417353e9795656f284676c05dcbbde1809e5fa5e64160d38074bf9ebdc5943989100 days 2 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0xf7459cb2a7f9655e52f0082e65c70c4646efd8331 Ether
0x7494bafda0f39b800511a203510853ead983697f29a5393e9751aac92fcff5d15552258168 days 10 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0xd9a252b877fbd58bf0709b8a0260d98ca9440cf16.4 Ether
0xf4643007bceb097f57b0f6422248783649e8dd9c09116d46011223456cee8eba5552193168 days 10 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x2f7a3659630ab4ff326647f45f1e55440b6ff8126.4 Ether
0x1f97ba3f6d40e733c162be55cf5d79c74dee8d84a90d7337864e2069ea9c82375546596169 days 10 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x7401ec6e58d1b4133bf6c672ec98c352f1af814b5 Ether
0x5cb8ac9df839c23cdd60a6c5f29df1c72e73130ab7e27c6a8064fb49a706c55b5546561169 days 10 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x737c88f92fa43edb00830a3a3925ff984f4d954c7 Ether
0xfa203e66f3130d1b273ee04ce9fa5020c4a39b8232915896c96c22d830cf29335535479171 days 9 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x00b552e18162bd016857298c7977854ecc3b7b2d23.5 Ether
0x004c71fec1bd900ae76ed5e825099092a6563ef5309565e5df9da9b5e7f55d685371598199 days 5 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd420 Ether
0x1c5b86a0593ac5f1354001a70e2d32a55ba20e8e02d0915ecba90569eba676835134322239 days 7 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd410 Ether
0xb6388812977c7fd0d3a63980c39c3b7402f1df310ffff07fc3ce1b9ef24209de4712479312 days 6 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0xf7459cb2a7f9655e52f0082e65c70c4646efd8331 Ether
0x9c350eceaa569b28b4bdfeb25e21272447b7de94e4b6d47333fa4be9dfba7c804605545330 days 5 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0xadd9418c1cc318ddf2fa4ad907a960d244bbbe5465.5 Ether
0xa46d63727b9d3bf8ba36e4c01b0936dc53fc301e82d57a42cff91aaed80edf064426494359 days 1 hr ago0xa86a60d53e6f474e049be54824551bb99f05adee0xadd9418c1cc318ddf2fa4ad907a960d244bbbe5485.370850976642535172 Ether
0x15a071c2dd7f0ef7b38c1f105cd303e2e13feb469957cd6fa95b9deb7f7817ea4426442359 days 1 hr ago0xa86a60d53e6f474e049be54824551bb99f05adee0xadd9418c1cc318ddf2fa4ad907a960d244bbbe540.0001 Ether
0x6354d66ac245752efb3e1b81017913c46d0348fd88ac8b715bbc6d97ce1c75294417730360 days 11 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd411 Ether
0x47f46e8d2596dea88689a1d404d9799cd92f7b8443e6effa447947472e1558164366304369 days 13 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd414 Ether
0xbb50a8ff6d7880b9f2e7712cfad4f6275463221bd3f94c82d88d2ba7bf81a0a04329506382 days 7 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd48.1 Ether
0x3a35fff61c54b2d76809de53bbfd10cb74fcda1fabe0c10fffa41dfeb76443574292768394 days 12 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd41 Ether
0x3fde21e18ddbdc7fa8f1145cc3a9209474c9d99cb1aa6a750df83b41958780854135244436 days 5 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x00b552e18162bd016857298c7977854ecc3b7b2d56.2 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.