ETH Price: $2,287.42 (-4.67%)

Contract

0x91EFffB9C6cd3A66474688D0a48AA6ECfe515AA5
 

Overview

ETH Balance

0.031983286575913339 ETH

Eth Value

$73.16 (@ $2,287.42/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x476f6f64198682082024-05-14 12:21:11115 days ago1715689271IN
0x91EFffB9...Cfe515AA5
0.001 ETH0.0002600710.98674651
Execute142469542022-02-21 3:10:31929 days ago1645413031IN
0x91EFffB9...Cfe515AA5
0 ETH0.0013051659.21817811
Transfer130434932021-08-17 15:21:551116 days ago1629213715IN
0x91EFffB9...Cfe515AA5
0.01098328 ETH0.002499119
Transfer130434872021-08-17 15:21:041116 days ago1629213664IN
0x91EFffB9...Cfe515AA5
0.01 ETH0.002499119
Transfer130296002021-08-15 11:51:371119 days ago1629028297IN
0x91EFffB9...Cfe515AA5
0 ETH0.0004298420.469003
Play System59149002018-07-06 8:57:082255 days ago1530867428IN
0x91EFffB9...Cfe515AA5
0.01 ETH0.001710675
Kill42748762017-09-15 0:30:292549 days ago1505435429IN
0x91EFffB9...Cfe515AA5
0 ETH0.000090724
Init Multiowned42748662017-09-15 0:27:302549 days ago1505435250IN
0x91EFffB9...Cfe515AA5
0 ETH0.000093024
Init Wallet42748592017-09-15 0:25:152549 days ago1505435115IN
0x91EFffB9...Cfe515AA5
0 ETH0.000095844
0x9d74cf1c42747792017-09-14 23:51:372549 days ago1505433097IN
0x91EFffB9...Cfe515AA5
0 ETH0.000094044
Kill42747352017-09-14 23:36:302549 days ago1505432190IN
0x91EFffB9...Cfe515AA5
0 ETH0.000090724
0x9d74cf1c42747262017-09-14 23:33:102549 days ago1505431990IN
0x91EFffB9...Cfe515AA5
0 ETH0.00009434
Kill40708192017-07-25 8:29:422601 days ago1500971382IN
0x91EFffB9...Cfe515AA5
0 ETH0.000032960.6
Init Wallet40708132017-07-25 8:27:272601 days ago1500971247IN
0x91EFffB9...Cfe515AA5
0 ETH0.000033570.6
Execute40460622017-07-19 23:47:382606 days ago1500508058IN
0x91EFffB9...Cfe515AA5
0 ETH0.001110930
Init Wallet40460622017-07-19 23:47:382606 days ago1500508058IN
0x91EFffB9...Cfe515AA5
0 ETH0.0016921230
Execute40459382017-07-19 23:09:532606 days ago1500505793IN
0x91EFffB9...Cfe515AA5
0 ETH0.001110930
Init Wallet40459382017-07-19 23:09:532606 days ago1500505793IN
0x91EFffB9...Cfe515AA5
0 ETH0.0016921230
Execute40455892017-07-19 21:25:172606 days ago1500499517IN
0x91EFffB9...Cfe515AA5
0 ETH0.007406200
Init Wallet40455892017-07-19 21:25:172606 days ago1500499517IN
0x91EFffB9...Cfe515AA5
0 ETH0.0142808200
Execute40452982017-07-19 19:55:492606 days ago1500494149IN
0x91EFffB9...Cfe515AA5
0 ETH0.0009290821
Execute40452832017-07-19 19:50:152606 days ago1500493815IN
0x91EFffB9...Cfe515AA5
0 ETH0.0029842421
Execute40452812017-07-19 19:49:262606 days ago1500493766IN
0x91EFffB9...Cfe515AA5
0 ETH0.002121
Init Wallet40452722017-07-19 19:47:332606 days ago1500493653IN
0x91EFffB9...Cfe515AA5
0 ETH0.0015008221
Init Wallet40452222017-07-19 19:33:442606 days ago1500492824IN
0x91EFffB9...Cfe515AA5
0 ETH0.0014996921
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
40708192017-07-25 8:29:422601 days ago1500971382
0x91EFffB9...Cfe515AA5
0 ETH
40452982017-07-19 19:55:492606 days ago1500494149
0x91EFffB9...Cfe515AA5
0.99338813 ETH
40411792017-07-18 22:33:232607 days ago1500417203
0x91EFffB9...Cfe515AA5
26,793 ETH
37594052017-05-24 10:57:392663 days ago1495623459
0x91EFffB9...Cfe515AA5
11,578 ETH
37284702017-05-18 18:39:292668 days ago1495132769
0x91EFffB9...Cfe515AA5
4,200 ETH
35571742017-04-18 12:09:542699 days ago1492517394
0x91EFffB9...Cfe515AA5
4,000 ETH
34636652017-04-02 13:03:352714 days ago1491138215
0x91EFffB9...Cfe515AA5
1,000 ETH
34103132017-03-24 13:36:382723 days ago1490362598
0x91EFffB9...Cfe515AA5
8,000 ETH
34039132017-03-23 11:37:472725 days ago1490269067
0x91EFffB9...Cfe515AA5
6,000 ETH
33930012017-03-21 15:57:212726 days ago1490111841
0x91EFffB9...Cfe515AA5
100 ETH
33929942017-03-21 15:55:122726 days ago1490111712
0x91EFffB9...Cfe515AA5
35 ETH
33929942017-03-21 15:55:122726 days ago1490111712
0x91EFffB9...Cfe515AA5
30 ETH
33929892017-03-21 15:52:552726 days ago1490111575
0x91EFffB9...Cfe515AA5
1 ETH
33929892017-03-21 15:52:552726 days ago1490111575
0x91EFffB9...Cfe515AA5
17.950094 ETH
33929712017-03-21 15:49:122726 days ago1490111352
0x91EFffB9...Cfe515AA5
9.9 ETH
33929682017-03-21 15:48:282726 days ago1490111308
0x91EFffB9...Cfe515AA5
10 ETH
33929392017-03-21 15:42:302726 days ago1490110950
0x91EFffB9...Cfe515AA5
30 ETH
33929392017-03-21 15:42:302726 days ago1490110950
0x91EFffB9...Cfe515AA5
20.9991628 ETH
33929342017-03-21 15:41:212726 days ago1490110881
0x91EFffB9...Cfe515AA5
4 ETH
33929162017-03-21 15:37:562726 days ago1490110676
0x91EFffB9...Cfe515AA5
25 ETH
33928902017-03-21 15:30:262726 days ago1490110226
0x91EFffB9...Cfe515AA5
10 ETH
33928782017-03-21 15:28:012726 days ago1490110081
0x91EFffB9...Cfe515AA5
10.2 ETH
33928712017-03-21 15:27:032726 days ago1490110023
0x91EFffB9...Cfe515AA5
1 ETH
33928712017-03-21 15:27:032726 days ago1490110023
0x91EFffB9...Cfe515AA5
1 ETH
33928562017-03-21 15:23:492726 days ago1490109829
0x91EFffB9...Cfe515AA5
47 ETH
View All Internal Transactions
Loading...
Loading
Contract Self Destruct called at Txn Hash 0x05d62f0bf3ff8ca6345baaae2c8c1848fd82488a3f85fe8770c81f1b297fd136


Contract Source Code Verified (Exact Match)

Contract Name:
Wallet

Compiler Version
v0.4.6+commit.2dabbdf0

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-02-22
*/

// This multisignature wallet is based on the wallet contract by Gav Wood.
// Only one single change was made: The contract creator is not automatically one of the wallet owners.

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

contract multisig {
    // EVENTS

    // this contract 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);

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

contract multisigAbi is multisig {
    function isOwner(address _addr) returns (bool);

    function hasConfirmed(bytes32 _operation, address _owner) constant returns (bool);

    function confirm(bytes32 _h) returns(bool);

    // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today.
    function setDailyLimit(uint _newLimit);

    function addOwner(address _owner);

    function removeOwner(address _owner);

    function changeRequirement(uint _newRequired);

    // Revokes a prior confirmation of the given operation
    function revoke(bytes32 _operation);

    function changeOwner(address _from, address _to);

    function execute(address _to, uint _value, bytes _data) returns(bool);
}

contract WalletLibrary is multisig {
    // TYPES

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

    // Transaction structure to remember details of transaction lest it need be saved for a later call.
    struct Transaction {
        address to;
        uint value;
        bytes data;
    }

    /******************************
     ***** MULTI OWNED SECTION ****
     ******************************/

    // 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.
    // change from original: msg.sender is not automatically owner
    function initMultiowned(address[] _owners, uint _required) {
        m_numOwners = _owners.length ;
        m_required = _required;

        for (uint i = 0; i < _owners.length; ++i)
        {
            m_owners[1 + i] = uint(_owners[i]);
            m_ownerIndex[uint(_owners[i])] = 1 + i;
        }
    }

    // Revokes a prior confirmation of the given operation
    function revoke(bytes32 _operation) {
        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)) {
        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)) {
        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)) {
        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)) {
        if (_newRequired > m_numOwners) return;
        m_required = _newRequired;
        clearPending();
        RequirementChanged(_newRequired);
    }

    function isOwner(address _addr) returns (bool) {
        return m_ownerIndex[uint(_addr)] > 0;
    }


    function hasConfirmed(bytes32 _operation, address _owner) constant returns (bool) {
        var pending = m_pending[_operation];
        uint ownerIndex = m_ownerIndex[uint(_owner)];

        // make sure they're an owner
        if (ownerIndex == 0) return false;

        // determine the bit to set for this owner.
        uint ownerIndexBit = 2**ownerIndex;
        return !(pending.ownersDone & ownerIndexBit == 0);
    }

    // INTERNAL METHODS

    function confirmAndCheck(bytes32 _operation) internal returns (bool) {
        // determine what index the present sender is:
        uint ownerIndex = m_ownerIndex[uint(msg.sender)];
        // make sure they're an owner
        if (ownerIndex == 0) return;

        var pending = m_pending[_operation];
        // if we're not yet working on this operation, switch over and reset the confirmation status.
        if (pending.yetNeeded == 0) {
            // reset count of confirmations needed.
            pending.yetNeeded = m_required;
            // reset which owners have confirmed (none) - set our bitmap to 0.
            pending.ownersDone = 0;
            pending.index = m_pendingIndex.length++;
            m_pendingIndex[pending.index] = _operation;
        }
        // determine the bit to set for this owner.
        uint ownerIndexBit = 2**ownerIndex;
        // make sure we (the message sender) haven't confirmed this operation previously.
        if (pending.ownersDone & ownerIndexBit == 0) {
            Confirmation(msg.sender, _operation);
            // ok - check if count is enough to go ahead.
            if (pending.yetNeeded <= 1) {
                // enough confirmations: reset and run interior.
                delete m_pendingIndex[m_pending[_operation].index];
                delete m_pending[_operation];
                return true;
            }
            else
            {
                // not enough: record that this owner in particular confirmed.
                pending.yetNeeded--;
                pending.ownersDone |= ownerIndexBit;
            }
        }
    }

    function reorganizeOwners() private {
        uint free = 1;
        while (free < m_numOwners)
        {
            while (free < m_numOwners && m_owners[free] != 0) free++;
            while (m_numOwners > 1 && m_owners[m_numOwners] == 0) m_numOwners--;
            if (free < m_numOwners && m_owners[m_numOwners] != 0 && m_owners[free] == 0)
            {
                m_owners[free] = m_owners[m_numOwners];
                m_ownerIndex[m_owners[free]] = free;
                m_owners[m_numOwners] = 0;
            }
        }
    }

    function clearPending() internal {
        uint length = m_pendingIndex.length;
        for (uint i = 0; i < length; ++i)
            if (m_pendingIndex[i] != 0)
                delete m_pending[m_pendingIndex[i]];
        delete m_pendingIndex;
    }


    /******************************
     ****** DAY LIMIT SECTION *****
     ******************************/

    // 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 initDaylimit(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)) {
        m_dailyLimit = _newLimit;
    }
    // resets the amount already spent today. needs many of the owners to confirm.
    function resetSpentToday() onlymanyowners(sha3(msg.data)) {
        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; }


    /******************************
     ********* WALLET SECTION *****
     ******************************/

    // METHODS

    // constructor - just pass on the owner array to the multiowned and
    // the limit to daylimit
    function initWallet(address[] _owners, uint _required, uint _daylimit) {
        initMultiowned(_owners, _required);
        initDaylimit(_daylimit) ;
    }

    // kills the contract sending everything to `_to`.
    function kill(address _to) onlymanyowners(sha3(msg.data)) {
        suicide(_to);
    }

    // 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) onlyowner returns(bool _callValue) {
        // 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.
            _callValue =_to.call.value(_value)(_data);
        } else {
            // determine our operation hash.
            bytes32 _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 clearWalletPending() internal {
        uint length = m_pendingIndex.length;
        for (uint i = 0; i < length; ++i)
            delete m_txs[m_pendingIndex[i]];
        clearPending();
    }

    // FIELDS
    address constant _walletLibrary = 0x4f2875f631f4fc66b8e051defba0c9f9106d7d5a;

    // the number of owners that must confirm the same operation before it is run.
    uint m_required;
    // pointer used to find a free slot in m_owners
    uint m_numOwners;

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

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

    // pending transactions we have at present.
    mapping (bytes32 => Transaction) m_txs;
}


