Contract 0x1337420dED5ADb9980CFc35f8f2B054ea86f8aB1 5

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x11236f842fced1c527c378f3e4f1be06620b71cbac2e8a87f1f36c3b5748e275Approve2242400942024-06-21 16:25:157 mins ago0x6bbe2a963525b8e9739d294efc6521872d1f3530 IN  Subsquid: SQD Token0 ETH0.000000570.012387
0xed2b7277013b0880db363e35befadb200cc7f929673dcffccaf4fc7033b41ac3Transfer2242393722024-06-21 16:22:1110 mins ago0xe952af3ceb8df334a0dc5919c819da95f1d439f7 IN  Subsquid: SQD Token0 ETH0.00000034 0.01
0x484b5c6d7faad67e9a67d0dff179fa6521fb53c9eaff4e54a4bfb782ee145453Approve2242388332024-06-21 16:19:5612 mins ago0xe007dadbca4e6021b4468844fc2296cbb4ee8f8c IN  Subsquid: SQD Token0 ETH0.00000055 0.011948
0x3c6bddfaaa007ca5162c6d8c8318c6ece675b6fa923db7411dcd6c5c7e0ca02eApprove2242386452024-06-21 16:19:0713 mins ago0xd4357cf9b5466fe61778baa2c463fcfba84cce19 IN  Subsquid: SQD Token0 ETH0.000000320.013204
0x0a09816a1065c229c97c5c08ecebb811578cc4d60cd6d70025129475afe93ae7Transfer2242382972024-06-21 16:17:3814 mins ago0xaccea82a1bb7c8e15d88733c8d865a484fd77930 IN  Subsquid: SQD Token0 ETH0.000000450.015458
0xbb3fafbe0223822d97a350aae36980645f95b09db63d66bdd01950d3f9e36ad0Transfer2242373822024-06-21 16:13:4718 mins ago0x87c1201bb33104d04ac2618f86bfe800ffb719fd IN  Subsquid: SQD Token0 ETH0.000000850.016568
0xaa9a145fe60b663b936f02892612a2804d1f92e2a8841646c0f9d1024791cfd3Transfer2242373142024-06-21 16:13:3018 mins ago0x2adb99745441da280ed90bbc35de4399b5bc1cb7 IN  Subsquid: SQD Token0 ETH0.00000050.017002
0x599ddd23ee5668fa2e13518928f94ac8bf54bef91710ee489db1dc80c70b56b2Transfer2242366072024-06-21 16:10:3321 mins ago0xe6f1098642dc648f90da0b50742587144165b5f7 IN  Subsquid: SQD Token0 ETH0.000000820.015962
0x066bbc0befdb091218e04642c89be15829fc3368683481d1d3ad43c2f36ced07Approve2242354002024-06-21 16:05:3026 mins ago0x442bbe5c88e0c8740f7b6a50bd17cffb9381e9c5 IN  Subsquid: SQD Token0 ETH0.00000090.019525
0x4c98dbefd2d427ee466f84c4230ce8a07066619f083463be5b487433e5aa843aTransfer2242338992024-06-21 15:59:1333 mins ago0xf2765014542e56f4ccce0d7addc10e840a76e804 IN  Subsquid: SQD Token0 ETH0.000000330.011188
0xd0b2b8c59585861bdb9e1393832fe9b9842231cd631920799a3d22617724d3edTransfer2242337162024-06-21 15:58:2733 mins ago0x0335c1179346e3a291c038fb4b21c2c35bb9251f IN  Subsquid: SQD Token0 ETH0.000000350.011824
0x92b6dd14105606cf0b434037a31ceada74cd746c53f096d5b193343f23c7c89bApprove2242334202024-06-21 15:57:1335 mins ago0x4f949a8304e9ecd3efc88daaf41a1a65ad624b63 IN  Subsquid: SQD Token0 ETH0.000000620.013465
0x7f87225c68d08047a4fbda285d050adde12ce0e558a6de688af4faa8db172ddeApprove2242325042024-06-21 15:53:2538 mins ago0x75140271904b667962765d7ddc80f778aa5b3532 IN  Subsquid: SQD Token0 ETH0.000000860.018652
0x8b4b7c698d35dad2d602a418b269f7094db2cd42428dd761c13114e00ca25ebdTransfer2242324042024-06-21 15:53:0039 mins ago0x2c8a68d623edf11219fa069eaa4780dcc8a3329a IN  Subsquid: SQD Token0 ETH0.000000560.018946
0x29900c2321c9b27f32e2b31539031d20452f0ad85fc98e6604885b0430e36371Approve2242317772024-06-21 15:50:2242 mins ago0x14b3c4fa568d912d18f4026f687c9b7896718505 IN  Subsquid: SQD Token0 ETH0.000001020.021938
0x19957ca3b9a31ff587de375172edb83ce7ca6556e8dfbd737e703e0382547866Transfer2242314852024-06-21 15:49:0843 mins ago0xbe9e9eb2cb496549ec96a6539d93735a99949765 IN  Subsquid: SQD Token0 ETH0.000001110.021567
0xa15f414c4f0c8d6695fdab0f4bb0f2248f651afcd1208ae55402c402d9260a70Approve2242312312024-06-21 15:48:0844 mins ago0x25c726ead7362cd52e355e6da10c840601d1aebe IN  Subsquid: SQD Token0 ETH0.00000103 0.02238
0x12d9492fee93d8c95f1a1f6f56a9565e8535d3b48594f72d1ed1739fa6f009e9Approve2242305452024-06-21 15:45:1647 mins ago0xbaa2162081fad8924eeb3e0e9d642fa8f392fff4 IN  Subsquid: SQD Token0 ETH0.00000064 0.026407
0xdfedfd27db11659734d3a39d0a169ad1ffd554063ee4ba3f188435403b3c7ff2Transfer2242303232024-06-21 15:44:2048 mins ago0x05272853735d44c39d0471c89d00c272a71c39e5 IN  Subsquid: SQD Token0 ETH0.000000830.028066
0xc7d5d572bfac800f6f3f766c701db849d07606067315eb71d54fd046051f59eeTransfer2242294312024-06-21 15:40:3851 mins ago0x7c668bbedc1d918624febb3bb94f53760a73d79e IN  Subsquid: SQD Token0 ETH0.000001010.034137
0x4456156f2d33e1f88b8d1b371c2e81814d21b64c5e8c214bdbde6fffbab62fe7Approve2242292062024-06-21 15:39:4252 mins ago0xe323d94345130d1e1e9efd13a61915115abcbd77 IN  Subsquid: SQD Token0 ETH0.000001560.033757
0x90ed66b1e6a0a142a7b4c8cfff46cc49b8ff9bfa54624e38e248d828b04d0371Approve2242289422024-06-21 15:38:3553 mins ago0xf675c2d0bbb2fa4c7fb32ea7708a8017385d460b IN  Subsquid: SQD Token0 ETH0.000001670.03603
0xfd25f62124737d29b0e2714f7e5c7a2731a2f63a29fea88b72cb182b0fc8f757Approve2242283512024-06-21 15:36:1056 mins ago0x2f948321f42fb2d040716213bfbf7f07d4ef5ae7 IN  Subsquid: SQD Token0 ETH0.000000640.024438
0x32f39cf654ff9b4cb66cf4976931a8f623b734ff7eea252d40935130ec899a98Transfer2242282932024-06-21 15:35:5556 mins ago0xf1bb85e94b28e977675087c8cd4cffcf2bcca7d8 IN  Subsquid: SQD Token0 ETH0.0000011 0.023513
0xf4b0024d1a57203f4f969b3526aefeb9c9d28946e5c294a473863e6b28b7dd83Transfer2242280222024-06-21 15:34:4757 mins ago0xfb4b0e5a055ea9c4ab631e3ff9721bc41b23e4ec IN  Subsquid: SQD Token0 ETH0.000000410.01382
[ Download CSV Export 

OVERVIEW

Subsquid Network is a decentralized query engine optimized for batch extraction of large volumes of data.

Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SQD

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
shanghai EvmVersion
File 1 of 6 : ArbitrumSQD.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

/**
 * @dev
 * This is a simple ERC20 token implementing the IArbToken interface
 * See more here https://docs.arbitrum.io/devs-how-tos/bridge-tokens/how-to-bridge-tokens-generic-custom
 *
 */
contract SQD is ERC20 {
  address public immutable l2Gateway;
  address public immutable l1Address;

  modifier onlyL2Gateway() {
    require(msg.sender == l2Gateway, "NOT_GATEWAY");
    _;
  }

  constructor(address _l2Gateway, address _l1TokenAddress) ERC20("Subsquid", "SQD") {
    l2Gateway = _l2Gateway;
    l1Address = _l1TokenAddress;
  }

  /**
   * @notice should increase token supply by amount, and should only be callable by the L2Gateway.
   */
  function bridgeMint(address account, uint256 amount) external onlyL2Gateway {
    _mint(account, amount);
  }

  /**
   * @notice should decrease token supply by amount, and should only be callable by the L2Gateway.
   */
  function bridgeBurn(address account, uint256 amount) external onlyL2Gateway {
    _burn(account, amount);
  }
}

File 2 of 6 : ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;

import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {IERC20Errors} from "../../interfaces/draft-IERC6093.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}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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 ERC-20
 * 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 ERC may not emit
 * these events, as it isn't required by the specification.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 default value returned by this function, unless
     * it's 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 returns (uint8) {
        return 18;
    }

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the ERC. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

