ETH Price: $2,288.44 (+1.07%)

Contract

0xFC9aFD38e8cC941590C10371dB98e687C6Ba58b1
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Spend97718592020-03-30 8:05:481622 days ago1585555548IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000612065.00000007
Spend97054542020-03-20 0:54:291633 days ago1584665669IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000585845.00000004
Spend96988562020-03-19 0:24:491634 days ago1584577489IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000244872.00000006
Spend96975222020-03-18 19:36:171634 days ago1584560177IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000164531.34400001
Spend96343302020-03-09 1:30:271644 days ago1583717427IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000702936
Spend96336072020-03-08 22:53:041644 days ago1583707984IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000255433.56000001
Spend96336072020-03-08 22:53:041644 days ago1583707984IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000283542.42000003
Spend96335392020-03-08 22:35:341644 days ago1583706934IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000244842.00000004
Spend96075512020-03-04 23:02:261648 days ago1583362946IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000117161.00000004
Spend95956972020-03-03 3:07:591650 days ago1583204879IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.00014352.00000007
Spend95956972020-03-03 3:07:591650 days ago1583204879IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000244872.00000003
Spend95418432020-02-23 20:40:491658 days ago1582490449IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000094441
Spend95418432020-02-23 20:40:491658 days ago1582490449IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000122421.00000004
Spend95418142020-02-23 20:35:461658 days ago1582490146IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000094441.00000005
Spend95418142020-02-23 20:35:461658 days ago1582490146IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000122421.00000008
Spend95181932020-02-20 5:14:231662 days ago1582175663IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000351463.00000009
Spend95180492020-02-20 4:42:221662 days ago1582173742IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000246022.10000001
Spend95180392020-02-20 4:40:271662 days ago1582173627IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000246022.10000008
Spend95177932020-02-20 3:46:271662 days ago1582170387IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000585785.00000004
Spend95172152020-02-20 1:33:001662 days ago1582162380IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000283343.00000003
Spend95172152020-02-20 1:33:001662 days ago1582162380IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000367273.00000003
Spend95160572020-02-19 21:20:041662 days ago1582147204IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.0007036.00000002
Spend95106222020-02-19 1:21:471663 days ago1582075307IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000159151.3000001
Spend95105582020-02-19 1:10:111663 days ago1582074611IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000210881.80000003
Spend95104702020-02-19 0:54:391663 days ago1582073679IN
0xFC9aFD38...7C6Ba58b1
0 ETH0.000220361.80000007
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
81322632019-07-11 21:12:431885 days ago1562879563  Contract Creation0 ETH
Loading...
Loading

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

Contract Name:
SpendableWallet

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-12-03
*/

pragma solidity ^0.4.24;


/// @title Version
contract Version {
    string public semanticVersion;

    /// @notice Constructor saves a public version of the deployed Contract.
    /// @param _version Semantic version of the contract.
    constructor(string _version) internal {
        semanticVersion = _version;
    }
}


/// @title Factory
contract Factory is Version {
    event FactoryAddedContract(address indexed _contract);

    modifier contractHasntDeployed(address _contract) {
        require(contracts[_contract] == false);
        _;
    }

    mapping(address => bool) public contracts;

    constructor(string _version) internal Version(_version) {}

    function hasBeenDeployed(address _contract) public constant returns (bool) {
        return contracts[_contract];
    }

    function addContract(address _contract)
        internal
        contractHasntDeployed(_contract)
        returns (bool)
    {
        contracts[_contract] = true;
        emit FactoryAddedContract(_contract);
        return true;
    }
}


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address public owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor() public {
        owner = msg.sender;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0));
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}


/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface ERC20 {
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    function approve(address spender, uint256 value) external returns (bool);
    function totalSupply() external view returns (uint256);
    function balanceOf(address who) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


contract SpendableWallet is Ownable {
    ERC20 public token;

    event ClaimedTokens(
        address indexed _token,
        address indexed _controller,
        uint256 _amount
    );

    constructor(address _token, address _owner) public {
        token = ERC20(_token);
        owner = _owner;
    }

    function spend(address _to, uint256 _amount) public onlyOwner {
        require(
            token.transfer(_to, _amount),
            "Token transfer could not be executed."
        );
    }

    /// @notice This method can be used by the controller to extract mistakenly
    ///  sent tokens to this contract.
    /// @param _token The address of the token contract that you want to recover
    ///  set to 0 in case you want to extract ether.
    function claimTokens(address _token) public onlyOwner {
        if (_token == 0x0) {
            owner.transfer(address(this).balance);
            return;
        }

        ERC20 erc20token = ERC20(_token);
        uint256 balance = erc20token.balanceOf(address(this));
        require(
            erc20token.transfer(owner, balance),
            "Token transfer could not be executed."
        );
        emit ClaimedTokens(_token, owner, balance);
    }
}


contract SpendableWalletFactory is Factory {
    // index of created contracts
    address[] public spendableWallets;

    constructor() public Factory("1.0.3") {}

    // deploy a new contract
    function newPaymentAddress(address _token, address _owner)
        public
        returns(address newContract)
    {
        SpendableWallet spendableWallet = new SpendableWallet(_token, _owner);
        spendableWallets.push(spendableWallet);
        addContract(spendableWallet);
        return spendableWallet;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"spend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"},{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_token","type":"address"},{"indexed":true,"name":"_controller","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

Deployed Bytecode

0x60806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638da5cb5b14610072578063af7d6ca3146100c9578063df8de3e714610116578063f2fde38b14610159578063fc0c546a1461019c575b600080fd5b34801561007e57600080fd5b506100876101f3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100d557600080fd5b50610114600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610218565b005b34801561012257600080fd5b50610157600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610411565b005b34801561016557600080fd5b5061019a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610812565b005b3480156101a857600080fd5b506101b1610967565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561027357600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561033857600080fd5b505af115801561034c573d6000803e3d6000fd5b505050506040513d602081101561036257600080fd5b8101908080519060200190929190505050151561040d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f546f6b656e207472616e7366657220636f756c64206e6f74206265206578656381526020017f757465642e00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561046f57600080fd5b60008373ffffffffffffffffffffffffffffffffffffffff161415610512576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015801561050c573d6000803e3d6000fd5b5061080d565b8291508173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156105b057600080fd5b505af11580156105c4573d6000803e3d6000fd5b505050506040513d60208110156105da57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156106b157600080fd5b505af11580156106c5573d6000803e3d6000fd5b505050506040513d60208110156106db57600080fd5b81019080805190602001909291905050501515610786576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f546f6b656e207472616e7366657220636f756c64206e6f74206265206578656381526020017f757465642e00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c836040518082815260200191505060405180910390a35b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561086d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156108a957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815600a165627a7a723058203c30641a62b4c884e947f54af6618388be804b9dda8295be3af17842122e3f4e0029

Swarm Source

bzzr://3c30641a62b4c884e947f54af6618388be804b9dda8295be3af17842122e3f4e

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.