contract Wallet is multisig {

    // WALLET CONSTRUCTOR
    //   calls the `initWallet` method of the Library in this context
    function Wallet(address[] _owners, uint _required, uint _daylimit) {
        // Signature of the Wallet Library's init function
        bytes4 sig = bytes4(sha3("initWallet(address[],uint256,uint256)"));
        address target = _walletLibrary;

        // Compute the size of the call data : arrays has 2
        // 32bytes for offset and length, plus 32bytes per element ;
        // plus 2 32bytes for each uint
        uint argarraysize = (2 + _owners.length);
        uint argsize = (2 + argarraysize) * 32;

        assembly {
            // Add the signature first to memory
            mstore(0x0, sig)
            // Add the call data, which is at the end of the
            // code
            codecopy(0x4,  sub(codesize, argsize), argsize)
            // Delegate call to the library
            delegatecall(sub(gas, 10000), target, 0x0, add(argsize, 0x4), 0x0, 0x0)
        }
    }

    // METHODS

    // gets called when no other function matches
    function() payable {
        // just being sent some cash?
        if (msg.value > 0)
            Deposit(msg.sender, msg.value);
        else if (msg.data.length > 0)
            _walletLibrary.delegatecall(msg.data);
    }

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

    // As return statement unavailable in fallback, explicit the method here

    function hasConfirmed(bytes32 _operation, address _owner) constant returns (bool) {
        return _walletLibrary.delegatecall(msg.data);
    }

    function isOwner(address _addr) returns (bool) {
        return _walletLibrary.delegatecall(msg.data);
    }

    // FIELDS
    address constant _walletLibrary = 0x4f2875f631f4fc66b8e051defba0c9f9106d7d5a;

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

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

    // list of owners
    uint[256] m_owners;
}

