Sponsored Link:    Chronologic - Self-Mining Ethereum token based on Proof of Time. Join the Contribution.
Contract Overview
ETH Balance: 0 Ether
ETH USD Value: $0
No Of Transactions: 300 txns
  Latest 25 txns from a total Of 300 transactions View All

TxHash Age From To Value [TxFee]
0xf322f482e3127347f020ccc0a5c620c56dcc8fdcd1b377e0436fc82a5eca5d9c86 days 5 hrs ago0xe1af840a5a1cb1efdf608a97aa632f4aa39ed199  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00 Ether0.00111145535
0x57f86cded1c03b4bb457685e337d148ae26f1fe1c01c1a77338b207d464fc51093 days 19 hrs ago0x715fc18e9a5fde04eece0d76a6f9b4d6cf867107  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b026.943174089999999 Ether0.00112115
0x3539e85b344dd02157d524efcbe57ce876a1a8380bc0d6feba8a0451af7ac63c94 days 9 hrs ago0x5633053e07b0e47a3c12624ada8b589524749af5  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b015 Ether0.000470883
0xbfb21ecf3c286c3edb0a3a643ec14ea718bfd07c5eed647d2a352ffbedc8a3bb95 days 7 hrs ago0xcb9f6a230415a38c473750006ce664f986e747b5  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00.9 Ether0.000470883
0xf3ce5be00a1fb9d60e535e4be0e5e35e4482aa40ecb354767930698ab4532e1895 days 13 hrs ago0xe1af840a5a1cb1efdf608a97aa632f4aa39ed199  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00 Ether0.0010267
0x1555cc9b3b3c56e3701e491dfe9830bc694e241c667197cff2494ca17fc1b6e295 days 14 hrs ago0xe1af840a5a1cb1efdf608a97aa632f4aa39ed199  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00 Ether0.00082358
0x635e7bcf51c46dab49541ca39f49237d0613c6a40ad36a8786f05ec1bd6138dc95 days 16 hrs agoBitfinex_Wallet1  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b01.12166914 Ether0.00046532962
0x9504505bfd6f517f4ba07eac63963563179b806cf07a51dca9f60031951c4a6295 days 23 hrs agoPoloniex Wallet  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00.5 Ether0.000701622828
0x3cc96df5e6095d0b9de69ec70131eb32d2230f92720353cb26f1a9ce4175638a96 days 3 hrs ago0xe1af840a5a1cb1efdf608a97aa632f4aa39ed199  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00 Ether0.00082358
0xcfb8037f8e4c8c3402a6e5adb15de8624003ed7cd519116d3d3b9df9eea2192296 days 4 hrs ago0x8602cfdcbd8ae5c9c7c573821b81906c97c5b213  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b015 Ether0.000470883
0x4540f8ecc5a749542db71467566fac93bd0d96bc9bb56841f4bac9b9f8c159f796 days 10 hrs ago0xe1af840a5a1cb1efdf608a97aa632f4aa39ed199  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00 Ether0.001435588
0xccf1d7905e316c4555aaebe5eccdda0c6138830e8c7917e1f040044d2ae7263d96 days 13 hrs ago0x1fd6267f0d86f62d88172b998390afee2a1f54b6  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00.99 Ether0.00045854
0x68c8dc99197f17b059da5dda0811395284167942b75f493baf6d197ecb763d3096 days 16 hrs ago0xe1af840a5a1cb1efdf608a97aa632f4aa39ed199  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00 Ether0.000864759
0x868781b5b78fd4df670c3d8bcb855d30587d4acfcb9a533e4fa77dd8d0e6eccd96 days 22 hrs ago0x3cd7c221162bd403db328ca75476187984c62d6f  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b01.75 Ether0.000112115
0x1f496a8b2c7b899d1d7697cb863d4a078302e90647e87169203251862a11307a97 days 3 hrs ago0x7ed1e469fcb3ee19c0366d829e291451be638e59  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00.9 Ether0.00089692
0x45d6047722ff82638676e636231a981f3129740fb944763a9fa6d0f08698f46f97 days 7 hrs ago0xe1af840a5a1cb1efdf608a97aa632f4aa39ed199  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00 Ether0.00102542
0x5bba7e636a803de6ed48e7e4901905d915d6fc0e252af2cbc8a5b281527cd81d97 days 7 hrs ago0xe7d33494071a4e27c017b694bbe9b2bc1e53acfa  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b01 Ether0.000470883
0x72ced84c0a9136721cfb9873401f67c29a035361f38d135db242e93f446434eb98 days 49 mins ago0xe1af840a5a1cb1efdf608a97aa632f4aa39ed199  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00 Ether0.00082486
0xae0cb2ff931f9e75a9a2b93ffea8823e5306b175f178f88363a33062a5b3350998 days 3 hrs agoKraken_4  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00.9124 Ether0.00044846
0x8199cb969ad01e50e757fbf62545ab5ddafdf267f98747d8727b1e6b8630041998 days 3 hrs ago0xe1af840a5a1cb1efdf608a97aa632f4aa39ed199  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00 Ether0.00102542
0x31c1485886bd1e9b61a8d80939005623a37d4ed3e127b120f8c141d58188d6cf98 days 8 hrs agoPoloniex Wallet  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b01.0086 Ether0.000745929439
0xefee331173fc1b3dcb498e89c41f9a0da043b2545e714d811d4075544bab21a798 days 15 hrs ago0xe1af840a5a1cb1efdf608a97aa632f4aa39ed199  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00 Ether0.001076691
0xe1e37b8e3b500c2f5d0f3ec5de65a0f4ca622ea4b91458d76a663562f69ba08898 days 17 hrs agoPoloniex Wallet  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b05.5 Ether0.000756518811
0xd56ce27525b6a4d891ca77704f4251bcbd3aaf5c66eebeba1b2df2f3a07a232b99 days 16 hrs ago0xe1af840a5a1cb1efdf608a97aa632f4aa39ed199  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b00 Ether0.000864759
0xb96017641e252ccfe839a11a49a7a6601c97d4bd9b7067c3efbbd43a8bd464b599 days 18 hrs agoPoloniex Wallet  IN   0x7b174f95594e81ef1bb86e4affc382d1505e02b05.8 Ether0.00067269
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
  Latest 25 Internal Txns, Click here to View More View All
