Sponsored Link:  Download the Monaco app for Android and iOS on Aug 31 - www.mona.co
  Latest 25 txns from a total Of 334 transactions View All

TxHash Age From To Value [TxFee]
0xba7c4efbe89164656cf3e00d1c2261f3412c9dc2a6d0136bd089617f1d1515d420 hrs 31 mins ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0010267
0x147c3d7d31b03041c78ffdd1d45ac82ba35194ef18e951415b474760e26ab1243 days 18 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0010267
0xd03d2ded45affa354ed29327e6e3e35138752d77fb6bf764e52bb90a0aa9e5895 days 12 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0020534
0x6705aeb4fa7607e205d29445870bc35706fcbbfe396b277ee6e5e0a26072afaf11 days 8 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00198471
0xe6347095a4f1f159407d2a9f08783e976450375098bb744047f2cd42bac5c73415 days 23 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000329944
0x1e744f5629b417a067a1cc1da599e227cebd4d00c4a558c2d04ba26e5e545f1e15 days 23 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000041179
0x91095df804bd52e34e3820c99f5fa5d2ea21e20f2830f5d4ed89cd68a279bd4f15 days 23 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000164716
0xac6139ea674694663045eea8ad79a8a2a8e5fa2712b21cdfa77c4509cd605ec515 days 23 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000041243
0x7e99a50bad9b643f0a8d8d69057592f2adda79c84040bdf28ea9648fa92232ae15 days 23 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00020534
0x3b9f442f1b70087144a2fdee2d11dd6a5d4586dcd3c03ea074d44de1f7dabce216 days 22 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00020534
0x262a5390d27e19d1052f654897c3abebb95fc14c10fab5735a3761302ade66ea20 days 5 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000329432
0x29af0a992ccc04cc15f73de72e299099919d1529195993124372a90e0c3904f020 days 6 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000041243
0xabd6990399385089bcc042ab9b050a72ce83073339848a766b4cf5dae2d7217020 days 6 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000453673
0x75e4f633dbb7283f509965e179b16ef3aea18d036fedb073ccdc41736353cd8420 days 6 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00041179
0x606def6ce089b77df8c342072449cee342cef4fe359473b9957395bf51683cc920 days 6 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000341328
0xa85ab7a2f7a3e50bba90599ff46bfdaf4847002b0025e922a46477008c88995f20 days 6 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000529944
0x6373cf003d2d86b5a9f2488deb8b4c1eea544db9bee3133f7e1ba0ef2f1eb9c020 days 6 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000329944
0x975af521ff7c9acf2c9a0f13f87bbb83dd67d73f79547f0beea6da33a521ca4a20 days 6 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000329432
0x3c79cee96f293dda5d53dab38b22ada69f316907422547b6b6107c446bd1de8320 days 6 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000329432
0x7f52f4fd26c5826a568567acba7f6de6c7ea7234b86dd03cffba9ca3912c6a2920 days 6 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000409656
0x1fac7fab7398b3d64f337517b82aca0a37d551cc99fe1c1d4472c11bccb1202d20 days 6 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000329944
0xfdf5ed562b96842ce9e3b45193be9016cb2668496a18a199d29a28c36d328e9e20 days 6 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000529944
0xb99b5cac34c7df43fb952aa4d98199881aea662743d2372041f14cf75b3ad0d720 days 6 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000329944
0xd6d87ffa9da3000962db887b4aa7e46d73788695d888a87dfee67626f2ce54cf20 days 6 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000330456
0xca531b2d3fcdfddb7575507325e580329e13e38594def19ffa444912a1533cb020 days 6 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000329432
[ 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
0xba7c4efbe89164656cf3e00d1c2261f3412c9dc2a6d0136bd089617f1d1515d4458772520 hrs 31 mins ago0x5901deb2c898d5dbe5923e05e510e95968a350670x797c9cd429dd3a51e89518b5902adab9c0ffe1d4332.38 Ether
0x147c3d7d31b03041c78ffdd1d45ac82ba35194ef18e951415b474760e26ab12445694183 days 18 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xe5ff71dc1dea8cd2552eec59e9a5e8813da9bb012,000 Ether
0xd03d2ded45affa354ed29327e6e3e35138752d77fb6bf764e52bb90a0aa9e58945585905 days 12 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xe5ff71dc1dea8cd2552eec59e9a5e8813da9bb012,000 Ether
0x6705aeb4fa7607e205d29445870bc35706fcbbfe396b277ee6e5e0a26072afaf452235511 days 8 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x51c430c82d8f37f18ba21ce0e158fd681a5c796b1,200 Ether
0xe6347095a4f1f159407d2a9f08783e976450375098bb744047f2cd42bac5c734449368515 days 23 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xe5ff71dc1dea8cd2552eec59e9a5e8813da9bb011,998 Ether
0x1e744f5629b417a067a1cc1da599e227cebd4d00c4a558c2d04ba26e5e545f1e449364215 days 23 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xd272c7216630b839d45af5598ae3026741b4566b0.425104 Ether
0x91095df804bd52e34e3820c99f5fa5d2ea21e20f2830f5d4ed89cd68a279bd4f449361915 days 23 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x1c18906dc8a0cb13dceb87bf35cbcf8309a931000.194839 Ether
0xac6139ea674694663045eea8ad79a8a2a8e5fa2712b21cdfa77c4509cd605ec5449361015 days 23 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x2628277359d9bdc3075a53654a3e1d9a178086dc0.223222 Ether
0x7e99a50bad9b643f0a8d8d69057592f2adda79c84040bdf28ea9648fa92232ae449359715 days 23 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x6d34fa45d1c54d5b6afcac7280c2a1468987c3b00.212552 Ether
0x3b9f442f1b70087144a2fdee2d11dd6a5d4586dcd3c03ea074d44de1f7dabce2448745016 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xe5ff71dc1dea8cd2552eec59e9a5e8813da9bb012,000 Ether
0x262a5390d27e19d1052f654897c3abebb95fc14c10fab5735a3761302ade66ea446712720 days 5 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x43280bb1803619d2b1f274b64d7ad13de2eefb9a90 Ether
0x29af0a992ccc04cc15f73de72e299099919d1529195993124372a90e0c3904f0446709420 days 6 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x43280bb1803619d2b1f274b64d7ad13de2eefb9a100 Ether
0xabd6990399385089bcc042ab9b050a72ce83073339848a766b4cf5dae2d72170446707420 days 6 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x82d05c1be80f1725cd9b16b7183690855aed91cb9.715678 Ether
0x75e4f633dbb7283f509965e179b16ef3aea18d036fedb073ccdc41736353cd84446706720 days 6 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xc1e6d95ecde3f0cb2791eebcea6b6aff045c347b3.51 Ether
0x606def6ce089b77df8c342072449cee342cef4fe359473b9957395bf51683cc9446706220 days 6 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xef638b4305b8a1620f4e0e562e127f1181ae16d294.77 Ether
0xa85ab7a2f7a3e50bba90599ff46bfdaf4847002b0025e922a46477008c88995f446703420 days 6 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x36f230de68ce36571dc6150a8b444cfd62e42c0823.26 Ether
0x6373cf003d2d86b5a9f2488deb8b4c1eea544db9bee3133f7e1ba0ef2f1eb9c0446702720 days 6 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x05f172d18b142d78dc4efa0294136a34b95a7ccf19.5 Ether
0x975af521ff7c9acf2c9a0f13f87bbb83dd67d73f79547f0beea6da33a521ca4a446702120 days 6 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x766da0e17bc7ee3971f111da414c2d5f62c6025f7.2 Ether
0x3c79cee96f293dda5d53dab38b22ada69f316907422547b6b6107c446bd1de83446701620 days 6 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x00fd5ed84fccd67ed89ec1a59180490a943afe7433.81 Ether
0x7f52f4fd26c5826a568567acba7f6de6c7ea7234b86dd03cffba9ca3912c6a29446700920 days 6 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x35c0df8e3ecd350046b55327e277e09be7ae6a3d5.85 Ether
0x1fac7fab7398b3d64f337517b82aca0a37d551cc99fe1c1d4472c11bccb1202d446700120 days 6 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x430cc4b6ae727152319af452e671a1caa6b1980959 Ether
0xfdf5ed562b96842ce9e3b45193be9016cb2668496a18a199d29a28c36d328e9e446699820 days 6 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xaa76e85128ea333bc4452e9f9572ac58c52354c212.997563 Ether
0xb99b5cac34c7df43fb952aa4d98199881aea662743d2372041f14cf75b3ad0d7446699220 days 6 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x90bde768274f0bb1d27fbb10b66269c281095b6c10.908205 Ether
0xd6d87ffa9da3000962db887b4aa7e46d73788695d888a87dfee67626f2ce54cf446698620 days 6 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xd272c7216630b839d45af5598ae3026741b4566b32.493907 Ether
0xca531b2d3fcdfddb7575507325e580329e13e38594def19ffa444912a1533cb0446696920 days 6 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x1c18906dc8a0cb13dceb87bf35cbcf8309a9310014.89303 Ether
[ Download CSV Export  ] 
Contract Name: Wallet
Compiler Version: v0.3.2-2016-04-18-81ae2a7
Optimization Enabled: No
Runs (Optimiser):  200



  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, block.number)) 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, block.number)) 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, block.number)) 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, block.number)) 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;
        if (pending.ownersDone & ownerIndexBit == 0) {
            return false;
        } else {
            return true;
        }
    }
    
    // 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 returns (bool) {
        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, block.number)) 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, block.number)) 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 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).transact(to, value, data);
