Contract Overview
ETH Balance: 78,084.682265063 Ether ($798,806.30)
Mined:  0
No Of Transactions: 102 txns + 291 internalTxns
  Latest 25 txns from a total Of 102 transactions View All

TxHash Block Age From To Value [TxFee]
0xb92284400f60e01288d938cb6e231a16ed57b3ea8456e18b672d4e8ea92cfbcd2215399133 days 6 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.0006433
0xba1cb2303684e20bd9d6ef266116c77e1fd270a1818c2a065c3c4ff2c2af67722178608139 days 8 hrs ago0x32be343b94f860124dc4fee278fdcbd38c102d88  IN   0xbf35faa9c265baf50c9cff8c389c363b057532759.99 Ether0.00067332
0x526fac097d9fb4e71f1fe7b2d29fd50bd0606de87ef67ecd3e165c857556ca612166297141 days 9 hrs ago0xc1d67c0dac847b0ebddd1895580635f51c4552f7  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00044255
0x9a36743386da3d03a49c3ec92ebe2d240961b614741e5059a8c5b0dfdbc38f6c2166193141 days 9 hrs ago0xc1d67c0dac847b0ebddd1895580635f51c4552f7  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750.0001 Ether0.00047132
0x3b7bb11ae0365c4a039a32daf5777b0c1329b2c08de2dc5e1aeb726bcaf96fab2166187141 days 9 hrs ago0xc1d67c0dac847b0ebddd1895580635f51c4552f7  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750.0001 Ether0.000441
0x21424d10067d3f4f6a7c509233a75bc03800d60c6bedeba9525998008f56f2ee2133718146 days 18 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00242662
0x3a5cf38f1c200b9981f0208b9e8e84cc094baea16ab767c839dff900e4b592432133684146 days 18 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00499992
0x17cf32f54d173aba29afd86345c2611c794011aebaf30f972981fe20971b9f132133639146 days 19 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00242662
0x5d80d6dfa244c44b1f1222cdd02804803301ce2ef6b941309d25d323a4dc2b5b2133622146 days 19 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00499992
0xd2c1cf97725a741876e16c2a906c093ec8c49dd25b96c3b1a42cb2283959accc2133586146 days 19 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00242662
0x26b82e6898f6dc313ec0807faea341f2c6a3717676f607bfba458d8ef45577bf2133575146 days 19 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00499864
0x70fe700a9dab53ca17abbe3a4c75cc17cf9c919b71d47728622fd8f8442352032133536146 days 19 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00242662
0x5223517067c419358c143b209004686e2bc937fe513aec222717e0f389c9ffc92133514146 days 19 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.0124966
0xce9d95d235ecbafa27e43f151aa6116f8f8005ddf70e31ad5a781f89c67ce1662133490146 days 19 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00258295
0x268a4e90eea1547c82e31ef00cbe0cfedc9a5b2397cdb2b63ceb3d14219c275b2133216146 days 20 hrs ago0x9e9e3b33bc71aea932a956d0f9dd790d2b3dffa3  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00097476
0x0336bf81ce73b5a34df925dde6365cc1410c336552174d108d7d9f77a052391f2133192146 days 20 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00499864
0x8df11c9a74e7ee5e280a8fd5add7fe70eb2c669e0d3604eacafbd954faee32f82133069146 days 21 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00103446
0x08108462377dca841da05e49b1f412b40db24bae5ae88d3803b5afab30b12d212132984146 days 21 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.0012341
0x444f15adb75aa01f4e1148797636fec27798bd6934d6f3b3c45ddb9f620fd0892100592152 days 6 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00195495
0x72cc51a950d7ef72d625f7be2a9de98d2775c488fd921593552d2d6daed164b72100557152 days 6 hrs ago0x78783f3fbab2b56f14c1f777db8a8679ad578f6a  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00320725
0x534ace0277e0c4198b541b3c4aeca6d8a662c1a4d4b90b5f9ee3d5d8e960da1c1960230175 days 11 hrs ago0x490f824a4c4942e360227dbccc9daf3310fcd66d  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00046334
0x2e42cb6d4855ef3a835676de60ffb318214efc10d47c15afd6fb4a9c47fac1ea1743132211 days 11 hrs ago0xee219c1ebfc96f2ad1fc3f6398d4bc9abec94b44  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00049784
0xfb5c987789ac179569d90fc83befba8e3b0462df5297cc0a175b19c68424c1d61743128211 days 11 hrs ago0xee219c1ebfc96f2ad1fc3f6398d4bc9abec94b44  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00049784
0xa8eabbc79019a64e288b226506e5bfec54958227259de237a2b5e4a7e538ad7b1743128211 days 11 hrs ago0xee219c1ebfc96f2ad1fc3f6398d4bc9abec94b44  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00049784
0x10638447ba9a4f00f5e4752f8acbaabcb42ef805ee6ee4ac2e1057ec821ed57e1743128211 days 11 hrs ago0xee219c1ebfc96f2ad1fc3f6398d4bc9abec94b44  IN   0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether0.00049784
 Internal Transactions as a result of Contract Execution
  Latest 25 Internal Txns from a total of 291 View All
