Contract 0xbf35faa9c265baf50c9cff8c389c363b05753275

 

Contract Overview

Balance:
36,002.585562962431031491 Ether

EtherValue:
$5,015,160.17 (@ $139.30/ETH)

Token:
TxHash Block Age From To Value [TxFee]
0x3524869b342f5e71ff33e56a488305593204a296118a38c056b712d3c4fbb4cc6775313114 days 6 hrs ago0xdec0180bd3b1312c4eec3910faed36c63ebb4e01 IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00037453
0x8f16c6a4e68a970851653812948bb512c9967536098d4f7c78723af7b0a67b666775205114 days 6 hrs ago0x8bae48f227d978d084b009b775222baaf61ed9fe IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00173975
0xfa7aa09e121b522ea1397b494421505ea798d9a0b720b165789c45642f054a6f6775150114 days 6 hrs ago0x8bae48f227d978d084b009b775222baaf61ed9fe IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00040921
0xa8113aede8d1caed2ebe74510761540bdc94a50ec3b5edf2ffbb55125cb1ff8f6775148114 days 6 hrs ago0x8bae48f227d978d084b009b775222baaf61ed9fe IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00075967
0x88c232e773bcc09892e6e19d7c1bb3d85c62301e8cdb6f9745996789204409616688473128 days 11 hrs ago0x89c2f73bc7df2fffa3f50cab45add2990d77ba4a IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00023668
0xc354493e5d060a3413a6b647168afd6b91ccebb3f8b1a6715da1607cba201cfd6640485136 days 8 hrs ago0xc4ce7b61c02b75a84547884f7039c082c5c7edba IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00013317
0x653eca23aacdbb8889ec6ae35d1b89786df7dfddf296347afacf2dabaec98f546640465136 days 8 hrs ago0xc4ce7b61c02b75a84547884f7039c082c5c7edba IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00014532
0x570a9a162bd526787d001d5d5234dd86808cb5ff75b36d7f06489f3f74cb5ef46640440136 days 8 hrs ago0xc4ce7b61c02b75a84547884f7039c082c5c7edba IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000140952
0x8f81356bf3b0534c40a3a9c66999813c642e3d4d06411aa406d09840d412a90a6640430136 days 8 hrs ago0xc4ce7b61c02b75a84547884f7039c082c5c7edba IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000186088
0xd5451f04b090092a73c6fbc7f06c70dca6b6a0127f336d225e9900bc69b00ce26640400136 days 8 hrs ago0xc4ce7b61c02b75a84547884f7039c082c5c7edba IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000165676
0x487a86751ef0afdb7dae3e63253f25460331f1fb23059ccd518af8bf070f4ca56640295136 days 9 hrs ago0xc4ce7b61c02b75a84547884f7039c082c5c7edba IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000139566
0x6b69e03c69434a4d26e87f413b4d885697f1a5c69e97ee5dd6642d7db05ba19b6424340171 days 14 hrs ago0xfa88f9b1f60b05419b034345d6b5b601a3c5df3b IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000970388
0x42b7c4392f3cf2b885557e267ffbc3155094ec210b32bac64442d9e1247003d16424321171 days 14 hrs ago0xfa88f9b1f60b05419b034345d6b5b601a3c5df3b IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00099302
0x13dba2ca8ebe79ad5f80b7bb820c51ea5c0d0ae8c02e353cf0c1968c3876cfc46424291171 days 14 hrs ago0xfa88f9b1f60b05419b034345d6b5b601a3c5df3b IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.001030002
0x28cafc1a5758071070795e49bce7049eb94ca68bcd6624de12cf3879bd7b5e156290705193 days 16 hrs ago0x398db5039aa7f064a8cbde5c302e09e2cac46487 IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000211352
0x0496b7db592454d568902aaa6cf05074313c0fa8e8f6ea130ae32720653e30066290626193 days 17 hrs ago0x398db5039aa7f064a8cbde5c302e09e2cac46487 IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000186088
0xcece2c6b94a4a60e66e2bf588a82d92d0704b64ba04ba01ae1fc827c84e505736290194193 days 18 hrs ago0x398db5039aa7f064a8cbde5c302e09e2cac46487 IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00035238
0xf933aea6ac5d25e6d5fcc5219f9f09d10185631d0286203154a78c0a083777326290194193 days 18 hrs ago0x398db5039aa7f064a8cbde5c302e09e2cac46487 IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000070476
0xae7672703b96aa56a93d77a07da8394c766143777943747720e1e9471d7f97916188159210 days 23 hrs ago0x84db7a74d859db2c11fbb6539fe41bf0971a5010 IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.0004844
0x009ae6287b3c1df3d941786813b51a45d7e40cd012ea94cc0020ba011b881fd36188148210 days 23 hrs ago0x84db7a74d859db2c11fbb6539fe41bf0971a5010 IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00046522
0x63884d89d495ad9603b016ad0e3408d6da3a49d8a75478399d7f4b10cb9f830a6188142210 days 23 hrs ago0x84db7a74d859db2c11fbb6539fe41bf0971a5010 IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00046984
0x33516805618e35b67a2b8aa859b20c25e7c22201abd4df3f341a769e74a442295824689272 days 17 hrs ago0xe6fbe6582648dd4dad45cd00392e84bfb179ee6b IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00012238
0xa7cb73441fda84de20a8571e193e8639576f7151d3f3c5523d986e9355f13eed5824681272 days 17 hrs ago0xe6fbe6582648dd4dad45cd00392e84bfb179ee6b IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000111935
0x7c2ae11274441c063a586c51be32bbaf6a1df60ed6142fe86020515634687efa5824668272 days 17 hrs ago0xe6fbe6582648dd4dad45cd00392e84bfb179ee6b IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00012302
0xda7cb50a4621e009add0b63e48d8759079ad8c9498edd6488db8b6a33d4822545824665272 days 17 hrs ago0xe6fbe6582648dd4dad45cd00392e84bfb179ee6b IN  0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.000115985
[ Download CSV Export 

Latest 25 internal transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x3524869b342f5e71ff33e56a488305593204a296118a38c056b712d3c4fbb4cc6775313114 days 6 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x43b69fde1895fb859c6c2b8f44ea1131434b187c1,399.8 Ether
0xfa7aa09e121b522ea1397b494421505ea798d9a0b720b165789c45642f054a6f6775150114 days 6 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x43b69fde1895fb859c6c2b8f44ea1131434b187c0.1 Ether
0xa8113aede8d1caed2ebe74510761540bdc94a50ec3b5edf2ffbb55125cb1ff8f6775148114 days 6 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x43b69fde1895fb859c6c2b8f44ea1131434b187c0.1 Ether
0x42c9e61ef92d9a46b98a6f78987affb82ef1de21da5cd86348efbaba4eccf4495379861349 days 23 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d63220,000 Ether
0x9cbc1db55566fb6d51182732b1a8f9fca15627b45009bc06f8142e3ef06fccd95327449358 days 17 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6321 Ether
0x2cd567be5a562546158261f82c5f0b634748d68c4ec5271004a38befe92c4cd35296244363 days 22 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xa0e8c85db967bcc9d491d8cb5664b414adee3c2a239.8 Ether
0xe972170ad89c8340e6865bc43932a7a70873042f6d30a8d69fc8f143ce360d015293759364 days 8 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xa0e8c85db967bcc9d491d8cb5664b414adee3c2a0.1 Ether
0xf1e21841fb8741784adf012165c7451f575e453a9e246fb490047dd5334a176c5293759364 days 8 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xa0e8c85db967bcc9d491d8cb5664b414adee3c2a0.1 Ether
0x26b787cab65bdf8602ad6da767ef437d808336da6f2a30e635d50e83dca2f5d45092058398 days 13 hrs ago0x4c7d87157d964963d5e4c648b5af750a44379bf70xbf35faa9c265baf50c9cff8c389c363b057532750.001093362198095363 Ether
0xf7c4c464d10eb2b5ce9bcb7091e5a7c49dfad0a0e73829f6986366afa94345315091741398 days 14 hrs ago0x4c7d87157d964963d5e4c648b5af750a44379bf70xbf35faa9c265baf50c9cff8c389c363b057532750.00220453693701638 Ether
0x068be5ec94e36549e0af19893185cb49fcee7e4566417b8fbabb661cc7e69f624840727442 days 6 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6328,740 Ether
0x997ecdda77615a01881ec6ab1680149341f76f32e69e8d112daa1853ca4824a54836730442 days 22 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6320.1 Ether
0x70852dd529f60014c6bb612a9b7d6c6774a5b336a571b4d003d036a86899acfb4365716521 days 21 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xdec0180bd3b1312c4eec3910faed36c63ebb4e01100 Ether
0xf33a1aa6528ffa9eed282b5364dbd6e039e28eb0c6da4cccf746d58b10d109534363087522 days 19 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xdec0180bd3b1312c4eec3910faed36c63ebb4e0199.9 Ether
0x7c47d3e030586bad73e22333fa9dec2b2115eeb0aad516f79be3246edcc07f3a4363084522 days 19 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xdec0180bd3b1312c4eec3910faed36c63ebb4e010.1 Ether
0x25dfb5826f1e7fa39831a410991f767dbbbe604984ab6d08e6b3b817514201354353124526 days 5 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6325,999 Ether
0xac7c2ded61be91464051ce101f3554b33c18bfd3da223842a93d2a4a25c347a54353071526 days 5 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6321 Ether
0x3e3ee2a08148ee9911b4585f7cf67ccff98e0ac0ad9ee53a6b1f224b59e00d194215232568 days 10 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d632100 Ether
0xf45f59ee9b4d9ba26a514f9eaddf8070068844726d57aa4fa7ddabce92e486344211782569 days 10 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d632100 Ether
0x0d2c1a96c41cca4e77e1da4cac41117977b8a617b1e3a6dcb741eb4b679098ee4207007570 days 18 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d632100 Ether
0x1cc3b3848fa488856ae41f639b756400489dad1c35abace10c6c65dfec553cad4203043571 days 21 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d63299 Ether
0xa03e0f89be837916a25bed354ea6fac235a12745e680d17904f9602a68406c844202985571 days 22 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750xec148a24acd70edb1d2081f541d6704ceaf3d6321 Ether
0xfde2d0f2e97a3bd1d514bc7f3c4ef76b114d076df9f8cc4a7b69b77ca00fae2b3813253655 days 5 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x019a86adcac53b2bf423bc3944907de1c363a2281 Ether
0xdc81eff532b6423928f598f650658ce284443b72436dbe3870a239b89c1ce4af3175356765 days 4 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x7be7fad439128cca6738f8a6813519af4248365c90 Ether
0x29d6cbe3d2a84b20466550f577316a290f8c2edf4c44b1cf0dac5fceee7dd8053175259765 days 4 hrs ago0xbf35faa9c265baf50c9cff8c389c363b057532750x7be7fad439128cca6738f8a6813519af4248365c5,000 Ether
[ Download CSV Export 

Contract Source Code

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

60606040526040516110ee3803806110ee833981016040908152815160805160a0519190930180516001908101815533600160a060020a0316600381905560009081526101026020529384205592918190849084905b82518110156100db57828181518110156100025790602001906020020151600160a060020a0316600260005082600201610100811015610002570160009190558351600283019161010291869085908110156100025790602001906020020151600160a060020a0316815260200190815260200160002060005081905550600101610055565b8160006000508190555050505080610105600050819055506100ff62015180420490565b6101075550505050610fd9806101156000396000f3606060405236156100b95760e060020a6000350463173825d9811461010b5780632f54bf6e1461015b5780634123cb6b146101835780635c52c2f51461018c5780637065cb48146101b2578063746c9171146101db578063797af627146101e4578063b20d30a9146101f7578063b61d27f614610220578063b75c7dc614610241578063ba51a6df14610270578063c2cf732614610299578063cbf0b0c0146102d7578063f00d4b5d14610300578063f1736d861461032e575b61033860003411156101095760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b565b6103386004356000600036604051808383808284375050509081018190039020905061062e815b600160a060020a03331660009081526101026020526040812054818082811415610c4757610d9f565b61033a6004355b600160a060020a03811660009081526101026020526040812054115b919050565b61033a60015481565b610338600036604051808383808284375050509081018190039020905061076f81610132565b61033860043560003660405180838380828437505050908101819003902090506105aa81610132565b61033a60005481565b61033a6004355b600081610a0581610132565b610338600435600036604051808383808284375050509081018190039020905061076381610132565b61033a60048035906024803591604435918201910135600061078e33610162565b610338600435600160a060020a0333166000908152610102602052604081205490808281141561034c576103cb565b61033860043560003660405180838380828437505050908101819003902090506106ec81610132565b61033a600435602435600082815261010360209081526040808320600160a060020a038516845261010290925282205482818114156107455761075a565b610338600435600036604051808383808284375050509081018190039020905061077d81610132565b6103386004356024356000600036604051808383808284375050509081018190039020905061045681610132565b61033a6101055481565b005b60408051918252519081900360200190f35b50506000828152610103602052604081206001810154600284900a9290831611156103cb5780546001828101805492909101835590839003905560408051600160a060020a03331681526020810186905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b50505050565b600160a060020a03831660028361010081101561000257508301819055600160a060020a03851660008181526101026020908152604080832083905584835291829020869055815192835282019290925281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a1505b505050565b156103cb5761046483610162565b1561046f5750610451565b600160a060020a0384166000908152610102602052604081205492508214156104985750610451565b6103d15b6101045460005b81811015610eec57610104805461010891600091849081101561000257600080516020610fb98339815191520154825250602091909152604081208054600160a060020a0319168155600181810183905560028281018054858255939493909281161561010002600019011604601f819010610f7157505b5050506001016104a3565b60018054810190819055600160a060020a038316906002906101008110156100025790900160005055600154600160a060020a03831660008181526101026020908152604091829020939093558051918252517f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3929181900390910190a15b505b50565b156105a5576105b882610162565b156105c357506105a7565b6105cb61049c565b60015460fa90106105de576105de6105f3565b60015460fa901061052657506105a7565b6106ab5b60015b6001548110156105a7575b600154811080156106215750600281610100811015610002570154600014155b15610da757600101610601565b1561045157600160a060020a03831660009081526101026020526040812054925082141561065c57506105a5565b600160016000505403600060005054111561067757506105a5565b600060028361010081101561000257508301819055600160a060020a038416815261010260205260408120556105ef61049c565b60408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a1505050565b156105a55760015482111561070157506105a7565b600082905561070e61049c565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15050565b506001820154600282900a9081166000141593505b50505092915050565b156105a5575061010555565b156105a75760006101065550565b156105a55781600160a060020a0316ff5b156109c9576107a2846000610e8133610162565b1561085e577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a184600160a060020a03168484846040518083838082843750505090810191506000908083038185876185025a03f150600093506109c992505050565b6000364360405180848480828437505050909101908152604051908190036020019020915061088e9050816101eb565b1580156108b1575060008181526101086020526040812054600160a060020a0316145b156109c95760008181526101086020908152604082208054600160a060020a0319168817815560018181018890556002918201805481865294849020909491821615610100026000190190911691909104601f9081019290920481019185919087908390106109d15760ff198135168380011785555b506109439291505b80821115610a01576000815560010161092f565b50507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf328133868887876040518087815260200186600160a060020a0316815260200185815260200184600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b949350505050565b82800160010185558215610927579182015b828111156109275782358260005055916020019190600101906109e3565b5090565b15610a885760008381526101086020526040812054600160a060020a031614610a885760408051600091909120805460018281015460029384018054600160a060020a0394909416959194909391928392859291811615610100026000190116048015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b50919050565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b505091505060006040518083038185876185025a03f1505050600084815261010860209081526040805192819020805460018281015433600160a060020a0381811689529688018c9052948701819052919094166060860181905260a06080870181815260029485018054978816156101000260001901909716949094049087018190527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a975093958a9592949193909160c083019084908015610bbe5780601f10610b9357610100808354040283529160200191610bbe565b820191906000526020600020905b815481529060010190602001808311610ba157829003601f168201915b5050965050505050505060405180910390a16000838152610108602052604081208054600160a060020a0319168155600181810183905560028281018054858255939493909281161561010002600019011604601f819010610c2957505b505050600191505061017e565b601f016020900490600052602060002090810190610c1c919061092f565b60008581526101036020526040812080549093501415610ccf576000805483556001838101919091556101048054918201808255828015829011610c9e57818360005260206000209182019101610c9e919061092f565b50505060028301819055610104805487929081101561000257600091909152600080516020610fb983398151915201555b506001810154600283900a90811660001415610d9f5760408051600160a060020a03331681526020810187905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1815460019011610d8c576000858152610103602052604090206002015461010480549091908110156100025760406000908120600080516020610fb98339815191529290920181905580825560018281018290556002909201559450610d9f9050565b8154600019018255600182018054821790555b505050919050565b5b60018054118015610dca57506001546002906101008110156100025701546000145b15610dde5760018054600019019055610da8565b60015481108015610e015750600154600290610100811015610002570154600014155b8015610e1b57506002816101008110156100025701546000145b15610e7c57600154600290610100811015610002578101549082610100811015610002579090016000505580610102600060028361010081101561000257810154825260209290925260408120929092556001546101008110156100025701555b6105f6565b1561017e5761010754610e975b62015180420490565b1115610eb057600061010655610eab610e8e565b610107555b6101065480830110801590610ece5750610106546101055490830111155b15610ee45750610106805482019055600161017e565b50600061017e565b6105a56101045460005b81811015610f8f5761010480548290811015610002576000918252600080516020610fb9833981519152015414610f6957610104805461010391600091849081101561000257600080516020610fb983398151915201548252506020919091526040812081815560018101829055600201555b600101610ef6565b601f01602090049060005260206000209081019061051b919061092f565b610104805460008083559190915261045190600080516020610fb98339815191529081019061092f564c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe

Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.