ETH Price: $2,658.68 (+3.22%)

Contract

0x75ff3dd673Ef9fC459A52E1054db5dF2A1101212

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

More Info

Private Name Tags

Transaction Hash
Method
Block
From
To
Initialize174168762022-08-03 10:37:351023 days ago1659523055IN
0x75ff3dd6...2A1101212
0 ETH0.0000304778530.001

View more zero value Internal Transactions in Advanced View mode

Advanced mode:

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ERC20Bridged

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 100000 runs

Other Settings:
default evmVersion
// SPDX-FileCopyrightText: 2022 Lido <[email protected]>
// SPDX-License-Identifier: GPL-3.0

pragma solidity 0.8.10;

import {IERC20Bridged} from "./interfaces/IERC20Bridged.sol";

import {ERC20Core} from "./ERC20Core.sol";
import {ERC20Metadata} from "./ERC20Metadata.sol";

/// @author psirex
/// @notice Extends the ERC20 functionality that allows the bridge to mint/burn tokens
contract ERC20Bridged is IERC20Bridged, ERC20Core, ERC20Metadata {
    /// @inheritdoc IERC20Bridged
    address public immutable bridge;

    /// @param name_ The name of the token
    /// @param symbol_ The symbol of the token
    /// @param decimals_ The decimals places of the token
    /// @param bridge_ The bridge address which allowd to mint/burn tokens
    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_,
        address bridge_
    ) ERC20Metadata(name_, symbol_, decimals_) {
        bridge = bridge_;
    }

    /// @notice Sets the name and the symbol of the tokens if they both are empty
    /// @param name_ The name of the token
    /// @param symbol_ The symbol of the token
    function initialize(string memory name_, string memory symbol_) external {
        _setERC20MetadataName(name_);
        _setERC20MetadataSymbol(symbol_);
    }

    /// @inheritdoc IERC20Bridged
    function bridgeMint(address account_, uint256 amount_) external onlyBridge {
        _mint(account_, amount_);
    }

    /// @inheritdoc IERC20Bridged
    function bridgeBurn(address account_, uint256 amount_) external onlyBridge {
        _burn(account_, amount_);
    }

    /// @dev Validates that sender of the transaction is the bridge
    modifier onlyBridge() {
        if (msg.sender != bridge) {
            revert ErrorNotBridge();
        }
        _;
    }

    error ErrorNotBridge();
}

// SPDX-FileCopyrightText: 2022 Lido <[email protected]>
// SPDX-License-Identifier: GPL-3.0

pragma solidity 0.8.10;

import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";

/// @author psirex
/// @notice Extends the ERC20 functionality that allows the bridge to mint/burn tokens
interface IERC20Bridged is IERC20 {
    /// @notice Returns bridge which can mint and burn tokens on L2
    function bridge() external view returns (address);

    /// @notice Creates amount_ tokens and assigns them to account_, increasing the total supply
    /// @param account_ An address of the account to mint tokens
    /// @param amount_ An amount of tokens to mint
    function bridgeMint(address account_, uint256 amount_) external;

    /// @notice Destroys amount_ tokens from account_, reducing the total supply
    /// @param account_ An address of the account to burn tokens
    /// @param amount_ An amount of tokens to burn
    function bridgeBurn(address account_, uint256 amount_) external;
}

// SPDX-FileCopyrightText: 2022 Lido <[email protected]>
// SPDX-License-Identifier: GPL-3.0

pragma solidity 0.8.10;

import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";

