Contract 0x4200000000000000000000000000000000000012 3

 

Contract Overview

Balance:
0 Ether

EtherValue:
$0.00
Txn Hash Method
Index
From
To
Value
0xfa80891daa28d3e870043178181671c90210c32136610c698401d031fbbb8c52Create Standard ...135920212022-07-01 5:14:401 day 20 hrs ago0x18c6a47aca1c6a237e53ed2fc3a8fb392c97169b IN 0x42000000000000000000000000000000000000120 Ether0.0000821176370.0012
0x04b984ce1987b85205ca751fbbed0e196b8c47d90034a42941ed2ce7a77e1239Create Standard ...131783552022-06-26 18:26:036 days 7 hrs ago0x3417b990c9e210ede355977f161deaf874ee6093 IN 0x42000000000000000000000000000000000000120 Ether0.0002413864940.001
0xba6c21d3483ff8c1398a2217d6fc09f8dc074904e005b21216211de4a78329e5Create Standard ...117486692022-06-14 13:23:2418 days 12 hrs ago0x3f579673b2664b0c72e17d6877748371de71314d IN 0x42000000000000000000000000000000000000120 Ether0.0001686144440.001
0x344f9803a5854557bffe2ce1fbaa7dc22a2a36a29aaf7ee58171b6925f208cdeCreate Standard ...111894512022-06-10 22:07:5322 days 3 hrs ago0x7f3b192ab3220940d66236792f3ebdb0e4e74138 IN 0x42000000000000000000000000000000000000120 Ether0.0003409208660.001
0x6da920cf521427eb30d92a223914f385450b169f0661f42af9543dd73f9f4ff3Create Standard ...102644512022-06-02 13:22:2830 days 12 hrs ago0x5bdb37d0ddea3a90f233c7b7f6b9394b6b2eef34 IN 0x42000000000000000000000000000000000000120 Ether0.0002339016460.001
0x04f615958423cb0529d535fe828594af984dc2c0191a2853760f8c89b54dd4fbCreate Standard ...91799852022-05-28 5:26:5335 days 20 hrs ago0x4bed464ce9d43758e826cfa173f1cda82964b894 IN 0x42000000000000000000000000000000000000120 Ether0.0000619954190.001
0x37056601e7d6d4cca6465f1f0c4110f9d6dae922b62a450cbd5beb95093961d2Create Standard ...91589852022-05-27 20:38:3436 days 5 hrs ago0xc253af7b80f3dd3d469bf4b94aa9e3df59e71e43 IN 0x42000000000000000000000000000000000000120 Ether0.0002398922880.001
0xc2d02e7167908db3422b167a31b02bbef0075ee77010a9fd431560850bb1afb1Create Standard ...88410102022-05-23 13:33:3340 days 12 hrs ago0x71ca8604e8e253e68ba622aed24b2412a0a37fc6 IN 0x42000000000000000000000000000000000000120 Ether0.0001762711610.001
0x9af12a7d00f0c1086294f00d81ac48123d45255318e8496fbe366e4e937c18cbCreate Standard ...88283252022-05-23 9:46:4540 days 16 hrs ago0xd31f9113fdb5bd97d7ddf969f15956808db4a6fb IN 0x42000000000000000000000000000000000000120 Ether0.0000956537270.001
0x01cb8efc6787c0fcde6246b0d985d57de150e7b3a3b54afa48d32182155939fbCreate Standard ...87658622022-05-22 7:34:0641 days 18 hrs ago0x4a56a3ef7bf8dfa2d427ced3765e4d546fa941f6 IN 0x42000000000000000000000000000000000000120 Ether0.0001049502330.001
0x228553d4a8d9e60d5ee66a9c49fd325d383084e9d08322fecdacc29faf4c06aaCreate Standard ...84719472022-05-17 14:34:5746 days 11 hrs ago0xbfdffcd81a3796f55b476b36937253fa6267644b IN 0x42000000000000000000000000000000000000120 Ether00.001
0x7db416d6882e32e7eea21f4e1c6a36169d5b0d5e34b84f32eb710e431e836b00Create Standard ...83428032022-05-15 17:31:3648 days 8 hrs ago0xa80481e3f9098602954b2e5cf306e6dee053ef3e IN 0x42000000000000000000000000000000000000120 Ether0.0001838730630.001
0x5b0cd9cec9f0058bc419ba09d5fda7fb1caeb242ba36933f1b8dd5aadb56bb55Create Standard ...75077112022-05-09 18:39:2554 days 7 hrs ago0x4fbe899d37fb7514adf2f41b0630e018ec275a0c IN 0x42000000000000000000000000000000000000120 Ether0.0006775780280.001
0xe7063c72b08c18b8ec2484165d86c8d0b8fe8823673217950106fa09d94e9522Create Standard ...71929962022-05-06 8:29:1757 days 17 hrs ago0x8f73be66ca8c79382f72139be03746343bf5faa0 IN 0x42000000000000000000000000000000000000120 Ether0.0001604621570.001
0x2a151240670fc21074d64226ee12eca28520340401b10f4ef6c72551974e68ebCreate Standard ...69605582022-05-03 3:22:5560 days 22 hrs ago0xbe9228ce3b7ed30c8646143d0e56ee16fec6c07c IN 0x42000000000000000000000000000000000000120 Ether0.0009367634550.001
0xaa4b52b8e0ff51ec7205b24a7ef0215f59707de43b2c6e04cd032de5b6faced0Create Standard ...68560482022-05-01 9:41:3962 days 16 hrs ago0xce73904422880604e78591fd6c758b0d5106dd50 IN 0x42000000000000000000000000000000000000120 Ether0.0001632999790.001
0x8d49d5c21b53c8246a018d240459098c7217a0839cd51d0746e42f9c23ef9bd2Create Standard ...60173252022-04-19 13:47:4574 days 12 hrs ago0x76577d204a5bd63b6d006222429c4d5124f4619c IN 0x42000000000000000000000000000000000000120 Ether0.0002283590580.001
0x0d697648bedbefb74dd155b552f8102924f54c6275d5ab42332592a1578a236aCreate Standard ...59850122022-04-18 18:09:5175 days 7 hrs ago0x4a7016c0b1edb6e3a28038b361cb59f1f0592d02 IN 0x42000000000000000000000000000000000000120 Ether0.0003882187740.001
0xd3657e97fdead61d6f95588d638bed1216a8281661ba35625ff1c05b0f47e66bCreate Standard ...55539772022-04-08 23:42:4285 days 2 hrs ago0xc0fae775118bbd6431cee8e0d0ba5e404ed30f07 IN 0x42000000000000000000000000000000000000120 Ether0.0002465453670.001
0x1437d3271366408b2fbf44fc6fc435ad9116bf13dbfd56f71b5042a16a364a6eCreate Standard ...45622062022-03-18 7:09:38106 days 18 hrs ago0x47996cb1fc9c3b0a2f968a3f28089a4f73c4b53c IN 0x42000000000000000000000000000000000000120 Ether0.0002381718120.001
0x589d525d9cc303182d386f3ccb47d1c95256608cab599caddf85ddd515eb3a7fCreate Standard ...45390612022-03-17 10:39:52107 days 15 hrs ago0xaaa6640f36ae35d61ce5e6f2a3c8975d07d1ab90 IN 0x42000000000000000000000000000000000000120 Ether0.0000864506750.001
0xc95731dfc728a6bf14d20c9f1abc2cc08e83ec4a2f21c43017b7f40b4d1c0162Create Standard ...43519502022-03-11 7:02:17113 days 18 hrs ago0x3cdb9bc080efe321a797e7286d302b90227cc6de IN 0x42000000000000000000000000000000000000120 Ether0.0001276731350.001
0xcd5220e1ddfcd70bce4bff379fb9b0455e4139f31ecc70d3705c762e7661e62aCreate Standard ...41250802022-03-04 17:38:08120 days 8 hrs ago0x7a1285a7381a3099bfe6706549859316e6f90e6a IN 0x42000000000000000000000000000000000000120 Ether0.0003807709010.001
0x1e3931af98ab867a0111364635210bd51ae2ace12f1cad99cf628335c0e4c551Create Standard ...40532452022-03-02 11:06:19122 days 14 hrs ago0x39e5351e6ce3c4b19b8b0a2f5c82c511782457be IN 0x42000000000000000000000000000000000000120 Ether0.0001572940470.001
0x3d1a0724fb10655d50e0c5503cf14114b17d2252a9d02623437c2145784508aeCreate Standard ...40469982022-03-02 6:41:05122 days 19 hrs ago0xc8cd7f968783aabacea27cae364572a4ba633467 IN 0x42000000000000000000000000000000000000120 Ether0.0002129457630.001
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xfa80891daa28d3e870043178181671c90210c32136610c698401d031fbbb8c52135920212022-07-01 5:14:401 day 20 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x04b984ce1987b85205ca751fbbed0e196b8c47d90034a42941ed2ce7a77e1239131783552022-06-26 18:26:036 days 7 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0xba6c21d3483ff8c1398a2217d6fc09f8dc074904e005b21216211de4a78329e5117486692022-06-14 13:23:2418 days 12 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x344f9803a5854557bffe2ce1fbaa7dc22a2a36a29aaf7ee58171b6925f208cde111894512022-06-10 22:07:5322 days 3 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x6da920cf521427eb30d92a223914f385450b169f0661f42af9543dd73f9f4ff3102644512022-06-02 13:22:2830 days 12 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x04f615958423cb0529d535fe828594af984dc2c0191a2853760f8c89b54dd4fb91799852022-05-28 5:26:5335 days 20 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x37056601e7d6d4cca6465f1f0c4110f9d6dae922b62a450cbd5beb95093961d291589852022-05-27 20:38:3436 days 5 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0xc2d02e7167908db3422b167a31b02bbef0075ee77010a9fd431560850bb1afb188410102022-05-23 13:33:3340 days 12 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x9af12a7d00f0c1086294f00d81ac48123d45255318e8496fbe366e4e937c18cb88283252022-05-23 9:46:4540 days 16 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x01cb8efc6787c0fcde6246b0d985d57de150e7b3a3b54afa48d32182155939fb87658622022-05-22 7:34:0641 days 18 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x228553d4a8d9e60d5ee66a9c49fd325d383084e9d08322fecdacc29faf4c06aa84719472022-05-17 14:34:5746 days 11 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x7db416d6882e32e7eea21f4e1c6a36169d5b0d5e34b84f32eb710e431e836b0083428032022-05-15 17:31:3648 days 8 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x5b0cd9cec9f0058bc419ba09d5fda7fb1caeb242ba36933f1b8dd5aadb56bb5575077112022-05-09 18:39:2554 days 7 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0xe7063c72b08c18b8ec2484165d86c8d0b8fe8823673217950106fa09d94e952271929962022-05-06 8:29:1757 days 17 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x2a151240670fc21074d64226ee12eca28520340401b10f4ef6c72551974e68eb69605582022-05-03 3:22:5560 days 22 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0xaa4b52b8e0ff51ec7205b24a7ef0215f59707de43b2c6e04cd032de5b6faced068560482022-05-01 9:41:3962 days 16 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x8d49d5c21b53c8246a018d240459098c7217a0839cd51d0746e42f9c23ef9bd260173252022-04-19 13:47:4574 days 12 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x0d697648bedbefb74dd155b552f8102924f54c6275d5ab42332592a1578a236a59850122022-04-18 18:09:5175 days 7 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0xd3657e97fdead61d6f95588d638bed1216a8281661ba35625ff1c05b0f47e66b55539772022-04-08 23:42:4285 days 2 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x1437d3271366408b2fbf44fc6fc435ad9116bf13dbfd56f71b5042a16a364a6e45622062022-03-18 7:09:38106 days 18 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x589d525d9cc303182d386f3ccb47d1c95256608cab599caddf85ddd515eb3a7f45390612022-03-17 10:39:52107 days 15 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0xc95731dfc728a6bf14d20c9f1abc2cc08e83ec4a2f21c43017b7f40b4d1c016243519502022-03-11 7:02:17113 days 18 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0xcd5220e1ddfcd70bce4bff379fb9b0455e4139f31ecc70d3705c762e7661e62a41250802022-03-04 17:38:08120 days 8 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x1e3931af98ab867a0111364635210bd51ae2ace12f1cad99cf628335c0e4c55140532452022-03-02 11:06:19122 days 14 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
0x3d1a0724fb10655d50e0c5503cf14114b17d2252a9d02623437c2145784508ae40469982022-03-02 6:41:05122 days 19 hrs ago 0x4200000000000000000000000000000000000012  Contract Creation0 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Genesis Bytecode Match Only)

