Sponsored Link:   COVESTING - EU-based digital asset exchange. Aggregated liquidity. Algorithmic & Copy-trading features. 24/7 support. Get access!
 Latest 25 txns from a total Of 115 transactions
View All

TxHash Age From To Value [TxFee]
0xd7a8757148884e21b9deb60360e3d3e7460e330af77df2881362b7986884bf6731 days 8 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.00052694
0xe04390f20e35a502a12b32429ba37b1a6204767cf65d5ae2f0322837ae6d1f8632 days 10 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000460287
0x566484092eb754ebedb679c37a8279bb5529d57e7f30f83e2c9cd9837f9f817746 days 5 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000153813
0xc3403ead2fe1b45c942eb9a6e1f14a9e0ff12aa621ff578a10677c0e49ff861f54 days 10 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.00010267
0x5ea3fd64c9d7d41a45e33016889a9986d14d8a919e0d667bebe5cf910100de9155 days 5 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000154005
0x98d28bdefe91dfa88207de0932ea41d85117ceca546851738366e32fa55fe06757 days 13 mins ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000102286
0x6e5d1fb25867f8fd0d1dfc1269920306d3aac89b12b27f26dd9f493309428b3876 days 8 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000066143
0xc2384eb6556b35bc6c623188c6f8f791748ad5e9bb7e099ec47492fdcb5121cc77 days 2 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x49ed20f3e7a4b430f77f8795e3d474f41a4ed72a470103650ef70082a03da7ad77 days 2 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x69fbfda5a531a4ba671dc9985ef1869a69a739a0ba555cb3997a42e26ee1e65677 days 2 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.00078666
0xef60a2153a42ad4231474003f53c42a8cefce966bf6bfffc4ecdb15e7086c02977 days 2 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0xa507effa0c82bc0760636d5defa2fca61a17a1c969792784239508beb5dd73c977 days 2 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0xc428c2316aaed6c2b00797369943622152f8cdd3761f067a204777735a1fd27477 days 2 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x0c1c4e9ce7fd83bc4f6a231a71758361e882f58f85d06e5428d33e512d635a6177 days 2 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x9bde9e5a2164d4f439f25f88627043078885824b063b6b8541a181a7b7ad2c5877 days 2 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x82f103b17ebfd2ee752164eb9023ce976055e53de6029c471c8fa439fe75a0ad77 days 2 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x57371a6930b75ef756192bb74d8b41a697d7ba20b4c9a486f859d230a04f9e7e77 days 2 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x3bf16a8b073fc84302a606182490447442722ee8023dd125672bfd0cbf7d672677 days 2 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000788004
0x29348a2ac29d1cf722f224dccfeb7dc81e321845c7e1b83c693ceec6d7e18b0a77 days 2 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000684936
0x13e3816838ca3e311e390631647570b7d24df8a6293a7504c51f2e508de9a90185 days 2 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000204572
0x3db1e54fef8b44200bd7ecf98530168c177154a166ffbcc88dc03985aba53ae5106 days 6 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000164204
0x18a12a609c14dcfff88c6b631647caa262c5663ecca000adba5c11259a1c7e40106 days 6 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000210776
0x937eeb5b79f80a039ddb42f0ce7ede6d04775cf3c4daa1954cfe6de807e78bcf117 days 6 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.000204572
0xf3e84d82553bcdf1de67f2fcac3bd1d8112a5916457e9a1b15de41c22d2ed0bd126 days 10 hrs ago0x22b84d5ffea8b801c0422afe752377a64aa738c2  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a3 Ether0.002040493
0xbb7f0b4420b0447cd5cef607d4ec2f8607b2fc8bf64d5527d17af6ba6c1bea56145 days 10 hrs ago0x5afc1b50276bab61a44c0bac4746c5e8c8285fe3  IN   0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0 Ether0.00210776
[ 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
0x80318a1c813cbd351c6fb638419cd0a56dce4acbdd1236d6332bd129a608d1b6581638159 mins ago0x4d0f250ced64af066faa35a404c6858d17d8ee780x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x43f0036ce62ebca36e79890e7613059b34381e06efea09b4d18df9f7d3deddb158161091 hr 59 mins ago0x702156b2fb4a1ff8fc46afc99afcc4d202ff76df0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x677364a986e3eabf38f83deb9d94968e7a7a88824fc733d52f2989980b64503258161032 hrs ago0x8db4d928dae7f196c5d3e27bb8e5504e002172df0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xc669d84ddbf9be80c38cca1db4e8961af3d21f8367fdf11d07879fe8dd3ddca158160872 hrs 4 mins ago0x702156b2fb4a1ff8fc46afc99afcc4d202ff76df0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xeb9de24b288d2be7125828c154e18940e624ec4852c86005e625865d57d4f84e58160582 hrs 13 mins ago0xdaaf5da2fccd3c980c0d660b0f2ca2d8e43652170x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x5d76d9c67b936626c7d3e59ee24d53a6f9e85b83d0a82cc7f321f3ea5c268b6a58160312 hrs 23 mins ago0xdaaf5da2fccd3c980c0d660b0f2ca2d8e43652170x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x0133850b1a1c5279761102f96df077014a5ccef375ae1d8711865a108b18af6158160212 hrs 25 mins ago0x8db4d928dae7f196c5d3e27bb8e5504e002172df0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x270cae697a1bd274137e8b9b162442285f718d3cc0c31e7709cbcc9ef07d4e2158160182 hrs 26 mins ago0x8db4d928dae7f196c5d3e27bb8e5504e002172df0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x801030fa6b5710d09c94982cf7725b8a1326e0af7c6dadf638db72b7facba33c58160142 hrs 27 mins ago0xdaaf5da2fccd3c980c0d660b0f2ca2d8e43652170x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xff056f6b2361a4942ad4e7c92d930d807863489f1f10cee92bcd55b2954ade3858160082 hrs 28 mins ago0x8db4d928dae7f196c5d3e27bb8e5504e002172df0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x26d91e80eb1c4d047ef3ade7f56eced4349cbaf999cc2cab315d70b63271abca58160082 hrs 28 mins ago0xdaaf5da2fccd3c980c0d660b0f2ca2d8e43652170x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x2b4cd3f4644ec7b7ca690c4e079ba121f3c342d21e2cb7c6aef49329c552302d58160042 hrs 29 mins ago0x8db4d928dae7f196c5d3e27bb8e5504e002172df0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xdcce7c44423d4175ba35013e654cc3e87ade91d444aec8e89d0bdf6a261964c258160002 hrs 32 mins ago0x8db4d928dae7f196c5d3e27bb8e5504e002172df0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xb5a01f95995d626ca662c3a2cfd6ce6d0d3f3c74def7a6bf15fd41b6de2e2a4758159942 hrs 33 mins ago0xdaaf5da2fccd3c980c0d660b0f2ca2d8e43652170x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x64ff237a154e7ff6640486c7ebfc975c0705c506ca855175598edc378250b11758159922 hrs 34 mins ago0xdaaf5da2fccd3c980c0d660b0f2ca2d8e43652170x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x960cbbcb99b2ea818961f9917807854dd8bc5be0419f1a424b8f9bbc5c64b26b58159842 hrs 35 mins ago0xdaaf5da2fccd3c980c0d660b0f2ca2d8e43652170x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xb0d5414d5c02a59171d438e1aac845882398211e87bdb47135da879dbb5bfb3858159722 hrs 38 mins ago0x8db4d928dae7f196c5d3e27bb8e5504e002172df0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xb35270c7012bd161b6855a00243f9045a732e1700d678045d5a9ca97dd2c35cc58159572 hrs 42 mins ago0x8db4d928dae7f196c5d3e27bb8e5504e002172df0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x312127c1d599d47ff60a5d431609e116b49e32edb649b3b310423cad6cd558ec58159552 hrs 43 mins ago0x26d270bc4be367584b7926a57d19592ae98956c60x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xdcea3c8d76b648c445a9a8a6ea34d1e075c4d0d2cd9ac831932af94abf1691a658159522 hrs 44 mins ago0x2e4340188c6aa58ec9b76975c7b72af185ff4d720x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.01 Ether
0x01bea8c8d08f0ea0342503a21026c0b8055274df5a258b70f264c7e6d17e831e58159412 hrs 46 mins ago0x44a37efc876d76c27218d45c2964c6d7a0708be90x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0xa017745b9f4152ffbb3f92bb5eba68b9a8427fcfa1293b1b619b4382b47d4ebc58159262 hrs 50 mins ago0x8db4d928dae7f196c5d3e27bb8e5504e002172df0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x325cfa85bad981e8c9ed84c2cb39a97cf6310464babcabcfc1afd60a1a7aefd158159212 hrs 51 mins ago0x8db4d928dae7f196c5d3e27bb8e5504e002172df0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x8ccab3eaea44cbd4b1d53ff4973aee7a42a538960d405e1db937bb1b8620d3ed58159172 hrs 52 mins ago0x8db4d928dae7f196c5d3e27bb8e5504e002172df0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 Ether
0x99ab2c4d9066bbd1fee6512637124b81b88746c662a27598abfd103572cdcb3a58159142 hrs 53 mins ago0x8db4d928dae7f196c5d3e27bb8e5504e002172df0x4ba18ae3b330aeee9e30c309765e95cbce198d6a0.003 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 <g@ethdev.com>
// 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.