ETH Price: $2,716.58 (+0.57%)

Contract

0x14c45CD15D33Eaa8AA149E3cA0E6924Db143b08C
 
Transaction Hash
Method
Block
From
To
Execute84677002019-09-02 0:50:351993 days ago1567385435IN
0x14c45CD1...Db143b08C
0 ETH0.000373751.5
Execute84676812019-09-02 0:46:021993 days ago1567385162IN
0x14c45CD1...Db143b08C
0 ETH0.002109951.5
Execute84046992019-08-23 5:35:182003 days ago1566538518IN
0x14c45CD1...Db143b08C
0.12 ETH0.000161211.3
Execute83913292019-08-21 3:43:542005 days ago1566359034IN
0x14c45CD1...Db143b08C
0 ETH0.0049870620
Execute83913232019-08-21 3:42:292005 days ago1566358949IN
0x14c45CD1...Db143b08C
0 ETH0.020514510
Execute83913172019-08-21 3:40:472005 days ago1566358847IN
0x14c45CD1...Db143b08C
0 ETH0.0288309312
Execute83913022019-08-21 3:37:432005 days ago1566358663IN
0x14c45CD1...Db143b08C
0 ETH0.047414520
Execute83912982019-08-21 3:36:452005 days ago1566358605IN
0x14c45CD1...Db143b08C
0 ETH0.047298420
Execute83912952019-08-21 3:35:272005 days ago1566358527IN
0x14c45CD1...Db143b08C
0 ETH0.0445588820
Execute83872832019-08-20 12:44:052005 days ago1566305045IN
0x14c45CD1...Db143b08C
54 ETH0.0013648511
Execute83872752019-08-20 12:42:142005 days ago1566304934IN
0x14c45CD1...Db143b08C
0 ETH0.0027421711
Execute83872732019-08-20 12:41:432005 days ago1566304903IN
0x14c45CD1...Db143b08C
0 ETH0.0027421711
Execute83872682019-08-20 12:40:542005 days ago1566304854IN
0x14c45CD1...Db143b08C
0 ETH0.011636455
Execute83869232019-08-20 11:20:262005 days ago1566300026IN
0x14c45CD1...Db143b08C
0 ETH0.002221151.155
Execute83867942019-08-20 10:50:302005 days ago1566298230IN
0x14c45CD1...Db143b08C
50 ETH0.000371873
Execute83850912019-08-20 4:26:272006 days ago1566275187IN
0x14c45CD1...Db143b08C
0 ETH0.000343651.4
Execute83850132019-08-20 4:08:182006 days ago1566274098IN
0x14c45CD1...Db143b08C
60.5 ETH0.00017371.4
Execute83839262019-08-20 0:07:032006 days ago1566259623IN
0x14c45CD1...Db143b08C
0 ETH0.001816414
Execute83839202019-08-20 0:05:552006 days ago1566259555IN
0x14c45CD1...Db143b08C
0 ETH0.000981874
Execute83839092019-08-20 0:03:342006 days ago1566259414IN
0x14c45CD1...Db143b08C
0 ETH0.001760244
Execute83839012019-08-20 0:00:532006 days ago1566259253IN
0x14c45CD1...Db143b08C
0 ETH0.000981874
Execute83811682019-08-19 13:48:082006 days ago1566222488IN
0x14c45CD1...Db143b08C
0 ETH0.002943122
Execute83811682019-08-19 13:48:082006 days ago1566222488IN
0x14c45CD1...Db143b08C
0 ETH0.002807062
Execute83811572019-08-19 13:45:222006 days ago1566222322IN
0x14c45CD1...Db143b08C
0 ETH0.012717166
Execute83811312019-08-19 13:40:212006 days ago1566222021IN
0x14c45CD1...Db143b08C
0 ETH0.016542297
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
84677002019-09-02 0:50:351993 days ago1567385435
0x14c45CD1...Db143b08C
6.5 ETH
84677002019-09-02 0:50:351993 days ago1567385435
0x14c45CD1...Db143b08C
6.5 ETH
84676812019-09-02 0:46:021993 days ago1567385162
0x14c45CD1...Db143b08C
4.48 ETH
84676812019-09-02 0:46:021993 days ago1567385162
0x14c45CD1...Db143b08C
4.48 ETH
84046992019-08-23 5:35:182003 days ago1566538518
0x14c45CD1...Db143b08C
0.12 ETH
83913292019-08-21 3:43:542005 days ago1566359034
0x14c45CD1...Db143b08C
310.00000008 ETH
83913292019-08-21 3:43:542005 days ago1566359034
0x14c45CD1...Db143b08C
310.00000008 ETH
83913232019-08-21 3:42:292005 days ago1566358949
0x14c45CD1...Db143b08C
32 ETH
83913232019-08-21 3:42:292005 days ago1566358949
0x14c45CD1...Db143b08C
32 ETH
83913172019-08-21 3:40:472005 days ago1566358847
0x14c45CD1...Db143b08C
200 ETH
83913172019-08-21 3:40:472005 days ago1566358847
0x14c45CD1...Db143b08C
200 ETH
83913022019-08-21 3:37:432005 days ago1566358663
0x14c45CD1...Db143b08C
190.00375886 ETH
83913022019-08-21 3:37:432005 days ago1566358663
0x14c45CD1...Db143b08C
190.00375886 ETH
83912982019-08-21 3:36:452005 days ago1566358605
0x14c45CD1...Db143b08C
145.981 ETH
83912982019-08-21 3:36:452005 days ago1566358605
0x14c45CD1...Db143b08C
145.981 ETH
83912952019-08-21 3:35:272005 days ago1566358527
0x14c45CD1...Db143b08C
111.13873707 ETH
83912952019-08-21 3:35:272005 days ago1566358527
0x14c45CD1...Db143b08C
111.13873707 ETH
83872832019-08-20 12:44:052005 days ago1566305045
0x14c45CD1...Db143b08C
54 ETH
83872752019-08-20 12:42:142005 days ago1566304934
0x14c45CD1...Db143b08C
54.00000002 ETH
83872752019-08-20 12:42:142005 days ago1566304934
0x14c45CD1...Db143b08C
54.00000002 ETH
83872732019-08-20 12:41:432005 days ago1566304903
0x14c45CD1...Db143b08C
54.00000001 ETH
83872732019-08-20 12:41:432005 days ago1566304903
0x14c45CD1...Db143b08C
54.00000001 ETH
83872682019-08-20 12:40:542005 days ago1566304854
0x14c45CD1...Db143b08C
112.56 ETH
83872682019-08-20 12:40:542005 days ago1566304854
0x14c45CD1...Db143b08C
112.56 ETH
83869232019-08-20 11:20:262005 days ago1566300026
0x14c45CD1...Db143b08C
50.90561224 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x5D4a9452...b2E9d13dB
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
UserWallet

