Sponsored Link:   Qravity - the only blockchain entertainment production studio and distributor. Learn more.
 Latest 25 txns from a total Of 51 transactions
View All

TxHash Age From To Value [TxFee]
0x7494bafda0f39b800511a203510853ead983697f29a5393e9751aac92fcff5d147 days 10 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000198537
0xf4643007bceb097f57b0f6422248783649e8dd9c09116d46011223456cee8eba47 days 10 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000228813
0x1f97ba3f6d40e733c162be55cf5d79c74dee8d84a90d7337864e2069ea9c823748 days 10 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000198537
0x5cb8ac9df839c23cdd60a6c5f29df1c72e73130ab7e27c6a8064fb49a706c55b48 days 10 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000228621
0xfa203e66f3130d1b273ee04ce9fa5020c4a39b8232915896c96c22d830cf293350 days 9 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000153813
0x004c71fec1bd900ae76ed5e825099092a6563ef5309565e5df9da9b5e7f55d6878 days 5 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.00020534
0x1c5b86a0593ac5f1354001a70e2d32a55ba20e8e02d0915ecba90569eba67683118 days 6 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000256355
0xb6388812977c7fd0d3a63980c39c3b7402f1df310ffff07fc3ce1b9ef24209de191 days 5 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.00102542
0x9c350eceaa569b28b4bdfeb25e21272447b7de94e4b6d47333fa4be9dfba7c80209 days 4 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.0010267
0xa46d63727b9d3bf8ba36e4c01b0936dc53fc301e82d57a42cff91aaed80edf06238 days 36 mins ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000330968
0x15a071c2dd7f0ef7b38c1f105cd303e2e13feb469957cd6fa95b9deb7f7817ea238 days 45 mins ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000609656
0x6354d66ac245752efb3e1b81017913c46d0348fd88ac8b715bbc6d97ce1c7529239 days 10 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.00051271
0x47f46e8d2596dea88689a1d404d9799cd92f7b8443e6effa447947472e155816248 days 12 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.001076691
0xbb50a8ff6d7880b9f2e7712cfad4f6275463221bd3f94c82d88d2ba7bf81a0a0261 days 6 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.001333046
0x3a35fff61c54b2d76809de53bbfd10cb74fcda1fabe0c10fffa41dfeb7644357273 days 12 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.001076691
0x3fde21e18ddbdc7fa8f1145cc3a9209474c9d99cb1aa6a750df83b4195878085315 days 5 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000905938
0xc00b85f721c589a85a3a7f7b8d1c376323d88fdb786f68773ca4d460fab066e7315 days 5 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.001676554
0xb05eb8c568f2aaf8427a566407073889dfc0188b13ad70f97c3663ff8561bd88320 days 4 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.0010267
0x3eb4efa7e6b976ca21f0091ee73d7888ac79fea0469366abdf503bc6fe2e7456335 days 15 hrs ago0x877f4b4cdfb3b00c987a9d5d9b9e9e462c90340d  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000513954
0x2aec7ae45fa6dc0a7a9562cf2ba4c70b414bfa21d3bd580f6de6813b2d39249b335 days 15 hrs ago0x877f4b4cdfb3b00c987a9d5d9b9e9e462c90340d  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.000516642
0xc4e05ccf79b7df149a64c1087ea9cefc16f148113299d511352d52c0ea471263341 days 2 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.0010267
0x187b3b8375f3386e6e0d98033071f9f1562953d3c01c2d6072ddc59489e71670368 days 2 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.001076691
0xefb9d6688fbdca7068570dda2a9f61cb6ad24540d8fa7d07c27f8c96021fc700380 days 7 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.001180705
0xe77c7f52d5af9df7bf899ac7fd1bc94fb3a1fdebce0203dad7a588dd8a4b71c0382 days 4 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0xa86a60d53e6f474e049be54824551bb99f05adee0 Ether0.001078035
0x8a7ea4437dfd915213846d7ccb9670bdba82d6412dc6d0c41ed80cee6905311a398 days 7 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
0x7494bafda0f39b800511a203510853ead983697f29a5393e9751aac92fcff5d1555225847 days 10 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0xd9a252b877fbd58bf0709b8a0260d98ca9440cf16.4 Ether
0xf4643007bceb097f57b0f6422248783649e8dd9c09116d46011223456cee8eba555219347 days 10 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x2f7a3659630ab4ff326647f45f1e55440b6ff8126.4 Ether
0x1f97ba3f6d40e733c162be55cf5d79c74dee8d84a90d7337864e2069ea9c8237554659648 days 10 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x7401ec6e58d1b4133bf6c672ec98c352f1af814b5 Ether
0x5cb8ac9df839c23cdd60a6c5f29df1c72e73130ab7e27c6a8064fb49a706c55b554656148 days 10 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x737c88f92fa43edb00830a3a3925ff984f4d954c7 Ether
0xfa203e66f3130d1b273ee04ce9fa5020c4a39b8232915896c96c22d830cf2933553547950 days 9 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x00b552e18162bd016857298c7977854ecc3b7b2d23.5 Ether
0x004c71fec1bd900ae76ed5e825099092a6563ef5309565e5df9da9b5e7f55d68537159878 days 5 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd420 Ether
0x1c5b86a0593ac5f1354001a70e2d32a55ba20e8e02d0915ecba90569eba676835134322118 days 6 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd410 Ether
0xb6388812977c7fd0d3a63980c39c3b7402f1df310ffff07fc3ce1b9ef24209de4712479191 days 5 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0xf7459cb2a7f9655e52f0082e65c70c4646efd8331 Ether
0x9c350eceaa569b28b4bdfeb25e21272447b7de94e4b6d47333fa4be9dfba7c804605545209 days 4 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0xadd9418c1cc318ddf2fa4ad907a960d244bbbe5465.5 Ether
0xa46d63727b9d3bf8ba36e4c01b0936dc53fc301e82d57a42cff91aaed80edf064426494238 days 36 mins ago0xa86a60d53e6f474e049be54824551bb99f05adee0xadd9418c1cc318ddf2fa4ad907a960d244bbbe5485.370850976642535172 Ether
0x15a071c2dd7f0ef7b38c1f105cd303e2e13feb469957cd6fa95b9deb7f7817ea4426442238 days 45 mins ago0xa86a60d53e6f474e049be54824551bb99f05adee0xadd9418c1cc318ddf2fa4ad907a960d244bbbe540.0001 Ether
0x6354d66ac245752efb3e1b81017913c46d0348fd88ac8b715bbc6d97ce1c75294417730239 days 10 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd411 Ether
0x47f46e8d2596dea88689a1d404d9799cd92f7b8443e6effa447947472e1558164366304248 days 12 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd414 Ether
0xbb50a8ff6d7880b9f2e7712cfad4f6275463221bd3f94c82d88d2ba7bf81a0a04329506261 days 6 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd48.1 Ether
0x3a35fff61c54b2d76809de53bbfd10cb74fcda1fabe0c10fffa41dfeb76443574292768273 days 12 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd41 Ether
0x3fde21e18ddbdc7fa8f1145cc3a9209474c9d99cb1aa6a750df83b41958780854135244315 days 5 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x00b552e18162bd016857298c7977854ecc3b7b2d56.2 Ether
0xc00b85f721c589a85a3a7f7b8d1c376323d88fdb786f68773ca4d460fab066e74135205315 days 5 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x00b552e18162bd016857298c7977854ecc3b7b2d1 Ether
0xb05eb8c568f2aaf8427a566407073889dfc0188b13ad70f97c3663ff8561bd884114916320 days 4 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd420 Ether
0xc4e05ccf79b7df149a64c1087ea9cefc16f148113299d511352d52c0ea4712634020547341 days 2 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x0a75e0c62215eaf1a86b477f4899854789bff83c42 Ether
0x187b3b8375f3386e6e0d98033071f9f1562953d3c01c2d6072ddc59489e716703886733368 days 2 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd410 Ether
0xefb9d6688fbdca7068570dda2a9f61cb6ad24540d8fa7d07c27f8c96021fc7003822392380 days 7 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd425 Ether
0xe77c7f52d5af9df7bf899ac7fd1bc94fb3a1fdebce0203dad7a588dd8a4b71c03812664382 days 4 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x0a75e0c62215eaf1a86b477f4899854789bff83c32 Ether
0x8a7ea4437dfd915213846d7ccb9670bdba82d6412dc6d0c41ed80cee6905311a3725230398 days 7 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x5de92686587b10cd47e03b71f2e2350606fcaf1410 Ether
0xfdb19293d897ba5172c8fa4a18432a261926695eaf1555240b25e5eaf56e6eb23708895401 days 8 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd45 Ether
0x2edb9b209577386c7daf26a4c01477adca77cab52e971f0baec2d99db37157463702839402 days 10 hrs ago0xa86a60d53e6f474e049be54824551bb99f05adee0x73f0ed546cd7893abc5e04284b68522602603dd45 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 <g@ethdev.com>
// 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.