// Wallet(w).from(anotherOwner).confirm(h);
contract Wallet is multisig, multiowned, daylimit {

    uint public version = 2;

    // 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, block.number)) 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":true,"inputs":[],"name":"m_lastDay","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"resetSpentToday","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"m_spentToday","outputs":[{"name":"","type":"uint256"}],"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
6060604052600261010860005055604051611b51380380611b51833981016040528080518201919060200180519060200190919080519060200190919050505b805b83835b600060018351016001600050819055503373ffffffffffffffffffffffffffffffffffffffff16600260005060016101008110156100025790900160005b5081905550600161010260005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005081905550600090505b825181101561016e5782818151811015610002579060200190602002015173ffffffffffffffffffffffffffffffffffffffff166002600050826002016101008110156100025790900160005b508190555080600201610102600050600085848151811015610002579060200190602002015173ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055505b80600101905080506100c2565b816000600050819055505b505050806101056000508190555061018f6101ad565b610107600050819055505b505b505050611992806101bf6000396000f35b600062015180420490506101bc565b9056606060405236156100f8576000357c010000000000000000000000000000000000000000000000000000000090048063173825d9146101605780632f54bf6e146101785780634123cb6b146101a457806352375093146101c757806354fd4d50146101ea5780635c52c2f51461020d578063659010e71461021c5780637065cb481461023f578063746c917114610257578063797af6271461027a578063b20d30a9146102a6578063b61d27f6146102be578063b75c7dc614610307578063ba51a6df1461031f578063c2cf732614610337578063cbf0b0c01461036c578063f00d4b5d14610384578063f1736d86146103a5576100f8565b61015e5b600034111561015b577fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3334604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b5b565b005b61017660048080359060200190919050506107c4565b005b61018e60048080359060200190919050506109a5565b6040518082815260200191505060405180910390f35b6101b16004805050610a91565b6040518082815260200191505060405180910390f35b6101d46004805050610b38565b6040518082815260200191505060405180910390f35b6101f76004805050610b42565b6040518082815260200191505060405180910390f35b61021a6004805050610adf565b005b6102296004805050610b2e565b6040518082815260200191505060405180910390f35b610255600480803590602001909190505061066e565b005b6102646004805050610a88565b6040518082815260200191505060405180910390f35b6102906004808035906020019091905050610f0e565b6040518082815260200191505060405180910390f35b6102bc6004808035906020019091905050610a9a565b005b6102f160048080359060200190919080359060200190919080359060200190820180359060200191909192905050610b9e565b6040518082815260200191505060405180910390f35b61031d60048080359060200190919050506103c8565b005b610335600480803590602001909190505061090f565b005b61035660048080359060200190919080359060200190919050506109e7565b6040518082815260200191505060405180910390f35b6103826004808035906020019091905050610b4c565b005b6103a360048080359060200190919080359060200190919050506104ca565b005b6103b26004805050610b24565b6040518082815260200191505060405180910390f35b60006000600061010260005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549250600083141561040f576104c4565b8260020a91506101036000506000858152602001908152602001600020600050905060008282600101600050541611156104c3578060000160008181505480929190600101919050555081816001016000828282505403925050819055507fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b3385604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b5b50505050565b600060003643604051808484808284378201915050828152602001935050505060405180910390206104fb816112db565b1561066757610509836109a5565b156105145750610669565b61010260005060008573ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005054915060008214156105565750610669565b61055e611777565b8273ffffffffffffffffffffffffffffffffffffffff166002600050836101008110156100025790900160005b5081905550600061010260005060008673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055508161010260005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055507fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c8484604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15b505b505050565b600036436040518084848082843782019150508281526020019350505050604051809103902061069d816112db565b156107bf576106ab826109a5565b156106b657506107c1565b6106be611777565b60fa6001600050541015156106d7576106d561153d565b505b60fa6001600050541015156106ec57506107c1565b60016000818150548092919060010191905055508173ffffffffffffffffffffffffffffffffffffffff1660026000506001600050546101008110156100025790900160005b508190555060016000505461010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055507f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c382604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b505b50565b600060003643604051808484808284378201915050828152602001935050505060405180910390206107f5816112db565b156109095761010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549150600082141561083c575061090b565b6001600160005054036000600050541115610857575061090b565b60006002600050836101008110156100025790900160005b5081905550600061010260005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055506108b2611777565b6108ba61153d565b507f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da83604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b505b5050565b600036436040518084848082843782019150508281526020019350505050604051809103902061093e816112db565b156109a05760016000505482111561095657506109a2565b81600060005081905550610968611777565b7facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da826040518082815260200191505060405180910390a15b505b50565b6000600061010260005060008473ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050541190506109e2565b919050565b60006000600060006101036000506000878152602001908152602001600020600050925061010260005060008673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000505491506000821415610a505760009350610a7f565b8160020a90506000818460010160005054161415610a755760009350610a7f56610a7e565b60019350610a7f565b5b50505092915050565b60006000505481565b60016000505481565b6000364360405180848480828437820191505082815260200193505050506040518091039020610ac9816112db565b15610ada5781610105600050819055505b505b50565b6000364360405180848480828437820191505082815260200193505050506040518091039020610b0e816112db565b15610b20576000610106600050819055505b505b565b6101056000505481565b6101066000505481565b6101076000505481565b6101086000505481565b6000364360405180848480828437820191505082815260200193505050506040518091039020610b7b816112db565b15610b99578173ffffffffffffffffffffffffffffffffffffffff16ff5b505b50565b6000610ba9336109a5565b15610f0557610bb7846116d7565b15610ca0577f92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd0043385878686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a18473ffffffffffffffffffffffffffffffffffffffff168484846040518083838082843782019150509250505060006040518083038185876185025a03f1925050505060006001029050610f06565b600036436040518084848082843782019150508281526020019350505050604051809103902090508050610cd381610f0e565b158015610d3357506000610109600050600083815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b15610f045784610109600050600083815260200190815260200160002060005060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555083610109600050600083815260200190815260200160002060005060010160005081905550828261010960005060008481526020019081526020016000206000506002016000509190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610e0857803560ff1916838001178555610e39565b82800160010185558215610e39579182015b82811115610e38578235826000505591602001919060010190610e1a565b5b509050610e649190610e46565b80821115610e605760008181506000905550600101610e46565b5090565b50507f1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32813386888787604051808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a15b5b5b949350505050565b600081610f1a816112db565b156112d4576000610109600050600085815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156112d357610109600050600084815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610109600050600085815260200190815260200160002060005060010160005054610109600050600086815260200190815260200160002060005060020160005060405180828054600181600116156101000203166002900480156110765780601f1061104b57610100808354040283529160200191611076565b820191906000526020600020905b81548152906001019060200180831161105957829003601f168201915b505091505060006040518083038185876185025a03f192505050507fe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a3384610109600050600087815260200190815260200160002060005060010160005054610109600050600088815260200190815260200160002060005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101096000506000898152602001908152602001600020600050600201600050604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156112005780601f106111d557610100808354040283529160200191611200565b820191906000526020600020905b8154815290600101906020018083116111e357829003601f168201915b5050965050505050505060405180910390a1610109600050600084815260200190815260200160002060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000506000905560028201600050805460018160011615610100020316600290046000825580601f1061128957506112c6565b601f0160209004906000526020600020908101906112c591906112a7565b808211156112c157600081815060009055506001016112a7565b5090565b5b50505060019150506112d6565b5b505b919050565b600060006000600061010260005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549250600083141561132457611535565b610103600050600086815260200190815260200160002060005091506000826000016000505414156113fd57600060005054826000016000508190555060008260010160005081905550610104600050805480919060010190908154818355818115116113c3578183600052602060002091820191016113c291906113a4565b808211156113be57600081815060009055506001016113a4565b5090565b5b5050508260020160005081905550846101046000508360020160005054815481101561000257906000526020600020900160005b50819055505b8260020a90506000818360010160005054161415611534577fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda3386604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001826000016000505411151561150757610104600050610103600050600087815260200190815260200160002060005060020160005054815481101561000257906000526020600020900160005b50600090556101036000506000868152602001908152602001600020600060008201600050600090556001820160005060009055600282016000506000905550506001935061153556611533565b816000016000818150548092919060019003919050555080826001016000828282505417925050819055505b5b5b505050919050565b60006000600190505b6001600050548110156116d2575b60016000505481108015611580575060006002600050826101008110156100025790900160005b505414155b15611592578080600101915050611554565b5b60016001600050541180156115c45750600060026000506001600050546101008110156100025790900160005b5054145b156115e357600160008181505480929190600190039190505550611593565b600160005054811080156116145750600060026000506001600050546101008110156100025790900160005b505414155b8015611637575060006002600050826101008110156100025790900160005b5054145b156116cd5760026000506001600050546101008110156100025790900160005b50546002600050826101008110156100025790900160005b50819055508061010260005060006002600050846101008110156100025790900160005b5054815260200190815260200160002060005081905550600060026000506001600050546101008110156100025790900160005b50819055505b611546565b5b5090565b60006116e2336109a5565b1561177157610107600050546116f6611980565b111561171b57600061010660005081905550611710611980565b610107600050819055505b610106600050548261010660005054011015801561174757506101056000505482610106600050540111155b15611768578161010660008282825054019250508190555060019050611772565b60009050611772565b5b919050565b60006000610104600050805490509150600090505b8181101561187857610109600050600061010460005083815481101561000257906000526020600020900160005b5054815260200190815260200160002060006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000506000905560028201600050805460018160011615610100020316600290046000825580601f1061182a5750611867565b601f0160209004906000526020600020908101906118669190611848565b808211156118625760008181506000905550600101611848565b5090565b5b5050505b806001019050805061178c565b611880611885565b5b5050565b60006000610104600050805490509150600090505b8181101561193857600060010261010460005082815481101561000257906000526020600020900160005b505414151561192a57610103600050600061010460005083815481101561000257906000526020600020900160005b50548152602001908152602001600020600060008201600050600090556001820160005060009055600282016000506000905550505b5b806001019050805061189a565b61010460005080546000825590600052602060002090810190611979919061195b565b80821115611975576000818150600090555060010161195b565b5090565b5b505b5050565b6000620151804204905061198f565b9056
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.