Contract Overview
ETH Balance: 65,020.2463200000065536 Ether
ETH USD Value: $3,413,562.93 (@ $52.50/ETH)
No Of Transactions: 91 txns + 325 internalTxns
  Latest 25 txns from a total Of 91 transactions View All

TxHash Block Age From To Value [TxFee]
0x68e65b380e15f5bfd38566557acb87e877c59484692611451c2040496d584d35343562213 hrs 15 mins ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00075488
0x714f64437b4d3b39e8df7a06569feefd0fcbd6a8b6e816e8e8ddabaa51dd0f8d343561313 hrs 16 mins ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00340192
0xcafab41fdca44efe651b770b068c00f992cb636bc484f483792b290f8fa5f19c34192403 days 7 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.01084518
0x799890471f0001e5895fccf5fc7c70a5d783c5cc7665f1fb53695769cfdce11034183293 days 11 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.01398318
0x67b9ab04d952a6736c2e65e5c646434bc6b8d598d31ad2110fa6d4897f47c6f034117574 days 13 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00083376
0xe038f32cf9626948ed68231438428fff421449ff7332f08721db67efe41aaf7034117144 days 13 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00370192
0x43a3e976d82f57b42bf4e558c9e48a29e435b0ca5f8d33b348489ea7e4b8705933999276 days 13 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00081468
0x6fc928cb5f305a571a40647fb7816e9636c47768876d2865ae06d75a2cfdcca233998986 days 13 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00370192
0xe5f0587fa43f1d8a0a31fb09da0947c0c53244d73984507d57ed52ce90fd360d33924107 days 19 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00075488
0xd5cc6c2c3f4ff55b2a5e811dc3d090f885d1c8d8c728e8c5d857f89809d6f51a33923137 days 19 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00370192
0xbae183621256537cccddf8d192ec3bc99109755fc26ea22edecd0a2387c2072533860798 days 21 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00075488
0x3fc8eba46ad963010d82fcd8ff7d0a039b7ed323fc35ed319e626f8b7820053533859948 days 21 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00370192
0xff739703ca2172f1a816fee471c8ef0be9836e75387cadcc1dc2966ff8e6e24a336977411 days 14 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00075488
0xbd9840c65034fec8e6ff9b451927ad776148c31574bd55049549f54c2ec4cf03336977011 days 14 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00370192
0x5ac8217d24fd390a682bc6552e26f0433a7061a01d0c2f84409f0c93e66c879e336469512 days 10 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00075488
0xe598def55d71a9fdb0b1fbd3602dc49806db939b2ae2e1f23e29d397c5ccfb9e336445612 days 11 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00350008
0x85c01f029ac0a05b2f5bdfc5be197d9b0858c6375e2f4ef7c4e2b81ef6366227336347612 days 15 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00075488
0xcbd176fa3ce903749826a3a17e72bbecbb72b8cf43f8793cd298cd1832c85af5336342912 days 15 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00340192
0x04a4e042f9bf53d9130c5c55e0d717ece03cd1df2a47ab5d003095ebc819dc88335786113 days 13 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00079474
0x459883b5aeae3078780cc8e15377ea05663ab3aac265f97af06f72e0bd1cf515335784713 days 13 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00350008
0xc79b21e32a9dd0757fb7b0f14d60a2bb1ff5a0f7c358e4a03e94e632302daca1335782613 days 14 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00042882
0x35015f6f28d50e5a8b88e63abe7ee22b388d6831ab9f46a9f841b3070808aaa4335752813 days 15 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00350008
0x612e392f66a4e3103b95d7a2586c412817c3c6526a588b920cc15d4a7a428bc3335746513 days 15 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00085817
0x2074aa8150ba16ca0a32dae39fce6e19aefc15f5395e1c3b029a85032695ae35335744513 days 15 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00350008
0x3d88b5c503e3a340c43160494b93ac3145f121c893292b40cd5d308509c0e901335661313 days 18 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0010267

[Download: CSV Export ]    
 Internal Transactions as a result of Contract Execution
  Latest 25 Internal Txns from a total of 325 View All
