Sponsored Link:   BubbleTone - Blockchain in Telecom, directly connecting mobile operators and users globally, launches its unique ICO!
Contract Overview
ETH Balance: 37,402.585562962431031491 Ether
ETH USD Value: $21,921,655.40 (@ $586.10/ETH)
No Of Transactions: 158 txns
Misc  
   
Address Watch Add To Watch List
Contract Creator 0x8bae48f227d978d084b009b775222baaf61ed9feat txn 0xbd587324db0a5ab33ba78df60d10f1c5ec588f77ef0f154c04f2bb8192b048cc
Token Balances
  Latest 25 txns from a total Of 158 transactions View All

TxHash Age From To Value [TxFee]
0x42c9e61ef92d9a46b98a6f78987affb82ef1de21da5cd86348efbaba4eccf44915 days 22 hrs ago0xdec0180bd3b1312c4eec3910faed36c63ebb4e01  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000187265
0xb8e73c6ff2736811e156d96fc15b0ca51dc61fd7838ea71e238e21be3354e2a324 days 16 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000870195
0x9cbc1db55566fb6d51182732b1a8f9fca15627b45009bc06f8142e3ef06fccd924 days 16 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000254835
0x2cd567be5a562546158261f82c5f0b634748d68c4ec5271004a38befe92c4cd329 days 21 hrs ago0xdec0180bd3b1312c4eec3910faed36c63ebb4e01  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000187265
0x9c7ed506b083da9ea8fa8cbd749322cca9af12e2eb60de2afe7179722325844129 days 21 hrs ago0xdec0180bd3b1312c4eec3910faed36c63ebb4e01  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000118285
0xb839958f3de6ef4197c444a90facde6156a4f47b6dd8996d0f4c13071ed0b2c730 days 2 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000869875
0xe972170ad89c8340e6865bc43932a7a70873042f6d30a8d69fc8f143ce360d0130 days 7 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.001385380714
0xf1e21841fb8741784adf012165c7451f575e453a9e246fb490047dd5334a176c30 days 7 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000152901
0x41e71775228cfbb85ebc6edd3d90c125818b2262f2c67d1cab33c683ce90b55f41 days 9 hrs ago0x32cf61edb8408223de1bb5b5f2661cda9e17fba6  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000023842
0xed95f368c4ea6bf94968071a9f62c196e4e0e7cd69f42046e178527f829e08f342 days 23 hrs ago0x768d4f1cd8594701be8b906462b73c9040e392df  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00100614
0xb8561607b776087df1cbac24a719be9f7ae2562a1e19e8582302f2d75e2c802942 days 23 hrs ago0x768d4f1cd8594701be8b906462b73c9040e392df  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000963172
0xb1a5ebdf107676cb2658263a6425f3b50b72a5106561640c7268527b957da08d49 days 18 hrs ago0x32cf61edb8408223de1bb5b5f2661cda9e17fba6  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000023261
0xde6771bf0048e5a1e6ac24b7a73229d765ba40f57e264eb0dbde1059df4d517057 days 8 hrs ago0xebeac5fda740e3399c44ba22914a7bf849119edd  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000189666
0xf94b34f327ffcaab136bac8791830f1ac10d8fd8cbfa3555298283424c329a9d62 days 22 hrs ago0x32cf61edb8408223de1bb5b5f2661cda9e17fba6  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000023668
0x19d40628ce11941bae1c9b361924a46a930b1cad83bbd7bb824eee66b1cdd61f70 days 4 hrs ago0x468b4b8ce7eaa4399badd22376677a8e06ae1f02  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000024412
0x68f4786052b29536446a18b270e26ee5885f99862a2d5a46df63dc9cc004c7d375 days 12 hrs ago0x519dd5e746e19e57e1c3079e36ce792f62fd207c  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000022067
0x5ba3374c509129d4cb450ebb23ac5bfb6a1aab2d5262be8dc678db5b271a782687 days 17 hrs ago0x7f2132d0bacd1104d5228aab463a506f64912bd7  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000771559
0xfe72368fafb1b290cdb92280f70d2b332f3b75cfbeb429f9adf8c7e4f1c8cea7108 days 5 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00242642
0x174d11ece3a8a8cf7c599dcec79464aeee1b54b4eefd460a73b7904fd619da1d108 days 5 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00121526
0x1a2359c381cfbd248c6bd7dc82b4d3859991419b252c51a470448aa93d60cb03108 days 5 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00843178
0x068be5ec94e36549e0af19893185cb49fcee7e4566417b8fbabb661cc7e69f62108 days 5 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00074906
0xe8a8991d9d2fc9e837a90b8d39c25a2b5c54cc5b3f4f803f777e77a7cf68b02b108 days 21 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00348078
0x997ecdda77615a01881ec6ab1680149341f76f32e69e8d112daa1853ca4824a5108 days 21 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00101934
0xcf5206707264b91f44e81216449b7d33975761d20a4e05e3a453299815f24acc108 days 22 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00244174
0xe5215f9a55f43ba1cfba52e857fdda5889c441337f676f2483aaae42da77bef6108 days 22 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00242642
[ 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
0x42c9e61ef92d9a46b98a6f78987affb82ef1de21da5cd86348efbaba4eccf449537986115 days 22 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d63220,000 Ether
0x9cbc1db55566fb6d51182732b1a8f9fca15627b45009bc06f8142e3ef06fccd9532744924 days 16 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6321 Ether
0x2cd567be5a562546158261f82c5f0b634748d68c4ec5271004a38befe92c4cd3529624429 days 21 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xa0e8c85db967bcc9d491d8cb5664b414adee3c2a239.8 Ether
0xe972170ad89c8340e6865bc43932a7a70873042f6d30a8d69fc8f143ce360d01529375930 days 7 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xa0e8c85db967bcc9d491d8cb5664b414adee3c2a0.1 Ether
0xf1e21841fb8741784adf012165c7451f575e453a9e246fb490047dd5334a176c529375930 days 7 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xa0e8c85db967bcc9d491d8cb5664b414adee3c2a0.1 Ether
0x26b787cab65bdf8602ad6da767ef437d808336da6f2a30e635d50e83dca2f5d4509205864 days 12 hrs ago0x4c7d87157d964963d5e4c648b5af750a44379bf70xbf35faa9c265baf50c9cff8c389c363b057532750.001093362198095363 Ether
0xf7c4c464d10eb2b5ce9bcb7091e5a7c49dfad0a0e73829f6986366afa9434531509174164 days 13 hrs ago0x4c7d87157d964963d5e4c648b5af750a44379bf70xbf35faa9c265baf50c9cff8c389c363b057532750.00220453693701638 Ether
0x068be5ec94e36549e0af19893185cb49fcee7e4566417b8fbabb661cc7e69f624840727108 days 5 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6328,740 Ether
0x997ecdda77615a01881ec6ab1680149341f76f32e69e8d112daa1853ca4824a54836730108 days 21 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6320.1 Ether
0x70852dd529f60014c6bb612a9b7d6c6774a5b336a571b4d003d036a86899acfb4365716187 days 20 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xdec0180bd3b1312c4eec3910faed36c63ebb4e01100 Ether
0xf33a1aa6528ffa9eed282b5364dbd6e039e28eb0c6da4cccf746d58b10d109534363087188 days 18 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xdec0180bd3b1312c4eec3910faed36c63ebb4e0199.9 Ether
0x7c47d3e030586bad73e22333fa9dec2b2115eeb0aad516f79be3246edcc07f3a4363084188 days 18 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xdec0180bd3b1312c4eec3910faed36c63ebb4e010.1 Ether
0x25dfb5826f1e7fa39831a410991f767dbbbe604984ab6d08e6b3b817514201354353124192 days 4 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6325,999 Ether
0xac7c2ded61be91464051ce101f3554b33c18bfd3da223842a93d2a4a25c347a54353071192 days 4 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6321 Ether
0x3e3ee2a08148ee9911b4585f7cf67ccff98e0ac0ad9ee53a6b1f224b59e00d194215232234 days 9 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d632100 Ether
0xf45f59ee9b4d9ba26a514f9eaddf8070068844726d57aa4fa7ddabce92e486344211782235 days 8 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d632100 Ether
0x0d2c1a96c41cca4e77e1da4cac41117977b8a617b1e3a6dcb741eb4b679098ee4207007236 days 17 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d632100 Ether
0x1cc3b3848fa488856ae41f639b756400489dad1c35abace10c6c65dfec553cad4203043237 days 20 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d63299 Ether
0xa03e0f89be837916a25bed354ea6fac235a12745e680d17904f9602a68406c844202985237 days 21 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6321 Ether
0xfde2d0f2e97a3bd1d514bc7f3c4ef76b114d076df9f8cc4a7b69b77ca00fae2b3813253321 days 4 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x019a86adcac53b2bf423bc3944907de1c363a2281 Ether
0xdc81eff532b6423928f598f650658ce284443b72436dbe3870a239b89c1ce4af3175356431 days 3 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x7be7fad439128cca6738f8a6813519af4248365c90 Ether
0x29d6cbe3d2a84b20466550f577316a290f8c2edf4c44b1cf0dac5fceee7dd8053175259431 days 3 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x7be7fad439128cca6738f8a6813519af4248365c5,000 Ether
0x702177aacf116b9402fe5ddbce8a16fc2b7e2c8285aec47fe35adab6c12953353175138431 days 4 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x7be7fad439128cca6738f8a6813519af4248365c10 Ether
0xcca3760ba74e616b49fe3a3ea32fe9a42de3723fd9e48cbd6ab8a9fba5907ada2905885475 days 16 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xf4595a5072a7a1d1f1e901063271fb9c7b286ac4ca9416cc58310adf88c0747e2905780475 days 16 hrs 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.