ParentTxHash Block Age From To Value
0xcca3760ba74e616b49fe3a3ea32fe9a42de3723fd9e48cbd6ab8a9fba5907ada290588518 days 20 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xf4595a5072a7a1d1f1e901063271fb9c7b286ac4ca9416cc58310adf88c0747e290578018 days 20 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xf4595a5072a7a1d1f1e901063271fb9c7b286ac4ca9416cc58310adf88c0747e290578018 days 20 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0x1e22d796ba4041153fbfa7821cfd39192bfa97ea747028c0a123f0dad776b32f290576418 days 20 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0x1e22d796ba4041153fbfa7821cfd39192bfa97ea747028c0a123f0dad776b32f290576418 days 20 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0x43dfe4c0d9aeef250e49ef52024a099cf01e7062d4e53782ace4b8bf9d2b5d2e290575118 days 20 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xc9621226660af4357ae36b7bf7b7a34934c9d62141c6c127317159a80773299e290570318 days 21 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xae4723e9947316ec4c10ce740c675e9980c22a90229a4ac85c438ed8ac6fbb19290569618 days 21 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xb9b1218eaf95a67600302e7ccb6759d7dc148655275038f751f43ec777ce2d21290569018 days 21 hrs ago0xf1bc217a1e50a697d37caf568d5260033d53e1e90xbf35faa9c265baf50c9cff8c389c363b057532751 wei
0xfa598ad0a2df84faa9ebb8d84358be8d7a073707d1c002a048af5fe9f7d74e7b244351395 days 10 hrs ago0xa4d68b67cfce13668b8d47cd507841beb556d6830xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0xee56f3fcdbd9c5c841433427d8014030ff9eea7376c3d89c3bc164f6d89775ec244102195 days 20 hrs ago0x249663b2e6d0a17ea86f2e4332217dbb80dd96850xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0xa42a34c592d9865f88719f7172cdd1f290d9d9ebfba5dfc0f78bfffdb0fb5cef244100495 days 20 hrs ago0xb52223cf79eb34c3a6ff66190935a0b3415a8e5f0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0x55a7452f88fb95fc84cd1e468deb216976b295041a02778ce879ebe92a2fff10244098395 days 20 hrs ago0x44399ca5a757ab31beee28c6d9f45eb1c2f4ee270xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0xee89bb8a22850a7f3982c110a281e95dd3a76a5f1785b30293f6b229b7b9f436244098095 days 20 hrs ago0xd4e0272463a262ed2a771aecb87d1c5ff4dce4640xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0xc7f358968cde37eeac39415342be7d9fbae1c938e5a6c040e7cfa528967dad9e244051995 days 22 hrs ago0x7ea06491cb8f6bf05ac9567a3ccc7eaa18f81ce00xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0x5b6a3aff7cef98765f217c92a11fe077499d9ad2878edeb2edf5383290e53921244047895 days 22 hrs ago0x119fa0906121ae8fdac542e40dd32694f6b7f3aa0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0xdb1162782bf7034814a6e6914127fd979de8fe29a449c1f87cbd637a7fd96141243923996 days 3 hrs ago0xc283eb357b41332804094c6f09a69ef2abe9988d0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0x1991524a58e703839da835605e42cb55f6968d2ea24340438e60791f11525664243920396 days 3 hrs ago0xba8621531a87477cfcf23c28542435b843442c0e0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0xa06073a9e79dcf4e7b2c4e9c49d412503374245a341ba63a7d92f11f6541550a243908396 days 4 hrs ago0xe8d4c0c195b87a24ba1010cc56d211285d1426b20xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0x89908c880c26dfbee3a3a491b7ab2f34d91eb2e012fe9f0c86fcebf7ccbef930243893696 days 4 hrs ago0x1baaa8ae2b57fd0f52fa4005e54ce917cbaff69d0xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0x87bcc2b9f442ba26916a39230292a42c3a05802d353b0285667727b6b7bcbf11243884896 days 5 hrs ago0x837f3e8caeee45522cab71867886768c2da32b300xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0x7beffd62f001e3e8bce25be8ea0f30b116c7b89a1a531b347cef3c6e6deb0d20243879496 days 5 hrs ago0x754c57fc67d41f401ad0f3400050130f446b8c550xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0x732ec10b391558ebab6aac0ebfb49b61ea5e999934d777e4347e4637b3866795243877896 days 5 hrs ago0x051e1110273a274c69ac27c1eb5e26d3d59371b80xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0x44c2e9a4824e7d89a91aa74c3121d6893c2b905eb59be01ff7675c778cbb2f87243871196 days 5 hrs ago0xf570f8fe58418fa2ca6048732a2b48fae8a567f90xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
0x748492bf3438f026421a01522a691d06d4335b126a2765624806454db58c4a23243853296 days 6 hrs ago0x5d49760c55bbda3595ffce5b35a274e737e09fe60xbf35faa9c265baf50c9cff8c389c363b057532750 Ether
Contract Source Code Verified
Contract Name: Wallet
Compiler Version: v0.1.7-2015-11-26-f86451c
Optimization Enabled: Yes
Online Solidity Editor:  Click To View



  Contract Source Code   Find Similiar Contracts
//sol Wallet
// Multi-sig, daily-limited account proxy/wallet.
// @authors:
// Gav Wood <[email protected]>
// inheritable "property" contract that enables methods to be protected by requiring the acquiescence of either a
// single, or, crucially, each of a number of, designated owners.
// usage:
// use modifiers onlyowner (just own owned) or onlymanyowners(hash), whereby the same hash must be provided by
// some number (specified in constructor) of the set of owners (specified in the constructor, modifiable) before the
// interior is executed.
contract multiowned {

	// TYPES

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

	// EVENTS

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

	// MODIFIERS

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

	// METHODS

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