File 3 of 6 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
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 value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` 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 value) external returns (bool);
}

File 4 of 6 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;

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

/**
 * @dev Interface for the optional metadata functions from the ERC-20 standard.
 */
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 5 of 6 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

File 6 of 6 : draft-IERC6093.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC-20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC-721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC-1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

Settings
{
  "remappings": [
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "openzeppelin-contracts/contracts/=lib/openzeppelin-contracts/contracts/",
    "@prb/math/=lib/prb-math/",
    "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "@prb/test/=lib/prb-math/node_modules/@prb/test/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "prb-math/=lib/prb-math/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "shanghai",
  "viaIR": false,
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_l2Gateway","type":"address"},{"internalType":"address","name":"_l1TokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","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":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"l1Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2Gateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"value","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":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60c060405234801562000010575f80fd5b5060405162000ba238038062000ba28339810160408190526200003391620000c7565b6040518060400160405280600881526020016714dd589cdc5d5a5960c21b8152506040518060400160405280600381526020016214d45160ea1b81525081600390816200008191906200019d565b5060046200009082826200019d565b5050506001600160a01b039182166080521660a05262000265565b80516001600160a01b0381168114620000c2575f80fd5b919050565b5f8060408385031215620000d9575f80fd5b620000e483620000ab565b9150620000f460208401620000ab565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200012657607f821691505b6020821081036200014557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000198575f81815260208120601f850160051c81016020861015620001735750805b601f850160051c820191505b8181101562000194578281556001016200017f565b5050505b505050565b81516001600160401b03811115620001b957620001b9620000fd565b620001d181620001ca845462000111565b846200014b565b602080601f83116001811462000207575f8415620001ef5750858301515b5f19600386901b1c1916600185901b17855562000194565b5f85815260208120601f198616915b82811015620002375788860151825594840194600190910190840162000216565b50858210156200025557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161090d620002955f395f6101f301525f818161019901528181610324015261039d015261090d5ff3fe608060405234801561000f575f80fd5b50600436106100cb575f3560e01c806374f4f5471161008857806395d89b411161006357806395d89b41146101d3578063a9059cbb146101db578063c2eeeebd146101ee578063dd62ed3e14610215575f80fd5b806374f4f5471461016c5780638c2a993e146101815780638fa74a0e14610194575f80fd5b806306fdde03146100cf578063095ea7b3146100ed57806318160ddd1461011057806323b872dd14610122578063313ce5671461013557806370a0823114610144575b5f80fd5b6100d761024d565b6040516100e49190610768565b60405180910390f35b6101006100fb3660046107ce565b6102dd565b60405190151581526020016100e4565b6002545b6040519081526020016100e4565b6101006101303660046107f6565b6102f6565b604051601281526020016100e4565b61011461015236600461082f565b6001600160a01b03165f9081526020819052604090205490565b61017f61017a3660046107ce565b610319565b005b61017f61018f3660046107ce565b610392565b6101bb7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100e4565b6100d7610402565b6101006101e93660046107ce565b610411565b6101bb7f000000000000000000000000000000000000000000000000000000000000000081565b61011461022336600461084f565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b60606003805461025c90610880565b80601f016020809104026020016040519081016040528092919081815260200182805461028890610880565b80156102d35780601f106102aa576101008083540402835291602001916102d3565b820191905f5260205f20905b8154815290600101906020018083116102b657829003601f168201915b5050505050905090565b5f336102ea81858561041e565b60019150505b92915050565b5f33610303858285610430565b61030e8585856104ab565b506001949350505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103845760405162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b60448201526064015b60405180910390fd5b61038e8282610508565b5050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103f85760405162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015260640161037b565b61038e828261053c565b60606004805461025c90610880565b5f336102ea8185856104ab565b61042b8383836001610570565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146104a5578181101561049757604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161037b565b6104a584848484035f610570565b50505050565b6001600160a01b0383166104d457604051634b637e8f60e11b81525f600482015260240161037b565b6001600160a01b0382166104fd5760405163ec442f0560e01b81525f600482015260240161037b565b61042b838383610642565b6001600160a01b03821661053157604051634b637e8f60e11b81525f600482015260240161037b565b61038e825f83610642565b6001600160a01b0382166105655760405163ec442f0560e01b81525f600482015260240161037b565b61038e5f8383610642565b6001600160a01b0384166105995760405163e602df0560e01b81525f600482015260240161037b565b6001600160a01b0383166105c257604051634a1406b160e11b81525f600482015260240161037b565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156104a557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161063491815260200190565b60405180910390a350505050565b6001600160a01b03831661066c578060025f82825461066191906108b8565b909155506106dc9050565b6001600160a01b0383165f90815260208190526040902054818110156106be5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161037b565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166106f857600280548290039055610716565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161075b91815260200190565b60405180910390a3505050565b5f6020808352835180828501525f5b8181101561079357858101830151858201604001528201610777565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146107c9575f80fd5b919050565b5f80604083850312156107df575f80fd5b6107e8836107b3565b946020939093013593505050565b5f805f60608486031215610808575f80fd5b610811846107b3565b925061081f602085016107b3565b9150604084013590509250925092565b5f6020828403121561083f575f80fd5b610848826107b3565b9392505050565b5f8060408385031215610860575f80fd5b610869836107b3565b9150610877602084016107b3565b90509250929050565b600181811c9082168061089457607f821691505b6020821081036108b257634e487b7160e01b5f52602260045260245ffd5b50919050565b808201808211156102f057634e487b7160e01b5f52601160045260245ffdfea2646970667358221220879a5edd66705d33b20478937f5a091e7e51d8d1986d0e4d92d9940d2c735f1864736f6c63430008140033000000000000000000000000096760f208390250649e3e8763348e783aef55620000000000000000000000001337420ded5adb9980cfc35f8f2b054ea86f8ab1

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106100cb575f3560e01c806374f4f5471161008857806395d89b411161006357806395d89b41146101d3578063a9059cbb146101db578063c2eeeebd146101ee578063dd62ed3e14610215575f80fd5b806374f4f5471461016c5780638c2a993e146101815780638fa74a0e14610194575f80fd5b806306fdde03146100cf578063095ea7b3146100ed57806318160ddd1461011057806323b872dd14610122578063313ce5671461013557806370a0823114610144575b5f80fd5b6100d761024d565b6040516100e49190610768565b60405180910390f35b6101006100fb3660046107ce565b6102dd565b60405190151581526020016100e4565b6002545b6040519081526020016100e4565b6101006101303660046107f6565b6102f6565b604051601281526020016100e4565b61011461015236600461082f565b6001600160a01b03165f9081526020819052604090205490565b61017f61017a3660046107ce565b610319565b005b61017f61018f3660046107ce565b610392565b6101bb7f000000000000000000000000096760f208390250649e3e8763348e783aef556281565b6040516001600160a01b0390911681526020016100e4565b6100d7610402565b6101006101e93660046107ce565b610411565b6101bb7f0000000000000000000000001337420ded5adb9980cfc35f8f2b054ea86f8ab181565b61011461022336600461084f565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b60606003805461025c90610880565b80601f016020809104026020016040519081016040528092919081815260200182805461028890610880565b80156102d35780601f106102aa576101008083540402835291602001916102d3565b820191905f5260205f20905b8154815290600101906020018083116102b657829003601f168201915b5050505050905090565b5f336102ea81858561041e565b60019150505b92915050565b5f33610303858285610430565b61030e8585856104ab565b506001949350505050565b336001600160a01b037f000000000000000000000000096760f208390250649e3e8763348e783aef556216146103845760405162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b60448201526064015b60405180910390fd5b61038e8282610508565b5050565b336001600160a01b037f000000000000000000000000096760f208390250649e3e8763348e783aef556216146103f85760405162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015260640161037b565b61038e828261053c565b60606004805461025c90610880565b5f336102ea8185856104ab565b61042b8383836001610570565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146104a5578181101561049757604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161037b565b6104a584848484035f610570565b50505050565b6001600160a01b0383166104d457604051634b637e8f60e11b81525f600482015260240161037b565b6001600160a01b0382166104fd5760405163ec442f0560e01b81525f600482015260240161037b565b61042b838383610642565b6001600160a01b03821661053157604051634b637e8f60e11b81525f600482015260240161037b565b61038e825f83610642565b6001600160a01b0382166105655760405163ec442f0560e01b81525f600482015260240161037b565b61038e5f8383610642565b6001600160a01b0384166105995760405163e602df0560e01b81525f600482015260240161037b565b6001600160a01b0383166105c257604051634a1406b160e11b81525f600482015260240161037b565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156104a557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161063491815260200190565b60405180910390a350505050565b6001600160a01b03831661066c578060025f82825461066191906108b8565b909155506106dc9050565b6001600160a01b0383165f90815260208190526040902054818110156106be5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161037b565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166106f857600280548290039055610716565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161075b91815260200190565b60405180910390a3505050565b5f6020808352835180828501525f5b8181101561079357858101830151858201604001528201610777565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146107c9575f80fd5b919050565b5f80604083850312156107df575f80fd5b6107e8836107b3565b946020939093013593505050565b5f805f60608486031215610808575f80fd5b610811846107b3565b925061081f602085016107b3565b9150604084013590509250925092565b5f6020828403121561083f575f80fd5b610848826107b3565b9392505050565b5f8060408385031215610860575f80fd5b610869836107b3565b9150610877602084016107b3565b90509250929050565b600181811c9082168061089457607f821691505b6020821081036108b257634e487b7160e01b5f52602260045260245ffd5b50919050565b808201808211156102f057634e487b7160e01b5f52601160045260245ffdfea2646970667358221220879a5edd66705d33b20478937f5a091e7e51d8d1986d0e4d92d9940d2c735f1864736f6c63430008140033

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

000000000000000000000000096760f208390250649e3e8763348e783aef55620000000000000000000000001337420ded5adb9980cfc35f8f2b054ea86f8ab1

-----Decoded View---------------
Arg [0] : _l2Gateway (address): 0x096760F208390250649E3e8763348E783AEF5562
Arg [1] : _l1TokenAddress (address): 0x1337420dED5ADb9980CFc35f8f2B054ea86f8aB1

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000096760f208390250649e3e8763348e783aef5562
Arg [1] : 0000000000000000000000001337420ded5adb9980cfc35f8f2b054ea86f8ab1


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.