/// @author psirex
/// @notice Contains the required logic of the ERC20 standard as defined in the EIP. Additionally
///     provides methods for direct allowance increasing/decreasing.
contract ERC20Core is IERC20 {
    /// @inheritdoc IERC20
    uint256 public totalSupply;

    /// @inheritdoc IERC20
    mapping(address => uint256) public balanceOf;

    /// @inheritdoc IERC20
    mapping(address => mapping(address => uint256)) public allowance;

    /// @inheritdoc IERC20
    function approve(address spender_, uint256 amount_)
        external
        returns (bool)
    {
        _approve(msg.sender, spender_, amount_);
        return true;
    }

    /// @inheritdoc IERC20
    function transfer(address to_, uint256 amount_) external returns (bool) {
        _transfer(msg.sender, to_, amount_);
        return true;
    }

    /// @inheritdoc IERC20
    function transferFrom(
        address from_,
        address to_,
        uint256 amount_
    ) external returns (bool) {
        _spendAllowance(from_, msg.sender, amount_);
        _transfer(from_, to_, amount_);
        return true;
    }

    /// @notice Atomically increases the allowance granted to spender by the caller.
    /// @param spender_ An address of the tokens spender
    /// @param addedValue_ An amount to increase the allowance
    function increaseAllowance(address spender_, uint256 addedValue_)
        external
        returns (bool)
    {
        _approve(
            msg.sender,
            spender_,
            allowance[msg.sender][spender_] + addedValue_
        );
        return true;
    }

    /// @notice Atomically decreases the allowance granted to spender by the caller.
    /// @param spender_ An address of the tokens spender
    /// @param subtractedValue_ An amount to decrease the  allowance
    function decreaseAllowance(address spender_, uint256 subtractedValue_)
        external
        returns (bool)
    {
        uint256 currentAllowance = allowance[msg.sender][spender_];
        if (currentAllowance < subtractedValue_) {
            revert ErrorDecreasedAllowanceBelowZero();
        }
        unchecked {
            _approve(msg.sender, spender_, currentAllowance - subtractedValue_);
        }
        return true;
    }

    /// @dev Moves amount_ of tokens from sender_ to recipient_
    /// @param from_ An address of the sender of the tokens
    /// @param to_  An address of the recipient of the tokens
    /// @param amount_ An amount of tokens to transfer
    function _transfer(
        address from_,
        address to_,
        uint256 amount_
    ) internal onlyNonZeroAccount(from_) onlyNonZeroAccount(to_) {
        _decreaseBalance(from_, amount_);
        balanceOf[to_] += amount_;
        emit Transfer(from_, to_, amount_);
    }

    /// @dev Updates owner_'s allowance for spender_ based on spent amount_. Does not update
    ///     the allowance amount in case of infinite allowance
    /// @param owner_ An address of the account to spend allowance
    /// @param spender_  An address of the spender of the tokens
    /// @param amount_ An amount of allowance spend
    function _spendAllowance(
        address owner_,
        address spender_,
        uint256 amount_
    ) internal {
        uint256 currentAllowance = allowance[owner_][spender_];
        if (currentAllowance == type(uint256).max) {
            return;
        }
        if (amount_ > currentAllowance) {
            revert ErrorNotEnoughAllowance();
        }
        unchecked {
            _approve(owner_, spender_, currentAllowance - amount_);
        }
    }

    /// @dev Sets amount_ as the allowance of spender_ over the owner_'s tokens
    /// @param owner_ An address of the account to set allowance
    /// @param spender_  An address of the tokens spender
    /// @param amount_ An amount of tokens to allow to spend
    function _approve(
        address owner_,
        address spender_,
        uint256 amount_
    ) internal virtual onlyNonZeroAccount(owner_) onlyNonZeroAccount(spender_) {
        allowance[owner_][spender_] = amount_;
        emit Approval(owner_, spender_, amount_);
    }

    /// @dev Creates amount_ tokens and assigns them to account_, increasing the total supply
    /// @param account_ An address of the account to mint tokens
    /// @param amount_ An amount of tokens to mint
    function _mint(address account_, uint256 amount_)
        internal
        onlyNonZeroAccount(account_)
    {
        totalSupply += amount_;
        balanceOf[account_] += amount_;
        emit Transfer(address(0), account_, amount_);
    }

    /// @dev Destroys amount_ tokens from account_, reducing the total supply.
    /// @param account_ An address of the account to mint tokens
    /// @param amount_ An amount of tokens to mint
    function _burn(address account_, uint256 amount_)
        internal
        onlyNonZeroAccount(account_)
    {
        _decreaseBalance(account_, amount_);
        totalSupply -= amount_;
        emit Transfer(account_, address(0), amount_);
    }

    /// @dev Decreases the balance of the account_
    /// @param account_ An address of the account to decrease balance
    /// @param amount_ An amount of balance decrease
    function _decreaseBalance(address account_, uint256 amount_) internal {
        uint256 balance = balanceOf[account_];

        if (amount_ > balance) {
            revert ErrorNotEnoughBalance();
        }
        unchecked {
            balanceOf[account_] = balance - amount_;
        }
    }

    /// @dev validates that account_ is not zero address
    modifier onlyNonZeroAccount(address account_) {
        if (account_ == address(0)) {
            revert ErrorAccountIsZeroAddress();
        }
        _;
    }

    error ErrorNotEnoughBalance();
    error ErrorNotEnoughAllowance();
    error ErrorAccountIsZeroAddress();
    error ErrorDecreasedAllowanceBelowZero();
}

