Sponsored Link:   ARNA Genomics - FIRST BLOCKCHAIN BIOTECH ECOSYSTEM. Join ICO Now!
Contract Overview
ETH Balance: 13,944.118538212267804696 Ether
ETH USD Value: $5,464,421.17 (@ $391.88/ETH)
No Of Transactions: 46 txns
  Latest 25 txns from a total Of 46 transactions View All

TxHash Age From To Value [TxFee]
0xb531b1959bf2d7de96a56361ef3601457f800a4149c8f62bd604e83a1b6083479 days 23 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00086594
0xa4f8be3f7ae71287a1af392a5614374cb30bc4b324a6186e88f7e39adcac41c59 days 23 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0037032
0xaca7a2c84088d1c3bc3cb68956a0320954979f93be12592c10b468cbcab8c4b29 days 23 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00042882
0x09702e28d5962fad696ce85cfb7662beb139fc8befe26a0be34edc075f55546917 days 8 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000192224
0x568a0005e89123960440e5cd4fae2ddf3a355b7f2bd9ef05c5d7254aedec614117 days 8 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0001418824
0xb2d1e1fc27e58ac6552ba5aef36dfe81251ee3ec7d9be31f8e5001bd702f9fd517 days 8 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00037032
0xec2eda17fb7e21d0833a42932ec000820cf1ce54d3c2f014941ab4d2bdc78b6528 days 18 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000173188
0xf687a6d0356ea30443b524b77d98c75b1b703be7631a40c6676b3f19168db77a28 days 18 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00175132
0xf610b4ebad0ef1b88e254692b78d6ed18386c699f0dad1b1fb5f5a060f283f7728 days 20 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0004896948
0xa625d116de9934501d3b9b2b656f37fb636d5881093d70bfeb547ca883ba350c28 days 20 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.001479744
0xc2151f217efe91b1e0a81ae69692b51dc08dd0e15d79d2e195521b86b6a4819092 days 18 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0008664
0x86e18b3073a4b049124b3d79d4e8602d2f39864eb33c12c93850db7448b1c9e592 days 18 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00370064
0x7e0e03683e16c4b36deb1a675a8998e13d749e466d06b22dbb1e5e214e963e02101 days 12 mins ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00090972
0xed98f2981770e9a0b9bffec20e1b33fa418980fdc5fc91924f074e6ced6763b9101 days 14 mins ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00388836
0x95e6abd6eba3c44627de101d9007d84123101eecde1643ce07d6cdda82ab4790108 days 3 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000852348
0xfa31a8bbcb19115241f1e13d957ad477da75d275e97b7c6ce109c19b8a996ce4108 days 3 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.003676428
0xfb46e9fdaf1e567db264bce73d698eccc148c04a974187511549e007d85d5b3c108 days 3 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.001009848
0xe5ea8893b2b16ddbbda8ec755822f637dea255c2e4e2fcb992baf3c346c592df108 days 3 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.003884328
0x8facd69af145e2fc4b13818efc94341429aa840c2184c5e433e327f273e76874111 days 40 mins ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0008664
0xa758931355d907c156cee35404a6a33eee242557026cb135b19ab0fc7482bd53111 days 41 mins ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0034988
0x4b0a06aed8a86fa6bc243db51cbb7de104b3018276bf7c786b0e959c9c9d2305111 days 43 mins ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0008664
0xbd2736d2f052b0f97ed5d81a8106815c2969a9f773207f4639aeb680a0590a3f111 days 44 mins ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00369936
0x23de75b6591af91dc31f4a9bff721776fdd3ad3ed2b21aacfe405ce43f7204dd183 days 21 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00086576
0x3d2e9fe04621831d8a4b96cb03fce2dcb6c85b257009a944d98b35109ca7fae4183 days 21 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00350136
0x37f1ba8ab306c963a9ed83a2b6a1b8d276d67fab8343644b8a029b845a97e895183 days 21 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0011664
[ 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
0xb531b1959bf2d7de96a56361ef3601457f800a4149c8f62bd604e83a1b60834745440819 days 23 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xd91e45416bfbbec6e2d1ae4ac83b788a21acf583125.40143512187205251 Ether
0x6abf061d8a02ba92da0f47c1649cfd31083e556a39317bf6ecd0407b639937f145440509 days 23 hrs ago0xa4463f9ff0d87531232c8c4819b536c332da6eac0x24c3235558572cff8054b5a419251d3b0d43e91b112.861291609684847259 Ether
0x0380c1597812a5d91debed7cd67b2926d62cca0768160e1ccfc6f3a416babef7454401610 days 8 mins ago0xa4463f9ff0d87531232c8c4819b536c332da6eac0x24c3235558572cff8054b5a419251d3b0d43e91b12.540143512187205251 Ether
0x09702e28d5962fad696ce85cfb7662beb139fc8befe26a0be34edc075f555469449822417 days 8 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xa4463f9ff0d87531232c8c4819b536c332da6eac1,111.06914728103115213 Ether
0x87a3a394347139ab9ad614fc9b22ff6720b75053fed261e338a8cd24295c7d7a445513224 days 7 hrs ago0xd91e45416bfbbec6e2d1ae4ac83b788a21acf5830x24c3235558572cff8054b5a419251d3b0d43e91b1,111.06914728103115213 Ether
0xec2eda17fb7e21d0833a42932ec000820cf1ce54d3c2f014941ab4d2bdc78b65442730128 days 18 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xd91e45416bfbbec6e2d1ae4ac83b788a21acf5835,777.86719603163383851 Ether
0x127e58e5170ca6d22e5cf042cbddff975e884ff6eee5766a4de607356e7455fd442726928 days 19 hrs ago0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e0x24c3235558572cff8054b5a419251d3b0d43e91b5,777.86719603163383851 Ether
0xf610b4ebad0ef1b88e254692b78d6ed18386c699f0dad1b1fb5f5a060f283f77442697428 days 20 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xd91e45416bfbbec6e2d1ae4ac83b788a21acf5831 Ether
0xc2151f217efe91b1e0a81ae69692b51dc08dd0e15d79d2e195521b86b6a48190419042692 days 18 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e2,500 Ether
0x7e0e03683e16c4b36deb1a675a8998e13d749e466d06b22dbb1e5e214e963e024156132101 days 12 mins ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e111.817059777271568221 Ether
0x9b6f62a342feb99c0c15c68331024b1c2f3abbfb0f22c09937481a7c951f0f5d4156117101 days 19 mins ago0xa4463f9ff0d87531232c8c4819b536c332da6eac0x24c3235558572cff8054b5a419251d3b0d43e91b111.817059777271568221 Ether
0x95e6abd6eba3c44627de101d9007d84123101eecde1643ce07d6cdda82ab47904126887108 days 3 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xa4463f9ff0d87531232c8c4819b536c332da6eac1,418.240155488823749071 Ether
0xfb46e9fdaf1e567db264bce73d698eccc148c04a974187511549e007d85d5b3c4126865108 days 3 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xa4463f9ff0d87531232c8c4819b536c332da6eac1 Ether
0x8facd69af145e2fc4b13818efc94341429aa840c2184c5e433e327f273e768744115219111 days 40 mins ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e1,299 Ether
0x4b0a06aed8a86fa6bc243db51cbb7de104b3018276bf7c786b0e959c9c9d23054115212111 days 43 mins ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e1 Ether
0xc680897035a6a190e98aa1b87a7c8e2ebf3665ca8a5114a89b8660fbda5d38b64115178111 days 55 mins ago0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e0x24c3235558572cff8054b5a419251d3b0d43e91b1,418.240155488823749071 Ether
0x92a2c98c58d404318e88b1161e88e4536ccd0bb05213dc59dc5990841e5256244115172111 days 57 mins ago0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e0x24c3235558572cff8054b5a419251d3b0d43e91b1 Ether
0x23de75b6591af91dc31f4a9bff721776fdd3ad3ed2b21aacfe405ce43f7204dd3754121183 days 21 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e1,241.958676131674263592 Ether
0x37f1ba8ab306c963a9ed83a2b6a1b8d276d67fab8343644b8a029b845a97e8953754105183 days 21 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e1 Ether
0x82be73b98dd3fcc155db8effad2900c90f0819e9a8c0fe6436d0041b5e7ef1a33753974183 days 22 hrs ago0x8f3d6447a647ecf3c185ecbb165d2e6c41fad5470x24c3235558572cff8054b5a419251d3b0d43e91b1,241.958676131674263592 Ether
0x35750f81b4eb1f11a7c151020c26f674b3736535d334bf1257b00f80cfe86f0a3753961183 days 22 hrs ago0x8f3d6447a647ecf3c185ecbb165d2e6c41fad5470x24c3235558572cff8054b5a419251d3b0d43e91b1 Ether
0x0cba509af3fde0f40ff370fb7a1cc9e8cf7899344c75ba9793a61cfc0e9528d53698443194 days 3 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x8f3d6447a647ecf3c185ecbb165d2e6c41fad547990 Ether
0x0f0ad1eae4c4e82f24b4f215c9b42542d4763bda2402277de15a0abf820cef8b3698428194 days 3 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x8f3d6447a647ecf3c185ecbb165d2e6c41fad54710 Ether
0x533cac1cd55ffeffbcb2aa2fd1829f8d6fe247e23652d13f48a4152825d769d63618027208 days 8 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x8f3d6447a647ecf3c185ecbb165d2e6c41fad547176.731067832616036395 Ether
0x2cf1a8e838642ca38f589da8ca0bbd7f036890aa8a8b8f553a7d1eba8e0582083618003208 days 8 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x8f3d6447a647ecf3c185ecbb165d2e6c41fad5470.1 Ether
[ Download CSV Export  ] 
Contract Name: Wallet
Compiler Version: v0.3.2-2016-04-18-81ae2a7
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts
//sol Wallet
// Multi-sig, daily-limited account proxy/wallet.
// @authors:
// Gav Wood <[email protected]>
// inheritable "property" contract that enables methods to be protected by requiring the acquiescence of either a
// single, or, crucially, each of a number of, designated owners.
// usage:
// use modifiers onlyowner (just own owned) or onlymanyowners(hash), whereby the same hash must be provided by
// some number (specified in constructor) of the set of owners (specified in the constructor, modifiable) before the
// interior is executed.
contract multiowned {

    // TYPES

    // struct for the status of a pending operation.
    struct PendingState {
        uint yetNeeded;
        uint ownersDone;
        uint index;
    }

    // EVENTS

    // this contract only has five types of events: it can accept a confirmation, in which case
    // we record owner and operation (hash) alongside it.
    event Confirmation(address owner, bytes32 operation);
    event Revoke(address owner, bytes32 operation);
    // some others are in the case of an owner changing.
    event OwnerChanged(address oldOwner, address newOwner);
    event OwnerAdded(address newOwner);
    event OwnerRemoved(address oldOwner);
    // the last one is emitted if the required signatures change
    event RequirementChanged(uint newRequirement);

    // MODIFIERS

    // simple single-sig function modifier.
    modifier onlyowner {
        if (isOwner(msg.sender))
            _
    }
    // multi-sig function modifier: the operation must have an intrinsic hash in order
    // that later attempts can be realised as the same underlying operation and
    // thus count as confirmations.
    modifier onlymanyowners(bytes32 _operation) {
        if (confirmAndCheck(_operation))
            _
    }

    // METHODS

    // constructor is given number of sigs required to do protected "onlymanyowners" transactions
    // as well as the selection of addresses capable of confirming them.
    function multiowned(address[] _owners, uint _required) {
        m_numOwners = _owners.length + 1;
        m_owners[1] = uint(msg.sender);
        m_ownerIndex[uint(msg.sender)] = 1;
        for (uint i = 0; i < _owners.length; ++i)
        {
            m_owners[2 + i] = uint(_owners[i]);
            m_ownerIndex[uint(_owners[i])] = 2 + i;
        }
        m_required = _required;
    }
    
    // Revokes a prior confirmation of the given operation
    function revoke(bytes32 _operation) external {
        uint ownerIndex = m_ownerIndex[uint(msg.sender)];
        // make sure they're an owner
        if (ownerIndex == 0) return;
        uint ownerIndexBit = 2**ownerIndex;
        var pending = m_pending[_operation];
        if (pending.ownersDone & ownerIndexBit > 0) {
            pending.yetNeeded++;
            pending.ownersDone -= ownerIndexBit;
            Revoke(msg.sender, _operation);
        }
    }
    
    // Replaces an owner `_from` with another `_to`.
    function changeOwner(address _from, address _to) onlymanyowners(sha3(msg.data, block.number)) external {
        if (isOwner(_to)) return;
        uint ownerIndex = m_ownerIndex[uint(_from)];
        if (ownerIndex == 0) return;

        clearPending();
        m_owners[ownerIndex] = uint(_to);
        m_ownerIndex[uint(_from)] = 0;
        m_ownerIndex[uint(_to)] = ownerIndex;
        OwnerChanged(_from, _to);
    }
    
    function addOwner(address _owner) onlymanyowners(sha3(msg.data, block.number)) external {
        if (isOwner(_owner)) return;

        clearPending();
        if (m_numOwners >= c_maxOwners)
            reorganizeOwners();
        if (m_numOwners >= c_maxOwners)
            return;
        m_numOwners++;
        m_owners[m_numOwners] = uint(_owner);
        m_ownerIndex[uint(_owner)] = m_numOwners;
        OwnerAdded(_owner);
    }
    
    function removeOwner(address _owner) onlymanyowners(sha3(msg.data, block.number)) external {
        uint ownerIndex = m_ownerIndex[uint(_owner)];
        if (ownerIndex == 0) return;
        if (m_required > m_numOwners - 1) return;

        m_owners[ownerIndex] = 0;
        m_ownerIndex[uint(_owner)] = 0;
        clearPending();
        reorganizeOwners(); //make sure m_numOwner is equal to the number of owners and always points to the optimal free slot
        OwnerRemoved(_owner);
    }
    
    function changeRequirement(uint _newRequired) onlymanyowners(sha3(msg.data, block.number)) external {
        if (_newRequired > m_numOwners) return;
        m_required = _newRequired;
        clearPending();
        RequirementChanged(_newRequired);
    }
    
    function isOwner(address _addr) returns (bool) {
        return m_ownerIndex[uint(_addr)] > 0;
    }
    
    function hasConfirmed(bytes32 _operation, address _owner) constant returns (bool) {
        var pending = m_pending[_operation];
        uint ownerIndex = m_ownerIndex[uint(_owner)];

        // make sure they're an owner
        if (ownerIndex == 0) return false;

        // determine the bit to set for this owner.
        uint ownerIndexBit = 2**ownerIndex;
        if (pending.ownersDone & ownerIndexBit == 0) {
            return false;
        } else {
            return true;
        }
    }
    
    // INTERNAL METHODS

    function confirmAndCheck(bytes32 _operation) internal returns (bool) {
        // determine what index the present sender is:
        uint ownerIndex = m_ownerIndex[uint(msg.sender)];
        // make sure they're an owner
        if (ownerIndex == 0) return;

        var pending = m_pending[_operation];
        // if we're not yet working on this operation, switch over and reset the confirmation status.
        if (pending.yetNeeded == 0) {
            // reset count of confirmations needed.
            pending.yetNeeded = m_required;
            // reset which owners have confirmed (none) - set our bitmap to 0.
            pending.ownersDone = 0;
            pending.index = m_pendingIndex.length++;
            m_pendingIndex[pending.index] = _operation;
        }
        // determine the bit to set for this owner.
        uint ownerIndexBit = 2**ownerIndex;
        // make sure we (the message sender) haven't confirmed this operation previously.
        if (pending.ownersDone & ownerIndexBit == 0) {
            Confirmation(msg.sender, _operation);
            // ok - check if count is enough to go ahead.
            if (pending.yetNeeded <= 1) {
                // enough confirmations: reset and run interior.
                delete m_pendingIndex[m_pending[_operation].index];
                delete m_pending[_operation];
                return true;
            }
            else
            {
                // not enough: record that this owner in particular confirmed.
                pending.yetNeeded--;
                pending.ownersDone |= ownerIndexBit;
            }
        }
    }

    function reorganizeOwners() private returns (bool) {
        uint free = 1;
        while (free < m_numOwners)
        {
            while (free < m_numOwners && m_owners[free] != 0) free++;
            while (m_numOwners > 1 && m_owners[m_numOwners] == 0) m_numOwners--;
            if (free < m_numOwners && m_owners[m_numOwners] != 0 && m_owners[free] == 0)
            {
                m_owners[free] = m_owners[m_numOwners];
                m_ownerIndex[m_owners[free]] = free;
                m_owners[m_numOwners] = 0;
            }
        }
    }
    
    function clearPending() internal {
        uint length = m_pendingIndex.length;
        for (uint i = 0; i < length; ++i)
            if (m_pendingIndex[i] != 0)
                delete m_pending[m_pendingIndex[i]];
        delete m_pendingIndex;
    }
        
    // FIELDS

    // the number of owners that must confirm the same operation before it is run.
    uint public m_required;
    // pointer used to find a free slot in m_owners
    uint public m_numOwners;
    
    // list of owners
    uint[256] m_owners;
    uint constant c_maxOwners = 250;
    // index on the list of owners to allow reverse lookup
    mapping(uint => uint) m_ownerIndex;
    // the ongoing operations.
    mapping(bytes32 => PendingState) m_pending;
    bytes32[] m_pendingIndex;
}

// inheritable "property" contract that enables methods to be protected by placing a linear limit (specifiable)
// on a particular resource per calendar day. is multiowned to allow the limit to be altered. resource that method
// uses is specified in the modifier.
contract daylimit is multiowned {

    // MODIFIERS

    // simple modifier for daily limit.
    modifier limitedDaily(uint _value) {
        if (underLimit(_value))
            _
    }

    // METHODS

    // constructor - stores initial daily limit and records the present day's index.
    function daylimit(uint _limit) {
        m_dailyLimit = _limit;
        m_lastDay = today();
    }
    // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today.
    function setDailyLimit(uint _newLimit) onlymanyowners(sha3(msg.data, block.number)) external {
        m_dailyLimit = _newLimit;
    }
    // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today.
    function resetSpentToday() onlymanyowners(sha3(msg.data, block.number)) external {
        m_spentToday = 0;
    }
    
    // INTERNAL METHODS
    
    // checks to see if there is at least `_value` left from the daily limit today. if there is, subtracts it and
    // returns true. otherwise just returns false.
    function underLimit(uint _value) internal onlyowner returns (bool) {
        // reset the spend limit if we're on a different day to last time.
        if (today() > m_lastDay) {
            m_spentToday = 0;
            m_lastDay = today();
        }
        // check to see if there's enough left - if so, subtract and return true.
        if (m_spentToday + _value >= m_spentToday && m_spentToday + _value <= m_dailyLimit) {
            m_spentToday += _value;
            return true;
        }
        return false;
    }
    // determines today's index.
    function today() private constant returns (uint) { return now / 1 days; }

    // FIELDS

    uint public m_dailyLimit;
    uint public m_spentToday;
    uint public m_lastDay;
}

// interface contract for multisig proxy contracts; see below for docs.
contract multisig {

    // EVENTS

    // logged events:
    // Funds has arrived into the wallet (record how much).
    event Deposit(address from, uint value);
    // Single transaction going out of the wallet (record who signed for it, how much, and to whom it's going).
    event SingleTransact(address owner, uint value, address to, bytes data);
    // Multi-sig transaction going out of the wallet (record who signed for it last, the operation hash, how much, and to whom it's going).
    event MultiTransact(address owner, bytes32 operation, uint value, address to, bytes data);
    // Confirmation still needed for a transaction.
    event ConfirmationNeeded(bytes32 operation, address initiator, uint value, address to, bytes data);
    
    // FUNCTIONS
    
    // TODO: document
    function changeOwner(address _from, address _to) external;
    function execute(address _to, uint _value, bytes _data) external returns (bytes32);
    function confirm(bytes32 _h) returns (bool);
}

// usage:
// bytes32 h = Wallet(w).from(oneOwner).transact(to, value, data);
// Wallet(w).from(anotherOwner).confirm(h);
contract Wallet is multisig, multiowned, daylimit {

    uint public version = 2;

    // TYPES

    // Transaction structure to remember details of transaction lest it need be saved for a later call.
    struct Transaction {
        address to;
        uint value;
        bytes data;
    }

    // METHODS

    // constructor - just pass on the owner array to the multiowned and
    // the limit to daylimit
    function Wallet(address[] _owners, uint _required, uint _daylimit)
            multiowned(_owners, _required) daylimit(_daylimit) {
    }
    
    // kills the contract sending everything to `_to`.
    function kill(address _to) onlymanyowners(sha3(msg.data, block.number)) external {
        suicide(_to);
    }
    
    // gets called when no other function matches
    function() {
        // just being sent some cash?
        if (msg.value > 0)
            Deposit(msg.sender, msg.value);
    }
    
    // Outside-visible transact entry point. Executes transacion immediately if below daily spend limit.
    // If not, goes into multisig process. We provide a hash on return to allow the sender to provide
    // shortcuts for the other confirmations (allowing them to avoid replicating the _to, _value
    // and _data arguments). They still get the option of using them if they want, anyways.
    function execute(address _to, uint _value, bytes _data) external onlyowner returns (bytes32 _r) {
        // first, take the opportunity to check that we're under the daily limit.
        if (underLimit(_value)) {
            SingleTransact(msg.sender, _value, _to, _data);
            // yes - just execute the call.
            _to.call.value(_value)(_data);
            return 0;
        }
        // determine our operation hash.
        _r = sha3(msg.data, block.number);
        if (!confirm(_r) && m_txs[_r].to == 0) {
            m_txs[_r].to = _to;
            m_txs[_r].value = _value;
            m_txs[_r].data = _data;
            ConfirmationNeeded(_r, msg.sender, _value, _to, _data);
        }
    }
    
    // confirm a transaction through just the hash. we use the previous transactions map, m_txs, in order
    // to determine the body of the transaction from the hash provided.
    function confirm(bytes32 _h) onlymanyowners(_h) returns (bool) {
        if (m_txs[_h].to != 0) {
            m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data);
            MultiTransact(msg.sender, _h, m_txs[_h].value, m_txs[_h].to, m_txs[_h].data);
            delete m_txs[_h];
            return true;
        }
    }
    
    // INTERNAL METHODS
    
    function clearPending() internal {
        uint length = m_pendingIndex.length;
        for (uint i = 0; i < length; ++i)
            delete m_txs[m_pendingIndex[i]];
        super.clearPending();
    }

    // FIELDS

    // pending transactions we have at present.
    mapping (bytes32 => Transaction) m_txs;
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"removeOwner","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"m_numOwners","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"m_lastDay","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"resetSpentToday","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"m_spentToday","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"addOwner","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"m_required","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_h","type":"bytes32"}],"name":"confirm","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"_newLimit","type":"uint256"}],"name":"setDailyLimit","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"execute","outputs":[{"name":"_r","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"_operation","type":"bytes32"}],"name":"revoke","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_newRequired","type":"uint256"}],"name":"changeRequirement","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"_operation","type":"bytes32"},{"name":"_owner","type":"address"}],"name":"hasConfirmed","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"kill","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"changeOwner","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"m_dailyLimit","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"_owners","type":"address[]"},{"name":"_required","type":"uint256"},{"name":"_daylimit","type":"uint256"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Confirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Revoke","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"}],"name":"OwnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newRequirement","type":"uint256"}],"name":"RequirementChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"SingleTransact","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"MultiTransact","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"operation","type":"bytes32"},{"indexed":false,"name":"initiator","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"ConfirmationNeeded","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052600261010860005055604051611b51380380611b51833981016040528080518201919060200180519060200190919080519060200190919050505b805b83835b600060018351016001600050819055503373ffffffffffffffffffffffffffffffffffffffff16600260005060016101008110156100025790900160005b5081905550600161010260005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005081905550600090505b825181101561016e5782818151811015610002579060200190602002015173ffffffffffffffffffffffffffffffffffffffff166002600050826002016101008110156100025790900160005b508190555080600201610102600050600085848151811015610002579060200190602002015173ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055505b80600101905080506100c2565b816000600050819055505b505050806101056000508190555061018f6101ad565b610107600050819055505b505b505050611992806101bf6000396000f35b600062015180420490506101bc565b9056606060405236156100f8576000357c010000000000000000000000000000000000000000000000000000000090048063173825d9146101605780632f54bf6e146101785780634123cb6b146101a457806352375093146101c757806354fd4d50146101ea5780635c52c2f51461020d578063659010e71461021c5780637065cb481461023f578063746c917114610257578063797af6271461027a578063b20d30a9146102a6578063b61d27f6146102be578063b75c7dc614610307578063ba51a6df1461031f578063c2cf732614610337578063cbf0b0c01461036c578063f00d4b5d14610384578063f1736d86146103a5576100f8565b61015e5b600034111561015b577fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3334604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b5b565b005b61017660048080359060200190919050506107c4565b005b61018e60048080359060200190919050506109a5565b6040518082815260200191505060405180910390f35b6101b16004805050610a91565b6040518082815260200191505060405180910390f35b6101d46004805050610b38565b6040518082815260200191505060405180910390f35b6101f76004805050610b42565b6040518082815260200191505060405180910390f35b61021a6004805050610adf565b005b6102296004805050610b2e565b6040518082815260200191505060405180910390f35b610255600480803590602001909190505061066e565b005b6102646004805050610a88565b6040518082815260200191505060405180910390f35b6102906004808035906020019091905050610f0e565b6040518082815260200191505060405180910390f35b6102bc6004808035906020019091905050610a9a565b005b6102f160048080359060200190919080359060200190919080359060200190820180359060200191909192905050610b9e565b6040518082815260200191505060405180910390f35b61031d60048080359060200190919050506103c8565b005b610335600480803590602001909190505061090f565b005b61035660048080359060200190919080359060200190919050506109e7565b6040518082815260200191505060405180910390f35b6103826004808035906020019091905050610b4c565b005b6103a360048080359060200190919080359060200190919050506104ca565b005b6103b26004805050610b24565b6040518082815260200191505060405180910390f35b60006000600061010260005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549250600083141561040f576104c4565b8260020a91506101036000506000858152602001908152602001600020600050905060008282600101600050541611156104c3578060000160008181505480929190600101919050555081816001016000828282505403925050819055507fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b3385604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b5b50505050565b600060003643604051808484808284378201915050828152602001935050505060405180910390206104fb816112db565b1561066757610509836109a5565b156105145750610669565b61010260005060008573ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005054915060008214156105565750610669565b61055e611777565b8273ffffffffffffffffffffffffffffffffffffffff166002600050836101008110156100025790900160005b5081905550600061010260005060008673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055508161010260005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055507fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c8484604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15b505b505050565b600036436040518084848082843782019150508281526020019350505050604051809103902061069d816112db565b156107bf576106ab826109a5565b156106b657506107c1565b6106be611777565b60fa6001600050541015156106d7576106d561153d565b505b60fa6001600050541015156106ec57506107c1565b60016000818150548092919060010191905055508173ffffffffffffffffffffffffffffffffffffffff1660026000506001600050546101008110156100025790900160005b508190555060016000505461010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c382604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b505b50565b600060003643604051808484808284378201915050828152602001935050505060405180910390206107f5816112db565b156109095761010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549150600082141561083c575061090b565b6001600160005054036000600050541115610857575061090b565b60006002600050836101008110156100025790900160005b5081905550600061010260005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055506108b2611777565b6108ba61153d565b507f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da83604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b505b5050565b600036436040518084848082843782019150508281526020019350505050604051809103902061093e816112db565b156109a05760016000505482111561095657506109a2565b81600060005081905550610968611777565b7facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da826040518082815260200191505060405180910390a15b505b50565b6000600061010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050541190506109e2565b919050565b60006000600060006101036000506000878152602001908152602001600020600050925061010260005060008673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000505491506000821415610a505760009350610a7f565b8160020a90506000818460010160005054161415610a755760009350610a7f56610a7e565b60019350610a7f565b5b50505092915050565b60006000505481565b60016000505481565b6000364360405180848480828437820191505082815260200193505050506040518091039020610ac9816112db565b15610ada5781610105600050819055505b505b50565b6000364360405180848480828437820191505082815260200193505050506040518091039020610b0e816112db565b15610b20576000610106600050819055505b505b565b6101056000505481565b6101066000505481565b6101076000505481565b6101086000505481565b6000364360405180848480828437820191505082815260200193505050506040518091039020610b7b816112db565b15610b99578173ffffffffffffffffffffffffffffffffffffffff16ff5b505b50565b6000610ba9336109a5565b15610f0557610bb7846116d7565b15610ca0577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd0043385878686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a18473ffffffffffffffffffffffffffffffffffffffff168484846040518083838082843782019150509250505060006040518083038185876185025a03f1925050505060006001029050610f06565b600036436040518084848082843782019150508281526020019350505050604051809103902090508050610cd381610f0e565b158015610d3357506000610109600050600083815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15610f045784610109600050600083815260200190815260200160002060005060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555083610109600050600083815260200190815260200160002060005060010160005081905550828261010960005060008481526020019081526020016000206000506002016000509190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610e0857803560ff1916838001178555610e39565b82800160010185558215610e39579182015b82811115610e38578235826000505591602001919060010190610e1a565b5b509050610e649190610e46565b80821115610e605760008181506000905550600101610e46565b5090565b50507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32813386888787604051808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b5b5b949350505050565b600081610f1a816112db565b156112d4576000610109600050600085815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156112d357610109600050600084815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610109600050600085815260200190815260200160002060005060010160005054610109600050600086815260200190815260200160002060005060020160005060405180828054600181600116156101000203166002900480156110765780601f1061104b57610100808354040283529160200191611076565b820191906000526020600020905b81548152906001019060200180831161105957829003601f168201915b505091505060006040518083038185876185025a03f192505050507fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a3384610109600050600087815260200190815260200160002060005060010160005054610109600050600088815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101096000506000898152602001908152602001600020600050600201600050604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156112005780601f106111d557610100808354040283529160200191611200565b820191906000526020600020905b8154815290600101906020018083116111e357829003601f168201915b5050965050505050505060405180910390a1610109600050600084815260200190815260200160002060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000506000905560028201600050805460018160011615610100020316600290046000825580601f1061128957506112c6565b601f0160209004906000526020600020908101906112c591906112a7565b808211156112c157600081815060009055506001016112a7565b5090565b5b50505060019150506112d6565b5b505b919050565b600060006000600061010260005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549250600083141561132457611535565b610103600050600086815260200190815260200160002060005091506000826000016000505414156113fd57600060005054826000016000508190555060008260010160005081905550610104600050805480919060010190908154818355818115116113c3578183600052602060002091820191016113c291906113a4565b808211156113be57600081815060009055506001016113a4565b5090565b5b5050508260020160005081905550846101046000508360020160005054815481101561000257906000526020600020900160005b50819055505b8260020a90506000818360010160005054161415611534577fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda3386604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001826000016000505411151561150757610104600050610103600050600087815260200190815260200160002060005060020160005054815481101561000257906000526020600020900160005b50600090556101036000506000868152602001908152602001600020600060008201600050600090556001820160005060009055600282016000506000905550506001935061153556611533565b816000016000818150548092919060019003919050555080826001016000828282505417925050819055505b5b5b505050919050565b60006000600190505b6001600050548110156116d2575b60016000505481108015611580575060006002600050826101008110156100025790900160005b505414155b15611592578080600101915050611554565b5b60016001600050541180156115c45750600060026000506001600050546101008110156100025790900160005b5054145b156115e357600160008181505480929190600190039190505550611593565b600160005054811080156116145750600060026000506001600050546101008110156100025790900160005b505414155b8015611637575060006002600050826101008110156100025790900160005b5054145b156116cd5760026000506001600050546101008110156100025790900160005b50546002600050826101008110156100025790900160005b50819055508061010260005060006002600050846101008110156100025790900160005b5054815260200190815260200160002060005081905550600060026000506001600050546101008110156100025790900160005b50819055505b611546565b5b5090565b60006116e2336109a5565b1561177157610107600050546116f6611980565b111561171b57600061010660005081905550611710611980565b610107600050819055505b610106600050548261010660005054011015801561174757506101056000505482610106600050540111155b15611768578161010660008282825054019250508190555060019050611772565b60009050611772565b5b919050565b60006000610104600050805490509150600090505b8181101561187857610109600050600061010460005083815481101561000257906000526020600020900160005b5054815260200190815260200160002060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000506000905560028201600050805460018160011615610100020316600290046000825580601f1061182a5750611867565b601f0160209004906000526020600020908101906118669190611848565b808211156118625760008181506000905550600101611848565b5090565b5b5050505b806001019050805061178c565b611880611885565b5b5050565b60006000610104600050805490509150600090505b8181101561193857600060010261010460005082815481101561000257906000526020600020900160005b505414151561192a57610103600050600061010460005083815481101561000257906000526020600020900160005b50548152602001908152602001600020600060008201600050600090556001820160005060009055600282016000506000905550505b5b806001019050805061189a565b61010460005080546000825590600052602060002090810190611979919061195b565b80821115611975576000818150600090555060010161195b565b5090565b5b505b5050565b6000620151804204905061198f565b9056
View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.