ParentTxHash Block Age From To Value
0x68e65b380e15f5bfd38566557acb87e877c59484692611451c2040496d584d35343562213 hrs 15 mins ago0x5901deb2c898d5dbe5923e05e510e95968a350670x36b0ca172da5a33201efdc398acf9dde8f29d69a10,000 Ether
0xcafab41fdca44efe651b770b068c00f992cb636bc484f483792b290f8fa5f19c34192403 days 7 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xe5ff71dc1dea8cd2552eec59e9a5e8813da9bb01117.5951 Ether
0x799890471f0001e5895fccf5fc7c70a5d783c5cc7665f1fb53695769cfdce11034183293 days 11 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x74c8ab20df0d33ba4cddc440c1c92c3a5db7c5051 Ether
0x67b9ab04d952a6736c2e65e5c646434bc6b8d598d31ad2110fa6d4897f47c6f034117574 days 13 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xddb083fc09f4a8e4c8738d849aca55f3b36ebde610,000 Ether
0x6b24f34820703c34a45556fad78cc2003b672d56bd2a335eab49a5a739a1c44e34045635 days 18 hrs ago0xef638b4305b8a1620f4e0e562e127f1181ae16d20x5901deb2c898d5dbe5923e05e510e95968a3506750 Ether
0x43a3e976d82f57b42bf4e558c9e48a29e435b0ca5f8d33b348489ea7e4b8705933999276 days 13 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x36b0ca172da5a33201efdc398acf9dde8f29d69a10,000 Ether
0xe5f0587fa43f1d8a0a31fb09da0947c0c53244d73984507d57ed52ce90fd360d33924107 days 19 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x36b0ca172da5a33201efdc398acf9dde8f29d69a10,000 Ether
0xbae183621256537cccddf8d192ec3bc99109755fc26ea22edecd0a2387c2072533860798 days 21 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x36b0ca172da5a33201efdc398acf9dde8f29d69a10,000 Ether
0xff739703ca2172f1a816fee471c8ef0be9836e75387cadcc1dc2966ff8e6e24a336977411 days 14 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x36b0ca172da5a33201efdc398acf9dde8f29d69a10,000 Ether
0x5ac8217d24fd390a682bc6552e26f0433a7061a01d0c2f84409f0c93e66c879e336469512 days 10 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x36b0ca172da5a33201efdc398acf9dde8f29d69a10,000 Ether
0x85c01f029ac0a05b2f5bdfc5be197d9b0858c6375e2f4ef7c4e2b81ef6366227336347612 days 15 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x36b0ca172da5a33201efdc398acf9dde8f29d69a10,000 Ether
0x04a4e042f9bf53d9130c5c55e0d717ece03cd1df2a47ab5d003095ebc819dc88335786113 days 13 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xddb083fc09f4a8e4c8738d849aca55f3b36ebde610,000 Ether
0x612e392f66a4e3103b95d7a2586c412817c3c6526a588b920cc15d4a7a428bc3335746513 days 15 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x36b0ca172da5a33201efdc398acf9dde8f29d69a10,000 Ether
0x3d88b5c503e3a340c43160494b93ac3145f121c893292b40cd5d308509c0e901335661313 days 18 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x3a1cbc45fd7b57ff2301c9a297b780ed7e829c3934.95 Ether
0xcbd9d2adba19b790fd626dd9027351695e9c9bd0b04e9b99dc1598c780ac3177335284114 days 9 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x76db89375f9b1ab066264817d05888074673cfad175 Ether
0x80ac178db611f379c0030cab431cae1c76317f3f337d776f4432317dba5c2ad3335271914 days 10 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x76db89375f9b1ab066264817d05888074673cfad25 Ether
0x20414afff675b9ac3000a481f3351349bb11f65a500185849c88eb5f20816b07335200614 days 13 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x36b0ca172da5a33201efdc398acf9dde8f29d69a20,000 Ether
0x8b3b233cedd4d3fb19e11644edc2329944f2fd69d7b3ebf2888a3491f1fe2176334507715 days 17 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x36b0ca172da5a33201efdc398acf9dde8f29d69a20,000 Ether
0xd3662e26b71be48fea231411065cdc55a92bf371444bdbbe0619c5e2c5e3d868330887721 days 18 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x43280bb1803619d2b1f274b64d7ad13de2eefb9a20,000 Ether
0xe801012e07cde24c6208387055533b0a3722cda539beb371990ca3a875172360330300722 days 18 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x36b0ca172da5a33201efdc398acf9dde8f29d69a2,000 Ether
0x43e15f7a3e7750c863db0ce1ae0d455f4d323e6376829c1f25eaa7a0b266a917329367024 days 7 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xdc256a4e558a46e1727299ab081bd2c3131eb4fc2,000 Ether
0x1fe884ec4b65ca0ca7e3cb8246a041c867845b158778d06e6ba9411156ac7b94329094824 days 18 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xdc256a4e558a46e1727299ab081bd2c3131eb4fc1,500 Ether
0x526fb7ac210efe7c2eb03d9d61a515f60b07928fd96e430119a4ac74584c2955329089724 days 18 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xdc256a4e558a46e1727299ab081bd2c3131eb4fc500 Ether
0x30f7c415cabb9a4ac7f826458121b9a191e577b6034b890092c1e6793fe3ca3d327612527 days 5 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x35d2db1666d60fb3c33bd3fd9e5d511e249646d646.34 Ether
0xb9fd5fb6b48ae8ffaba7d70a59d059f1ac3aa34885970b618e8b95fcc97f2ee9327544327 days 8 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x76db89375f9b1ab066264817d05888074673cfad55 Ether
Contract Source Code Verified
Note: Displaying matching verified source code at contract 0x5cb5f46a655c02889172323760d12d0e5d83cdaf
Contract Name: Wallet
Compiler Version: v0.3.2-2016-04-18-81ae2a7
Optimization Enabled: No
Online Solidity Editor:  -NA-



  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