// SPDX-FileCopyrightText: 2022 Lido <[email protected]>
// SPDX-License-Identifier: GPL-3.0

pragma solidity 0.8.10;

import {IERC20Metadata} from "./interfaces/IERC20Metadata.sol";

/// @author psirex
/// @notice Contains the optional metadata functions from the ERC20 standard
/// @dev Uses the UnstructuredStorage pattern to store dynamic name and symbol data. Might be used
///     with the upgradable proxies
contract ERC20Metadata is IERC20Metadata {
    /// @dev Stores the dynamic metadata of the ERC20 token. Allows safely use of this
    ///     contract with upgradable proxies
    struct DynamicMetadata {
        string name;
        string symbol;
    }

    /// @dev Location of the slot with DynamicMetdata
    bytes32 private constant DYNAMIC_METADATA_SLOT =
        keccak256("ERC20Metdata.dynamicMetadata");

    /// @inheritdoc IERC20Metadata
    uint8 public immutable decimals;

    /// @param name_ Name of the token
    /// @param symbol_ Symbol of the token
    /// @param decimals_ Decimals places of the token
    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_
    ) {
        decimals = decimals_;
        _setERC20MetadataName(name_);
        _setERC20MetadataSymbol(symbol_);
    }

    /// @inheritdoc IERC20Metadata
    function name() public view returns (string memory) {
        return _loadDynamicMetadata().name;
    }

    /// @inheritdoc IERC20Metadata
    function symbol() public view returns (string memory) {
        return _loadDynamicMetadata().symbol;
    }

    /// @dev Sets the name of the token. Might be called only when the name is empty
    function _setERC20MetadataName(string memory name_) internal {
        if (bytes(name()).length > 0) {
            revert ErrorNameAlreadySet();
        }
        _loadDynamicMetadata().name = name_;
    }

    /// @dev Sets the symbol of the token. Might be called only when the symbol is empty
    function _setERC20MetadataSymbol(string memory symbol_) internal {
        if (bytes(symbol()).length > 0) {
            revert ErrorSymbolAlreadySet();
        }
        _loadDynamicMetadata().symbol = symbol_;
    }

    /// @dev Returns the reference to the slot with DynamicMetadta struct
    function _loadDynamicMetadata()
        private
        pure
        returns (DynamicMetadata storage r)
    {
        bytes32 slot = DYNAMIC_METADATA_SLOT;
        assembly {
            r.slot := slot
        }
    }

    error ErrorNameAlreadySet();
    error ErrorSymbolAlreadySet();
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

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

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// SPDX-FileCopyrightText: 2022 Lido <[email protected]>
// SPDX-License-Identifier: GPL-3.0

pragma solidity 0.8.10;

