Sponsored Link:   SHPING - $3.4M RAISED IN PRESALE - ON TRACK TO BE LARGEST ICO IN AUSTRALIA - JOIN NOW
  Latest 25 txns from a total Of 422 transactions View All

TxHash Age From To Value [TxFee]
0x84cb9d1e7c305027c286c2df0418da40b31e70e827b829031c15ba989a573e8a2 days 10 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.000153813
0x66237b9119441dd99dd4fa67f65fc69eabbde195808e3718f8ada8eb251a3bce4 days 19 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00082486
0x85f9d67bae6c6c17fe765b219b3c3861780ca2373bce0c12f85229f122df18404 days 19 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00132358
0x1004d710af0a2c431f68a3f5c2f1527f31ea07ab7c2fd918327d9ded024ade514 days 19 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.001067794
0x5fcab5496b3d872be73e5dc7f584a1122939cf66bd3a290cef0954d3231e69765 days 19 hrs ago0x853a445d817c51da01f2822fcbf74f01823f0c4e  IN   0x5901deb2c898d5dbe5923e05e510e95968a35067138.6992218 Ether0.00089692
0x1f878571ec9001c45f31d9b974d895b6b14d9f2faf890d6fc764a9203629b17c8 days 3 hrs ago0x853a445d817c51da01f2822fcbf74f01823f0c4e  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670.01 Ether0.00089692
0xcf23bd26088229a799ece88f81fc82aa2cd48838a8641244a4f7e8f10d8d28c98 days 14 hrs ago0x853a445d817c51da01f2822fcbf74f01823f0c4e  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670.01 Ether0.00084304
0x59b59b51b7487086a2ebc3d9713706d0f727b779fb2c62040676310882a3308822 days 17 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.002268365
0x36f568d47e607d69e64971e9f13a1c13c62bc7f3ab288cbf57e30f19a8617c1222 days 17 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.002309608
0x93484a258e75a9943cc387e75ee49a62079183a2471b2644883a16212de0be6222 days 17 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.002268365
0x67e3bde9509d17699f61c7d6724e81490e0454b6c8f12c8b93fe923ecf65418d22 days 17 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.002268365
0x30e2548313e7814d6155b9a40ea3a553ca4c1af8bf1af2a2d51a74968ed7611322 days 17 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.002264845
0x0c0f4c21fd56585163a3367546fd7a4d8eabccc2c64434b3bd71fd27b6e3a4d722 days 17 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.002271885
0xed41ba6f2f4a9f3b0d4887f1b25d3e43284dc835fbdd8c478b9ed9e54bfb419b22 days 17 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.001979664
0xcf4cbaef02b3a5f6d0c866bdac3982a516e4cb4d55a0aff5fdab9032682c9cb222 days 17 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.002364354
0x0a38a23771257506e73d4f6e5bdbc87cc52311579d7a81230d79438fd9d6906c23 days 21 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.001078035
0xa0521a8ff05e24977a6dcfb527f501d18c206428419297eb14ceca04bb1792ac25 days 23 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0020534
0xaa54e997ddf7c1cb9861709f789b079d1e6c5e1cbb1e408977c50320d882db7540 days 3 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0051271
0x0d8e8dd4ce48e49d6acc77664586c66091027b04894b2ac1ef6674b76075ea7446 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.004055465
0x2f1e4c58d330cef534c658cb2d90210ccdd661486c808dc5998c66e91596240e49 days 21 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0051335
0x3b8dcb388c1248ab18a535dd860f487043287e0f9253e00a1b1fea1026d164ab52 days 21 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0007536
0x470bf41d90f8dcd6ccec02298e6293ea0853c3f64a3b1212c4da54d80dfa48c452 days 22 hrs ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0034988
0xb66d1959511be6bcd67969b10bfb52c4b4e973524419a7f113c07059fdf6162453 days 31 mins ago0xb03e36a1ad5a798ba14005a0f054d8e7ccae50b0  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0010267
0xb322994a14c9d29ed3d228cbed03ac8e7ba900392ebf09c851d6bbbc622002f957 days 28 mins ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.0020534
0xf7f3a9858fc870dc92996032aa0573201ab9f174c00e95e6272a51a03d000ccd57 days 21 hrs ago0x4bcc22bc69615714b8470154b9cc9aa3f08797c5  IN   0x5901deb2c898d5dbe5923e05e510e95968a350670 Ether0.00075488
[ 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
0x84cb9d1e7c305027c286c2df0418da40b31e70e827b829031c15ba989a573e8a51337902 days 10 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xd6c0abf9c40a35dee83c978547154d0d268f282f12.5 Ether
0x66237b9119441dd99dd4fa67f65fc69eabbde195808e3718f8ada8eb251a3bce51200934 days 19 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x1e27866726e61325efb755a2a2e58ae7f926bd8d200 Ether
0x85f9d67bae6c6c17fe765b219b3c3861780ca2373bce0c12f85229f122df184051200684 days 19 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x1e27866726e61325efb755a2a2e58ae7f926bd8d1 Ether
0x1004d710af0a2c431f68a3f5c2f1527f31ea07ab7c2fd918327d9ded024ade5151198834 days 19 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x159b42089115e335f34e62f1232fe83241b6cf971 Ether
0x59b59b51b7487086a2ebc3d9713706d0f727b779fb2c62040676310882a33088501337822 days 17 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x43280bb1803619d2b1f274b64d7ad13de2eefb9a31 Ether
0x36f568d47e607d69e64971e9f13a1c13c62bc7f3ab288cbf57e30f19a8617c12501336822 days 17 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xffa42170dc62620968a3eb187604370575f571891.6151 Ether
0x93484a258e75a9943cc387e75ee49a62079183a2471b2644883a16212de0be62501335922 days 17 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xc1e6d95ecde3f0cb2791eebcea6b6aff045c347b3.2191 Ether
0x67e3bde9509d17699f61c7d6724e81490e0454b6c8f12c8b93fe923ecf65418d501335322 days 17 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x766da0e17bc7ee3971f111da414c2d5f62c6025f3.2191 Ether
0x30e2548313e7814d6155b9a40ea3a553ca4c1af8bf1af2a2d51a74968ed76113501335122 days 17 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x35c0df8e3ecd350046b55327e277e09be7ae6a3d3.2191 Ether
0x0c0f4c21fd56585163a3367546fd7a4d8eabccc2c64434b3bd71fd27b6e3a4d7501334322 days 17 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x430cc4b6ae727152319af452e671a1caa6b1980938.5402 Ether
0xed41ba6f2f4a9f3b0d4887f1b25d3e43284dc835fbdd8c478b9ed9e54bfb419b501332822 days 17 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x90bde768274f0bb1d27fbb10b66269c281095b6c5.7229 Ether
0xcf4cbaef02b3a5f6d0c866bdac3982a516e4cb4d55a0aff5fdab9032682c9cb2501330922 days 17 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x29a7dacdd4e503b8c3e49c1a475da6d3a1cb2a1e28.04884156 Ether
0x0a38a23771257506e73d4f6e5bdbc87cc52311579d7a81230d79438fd9d6906c500654623 days 21 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xb96fbc8c9a25a62718a16f1cd323ab20c502fde42,000 Ether
0xa0521a8ff05e24977a6dcfb527f501d18c206428419297eb14ceca04bb1792ac499425925 days 23 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xb96fbc8c9a25a62718a16f1cd323ab20c502fde42,000 Ether
0xaa54e997ddf7c1cb9861709f789b079d1e6c5e1cbb1e408977c50320d882db75491209040 days 3 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xc0f9f65932fb23fa42a5059289f81071e23d132a1 Ether
0x0d8e8dd4ce48e49d6acc77664586c66091027b04894b2ac1ef6674b76075ea74487504346 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xb96fbc8c9a25a62718a16f1cd323ab20c502fde42,000 Ether
0x2f1e4c58d330cef534c658cb2d90210ccdd661486c808dc5998c66e91596240e485904349 days 21 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xb96fbc8c9a25a62718a16f1cd323ab20c502fde42,000 Ether
0x3b8dcb388c1248ab18a535dd860f487043287e0f9253e00a1b1fea1026d164ab484261852 days 21 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xcbc9881aaace54cff25efe261d36a987be2214302,000 Ether
0xb66d1959511be6bcd67969b10bfb52c4b4e973524419a7f113c07059fdf61624484183053 days 31 mins ago0x5901deb2c898d5dbe5923e05e510e95968a350670xcbc9881aaace54cff25efe261d36a987be2214302,000 Ether
0xb322994a14c9d29ed3d228cbed03ac8e7ba900392ebf09c851d6bbbc622002f9481846657 days 28 mins ago0x5901deb2c898d5dbe5923e05e510e95968a350670xedcacc2313af26305d7995566192d414f534bace700 Ether
0xf7f3a9858fc870dc92996032aa0573201ab9f174c00e95e6272a51a03d000ccd481332857 days 21 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x43280bb1803619d2b1f274b64d7ad13de2eefb9a200 Ether
0x7882e438025b09c630e6fe20b76b4cc657b925346a98a65bbfc5d577ba3735e0481322357 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x43280bb1803619d2b1f274b64d7ad13de2eefb9a200 Ether
0x4d45739fea566f0f9cb64f2045b0d7400e9faf0a46ff0b37218419b7cad411dd481322357 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x82d05c1be80f1725cd9b16b7183690855aed91cb3.143413 Ether
0x92bff142cfa16ccc714c8a2368e16b702239c246ce082506f18675d60b43a255481322357 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670xa5f87cdd47493beadf4f916b2f1f54ff6260102f12.09655 Ether
0x795dc3e4f16f996be7beed8cc18c58acbcf3a023d1c749701ab700143502fac6481321857 days 22 hrs ago0x5901deb2c898d5dbe5923e05e510e95968a350670x29a7dacdd4e503b8c3e49c1a475da6d3a1cb2a1e24.119686 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.