ETH Price: $1,972.85 (+0.21%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

1 Internal Transaction found.

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
0x60806040237475292025-11-07 12:56:23106 days ago1762520183  Contract Creation0 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CloneableReceiptToken

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
Yes with 10000 runs

Other Settings:
prague EvmVersion
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.15;

// Interfaces
import {IERC20} from "src/interfaces/IERC20.sol";
import {IERC20BurnableMintable} from "src/interfaces/IERC20BurnableMintable.sol";
import {IDepositReceiptToken} from "src/interfaces/IDepositReceiptToken.sol";
import {IERC165} from "@openzeppelin-5.3.0/interfaces/IERC165.sol";

// Libraries
import {CloneERC20} from "src/external/clones/CloneERC20.sol";

/// @title  CloneableReceiptToken
/// @notice ERC20 implementation that is deployed as a clone
///         with immutable arguments for each supported input token.
contract CloneableReceiptToken is CloneERC20, IERC20BurnableMintable, IDepositReceiptToken {
    // ========== IMMUTABLE ARGS ========== //

    // Storage layout:
    // 0x00 - name, 32 bytes
    // 0x20 - symbol, 32 bytes
    // 0x40 - decimals, 1 byte
    // 0x41 - owner, 20 bytes
    // 0x55 - asset, 20 bytes
    // 0x69 - depositPeriod, 1 byte
    // 0x6A - operator, 20 bytes

    /// @notice The owner of the clone
    /// @return _owner The owner address stored in immutable args
    function owner() public pure returns (address _owner) {
        _owner = _getArgAddress(0x41);
    }

    /// @notice The underlying asset
    /// @return _asset The asset address stored in immutable args
    function asset() public pure returns (IERC20 _asset) {
        _asset = IERC20(_getArgAddress(0x55));
    }

    /// @notice The deposit period (in months)
    /// @return _depositPeriod The deposit period stored in immutable args
    function depositPeriod() public pure returns (uint8 _depositPeriod) {
        _depositPeriod = _getArgUint8(0x69);
    }

    /// @notice The operator that issued the receipt token
    /// @return _operator The operator address stored in immutable args
    function operator() public pure returns (address _operator) {
        _operator = _getArgAddress(0x6A);
    }

    // ========== OWNER-ONLY FUNCTIONS ========== //

    function _onlyOwner() internal view {
        if (msg.sender != owner()) revert OnlyOwner();
    }

    /// @notice Only the owner can call this function
    modifier onlyOwner() {
        _onlyOwner();
        _;
    }

    /// @notice Mint tokens to the specified address
    /// @dev    This is owner-only, as the underlying token is custodied by the owner.
    ///         Minting should be performed through the owner contract.
    ///
    /// @param to_ The address to mint tokens to
    /// @param amount_ The amount of tokens to mint
    function mintFor(address to_, uint256 amount_) external onlyOwner {
        _mint(to_, amount_);
    }

    /// @notice Burn tokens from the specified address
    /// @dev    This is gated to the owner, as burning is controlled.
    ///         Burning should be performed through the owner contract.
    ///         The owner is expected to handle spending approval before calling this function.
    ///         This function does NOT check or update allowances.
    ///
    /// @param from_ The address to burn tokens from
    /// @param amount_ The amount of tokens to burn
    function burnFrom(address from_, uint256 amount_) external onlyOwner {
        _burn(from_, amount_);
    }

    // ========== ERC165 ========== //

    function supportsInterface(bytes4 interfaceId_) public pure returns (bool) {
        // super does not implement ERC165, so no need to call it
        return
            interfaceId_ == type(IERC165).interfaceId ||
            interfaceId_ == type(IERC20).interfaceId ||
            interfaceId_ == type(IERC20BurnableMintable).interfaceId ||
            interfaceId_ == type(IDepositReceiptToken).interfaceId;
    }
}

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

// Imported from forge-std

/// @dev Interface of the ERC20 standard as defined in the EIP.
/// @dev This includes the optional name, symbol, and decimals metadata.
interface IERC20 {
    /// @dev Emitted when `value` tokens are moved from one account (`from`) to another (`to`).
    event Transfer(address indexed from, address indexed to, uint256 value);

    /// @dev Emitted when the allowance of a `spender` for an `owner` is set, where `value`
    /// is the new allowance.
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /// @notice Returns the amount of tokens in existence.
    function totalSupply() external view returns (uint256);

    /// @notice Returns the amount of tokens owned by `account`.
    function balanceOf(address account) external view returns (uint256);

    /// @notice Moves `amount` tokens from the caller's account to `to`.
    function transfer(address to, uint256 amount) external returns (bool);

    /// @notice Returns the remaining number of tokens that `spender` is allowed
    /// to spend on behalf of `owner`
    function allowance(address owner, address spender) external view returns (uint256);

    /// @notice Sets `amount` as the allowance of `spender` over the caller's tokens.
    /// @dev Be aware of front-running risks: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    function approve(address spender, uint256 amount) external returns (bool);

    /// @notice Moves `amount` tokens from `from` to `to` using the allowance mechanism.
    /// `amount` is then deducted from the caller's allowance.
    function transferFrom(address from, address to, uint256 amount) external returns (bool);

    /// @notice Returns the name of the token.
    function name() external view returns (string memory);

    /// @notice Returns the symbol of the token.
    function symbol() external view returns (string memory);

    /// @notice Returns the decimals places of the token.
    function decimals() external view returns (uint8);
}

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.15;

import {IERC20} from "src/interfaces/IERC20.sol";

interface IERC20BurnableMintable is IERC20 {
    /// @notice Mints tokens to the specified address
    ///
    /// @param to_      The address to mint tokens to
    /// @param amount_  The amount of tokens to mint
    function mintFor(address to_, uint256 amount_) external;

    /// @notice Burns tokens from the specified address
    ///
    /// @param from_    The address to burn tokens from
    /// @param amount_  The amount of tokens to burn
    function burnFrom(address from_, uint256 amount_) external;
}

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.15;

import {IERC20} from "src/interfaces/IERC20.sol";

/// @title  IDepositReceiptToken
/// @notice Interface for a deposit receipt token
/// @dev    This interface adds additional metadata to the IERC20 interface that is necessary for deposit receipt tokens.
interface IDepositReceiptToken is IERC20 {
    // ========== ERRORS ========== //

    error OnlyOwner();

    // ========== VIEW FUNCTIONS ========== //

    function owner() external view returns (address _owner);

    function asset() external view returns (IERC20 _asset);

    function depositPeriod() external view returns (uint8 _depositPeriod);

    function operator() external view returns (address _operator);
}

File 5 of 8 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)