Contract Security Audit

Contract ABI

[{"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":true,"inputs":[],"name":"m_spentToday","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_required","outputs":[{"name":"","type":"uint256"}],"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":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"}]

6060604052346100005760405161041b38038061041b83398101604090815281516020830151918301519201915b604080517f696e697457616c6c657428616464726573735b5d2c75696e743235362c75696e81527f74323536290000000000000000000000000000000000000000000000000000006020808301919091529151908190036025019020845160008290529091734f2875f631f4fc66b8e051defba0c9f9106d7d5a91600281019160049182010290819038829003903960006000600483016000866127105a03f45b505050505050505b610337806100e46000396000f36060604052361561006c5760e060020a60003504632f54bf6e81146101245780634123cb6b146101485780635237509314610167578063659010e714610186578063746c9171146101a5578063c2cf7326146101c4578063c41a360a146101eb578063f1736d8614610217575b6101225b60003411156100c15760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a161011e565b600036111561011e57734f2875f631f4fc66b8e051defba0c9f9106d7d5a600160a060020a0316600036600060405160200152604051808383808284378201915050925050506020604051808303818560325a03f4156100005750505b5b5b565b005b3461000057610134600435610236565b604080519115158252519081900360200190f35b3461000057610155610297565b60408051918252519081900360200190f35b346100005761015561029d565b60408051918252519081900360200190f35b34610000576101556102a3565b60408051918252519081900360200190f35b34610000576101556102a9565b60408051918252519081900360200190f35b34610000576101346004356024356102af565b604080519115158252519081900360200190f35b34610000576101fb600435610311565b60408051600160a060020a039092168252519081900360200190f35b3461000057610155610331565b60408051918252519081900360200190f35b6000734f2875f631f4fc66b8e051defba0c9f9106d7d5a600160a060020a0316600036600060405160200152604051808383808284378201915050925050506020604051808303818560325a03f4156100005750506040515190505b919050565b60015481565b60045481565b60035481565b60005481565b6000734f2875f631f4fc66b8e051defba0c9f9106d7d5a600160a060020a0316600036600060405160200152604051808383808284378201915050925050506020604051808303818560325a03f4156100005750506040515190505b92915050565b6000600582600101610100811015610000570160005b505490505b919050565b6002548156000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000086ed2df3159171dd3fc8361ae0e7c59f46cf0ea70000000000000000000000006d0adde6bc61af8f01f6f7019a4fc9a0d2654b73000000000000000000000000003e3b48e8b8d72aa5fcddb5e2d71d5eb2de2f53000000000000000000000000003230bbe64eccd66f62913679c8966cf9f41166

Deployed Bytecode

0x6060604052361561006c5760e060020a60003504632f54bf6e81146101245780634123cb6b146101485780635237509314610167578063659010e714610186578063746c9171146101a5578063c2cf7326146101c4578063c41a360a146101eb578063f1736d8614610217575b6101225b60003411156100c15760408051600160a060020a033316815234602082015281517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c929181900390910190a161011e565b600036111561011e57734f2875f631f4fc66b8e051defba0c9f9106d7d5a600160a060020a0316600036600060405160200152604051808383808284378201915050925050506020604051808303818560325a03f4156100005750505b5b5b565b005b3461000057610134600435610236565b604080519115158252519081900360200190f35b3461000057610155610297565b60408051918252519081900360200190f35b346100005761015561029d565b60408051918252519081900360200190f35b34610000576101556102a3565b60408051918252519081900360200190f35b34610000576101556102a9565b60408051918252519081900360200190f35b34610000576101346004356024356102af565b604080519115158252519081900360200190f35b34610000576101fb600435610311565b60408051600160a060020a039092168252519081900360200190f35b3461000057610155610331565b60408051918252519081900360200190f35b6000734f2875f631f4fc66b8e051defba0c9f9106d7d5a600160a060020a0316600036600060405160200152604051808383808284378201915050925050506020604051808303818560325a03f4156100005750506040515190505b919050565b60015481565b60045481565b60035481565b60005481565b6000734f2875f631f4fc66b8e051defba0c9f9106d7d5a600160a060020a0316600036600060405160200152604051808383808284378201915050925050506020604051808303818560325a03f4156100005750506040515190505b92915050565b6000600582600101610100811015610000570160005b505490505b919050565b6002548156

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000086ed2df3159171dd3fc8361ae0e7c59f46cf0ea70000000000000000000000006d0adde6bc61af8f01f6f7019a4fc9a0d2654b73000000000000000000000000003e3b48e8b8d72aa5fcddb5e2d71d5eb2de2f53000000000000000000000000003230bbe64eccd66f62913679c8966cf9f41166

-----Decoded View---------------
Arg [0] : _owners (address[]): 0x86ED2DF3159171Dd3Fc8361AE0e7c59F46cf0ea7,0x6D0aDde6bC61AF8F01f6F7019A4fC9A0d2654B73,0x003e3b48e8b8d72aa5FCDdB5E2d71D5eb2DE2f53,0x003230BBE64eccD66f62913679C8966Cf9F41166
Arg [1] : _required (uint256): 3
Arg [2] : _daylimit (uint256): 0

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [4] : 00000000000000000000000086ed2df3159171dd3fc8361ae0e7c59f46cf0ea7
Arg [5] : 0000000000000000000000006d0adde6bc61af8f01f6f7019a4fc9a0d2654b73
Arg [6] : 000000000000000000000000003e3b48e8b8d72aa5fcddb5e2d71d5eb2de2f53
Arg [7] : 000000000000000000000000003230bbe64eccd66f62913679c8966cf9f41166


Libraries Used


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.