/// @author psirex
/// @notice Interface for the optional metadata functions from the ERC20 standard.
interface IERC20Metadata {
    /// @dev Returns the name of the token.
    function name() external view returns (string memory);

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

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

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 100000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"address","name":"bridge_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ErrorAccountIsZeroAddress","type":"error"},{"inputs":[],"name":"ErrorDecreasedAllowanceBelowZero","type":"error"},{"inputs":[],"name":"ErrorNameAlreadySet","type":"error"},{"inputs":[],"name":"ErrorNotBridge","type":"error"},{"inputs":[],"name":"ErrorNotEnoughAllowance","type":"error"},{"inputs":[],"name":"ErrorNotEnoughBalance","type":"error"},{"inputs":[],"name":"ErrorSymbolAlreadySet","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":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bridge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"bridgeBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"bridgeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender_","type":"address"},{"internalType":"uint256","name":"subtractedValue_","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender_","type":"address"},{"internalType":"uint256","name":"addedValue_","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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"}]

60c06040523480156200001157600080fd5b50604051620014653803806200146583398101604081905262000034916200035e565b60ff821660805283838362000049836200006d565b6200005482620000c0565b5050506001600160a01b031660a052506200043f915050565b60006200007962000121565b5111156200009a5760405163377d5ae560e01b815260040160405180910390fd5b80600080516020620014458339815191528151620000bc9260200190620001eb565b5050565b6000620000cc620001c9565b511115620000ed57604051631e0e985160e11b815260040160405180910390fd5b8051620000bc907f3470f8373d566de7ab61e14a030ae865a1f164b610b931eb8aa08ad044e2e68f906020840190620001eb565b6060600080516020620014458339815191528054620001409062000402565b80601f01602080910402602001604051908101604052809291908181526020018280546200016e9062000402565b8015620001bf5780601f106200019357610100808354040283529160200191620001bf565b820191906000526020600020905b815481529060010190602001808311620001a157829003601f168201915b5050505050905090565b6060600080516020620014458339815191526001018054620001409062000402565b828054620001f99062000402565b90600052602060002090601f0160209004810192826200021d576000855562000268565b82601f106200023857805160ff191683800117855562000268565b8280016001018555821562000268579182015b82811115620002685782518255916020019190600101906200024b565b50620002769291506200027a565b5090565b5b808211156200027657600081556001016200027b565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002b957600080fd5b81516001600160401b0380821115620002d657620002d662000291565b604051601f8301601f19908116603f0116810190828211818310171562000301576200030162000291565b816040528381526020925086838588010111156200031e57600080fd5b600091505b8382101562000342578582018301518183018401529082019062000323565b83821115620003545760008385830101525b9695505050505050565b600080600080608085870312156200037557600080fd5b84516001600160401b03808211156200038d57600080fd5b6200039b88838901620002a7565b95506020870151915080821115620003b257600080fd5b50620003c187828801620002a7565b935050604085015160ff81168114620003d957600080fd5b60608601519092506001600160a01b0381168114620003f757600080fd5b939692955090935050565b600181811c908216806200041757607f821691505b602082108114156200043957634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051610fd2620004736000396000818161026a01528181610411015261048a0152600061016a0152610fd26000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a0823111610097578063a457c2d711610066578063a457c2d714610214578063a9059cbb14610227578063dd62ed3e1461023a578063e78cea921461026557600080fd5b806370a08231146101c657806374f4f547146101e65780638c2a993e146101f957806395d89b411461020c57600080fd5b806323b872dd116100d357806323b872dd14610152578063313ce56714610165578063395093511461019e5780634cd88b76146101b157600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102b1565b60405161010f9190610c55565b60405180910390f35b61012b610126366004610cf1565b610362565b604051901515815260200161010f565b61014460005481565b60405190815260200161010f565b61012b610160366004610d1b565b610378565b61018c7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff909116815260200161010f565b61012b6101ac366004610cf1565b61039a565b6101c46101bf366004610e31565b6103e3565b005b6101446101d4366004610e95565b60016020526000908152604090205481565b6101c46101f4366004610cf1565b6103f9565b6101c4610207366004610cf1565b610472565b6101026104eb565b61012b610222366004610cf1565b61051c565b61012b610235366004610cf1565b610594565b610144610248366004610eb7565b600260209081526000928352604080842090915290825290205481565b61028c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b60607f3470f8373d566de7ab61e14a030ae865a1f164b610b931eb8aa08ad044e2e68e80546102df90610eea565b80601f016020809104026020016040519081016040528092919081815260200182805461030b90610eea565b80156103585780601f1061032d57610100808354040283529160200191610358565b820191906000526020600020905b81548152906001019060200180831161033b57829003601f168201915b5050505050905090565b600061036f3384846105a1565b50600192915050565b60006103858433846106ae565b61039084848461075c565b5060019392505050565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161036f9185906103de908690610f6d565b6105a1565b6103ec8261089d565b6103f581610911565b5050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610468576040517fb5f1e21f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103f58282610986565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146104e1576040517fb5f1e21f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103f58282610a48565b60607f3470f8373d566de7ab61e14a030ae865a1f164b610b931eb8aa08ad044e2e68e60010180546102df90610eea565b33600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610587576040517f82e5f5dc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61039033858584036105a1565b600061036f33848461075c565b8273ffffffffffffffffffffffffffffffffffffffff81166105ef576040517fef6b416200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff811661063d576040517fef6b416200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85811660008181526002602090815260408083209489168084529482529182902087905590518681527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35050505050565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600260209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81141561070f5750505050565b80821115610749576040517fc213972500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075684848484036105a1565b50505050565b8273ffffffffffffffffffffffffffffffffffffffff81166107aa576040517fef6b416200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff81166107f8576040517fef6b416200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108028584610b31565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604081208054859290610837908490610f6d565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161069f91815260200190565b60006108a76102b1565b5111156108e0576040517f377d5ae500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b807f3470f8373d566de7ab61e14a030ae865a1f164b610b931eb8aa08ad044e2e68e81516103f59260200190610bbc565b600061091b6104eb565b511115610954576040517f3c1d30a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516103f5907f3470f8373d566de7ab61e14a030ae865a1f164b610b931eb8aa08ad044e2e68f906020840190610bbc565b8173ffffffffffffffffffffffffffffffffffffffff81166109d4576040517fef6b416200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109de8383610b31565b816000808282546109ef9190610f85565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a3505050565b8173ffffffffffffffffffffffffffffffffffffffff8116610a96576040517fef6b416200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600080828254610aa79190610f6d565b909155505073ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081208054849290610ae1908490610f6d565b909155505060405182815273ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610a3b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205480821115610b90576040517eb284f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff909216600090815260016020526040902091039055565b828054610bc890610eea565b90600052602060002090601f016020900481019282610bea5760008555610c30565b82601f10610c0357805160ff1916838001178555610c30565b82800160010185558215610c30579182015b82811115610c30578251825591602001919060010190610c15565b50610c3c929150610c40565b5090565b5b80821115610c3c5760008155600101610c41565b600060208083528351808285015260005b81811015610c8257858101830151858201604001528201610c66565b81811115610c94576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610cec57600080fd5b919050565b60008060408385031215610d0457600080fd5b610d0d83610cc8565b946020939093013593505050565b600080600060608486031215610d3057600080fd5b610d3984610cc8565b9250610d4760208501610cc8565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112610d9757600080fd5b813567ffffffffffffffff80821115610db257610db2610d57565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610df857610df8610d57565b81604052838152866020858801011115610e1157600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610e4457600080fd5b823567ffffffffffffffff80821115610e5c57600080fd5b610e6886838701610d86565b93506020850135915080821115610e7e57600080fd5b50610e8b85828601610d86565b9150509250929050565b600060208284031215610ea757600080fd5b610eb082610cc8565b9392505050565b60008060408385031215610eca57600080fd5b610ed383610cc8565b9150610ee160208401610cc8565b90509250929050565b600181811c90821680610efe57607f821691505b60208210811415610f38577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610f8057610f80610f3e565b500190565b600082821015610f9757610f97610f3e565b50039056fea26469706673582212203cf7a7195c4e1da47689e3c0364bd185b2e60637d8444ccc7d885c6f00b3fae064736f6c634300080a00333470f8373d566de7ab61e14a030ae865a1f164b610b931eb8aa08ad044e2e68e000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000fc3de4b1bbcb315880d328e3f9c81d742d73d01000000000000000000000000000000000000000000000000000000000000001f57726170706564206c6971756964207374616b656420457468657220322e300000000000000000000000000000000000000000000000000000000000000000067773744554480000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a0823111610097578063a457c2d711610066578063a457c2d714610214578063a9059cbb14610227578063dd62ed3e1461023a578063e78cea921461026557600080fd5b806370a08231146101c657806374f4f547146101e65780638c2a993e146101f957806395d89b411461020c57600080fd5b806323b872dd116100d357806323b872dd14610152578063313ce56714610165578063395093511461019e5780634cd88b76146101b157600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102b1565b60405161010f9190610c55565b60405180910390f35b61012b610126366004610cf1565b610362565b604051901515815260200161010f565b61014460005481565b60405190815260200161010f565b61012b610160366004610d1b565b610378565b61018c7f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff909116815260200161010f565b61012b6101ac366004610cf1565b61039a565b6101c46101bf366004610e31565b6103e3565b005b6101446101d4366004610e95565b60016020526000908152604090205481565b6101c46101f4366004610cf1565b6103f9565b6101c4610207366004610cf1565b610472565b6101026104eb565b61012b610222366004610cf1565b61051c565b61012b610235366004610cf1565b610594565b610144610248366004610eb7565b600260209081526000928352604080842090915290825290205481565b61028c7f0000000000000000000000000fc3de4b1bbcb315880d328e3f9c81d742d73d0181565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b60607f3470f8373d566de7ab61e14a030ae865a1f164b610b931eb8aa08ad044e2e68e80546102df90610eea565b80601f016020809104026020016040519081016040528092919081815260200182805461030b90610eea565b80156103585780601f1061032d57610100808354040283529160200191610358565b820191906000526020600020905b81548152906001019060200180831161033b57829003601f168201915b5050505050905090565b600061036f3384846105a1565b50600192915050565b60006103858433846106ae565b61039084848461075c565b5060019392505050565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161036f9185906103de908690610f6d565b6105a1565b6103ec8261089d565b6103f581610911565b5050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000fc3de4b1bbcb315880d328e3f9c81d742d73d011614610468576040517fb5f1e21f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103f58282610986565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000fc3de4b1bbcb315880d328e3f9c81d742d73d0116146104e1576040517fb5f1e21f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103f58282610a48565b60607f3470f8373d566de7ab61e14a030ae865a1f164b610b931eb8aa08ad044e2e68e60010180546102df90610eea565b33600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610587576040517f82e5f5dc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61039033858584036105a1565b600061036f33848461075c565b8273ffffffffffffffffffffffffffffffffffffffff81166105ef576040517fef6b416200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff811661063d576040517fef6b416200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85811660008181526002602090815260408083209489168084529482529182902087905590518681527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35050505050565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600260209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81141561070f5750505050565b80821115610749576040517fc213972500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075684848484036105a1565b50505050565b8273ffffffffffffffffffffffffffffffffffffffff81166107aa576040517fef6b416200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff81166107f8576040517fef6b416200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108028584610b31565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604081208054859290610837908490610f6d565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161069f91815260200190565b60006108a76102b1565b5111156108e0576040517f377d5ae500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b807f3470f8373d566de7ab61e14a030ae865a1f164b610b931eb8aa08ad044e2e68e81516103f59260200190610bbc565b600061091b6104eb565b511115610954576040517f3c1d30a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516103f5907f3470f8373d566de7ab61e14a030ae865a1f164b610b931eb8aa08ad044e2e68f906020840190610bbc565b8173ffffffffffffffffffffffffffffffffffffffff81166109d4576040517fef6b416200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109de8383610b31565b816000808282546109ef9190610f85565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a3505050565b8173ffffffffffffffffffffffffffffffffffffffff8116610a96576040517fef6b416200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600080828254610aa79190610f6d565b909155505073ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081208054849290610ae1908490610f6d565b909155505060405182815273ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610a3b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205480821115610b90576040517eb284f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff909216600090815260016020526040902091039055565b828054610bc890610eea565b90600052602060002090601f016020900481019282610bea5760008555610c30565b82601f10610c0357805160ff1916838001178555610c30565b82800160010185558215610c30579182015b82811115610c30578251825591602001919060010190610c15565b50610c3c929150610c40565b5090565b5b80821115610c3c5760008155600101610c41565b600060208083528351808285015260005b81811015610c8257858101830151858201604001528201610c66565b81811115610c94576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610cec57600080fd5b919050565b60008060408385031215610d0457600080fd5b610d0d83610cc8565b946020939093013593505050565b600080600060608486031215610d3057600080fd5b610d3984610cc8565b9250610d4760208501610cc8565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112610d9757600080fd5b813567ffffffffffffffff80821115610db257610db2610d57565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610df857610df8610d57565b81604052838152866020858801011115610e1157600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610e4457600080fd5b823567ffffffffffffffff80821115610e5c57600080fd5b610e6886838701610d86565b93506020850135915080821115610e7e57600080fd5b50610e8b85828601610d86565b9150509250929050565b600060208284031215610ea757600080fd5b610eb082610cc8565b9392505050565b60008060408385031215610eca57600080fd5b610ed383610cc8565b9150610ee160208401610cc8565b90509250929050565b600181811c90821680610efe57607f821691505b60208210811415610f38577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610f8057610f80610f3e565b500190565b600082821015610f9757610f97610f3e565b50039056fea26469706673582212203cf7a7195c4e1da47689e3c0364bd185b2e60637d8444ccc7d885c6f00b3fae064736f6c634300080a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000fc3de4b1bbcb315880d328e3f9c81d742d73d01000000000000000000000000000000000000000000000000000000000000001f57726170706564206c6971756964207374616b656420457468657220322e300000000000000000000000000000000000000000000000000000000000000000067773744554480000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Wrapped liquid staked Ether 2.0
Arg [1] : symbol_ (string): wstETH
Arg [2] : decimals_ (uint8): 18
Arg [3] : bridge_ (address): 0x0fc3De4B1bbcB315880d328e3f9C81d742D73d01

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000fc3de4b1bbcb315880d328e3f9c81d742d73d01
Arg [4] : 000000000000000000000000000000000000000000000000000000000000001f
Arg [5] : 57726170706564206c6971756964207374616b656420457468657220322e3000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [7] : 7773744554480000000000000000000000000000000000000000000000000000


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
[ 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.

OSZAR »