Sponsored Link:   SHIFT.cash - 1st ever car title loan platform on blockchain. Join NOW.
Contract Overview
ETH Balance: 0.995 Ether
ETH USD Value: $710.93 (@ $714.50/ETH)
No Of Transactions: 552 txns
Misc
Address Watch Add To Watch List
Contract Creator 0x8334a533f0c3f904ca59061fae649a8c596b09acat txn 0x3d58429a3545bf9abae141f0238e202d6ac33b45a37d389707efc712ff769b6b
Token Tracker
  Latest 25 txns from a total Of 552 transactions View All

TxHash Age From To Value [TxFee]
0xbae420265169141cacaa777f6c938c090618fc640079c1917b6c0a91e783b5d3118 days 10 hrs agoPoloniex Wallet  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0.995 Ether0.00067269
0x7d6ad5edcc2587c6de90195a5dc84dcf4b7da0cf5af63a17ee087602e5ee1774166 days 1 hr ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0 Ether0.00102542
0x566ee381113fdca05ca0091a284a77029481c53706bf41509ac1df22f91c2e0b181 days 5 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0 Ether0.00102542
0x10d9e69efedd056ce4775636081e8e883ff819f8434ef2b7e8d2fc657b5b3624181 days 8 hrs agoBittrex  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0.10732288 Ether0.000478288617
0xc9abaaa2a6f8a5aaf80dbe3081157d0a1e484b1504ee53918ad4534fe9ec6046181 days 8 hrs ago0x24f21c22f0e641e2371f04a7bb8d713f89f53550  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0.11380168 Ether0.00112115
0x6d4e64415a76b479cf07fb8b0019fdf425f9a03e5acc69e773fb5b93d93e8073181 days 16 hrs ago0x5ed05b45ded9c7882a363f265ee32a78657ddb5d  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0.14 Ether0.000470883
0x7143fabd9afe820bd9dd022dab95bd32b856cf32ced5811e437744ed05080a19181 days 22 hrs agoPoloniex Wallet  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b2 Ether0.000823821143
0xfd8e06f52df6f91629f6ac94638232da3b9dd3b312af85abc87fcf80097b9d0b181 days 23 hrs ago0x31affc18098072321fdeaa48063b7b28f2bf8fab  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0.35 Ether0.000470883
0x335b7943fc00ae816584c0c7b8550abfa87c79d6fb42b808f1acd034ea82b492182 days 14 mins agoPoloniex Wallet  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b1 Ether0.000748440026
0x1b917344e41ff978aaa6e2130e1b617c36adaf77963f36e67c62ebdac59c8405182 days 45 mins ago0x1fd6267f0d86f62d88172b998390afee2a1f54b6  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0.09365161 Ether0.000481467
0x52ffbfcf51fd60e2af8bb4a491e0bbbbe8ff9383fe074c81dd4aa7d04441c2b3182 days 5 hrs ago0xff295420c1f2bb9f7d3c6faa2ab762f1e4f71136  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b1 Ether0.000470883
0x9457c5ea82f8b3126a2f2bcbba175afdee5c8819fecf4e9b982bad8781aa082c182 days 6 hrs agoPoloniex Wallet  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b1 Ether0.000768143021
0xf18371a223a0406b8240b9955a427d7645cb4415378ce5eda3745be82aee5c5a182 days 16 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0 Ether0.000989832
0x29b05aab271e9d39ba15b383ad4cd9c126988447f748b67c3425f70da766b8a7182 days 16 hrs ago0x7546b2ad7f2dd12be1ee620629b86d6282f20953  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b40 Ether0.000470883
0xe65d89b43ed8b1bfc6bad799a4a2118d6498e732a549f8bfc0026950586a3787182 days 20 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0 Ether0.00082486
0x6dc8de295d74a274d0f872a7afdb09723ed6a14bcae836324919553090fcbb9a182 days 20 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0 Ether0.001029475
0x401685cbef7cc7aa945d7bcc5e93824da074aade063f8797dbb1d77a933ff747182 days 20 hrs ago0x7546b2ad7f2dd12be1ee620629b86d6282f20953  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b25 Ether0.000470883
0xb05ac576dbea898fd2bdd7bea2c28a597dbf00ca57d5771e63736d9b1cbd108b182 days 21 hrs ago0x1fd6267f0d86f62d88172b998390afee2a1f54b6  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b1.59757122 Ether0.00045854
0x7bed338fe8f17fa67360dd76477e6a726b075c5f77767db37bbfd0da52f3461f182 days 23 hrs ago0x8334a533f0c3f904ca59061fae649a8c596b09ac  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0 Ether0.00102542
0xa50d86d027393370c7dcd10c112b5493dc892e1e1b431bde95ba07d7de6f86db183 days 1 hr ago0xe86b832b0152fb4d37943cd180231759cc8198ab  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b5 Ether0.000941766
0x49f43cbb78447b1c9d714e086e5f0c2a0c2a385ff61315f9272b4f885328d42b183 days 2 hrs ago0xae11081597121016b114450ec197f1927e36dfa9  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0.6 Ether0.00044846
0x2eeb2b2ccb2782e42038b792c75e2f3113243cfaf0f2c445de3e698195482d01183 days 3 hrs ago0xae11081597121016b114450ec197f1927e36dfa9  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0.76 Ether0.000548002
0xd393a821849e17234dcccda7f43ee2a0e009571c5fb6fea53a3994a68d51b840183 days 6 hrs ago0xa19724a88a52306bb3f59faed00d32dbccf74832  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0.1 Ether0.000470883
0xbe0520f6a5a0a631d1742fe5f74b186cf6da455eb87948af9ecd76c71719294f183 days 7 hrs agoPoloniex Wallet  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0.695 Ether0.00069081719
0x967323dbbe970242ce2ac6fcb801427cab349a053bdb432e7546daa8fd3ca5a7183 days 19 hrs ago0x4d5f913738a55c4c7061474f65e0cc0ce3153f43  IN   0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b1 Ether0.000491211
[ 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
0x7d6ad5edcc2587c6de90195a5dc84dcf4b7da0cf5af63a17ee087602e5ee17743972895166 days 1 hr ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac0.114136495423672612 Ether
0x566ee381113fdca05ca0091a284a77029481c53706bf41509ac1df22f91c2e0b3897148181 days 5 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac5.7 Ether
0xf18371a223a0406b8240b9955a427d7645cb4415378ce5eda3745be82aee5c5a3889399182 days 16 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac40 Ether
0xe65d89b43ed8b1bfc6bad799a4a2118d6498e732a549f8bfc0026950586a37873888633182 days 20 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac25 Ether
0x6dc8de295d74a274d0f872a7afdb09723ed6a14bcae836324919553090fcbb9a3888560182 days 20 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac1.6 Ether
0x7bed338fe8f17fa67360dd76477e6a726b075c5f77767db37bbfd0da52f3461f3887915182 days 23 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac7.92 Ether
0x184649c18504ccc76664a69b5985b425076e651aa9ed0299ed4e943f5b450f023882616183 days 23 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac1 Ether
0x1a26b46ea96fa9ad4db5c432239a40fd8a124f8b340365449836752b9e40ee093881694184 days 3 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac1.9 Ether
0x643e7c83b7587234b1d3738c8b2256f1e2243170904610452e037e482723f4cc3878159184 days 19 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac0.19 Ether
0x91ae66b1c1384ee7b0e301e9e2e4f45781ff811bfb933ec0dc694d46d87aea073877298184 days 23 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac1.5 Ether
0x45df0d75816bd1428d639f2e6967cc564e43d1c075b58fc5bc9ec3d361236cf33876357185 days 3 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac7 Ether
0x3b37cb2b932fe46c0190a36e43c8ebcf37785b4080a062dcbc78abc6c536504e3871566186 days 58 mins ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac0.41 Ether
0x92fe088a9cb1e4ff49d69a446e012f0ec44f8ff692f404684d49a4193fa8a2dd3865482187 days 4 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac1.18 Ether
0xa67d33a78031c5a5d698773988d7ba122fa25fc9af9998e37866d495eb1757703862783187 days 16 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac0.508 Ether
0xe1b5e318cbf2c57902d0a436070bc8a235ce3c3b6dc7fb7b8eaed9d98f5bb4603862250187 days 19 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac7 Ether
0xc9800e3ab15bbc8868569227ef4ff4f2ff17c9026e063469db4c1badfedfa9793860806188 days 1 hr ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac4.11 Ether
0x40a19e1658d63f7a4d54d6d9701682ba745ddb6e3cee52f78b460b31798e58a33860470188 days 3 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac1 Ether
0x6a2e57158d44914e6ff87dfff7aa82581487fa8144d9187192cbbf622e6a99f63859974188 days 5 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac0.17 Ether
0xe0bff2c3e43ef8d35075b46bb7fed8e302fb25d2383ab94462079c2e166654123859704188 days 7 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac1.02 Ether
0xe48d96881be4c826d45e0d8c494450425390a2ad5f551e469abc63d7878c18fe3857945188 days 15 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac6.7 Ether
0x66526f7320f64ff7e8c85cce03c6d0050473d0f4339ffa26245d99d918d754e83855655189 days 1 hr ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac1.5 Ether
0x48f0a3c1595e41d017f6c53fe4bc8438fbaca096b98321227300344393fc36173855033189 days 4 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac9 Ether
0xc01459948ea5af33d410657add1a8ff757c4d7ec8748a3af0db78905bc8ccc4f3854559189 days 6 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac1.4 Ether
0x2cf10f88cccb5ef139b9f2c7b9220987d1f6fa0095e96115d41ec74ba2164c1d3853819189 days 9 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac5.6 Ether
0x967c36f6653b209893cd292b281b07aba25bfb25ad9b9d84ea54b6e8ed7e17823853548189 days 11 hrs ago0xac3fc28c6ecf3e26d98bd9e2355647fc5c5b486b0x8334a533f0c3f904ca59061fae649a8c596b09ac2.7 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 <[email protected]>
// inheritable "property" contract that enables methods to be protected by requiring the acquiescence of either a
// single, or, crucially, each of a number of, designated owners.
// usage:
// use modifiers onlyowner (just own owned) or onlymanyowners(hash), whereby the same hash must be provided by
// some number (specified in constructor) of the set of owners (specified in the constructor, modifiable) before the
// interior is executed.
contract multiowned {

    // TYPES

    // struct for the status of a pending operation.
    struct PendingState {
        uint yetNeeded;
        uint ownersDone;
        uint index;
    }

    // EVENTS

    // this contract only has five types of events: it can accept a confirmation, in which case
    // we record owner and operation (hash) alongside it.
    event Confirmation(address owner, bytes32 operation);
    event Revoke(address owner, bytes32 operation);
    // some others are in the case of an owner changing.
    event OwnerChanged(address oldOwner, address newOwner);
    event OwnerAdded(address newOwner);
    event OwnerRemoved(address oldOwner);
    // the last one is emitted if the required signatures change
    event RequirementChanged(uint newRequirement);

    // MODIFIERS

    // simple single-sig function modifier.
    modifier onlyowner {
        if (isOwner(msg.sender))
            _
    }
    // multi-sig function modifier: the operation must have an intrinsic hash in order
    // that later attempts can be realised as the same underlying operation and
    // thus count as confirmations.
    modifier onlymanyowners(bytes32 _operation) {
        if (confirmAndCheck(_operation))
            _
    }

    // METHODS

    // constructor is given number of sigs required to do protected "onlymanyowners" transactions
    // as well as the selection of addresses capable of confirming them.
    function multiowned(address[] _owners, uint _required) {
        m_numOwners = _owners.length + 1;
        m_owners[1] = uint(msg.sender);
        m_ownerIndex[uint(msg.sender)] = 1;
        for (uint i = 0; i < _owners.length; ++i)
        {
            m_owners[2 + i] = uint(_owners[i]);
            m_ownerIndex[uint(_owners[i])] = 2 + i;
        }
        m_required = _required;
    }
    
    // Revokes a prior confirmation of the given operation
    function revoke(bytes32 _operation) external {
        uint ownerIndex = m_ownerIndex[uint(msg.sender)];
        // make sure they're an owner
        if (ownerIndex == 0) return;
        uint ownerIndexBit = 2**ownerIndex;
        var pending = m_pending[_operation];
        if (pending.ownersDone & ownerIndexBit > 0) {
            pending.yetNeeded++;
            pending.ownersDone -= ownerIndexBit;
            Revoke(msg.sender, _operation);
        }
    }
    
    // Replaces an owner `_from` with another `_to`.
    function changeOwner(address _from, address _to) onlymanyowners(sha3(msg.data, block.number)) external {
        if (isOwner(_to)) return;
        uint ownerIndex = m_ownerIndex[uint(_from)];
        if (ownerIndex == 0) return;

        clearPending();
        m_owners[ownerIndex] = uint(_to);
        m_ownerIndex[uint(_from)] = 0;
        m_ownerIndex[uint(_to)] = ownerIndex;
        OwnerChanged(_from, _to);
    }
    
    function addOwner(address _owner) onlymanyowners(sha3(msg.data, block.number)) external {
        if (isOwner(_owner)) return;

        clearPending();
        if (m_numOwners >= c_maxOwners)
            reorganizeOwners();
        if (m_numOwners >= c_maxOwners)
            return;
        m_numOwners++;
        m_owners[m_numOwners] = uint(_owner);
        m_ownerIndex[uint(_owner)] = m_numOwners;
        OwnerAdded(_owner);
    }
    
    function removeOwner(address _owner) onlymanyowners(sha3(msg.data, block.number)) external {
        uint ownerIndex = m_ownerIndex[uint(_owner)];
        if (ownerIndex == 0) return;
        if (m_required > m_numOwners - 1) return;

        m_owners[ownerIndex] = 0;
        m_ownerIndex[uint(_owner)] = 0;
        clearPending();
        reorganizeOwners(); //make sure m_numOwner is equal to the number of owners and always points to the optimal free slot
        OwnerRemoved(_owner);
    }
    
    function changeRequirement(uint _newRequired) onlymanyowners(sha3(msg.data, block.number)) external {
        if (_newRequired > m_numOwners) return;
        m_required = _newRequired;
        clearPending();
        RequirementChanged(_newRequired);
    }
    
    function isOwner(address _addr) returns (bool) {
        return m_ownerIndex[uint(_addr)] > 0;
    }
    
    function hasConfirmed(bytes32 _operation, address _owner) constant returns (bool) {
        var pending = m_pending[_operation];
        uint ownerIndex = m_ownerIndex[uint(_owner)];

        // make sure they're an owner
        if (ownerIndex == 0) return false;

        // determine the bit to set for this owner.
        uint ownerIndexBit = 2**ownerIndex;
        if (pending.ownersDone & ownerIndexBit == 0) {
            return false;
        } else {
            return true;
        }
    }
    
    // INTERNAL METHODS

    function confirmAndCheck(bytes32 _operation) internal returns (bool) {
        // determine what index the present sender is:
        uint ownerIndex = m_ownerIndex[uint(msg.sender)];
        // make sure they're an owner
        if (ownerIndex == 0) return;

        var pending = m_pending[_operation];
        // if we're not yet working on this operation, switch over and reset the confirmation status.
        if (pending.yetNeeded == 0) {
            // reset count of confirmations needed.
            pending.yetNeeded = m_required;
            // reset which owners have confirmed (none) - set our bitmap to 0.
            pending.ownersDone = 0;
            pending.index = m_pendingIndex.length++;
            m_pendingIndex[pending.index] = _operation;
        }
        // determine the bit to set for this owner.
        uint ownerIndexBit = 2**ownerIndex;
        // make sure we (the message sender) haven't confirmed this operation previously.
        if (pending.ownersDone & ownerIndexBit == 0) {
            Confirmation(msg.sender, _operation);
            // ok - check if count is enough to go ahead.
            if (pending.yetNeeded <= 1) {
                // enough confirmations: reset and run interior.
                delete m_pendingIndex[m_pending[_operation].index];
                delete m_pending[_operation];
                return true;
            }
            else
            {
                // not enough: record that this owner in particular confirmed.
                pending.yetNeeded--;
                pending.ownersDone |= ownerIndexBit;
            }
        }
    }

    function reorganizeOwners() private returns (bool) {
        uint free = 1;
        while (free < m_numOwners)
        {
            while (free < m_numOwners && m_owners[free] != 0) free++;
            while (m_numOwners > 1 && m_owners[m_numOwners] == 0) m_numOwners--;
            if (free < m_numOwners && m_owners[m_numOwners] != 0 && m_owners[free] == 0)
            {
                m_owners[free] = m_owners[m_numOwners];
                m_ownerIndex[m_owners[free]] = free;
                m_owners[m_numOwners] = 0;
            }
        }
    }
    
    function clearPending() internal {
        uint length = m_pendingIndex.length;
        for (uint i = 0; i < length; ++i)
            if (m_pendingIndex[i] != 0)
                delete m_pending[m_pendingIndex[i]];
        delete m_pendingIndex;
    }
        
    // FIELDS

    // the number of owners that must confirm the same operation before it is run.
    uint public m_required;
    // pointer used to find a free slot in m_owners
    uint public m_numOwners;
    
    // list of owners
    uint[256] m_owners;
    uint constant c_maxOwners = 250;
    // index on the list of owners to allow reverse lookup
    mapping(uint => uint) m_ownerIndex;
    // the ongoing operations.
    mapping(bytes32 => PendingState) m_pending;
    bytes32[] m_pendingIndex;
}

// inheritable "property" contract that enables methods to be protected by placing a linear limit (specifiable)
// on a particular resource per calendar day. is multiowned to allow the limit to be altered. resource that method
// uses is specified in the modifier.
contract daylimit is multiowned {

    // MODIFIERS

    // simple modifier for daily limit.
    modifier limitedDaily(uint _value) {
        if (underLimit(_value))
            _
    }

    // METHODS

    // constructor - stores initial daily limit and records the present day's index.
    function daylimit(uint _limit) {
        m_dailyLimit = _limit;
        m_lastDay = today();
    }
    // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today.
    function setDailyLimit(uint _newLimit) onlymanyowners(sha3(msg.data, block.number)) external {
        m_dailyLimit = _newLimit;
    }
    // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today.
    function resetSpentToday() onlymanyowners(sha3(msg.data, block.number)) external {
        m_spentToday = 0;
    }
    
    // INTERNAL METHODS
    
    // checks to see if there is at least `_value` left from the daily limit today. if there is, subtracts it and
    // returns true. otherwise just returns false.
    function underLimit(uint _value) internal onlyowner returns (bool) {
        // reset the spend limit if we're on a different day to last time.
        if (today() > m_lastDay) {
            m_spentToday = 0;
            m_lastDay = today();
        }
        // check to see if there's enough left - if so, subtract and return true.
        if (m_spentToday + _value >= m_spentToday && m_spentToday + _value <= m_dailyLimit) {
            m_spentToday += _value;
            return true;
        }
        return false;
    }
    // determines today's index.
    function today() private constant returns (uint) { return now / 1 days; }

    // FIELDS

    uint public m_dailyLimit;
    uint public m_spentToday;
    uint public m_lastDay;
}

// interface contract for multisig proxy contracts; see below for docs.
contract multisig {

    // EVENTS

    // logged events:
    // Funds has arrived into the wallet (record how much).
    event Deposit(address from, uint value);
    // Single transaction going out of the wallet (record who signed for it, how much, and to whom it's going).
    event SingleTransact(address owner, uint value, address to, bytes data);
    // Multi-sig transaction going out of the wallet (record who signed for it last, the operation hash, how much, and to whom it's going).
    event MultiTransact(address owner, bytes32 operation, uint value, address to, bytes data);
    // Confirmation still needed for a transaction.
    event ConfirmationNeeded(bytes32 operation, address initiator, uint value, address to, bytes data);
    
    // FUNCTIONS
    
    // TODO: document
    function changeOwner(address _from, address _to) external;
    function execute(address _to, uint _value, bytes _data) external returns (bytes32);
    function confirm(bytes32 _h) returns (bool);
}

// usage:
// bytes32 h = Wallet(w).from(oneOwner).transact(to, value, data);
// Wallet(w).from(anotherOwner).confirm(h);
contract Wallet is multisig, multiowned, daylimit {

    uint public version = 2;

    // TYPES

    // Transaction structure to remember details of transaction lest it need be saved for a later call.
    struct Transaction {
        address to;
        uint value;
        bytes data;
    }

    // METHODS

    // constructor - just pass on the owner array to the multiowned and
    // the limit to daylimit
    function Wallet(address[] _owners, uint _required, uint _daylimit)
            multiowned(_owners, _required) daylimit(_daylimit) {
    }
    
    // kills the contract sending everything to `_to`.
    function kill(address _to) onlymanyowners(sha3(msg.data, block.number)) external {
        suicide(_to);
    }
    
    // gets called when no other function matches
    function() {
        // just being sent some cash?
        if (msg.value > 0)
            Deposit(msg.sender, msg.value);
    }
    
    // Outside-visible transact entry point. Executes transacion immediately if below daily spend limit.
    // If not, goes into multisig process. We provide a hash on return to allow the sender to provide
    // shortcuts for the other confirmations (allowing them to avoid replicating the _to, _value
    // and _data arguments). They still get the option of using them if they want, anyways.
    function execute(address _to, uint _value, bytes _data) external onlyowner returns (bytes32 _r) {
        // first, take the opportunity to check that we're under the daily limit.
        if (underLimit(_value)) {
            SingleTransact(msg.sender, _value, _to, _data);
            // yes - just execute the call.
            _to.call.value(_value)(_data);
            return 0;
        }
        // determine our operation hash.
        _r = sha3(msg.data, block.number);
        if (!confirm(_r) && m_txs[_r].to == 0) {
            m_txs[_r].to = _to;
            m_txs[_r].value = _value;
            m_txs[_r].data = _data;
            ConfirmationNeeded(_r, msg.sender, _value, _to, _data);
        }
    }
    
    // confirm a transaction through just the hash. we use the previous transactions map, m_txs, in order
    // to determine the body of the transaction from the hash provided.
    function confirm(bytes32 _h) onlymanyowners(_h) returns (bool) {
        if (m_txs[_h].to != 0) {
            m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data);
            MultiTransact(msg.sender, _h, m_txs[_h].value, m_txs[_h].to, m_txs[_h].data);
            delete m_txs[_h];
            return true;
        }
    }
    
    // INTERNAL METHODS
    
    function clearPending() internal {
        uint length = m_pendingIndex.length;
        for (uint i = 0; i < length; ++i)
            delete m_txs[m_pendingIndex[i]];
        super.clearPending();
    }

    // FIELDS

    // pending transactions we have at present.
    mapping (bytes32 => Transaction) m_txs;
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"removeOwner","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"m_numOwners","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"m_lastDay","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"resetSpentToday","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"m_spentToday","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"addOwner","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"m_required","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_h","type":"bytes32"}],"name":"confirm","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"_newLimit","type":"uint256"}],"name":"setDailyLimit","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"execute","outputs":[{"name":"_r","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"_operation","type":"bytes32"}],"name":"revoke","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_newRequired","type":"uint256"}],"name":"changeRequirement","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"_operation","type":"bytes32"},{"name":"_owner","type":"address"}],"name":"hasConfirmed","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"kill","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"changeOwner","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"m_dailyLimit","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"_owners","type":"address[]"},{"name":"_required","type":"uint256"},{"name":"_daylimit","type":"uint256"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Confirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Revoke","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"}],"name":"OwnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newRequirement","type":"uint256"}],"name":"RequirementChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"SingleTransact","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"MultiTransact","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"operation","type":"bytes32"},{"indexed":false,"name":"initiator","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"ConfirmationNeeded","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052600261010860005055604051611b51380380611b51833981016040528080518201919060200180519060200190919080519060200190919050505b805b83835b600060018351016001600050819055503373ffffffffffffffffffffffffffffffffffffffff16600260005060016101008110156100025790900160005b5081905550600161010260005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005081905550600090505b825181101561016e5782818151811015610002579060200190602002015173ffffffffffffffffffffffffffffffffffffffff166002600050826002016101008110156100025790900160005b508190555080600201610102600050600085848151811015610002579060200190602002015173ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055505b80600101905080506100c2565b816000600050819055505b505050806101056000508190555061018f6101ad565b610107600050819055505b505b505050611992806101bf6000396000f35b600062015180420490506101bc565b9056606060405236156100f8576000357c010000000000000000000000000000000000000000000000000000000090048063173825d9146101605780632f54bf6e146101785780634123cb6b146101a457806352375093146101c757806354fd4d50146101ea5780635c52c2f51461020d578063659010e71461021c5780637065cb481461023f578063746c917114610257578063797af6271461027a578063b20d30a9146102a6578063b61d27f6146102be578063b75c7dc614610307578063ba51a6df1461031f578063c2cf732614610337578063cbf0b0c01461036c578063f00d4b5d14610384578063f1736d86146103a5576100f8565b61015e5b600034111561015b577fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3334604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b5b565b005b61017660048080359060200190919050506107c4565b005b61018e60048080359060200190919050506109a5565b6040518082815260200191505060405180910390f35b6101b16004805050610a91565b6040518082815260200191505060405180910390f35b6101d46004805050610b38565b6040518082815260200191505060405180910390f35b6101f76004805050610b42565b6040518082815260200191505060405180910390f35b61021a6004805050610adf565b005b6102296004805050610b2e565b6040518082815260200191505060405180910390f35b610255600480803590602001909190505061066e565b005b6102646004805050610a88565b6040518082815260200191505060405180910390f35b6102906004808035906020019091905050610f0e565b6040518082815260200191505060405180910390f35b6102bc6004808035906020019091905050610a9a565b005b6102f160048080359060200190919080359060200190919080359060200190820180359060200191909192905050610b9e565b6040518082815260200191505060405180910390f35b61031d60048080359060200190919050506103c8565b005b610335600480803590602001909190505061090f565b005b61035660048080359060200190919080359060200190919050506109e7565b6040518082815260200191505060405180910390f35b6103826004808035906020019091905050610b4c565b005b6103a360048080359060200190919080359060200190919050506104ca565b005b6103b26004805050610b24565b6040518082815260200191505060405180910390f35b60006000600061010260005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549250600083141561040f576104c4565b8260020a91506101036000506000858152602001908152602001600020600050905060008282600101600050541611156104c3578060000160008181505480929190600101919050555081816001016000828282505403925050819055507fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b3385604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b5b50505050565b600060003643604051808484808284378201915050828152602001935050505060405180910390206104fb816112db565b1561066757610509836109a5565b156105145750610669565b61010260005060008573ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005054915060008214156105565750610669565b61055e611777565b8273ffffffffffffffffffffffffffffffffffffffff166002600050836101008110156100025790900160005b5081905550600061010260005060008673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055508161010260005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055507fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c8484604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15b505b505050565b600036436040518084848082843782019150508281526020019350505050604051809103902061069d816112db565b156107bf576106ab826109a5565b156106b657506107c1565b6106be611777565b60fa6001600050541015156106d7576106d561153d565b505b60fa6001600050541015156106ec57506107c1565b60016000818150548092919060010191905055508173ffffffffffffffffffffffffffffffffffffffff1660026000506001600050546101008110156100025790900160005b508190555060016000505461010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c382604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b505b50565b600060003643604051808484808284378201915050828152602001935050505060405180910390206107f5816112db565b156109095761010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549150600082141561083c575061090b565b6001600160005054036000600050541115610857575061090b565b60006002600050836101008110156100025790900160005b5081905550600061010260005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055506108b2611777565b6108ba61153d565b507f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da83604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b505b5050565b600036436040518084848082843782019150508281526020019350505050604051809103902061093e816112db565b156109a05760016000505482111561095657506109a2565b81600060005081905550610968611777565b7facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da826040518082815260200191505060405180910390a15b505b50565b6000600061010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050541190506109e2565b919050565b60006000600060006101036000506000878152602001908152602001600020600050925061010260005060008673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000505491506000821415610a505760009350610a7f565b8160020a90506000818460010160005054161415610a755760009350610a7f56610a7e565b60019350610a7f565b5b50505092915050565b60006000505481565b60016000505481565b6000364360405180848480828437820191505082815260200193505050506040518091039020610ac9816112db565b15610ada5781610105600050819055505b505b50565b6000364360405180848480828437820191505082815260200193505050506040518091039020610b0e816112db565b15610b20576000610106600050819055505b505b565b6101056000505481565b6101066000505481565b6101076000505481565b6101086000505481565b6000364360405180848480828437820191505082815260200193505050506040518091039020610b7b816112db565b15610b99578173ffffffffffffffffffffffffffffffffffffffff16ff5b505b50565b6000610ba9336109a5565b15610f0557610bb7846116d7565b15610ca0577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd0043385878686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a18473ffffffffffffffffffffffffffffffffffffffff168484846040518083838082843782019150509250505060006040518083038185876185025a03f1925050505060006001029050610f06565b600036436040518084848082843782019150508281526020019350505050604051809103902090508050610cd381610f0e565b158015610d3357506000610109600050600083815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15610f045784610109600050600083815260200190815260200160002060005060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555083610109600050600083815260200190815260200160002060005060010160005081905550828261010960005060008481526020019081526020016000206000506002016000509190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610e0857803560ff1916838001178555610e39565b82800160010185558215610e39579182015b82811115610e38578235826000505591602001919060010190610e1a565b5b509050610e649190610e46565b80821115610e605760008181506000905550600101610e46565b5090565b50507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32813386888787604051808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b5b5b949350505050565b600081610f1a816112db565b156112d4576000610109600050600085815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156112d357610109600050600084815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610109600050600085815260200190815260200160002060005060010160005054610109600050600086815260200190815260200160002060005060020160005060405180828054600181600116156101000203166002900480156110765780601f1061104b57610100808354040283529160200191611076565b820191906000526020600020905b81548152906001019060200180831161105957829003601f168201915b505091505060006040518083038185876185025a03f192505050507fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a3384610109600050600087815260200190815260200160002060005060010160005054610109600050600088815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101096000506000898152602001908152602001600020600050600201600050604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156112005780601f106111d557610100808354040283529160200191611200565b820191906000526020600020905b8154815290600101906020018083116111e357829003601f168201915b5050965050505050505060405180910390a1610109600050600084815260200190815260200160002060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000506000905560028201600050805460018160011615610100020316600290046000825580601f1061128957506112c6565b601f0160209004906000526020600020908101906112c591906112a7565b808211156112c157600081815060009055506001016112a7565b5090565b5b50505060019150506112d6565b5b505b919050565b600060006000600061010260005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549250600083141561132457611535565b610103600050600086815260200190815260200160002060005091506000826000016000505414156113fd57600060005054826000016000508190555060008260010160005081905550610104600050805480919060010190908154818355818115116113c3578183600052602060002091820191016113c291906113a4565b808211156113be57600081815060009055506001016113a4565b5090565b5b5050508260020160005081905550846101046000508360020160005054815481101561000257906000526020600020900160005b50819055505b8260020a90506000818360010160005054161415611534577fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda3386604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001826000016000505411151561150757610104600050610103600050600087815260200190815260200160002060005060020160005054815481101561000257906000526020600020900160005b50600090556101036000506000868152602001908152602001600020600060008201600050600090556001820160005060009055600282016000506000905550506001935061153556611533565b816000016000818150548092919060019003919050555080826001016000828282505417925050819055505b5b5b505050919050565b60006000600190505b6001600050548110156116d2575b60016000505481108015611580575060006002600050826101008110156100025790900160005b505414155b15611592578080600101915050611554565b5b60016001600050541180156115c45750600060026000506001600050546101008110156100025790900160005b5054145b156115e357600160008181505480929190600190039190505550611593565b600160005054811080156116145750600060026000506001600050546101008110156100025790900160005b505414155b8015611637575060006002600050826101008110156100025790900160005b5054145b156116cd5760026000506001600050546101008110156100025790900160005b50546002600050826101008110156100025790900160005b50819055508061010260005060006002600050846101008110156100025790900160005b5054815260200190815260200160002060005081905550600060026000506001600050546101008110156100025790900160005b50819055505b611546565b5b5090565b60006116e2336109a5565b1561177157610107600050546116f6611980565b111561171b57600061010660005081905550611710611980565b610107600050819055505b610106600050548261010660005054011015801561174757506101056000505482610106600050540111155b15611768578161010660008282825054019250508190555060019050611772565b60009050611772565b5b919050565b60006000610104600050805490509150600090505b8181101561187857610109600050600061010460005083815481101561000257906000526020600020900160005b5054815260200190815260200160002060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000506000905560028201600050805460018160011615610100020316600290046000825580601f1061182a5750611867565b601f0160209004906000526020600020908101906118669190611848565b808211156118625760008181506000905550600101611848565b5090565b5b5050505b806001019050805061178c565b611880611885565b5b5050565b60006000610104600050805490509150600090505b8181101561193857600060010261010460005082815481101561000257906000526020600020900160005b505414151561192a57610103600050600061010460005083815481101561000257906000526020600020900160005b50548152602001908152602001600020600060008201600050600090556001820160005060009055600282016000506000905550505b5b806001019050805061189a565b61010460005080546000825590600052602060002090810190611979919061195b565b80821115611975576000818150600090555060010161195b565b5090565b5b505b5050565b6000620151804204905061198f565b9056

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.