Sponsored Link:    Chronologic - Self-Mining Ethereum token based on Proof of Time. Join the Contribution.
Contract Overview
ETH Balance: 72,583.682265063295919748 Ether
ETH USD Value: $21,386,056.14 (@ $294.64/ETH)
No Of Transactions: 123 txns
Misc
Address Watch Add To Watch List
Contract Creator 0x8bae48f227d978d084b009b775222baaf61ed9feat txn 0xbd587324db0a5ab33ba78df60d10f1c5ec588f77ef0f154c04f2bb8192b048cc
Token Tracker
  Latest 25 txns from a total Of 123 transactions View All

TxHash Age From To Value [TxFee]
0x75c020412d4f1261f35bdd9e2fc55453dd7579c8a1f4d5b16c30cefe975fb35c6 days 4 hrs ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000189896
0x333320422fcca59faa0efc8c21155d2a95c64cebe1df94b01ae4203d632fc30b6 days 4 hrs ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000189896
0x6590ba5ee327846732806e018f6c0f4b4a70a28d9f3b779fd7a9fb626e67d4a76 days 4 hrs ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000189344
0x243c68eb6a64b7a651ca5b2b94d691a0f68795b224120f0dfd8e7ce1367968b713 days 10 hrs ago0x153685a03c2025b6825ae164e2ff5681ee487667  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00053772
0x4f98c09939500571083774094e18d00c158bf30b70111e37cad46b43de20b58b13 days 10 hrs ago0x153685a03c2025b6825ae164e2ff5681ee487667  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00053772
0x21e9a7dc04169cf5af1b19bfed694fcfc5be6c026645addb2edf467876013fa113 days 10 hrs ago0x153685a03c2025b6825ae164e2ff5681ee487667  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000581832
0x2f20efa3129f8d55c8091c8e2ffabf31b20e78763827793eb422ece816877de713 days 10 hrs ago0x153685a03c2025b6825ae164e2ff5681ee487667  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000644256
0x48515c31c9fac251723448deb0fad0e87ff1a15c4a0709518d40a357f8c3250213 days 10 hrs ago0x153685a03c2025b6825ae164e2ff5681ee487667  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00058128
0x3e3ee2a08148ee9911b4585f7cf67ccff98e0ac0ad9ee53a6b1f224b59e00d1927 days 13 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.001189410123
0xf45f59ee9b4d9ba26a514f9eaddf8070068844726d57aa4fa7ddabce92e4863428 days 13 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.001228270394
0x0d2c1a96c41cca4e77e1da4cac41117977b8a617b1e3a6dcb741eb4b679098ee29 days 22 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00102062
0x0d421e7a3b5afe520f114fa0fd6ba5e839e479b113029c47122e6f1f7eb82d2630 days 23 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.003653475
0x1cc3b3848fa488856ae41f639b756400489dad1c35abace10c6c65dfec553cad31 days 1 hr ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000860685
0xa03e0f89be837916a25bed354ea6fac235a12745e680d17904f9602a68406c8431 days 1 hr ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000021406141
0x19e8e1908831a4ffc28f9452a13d53c933135176e66b4dd71d48a14df91c7017114 days 8 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000456175645
0xfde2d0f2e97a3bd1d514bc7f3c4ef76b114d076df9f8cc4a7b69b77ca00fae2b114 days 8 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.001617017185
0xdc81eff532b6423928f598f650658ce284443b72436dbe3870a239b89c1ce4af224 days 7 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00082098
0xf57e3310c7686404b6b5aeb7483b5ec8594168255f2c429f05f6978a6a516620224 days 7 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.0034823
0x29d6cbe3d2a84b20466550f577316a290f8c2edf4c44b1cf0dac5fceee7dd805224 days 8 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00074906
0x493caea3ace2f79fa450d1fbccb5f677c00d3517ecdcb58da9f11a75e6a0fb98224 days 8 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00348358
0x702177aacf116b9402fe5ddbce8a16fc2b7e2c8285aec47fe35adab6c1295335224 days 8 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.0013219
0xb92284400f60e01288d938cb6e231a16ed57b3ea8456e18b672d4e8ea92cfbcd383 days 6 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.0006433
0xba1cb2303684e20bd9d6ef266116c77e1fd270a1818c2a065c3c4ff2c2af6772389 days 8 hrs agoPoloniex Wallet  IN   0xbf35faa9c265baf50c9cff8c389c363b057532759.99 Ether0.00067332
0x526fac097d9fb4e71f1fe7b2d29fd50bd0606de87ef67ecd3e165c857556ca61391 days 9 hrs ago0xc1d67c0dac847b0ebddd1895580635f51c4552f7  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000442554
0x9a36743386da3d03a49c3ec92ebe2d240961b614741e5059a8c5b0dfdbc38f6c391 days 10 hrs ago0xc1d67c0dac847b0ebddd1895580635f51c4552f7  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750.0001 Ether0.000471324
[ 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
0x3e3ee2a08148ee9911b4585f7cf67ccff98e0ac0ad9ee53a6b1f224b59e00d19421523227 days 13 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d632100 Ether
0xf45f59ee9b4d9ba26a514f9eaddf8070068844726d57aa4fa7ddabce92e48634421178228 days 13 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d632100 Ether
0x0d2c1a96c41cca4e77e1da4cac41117977b8a617b1e3a6dcb741eb4b679098ee420700729 days 22 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d632100 Ether
0x1cc3b3848fa488856ae41f639b756400489dad1c35abace10c6c65dfec553cad420304331 days 1 hr ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d63299 Ether
0xa03e0f89be837916a25bed354ea6fac235a12745e680d17904f9602a68406c84420298531 days 1 hr ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6321 Ether
0xfde2d0f2e97a3bd1d514bc7f3c4ef76b114d076df9f8cc4a7b69b77ca00fae2b3813253114 days 8 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x019a86adcac53b2bf423bc3944907de1c363a2281 Ether
0xdc81eff532b6423928f598f650658ce284443b72436dbe3870a239b89c1ce4af3175356224 days 7 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x7be7fad439128cca6738f8a6813519af4248365c90 Ether
0x29d6cbe3d2a84b20466550f577316a290f8c2edf4c44b1cf0dac5fceee7dd8053175259224 days 8 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x7be7fad439128cca6738f8a6813519af4248365c5,000 Ether
0x702177aacf116b9402fe5ddbce8a16fc2b7e2c8285aec47fe35adab6c12953353175138224 days 8 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x7be7fad439128cca6738f8a6813519af4248365c10 Ether
0xcca3760ba74e616b49fe3a3ea32fe9a42de3723fd9e48cbd6ab8a9fba5907ada2905885268 days 20 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xf4595a5072a7a1d1f1e901063271fb9c7b286ac4ca9416cc58310adf88c0747e2905780268 days 21 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xf4595a5072a7a1d1f1e901063271fb9c7b286ac4ca9416cc58310adf88c0747e2905780268 days 21 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0x1e22d796ba4041153fbfa7821cfd39192bfa97ea747028c0a123f0dad776b32f2905764268 days 21 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0x1e22d796ba4041153fbfa7821cfd39192bfa97ea747028c0a123f0dad776b32f2905764268 days 21 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0x43dfe4c0d9aeef250e49ef52024a099cf01e7062d4e53782ace4b8bf9d2b5d2e2905751268 days 21 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xc9621226660af4357ae36b7bf7b7a34934c9d62141c6c127317159a80773299e2905703268 days 21 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xae4723e9947316ec4c10ce740c675e9980c22a90229a4ac85c438ed8ac6fbb192905696268 days 21 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xb9b1218eaf95a67600302e7ccb6759d7dc148655275038f751f43ec777ce2d212905690268 days 21 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xfa598ad0a2df84faa9ebb8d84358be8d7a073707d1c002a048af5fe9f7d74e7b2443513345 days 11 hrs ago0xa4d68b67cfce13668b8d47cd507841beb556d6830xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0xee56f3fcdbd9c5c841433427d8014030ff9eea7376c3d89c3bc164f6d89775ec2441021345 days 20 hrs ago0x249663b2e6d0a17ea86f2e4332217dbb80dd96850xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0xa42a34c592d9865f88719f7172cdd1f290d9d9ebfba5dfc0f78bfffdb0fb5cef2441004345 days 20 hrs ago0xb52223cf79eb34c3a6ff66190935a0b3415a8e5f0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0x55a7452f88fb95fc84cd1e468deb216976b295041a02778ce879ebe92a2fff102440983345 days 21 hrs ago0x44399ca5a757ab31beee28c6d9f45eb1c2f4ee270xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0xee89bb8a22850a7f3982c110a281e95dd3a76a5f1785b30293f6b229b7b9f4362440980345 days 21 hrs ago0xd4e0272463a262ed2a771aecb87d1c5ff4dce4640xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0xc7f358968cde37eeac39415342be7d9fbae1c938e5a6c040e7cfa528967dad9e2440519345 days 22 hrs ago0x7ea06491cb8f6bf05ac9567a3ccc7eaa18f81ce00xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0x5b6a3aff7cef98765f217c92a11fe077499d9ad2878edeb2edf5383290e539212440478345 days 22 hrs ago0x119fa0906121ae8fdac542e40dd32694f6b7f3aa0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
[ Download CSV Export  ] 



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

	// 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)) 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":false,"inputs":[],"name":"resetSpentToday","outputs":[],"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
60606040526040516110ee3803806110ee833981016040908152815160805160a0519190930180516001908101815533600160a060020a0316600381905560009081526101026020529384205592918190849084905b82518110156100db57828181518110156100025790602001906020020151600160a060020a0316600260005082600201610100811015610002570160009190558351600283019161010291869085908110156100025790602001906020020151600160a060020a0316815260200190815260200160002060005081905550600101610055565b8160006000508190555050505080610105600050819055506100ff62015180420490565b6101075550505050610fd9806101156000396000f3606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e1461015b5780634123cb6b146101835780635c52c2f51461018c5780637065cb48146101b2578063746c9171146101db578063797af627146101e4578063b20d30a9146101f7578063b61d27f614610220578063b75c7dc614610241578063ba51a6df14610270578063c2cf732614610299578063cbf0b0c0146102d7578063f00d4b5d14610300578063f1736d861461032e575b61033860003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b6103386004356000600036604051808383808284375050509081018190039020905061062e815b600160a060020a03331660009081526101026020526040812054818082811415610c4757610d9f565b61033a6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61033a60015481565b610338600036604051808383808284375050509081018190039020905061076f81610132565b61033860043560003660405180838380828437505050908101819003902090506105aa81610132565b61033a60005481565b61033a6004355b600081610a0581610132565b610338600435600036604051808383808284375050509081018190039020905061076381610132565b61033a60048035906024803591604435918201910135600061078e33610162565b610338600435600160a060020a0333166000908152610102602052604081205490808281141561034c576103cb565b61033860043560003660405180838380828437505050908101819003902090506106ec81610132565b61033a600435602435600082815261010360209081526040808320600160a060020a038516845261010290925282205482818114156107455761075a565b610338600435600036604051808383808284375050509081018190039020905061077d81610132565b6103386004356024356000600036604051808383808284375050509081018190039020905061045681610132565b61033a6101055481565b005b60408051918252519081900360200190f35b50506000828152610103602052604081206001810154600284900a9290831611156103cb5780546001828101805492909101835590839003905560408051600160a060020a03331681526020810186905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b50505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a1505b505050565b156103cb5761046483610162565b1561046f5750610451565b600160a060020a0384166000908152610102602052604081205492508214156104985750610451565b6103d15b6101045460005b81811015610eec57610104805461010891600091849081101561000257600080516020610fb98339815191520154825250602091909152604081208054600160a060020a0319168155600181810183905560028281018054858255939493909281161561010002600019011604601f819010610f7157505b5050506001016104a3565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005055600154600160a060020a03831660008181526101026020908152604091829020939093558051918252517f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3929181900390910190a15b505b50565b156105a5576105b882610162565b156105c357506105a7565b6105cb61049c565b60015460fa90106105de576105de6105f3565b60015460fa901061052657506105a7565b6106ab5b60015b6001548110156105a7575b600154811080156106215750600281610100811015610002570154600014155b15610da757600101610601565b1561045157600160a060020a03831660009081526101026020526040812054925082141561065c57506105a5565b600160016000505403600060005054111561067757506105a5565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556105ef61049c565b60408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b156105a55760015482111561070157506105a7565b600082905561070e61049c565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001820154600282900a9081166000141593505b50505092915050565b156105a5575061010555565b156105a75760006101065550565b156105a55781600160a060020a0316ff5b156109c9576107a2846000610e8133610162565b1561085e577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f150600093506109c992505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061088e9050816101eb565b1580156108b1575060008181526101086020526040812054600160a060020a0316145b156109c95760008181526101086020908152604082208054600160a060020a0319168817815560018181018890556002918201805481865294849020909491821615610100026000190190911691909104601f9081019290920481019185919087908390106109d15760ff198135168380011785555b506109439291505b80821115610a01576000815560010161092f565b50507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b82800160010185558215610927579182015b828111156109275782358260005055916020019190600101906109e3565b5090565b15610a885760008381526101086020526040812054600160a060020a031614610a885760408051600091909120805460018281015460029384018054600160a060020a0394909416959194909391928392859291811615610100026000190116048015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b50919050565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b505091505060006040518083038185876185025a03f1505050600084815261010860209081526040805192819020805460018281015433600160a060020a0381811689529688018c9052948701819052919094166060860181905260a06080870181815260029485018054978816156101000260001901909716949094049087018190527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a975093958a9592949193909160c083019084908015610bbe5780601f10610b9357610100808354040283529160200191610bbe565b820191906000526020600020905b815481529060010190602001808311610ba157829003601f168201915b5050965050505050505060405180910390a16000838152610108602052604081208054600160a060020a0319168155600181810183905560028281018054858255939493909281161561010002600019011604601f819010610c2957505b505050600191505061017e565b601f016020900490600052602060002090810190610c1c919061092f565b60008581526101036020526040812080549093501415610ccf576000805483556001838101919091556101048054918201808255828015829011610c9e57818360005260206000209182019101610c9e919061092f565b50505060028301819055610104805487929081101561000257600091909152600080516020610fb983398151915201555b506001810154600283900a90811660001415610d9f5760408051600160a060020a03331681526020810187905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1815460019011610d8c576000858152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610fb98339815191529290920181905580825560018281018290556002909201559450610d9f9050565b8154600019018255600182018054821790555b505050919050565b5b60018054118015610dca57506001546002906101008110156100025701546000145b15610dde5760018054600019019055610da8565b60015481108015610e015750600154600290610100811015610002570154600014155b8015610e1b57506002816101008110156100025701546000145b15610e7c57600154600290610100811015610002578101549082610100811015610002579090016000505580610102600060028361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6105f6565b1561017e5761010754610e975b62015180420490565b1115610eb057600061010655610eab610e8e565b610107555b6101065480830110801590610ece5750610106546101055490830111155b15610ee45750610106805482019055600161017e565b50600061017e565b6105a56101045460005b81811015610f8f5761010480548290811015610002576000918252600080516020610fb9833981519152015414610f6957610104805461010391600091849081101561000257600080516020610fb983398151915201548252506020919091526040812081815560018101829055600201555b600101610ef6565b601f01602090049060005260206000209081019061051b919061092f565b610104805460008083559190915261045190600080516020610fb98339815191529081019061092f564c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe
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.