Sponsored Link:  Dmarket – first cross-game trading platform based on blockchain technology. Check the Whitepaper.
Contract Overview
ETH Balance: 0.003769243274494491 Ether
ETH USD Value: $1.17 (@ $311.34/ETH)
No Of Transactions: 899 txns
  Latest 25 txns from a total Of 899 transactions View All

TxHash Age From To Value [TxFee]
0xcd6aa36a9c8b6a210c69e1a9e2f27b51b5056512c2ef44f235fd19e119c479333 hrs 29 mins ago0x000b9aff896edf3e9a7652a09470157541a8c3d7  IN   0x89145f218a049963af6575ce8dfbe503fec730370 Ether0.00102004
0x14fb9efcec2cf6e72ad54bea5853aead79b2fc5e8d82b2757f438ebb6cc688c14 hrs 5 mins agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.11600499 Ether0.00044972
0xa7f032d5e53a660e06cae6046da96e3b1e48634f08085b2d2ef9cc707782551a11 hrs 22 mins agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.12486473 Ether0.00044972
0x31a411cbc456ebf9b66f3490b47e37ac4ef9975065c906efd5c0d37b9832d37621 hrs 12 mins agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.13147861 Ether0.00044972
0x2345a92307659f567185678a016b21516d7b602592851c21ea83d0064692aa1c1 day 6 mins ago0x000b9aff896edf3e9a7652a09470157541a8c3d7  IN   0x89145f218a049963af6575ce8dfbe503fec730370 Ether0.001071042
0x39c1d5f0c711228c570e9e7db4707ab353926f518bb3113a5c4f762cca1587da1 day 3 hrs agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.35553516 Ether0.00044972
0xabd79529e2e36127620d89e647558db4a202f7e8dbb1d8b77d8bb5a9bf7513ef1 day 18 hrs ago0x000b9aff896edf3e9a7652a09470157541a8c3d7  IN   0x89145f218a049963af6575ce8dfbe503fec730370 Ether0.001071042
0xd4bd44721171a35db7a9d3830a50434efdc4e50a758c6d1d02c3ee943f287b232 days 3 mins agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.43086279 Ether0.00044972
0x847feb60d0c32c93dcbc6ad8ff286f6a576223c27b89de6d54008b69fc58000e3 days 49 mins ago0x000b9aff896edf3e9a7652a09470157541a8c3d7  IN   0x89145f218a049963af6575ce8dfbe503fec730370 Ether0.001128532711
0xb6411c4b559fa5ea5b7fa0474bd55ce95ea22ad33a7c187c360cc4f923a3cdfc3 days 5 hrs agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.10640545 Ether0.00044972
0x24ba1d576f21bc6b3377f9047c75dbb5802f7ce458b56d16f4d36139a4fd030c3 days 10 hrs agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.103376 Ether0.00044972
0x847627c856c1d61c3baa3c4559049f66401d591b364efa2f1f225025596730c73 days 17 hrs agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.10575375 Ether0.00044972
0x8874e8d88fac0ccfe1ab9835d935361e4ad8757df703de3c0b0cd86351c28ceb3 days 22 hrs ago0x000b9aff896edf3e9a7652a09470157541a8c3d7  IN   0x89145f218a049963af6575ce8dfbe503fec730370 Ether0.00153006
0xecb288c779b5282103e5b9ae9ea62d3071249a749b2343e35fb13fc8baa713f43 days 22 hrs agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.10113733 Ether0.00044972
0xc136336017cbf687560ee9c01a826644ff94bbeed34bd5f32bb73fcd587e19da4 days 5 hrs agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.10757872 Ether0.00044972
0x8b277fc79067bf6e2e95ec2e1a53d67bb7f7b29a794d7f99b827061ee57ca4404 days 14 hrs agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.10515459 Ether0.00044972
0x0aa796a339aabef6143505b1e130ad5217aa876409a74f95ff7ef56b6576aadd4 days 18 hrs ago0x000b9aff896edf3e9a7652a09470157541a8c3d7  IN   0x89145f218a049963af6575ce8dfbe503fec730370 Ether0.001122044068
0x6158c647bbef56ae05564a5d566630b6a2ccf02611e4b8160f241dab95f55e355 days 27 mins agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.11258601 Ether0.00044972
0x86b52ebf46c337243a34be07bfc56b10d1b1d140e3c0a67f81fdb4dbaedba8155 days 7 hrs agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.10358928 Ether0.00044972
0xf4600574063bb84a6749805ae3a78036ee6cf65192edaf6674e0630a67d7df845 days 14 hrs agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.10995966 Ether0.00044972
0x40c3e9324e33ebca3b2f83c9f77c4d2f55870956d2cbf0cc40d54a9a982de5265 days 19 hrs agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.12383179 Ether0.00044972
0x2d1b29531e54b19327eac92e4330a98733630ca51e5c1fb0a9461285f75381255 days 19 hrs ago0x000b9aff896edf3e9a7652a09470157541a8c3d7  IN   0x89145f218a049963af6575ce8dfbe503fec730370 Ether0.00153006
0x475a82050b5beada4a4b9ad838fb0060d434d70bbf75bb8578430588df6346806 days 1 hr agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.15462265 Ether0.00044972
0x5e4e8dbae7b0e75efcf8201a924715078a461da8166dc4f317bac795645625696 days 13 hrs agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.11547173 Ether0.00044972
0x386790d29a35bd119a2a1f9080c23084ef1f6af113466610f3f229c2134920436 days 22 hrs agoDwarfPool1  IN   0x89145f218a049963af6575ce8dfbe503fec730370.11289981 Ether0.00044972
[ 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
0xcd6aa36a9c8b6a210c69e1a9e2f27b51b5056512c2ef44f235fd19e119c4793341895223 hrs 29 mins ago0x89145f218a049963af6575ce8dfbe503fec730370x000b9aff896edf3e9a7652a09470157541a8c3d70.4 Ether
0x2345a92307659f567185678a016b21516d7b602592851c21ea83d0064692aa1c41859021 day 6 mins ago0x89145f218a049963af6575ce8dfbe503fec730370x025dfd00555007a4664071ba077b2f691d0ddaed0.35 Ether
0xabd79529e2e36127620d89e647558db4a202f7e8dbb1d8b77d8bb5a9bf7513ef41826661 day 18 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x000b9aff896edf3e9a7652a09470157541a8c3d70.45 Ether
0x847feb60d0c32c93dcbc6ad8ff286f6a576223c27b89de6d54008b69fc58000e41774543 days 49 mins ago0x89145f218a049963af6575ce8dfbe503fec730370x000b9aff896edf3e9a7652a09470157541a8c3d70.3 Ether
0x8874e8d88fac0ccfe1ab9835d935361e4ad8757df703de3c0b0cd86351c28ceb41737293 days 22 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x000b9aff896edf3e9a7652a09470157541a8c3d70.3 Ether
0x0aa796a339aabef6143505b1e130ad5217aa876409a74f95ff7ef56b6576aadd41702154 days 18 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x025dfd00555007a4664071ba077b2f691d0ddaed0.45 Ether
0x2d1b29531e54b19327eac92e4330a98733630ca51e5c1fb0a9461285f753812541658955 days 19 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x025dfd00555007a4664071ba077b2f691d0ddaed0.6 Ether
0x5873bfa5bdf264f38f35cb663d5e67bbf46e0fecd09ee93253ad32adadab1d7c41576617 days 19 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x000b9aff896edf3e9a7652a09470157541a8c3d70.3 Ether
0xea8e83d8c2c5bcc54f79ec3986b4e6ade993918e0de7b59d324782f4f325095c41532848 days 20 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x000b9aff896edf3e9a7652a09470157541a8c3d70.15 Ether
0x74763cab7dd5142be7d8ee1f0b229cb69718097de7ddf54b158c070b32f58ad641520469 days 3 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x025dfd00555007a4664071ba077b2f691d0ddaed0.22 Ether
0xbdfc3b4fba1bf89ca5110629a03c87c53bd1534483ce6468e7ba2dd05239a11241487369 days 23 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x025dfd00555007a4664071ba077b2f691d0ddaed0.4 Ether
0x9a63491f799a043701251976470acee56bae6b64a5780166d287b73ec2fbd4c2414446810 days 23 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x025dfd00555007a4664071ba077b2f691d0ddaed0.6 Ether
0x88d515f0acb3e272d7103c966625b427f0edf46f8360575137f96a6cef57b833413247613 days 22 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x000b9aff896edf3e9a7652a09470157541a8c3d70.65 Ether
0x5c12343079708f0e2c6246424a1d6f8b86d4c625c4dd2befff613353d1ed8b12412444915 days 21 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x2ddbae31dd3017bbdd67ce1053569fa9181610d10.75 Ether
0xdfe292d29e4a6e130a1bd5161b81a48efb0bb6c5d80f0064f95712bb8a5d5aca411417618 days 10 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x025dfd00555007a4664071ba077b2f691d0ddaed0.3 Ether
0xe68501fb1de3b1ed0c9b54f5d95a79aedd5504c5cb64875927a39fc4319a8ac2411123919 days 3 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x000b9aff896edf3e9a7652a09470157541a8c3d70.9 Ether
0x93ded518ef3e64e47ceca60419a7314c6b72d64693b04f55b765ad3bb0933304409934522 days 1 hr ago0x89145f218a049963af6575ce8dfbe503fec730370x000b9aff896edf3e9a7652a09470157541a8c3d70.55 Ether
0x8d33f2a987056f77fab5b1769e4ee7062ba75f7ea6ffbabb5c5c362e88e5ef0f409486923 days 39 mins ago0x89145f218a049963af6575ce8dfbe503fec730370x000b9aff896edf3e9a7652a09470157541a8c3d71 Ether
0x5b8f517033921d915ca6e72e01ae6364647fdb63d40546b0b09c4fc849e28766408517625 days 2 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x025dfd00555007a4664071ba077b2f691d0ddaed0.9 Ether
0x6cdc01302bbd7f24de40f60359a2131f34c038e8c06ee6fe4f5ad02ccb29cf8d408502525 days 3 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x000b9aff896edf3e9a7652a09470157541a8c3d71.2 Ether
0xab7e1b202164e1ed0c8e04dace5db42694066a58e114342b3977ede03cbd567d407443927 days 10 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x000b9aff896edf3e9a7652a09470157541a8c3d71.1 Ether
0x47df41734b9a3cd499e88af32af219e99b5743db1efd5b2fc8a2b5d007e733e8405837330 days 20 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x025dfd00555007a4664071ba077b2f691d0ddaed1 Ether
0x43c091e3adf6558e55b9885b1510e1af0c7151e7f7e814419dfeab806d49ac72405395031 days 20 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x000b9aff896edf3e9a7652a09470157541a8c3d71 Ether
0xa8752c75093b23b63651e5fa5b0e1393621fb9500f23df90cc090e9f561af0be402987937 days 2 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x000b9aff896edf3e9a7652a09470157541a8c3d70.6 Ether
0xe80c9b18f3e26e81f4aec285f9df7a3057680d9118af9628decb789fcc1698a2402444538 days 6 hrs ago0x89145f218a049963af6575ce8dfbe503fec730370x2ddbae31dd3017bbdd67ce1053569fa9181610d11 Ether
[ Download CSV Export  ] 
Warning: The compiled contract might be susceptible to DelegateCallReturnValue (low-severity), ECRecoverMalformedInput (medium-severity), SkipEmptyStringLiteral (low-severity), ConstantOptimizerSubtraction (low-severity), IdentityPrecompileReturnIgnored (low-severity) Solidity compiler bugs.

Contract Source Code Verified
Note: Displaying matching verified source code at contract 0x34912f042fb126fb9ea2a72ed1116a8d33d12487
Contract Name: Wallet
Compiler Version: v0.4.6+commit.2dabbdf0
Optimization Enabled: Yes
Runs (Optimiser):  200



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

contract multiowned {

    // TYPES

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

    // EVENTS

    // this contract only has six 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);
    }

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

    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;
    }
    // resets the amount already spent today. needs many of the owners to confirm.
    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.
        // overflow protection                    // dailyLimit check
        if (m_spentToday + _value >= m_spentToday && m_spentToday + _value <= m_dailyLimit) {
            m_spentToday += _value;
            return true;
        }
        return false;
    }
    // determines today's index.
    function today() private constant returns (uint) { return now / 1 days; }

    // FIELDS

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

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

    // EVENTS

    // logged events:
    // Funds has arrived into the wallet (record how much).
    event Deposit(address _from, uint value);
    // Single transaction going out of the wallet (record who signed for it, how much, and to whom it's going).
    event SingleTransact(address owner, uint value, address to, bytes data);
    // Multi-sig transaction going out of the wallet (record who signed for it last, the operation hash, how much, and to whom it's going).
    event MultiTransact(address owner, bytes32 operation, uint value, address to, bytes data);
    // Confirmation still needed for a transaction.
    event ConfirmationNeeded(bytes32 operation, address initiator, uint value, address to, bytes data);

    // FUNCTIONS

    // TODO: document
    function changeOwner(address _from, address _to) external;
    function execute(address _to, uint _value, bytes _data) external returns (bytes32);
    function confirm(bytes32 _h) returns (bool);
}

