ETH Price: $3,159.66 (+0.52%)
Gas: 2 Gwei

Contract

0x4173dD0dE3220870Ad404f0EbfA2c26aB4a9394A
 
Transaction Hash
Method
Block
From
To
Execute112110122020-11-07 15:06:521344 days ago1604761612IN
0x4173dD0d...aB4a9394A
0 ETH0.0044335595
Execute90501772019-12-04 16:13:031683 days ago1575475983IN
0x4173dD0d...aB4a9394A
0 ETH0.000938163.6
Execute90397482019-12-02 19:42:131684 days ago1575315733IN
0x4173dD0d...aB4a9394A
0 ETH0.000801414.2
Execute90218042019-11-29 15:35:441688 days ago1575041744IN
0x4173dD0d...aB4a9394A
0 ETH0.0028514410
Execute86136482019-09-24 19:33:251753 days ago1569353605IN
0x4173dD0d...aB4a9394A
0 ETH0.0056993326
Execute86124792019-09-24 15:10:411754 days ago1569337841IN
0x4173dD0d...aB4a9394A
0 ETH0.0164749220
Execute86097792019-09-24 4:50:541754 days ago1569300654IN
0x4173dD0d...aB4a9394A
0 ETH0.0069906812
Execute85809532019-09-19 16:47:201759 days ago1568911640IN
0x4173dD0d...aB4a9394A
0 ETH0.0132517223
Execute85696142019-09-17 22:28:151760 days ago1568759295IN
0x4173dD0d...aB4a9394A
0 ETH0.0085130114.736
Execute85696132019-09-17 22:28:131760 days ago1568759293IN
0x4173dD0d...aB4a9394A
0 ETH0.0075422213.86
Execute85671772019-09-17 13:23:551761 days ago1568726635IN
0x4173dD0d...aB4a9394A
0 ETH0.0164439527.49999923
Execute85651722019-09-17 5:37:471761 days ago1568698667IN
0x4173dD0d...aB4a9394A
0 ETH0.0073165510
Execute85569472019-09-15 23:11:461762 days ago1568589106IN
0x4173dD0d...aB4a9394A
0 ETH0.001713066
Execute85567972019-09-15 22:37:361762 days ago1568587056IN
0x4173dD0d...aB4a9394A
0 ETH0.001273598
Execute85567972019-09-15 22:37:361762 days ago1568587056IN
0x4173dD0d...aB4a9394A
0 ETH0.0066421410
Execute85567962019-09-15 22:37:251762 days ago1568587045IN
0x4173dD0d...aB4a9394A
0 ETH0.004863077.99999952
Execute85161972019-09-09 14:28:321769 days ago1568039312IN
0x4173dD0d...aB4a9394A
0 ETH0.0118330220
Execute84777082019-09-03 14:23:051775 days ago1567520585IN
0x4173dD0d...aB4a9394A
0 ETH0.00336456
Execute84464502019-08-29 17:22:521780 days ago1567099372IN
0x4173dD0d...aB4a9394A
0 ETH0.002135472
Execute84403182019-08-28 18:51:341780 days ago1567018294IN
0x4173dD0d...aB4a9394A
0 ETH0.00299815.4
Execute84070232019-08-23 14:24:481786 days ago1566570288IN
0x4173dD0d...aB4a9394A
0 ETH0.004368798
Execute84008032019-08-22 15:10:371787 days ago1566486637IN
0x4173dD0d...aB4a9394A
0 ETH0.0066651212
Execute83944282019-08-21 15:25:591788 days ago1566401159IN
0x4173dD0d...aB4a9394A
0 ETH0.002672545
Execute83877362019-08-20 14:23:441789 days ago1566311024IN
0x4173dD0d...aB4a9394A
0 ETH0.002706675
Execute83812632019-08-19 14:10:121790 days ago1566223812IN
0x4173dD0d...aB4a9394A
0 ETH0.0060991710
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
86136482019-09-24 19:33:251753 days ago1569353605
0x4173dD0d...aB4a9394A
49.10157172 ETH
86136482019-09-24 19:33:251753 days ago1569353605
0x4173dD0d...aB4a9394A
49.10157172 ETH
86124792019-09-24 15:10:411754 days ago1569337841
0x4173dD0d...aB4a9394A
5 ETH
86124792019-09-24 15:10:411754 days ago1569337841
0x4173dD0d...aB4a9394A
5 ETH
86097792019-09-24 4:50:541754 days ago1569300654
0x4173dD0d...aB4a9394A
1.01785617 ETH
86097792019-09-24 4:50:541754 days ago1569300654
0x4173dD0d...aB4a9394A
1.01785617 ETH
85809532019-09-19 16:47:201759 days ago1568911640
0x4173dD0d...aB4a9394A
1.14236944 ETH
85809532019-09-19 16:47:201759 days ago1568911640
0x4173dD0d...aB4a9394A
1.14236944 ETH
85696142019-09-17 22:28:151760 days ago1568759295
0x4173dD0d...aB4a9394A
4.71230158 ETH
85696142019-09-17 22:28:151760 days ago1568759295
0x4173dD0d...aB4a9394A
4.71230158 ETH
85696132019-09-17 22:28:131760 days ago1568759293
0x4173dD0d...aB4a9394A
4.71501407 ETH
85696132019-09-17 22:28:131760 days ago1568759293
0x4173dD0d...aB4a9394A
4.71501407 ETH
85671772019-09-17 13:23:551761 days ago1568726635
0x4173dD0d...aB4a9394A
2.96580773 ETH
85671772019-09-17 13:23:551761 days ago1568726635
0x4173dD0d...aB4a9394A
2.96580773 ETH
85567972019-09-15 22:37:361762 days ago1568587056
0x4173dD0d...aB4a9394A
5.29357812 ETH
85567972019-09-15 22:37:361762 days ago1568587056
0x4173dD0d...aB4a9394A
5.29357812 ETH
85567962019-09-15 22:37:251762 days ago1568587045
0x4173dD0d...aB4a9394A
5.29363356 ETH
85567962019-09-15 22:37:251762 days ago1568587045
0x4173dD0d...aB4a9394A
5.29363356 ETH
85161972019-09-09 14:28:321769 days ago1568039312
0x4173dD0d...aB4a9394A
3.29425363 ETH
85161972019-09-09 14:28:321769 days ago1568039312
0x4173dD0d...aB4a9394A
3.29425363 ETH
84777082019-09-03 14:23:051775 days ago1567520585
0x4173dD0d...aB4a9394A
2.24502943 ETH
84777082019-09-03 14:23:051775 days ago1567520585
0x4173dD0d...aB4a9394A
2.24502943 ETH
84464502019-08-29 17:22:521780 days ago1567099372
0x4173dD0d...aB4a9394A
15 ETH
84464502019-08-29 17:22:521780 days ago1567099372
0x4173dD0d...aB4a9394A
15 ETH
84403182019-08-28 18:51:341780 days ago1567018294
0x4173dD0d...aB4a9394A
0.58270863 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.