Contract Name:
L2StandardTokenFactory

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion
File 1 of 9 : L2StandardTokenFactory.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

/* Contract Imports */
import { L2StandardERC20 } from "../../standards/L2StandardERC20.sol";
import { Lib_PredeployAddresses } from "../../libraries/constants/Lib_PredeployAddresses.sol";

/**
 * @title L2StandardTokenFactory
 * @dev Factory contract for creating standard L2 token representations of L1 ERC20s
 * compatible with and working on the standard bridge.
 */
contract L2StandardTokenFactory {
    event StandardL2TokenCreated(address indexed _l1Token, address indexed _l2Token);

    /**
     * @dev Creates an instance of the standard ERC20 token on L2.
     * @param _l1Token Address of the corresponding L1 token.
     * @param _name ERC20 name.
     * @param _symbol ERC20 symbol.
     */
    function createStandardL2Token(
        address _l1Token,
        string memory _name,
        string memory _symbol
    ) external {
        require(_l1Token != address(0), "Must provide L1 token address");

        L2StandardERC20 l2Token = new L2StandardERC20(
            Lib_PredeployAddresses.L2_STANDARD_BRIDGE,
            _l1Token,
            _name,
            _symbol
        );

        emit StandardL2TokenCreated(_l1Token, address(l2Token));
    }
}