// usage:
// bytes32 h = Wallet(w).from(oneOwner).execute(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() payable {
        // just being sent some cash?
        if (msg.value > 0)
            Deposit(msg.sender, msg.value);
    }

    // Outside-visible transact entry point. Executes transaction immediately if below daily spend limit.
    // If not, goes into multisig process. We provide a hash on return to allow the sender to provide
    // shortcuts for the other confirmations (allowing them to avoid replicating the _to, _value
    // and _data arguments). They still get the option of using them if they want, anyways.
    function execute(address _to, uint _value, bytes _data) 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":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_numOwners","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_lastDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"resetSpentToday","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_spentToday","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"addOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_required","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_h","type":"bytes32"}],"name":"confirm","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newLimit","type":"uint256"}],"name":"setDailyLimit","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"execute","outputs":[{"name":"_r","type":"bytes32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_operation","type":"bytes32"}],"name":"revoke","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newRequired","type":"uint256"}],"name":"changeRequirement","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_operation","type":"bytes32"},{"name":"_owner","type":"address"}],"name":"hasConfirmed","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"ownerIndex","type":"uint256"}],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"kill","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_dailyLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[{"name":"_owners","type":"address[]"},{"name":"_required","type":"uint256"},{"name":"_daylimit","type":"uint256"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Confirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Revoke","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"}],"name":"OwnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newRequirement","type":"uint256"}],"name":"RequirementChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"SingleTransact","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"MultiTransact","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"operation","type":"bytes32"},{"indexed":false,"name":"initiator","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"data","type":"bytes"}],"name":"ConfirmationNeeded","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405234610000576040516113bb3803806113bb83398101604090815281516020830151918301519201915b805b83835b815160019081019055600033600160a060020a03166003825b505550600160a060020a033316600090815261010260205260408120600190555b82518110156100ee57828181518110156100005790602001906020020151600160a060020a0316600282600201610100811015610000570160005b5081905550806002016101026000858481518110156100005790602001906020020151600160a060020a03168152602001908152602001600020819055505b60010161006c565b60008290555b50505061010581905561011264010000000061127861012182021704565b610107555b505b50505061012b565b6201518042045b90565b611282806101396000396000f3606060405236156100da5760e060020a6000350463173825d981146101305780632f54bf6e146101425780634123cb6b1461016657806352375093146101855780635c52c2f5146101a4578063659010e7146101b35780637065cb48146101d2578063746c9171146101e4578063797af62714610203578063b20d30a914610227578063b61d27f614610239578063b75c7dc61461026b578063ba51a6df1461027d578063c2cf73261461028f578063c41a360a146102b6578063cbf0b0c0146102e2578063f00d4b5d146102f4578063f1736d8614610309575b61012e5b600034111561012b5760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a15b5b565b005b346100005761012e600435610328565b005b3461000057610152600435610415565b604080519115158252519081900360200190f35b3461000057610173610436565b60408051918252519081900360200190f35b346100005761017361043c565b60408051918252519081900360200190f35b346100005761012e610443565b005b346100005761017361047b565b60408051918252519081900360200190f35b346100005761012e600435610482565b005b3461000057610173610571565b60408051918252519081900360200190f35b3461000057610152600435610577565b604080519115158252519081900360200190f35b346100005761012e6004356107e3565b005b34610000576101736004803590602480359160443591820191013561081c565b60408051918252519081900360200190f35b346100005761012e600435610ab3565b005b346100005761012e600435610b5e565b005b3461000057610152600435602435610be0565b604080519115158252519081900360200190f35b34610000576102c6600435610c35565b60408051600160a060020a039092168252519081900360200190f35b346100005761012e600435610c55565b005b346100005761012e600435602435610c93565b005b3461000057610173610d8c565b60408051918252519081900360200190f35b600060003660405180838380828437820191505092505050604051809103902061035181610d93565b1561040e57600160a060020a03831660009081526101026020526040902054915081151561037e5761040e565b60016001540360005411156103925761040e565b6000600283610100811015610000570160005b5055600160a060020a038316600090815261010260205260408120556103c9610f32565b6103d1611002565b60408051600160a060020a038516815290517f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da9181900360200190a15b5b5b505050565b600160a060020a03811660009081526101026020526040812054115b919050565b60015481565b6101075481565b60003660405180838380828437820191505092505050604051809103902061046a81610d93565b15610476576000610106555b5b5b50565b6101065481565b6000366040518083838082843782019150509250505060405180910390206104a981610d93565b1561056b576104b782610415565b156104c15761056b565b6104c9610f32565b60015460fa90106104dc576104dc611002565b5b60015460fa90106104ed5761056b565b60018054810190819055600160a060020a03831690600290610100811015610000570160005b5055600154600160a060020a03831660008181526101026020908152604091829020939093558051918252517f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3929181900390910190a15b5b5b5050565b60005481565b60008161058381610d93565b156107da5760008381526101086020526040902054600160a060020a0316156107da5760008381526101086020526040908190208054600180830154935160029384018054600160a060020a0390941695949093919283928592918116156101000260001901160480156106385780601f1061060d57610100808354040283529160200191610638565b820191906000526020600020905b81548152906001019060200180831161061b57829003601f168201915b505091505060006040518083038185876185025a03f15050506000848152610108602090815260409182902060018082015482548551600160a060020a033381811683529682018c905296810183905295166060860181905260a06080870181815260029586018054958616156101000260001901909516959095049087018190527fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a975094958a95929491939290919060c08301908490801561073d5780601f106107125761010080835404028352916020019161073d565b820191906000526020600020905b81548152906001019060200180831161072057829003601f168201915b5050965050505050505060405180910390a16000838152610108602052604081208054600160a060020a0319168155600180820183905560028083018054858255939493909281161561010002600019011604601f81901061079f57506107d1565b601f0160209004906000526020600020908101906107d191905b808211156107cd57600081556001016107b9565b5090565b5b505050600191505b5b5b5b50919050565b60003660405180838380828437820191505092505050604051809103902061080a81610d93565b1561056b576101058290555b5b5b5050565b600061082733610415565b15610aa85761083584611131565b156108f3577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd00433858786866040518086600160a060020a0316815260200185815260200184600160a060020a0316815260200180602001828103825284848281815260200192508082843760405192018290039850909650505050505050a184600160a060020a03168484846040518083838082843782019150509250505060006040518083038185876185025a03f15060009350610aa892505050565b6000364360405180848480828437820191505082815260200193505050506040518091039020905061092481610577565b158015610947575060008181526101086020526040902054600160a060020a0316155b15610aa857600081815261010860209081526040822080546c01000000000000000000000000808a0204600160a060020a0319909116178155600180820188905560029182018054818652948490209094601f928116156101000260001901169290920481019290920481019185919087908390106109d15782800160ff198235161785556109fe565b828001600101855582156109fe579182015b828111156109fe5782358255916020019190600101906109e3565b5b50610a1f9291505b808211156107cd57600081556001016107b9565b5090565b50507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32813386888787604051808760001916815260200186600160a060020a0316815260200185815260200184600160a060020a031681526020018060200182810382528484828181526020019250808284376040519201829003995090975050505050505050a15b5b5b5b949350505050565b600160a060020a033316600090815261010260205260408120549080821515610adb57610b57565b50506000828152610103602052604081206001810154600284900a929083161115610b575780546001908101825581018054839003905560408051600160a060020a03331681526020810186905281517fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b929181900390910190a15b5b50505050565b600036604051808383808284378201915050925050506040518091039020610b8581610d93565b1561056b57600154821115610b995761056b565b6000829055610ba6610f32565b6040805183815290517facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da9181900360200190a15b5b5b5050565b600082815261010360209081526040808320600160a060020a038516845261010290925282205482811515610c185760009350610c2c565b8160020a9050808360010154166000141593505b50505092915050565b6000600282600101610100811015610000570160005b505490505b919050565b600036604051808383808284378201915050925050506040518091039020610c7c81610d93565b1561056b5781600160a060020a0316ff5b5b5b5050565b6000600036604051808383808284378201915050925050506040518091039020610cbc81610d93565b15610b5757610cca83610415565b15610cd457610b57565b600160a060020a038416600090815261010260205260409020549150811515610cfc57610b57565b610d04610f32565b82600160a060020a0316600283610100811015610000570160005b5055600160a060020a0380851660008181526101026020908152604080832083905593871680835291849020869055835192835282015281517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c929181900390910190a15b5b5b50505050565b6101055481565b600160a060020a033316600090815261010260205260408120548180821515610dbb57610f28565b60008581526101036020526040902080549092501515610e4f576000805483556001808401919091556101048054918201808255828015829011610e2457600083815260209020610e249181019083015b808211156107cd57600081556001016107b9565b5090565b5b50505060028301819055610104805487929081101561000057906000526020600020900160005b50555b8260020a90508082600101541660001415610f285760408051600160a060020a03331681526020810187905281517fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda929181900390910190a1815460019011610f155760008581526101036020526040902060020154610104805490919081101561000057906000526020600020900160005b506000908190558581526101036020526040812081815560018082018390556002909101919091559350610f2856610f28565b8154600019018255600182018054821790555b5b5b505050919050565b6101045460005b81811015610ff557610108600061010483815481101561000057906000526020600020900160005b50548152602081019190915260400160009081208054600160a060020a0319168155600180820183905560028083018054858255939493909281161561010002600019011604601f819010610fb65750610fe8565b601f016020900490600052602060002090810190610fe891905b808211156107cd57600081556001016107b9565b5090565b5b5050505b600101610f39565b61056b6111a4565b5b5050565b60015b600154811015610476575b600154811080156110325750600281610100811015610000570160005b505415155b1561103f57600101611010565b5b600160015411801561106457506002600154610100811015610000570160005b5054155b156110785760018054600019019055611040565b6001548110801561109c57506002600154610100811015610000570160005b505415155b80156110b85750600281610100811015610000570160005b5054155b15611128576002600154610100811015610000570160005b5054600282610100811015610000570160005b5055806101026000600283610100811015610000570160005b505481526020019081526020016000208190555060006002600154610100811015610000570160005b50555b611005565b5b50565b600061113c33610415565b15610431576101075461114d611278565b111561116657600061010655611161611278565b610107555b610106548281011080159061118357506101055482610106540111155b1561119957506101068054820190556001610431565b5060005b5b5b919050565b6101045460005b818110156112215761010481815481101561000057906000526020600020900160005b50541561121857610103600061010483815481101561000057906000526020600020900160005b505481526020810191909152604001600090812081815560018101829055600201555b5b6001016111ab565b610104805460008083559190915261040e907f4c0be60200faa20559308cb7b5a1bb3255c16cb1cab91f525b5ae7a03d02fabe908101905b808211156107cd57600081556001016107b9565b5090565b5b505b5050565b6201518042045b9056000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f87e2d334428d69767dc05bb54f54988aedbee77
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.