Sponsored Link:   WELL – WORKING HEALTHCARE U.S. PLATFORM - RAISED $3M IN PRE-ICO – JOIN NOW WITH 40% BONUS
  Latest 25 txns from a total Of 145 transactions View All

TxHash Age From To Value [TxFee]
0xf94b34f327ffcaab136bac8791830f1ac10d8fd8cbfa3555298283424c329a9d1 day 6 hrs ago0x32cf61edb8408223de1bb5b5f2661cda9e17fba6  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000023668
0x19d40628ce11941bae1c9b361924a46a930b1cad83bbd7bb824eee66b1cdd61f8 days 12 hrs ago0x468b4b8ce7eaa4399badd22376677a8e06ae1f02  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000024412
0x68f4786052b29536446a18b270e26ee5885f99862a2d5a46df63dc9cc004c7d313 days 19 hrs ago0x519dd5e746e19e57e1c3079e36ce792f62fd207c  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000022067
0x5ba3374c509129d4cb450ebb23ac5bfb6a1aab2d5262be8dc678db5b271a782626 days 36 mins ago0x7f2132d0bacd1104d5228aab463a506f64912bd7  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000771559
0xfe72368fafb1b290cdb92280f70d2b332f3b75cfbeb429f9adf8c7e4f1c8cea746 days 12 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00242642
0x174d11ece3a8a8cf7c599dcec79464aeee1b54b4eefd460a73b7904fd619da1d46 days 12 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00121526
0x1a2359c381cfbd248c6bd7dc82b4d3859991419b252c51a470448aa93d60cb0346 days 12 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00843178
0x068be5ec94e36549e0af19893185cb49fcee7e4566417b8fbabb661cc7e69f6246 days 12 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00074906
0xe8a8991d9d2fc9e837a90b8d39c25a2b5c54cc5b3f4f803f777e77a7cf68b02b47 days 5 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00348078
0x997ecdda77615a01881ec6ab1680149341f76f32e69e8d112daa1853ca4824a547 days 5 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00101934
0xcf5206707264b91f44e81216449b7d33975761d20a4e05e3a453299815f24acc47 days 5 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00244174
0xe5215f9a55f43ba1cfba52e857fdda5889c441337f676f2483aaae42da77bef647 days 5 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00242642
0xee9aac604b6e97d1172b79d1dd494a9f08369dcb8b9765df2cb3d305764423b094 days 19 mins ago0x885bb3ada690ef8bc418b25b6a2727974395ee70  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000488481
0xe172eae7319587524e24b212353cc8615d6fae2831a3f2ed5bb43f5ff971e08594 days 20 mins ago0x885bb3ada690ef8bc418b25b6a2727974395ee70  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000493332
0xdc774832df7eaeebf554d1f572fe88a345ada3e8e3bba6664136fa45cf75cbda94 days 24 mins ago0x885bb3ada690ef8bc418b25b6a2727974395ee70  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000537453
0x3eba47f4a51f38ee0d7226505afd8a562ed11af03ba462cfdc57e2c5b4c2ab2d94 days 29 mins ago0x885bb3ada690ef8bc418b25b6a2727974395ee70  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000470253
0x70852dd529f60014c6bb612a9b7d6c6774a5b336a571b4d003d036a86899acfb126 days 3 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.001071651
0xf33a1aa6528ffa9eed282b5364dbd6e039e28eb0c6da4cccf746d58b10d10953127 days 1 hr ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00098364
0x7c47d3e030586bad73e22333fa9dec2b2115eeb0aad516f79be3246edcc07f3a127 days 1 hr ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.001823208
0x25dfb5826f1e7fa39831a410991f767dbbbe604984ab6d08e6b3b81751420135130 days 11 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000786513
0xd90d8ce1e265e5af8de1f47ae6e385752091a1e8f69a6bf79c8af49f1cfccb08130 days 11 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.003654819
0xac7c2ded61be91464051ce101f3554b33c18bfd3da223842a93d2a4a25c347a5130 days 12 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.001070307
0x75c020412d4f1261f35bdd9e2fc55453dd7579c8a1f4d5b16c30cefe975fb35c151 days 7 hrs ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000189896
0x333320422fcca59faa0efc8c21155d2a95c64cebe1df94b01ae4203d632fc30b151 days 7 hrs ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000189896
0x6590ba5ee327846732806e018f6c0f4b4a70a28d9f3b779fd7a9fb626e67d4a7151 days 7 hrs ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000189344
[ 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
0x26b787cab65bdf8602ad6da767ef437d808336da6f2a30e635d50e83dca2f5d450920582 days 19 hrs ago0x4c7d87157d964963d5e4c648b5af750a44379bf70xbf35faa9c265baf50c9cff8c389c363b057532750.001093362198095363 Ether
0xf7c4c464d10eb2b5ce9bcb7091e5a7c49dfad0a0e73829f6986366afa943453150917412 days 21 hrs ago0x4c7d87157d964963d5e4c648b5af750a44379bf70xbf35faa9c265baf50c9cff8c389c363b057532750.00220453693701638 Ether
0x068be5ec94e36549e0af19893185cb49fcee7e4566417b8fbabb661cc7e69f62484072746 days 12 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6328,740 Ether
0x997ecdda77615a01881ec6ab1680149341f76f32e69e8d112daa1853ca4824a5483673047 days 5 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6320.1 Ether
0x70852dd529f60014c6bb612a9b7d6c6774a5b336a571b4d003d036a86899acfb4365716126 days 3 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xdec0180bd3b1312c4eec3910faed36c63ebb4e01100 Ether
0xf33a1aa6528ffa9eed282b5364dbd6e039e28eb0c6da4cccf746d58b10d109534363087127 days 1 hr ago0xbf35faa9c265baf50c9cff8c389c363b057532750xdec0180bd3b1312c4eec3910faed36c63ebb4e0199.9 Ether
0x7c47d3e030586bad73e22333fa9dec2b2115eeb0aad516f79be3246edcc07f3a4363084127 days 1 hr ago0xbf35faa9c265baf50c9cff8c389c363b057532750xdec0180bd3b1312c4eec3910faed36c63ebb4e010.1 Ether
0x25dfb5826f1e7fa39831a410991f767dbbbe604984ab6d08e6b3b817514201354353124130 days 11 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6325,999 Ether
0xac7c2ded61be91464051ce101f3554b33c18bfd3da223842a93d2a4a25c347a54353071130 days 12 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6321 Ether
0x3e3ee2a08148ee9911b4585f7cf67ccff98e0ac0ad9ee53a6b1f224b59e00d194215232172 days 16 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d632100 Ether
0xf45f59ee9b4d9ba26a514f9eaddf8070068844726d57aa4fa7ddabce92e486344211782173 days 16 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d632100 Ether
0x0d2c1a96c41cca4e77e1da4cac41117977b8a617b1e3a6dcb741eb4b679098ee4207007175 days 1 hr ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d632100 Ether
0x1cc3b3848fa488856ae41f639b756400489dad1c35abace10c6c65dfec553cad4203043176 days 4 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d63299 Ether
0xa03e0f89be837916a25bed354ea6fac235a12745e680d17904f9602a68406c844202985176 days 4 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6321 Ether
0xfde2d0f2e97a3bd1d514bc7f3c4ef76b114d076df9f8cc4a7b69b77ca00fae2b3813253259 days 12 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x019a86adcac53b2bf423bc3944907de1c363a2281 Ether
0xdc81eff532b6423928f598f650658ce284443b72436dbe3870a239b89c1ce4af3175356369 days 11 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x7be7fad439128cca6738f8a6813519af4248365c90 Ether
0x29d6cbe3d2a84b20466550f577316a290f8c2edf4c44b1cf0dac5fceee7dd8053175259369 days 11 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x7be7fad439128cca6738f8a6813519af4248365c5,000 Ether
0x702177aacf116b9402fe5ddbce8a16fc2b7e2c8285aec47fe35adab6c12953353175138369 days 11 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x7be7fad439128cca6738f8a6813519af4248365c10 Ether
0xcca3760ba74e616b49fe3a3ea32fe9a42de3723fd9e48cbd6ab8a9fba5907ada2905885413 days 23 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xf4595a5072a7a1d1f1e901063271fb9c7b286ac4ca9416cc58310adf88c0747e2905780414 days 18 mins ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xf4595a5072a7a1d1f1e901063271fb9c7b286ac4ca9416cc58310adf88c0747e2905780414 days 18 mins ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0x1e22d796ba4041153fbfa7821cfd39192bfa97ea747028c0a123f0dad776b32f2905764414 days 22 mins ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0x1e22d796ba4041153fbfa7821cfd39192bfa97ea747028c0a123f0dad776b32f2905764414 days 22 mins ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0x43dfe4c0d9aeef250e49ef52024a099cf01e7062d4e53782ace4b8bf9d2b5d2e2905751414 days 25 mins ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xc9621226660af4357ae36b7bf7b7a34934c9d62141c6c127317159a80773299e2905703414 days 36 mins ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
[ Download CSV Export  ] 



  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)) 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)) 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)) 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)) 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;
        return !(pending.ownersDone & ownerIndexBit == 0);
    }
    
    // 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 {
        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)) 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)) 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 m_spentToday;
    uint 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 {

	// 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)) 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":false,"inputs":[],"name":"resetSpentToday","outputs":[],"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
60606040526040516110ee3803806110ee833981016040908152815160805160a0519190930180516001908101815533600160a060020a0316600381905560009081526101026020529384205592918190849084905b82518110156100db57828181518110156100025790602001906020020151600160a060020a0316600260005082600201610100811015610002570160009190558351600283019161010291869085908110156100025790602001906020020151600160a060020a0316815260200190815260200160002060005081905550600101610055565b8160006000508190555050505080610105600050819055506100ff62015180420490565b6101075550505050610fd9806101156000396000f3606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e1461015b5780634123cb6b146101835780635c52c2f51461018c5780637065cb48146101b2578063746c9171146101db578063797af627146101e4578063b20d30a9146101f7578063b61d27f614610220578063b75c7dc614610241578063ba51a6df14610270578063c2cf732614610299578063cbf0b0c0146102d7578063f00d4b5d14610300578063f1736d861461032e575b61033860003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b6103386004356000600036604051808383808284375050509081018190039020905061062e815b600160a060020a03331660009081526101026020526040812054818082811415610c4757610d9f565b61033a6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61033a60015481565b610338600036604051808383808284375050509081018190039020905061076f81610132565b61033860043560003660405180838380828437505050908101819003902090506105aa81610132565b61033a60005481565b61033a6004355b600081610a0581610132565b610338600435600036604051808383808284375050509081018190039020905061076381610132565b61033a60048035906024803591604435918201910135600061078e33610162565b610338600435600160a060020a0333166000908152610102602052604081205490808281141561034c576103cb565b61033860043560003660405180838380828437505050908101819003902090506106ec81610132565b61033a600435602435600082815261010360209081526040808320600160a060020a038516845261010290925282205482818114156107455761075a565b610338600435600036604051808383808284375050509081018190039020905061077d81610132565b6103386004356024356000600036604051808383808284375050509081018190039020905061045681610132565b61033a6101055481565b005b60408051918252519081900360200190f35b50506000828152610103602052604081206001810154600284900a9290831611156103cb5780546001828101805492909101835590839003905560408051600160a060020a03331681526020810186905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b50505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a1505b505050565b156103cb5761046483610162565b1561046f5750610451565b600160a060020a0384166000908152610102602052604081205492508214156104985750610451565b6103d15b6101045460005b81811015610eec57610104805461010891600091849081101561000257600080516020610fb98339815191520154825250602091909152604081208054600160a060020a0319168155600181810183905560028281018054858255939493909281161561010002600019011604601f819010610f7157505b5050506001016104a3565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005055600154600160a060020a03831660008181526101026020908152604091829020939093558051918252517f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3929181900390910190a15b505b50565b156105a5576105b882610162565b156105c357506105a7565b6105cb61049c565b60015460fa90106105de576105de6105f3565b60015460fa901061052657506105a7565b6106ab5b60015b6001548110156105a7575b600154811080156106215750600281610100811015610002570154600014155b15610da757600101610601565b1561045157600160a060020a03831660009081526101026020526040812054925082141561065c57506105a5565b600160016000505403600060005054111561067757506105a5565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556105ef61049c565b60408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b156105a55760015482111561070157506105a7565b600082905561070e61049c565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001820154600282900a9081166000141593505b50505092915050565b156105a5575061010555565b156105a75760006101065550565b156105a55781600160a060020a0316ff5b156109c9576107a2846000610e8133610162565b1561085e577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f150600093506109c992505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061088e9050816101eb565b1580156108b1575060008181526101086020526040812054600160a060020a0316145b156109c95760008181526101086020908152604082208054600160a060020a0319168817815560018181018890556002918201805481865294849020909491821615610100026000190190911691909104601f9081019290920481019185919087908390106109d15760ff198135168380011785555b506109439291505b80821115610a01576000815560010161092f565b50507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b82800160010185558215610927579182015b828111156109275782358260005055916020019190600101906109e3565b5090565b15610a885760008381526101086020526040812054600160a060020a031614610a885760408051600091909120805460018281015460029384018054600160a060020a0394909416959194909391928392859291811615610100026000190116048015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b50919050565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b505091505060006040518083038185876185025a03f1505050600084815261010860209081526040805192819020805460018281015433600160a060020a0381811689529688018c9052948701819052919094166060860181905260a06080870181815260029485018054978816156101000260001901909716949094049087018190527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a975093958a9592949193909160c083019084908015610bbe5780601f10610b9357610100808354040283529160200191610bbe565b820191906000526020600020905b815481529060010190602001808311610ba157829003601f168201915b5050965050505050505060405180910390a16000838152610108602052604081208054600160a060020a0319168155600181810183905560028281018054858255939493909281161561010002600019011604601f819010610c2957505b505050600191505061017e565b601f016020900490600052602060002090810190610c1c919061092f565b60008581526101036020526040812080549093501415610ccf576000805483556001838101919091556101048054918201808255828015829011610c9e57818360005260206000209182019101610c9e919061092f565b50505060028301819055610104805487929081101561000257600091909152600080516020610fb983398151915201555b506001810154600283900a90811660001415610d9f5760408051600160a060020a03331681526020810187905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1815460019011610d8c576000858152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610fb98339815191529290920181905580825560018281018290556002909201559450610d9f9050565b8154600019018255600182018054821790555b505050919050565b5b60018054118015610dca57506001546002906101008110156100025701546000145b15610dde5760018054600019019055610da8565b60015481108015610e015750600154600290610100811015610002570154600014155b8015610e1b57506002816101008110156100025701546000145b15610e7c57600154600290610100811015610002578101549082610100811015610002579090016000505580610102600060028361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6105f6565b1561017e5761010754610e975b62015180420490565b1115610eb057600061010655610eab610e8e565b610107555b6101065480830110801590610ece5750610106546101055490830111155b15610ee45750610106805482019055600161017e565b50600061017e565b6105a56101045460005b81811015610f8f5761010480548290811015610002576000918252600080516020610fb9833981519152015414610f6957610104805461010391600091849081101561000257600080516020610fb983398151915201548252506020919091526040812081815560018101829055600201555b600101610ef6565b601f01602090049060005260206000209081019061051b919061092f565b610104805460008083559190915261045190600080516020610fb98339815191529081019061092f564c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe

 

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.