File 2 of 9 : L2StandardERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

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

contract L2StandardERC20 is IL2StandardERC20, ERC20 {
    address public l1Token;
    address public l2Bridge;

    /**
     * @param _l2Bridge Address of the L2 standard bridge.
     * @param _l1Token Address of the corresponding L1 token.
     * @param _name ERC20 name.
     * @param _symbol ERC20 symbol.
     */
    constructor(
        address _l2Bridge,
        address _l1Token,
        string memory _name,
        string memory _symbol
    ) ERC20(_name, _symbol) {
        l1Token = _l1Token;
        l2Bridge = _l2Bridge;
    }

    modifier onlyL2Bridge() {
        require(msg.sender == l2Bridge, "Only L2 Bridge can mint and burn");
        _;
    }

    function supportsInterface(bytes4 _interfaceId) public pure returns (bool) {
        bytes4 firstSupportedInterface = bytes4(keccak256("supportsInterface(bytes4)")); // ERC165
        bytes4 secondSupportedInterface = IL2StandardERC20.l1Token.selector ^
            IL2StandardERC20.mint.selector ^
            IL2StandardERC20.burn.selector;
        return _interfaceId == firstSupportedInterface || _interfaceId == secondSupportedInterface;
    }

    function mint(address _to, uint256 _amount) public virtual onlyL2Bridge {
        _mint(_to, _amount);

        emit Mint(_to, _amount);
    }

    function burn(address _from, uint256 _amount) public virtual onlyL2Bridge {
        _burn(_from, _amount);

        emit Burn(_from, _amount);
    }
}