pragma solidity ^0.8.20;

import {IERC165} from "../utils/introspection/IERC165.sol";

// SPDX-License-Identifier: BSD
pragma solidity >=0.8.0;

import {Clone} from "@clones-with-immutable-args-1.1.2/Clone.sol";
import {IERC20} from "src/interfaces/IERC20.sol";

/// @notice Modern and gas efficient ERC20 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract CloneERC20 is Clone, IERC20 {
    /*///////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*///////////////////////////////////////////////////////////////
                               METADATA
    //////////////////////////////////////////////////////////////*/

    function name() external pure returns (string memory) {
        return string(abi.encodePacked(_getArgUint256(0)));
    }

    function symbol() external pure returns (string memory) {
        return string(abi.encodePacked(_getArgUint256(0x20)));
    }

    function decimals() external pure returns (uint8) {
        return _getArgUint8(0x40);
    }

    /*///////////////////////////////////////////////////////////////
                              ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] += amount;

        emit Approval(msg.sender, spender, allowance[msg.sender][spender]);

        return true;
    }

    function decreaseAllowance(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] -= amount;

        emit Approval(msg.sender, spender, allowance[msg.sender][spender]);

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(from, to, amount);

        return true;
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(address(0), to, amount);
    }

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply -= amount;
        }

        emit Transfer(from, address(0), amount);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[ERC].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// SPDX-License-Identifier: BSD
pragma solidity ^0.8.4;

/// @title Clone
/// @author zefram.eth
/// @notice Provides helper functions for reading immutable args from calldata
contract Clone {
    /// @notice Reads an immutable arg with type address
    /// @param argOffset The offset of the arg in the packed data
    /// @return arg The arg value
    function _getArgAddress(
        uint256 argOffset
    ) internal pure returns (address arg) {
        uint256 offset = _getImmutableArgsOffset();
        // solhint-disable-next-line no-inline-assembly
        assembly {
            arg := shr(0x60, calldataload(add(offset, argOffset)))
        }
    }

    /// @notice Reads an immutable arg with type uint256
    /// @param argOffset The offset of the arg in the packed data
    /// @return arg The arg value
    function _getArgUint256(
        uint256 argOffset
    ) internal pure returns (uint256 arg) {
        uint256 offset = _getImmutableArgsOffset();
        // solhint-disable-next-line no-inline-assembly
        assembly {
            arg := calldataload(add(offset, argOffset))
        }
    }

    /// @notice Reads a uint256 array stored in the immutable args.
    /// @param argOffset The offset of the arg in the packed data
    /// @param arrLen Number of elements in the array
    /// @return arr The array
    function _getArgUint256Array(
        uint256 argOffset,
        uint64 arrLen
    ) internal pure returns (uint256[] memory arr) {
        uint256 offset = _getImmutableArgsOffset();
        uint256 el;
        arr = new uint256[](arrLen);
        for (uint64 i = 0; i < arrLen; i++) {
            // solhint-disable-next-line no-inline-assembly
            assembly {
                el := calldataload(add(add(offset, argOffset), mul(i, 32)))
            }
            arr[i] = el;
        }
        return arr;
    }

    /// @notice Reads an immutable arg with type uint64
    /// @param argOffset The offset of the arg in the packed data
    /// @return arg The arg value
    function _getArgUint64(
        uint256 argOffset
    ) internal pure returns (uint64 arg) {
        uint256 offset = _getImmutableArgsOffset();
        // solhint-disable-next-line no-inline-assembly
        assembly {
            arg := shr(0xc0, calldataload(add(offset, argOffset)))
        }
    }

    /// @notice Reads an immutable arg with type uint8
    /// @param argOffset The offset of the arg in the packed data
    /// @return arg The arg value
    function _getArgUint8(uint256 argOffset) internal pure returns (uint8 arg) {
        uint256 offset = _getImmutableArgsOffset();
        // solhint-disable-next-line no-inline-assembly
        assembly {
            arg := shr(0xf8, calldataload(add(offset, argOffset)))
        }
    }

    /// @return offset The offset of the packed immutable args in calldata
    function _getImmutableArgsOffset() internal pure returns (uint256 offset) {
        // solhint-disable-next-line no-inline-assembly
        assembly {
            offset := sub(
                calldatasize(),
                add(shr(240, calldataload(sub(calldatasize(), 2))), 2)
            )
        }
    }
}

Settings
{
  "remappings": [
    "interfaces/=src/interfaces/",
    "modules/=src/modules/",
    "policies/=src/policies/",
    "libraries/=src/libraries/",
    "test/=src/test/",
    "test/mocks/=src/test/mocks/",
    "test/lib/=src/test/lib/",
    "@base64-1.1.0/=dependencies/base64-1.1.0/",
    "@surl-1.0.0/=dependencies/surl-1.0.0/src/",
    "@chainlink-ccip-1.6.0/=dependencies/chainlink-ccip-1.6.0/contracts/src/v0.8/",
    "@chainlink-local-0.2.5/=dependencies/chainlink-local-0.2.5/src/",
    "@chainlink/contracts-ccip/contracts/=dependencies/chainlink-ccip-1.6.0/contracts/src/v0.8/ccip/",
    "@chainlink/contracts/=dependencies/chainlink-ccip-1.6.0/contracts/",
    "@forge-std-1.9.6/=dependencies/forge-std-1.9.6/src/",
    "forge-std/=dependencies/forge-std-1.9.6/src/",
    "@safe-utils-0.0.13/=dependencies/safe-utils-0.0.13/src/",
    "@base58-solidity-1.0.3/=dependencies/base58-solidity-1.0.3/contracts/",
    "@clones-with-immutable-args-1.1.2/=dependencies/clones-with-immutable-args-1.1.2/src/",
    "clones/=dependencies/clones-with-immutable-args-1.1.2/src/",
    "@layer-zero-endpoint-v1-0.0.6/=dependencies/layer-zero-endpoint-v1-0.0.6/contracts/",
    "layer-zero/=dependencies/layer-zero-endpoint-v1-0.0.6/contracts/",
    "@solmate-6.2.0/=dependencies/solmate-6.2.0/src/",
    "solmate/=dependencies/solmate-6.2.0/src/",
    "@openzeppelin-4.8.0/=dependencies/openzeppelin-4.8.0/contracts/",
    "@openzeppelin/contracts/=dependencies/openzeppelin-4.8.0/contracts/",
    "openzeppelin/=dependencies/openzeppelin-4.8.0/contracts/",
    "@openzeppelin-5.3.0/=dependencies/openzeppelin-new-5.3.0/contracts/",
    "proposal-sim/=dependencies/forge-proposal-simulator-1.0.1/",
    "dependencies/forge-proposal-simulator-1.0.1/:@addresses/=dependencies/forge-proposal-simulator-1.0.1/addresses/",
    "dependencies/forge-proposal-simulator-1.0.1/:@utils/=dependencies/forge-proposal-simulator-1.0.1/utils/",
    "dependencies/forge-proposal-simulator-1.0.1/:@proposals/=dependencies/forge-proposal-simulator-1.0.1/proposals/",
    "Governors/=dependencies/forge-proposal-simulator-1.0.1/Governors/",
    "safe-smart-account/=dependencies/safe-smart-account-1.4.1/contracts/",
    "solidity-http/=dependencies/solidity-http-0.0.6/src/",
    "@addresses/=dependencies/forge-proposal-simulator-1.0.1/addresses/",
    "@chainlink/local/src/=dependencies/chainlink-local-0.2.5/src/",
    "@examples/=dependencies/forge-proposal-simulator-1.0.1/examples/",
    "@proposals/=dependencies/forge-proposal-simulator-1.0.1/proposals/",
    "@script/=dependencies/forge-proposal-simulator-1.0.1/script/",
    "@test/=dependencies/forge-proposal-simulator-1.0.1/test/",
    "@utils/=dependencies/forge-proposal-simulator-1.0.1/utils/",
    "base58-solidity-1.0.3/=dependencies/base58-solidity-1.0.3/contracts/",
    "base64-1.1.0/=dependencies/base64-1.1.0/",
    "chainlink-ccip-1.6.0/=dependencies/chainlink-ccip-1.6.0/",
    "chainlink-local-0.2.5/=dependencies/chainlink-local-0.2.5/src/",
    "clones-with-immutable-args-1.1.2/=dependencies/clones-with-immutable-args-1.1.2/src/",
    "comp-governance/=dependencies/forge-proposal-simulator-1.0.1/lib/compound-governance/contracts/",
    "ds-test/=dependencies/clones-with-immutable-args-1.1.2/lib/ds-test/src/",
    "forge-proposal-simulator-1.0.1/=dependencies/forge-proposal-simulator-1.0.1/",
    "forge-std-1.9.6/=dependencies/forge-std-1.9.6/src/",
    "layer-zero-endpoint-v1-0.0.6/=dependencies/layer-zero-endpoint-v1-0.0.6/contracts/",
    "openzeppelin-4.8.0/=dependencies/openzeppelin-4.8.0/",
    "openzeppelin-new-5.3.0/=dependencies/openzeppelin-new-5.3.0/",
    "safe-smart-account-1.4.1/=dependencies/safe-smart-account-1.4.1/",
    "safe-utils-0.0.13/=dependencies/safe-utils-0.0.13/src/",
    "solidity-http-0.0.6/=dependencies/solidity-http-0.0.6/src/",
    "solidity-stringutils/=dependencies/solidity-http-0.0.6/lib/solidity-stringutils/",
    "solmate-6.2.0/=dependencies/solmate-6.2.0/src/",
    "surl-1.0.0/=dependencies/surl-1.0.0/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 10000
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "prague",
  "viaIR": false
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"name":"OnlyOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"contract IERC20","name":"_asset","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositPeriod","outputs":[{"internalType":"uint8","name":"_depositPeriod","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"mintFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"_operator","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId_","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

6080604052348015600e575f5ffd5b50610bd98061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061012f575f3560e01c806370a08231116100ad57806395d89b411161007d578063a9059cbb11610063578063a9059cbb1461026d578063da1919b314610280578063dd62ed3e14610293575f5ffd5b806395d89b4114610252578063a457c2d71461025a575f5ffd5b806370a082311461020e57806379cc67901461022d57806387df2c16146102425780638da5cb5b1461024a575f5ffd5b806323b872dd1161010257806338d52e0f116100e857806338d52e0f146101c657806339509351146101f3578063570ca73514610206575f5ffd5b806323b872dd14610199578063313ce567146101ac575f5ffd5b806301ffc9a71461013357806306fdde031461015b578063095ea7b31461017057806318160ddd14610183575b5f5ffd5b6101466101413660046109e3565b6102bd565b60405190151581526020015b60405180910390f35b6101636103ed565b6040516101529190610a29565b61014661017e366004610aa4565b61041e565b61018b5f5481565b604051908152602001610152565b6101466101a7366004610acc565b610496565b6101b46105d6565b60405160ff9091168152602001610152565b6101ce6105e6565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610152565b610146610201366004610aa4565b6105f1565b6101ce61069a565b61018b61021c366004610b06565b60016020525f908152604090205481565b61024061023b366004610aa4565b6106a5565b005b6101b46106bb565b6101ce6106c6565b6101636106d1565b610146610268366004610aa4565b6106dd565b61014661027b366004610aa4565b61071e565b61024061028e366004610aa4565b6107a1565b61018b6102a1366004610b1f565b600260209081525f928352604080842090915290825290205481565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000148061034f57507fffffffff0000000000000000000000000000000000000000000000000000000082167f942e8b2200000000000000000000000000000000000000000000000000000000145b8061039b57507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3d57e2300000000000000000000000000000000000000000000000000000000145b806103e757507fffffffff0000000000000000000000000000000000000000000000000000000082167f65a36e7700000000000000000000000000000000000000000000000000000000145b92915050565b60606103f85f6107b3565b60405160200161040a91815260200190565b604051602081830303815290604052905090565b335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104859086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610528576104f78382610b7d565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526002602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f908152600160205260408120805485929061055c908490610b7d565b909155505073ffffffffffffffffffffffffffffffffffffffff8085165f81815260016020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906105c39087815260200190565b60405180910390a3506001949350505050565b5f6105e160406107f2565b905090565b5f6105e16055610834565b335f90815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812080548391908390610632908490610b90565b9091555050335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610485565b5f6105e1606a610834565b6106ad610876565b6106b782826108e4565b5050565b5f6105e160696107f2565b5f6105e16041610834565b60606103f860206107b3565b335f90815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812080548391908390610632908490610b7d565b335f9081526001602052604081208054839190839061073e908490610b7d565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260016020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104859086815260200190565b6107a9610876565b6106b78282610975565b5f5f6107e77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe368181013560f01c90030190565b929092013592915050565b5f5f6108267ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe368181013560f01c90030190565b929092013560f81c92915050565b5f5f6108687ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe368181013560f01c90030190565b929092013560601c92915050565b61087e6106c6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e2576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081208054839290610918908490610b7d565b90915550505f8054829003815560405182815273ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b805f5f8282546109859190610b90565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610969565b5f602082840312156109f3575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a22575f5ffd5b9392505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a9f575f5ffd5b919050565b5f5f60408385031215610ab5575f5ffd5b610abe83610a7c565b946020939093013593505050565b5f5f5f60608486031215610ade575f5ffd5b610ae784610a7c565b9250610af560208501610a7c565b929592945050506040919091013590565b5f60208284031215610b16575f5ffd5b610a2282610a7c565b5f5f60408385031215610b30575f5ffd5b610b3983610a7c565b9150610b4760208401610a7c565b90509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156103e7576103e7610b50565b808201808211156103e7576103e7610b5056fea2646970667358221220533193ce38beab52e4fb10a31007b996172c3b3ce2b7280eee10fa1c09f7abfa64736f6c634300081e0033

Deployed Bytecode

0x608060405234801561000f575f5ffd5b506004361061012f575f3560e01c806370a08231116100ad57806395d89b411161007d578063a9059cbb11610063578063a9059cbb1461026d578063da1919b314610280578063dd62ed3e14610293575f5ffd5b806395d89b4114610252578063a457c2d71461025a575f5ffd5b806370a082311461020e57806379cc67901461022d57806387df2c16146102425780638da5cb5b1461024a575f5ffd5b806323b872dd1161010257806338d52e0f116100e857806338d52e0f146101c657806339509351146101f3578063570ca73514610206575f5ffd5b806323b872dd14610199578063313ce567146101ac575f5ffd5b806301ffc9a71461013357806306fdde031461015b578063095ea7b31461017057806318160ddd14610183575b5f5ffd5b6101466101413660046109e3565b6102bd565b60405190151581526020015b60405180910390f35b6101636103ed565b6040516101529190610a29565b61014661017e366004610aa4565b61041e565b61018b5f5481565b604051908152602001610152565b6101466101a7366004610acc565b610496565b6101b46105d6565b60405160ff9091168152602001610152565b6101ce6105e6565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610152565b610146610201366004610aa4565b6105f1565b6101ce61069a565b61018b61021c366004610b06565b60016020525f908152604090205481565b61024061023b366004610aa4565b6106a5565b005b6101b46106bb565b6101ce6106c6565b6101636106d1565b610146610268366004610aa4565b6106dd565b61014661027b366004610aa4565b61071e565b61024061028e366004610aa4565b6107a1565b61018b6102a1366004610b1f565b600260209081525f928352604080842090915290825290205481565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000148061034f57507fffffffff0000000000000000000000000000000000000000000000000000000082167f942e8b2200000000000000000000000000000000000000000000000000000000145b8061039b57507fffffffff0000000000000000000000000000000000000000000000000000000082167fa3d57e2300000000000000000000000000000000000000000000000000000000145b806103e757507fffffffff0000000000000000000000000000000000000000000000000000000082167f65a36e7700000000000000000000000000000000000000000000000000000000145b92915050565b60606103f85f6107b3565b60405160200161040a91815260200190565b604051602081830303815290604052905090565b335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104859086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610528576104f78382610b7d565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526002602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f908152600160205260408120805485929061055c908490610b7d565b909155505073ffffffffffffffffffffffffffffffffffffffff8085165f81815260016020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906105c39087815260200190565b60405180910390a3506001949350505050565b5f6105e160406107f2565b905090565b5f6105e16055610834565b335f90815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812080548391908390610632908490610b90565b9091555050335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610485565b5f6105e1606a610834565b6106ad610876565b6106b782826108e4565b5050565b5f6105e160696107f2565b5f6105e16041610834565b60606103f860206107b3565b335f90815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812080548391908390610632908490610b7d565b335f9081526001602052604081208054839190839061073e908490610b7d565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260016020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104859086815260200190565b6107a9610876565b6106b78282610975565b5f5f6107e77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe368181013560f01c90030190565b929092013592915050565b5f5f6108267ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe368181013560f01c90030190565b929092013560f81c92915050565b5f5f6108687ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe368181013560f01c90030190565b929092013560601c92915050565b61087e6106c6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e2576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081208054839290610918908490610b7d565b90915550505f8054829003815560405182815273ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b805f5f8282546109859190610b90565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610969565b5f602082840312156109f3575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a22575f5ffd5b9392505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a9f575f5ffd5b919050565b5f5f60408385031215610ab5575f5ffd5b610abe83610a7c565b946020939093013593505050565b5f5f5f60608486031215610ade575f5ffd5b610ae784610a7c565b9250610af560208501610a7c565b929592945050506040919091013590565b5f60208284031215610b16575f5ffd5b610a2282610a7c565b5f5f60408385031215610b30575f5ffd5b610b3983610a7c565b9150610b4760208401610a7c565b90509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156103e7576103e7610b50565b808201808211156103e7576103e7610b5056fea2646970667358221220533193ce38beab52e4fb10a31007b996172c3b3ce2b7280eee10fa1c09f7abfa64736f6c634300081e0033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.