ETH Price: $2,514.18 (+0.91%)

Contract

0x0215C1AA89283d755C6a79D99153B907dcFa73A4
 
Transaction Hash
Method
Block
From
To
Execute94694732020-02-12 17:20:351720 days ago1581528035IN
0x0215C1AA...7dcFa73A4
0 ETH0.000818549
Execute94056742020-02-02 22:03:111729 days ago1580680991IN
0x0215C1AA...7dcFa73A4
0 ETH0.00034733
Execute94056742020-02-02 22:03:111729 days ago1580680991IN
0x0215C1AA...7dcFa73A4
0 ETH0.00034733
Execute94056742020-02-02 22:03:111729 days ago1580680991IN
0x0215C1AA...7dcFa73A4
0 ETH0.000122581
Execute93970642020-02-01 14:31:241731 days ago1580567484IN
0x0215C1AA...7dcFa73A4
0 ETH0.000396461
Execute93970642020-02-01 14:31:241731 days ago1580567484IN
0x0215C1AA...7dcFa73A4
0 ETH0.000221721
Execute93970572020-02-01 14:29:341731 days ago1580567374IN
0x0215C1AA...7dcFa73A4
0 ETH0.000236121
Execute93645942020-01-27 14:38:301736 days ago1580135910IN
0x0215C1AA...7dcFa73A4
0 ETH0.000396311
Execute93645862020-01-27 14:36:051736 days ago1580135765IN
0x0215C1AA...7dcFa73A4
0 ETH0.000250031
Execute93645772020-01-27 14:34:061736 days ago1580135646IN
0x0215C1AA...7dcFa73A4
1 ETH0.000239591.5
Execute93645202020-01-27 14:23:341736 days ago1580135014IN
0x0215C1AA...7dcFa73A4
0 ETH0.000153331
Execute93645092020-01-27 14:22:251736 days ago1580134945IN
0x0215C1AA...7dcFa73A4
0 ETH0.00018621
Execute93645032020-01-27 14:21:271736 days ago1580134887IN
0x0215C1AA...7dcFa73A4
0.13765712 ETH0.000392591
Execute93644932020-01-27 14:18:481736 days ago1580134728IN
0x0215C1AA...7dcFa73A4
0 ETH0.000168381
Execute93644742020-01-27 14:16:331736 days ago1580134593IN
0x0215C1AA...7dcFa73A4
0 ETH0.000611691
Execute92130052020-01-04 9:20:311759 days ago1578129631IN
0x0215C1AA...7dcFa73A4
0 ETH0.000396321
Execute92129732020-01-04 9:12:081759 days ago1578129128IN
0x0215C1AA...7dcFa73A4
0 ETH0.000470082
Execute92092482020-01-03 19:31:411759 days ago1578079901IN
0x0215C1AA...7dcFa73A4
0.9 ETH0.000144781
Execute91299112019-12-19 9:04:131775 days ago1576746253IN
0x0215C1AA...7dcFa73A4
0 ETH0.001332095
Execute91298772019-12-19 8:55:121775 days ago1576745712IN
0x0215C1AA...7dcFa73A4
0.6 ETH0.003052146
Execute91297662019-12-19 8:21:041775 days ago1576743664IN
0x0215C1AA...7dcFa73A4
0 ETH0.002021066.5
Execute91297382019-12-19 8:13:041775 days ago1576743184IN
0x0215C1AA...7dcFa73A4
0 ETH0.00592288
Execute91248932019-12-18 9:16:531776 days ago1576660613IN
0x0215C1AA...7dcFa73A4
0 ETH0.006106048
Execute91248772019-12-18 9:12:371776 days ago1576660357IN
0x0215C1AA...7dcFa73A4
0 ETH0.0029235411
Execute91248712019-12-18 9:11:231776 days ago1576660283IN
0x0215C1AA...7dcFa73A4
0.7 ETH0.0059089211.6
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
94056742020-02-02 22:03:111729 days ago1580680991
0x0215C1AA...7dcFa73A4
0.22671651 ETH
94056742020-02-02 22:03:111729 days ago1580680991
0x0215C1AA...7dcFa73A4
0.22671651 ETH
93645772020-01-27 14:34:061736 days ago1580135646
0x0215C1AA...7dcFa73A4
1 ETH
93645202020-01-27 14:23:341736 days ago1580135014
0x0215C1AA...7dcFa73A4
1 ETH
93645202020-01-27 14:23:341736 days ago1580135014
0x0215C1AA...7dcFa73A4
1 ETH
93645032020-01-27 14:21:271736 days ago1580134887
0x0215C1AA...7dcFa73A4
0.00136294 ETH
93645032020-01-27 14:21:271736 days ago1580134887
0x0215C1AA...7dcFa73A4
0.00136294 ETH
93645032020-01-27 14:21:271736 days ago1580134887
0x0215C1AA...7dcFa73A4
0.13765712 ETH
93644932020-01-27 14:18:481736 days ago1580134728
0x0215C1AA...7dcFa73A4
0.1 ETH
93644932020-01-27 14:18:481736 days ago1580134728
0x0215C1AA...7dcFa73A4
0.1 ETH
93644742020-01-27 14:16:331736 days ago1580134593
0x0215C1AA...7dcFa73A4
0.4 ETH
93644742020-01-27 14:16:331736 days ago1580134593
0x0215C1AA...7dcFa73A4
0.4 ETH
92092482020-01-03 19:31:411759 days ago1578079901
0x0215C1AA...7dcFa73A4
0.9 ETH
91298772019-12-19 8:55:121775 days ago1576745712
0x0215C1AA...7dcFa73A4
0.6 ETH
91297662019-12-19 8:21:041775 days ago1576743664
0x0215C1AA...7dcFa73A4
0.7 ETH
91297662019-12-19 8:21:041775 days ago1576743664
0x0215C1AA...7dcFa73A4
0.7 ETH
91248712019-12-18 9:11:231776 days ago1576660283
0x0215C1AA...7dcFa73A4
0.7 ETH
91244532019-12-18 7:03:041776 days ago1576652584
0x0215C1AA...7dcFa73A4
0.00017664 ETH
91244532019-12-18 7:03:041776 days ago1576652584
0x0215C1AA...7dcFa73A4
0.00017664 ETH
91244532019-12-18 7:03:041776 days ago1576652584
0x0215C1AA...7dcFa73A4
0.03487269 ETH
91244142019-12-18 6:52:461776 days ago1576651966
0x0215C1AA...7dcFa73A4
0.67171921 ETH
91244142019-12-18 6:52:461776 days ago1576651966
0x0215C1AA...7dcFa73A4
0.67171921 ETH
91244112019-12-18 6:51:171776 days ago1576651877
0x0215C1AA...7dcFa73A4
0.00032868 ETH
91244112019-12-18 6:51:171776 days ago1576651877
0x0215C1AA...7dcFa73A4
0.00032868 ETH
91244112019-12-18 6:51:171776 days ago1576651877
0x0215C1AA...7dcFa73A4
0.04164449 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.