File 3 of 9 : Lib_PredeployAddresses.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

/**
 * @title Lib_PredeployAddresses
 */
library Lib_PredeployAddresses {
    address internal constant L2_TO_L1_MESSAGE_PASSER = 0x4200000000000000000000000000000000000000;
    address internal constant L1_MESSAGE_SENDER = 0x4200000000000000000000000000000000000001;
    address internal constant DEPLOYER_WHITELIST = 0x4200000000000000000000000000000000000002;
    address payable internal constant OVM_ETH = payable(0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000);
    address internal constant L2_CROSS_DOMAIN_MESSENGER =
        0x4200000000000000000000000000000000000007;
    address internal constant LIB_ADDRESS_MANAGER = 0x4200000000000000000000000000000000000008;
    address internal constant PROXY_EOA = 0x4200000000000000000000000000000000000009;
    address internal constant L2_STANDARD_BRIDGE = 0x4200000000000000000000000000000000000010;
    address internal constant SEQUENCER_FEE_WALLET = 0x4200000000000000000000000000000000000011;
    address internal constant L2_STANDARD_TOKEN_FACTORY =
        0x4200000000000000000000000000000000000012;
    address internal constant L1_BLOCK_NUMBER = 0x4200000000000000000000000000000000000013;
}

File 4 of 9 : ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 5 of 9 : IL2StandardERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

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

