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: 547 txns
  Latest 25 txns from a total Of 547 transactions View All

TxHash Age From To Value [TxFee]
0x5de9748fb66ee506f9a7695002b3299187e64e7f230261804a8ea34e1aded9a7162 days 20 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0 Ether0.00102414
0xf8c75f10011f118b5c1d7c713581aba93547b6eb58dfb0ab2968d3f257463212163 days 12 hrs agoPoloniex Wallet  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e1.12401002 Ether0.001131432374
0x0559156a415254abbcd005fa2dcd2ecd0013abca6ba92bb3aab7d38666a59486163 days 18 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0 Ether0.00102542
0xa7420d26812141ddd0cb78f7de4ee9762bf21de2e15b65e13c7e36ee40271263165 days 16 hrs agoPoloniex Wallet  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0.395 Ether0.00112115
0xf0867dd66e142465cd9830983f03a0d33176fffec3d1272fba41f049c1989f8f178 days 22 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0 Ether0.00102542
0x7ec6c7e4b5470cdae4eb119d491c5d7e0148fc30610334bee8459e4ebf369b47179 days 1 hr agoPoloniex Wallet  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0.99592371 Ether0.000746360759
0x936b3690b96ecbd39454bebd34cd3d4424fde650a5b632e2d86ac4f14bffeae6179 days 9 hrs ago0x12655b498fa6ca00579a17db9d4953cfecf86125  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0.4 Ether0.000441
0x3c4278ee21eedf586d79e977c7dfdcb1b9e679009e2aae5d1cd69ad5645990ba179 days 16 hrs ago0x1fd6267f0d86f62d88172b998390afee2a1f54b6  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e4 Ether0.000481467
0x0fc68f6a6a2c41f23dc7a03290d5dc075f0d908f1034e77f50d6ee6103919099179 days 17 hrs ago0x2599eb907e1b7fce6f73b0f72ff2c6b37c67f29f  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0.33618367 Ether0.000470883
0xadcc0fcc378e8fb68bb53996c92cdea0e3c1590bbc3a3738415d28cb75ee5362179 days 19 hrs ago0x7ed1e469fcb3ee19c0366d829e291451be638e59  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0.2 Ether0.00089692
0xe8490b4de04d86646e8acb938e6f652de866f3da16a56f8400dc0493c53e5911179 days 22 hrs ago0x237cb924e17bec8d1e4c0db18262ecb48e0239f5  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0.1 Ether0.000470883
0x3bc9bf66e8fcb7357f5b8e5298493f8908836e78ee3f2ed4cf989a34f65ca0f5179 days 22 hrs agoPoloniex Wallet  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e1 Ether0.000750684736
0x3d67301f852f84c2aeb4e81ca0ba9eb476dc4f89ae7b1b68bb4816c398a500f5180 days 3 hrs ago0x1fd6267f0d86f62d88172b998390afee2a1f54b6  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e1 Ether0.000474916327
0x9358b1d726c227820eaf8c0f623f15a8bb409d4f585be24f0761d3b6d71f33b7180 days 9 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0 Ether0.000905938
0xc5b3540403bb8fcc8e4b33a816a86dc2cc6bf155e6094aa5897e60404637df9b180 days 9 hrs ago0x1fd6267f0d86f62d88172b998390afee2a1f54b6  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0.5 Ether0.000474916327
0x99b896cb457e5d5526d36c877f6143e15d3640da12ee1a8fc89058a8c46e665e180 days 12 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0 Ether0.001029475
0x3575ab2ec54782cc115891d4b05f3c71cc87b876c77ca278d678164ea87d1b56180 days 13 hrs agoPoloniex Wallet  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e1.51995768 Ether0.00067269
0x87a43cec1464fcc0e442230c9a7b6140dc6fd1d0f6822a4232c6869486c20b34180 days 14 hrs ago0x4390e48b681f37d82edeeaf6f38743b4026f03fd  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e1 Ether0.000470883
0xbd618118c25f587daf768aebf6131d76ea063b51871e9235b0ff542804c01084180 days 16 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0 Ether0.00082358
0x69b2c1554e29f3ef8acfda2c077cec127be232b990e06cbed1f8ee6f38ca45c1180 days 16 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0 Ether0.000864759
0xec0bd68e8ee21ae10a4be5fa05a8a7bc603d57a73f632594cff5025a9affd00c180 days 17 hrs ago0x7e63b1c36e34193f95388cd4a4e486afafd2bef1  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0.1 Ether0.00044846
0x843a70bc72faa702de73292ea123ac414595d2d9962d87ecc2fcf92e391f14e9180 days 19 hrs ago0x203acff9395fb9426457b3eeeffd8c452c03256f  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0.2 Ether0.000470883
0xdfcd2aa9daeb3ec206fd68c8ca6d78bc4b3ae9f78763d845991f021e73496fd4180 days 20 hrs agoPoloniex Wallet  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0.98 Ether0.00069241291
0xa8695d43c120449844f3c3f78ba8833f81f37b717ebfe1a4d7822f25cf4eb9ef180 days 23 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e0 Ether0.001127962
0xd0f83dea0a4bf25a30515756df0c6243f87a2d8c1d3702e2566a2cf0f12b808a180 days 23 hrs ago0x9b4945322c0570835f84706cd50c06cdf389034c  IN   0xff5088a41b98ad27d2852c0329c544f9b5d1432e3.02 Ether0.000493306
[ 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
0x5de9748fb66ee506f9a7695002b3299187e64e7f230261804a8ea34e1aded9a73977399162 days 20 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac1.12401002 Ether
0x0559156a415254abbcd005fa2dcd2ecd0013abca6ba92bb3aab7d38666a594863972790163 days 18 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac0.536076772917983696 Ether
0xf0867dd66e142465cd9830983f03a0d33176fffec3d1272fba41f049c1989f8f3897148178 days 22 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac7.5 Ether
0x9358b1d726c227820eaf8c0f623f15a8bb409d4f585be24f0761d3b6d71f33b73889408180 days 9 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac0.5 Ether
0x99b896cb457e5d5526d36c877f6143e15d3640da12ee1a8fc89058a8c46e665e3888556180 days 12 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac2.52 Ether
0xbd618118c25f587daf768aebf6131d76ea063b51871e9235b0ff542804c010843887918180 days 16 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac0.87 Ether
0x69b2c1554e29f3ef8acfda2c077cec127be232b990e06cbed1f8ee6f38ca45c13887913180 days 16 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac1.1 Ether
0xa8695d43c120449844f3c3f78ba8833f81f37b717ebfe1a4d7822f25cf4eb9ef3886289180 days 23 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac8 Ether
0x45ded0b405faf232b5dea33fc74b5006a3159a644a17142d32118fcff0ba882e3882605181 days 15 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac10.45 Ether
0xb1d8f6a9b8585a78baa4806b331dfc9708e2071024790511ba070d21674cbb6b3881701181 days 19 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac15 Ether
0x3652476867ec066a4cc1a2d80e008c03661947328206ab128f67e5efbf2c0a613877825182 days 13 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac5 Ether
0xce6dfe902b0b9c911e48d6ceeed0e9d6b72af9d69bd3fafeed13ef4eba5055a43877289182 days 15 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac8.76 Ether
0xfbf70d2db15ff20c4de96c0c14a3b083b2d99b429c30efdd44fe9e252a73ec0e3873691183 days 7 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac6.7 Ether
0xa7ebb578956994cacbd48bf8af43086d5ca15ffd7111a4af9917e507003271063872774183 days 12 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x852c827ca551f805500bbf75c8e4b08a2be452e40.01866205 Ether
0xcd699e78d8ef62c83f5ac770245f64f73dd30ef2f04e224ba277a905acee3b9f3871565183 days 17 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac1.19 Ether
0xf47512e7d371b0bc9d7c94ebb08cafc209f18596570b956cdcd77edc26f891383862779185 days 9 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac0.00081 Ether
0x1505543a6571528857f6b8dded84b2d181b6f0f6923e1f97e7b7d43cdba674dc3862756185 days 9 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac0.00081 Ether
0x3e5878d9307c3cabacaa60541967476c3a22a94608d0cc63854071a975ad08343862711185 days 9 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac4.5 Ether
0x875d613b8b4b32bf22d00c52d8c3e3a83281514939bfd6e435e8bb43d607f8463860554185 days 19 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac3 Ether
0xdcb460c4ee6a6f4b2a481c62afc2fa4f4f7c073a059661ad3873c1537f3296603859974185 days 22 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac0.5 Ether
0xdc080af6d6de47efe4247e10f02872b1ec3169715f5cc97f0f17b17c9f2b04e23859698185 days 23 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac2.14 Ether
0x77e23556faac51643dd64cf60d59bd8a67bf8c4d7a000fe372c82696952037f43857408186 days 10 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac5.8 Ether
0x0fda3307a63def4221b3d3e8babee1a8b89d19127eb1cc24440bfca661a6f4d33855718186 days 17 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac1.1 Ether
0x1b55fc77f2a30777cf34e3abcab79a317a41348bcfe544d06f5a6410952d3a703855273186 days 19 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac0.9 Ether
0xc3c247de6be44b9ed58f66eb8d3568f7936f045f5b2ea29d2720df489e5e5e4a3855093186 days 20 hrs ago0xff5088a41b98ad27d2852c0329c544f9b5d1432e0x8334a533f0c3f904ca59061fae649a8c596b09ac2.2 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.