Sponsored Link:    Chronologic - Self-Mining Ethereum token based on Proof of Time. Join the Contribution.
Contract Overview
ETH Balance: 111,033.149340088629336472 Ether
ETH USD Value: $31,370,195.68 (@ $282.53/ETH)
No Of Transactions: 257 txns
Misc
Address Watch Add To Watch List
Contract Creator 0x4bcc22bc69615714b8470154b9cc9aa3f08797c5at txn 0x409141e962166ceb967fa8cf8cded2394af088d6d270f1a0642c9bbfaf416348
Token Tracker
  Latest 25 txns from a total Of 257 transactions View All

TxHash Age From To Value [TxFee]
0x72d35bd82450eec0b1c8dcf44c4659f36386b9f33325fcb9714ccee701fa1d0e3 days 13 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00112937
0x31f194b406d4b54e8ab24611a784fbb5efe325bcdb184676cbc700028aad59247 days 7 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00246408
0x21d7636002f652c4dc908153fb2b0e1d8a015f14cb8f37a0d81d8caaa475038c11 days 2 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.001076691
0x5bdedca2495744087ac4215e54b5b9eae86a10ea10e144622ca06097293d8ce622 days 14 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00198729
0x9288dd4354c25b586831c921453a8e376b3175daaf542ac73bbc7fff940b01b622 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00123537
0x2911326cde256cc014551d4d3b8ca9b907315a5e87dd4e0ef26f5fbfb4a04fcf22 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00198537
0x31e5867754b54aa2eba79c817e71a693557c7aec8d4fbcc42d59371b73b77f4e22 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00198537
0x414b2b671e9d4946d3cb0e17f9c78d7206cd965d75772ca94de4a14b66b7438a22 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00198537
0x90103d7f4b4e9024e3dd672f6d18d8601fc55e1c056929f05681d452080cba8822 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00123729
0xef07b084cc2de2bbf850902cd937e42ac8953471d7d4aacf11a5657a300712a722 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00123345
0x47fac8f39d4f5f33c7fd8f5416f2973e91b17f30ffcedd83fe9f9aa7da6f719722 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00198537
0x71f28b833dd152debb9325440d5deb4dc5ad26cd11bbad63347581d54421890a22 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00198729
0x290516985e61ba2d07cebf065956d2d6b9cb6fb11301c76a1b07183f4bb4baa722 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00123729
0x2dbb4a58f13b459c8b7193a4190a0eaba50141c82c847f4b0f283772a09320cb22 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00123921
0xa3d8fe004a5695a8d2246ade26b04302379371dec7a7770369857ad7bbcecfb622 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00123537
0x9621449ff196ec189b650d965c3c2cbf2fd9cba604ac65d6ab2b2c4af760e82922 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00123729
0xfb6b0a5d8c5dbadd93924a3bb602b826243f06a1a77f85ae73457f6c85e2c95822 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00123729
0xbbda652d67690301b096a4bfb4665b24820fd311896a798732cc40f3740dd36522 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00198729
0xdcef9bff87bb57697b1af79923e98d6be3aa82f4e10cb4c744628045389d38d822 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00123921
0xc023fbdc52bcfde9757841934c3129c1dfe5e805ebcd068fb4abd2afd0c4b5b522 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00379092
0xeb17fc01ca3bb47ad334c41142f04b81994bb66c45de33fa13d130543b867ccb22 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00123921
0xbae213c8eb49b3b74fea53e945005df2a601b36c551dd2554d7c08dd519f2c6722 days 23 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00123537
0x68c3f356600787e17d11203ce9756a0c128894f64c65d09bd3d56590b4b13ea322 days 23 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00123537
0x9cd84f2b545ddc22278f34932d308438e3d27341f45cedfd2aba9b26be6e7c7822 days 23 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00123729
0xb6dc5c82f2b01f7d6639e1c8b348adb3223548df05c916b5935ba3ac75f6876722 days 23 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00154005
[ 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
0x72d35bd82450eec0b1c8dcf44c4659f36386b9f33325fcb9714ccee701fa1d0e42951863 days 13 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x7277c239e5299b5523a51c6ea5f529b6fc5ffa1a2,000 Ether
0x31f194b406d4b54e8ab24611a784fbb5efe325bcdb184676cbc700028aad592442816557 days 7 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xe5ff71dc1dea8cd2552eec59e9a5e8813da9bb011,000 Ether
0x21d7636002f652c4dc908153fb2b0e1d8a015f14cb8f37a0d81d8caaa475038c426808211 days 2 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x43280bb1803619d2b1f274b64d7ad13de2eefb9a10 Ether
0x5bdedca2495744087ac4215e54b5b9eae86a10ea10e144622ca06097293d8ce6422725722 days 14 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x61e1649bfa5dfe8fc2e57097bf4e90251dc3b99914.549482 Ether
0x9288dd4354c25b586831c921453a8e376b3175daaf542ac73bbc7fff940b01b6422603622 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x7b3a27c2af5ca97e10a2eaf83da3ccb03292139b0.65 Ether
0x2911326cde256cc014551d4d3b8ca9b907315a5e87dd4e0ef26f5fbfb4a04fcf422603422 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x05f172d18b142d78dc4efa0294136a34b95a7ccf9.67 Ether
0x31e5867754b54aa2eba79c817e71a693557c7aec8d4fbcc42d59371b73b77f4e422603022 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x34969e18768881fe2cbaa31b47ac36e4205d236416.04 Ether
0x414b2b671e9d4946d3cb0e17f9c78d7206cd965d75772ca94de4a14b66b7438a422602522 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x766da0e17bc7ee3971f111da414c2d5f62c6025f1.02 Ether
0x90103d7f4b4e9024e3dd672f6d18d8601fc55e1c056929f05681d452080cba88422601922 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x430cc4b6ae727152319af452e671a1caa6b1980965 Ether
0xef07b084cc2de2bbf850902cd937e42ac8953471d7d4aacf11a5657a300712a7422601522 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x35c0df8e3ecd350046b55327e277e09be7ae6a3d4.69 Ether
0x47fac8f39d4f5f33c7fd8f5416f2973e91b17f30ffcedd83fe9f9aa7da6f7197422601522 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x00fd5ed84fccd67ed89ec1a59180490a943afe7410.66667536 Ether
0x71f28b833dd152debb9325440d5deb4dc5ad26cd11bbad63347581d54421890a422600922 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xab81c75086b5ab85a67e5fa5c5e9eac735cd27827.823298 Ether
0x290516985e61ba2d07cebf065956d2d6b9cb6fb11301c76a1b07183f4bb4baa7422600722 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x90bde768274f0bb1d27fbb10b66269c281095b6c8.344851 Ether
0x2dbb4a58f13b459c8b7193a4190a0eaba50141c82c847f4b0f283772a09320cb422600622 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xd272c7216630b839d45af5598ae3026741b4566b26.077659 Ether
0xa3d8fe004a5695a8d2246ade26b04302379371dec7a7770369857ad7bbcecfb6422600022 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x1c18906dc8a0cb13dceb87bf35cbcf8309a931009.127181 Ether
0x9621449ff196ec189b650d965c3c2cbf2fd9cba604ac65d6ab2b2c4af760e829422600022 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x729be30354376aa1c60a3648898f2683318412088.344851 Ether
0xfb6b0a5d8c5dbadd93924a3bb602b826243f06a1a77f85ae73457f6c85e2c958422599522 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x2628277359d9bdc3075a53654a3e1d9a178086dc13.57702 Ether
0xbbda652d67690301b096a4bfb4665b24820fd311896a798732cc40f3740dd365422598922 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x6114c445f2590adde515d71a25821978e59681e213.03883 Ether
0xdcef9bff87bb57697b1af79923e98d6be3aa82f4e10cb4c744628045389d38d8422598622 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xef6a9c63cdfb05cd3d56034ba2fc37e3162aae3174.75161 Ether
0xc023fbdc52bcfde9757841934c3129c1dfe5e805ebcd068fb4abd2afd0c4b5b5422598422 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x39def698dd4c4f28675a0af60a3082a6b929eb2d26.08 Ether
0xeb17fc01ca3bb47ad334c41142f04b81994bb66c45de33fa13d130543b867ccb422597522 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x29a7dacdd4e503b8c3e49c1a475da6d3a1cb2a1e72.646965 Ether
0xbae213c8eb49b3b74fea53e945005df2a601b36c551dd2554d7c08dd519f2c67422595622 days 23 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x498367014ba68f56550311c7d204982a176b22005.711007 Ether
0x68c3f356600787e17d11203ce9756a0c128894f64c65d09bd3d56590b4b13ea3422595322 days 23 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x4bfdc0dba6a8639807d9b373ae8eb0617540267d0.645552 Ether
0x9cd84f2b545ddc22278f34932d308438e3d27341f45cedfd2aba9b26be6e7c78422594522 days 23 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x425586fcc3ac7c1684fed4f367d579cd316d75492.086213 Ether
0xb6dc5c82f2b01f7d6639e1c8b348adb3223548df05c916b5935ba3ac75f68767422590722 days 23 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x43280bb1803619d2b1f274b64d7ad13de2eefb9a140 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.