interface IL2StandardERC20 is IERC20, IERC165 {
    function l1Token() external returns (address);

    function mint(address _to, uint256 _amount) external;

    function burn(address _from, uint256 _amount) external;

    event Mint(address indexed _account, uint256 _amount);
    event Burn(address indexed _account, uint256 _amount);
}

File 6 of 9 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @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);
}

File 7 of 9 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @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);
}

File 8 of 9 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 9 of 9 : IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * 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[EIP 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);
}

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

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_l1Token","type":"address"},{"indexed":true,"internalType":"address","name":"_l2Token","type":"address"}],"name":"StandardL2TokenCreated","type":"event"},{"inputs":[{"internalType":"address","name":"_l1Token","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"createStandardL2Token","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506004361061002b5760003560e01c8063896f93d114610030575b600080fd5b61004361003e36600461025f565b610045565b005b73ffffffffffffffffffffffffffffffffffffffff83166100c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d7573742070726f76696465204c3120746f6b656e2061646472657373000000604482015260640160405180910390fd5b60007342000000000000000000000000000000000000108484846040516100ec90610178565b6100f99493929190610359565b604051809103906000f080158015610115573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf60405160405180910390a350505050565b6113d7806103b083390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126101c557600080fd5b813567ffffffffffffffff808211156101e0576101e0610185565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561022657610226610185565b8160405283815286602085880101111561023f57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561027457600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461029857600080fd5b9250602084013567ffffffffffffffff808211156102b557600080fd5b6102c1878388016101b4565b935060408601359150808211156102d757600080fd5b506102e4868287016101b4565b9150509250925092565b6000815180845260005b81811015610314576020818501810151868301820152016102f8565b81811115610326576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261039260808301856102ee565b82810360608401526103a481856102ee565b97965050505050505056fe60806040523480156200001157600080fd5b50604051620013d7380380620013d783398101604081905262000034916200022f565b8151829082906200004d9060039060208501906200009f565b508051620000639060049060208401906200009f565b5050600580546001600160a01b039586166001600160a01b031991821617909155600680549690951695169490941790925550620002fc915050565b828054620000ad90620002bf565b90600052602060002090601f016020900481019282620000d157600085556200011c565b82601f10620000ec57805160ff19168380011785556200011c565b828001600101855582156200011c579182015b828111156200011c578251825591602001919060010190620000ff565b506200012a9291506200012e565b5090565b5b808211156200012a57600081556001016200012f565b80516001600160a01b03811681146200015d57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200018a57600080fd5b81516001600160401b0380821115620001a757620001a762000162565b604051601f8301601f19908116603f01168101908282118183101715620001d257620001d262000162565b81604052838152602092508683858801011115620001ef57600080fd5b600091505b83821015620002135785820183015181830184015290820190620001f4565b83821115620002255760008385830101525b9695505050505050565b600080600080608085870312156200024657600080fd5b620002518562000145565b9350620002616020860162000145565b60408601519093506001600160401b03808211156200027f57600080fd5b6200028d8883890162000178565b93506060870151915080821115620002a457600080fd5b50620002b38782880162000178565b91505092959194509250565b600181811c90821680620002d457607f821691505b60208210811415620002f657634e487b7160e01b600052602260045260246000fd5b50919050565b6110cb806200030c6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a9059cbb11610066578063a9059cbb14610215578063ae1f6aaf14610228578063c01e1bd61461026d578063dd62ed3e1461028d57600080fd5b806370a08231146101b157806395d89b41146101e75780639dc29fac146101ef578063a457c2d71461020257600080fd5b806323b872dd116100d357806323b872dd14610167578063313ce5671461017a578063395093511461018957806340c10f191461019c57600080fd5b806301ffc9a71461010557806306fdde031461012d578063095ea7b31461014257806318160ddd14610155575b600080fd5b610118610113366004610e4a565b6102d3565b60405190151581526020015b60405180910390f35b610135610393565b6040516101249190610e93565b610118610150366004610f2f565b610425565b6002545b604051908152602001610124565b610118610175366004610f59565b61043b565b60405160128152602001610124565b610118610197366004610f2f565b61050c565b6101af6101aa366004610f2f565b610555565b005b6101596101bf366004610f95565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61013561061a565b6101af6101fd366004610f2f565b610629565b610118610210366004610f2f565b6106e2565b610118610223366004610f2f565b6107a0565b6006546102489073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b6005546102489073ffffffffffffffffffffffffffffffffffffffff1681565b61015961029b366004610fb0565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e27f1d1d8b63000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000084167f01ffc9a700000000000000000000000000000000000000000000000000000000148061038b57507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b949350505050565b6060600380546103a290610fe3565b80601f01602080910402602001604051908101604052809291908181526020018280546103ce90610fe3565b801561041b5780601f106103f05761010080835404028352916020019161041b565b820191906000526020600020905b8154815290600101906020018083116103fe57829003601f168201915b5050505050905090565b60006104323384846107ad565b50600192915050565b600061044884848461092d565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452909152902054828110156104f45760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61050185338584036107ad565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091610432918590610550908690611066565b6107ad565b60065473ffffffffffffffffffffffffffffffffffffffff1633146105bc5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e60448201526064016104eb565b6105c68282610b93565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161060e91815260200190565b60405180910390a25050565b6060600480546103a290610fe3565b60065473ffffffffffffffffffffffffffffffffffffffff1633146106905760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e60448201526064016104eb565b61069a8282610c99565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161060e91815260200190565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107895760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016104eb565b61079633858584036107ad565b5060019392505050565b600061043233848461092d565b73ffffffffffffffffffffffffffffffffffffffff83166108355760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016104eb565b73ffffffffffffffffffffffffffffffffffffffff82166108be5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016104eb565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109b65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104eb565b73ffffffffffffffffffffffffffffffffffffffff8216610a3f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016104eb565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610adb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016104eb565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b1f908490611066565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b8591815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610bf65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104eb565b8060026000828254610c089190611066565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610c42908490611066565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610d225760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104eb565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610dbe5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016104eb565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610dfa90849061107e565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610920565b600060208284031215610e5c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e8c57600080fd5b9392505050565b600060208083528351808285015260005b81811015610ec057858101830151858201604001528201610ea4565b81811115610ed2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2a57600080fd5b919050565b60008060408385031215610f4257600080fd5b610f4b83610f06565b946020939093013593505050565b600080600060608486031215610f6e57600080fd5b610f7784610f06565b9250610f8560208501610f06565b9150604084013590509250925092565b600060208284031215610fa757600080fd5b610e8c82610f06565b60008060408385031215610fc357600080fd5b610fcc83610f06565b9150610fda60208401610f06565b90509250929050565b600181811c90821680610ff757607f821691505b60208210811415611031577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561107957611079611037565b500190565b60008282101561109057611090611037565b50039056fea2646970667358221220cf6f2a647337a3023928b1f0a8286454f8c5755dd6ed9bb72c21a4693b3d555b64736f6c63430008090033a2646970667358221220d25f3d165a89f0bc274146004a24b160de674161cd5eab2f530c4ea8c0276af764736f6c63430008090033

Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.