Sponsored Link:    Chronologic - Self-Mining Ethereum token based on Proof of Time. Join the Contribution.
Contract Overview
ETH Balance: 13,945.118538212267804696 Ether
ETH USD Value: $4,044,642.18 (@ $290.04/ETH)
No Of Transactions: 37 txns
Misc
Address Watch Add To Watch List
Contract Creator 0x73f0ed546cd7893abc5e04284b68522602603dd4at txn 0xcdda1d9d440ef138b16ffda653c978b4dcff6450ccb4abb304fc3fd484d4cea2
Token Tracker
  Latest 25 txns from a total Of 37 transactions View All

TxHash Age From To Value [TxFee]
0xc2151f217efe91b1e0a81ae69692b51dc08dd0e15d79d2e195521b86b6a4819035 days 7 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0008664
0x86e18b3073a4b049124b3d79d4e8602d2f39864eb33c12c93850db7448b1c9e535 days 7 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00370064
0x7e0e03683e16c4b36deb1a675a8998e13d749e466d06b22dbb1e5e214e963e0243 days 12 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00090972
0xed98f2981770e9a0b9bffec20e1b33fa418980fdc5fc91924f074e6ced6763b943 days 12 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00388836
0x95e6abd6eba3c44627de101d9007d84123101eecde1643ce07d6cdda82ab479050 days 16 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.000852348
0xfa31a8bbcb19115241f1e13d957ad477da75d275e97b7c6ce109c19b8a996ce450 days 16 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.003676428
0xfb46e9fdaf1e567db264bce73d698eccc148c04a974187511549e007d85d5b3c50 days 16 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.001009848
0xe5ea8893b2b16ddbbda8ec755822f637dea255c2e4e2fcb992baf3c346c592df50 days 16 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.003884328
0x8facd69af145e2fc4b13818efc94341429aa840c2184c5e433e327f273e7687453 days 13 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0008664
0xa758931355d907c156cee35404a6a33eee242557026cb135b19ab0fc7482bd5353 days 13 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0034988
0x4b0a06aed8a86fa6bc243db51cbb7de104b3018276bf7c786b0e959c9c9d230553 days 13 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0008664
0xbd2736d2f052b0f97ed5d81a8106815c2969a9f773207f4639aeb680a0590a3f53 days 13 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00369936
0x23de75b6591af91dc31f4a9bff721776fdd3ad3ed2b21aacfe405ce43f7204dd126 days 10 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00086576
0x3d2e9fe04621831d8a4b96cb03fce2dcb6c85b257009a944d98b35109ca7fae4126 days 10 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00350136
0x37f1ba8ab306c963a9ed83a2b6a1b8d276d67fab8343644b8a029b845a97e895126 days 10 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0011664
0x23c1e0ff3edecb73d288c3604882165531fdc77a39b87e263f063b2daa560d28126 days 10 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00369936
0x0cba509af3fde0f40ff370fb7a1cc9e8cf7899344c75ba9793a61cfc0e9528d5136 days 15 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0008664
0xfdf2f5b6d42153ec7ddd25043198986aab85fa7af20465d756229cb9ba77fd53136 days 15 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0034988
0x0f0ad1eae4c4e82f24b4f215c9b42542d4763bda2402277de15a0abf820cef8b136 days 15 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0008664
0x69ae6ad768c1e692c782ad7f0d490c218ffd150604d1d3abb2c78907490f04e3136 days 15 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00369936
0x533cac1cd55ffeffbcb2aa2fd1829f8d6fe247e23652d13f48a4152825d769d6150 days 20 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0008664
0x11d695485653d84a2f7d701d257d8eb1319fa381c53a134b04d3101530f9c62c150 days 20 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00350136
0x2cf1a8e838642ca38f589da8ca0bbd7f036890aa8a8b8f553a7d1eba8e058208150 days 20 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.0011664
0xfd8c6710a38f781f4889bd900d85612c0f1a60fb2fcefa50f1fb8268f6710485150 days 20 hrs ago0x73f0ed546cd7893abc5e04284b68522602603dd4  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00369936
0x6607a43b71baea8890b2c9474bd7c978f5197fe4d12bdf085d85f85e6de36d7d162 days 18 hrs ago0x06c3d7be79e1bfbf4f364d2024808c5fc758f7c3  IN   0x24c3235558572cff8054b5a419251d3b0d43e91b0 Ether0.00075488
[ 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
0xc2151f217efe91b1e0a81ae69692b51dc08dd0e15d79d2e195521b86b6a48190419042635 days 7 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e2,500 Ether
0x7e0e03683e16c4b36deb1a675a8998e13d749e466d06b22dbb1e5e214e963e02415613243 days 12 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e111.817059777271568221 Ether
0x9b6f62a342feb99c0c15c68331024b1c2f3abbfb0f22c09937481a7c951f0f5d415611743 days 12 hrs ago0xa4463f9ff0d87531232c8c4819b536c332da6eac0x24c3235558572cff8054b5a419251d3b0d43e91b111.817059777271568221 Ether
0x95e6abd6eba3c44627de101d9007d84123101eecde1643ce07d6cdda82ab4790412688750 days 16 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xa4463f9ff0d87531232c8c4819b536c332da6eac1,418.240155488823749071 Ether
0xfb46e9fdaf1e567db264bce73d698eccc148c04a974187511549e007d85d5b3c412686550 days 16 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xa4463f9ff0d87531232c8c4819b536c332da6eac1 Ether
0x8facd69af145e2fc4b13818efc94341429aa840c2184c5e433e327f273e76874411521953 days 13 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e1,299 Ether
0x4b0a06aed8a86fa6bc243db51cbb7de104b3018276bf7c786b0e959c9c9d2305411521253 days 13 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e1 Ether
0xc680897035a6a190e98aa1b87a7c8e2ebf3665ca8a5114a89b8660fbda5d38b6411517853 days 13 hrs ago0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e0x24c3235558572cff8054b5a419251d3b0d43e91b1,418.240155488823749071 Ether
0x92a2c98c58d404318e88b1161e88e4536ccd0bb05213dc59dc5990841e525624411517253 days 13 hrs ago0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e0x24c3235558572cff8054b5a419251d3b0d43e91b1 Ether
0x23de75b6591af91dc31f4a9bff721776fdd3ad3ed2b21aacfe405ce43f7204dd3754121126 days 10 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e1,241.958676131674263592 Ether
0x37f1ba8ab306c963a9ed83a2b6a1b8d276d67fab8343644b8a029b845a97e8953754105126 days 10 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0xece701c76bd00d1c3f96410a0c69ea8dfcf5f34e1 Ether
0x82be73b98dd3fcc155db8effad2900c90f0819e9a8c0fe6436d0041b5e7ef1a33753974126 days 10 hrs ago0x8f3d6447a647ecf3c185ecbb165d2e6c41fad5470x24c3235558572cff8054b5a419251d3b0d43e91b1,241.958676131674263592 Ether
0x35750f81b4eb1f11a7c151020c26f674b3736535d334bf1257b00f80cfe86f0a3753961126 days 10 hrs ago0x8f3d6447a647ecf3c185ecbb165d2e6c41fad5470x24c3235558572cff8054b5a419251d3b0d43e91b1 Ether
0x0cba509af3fde0f40ff370fb7a1cc9e8cf7899344c75ba9793a61cfc0e9528d53698443136 days 15 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x8f3d6447a647ecf3c185ecbb165d2e6c41fad547990 Ether
0x0f0ad1eae4c4e82f24b4f215c9b42542d4763bda2402277de15a0abf820cef8b3698428136 days 15 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x8f3d6447a647ecf3c185ecbb165d2e6c41fad54710 Ether
0x533cac1cd55ffeffbcb2aa2fd1829f8d6fe247e23652d13f48a4152825d769d63618027150 days 20 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x8f3d6447a647ecf3c185ecbb165d2e6c41fad547176.731067832616036395 Ether
0x2cf1a8e838642ca38f589da8ca0bbd7f036890aa8a8b8f553a7d1eba8e0582083618003150 days 20 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x8f3d6447a647ecf3c185ecbb165d2e6c41fad5470.1 Ether
0x7031696e564640d45a84c1f476515ad7b0bf5c816de1a219a50151bc7f7e6b7e3591355155 days 12 hrs ago0xfaf4a5fbf621b049215c19a73babd0b94fd9155f0x24c3235558572cff8054b5a419251d3b0d43e91b176.831067832616036395 Ether
0x6607a43b71baea8890b2c9474bd7c978f5197fe4d12bdf085d85f85e6de36d7d3549163162 days 18 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x73f0ed546cd7893abc5e04284b68522602603dd4190 Ether
0x4d9e75a8101b1828f69ae033f2ce3943aac2e1035994c88d95a0a0698d54da9b3544404163 days 14 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x73f0ed546cd7893abc5e04284b68522602603dd410 Ether
0x2daf848d1878a63000edaf4d57cbd47dc0cc99d429cf7545919f197fd81fc29e3259353211 days 12 hrs ago0x805129c7144688224c122c924e3855d5b4fa01d80x24c3235558572cff8054b5a419251d3b0d43e91b18,944.461052975467804696 Ether
0x24665c9dd36362bd8e283a62b8921763ce66ad8e1a9d28a85181c5f77909b1783173634225 days 17 hrs ago0xa9a8108994bb704261567e53b49607a73876ddf10x24c3235558572cff8054b5a419251d3b0d43e91b0.16 Ether
0x4bb7468925ae1c23af78b9ea24ed395c76adfdbb23b7cec1e385dac0ddfa39193149609229 days 17 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x73f0ed546cd7893abc5e04284b68522602603dd42.14 Ether
0x98b6d6c6e62f356fd6e117a02fe6b72a6b5947edd03b58d62ea364ed3e2cd69b3149573229 days 17 hrs ago0xeab746a1ed13059a262bc00a66727af4d851ec0d0x24c3235558572cff8054b5a419251d3b0d43e91b2.5874852368 Ether
0x93e0de24fcba826ef8192300d794dd22b4a0c68c281a59f02ebbb71380e46e8c3114272235 days 13 hrs ago0x24c3235558572cff8054b5a419251d3b0d43e91b0x73f0ed546cd7893abc5e04284b68522602603dd40.05 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.