Compiler Version
v0.5.2+commit.1df8f40c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2019-04-07
*/

pragma solidity ^0.5.2;

/**
 * @title RegistryInterface Interface 
 */
interface RegistryInterface {
    function logic(address logicAddr) external view returns (bool);
    function record(address currentOwner, address nextOwner) external;
}


/**
 * @title Address Registry Record
 */
contract AddressRecord {

    /**
     * @dev address registry of system, logic and wallet addresses
     */
    address public registry;

    /**
     * @dev Throws if the logic is not authorised
     */
    modifier logicAuth(address logicAddr) {
        require(logicAddr != address(0), "logic-proxy-address-required");
        require(RegistryInterface(registry).logic(logicAddr), "logic-not-authorised");
        _;
    }

}


/**
 * @title User Auth
 */
contract UserAuth is AddressRecord {

    event LogSetOwner(address indexed owner);
    address public owner;

    /**
     * @dev Throws if not called by owner or contract itself
     */
    modifier auth {
        require(isAuth(msg.sender), "permission-denied");
        _;
    }

    /**
     * @dev sets new owner
     */
    function setOwner(address nextOwner) public auth {
        RegistryInterface(registry).record(owner, nextOwner);
        owner = nextOwner;
        emit LogSetOwner(nextOwner);
    }

    /**
     * @dev checks if called by owner or contract itself
     * @param src is the address initiating the call
     */
    function isAuth(address src) public view returns (bool) {
        if (src == owner) {
            return true;
        } else if (src == address(this)) {
            return true;
        }
        return false;
    }
}


/**
 * @dev logging the execute events
 */
contract UserNote {
    event LogNote(
        bytes4 indexed sig,
        address indexed guy,
        bytes32 indexed foo,
        bytes32 bar,
        uint wad,
        bytes fax
    );

    modifier note {
        bytes32 foo;
        bytes32 bar;
        assembly {
            foo := calldataload(4)
            bar := calldataload(36)
        }
        emit LogNote(
            msg.sig, 
            msg.sender, 
            foo, 
            bar, 
            msg.value,
            msg.data
        );
        _;
    }
}


/**
 * @title User Owned Contract Wallet
 */