ParentTxHash Block Age From To Value
0xf322f482e3127347f020ccc0a5c620c56dcc8fdcd1b377e0436fc82a5eca5d9c394702786 days 5 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed19942.843174089999999984 Ether
0xf3ce5be00a1fb9d60e535e4be0e5e35e4482aa40ecb354767930698ab4532e18390096295 days 13 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1991.12166914 Ether
0x1555cc9b3b3c56e3701e491dfe9830bc694e241c667197cff2494ca17fc1b6e2390058695 days 14 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1990.5 Ether
0x3cc96df5e6095d0b9de69ec70131eb32d2230f92720353cb26f1a9ce4175638a389776896 days 3 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed19915 Ether
0x4540f8ecc5a749542db71467566fac93bd0d96bc9bb56841f4bac9b9f8c159f7389627996 days 10 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1990.99 Ether
0x68c8dc99197f17b059da5dda0811395284167942b75f493baf6d197ecb763d30389485596 days 16 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1992.65 Ether
0x45d6047722ff82638676e636231a981f3129740fb944763a9fa6d0f08698f46f389159397 days 7 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1991 Ether
0x72ced84c0a9136721cfb9873401f67c29a035361f38d135db242e93f446434eb388771198 days 49 mins ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1990.917 Ether
0x8199cb969ad01e50e757fbf62545ab5ddafdf267f98747d8727b1e6b86300419388702498 days 3 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1991.004 Ether
0xefee331173fc1b3dcb498e89c41f9a0da043b2545e714d811d4075544bab21a7388440398 days 15 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1995.5 Ether
0xd56ce27525b6a4d891ca77704f4251bcbd3aaf5c66eebeba1b2df2f3a07a232b387879699 days 16 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1995.8 Ether
0x3a029e9c8a9c51885e7b443ed6f8ca87ba3eab0df47e366270c80c7379e68c68387791099 days 20 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1991.13411178 Ether
0xb8c03ec1b3d4d53a0c49c771e4de1130f0c2cefde426cf1607b2646cc6d7f7813876532100 days 2 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1991 Ether
0x1e84f4817829526a15189968e1df5fc8af31cfdf4cccb8d8944339b24b13bf453875543100 days 7 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1992 Ether
0x4c10edca60701edf978bc3d0c579e38bd11350beb76f6e0d9c66402d4355825a3873102100 days 18 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1992.95 Ether
0xad430ead6fdc0da54d17e66354c07362e3b6edb5b83d86cb47f35b2c322ee40f3872490100 days 21 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1994.69004653 Ether
0x70add8f24c7d4385483b7915f9629d7e8501e56f1e49e1d816bf8e00b14c429e3871011101 days 3 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1993.49444469 Ether
0x7f6c2284a358b82ac81768dc2afdea64006d83e27b272011d53fc7b6e97f78d83862254102 days 19 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1992.495 Ether
0x7be681a10fff390dcc992336809e09fb908569e1eacc8976267f42d389cbc7613861689102 days 22 hrs ago0xa6110e15d9f18f00e50fae66fc0bb7366682e68c0x7b174f95594e81ef1bb86e4affc382d1505e02b00.5 Ether
0x69ae67795dd6c85e8ecfa36c4fb868486766e1cd54e406dd12a333fac6040e0b3861687102 days 22 hrs ago0xa6110e15d9f18f00e50fae66fc0bb7366682e68c0x7b174f95594e81ef1bb86e4affc382d1505e02b00.5 Ether
0xcfc301d812822a827e537269f7e7dbe3a199bdcc7acb96949aab5f4ac7bab6503860755103 days 2 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1991.00710833 Ether
0x2cf7e444281fd65bf6d05b9cc34d5aeb7c918c6d5b851495b3552d5d03c8e2003860323103 days 4 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1990.59974322 Ether
0xe17ee197c3a1fd13e3cfceae1d0a64d21959451f67862358187ae0424c6559b23859922103 days 6 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1991 Ether
0x60e505392150403e8bec2e4e7cde826cfc48b24f6f14646293e73c8f7c583dae3857644103 days 17 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1990.55 Ether
0x4787c5d7100dcdfd56259cd638ef10833c0842d045ac1a224ad9579d5730ada33856433103 days 22 hrs ago0x7b174f95594e81ef1bb86e4affc382d1505e02b00xe1af840a5a1cb1efdf608a97aa632f4aa39ed1995.5 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.