Sponsored Link:   Buy your 1st Ethereum in 5 minutes. Trusted by more than 100k buyers.
Contract Overview
ETH Balance: 0 Ether
ETH USD Value: $0
No Of Transactions: 171 txns
  Latest 25 txns from a total Of 171 transactions View All

TxHash Age From To Value [TxFee]
0xf610aa1be78e6d1885c56a3b6318e1aec778747e70c381d3f476cb7ea6e9974325 days 1 hr ago0xd3fd19cb7cbbb6994e21bb93fa3a29340f385830  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80 Ether0.000051399
0xdf4d071e8b4c3d731647baf21bd2bcd7e3bb2c59aea29f303be20981a729da3d25 days 4 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.501282372831708 Ether0.000089692
0xf721f30a8e76e2c9c3defeb060ef93f7f5611769f812acbcd6171c1446d3b85328 days 8 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.502679355442448 Ether0.000089692
0x1277e67229344e136ee9510871c3becb5640fe56baaca72f1e9209a70f8dd90728 days 12 hrs ago0xd3fd19cb7cbbb6994e21bb93fa3a29340f385830  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80 Ether0.000051399
0x8c584660de689cce2bda170706b33092e4debed39c44c1d593d97db48284832b29 days 18 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.500901159392157 Ether0.000089692
0x4b7d6d26692aaef18da463a302345edd6915ecd25c7486dc52af9ee72730255d31 days 5 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.515145372813075 Ether0.000089692
0x8c08e5be5bd1715d54635868252cf3b13d659c051458728f71e102593c51c57333 days 18 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.528655312148033 Ether0.000089692
0x55f136f016961f77a861aeed1ccd3b1fff259204635dfedb555a18d0ba09d2aa35 days 21 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.505000365415339 Ether0.000089692
0x239246b2cd10a03897bebb97289e3d21804a5ce709a5d5da0be42793e99647bf38 days 10 mins ago0xd3fd19cb7cbbb6994e21bb93fa3a29340f385830  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80 Ether0.000051335
0x6ff44a1aa302c0e239159e20eba9014e3647f9d1487a8f78d6a13453970b11d638 days 4 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.507735229372592 Ether0.000089692
0x62a9b287ef95507abe46ff480fda77be48aba2c702cb07b26af6b72e9458bb7239 days 23 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.507400339258441 Ether0.000089692
0x280b2f4731e2f9aed93229608c59df07c41db970dad2d9e5372d66631b1fad6a41 days 14 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.501895988889977 Ether0.000089692
0x69afbc78e0eb9368e6d42f665c313c6909e991ab15f878089017cee6cfa363e842 days 22 hrs ago0xd3fd19cb7cbbb6994e21bb93fa3a29340f385830  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80 Ether0.000051335
0xd092b4d98ea3dcf68c592723572c031b9bb5f48518696e5a664bdd96dca7669d43 days 5 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.512257033195127 Ether0.000089692
0x21375ff08592cb05d2cd1f633d34e7a18c59ed5676df50ca4cc244f0bb4ed46f44 days 11 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.515002878770307 Ether0.000089692
0x47a02d539d755533bcc5dfc1e2739fa8a9a54ee043d7f72d4275381ebc94c50845 days 23 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.533542358327403 Ether0.000089692
0x49f6653038795a9d2fffeefdb2628e7af8dd8becc497dcf934438f82aef820d646 days 12 hrs ago0xd3fd19cb7cbbb6994e21bb93fa3a29340f385830  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80 Ether0.000051335
0x5c2ede0e5339a322c76b17a6810b802b27cb027d02f03061f706d9003052c5b046 days 22 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.507416959554184 Ether0.000089692
0xc41e734965d029e5594f42a579c94a094990336876fa9d0d608e035b26a2c2fc48 days 18 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.533148327332539 Ether0.000089692
0x5a9f4acea4ca908b30f3a3b47edfb29cae28312258a7569e9e3f8ec8bdff656e49 days 21 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.502133590406715 Ether0.000089692
0x069549255a5538eed94b2d547822ee44a26aa380f300355d99973be98f74c57b50 days 19 hrs ago0xd3fd19cb7cbbb6994e21bb93fa3a29340f385830  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80 Ether0.000051399
0xd80706f33eb6a2f1022e414a683ac22071a108c7a192bd49a055db6631f6e18451 days 6 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.523172537070123 Ether0.000089692
0xc458ffe8c75c53b14450139b9eee448eb4292037e91dad34ea68ab597c72e22552 days 12 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.711196187041438 Ether0.000089692
0x6b061350a97a9543c3b82e52b9a5bccb1fc7d11626d7f49bc0b5a5dd0438bc1053 days 11 hrs ago0xd3fd19cb7cbbb6994e21bb93fa3a29340f385830  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80 Ether0.000051399
0x230e3445fd72b78b3e213d0dd3d02424cd2075d6660822cb06c977b6f775345854 days 12 hrs agoNanopool  IN   0x52b2d8cafc405454f2b8e2275d981e3a675696e80.515369167792238 Ether0.000089692
[ 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
0xf610aa1be78e6d1885c56a3b6318e1aec778747e70c381d3f476cb7ea6e99743456128825 days 1 hr ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.003961728274156928 Ether
0x1277e67229344e136ee9510871c3becb5640fe56baaca72f1e9209a70f8dd907453983528 days 12 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858302.049702209768606016 Ether
0x239246b2cd10a03897bebb97289e3d21804a5ce709a5d5da0be42793e99647bf448076338 days 10 mins ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.517031557521011968 Ether
0x69afbc78e0eb9368e6d42f665c313c6909e991ab15f878089017cee6cfa363e8445050542 days 22 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.56080227029283712 Ether
0x49f6653038795a9d2fffeefdb2628e7af8dd8becc497dcf934438f82aef820d6442811446 days 12 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.542698877293438976 Ether
0x069549255a5538eed94b2d547822ee44a26aa380f300355d99973be98f74c57b440140450 days 19 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xcdd8bae97ad466f4c4d305d7a7ece35f02813b611.234368724111561088 Ether
0x6b061350a97a9543c3b82e52b9a5bccb1fc7d11626d7f49bc0b5a5dd0438bc10438472653 days 11 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.523058347311176 Ether
0x5f0ef69978db32082291466a4e5921784afa2102db1e61f910deae5884d83e4a436445557 days 22 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.549043387763824128 Ether
0x412260f139bb3e9d2304d26283b7e790a2ceda404c82d5d76f6e9d57b2ddcd95434810063 days 13 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.53324066505973312 Ether
0xe0955251c1ad9757c4bf14bd256b51ab36b5c6d608a0b4e5b0daaf457bec4bba433157969 days 7 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.640964977722262976 Ether
0xdb5b2754474832755ccb5a7b86f5fbd7449babefcdeda7465c4c6e82314e1eac432417671 days 21 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.568165961859163968 Ether
0xeef740c5ccff301140f07681793fbf1b20d39679e9aeccd28ecd489239516da0430471678 days 16 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.571348221570683008 Ether
0x03095a69a0a206848215e07115772c42d3363904358c8293602405bd0881578e429369182 days 19 mins ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.512817166172663936 Ether
0x7d406ffdd53c762fbe9ac44d9a9029394eb69253891795dfc02362496ab93362428349784 days 20 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.547943311310683968 Ether
0x77325a9fb436498ce6e246cdbf3851cd62e0d9aed1531eabb1d22c63fae07103427414487 days 10 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.544178779946355008 Ether
0x1e67fb03deaadfa3a8e30dd33f427172701c8e230dbd9720fb8fa431bd8396ff426288890 days 13 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.638018553599426048 Ether
0xc466f114d9f5ba03e59dbb0b83ff8f0c3be2b4dac48edf8fecfdb9239e0c232e425249393 days 11 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xcdd8bae97ad466f4c4d305d7a7ece35f02813b611.515640415790788032 Ether
0x1d4e816e0efb3453f80bb7a9c4f60ac801831b0b901ebe1d952836cc14d39006424142296 days 14 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xcdd8bae97ad466f4c4d305d7a7ece35f02813b611.570047193977648 Ether
0x17315f64d36e43cfc2eb453425143367702a098bf0e6e0edacabde34a756193a4227824100 days 11 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.542493870743579008 Ether
0xaf8dcab926c8f1049097081ffaa4cbe5bc2221a391b2873539704cba05cb604e4213357104 days 13 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.535344893608366016 Ether
0x49921488a1deab15b633e3d0f0b444da695bf9a1271b263302dc360d751b60224199771108 days 10 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.556298552638225984 Ether
0x8716d205939d99e262b6e1366af0bc8317cfc416776e2b616b4e6dafff0fc4df4186287111 days 14 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.558313671375487936 Ether
0xa6c9fa2e4df6dc829e3f6e18fa9077965df46cd0f6f67bead12b9b2d62cec83d4173580114 days 15 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.541701227148978624 Ether
0x5094f589284fdd40578619b2195015d79f72e8a5209c7bc42be1232db4855af74164117116 days 22 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858301.554832171141719296 Ether
0x35ffe262a34e6abe6ff8f5e3bea26a17a5ae81ac4332c27f35bd33e20dc378da4153820119 days 10 hrs ago0x52b2d8cafc405454f2b8e2275d981e3a675696e80xd3fd19cb7cbbb6994e21bb93fa3a29340f3858302.1473978552946528 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.