contract UserWallet is UserAuth, UserNote {

    event LogExecute(address target, uint srcNum, uint sessionNum);

    /**
     * @dev sets the "address registry", owner's last activity, owner's active period and initial owner
     */
    constructor() public {
        registry = msg.sender;
        owner = msg.sender;
    }

    function() external payable {}

    /**
     * @dev Execute authorised calls via delegate call
     * @param _target logic proxy address
     * @param _data delegate call data
     * @param _src to find the source
     * @param _session to find the session
     */
    function execute(
        address _target,
        bytes memory _data,
        uint _src,
        uint _session
    ) 
        public
        payable
        note
        auth
        logicAuth(_target)
        returns (bytes memory response)
    {
        emit LogExecute(
            _target,
            _src,
            _session
        );
        
        // call contract in current context
        assembly {
            let succeeded := delegatecall(sub(gas, 5000), _target, add(_data, 0x20), mload(_data), 0, 0)
            let size := returndatasize

            response := mload(0x40)
            mstore(0x40, add(response, and(add(add(size, 0x20), 0x1f), not(0x1f))))
            mstore(response, size)
            returndatacopy(add(response, 0x20), 0, size)

            switch iszero(succeeded)
                case 1 {
                    // throw if delegatecall failed
                    revert(add(response, 0x20), size)
                }
        }
    }

}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"nextOwner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"}],"name":"isAuth","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"registry","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"},{"name":"_data","type":"bytes"},{"name":"_src","type":"uint256"},{"name":"_session","type":"uint256"}],"name":"execute","outputs":[{"name":"response","type":"bytes"}],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"target","type":"address"},{"indexed":false,"name":"srcNum","type":"uint256"},{"indexed":false,"name":"sessionNum","type":"uint256"}],"name":"LogExecute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sig","type":"bytes4"},{"indexed":true,"name":"guy","type":"address"},{"indexed":true,"name":"foo","type":"bytes32"},{"indexed":false,"name":"bar","type":"bytes32"},{"indexed":false,"name":"wad","type":"uint256"},{"indexed":false,"name":"fax","type":"bytes"}],"name":"LogNote","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"LogSetOwner","type":"event"}]

Deployed Bytecode

0x608060405260043610610067576000357c01000000000000000000000000000000000000000000000000000000009004806313af4035146100695780632520e7ff146100ba5780637b103999146101235780638da5cb5b1461017a578063f3541901146101d1575b005b34801561007557600080fd5b506100b86004803603602081101561008c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610339565b005b3480156100c657600080fd5b50610109600480360360208110156100dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610567565b604051808215151515815260200191505060405180910390f35b34801561012f57600080fd5b5061013861060f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561018657600080fd5b5061018f610634565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102be600480360360808110156101e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561022457600080fd5b82018360208201111561023657600080fd5b8035906020019184600183028401116401000000008311171561025857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019092919050505061065a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102fe5780820151818401526020810190506102e3565b50505050905090810190601f16801561032b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61034233610567565b15156103b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f7065726d697373696f6e2d64656e69656400000000000000000000000000000081525060200191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166339035d56600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b1580156104c857600080fd5b505af11580156104dc573d6000803e3d6000fd5b5050505080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156105c8576001905061060a565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610605576001905061060a565b600090505b919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060008060043591506024359050813373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f644843f351d3fba4abcd60109eaff9f54bac8fb8ccf0bab941009c21df21cf31843460003660405180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405180910390a461074233610567565b15156107b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f7065726d697373696f6e2d64656e69656400000000000000000000000000000081525060200191505060405180910390fd5b86600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561085c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f6c6f6769632d70726f78792d616464726573732d72657175697265640000000081525060200191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166311390441826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561091657600080fd5b505afa15801561092a573d6000803e3d6000fd5b505050506040513d602081101561094057600080fd5b810190808051906020019092919050505015156109c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6c6f6769632d6e6f742d617574686f726973656400000000000000000000000081525060200191505060405180910390fd5b7fbd37415aaf130f9a169d66bc22d669b6a5aa55f384e7b41d105714eb8277b341888787604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1600080885160208a018b6113885a03f43d6040519550601f19601f6020830101168601604052808652806000602088013e811560018114610a7857610a7f565b8160208801fd5b50505050505094935050505056fea165627a7a72305820a70df5c3d70f52cf6a410ed7bf147d9052fbab8b4e98568082f924a8dd7f63c90029

Swarm Source

bzzr://a70df5c3d70f52cf6a410ed7bf147d9052fbab8b4e98568082f924a8dd7f63c9

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.