Sponsored Link:   SHIFT.cash - 1st ever car title loan platform on blockchain. Join NOW.
Overview
ETH Balance: 0 Ether
ETH USD Value: $0
No Of Transactions: 52 txns
Misc
Address Watch Add To Watch List
Token Tracker
  Latest 25 txns from a total Of 52 transactions View All

TxHash Age From To Value [TxFee]
0xfef6137402fc519e763d883df2b065c1d03ea3d4c89b5ac8a343aa873a7bcc4d88 days 15 hrs ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.00009072
0x932f526f9fc5dd81bbe5d9da38aaa42fd0936aca8619e8fa59ff483f5ad5abfb88 days 15 hrs ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.000093024
0x96c2e73e45239c7f5d7d836cb7a4cf8b308e3c3d5fd687e0f535ff11c9659af588 days 15 hrs ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.00009584
0xc2f5a0f228ad2abbf32b3c147e11374d4eb08bd89692d7608f225548f7fcc6f588 days 16 hrs ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.000094048
0xd639df2bb8e32fcc039b46b906ef1748cfe43d1f5def3496e800b3345dfcab9a88 days 16 hrs ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.00009072
0x9cc4daf7942a3f371555934e145fdd32ff4a25b1d27e321d4c50509076ac076388 days 16 hrs ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.000094304
0x05d62f0bf3ff8ca6345baaae2c8c1848fd82488a3f85fe8770c81f1b297fd136140 days 7 hrs ago0x1e3f49b5814cfee970d826623da2b98acd87df89  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.0000329658
0x79610cdaec3921c4011ef49a632a8ff3d0de551b176d18e0183bb8e31add0437140 days 7 hrs ago0x1e3f49b5814cfee970d826623da2b98acd87df89  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.0000335736
0xe7cf4e1509c1a9e5bea17e6810c1494d9439227a467433b4db24bc80d1acefe9145 days 16 hrs agoJordiBaylina (WHG)  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.0011109
0x39e0766296a5d7a9a7c3d05141cd25834b9215a3b10946ff257c36299816be0b145 days 16 hrs agoJordiBaylina (WHG)  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.00169212
0x896288f3af5b54b7e1e713231cbcbc9174b75fb4a3e863546628b36b23f1e676145 days 16 hrs agoJordiBaylina (WHG)  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.0011109
0x1075072be533252f88f53b2a4ced69db54604080b6a5ca06407444652646f15a145 days 16 hrs agoJordiBaylina (WHG)  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.00169212
0x7117b30d70ef2747bc7c82862b23db6e5e569ffd53c82425aac2c6b8b4456363145 days 18 hrs agoJordiBaylina (WHG)  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.007406
0xec5c266a5aa234600c33835ab832c72ef6cda64a19dc13b17377a18ea4340344145 days 18 hrs agoJordiBaylina (WHG)  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.0142808
0x4a76882a597d506148e80a810ba726da7a8d7838f7678f631d441a6c7a769f51145 days 20 hrs ago0x07040f3ecf94c9a41b5674bd4e6f22ee7077b2df  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.000929082
0xdaaf96fe9356330452b25e8440deabaadcf6e38d0646845fed2a86b91aec6a80145 days 20 hrs ago0x07040f3ecf94c9a41b5674bd4e6f22ee7077b2df  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.002984247
0x1765aaac0f7143019c209bee336a6043a8271c26ae3cf9cde650f16f26f642ae145 days 20 hrs ago0x07040f3ecf94c9a41b5674bd4e6f22ee7077b2df  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.0021
0x5bedcd72b374316440357df855866c985e4a4adb9e117965ca04db710e2586d7145 days 20 hrs ago0x07040f3ecf94c9a41b5674bd4e6f22ee7077b2df  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.001500828
0xecff18b2e3df9a635665854b126dd39020b6a37b6e54b8af48dc1f8f482e936d145 days 20 hrs ago0x07040f3ecf94c9a41b5674bd4e6f22ee7077b2df  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.001499694
0x0e0d16475d2ac6a4802437a35a21776e5c9b681a77fef1693b0badbb6afdb083146 days 17 hrs agoMultisigExploit-Hacker  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.001260021
0xff261a49c61861884d0509dac46ed67577a7d48cb73c2f51f149c0bf96b29660146 days 17 hrs agoMultisigExploit-Hacker  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.001500828
0x4a7dd15472dcca9878b9cc8182cb2d5bdba77c8d42e78666ae2af010df36c531202 days 5 hrs ago0x86ed2df3159171dd3fc8361ae0e7c59f46cf0ea7  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.00114282
0xd34be9b79fc9dc368affdc343ce23e5ffc82a35d90f6f5a68b311b857f46ba87202 days 5 hrs ago0x003e3b48e8b8d72aa5fcddb5e2d71d5eb2de2f53  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.00114651
0x7d6fa15dfdad4c363b0a4d3e0a9fdd8e1dfbf312a55026014d1cf5fe28dcd682202 days 5 hrs ago0x003230bbe64eccd66f62913679c8966cf9f41166  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.00604359
0xe6e7b44de463c242ae86195162210f7fbe0e9417c678bc41e33cc3b42dda076f207 days 21 hrs ago0x86ed2df3159171dd3fc8361ae0e7c59f46cf0ea7  IN   0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50 Ether0.00114186
[ 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
0x05d62f0bf3ff8ca6345baaae2c8c1848fd82488a3f85fe8770c81f1b297fd1364070819140 days 7 hrs ago0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50x1e3f49b5814cfee970d826623da2b98acd87df890 Ether
0x4a76882a597d506148e80a810ba726da7a8d7838f7678f631d441a6c7a769f514045298145 days 20 hrs ago0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50x07040f3ecf94c9a41b5674bd4e6f22ee7077b2df0.993388136496072192 Ether
0x0e0d16475d2ac6a4802437a35a21776e5c9b681a77fef1693b0badbb6afdb0834041179146 days 17 hrs ago0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50xb3764761e297d6f121e79c32a65829cd1ddb4d3226,793 Ether
0x4a7dd15472dcca9878b9cc8182cb2d5bdba77c8d42e78666ae2af010df36c5313759405202 days 5 hrs ago0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50x0017185703fda419403449447dd534e90b1fea7011,578 Ether
0xe6e7b44de463c242ae86195162210f7fbe0e9417c678bc41e33cc3b42dda076f3728470207 days 21 hrs ago0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50x0017185703fda419403449447dd534e90b1fea704,200 Ether
0x7c1941c65e7e6f805c84d3e3a7773376d72ad0c47add47961df9a5492107d1f53557174238 days 3 hrs ago0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50x0017185703fda419403449447dd534e90b1fea704,000 Ether
0x8b8f6b1c3c62791def07e2dc220bf4fdcf8e7e9466c9d008554bbcff1f4d17ab3463665254 days 3 hrs ago0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50x0017185703fda419403449447dd534e90b1fea701,000 Ether
0x3341bfb1d9fdac9ea7d8d8c3934fbdb79c2bc78525ab83f47edf6b3df508d4873410313263 days 2 hrs ago0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50x0017185703fda419403449447dd534e90b1fea708,000 Ether
0x2025858cdebc50890745762750dbefedb6b6ce5066d2fc034117982a429cde1e3403913264 days 4 hrs ago0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa50x0017185703fda419403449447dd534e90b1fea706,000 Ether
0xb619c11964f7eed10c578bdba3fff265bcab69272d6d72389511e58c7f47e6153393001266 days 11 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa5100 Ether
0x525648f7e70f0852a83f17cc39786968a6467333923b87f4f4588c16781bf19d3392994266 days 13 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa535 Ether
0x7a4bd4a1c11771a09e666584b660e9eb3c6c15223cf1fff7441cee242a1e7eb13392994266 days 13 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa530 Ether
0xe0fb8272c72999c34341776a8bd446f93aa36506e1503696154508e4b8a8f54f3392989266 days 15 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa51 Ether
0x5ebdca7ba1ae3bb9dc1acb055be2f3e6b85541e3c4b6e7cad0b202a1a44c29073392989266 days 15 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa517.950094 Ether
0x0931ceb54af2707f2d9c2b12b3e9b9e31e80669414d16ba17b0e05230bf7a9573392971266 days 19 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa59.9 Ether
0xc420c81bf132f21c366605d91bdc902301d993785728829c0d7dadcecb63c46e3392968266 days 20 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa510 Ether
0x0d40d7a361b430a8186013896a13a1c22c50acb3d0f9ec81fdc5bd20d96485903392939266 days 26 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa530 Ether
0x85054e686fbdb19fc6e469951b8d35b959ead8749339cbac79f32356589c9e513392939266 days 26 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa520.999162808 Ether
0x94db741635e7d544ebf99048648967e1bafdbb57394fb271aaa9dea69757f4343392934266 days 27 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa54 Ether
0xe21e58b9d02995a7b7844a7075d5575eff7bdefcdf8ab01fa4e59fa31259dce73392916266 days 30 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa525 Ether
0xbf3f82d436ff9973a13dd84994418b67cf298488380aeab9e83feda556b345673392890266 days 38 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa510 Ether
0x831ac564d66c8d832bef4c6068a183234905d4b65010821f5a5c39cae272cc2b3392878266 days 40 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa510.2 Ether
0xa59899cff396d9b357d408a35d8a8e1b1846ed5fea11633303b9687b2157b2463392871266 days 41 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa51 Ether
0xb5a8c2845d368ee568fffb55a58ed7a20f6314584f206966bd0cb95971e56cba3392871266 days 41 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa51 Ether
0x740387ee7bcbfc2c69c05487b0c2ff8dad32ad1aa43550c51bcd88d2b3f9b89b3392856266 days 45 mins ago0x362bb67f7fdbdd0dbba4bce16da6a284cf484ed60x91efffb9c6cd3a66474688d0a48aa6ecfe515aa547 Ether
[ Download CSV Export  ] 
Contract SUICIDE called at TxHash 0x05d62f0bf3ff8ca6345baaae2c8c1848fd82488a3f85fe8770c81f1b297fd136

Contract Name: Wallet
Compiler Version: v0.4.6+commit.2dabbdf0
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts
// This multisignature wallet is based on the wallet contract by Gav Wood.
// Only one single change was made: The contract creator is not automatically one of the wallet owners.

//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.
pragma solidity ^0.4.6;

contract multisig {
    // EVENTS

    // this contract 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);

    // 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);
}

contract multisigAbi is multisig {
    function isOwner(address _addr) returns (bool);

    function hasConfirmed(bytes32 _operation, address _owner) constant returns (bool);

    function confirm(bytes32 _h) returns(bool);

    // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today.
    function setDailyLimit(uint _newLimit);

    function addOwner(address _owner);

    function removeOwner(address _owner);

    function changeRequirement(uint _newRequired);

    // Revokes a prior confirmation of the given operation
    function revoke(bytes32 _operation);

    function changeOwner(address _from, address _to);

    function execute(address _to, uint _value, bytes _data) returns(bool);
}

contract WalletLibrary is multisig {
    // TYPES

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

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

    /******************************
     ***** MULTI OWNED SECTION ****
     ******************************/

    // 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.
    // change from original: msg.sender is not automatically owner
    function initMultiowned(address[] _owners, uint _required) {
        m_numOwners = _owners.length ;
        m_required = _required;

        for (uint i = 0; i < _owners.length; ++i)
        {
            m_owners[1 + i] = uint(_owners[i]);
            m_ownerIndex[uint(_owners[i])] = 1 + i;
        }
    }

    // Revokes a prior confirmation of the given operation
    function revoke(bytes32 _operation) {
        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)) {
        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)) {
        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)) {
        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)) {
        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;
        return !(pending.ownersDone & ownerIndexBit == 0);
    }

    // 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 {
        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;
    }


    /******************************
     ****** DAY LIMIT SECTION *****
     ******************************/

    // 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 initDaylimit(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)) {
        m_dailyLimit = _newLimit;
    }
    // resets the amount already spent today. needs many of the owners to confirm.
    function resetSpentToday() onlymanyowners(sha3(msg.data)) {
        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.
        // overflow protection                    // dailyLimit check
        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; }


    /******************************
     ********* WALLET SECTION *****
     ******************************/

    // METHODS

    // constructor - just pass on the owner array to the multiowned and
    // the limit to daylimit
    function initWallet(address[] _owners, uint _required, uint _daylimit) {
        initMultiowned(_owners, _required);
        initDaylimit(_daylimit) ;
    }

    // kills the contract sending everything to `_to`.
    function kill(address _to) onlymanyowners(sha3(msg.data)) {
        suicide(_to);
    }

    // Outside-visible transact entry point. Executes transaction 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) onlyowner returns(bool _callValue) {
        // 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.
            _callValue =_to.call.value(_value)(_data);
        } else {
            // determine our operation hash.
            bytes32 _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 clearWalletPending() internal {
        uint length = m_pendingIndex.length;
        for (uint i = 0; i < length; ++i)
            delete m_txs[m_pendingIndex[i]];
        clearPending();
    }

    // FIELDS
    address constant _walletLibrary = 0x4f2875f631f4fc66b8e051defba0c9f9106d7d5a;

    // the number of owners that must confirm the same operation before it is run.
    uint m_required;
    // pointer used to find a free slot in m_owners
    uint m_numOwners;

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

    // 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;

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


contract Wallet is multisig {

    // WALLET CONSTRUCTOR
    //   calls the `initWallet` method of the Library in this context
    function Wallet(address[] _owners, uint _required, uint _daylimit) {
        // Signature of the Wallet Library's init function
        bytes4 sig = bytes4(sha3("initWallet(address[],uint256,uint256)"));
        address target = _walletLibrary;

        // Compute the size of the call data : arrays has 2
        // 32bytes for offset and length, plus 32bytes per element ;
        // plus 2 32bytes for each uint
        uint argarraysize = (2 + _owners.length);
        uint argsize = (2 + argarraysize) * 32;

        assembly {
            // Add the signature first to memory
            mstore(0x0, sig)
            // Add the call data, which is at the end of the
            // code
            codecopy(0x4,  sub(codesize, argsize), argsize)
            // Delegate call to the library
            delegatecall(sub(gas, 10000), target, 0x0, add(argsize, 0x4), 0x0, 0x0)
        }
    }

    // METHODS

    // gets called when no other function matches
    function() payable {
        // just being sent some cash?
        if (msg.value > 0)
            Deposit(msg.sender, msg.value);
        else if (msg.data.length > 0)
            _walletLibrary.delegatecall(msg.data);
    }

    // Gets an owner by 0-indexed position (using numOwners as the count)
    function getOwner(uint ownerIndex) constant returns (address) {
        return address(m_owners[ownerIndex + 1]);
    }

    // As return statement unavailable in fallback, explicit the method here

    function hasConfirmed(bytes32 _operation, address _owner) constant returns (bool) {
        return _walletLibrary.delegatecall(msg.data);
    }

    function isOwner(address _addr) returns (bool) {
        return _walletLibrary.delegatecall(msg.data);
    }

    // FIELDS
    address constant _walletLibrary = 0x4f2875f631f4fc66b8e051defba0c9f9106d7d5a;

    // 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;

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

    // list of owners
    uint[256] m_owners;
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_numOwners","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_lastDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_spentToday","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_required","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_operation","type":"bytes32"},{"name":"_owner","type":"address"}],"name":"hasConfirmed","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"ownerIndex","type":"uint256"}],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_dailyLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[{"name":"_owners","type":"address[]"},{"name":"_required","type":"uint256"},{"name":"_daylimit","type":"uint256"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"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
6060604052346100005760405161041b38038061041b83398101604090815281516020830151918301519201915b604080517f696e697457616c6c657428616464726573735b5d2c75696e743235362c75696e81527f74323536290000000000000000000000000000000000000000000000000000006020808301919091529151908190036025019020845160008290529091734f2875f631f4fc66b8e051defba0c9f9106d7d5a91600281019160049182010290819038829003903960006000600483016000866127105a03f45b505050505050505b610337806100e46000396000f36060604052361561006c5760e060020a60003504632f54bf6e81146101245780634123cb6b146101485780635237509314610167578063659010e714610186578063746c9171146101a5578063c2cf7326146101c4578063c41a360a146101eb578063f1736d8614610217575b6101225b60003411156100c15760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a161011e565b600036111561011e57734f2875f631f4fc66b8e051defba0c9f9106d7d5a600160a060020a0316600036600060405160200152604051808383808284378201915050925050506020604051808303818560325a03f4156100005750505b5b5b565b005b3461000057610134600435610236565b604080519115158252519081900360200190f35b3461000057610155610297565b60408051918252519081900360200190f35b346100005761015561029d565b60408051918252519081900360200190f35b34610000576101556102a3565b60408051918252519081900360200190f35b34610000576101556102a9565b60408051918252519081900360200190f35b34610000576101346004356024356102af565b604080519115158252519081900360200190f35b34610000576101fb600435610311565b60408051600160a060020a039092168252519081900360200190f35b3461000057610155610331565b60408051918252519081900360200190f35b6000734f2875f631f4fc66b8e051defba0c9f9106d7d5a600160a060020a0316600036600060405160200152604051808383808284378201915050925050506020604051808303818560325a03f4156100005750506040515190505b919050565b60015481565b60045481565b60035481565b60005481565b6000734f2875f631f4fc66b8e051defba0c9f9106d7d5a600160a060020a0316600036600060405160200152604051808383808284378201915050925050506020604051808303818560325a03f4156100005750506040515190505b92915050565b6000600582600101610100811015610000570160005b505490505b919050565b6002548156000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000086ed2df3159171dd3fc8361ae0e7c59f46cf0ea70000000000000000000000006d0adde6bc61af8f01f6f7019a4fc9a0d2654b73000000000000000000000000003e3b48e8b8d72aa5fcddb5e2d71d5eb2de2f53000000000000000000000000003230bbe64eccd66f62913679c8966cf9f41166

    Constructor Arguments (ABI-encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000086ed2df3159171dd3fc8361ae0e7c59f46cf0ea70000000000000000000000006d0adde6bc61af8f01f6f7019a4fc9a0d2654b73000000000000000000000000003e3b48e8b8d72aa5fcddb5e2d71d5eb2de2f53000000000000000000000000003230bbe64eccd66f62913679c8966cf9f41166

-----Decoded View---------------
Found 8 constructor arguments :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [4] : 00000000000000000000000086ed2df3159171dd3fc8361ae0e7c59f46cf0ea7
Arg [5] : 0000000000000000000000006d0adde6bc61af8f01f6f7019a4fc9a0d2654b73
Arg [6] : 000000000000000000000000003e3b48e8b8d72aa5fcddb5e2d71d5eb2de2f53
Arg [7] : 000000000000000000000000003230bbe64eccd66f62913679c8966cf9f41166


   Library Used
WalletLibrary : 0x4f2875f631f4fc66b8e051defba0c9f9106d7d5a

 

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.