Sponsored Link:  Up to 2% Cryptocurrency Cashback - Reserve your card - Monaco App - www.mona.co
Contract Overview
ETH Balance: 0 Ether
ETH USD Value: $0
No Of Transactions: 271 txns
  Latest 25 txns from a total Of 271 transactions View All

TxHash Age From To Value [TxFee]
0xbfaf93f0ac6bd118009ca085eae1e3839d0d982bd90195bc76741d897862408a159 days 20 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0 Ether0.00102414
0xd32aa028bfa3ee8c1152a100dee2a39a46e8061d8704f41f4e90fbc3776c12c5245 days 3 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0 Ether0.00102542
0x9cb666163d453d5d0d8b4c02cd86b53ca872fbb6e6fde63746bbce2f7b908148245 days 5 hrs ago0x189eaa123c86d49a8c47566da4ac72cdb5ffe061  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd6 Ether0.000493306
0x1ac9beb3e7d62625698f9d9d7c10d1ca68bde296244ee316664e7b75135aa9b4245 days 15 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0 Ether0.00102542
0x10327e12f8233381d939a2c8a5af683b89770ff8a6ca59d8af3ca7058297940e245 days 16 hrs ago0x1fd6267f0d86f62d88172b998390afee2a1f54b6  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd2.34 Ether0.00045854
0xf0caef389f1d4a905b14792a7a2cd5cbb0ec2c270ae010a6b1b47764d913c8a3245 days 20 hrs agoPoloniex Wallet  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd1.11455086 Ether0.00067269
0x7e5347c3335acff42ab7759ba96531a5f47aa0295ee7acd192a49db63c79ae13245 days 23 hrs ago0x8e4ae68cfbd77a2971ca6b0348801afce4c29b8a  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd1 Ether0.00044846
0xca71ec7a01aae354689b4db5f3620ddcf05f2bc8994b085d6116c4a5c5cc899e246 days 1 hr ago0xfac0ead12866cd90f4490b7e1d033445d3b1cba4  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd8 Ether0.00044846
0xca453321538d75522f0843e12f82f24ef20aa5978e979834acfb5703f2de3152246 days 3 hrs agoPoloniex Wallet  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0.99999923 Ether0.00067269
0x3a04e5d2e1ba6bcf630c6e89556a19b32f99b3a5ffce52b1e8a09b41b1189efe246 days 13 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0 Ether0.00102542
0x3fb966d42eb1144d0311357cb2d3074d7b22f5a10689b3870b14ea5edada0945246 days 13 hrs ago0xccc78aef1e2f69fa165c7177fdf9111ddbaf4a65  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd1 Ether0.00044846
0x3b13e4b5dfe35096e6bc932328041ccaac766112647425994b6770ec6567fb4f246 days 15 hrs ago0xe4c99a1d99fac53d6ad331668aaa5e87e3f9ddb7  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd2 Ether0.000493306
0xc5f557405da1c6a641e4c8c178d12cd20b4df9ed088b2a216ae4cceeeb921974246 days 18 hrs agoPoloniex Wallet  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd4.13 Ether0.00067269
0x38ebe146c77b6bdc7cb55bbdf900f2f407c4e5f68a82cc5ff56bbbc568f3a9b1246 days 20 hrs agoPoloniex Wallet  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd1.42 Ether0.00067269
0x8f47fad6c95a0a8c909ff0a32ab0454cfbef50ddbe6194aa43a50cf387a6123c247 days 1 hr ago0x1fd6267f0d86f62d88172b998390afee2a1f54b6  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd4.7 Ether0.00045854
0x7af83385f051b4b7614003587db606d09e7fdc15fba3e429bb5bf23e3cb14ca5247 days 22 hrs agoPoloniex Wallet  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd2.04 Ether0.00067269
0x83f0cc61560e6e49a1f1317bba4802982adf5c45a00e89169a87c34e4e2bbcdf248 days 50 mins ago0x3746719cadf58346c5c28b8150492ffa4e1f6b1e  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd1.5 Ether0.000874497
0xc497c8ed69769b0bcbcfa7fdb1194c9ff372485ebddfc7c3daee34b5ce5ac315248 days 3 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0 Ether0.00102542
0x8f8734702dea04dcf0dec9d17ee6fe79fd3a8c79b918739136ef7a96cc25a2b7248 days 12 hrs agoPoloniex Wallet  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd1.22536246 Ether0.00067269
0x1f4bf3adb1b23c08325a9c046e7dd44e804626757716faa6fe3e774c87274d06248 days 15 hrs ago0xe3c48b4698a98a9c5f30a428d49d17ea0c19f349  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd1 Ether0.00044846
0x8eb0f6b3af4ff35e252bfa71f3b5638c9df704a1bf042db0735ad3ce3552e9fd248 days 16 hrs agoPoloniex Wallet  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd2.55775496 Ether0.00067269
0x163214c5dff7e1d961b5b0f52b86c3102b51086bb6dfa961eaf36a859d61c163248 days 19 hrs ago0x1fd6267f0d86f62d88172b998390afee2a1f54b6  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd1.27548567 Ether0.00045854
0x23fe030b74e190b5d0fe2c60ec1e61e8a0a8ae42174423c7f380b85cda4ff1d8249 days 3 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0 Ether0.001076691
0x4b28cb5d9b4f0b7ca642a9144b5fbc59eb7fe3b710c85d3a86fa73b03e0c4f0b249 days 13 hrs agoPoloniex Wallet  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd8.16740001 Ether0.00067269
0x2bc3d2625a976c5388a497617b06ce79218b8f5dbd3cd7af341803bbc5b3356b249 days 16 hrs agoPoloniex Wallet  IN   0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0.99 Ether0.00067269
[ 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
0xbfaf93f0ac6bd118009ca085eae1e3839d0d982bd90195bc76741d897862408a3973027159 days 20 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac0.04326464301614942 Ether
0xd32aa028bfa3ee8c1152a100dee2a39a46e8061d8704f41f4e90fbc3776c12c53509258245 days 3 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac6.8 Ether
0x1ac9beb3e7d62625698f9d9d7c10d1ca68bde296244ee316664e7b75135aa9b43506367245 days 15 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac13 Ether
0x3a04e5d2e1ba6bcf630c6e89556a19b32f99b3a5ffce52b1e8a09b41b1189efe3500927246 days 13 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac16.5 Ether
0xc497c8ed69769b0bcbcfa7fdb1194c9ff372485ebddfc7c3daee34b5ce5ac3153491525248 days 3 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac6 Ether
0x23fe030b74e190b5d0fe2c60ec1e61e8a0a8ae42174423c7f380b85cda4ff1d83485746249 days 3 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac15.8 Ether
0x363d20539219f7d97a5864c7aa17782ea6d869ec75358ecd7be5fbbfb1ee24943474813250 days 23 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac12.3 Ether
0x99f4c04f8cfa1d0161c5685ab4410869e70b3d78444c50e535b9aa73d1d3d2d73474355251 days 1 hr ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac15 Ether
0xcd4edca3bd114b16db59273f4353d307317acb28225a11233e665c700ac5d7f43468362252 days 39 mins ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac4 Ether
0x584a57ef2de90185232c5caac3a42ba8dd2f9641a6ed96026edc4fe9e7e7a74f3464533252 days 17 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac39 Ether
0x1ce4332a21a1afbd098a5c84e4f2a941b6a990e25e9e8ba0fd26d1f2d60812fd3452373254 days 18 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac7.3 Ether
0xf0b436e8a2b188f01cd0e7b2600b51bec007a2e54d627531469e9ee133dae3c03450488255 days 1 hr ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac9.46 Ether
0xcd467323b13488af84459f10b397479199ae393d90b0a14d23814cdab53f6e993447381255 days 14 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac10 Ether
0x245058cbd880ee654ceb3dbb9f93c3eff2fb2928eddd17b88656be46c40967653439681256 days 21 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac8 Ether
0x36919c5cba202ef1ba9dea46a508e7f0c308823e7bb4ef0beec76827a31e25bb3438205257 days 3 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac4 Ether
0xd2370e321ea8a867d7de1fb18672d3dc908fc34823e55bea5f28bf3e9af534303433067258 days 9 mins ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac11 Ether
0x6daea1c43aff080f85833df88f7768813294a788a0900d2e212c3306308acdfd3432922258 days 44 mins ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac12.4 Ether
0x1703123567a7fea623cb93ca0786aba197a226a6c4d097d2c2c0de1b9d5991673432768258 days 1 hr ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac1.4 Ether
0x6ee0750e05a6cd67853dd879dbf567c62977d85a53dca15fe315fd28fa1b9b7b3432245258 days 3 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac10.7 Ether
0xacf356114ccebc0b9e087f99e47b459dc7d71c156cbff4c2414c47f6248d722d3429115258 days 16 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac5 Ether
0xe21c03bc935ce154c01adde7bcde757905a6976e5dfb32cd970cbf59acedc01c3426418259 days 3 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac11.15 Ether
0xce298c609f9c09d52a6e22c3d3613730e0784d5958c1a9e0f358f1ef943eabfc3415896260 days 21 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac2.34 Ether
0xb9969fe1cb9a495c6097c5b760e91a40f65ace32e52e99e19111b8bc4210e2973415859260 days 21 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x58583ca9295a1064fa46b5070b4c824ba3d95d300.30106588 Ether
0xe99157bbc9f9b653fdc9f578c9f612b4baa14c9940e567e87a1d7454246b28f23412928261 days 9 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac8 Ether
0x2e307788a759e425ca66e64cbc4b0014ff1939e7635e1a6a0cc2b645a7baff073408434262 days 3 hrs ago0x92b70b428ae3e1d9edd67694757eff8d28d4cdfd0x8334a533f0c3f904ca59061fae649a8c596b09ac7.4 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.