Contract 0x7fb688ccf682d58f86d7e38e03f9d22e7705448b 1

 

Contract Overview

Reflexer: RAI Token
Balance:
0 Ether

EtherValue:
$0.00
Txn Hash Method
Index
From
To
Value
0x56ec4134de3c31580b5f7453d928cc62115d26d25d01fe12fc993dbdc330c61bApprove137081512022-07-02 17:40:342 days 6 hrs ago0x00bb6124a516ed6eb9f574748a69e2cef8d17547 IN  Reflexer: RAI Token0 Ether0.0000470644010.001
0x8786c693048b001b0a3d27a94cf46ed97b7e340e68fe95c42f754e2924c5f950Approve136968452022-07-02 13:05:412 days 10 hrs ago0x3d0db72eb8d80bc016698f1bc19aea2443f75252 IN  Reflexer: RAI Token0 Ether0.0000311095480.001
0x4fb3944f16c0577ce8c5e53535d166477fa60074b3492b3d7fef5065441d5551Approve136968392022-07-02 13:05:412 days 10 hrs ago0x3d0db72eb8d80bc016698f1bc19aea2443f75252 IN  Reflexer: RAI Token0 Ether0.0000311075480.001
0xd738d4a47925a72ea0c5a1f625af2ff81a258b56cb119e4defd217ef31dacb6eApprove136442652022-07-01 17:13:503 days 6 hrs ago0x990fd3a50a35697bdff2d33faa7a53b63b470b34 IN  Reflexer: RAI Token0 Ether0.0002697773320.001
0xc9d5626f831d3b94f8b8d6fdec61f48e9f617bc7ba20aa7d8becb546cd4737f5Approve135835522022-07-01 2:55:153 days 20 hrs ago0x51318c2f3e7d9735eae7e9c9838bb972742470e5 IN  Reflexer: RAI Token0 Ether0.0000930012310.001
0x1838ebbee256a90e3ad1a02117ab3fad52d66f5a16846a4f43324e9a6b829aa8Transfer133290832022-06-27 17:37:227 days 6 hrs ago0x54b2633a155999cbf34839e3a063cc520fddfcdc IN  Reflexer: RAI Token0 Ether0.000454850030.001
0x13ef7e87f852313686c0f4b6a7ebe5c3b2e298c0ec353149200a535d1e817468Approve130768892022-06-25 22:40:579 days 1 hr ago0x729edbc0e3c4adb95d4403f21ac04c51a122dc26 IN  Reflexer: RAI Token0 Ether0.0001333796360.001
0xc4b5a8896e957dc5ace551a6114e654d5ac198ffb3e9de4f6b267e5302d96136Approve130504582022-06-25 15:18:349 days 8 hrs ago0xd2e44e40b5fb960a8a74dd7b9d6b7f14b805b50d IN  Reflexer: RAI Token0 Ether0.0002533087320.001
0x8dc2c87ed96fe08ca89baf7c7b66743dd6d58d77274c7347e84393af0eaea545Approve130499112022-06-25 15:10:109 days 8 hrs ago0xd2e44e40b5fb960a8a74dd7b9d6b7f14b805b50d IN  Reflexer: RAI Token0 Ether0.0002556463890.001
0x796131a85a7bfd1ac78c7f188ce8ba97e214e1f71f80e81abb9e1cc20d70aaedApprove130228822022-06-25 10:09:229 days 13 hrs ago0x9dc98566c554bae50dc206331a992ddb8620b5b9 IN  Reflexer: RAI Token0 Ether0.0000683021050.001
0x895cc84aba8a1df3c1ca39dd3895e90a4d6e4908e6a3f24db5eb7cb8e1ea7bc0Approve128465272022-06-23 20:32:0211 days 3 hrs ago 0x8ae72cf9973def0666f496a1844db10ad31b7f88 IN  Reflexer: RAI Token0 Ether0.0002936692250.001
0xb8cb8ac012e39ba2e9e96dd6c6edd51904c9572a797b6bf0e3a65d27019e5328Approve127860012022-06-23 7:27:2811 days 16 hrs ago0x25788fd5e65a94f1f02604c8d72d05e0bf4cac5f IN  Reflexer: RAI Token0 Ether0.0000798390360.001
0xcc1c611bb09b66aba36485eacbc450403c2d9e347da659d7f1a06b6414ee4378Approve125113482022-06-20 23:05:4114 days 42 mins ago0x3334829670f9e8d309c9d9f318c4e6876755ede2 IN  Reflexer: RAI Token0 Ether0.0001949317960.001
0xf861771fe4c69dd71e415866a2d226774a89ee3586fc772059d17b11ec8532afApprove125113392022-06-20 23:05:0214 days 43 mins ago0x3334829670f9e8d309c9d9f318c4e6876755ede2 IN  Reflexer: RAI Token0 Ether0.0001949317960.001
0x4066644993957c86c55209f574ea2afe7ab07f2d7cc6c460a5ff3079e10cc237Approve124881472022-06-20 17:12:3014 days 6 hrs ago0x4550fc7cd7351f2a35d0af445bb4a9c3cf826683 IN  Reflexer: RAI Token0 Ether0.0001508450.001
0x13325baaa585c1d3ad188e9f45e378af00353afacf1db31ddeb9a1006a63c7f7Transfer113567152022-06-12 6:24:2222 days 17 hrs ago0xe191468e32443fa79e8ae8164c0c0b319ea704a4 IN  Reflexer: RAI Token0 Ether0.0001003192410.001
0x548d11dae085676b6946518259f8b3d8f7df39b4b5a47a1171e23de89935e2f0Approve112608932022-06-11 14:18:3723 days 9 hrs ago0x2a3049fc9d97f5b8d847f5700d82ba23d14a00e0 IN  Reflexer: RAI Token0 Ether0.0001483511320.001
0x5b323f578a53664e95420d0767001a8ef977394d4ddcbd17662626b30efd10f0Approve112602312022-06-11 14:13:0523 days 9 hrs ago0xbb7798c57cda483fcc3c4ab01600d83eb33f4403 IN  Reflexer: RAI Token0 Ether0.0001632872520.001
0x10bff3e9ab290a79b2e824ebc5beeba899565b5a92bfc7a166092803e7da7d17Approve112594932022-06-11 14:04:2423 days 9 hrs ago0x1b524eab7d1c4c2f7c9d2ffa649143f78c549005 IN  Reflexer: RAI Token0 Ether0.0001336939390.001
0x602d711c4c35a1f2cdf0b9b22a84bacda655b99ca9f12cf8d01050055eed5a3eApprove112287052022-06-11 9:21:1123 days 14 hrs ago0xd131f1bcdd547e067af447dd3c36c99d6be9fdeb IN  Reflexer: RAI Token0 Ether0.0001873546720.001
0xdb90c9b3fb3b5f1f5060e4bd639e0a9cb1581d5fc3fb0c446872dd202dc24845Transfer112039222022-06-11 3:27:3923 days 20 hrs ago0x8caa7ebe5c6ae6087fb65315d1b5aa7acd33b854 IN  Reflexer: RAI Token0 Ether0.0000947529780.001
0x95060019371b7055e438b33956538f8cb667b63e6748777abd947d8f69e5a2e4Approve111846722022-06-10 20:04:1524 days 3 hrs ago0x8caa7ebe5c6ae6087fb65315d1b5aa7acd33b854 IN  Reflexer: RAI Token0 Ether0.0003480769850.001
0xab2495f8e5a63cdb5a86b36ef5c3fa862153679c9d75253c016bd53eda3a4a78Approve111125222022-06-10 4:36:2324 days 19 hrs ago0x1c494f1919c1512ebe74a5dcc17dac9a64069023 IN  Reflexer: RAI Token0 Ether0.0002439396470.001
0xf9a2f5a31da9c5f2982aa8321f8a600a20174d7a51d0122c02c900d49e64af6cApprove110486992022-06-09 11:10:4225 days 12 hrs ago0x8d580b7c67a055656a4d23bb8d3f647855156585 IN  Reflexer: RAI Token0 Ether0.0001640286170.001
0x716a2057cee2c54e93f21b33ccb4ce5835c4ba4eeac1684ce04181b228f43d03Approve110248172022-06-09 5:22:2325 days 18 hrs ago0xd208cba3df6b4f6e0fc2df9fa10cd52dfd248f00 IN  Reflexer: RAI Token0 Ether0.0004892506740.001
[ Download CSV Export 

OVERVIEW

RAI is a non-pegged, ETH-backed stable asset. It is useful as more 'stable' collateral for other DeFi protocols (compared to ETH or BTC) or as a stable asset with an embedded interest rate.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd3fcbddd7fe275dca4d5727f9102ad84bb344b17be8064a3016f09488a36ba22138356022022-07-04 17:20:196 hrs 28 mins ago 0x1b19825a9e32b1039080acb1e1f9271314938b96 Reflexer: RAI Token0 Ether
0xd3fcbddd7fe275dca4d5727f9102ad84bb344b17be8064a3016f09488a36ba22138356022022-07-04 17:20:196 hrs 28 mins ago Uniswap V3: Router 2 Reflexer: RAI Token0 Ether
0xd3fcbddd7fe275dca4d5727f9102ad84bb344b17be8064a3016f09488a36ba22138356022022-07-04 17:20:196 hrs 28 mins ago 0x1b19825a9e32b1039080acb1e1f9271314938b96 Reflexer: RAI Token0 Ether
0xb8f3aa723e1eb2c0ae4e723d349b0fe2baae3f8eae0c50fc7a7f03e3b902aa5c137805222022-07-04 0:07:4223 hrs 40 mins ago 0x1b19825a9e32b1039080acb1e1f9271314938b96 Reflexer: RAI Token0 Ether
0xb8f3aa723e1eb2c0ae4e723d349b0fe2baae3f8eae0c50fc7a7f03e3b902aa5c137805222022-07-04 0:07:4223 hrs 40 mins ago Uniswap V3: Router 2 Reflexer: RAI Token0 Ether
0xb8f3aa723e1eb2c0ae4e723d349b0fe2baae3f8eae0c50fc7a7f03e3b902aa5c137805222022-07-04 0:07:4223 hrs 40 mins ago 0x1b19825a9e32b1039080acb1e1f9271314938b96 Reflexer: RAI Token0 Ether
0x9e34f4a0dd336fa16e07715b3c945f574f9a3fa0c96d61f7ec589800e9a57d91137170982022-07-02 22:02:172 days 1 hr ago 0x1b19825a9e32b1039080acb1e1f9271314938b96 Reflexer: RAI Token0 Ether
0x9e34f4a0dd336fa16e07715b3c945f574f9a3fa0c96d61f7ec589800e9a57d91137170982022-07-02 22:02:172 days 1 hr ago Uniswap V3: Router 2 Reflexer: RAI Token0 Ether
0x9e34f4a0dd336fa16e07715b3c945f574f9a3fa0c96d61f7ec589800e9a57d91137170982022-07-02 22:02:172 days 1 hr ago 0x1b19825a9e32b1039080acb1e1f9271314938b96 Reflexer: RAI Token0 Ether
0x8ba053ab6e41efb1282f943dd5b280020b1c8839b6801c947713906b7679512e137080972022-07-02 17:38:302 days 6 hrs ago 0x9bb3267c4c3e69a961479c475f8fcc4c300af5bd Reflexer: RAI Token0 Ether
0xaeae8a7001b6fc67018a04a58f679efeb3357a859db02b50138e51ca7cb6c0a9136974692022-07-02 13:22:242 days 10 hrs ago 0x1b19825a9e32b1039080acb1e1f9271314938b96 Reflexer: RAI Token0 Ether
0xcdc3eb48d74a9820a17c05eb7bdb0e389d806b581614885d4aca927508383159136442812022-07-01 17:14:213 days 6 hrs ago 0x1b19825a9e32b1039080acb1e1f9271314938b96 Reflexer: RAI Token0 Ether
0xcdc3eb48d74a9820a17c05eb7bdb0e389d806b581614885d4aca927508383159136442812022-07-01 17:14:213 days 6 hrs ago Uniswap V3: Router 2 Reflexer: RAI Token0 Ether
0xcdc3eb48d74a9820a17c05eb7bdb0e389d806b581614885d4aca927508383159136442812022-07-01 17:14:213 days 6 hrs ago 0x1b19825a9e32b1039080acb1e1f9271314938b96 Reflexer: RAI Token0 Ether
0x7d431f879d1c66a120acd00ed37bb0a253356ff48033fa4e1ac0121cc81a556c136030202022-07-01 7:38:343 days 16 hrs ago 0x1b19825a9e32b1039080acb1e1f9271314938b96 Reflexer: RAI Token0 Ether
0x65ed5aa4aa7223c31f574df8a7eb5ed624a56a4ee4daafbc58f56abb09044300135835672022-07-01 2:55:473 days 20 hrs ago 0x1b19825a9e32b1039080acb1e1f9271314938b96 Reflexer: RAI Token0 Ether
0x65ed5aa4aa7223c31f574df8a7eb5ed624a56a4ee4daafbc58f56abb09044300135835672022-07-01 2:55:473 days 20 hrs ago Uniswap V3: Router 2 Reflexer: RAI Token0 Ether
0x65ed5aa4aa7223c31f574df8a7eb5ed624a56a4ee4daafbc58f56abb09044300135835672022-07-01 2:55:473 days 20 hrs ago 0x1b19825a9e32b1039080acb1e1f9271314938b96 Reflexer: RAI Token0 Ether
0xea1d8c2232382c70c135effcce024790cc0638b3120ae363f4f493347d6c9e16135786942022-07-01 1:01:103 days 22 hrs ago Optimism Bridge Reflexer: RAI Token0 Ether
0xea1d8c2232382c70c135effcce024790cc0638b3120ae363f4f493347d6c9e16135786942022-07-01 1:01:103 days 22 hrs ago Optimism Bridge Reflexer: RAI Token0 Ether
0xea1d8c2232382c70c135effcce024790cc0638b3120ae363f4f493347d6c9e16135786942022-07-01 1:01:103 days 22 hrs ago Optimism Bridge Reflexer: RAI Token0 Ether
0xea1d8c2232382c70c135effcce024790cc0638b3120ae363f4f493347d6c9e16135786942022-07-01 1:01:103 days 22 hrs ago Optimism Bridge Reflexer: RAI Token0 Ether
0xea1d8c2232382c70c135effcce024790cc0638b3120ae363f4f493347d6c9e16135786942022-07-01 1:01:103 days 22 hrs ago Optimism Bridge Reflexer: RAI Token0 Ether
0xa7c1c6423ba2b9fc7a273b263e4203feea146a10db524923679e4a34c53c313e135310952022-06-30 11:54:034 days 11 hrs ago Optimism Bridge Reflexer: RAI Token0 Ether
0xa7c1c6423ba2b9fc7a273b263e4203feea146a10db524923679e4a34c53c313e135310952022-06-30 11:54:034 days 11 hrs ago Optimism Bridge Reflexer: RAI Token0 Ether
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xc40f949f8a4e094d1b49a23ea9241d289b7b2819

Contract Name:
L2StandardERC20

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 7 : L2StandardERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.16 <0.8.0;

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

import "./IL2StandardERC20.sol";

contract L2StandardERC20 is IL2StandardERC20, ERC20 {
    address public override 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 override 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 override onlyL2Bridge {
        _mint(_to, _amount);

        emit Mint(_to, _amount);
    }

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

        emit Burn(_from, _amount);
    }
}

File 2 of 7 : ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

import "../../utils/Context.sol";
import "./IERC20.sol";
import "../../math/SafeMath.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 guidelines: functions revert instead
 * of 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 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) public {
        _name = name_;
        _symbol = symbol_;
        _decimals = 18;
    }

    /**
     * @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 value {ERC20} uses, unless {_setupDecimals} is
     * called.
     *
     * 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 _decimals;
    }

    /**
     * @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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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:
     *
     * - `to` 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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal virtual {
        _decimals = decimals_;
    }

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

File 3 of 7 : IL2StandardERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.16 <0.8.0;

import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { IERC165 } from "@openzeppelin/contracts/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 4 of 7 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <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 GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 5 of 7 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <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 6 of 7 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

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

pragma solidity >=0.6.0 <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": 200
  },
  "metadata": {
    "bytecodeHash": "none",
    "useLiteralContent": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_l2Bridge","type":"address"},{"internalType":"address","name":"_l1Token","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"_account","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_account","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Mint","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":"amount","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":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","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":[],"name":"l1Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2Bridge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a9059cbb11610066578063a9059cbb14610337578063ae1f6aaf14610363578063c01e1bd614610387578063dd62ed3e1461038f57610100565b806370a08231146102b157806395d89b41146102d75780639dc29fac146102df578063a457c2d71461030b57610100565b806323b872dd116100d357806323b872dd14610203578063313ce56714610239578063395093511461025757806340c10f191461028357610100565b806301ffc9a71461010557806306fdde0314610140578063095ea7b3146101bd57806318160ddd146101e9575b600080fd5b61012c6004803603602081101561011b57600080fd5b50356001600160e01b0319166103bd565b604080519115158252519081900360200190f35b61014861041b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561018257818101518382015260200161016a565b50505050905090810190601f1680156101af5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61012c600480360360408110156101d357600080fd5b506001600160a01b0381351690602001356104b1565b6101f16104ce565b60408051918252519081900360200190f35b61012c6004803603606081101561021957600080fd5b506001600160a01b038135811691602081013590911690604001356104d4565b61024161055b565b6040805160ff9092168252519081900360200190f35b61012c6004803603604081101561026d57600080fd5b506001600160a01b038135169060200135610564565b6102af6004803603604081101561029957600080fd5b506001600160a01b0381351690602001356105b2565b005b6101f1600480360360208110156102c757600080fd5b50356001600160a01b031661065e565b610148610679565b6102af600480360360408110156102f557600080fd5b506001600160a01b0381351690602001356106da565b61012c6004803603604081101561032157600080fd5b506001600160a01b038135169060200135610786565b61012c6004803603604081101561034d57600080fd5b506001600160a01b0381351690602001356107ee565b61036b610802565b604080516001600160a01b039092168252519081900360200190f35b61036b610811565b6101f1600480360360408110156103a557600080fd5b506001600160a01b0381358116916020013516610825565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e2631d1d8b6360e01b6001600160e01b031984166301ffc9a760e01b148061041357506001600160e01b0319848116908216145b949350505050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104a75780601f1061047c576101008083540402835291602001916104a7565b820191906000526020600020905b81548152906001019060200180831161048a57829003601f168201915b5050505050905090565b60006104c56104be610850565b8484610854565b50600192915050565b60025490565b60006104e1848484610940565b610551846104ed610850565b61054c85604051806060016040528060288152602001610e6f602891396001600160a01b038a1660009081526001602052604081209061052b610850565b6001600160a01b031681526020810191909152604001600020549190610a9b565b610854565b5060019392505050565b60055460ff1690565b60006104c5610571610850565b8461054c8560016000610582610850565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610b32565b6006546001600160a01b03163314610611576040805162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e604482015290519081900360640190fd5b61061b8282610b93565b6040805182815290516001600160a01b038416917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a25050565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104a75780601f1061047c576101008083540402835291602001916104a7565b6006546001600160a01b03163314610739576040805162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e604482015290519081900360640190fd5b6107438282610c83565b6040805182815290516001600160a01b038416917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a25050565b60006104c5610793610850565b8461054c85604051806060016040528060258152602001610f0160259139600160006107bd610850565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610a9b565b60006104c56107fb610850565b8484610940565b6006546001600160a01b031681565b60055461010090046001600160a01b031681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166108995760405162461bcd60e51b8152600401808060200182810382526024815260200180610edd6024913960400191505060405180910390fd5b6001600160a01b0382166108de5760405162461bcd60e51b8152600401808060200182810382526022815260200180610e276022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166109855760405162461bcd60e51b8152600401808060200182810382526025815260200180610eb86025913960400191505060405180910390fd5b6001600160a01b0382166109ca5760405162461bcd60e51b8152600401808060200182810382526023815260200180610de26023913960400191505060405180910390fd5b6109d5838383610d7f565b610a1281604051806060016040528060268152602001610e49602691396001600160a01b0386166000908152602081905260409020549190610a9b565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610a419082610b32565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610b2a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610aef578181015183820152602001610ad7565b50505050905090810190601f168015610b1c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610b8c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610bee576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610bfa60008383610d7f565b600254610c079082610b32565b6002556001600160a01b038216600090815260208190526040902054610c2d9082610b32565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610cc85760405162461bcd60e51b8152600401808060200182810382526021815260200180610e976021913960400191505060405180910390fd5b610cd482600083610d7f565b610d1181604051806060016040528060228152602001610e05602291396001600160a01b0385166000908152602081905260409020549190610a9b565b6001600160a01b038316600090815260208190526040902055600254610d379082610d84565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b505050565b600082821115610ddb576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a

Deployed ByteCode Sourcemap

172:1448:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;857:457;;;;;;;;;;;;;;;;-1:-1:-1;857:457:6;-1:-1:-1;;;;;;857:457:6;;:::i;:::-;;;;;;;;;;;;;;;;;;2168:89:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4244:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4244:166:2;;;;;;;;:::i;3235:106::-;;;:::i;:::-;;;;;;;;;;;;;;;;4877:317;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4877:317:2;;;;;;;;;;;;;;;;;:::i;3086:89::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5589:215;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5589:215:2;;;;;;;;:::i;1320:143:6:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1320:143:6;;;;;;;;:::i;:::-;;3399:125:2;;;;;;;;;;;;;;;;-1:-1:-1;3399:125:2;-1:-1:-1;;;;;3399:125:2;;:::i;2370:93::-;;;:::i;1469:149:6:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1469:149:6;;;;;;;;:::i;6291:266:2:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6291:266:2;;;;;;;;:::i;3727:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3727:172:2;;;;;;;;:::i;267:23:6:-;;;:::i;:::-;;;;-1:-1:-1;;;;;267:23:6;;;;;;;;;;;;;;230:31;;;:::i;3957:149:2:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3957:149:2;;;;;;;;;;:::i;857:457:6:-;935:4;991:38;-1:-1:-1;;;;;;;;;1224:39:6;;-1:-1:-1;;;1224:39:6;;:83;;-1:-1:-1;;;;;;;1267:40:6;;;;;;;1224:83;1217:90;857:457;-1:-1:-1;;;;857:457:6:o;2168:89:2:-;2245:5;2238:12;;;;;;;;-1:-1:-1;;2238:12:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2213:13;;2238:12;;2245:5;;2238:12;;2245:5;2238:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2168:89;:::o;4244:166::-;4327:4;4343:39;4352:12;:10;:12::i;:::-;4366:7;4375:6;4343:8;:39::i;:::-;-1:-1:-1;4399:4:2;4244:166;;;;:::o;3235:106::-;3322:12;;3235:106;:::o;4877:317::-;4983:4;4999:36;5009:6;5017:9;5028:6;4999:9;:36::i;:::-;5045:121;5054:6;5062:12;:10;:12::i;:::-;5076:89;5114:6;5076:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5076:19:2;;;;;;:11;:19;;;;;;5096:12;:10;:12::i;:::-;-1:-1:-1;;;;;5076:33:2;;;;;;;;;;;;-1:-1:-1;5076:33:2;;;:89;:37;:89::i;:::-;5045:8;:121::i;:::-;-1:-1:-1;5183:4:2;4877:317;;;;;:::o;3086:89::-;3159:9;;;;3086:89;:::o;5589:215::-;5677:4;5693:83;5702:12;:10;:12::i;:::-;5716:7;5725:50;5764:10;5725:11;:25;5737:12;:10;:12::i;:::-;-1:-1:-1;;;;;5725:25:2;;;;;;;;;;;;;;;;;-1:-1:-1;5725:25:2;;;:34;;;;;;;;;;;:38;:50::i;1320:143:6:-;788:8;;-1:-1:-1;;;;;788:8:6;774:10;:22;766:67;;;;;-1:-1:-1;;;766:67:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1403:19:::1;1409:3;1414:7;1403:5;:19::i;:::-;1438:18;::::0;;;;;;;-1:-1:-1;;;;;1438:18:6;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;1320:143:::0;;:::o;3399:125:2:-;-1:-1:-1;;;;;3499:18:2;3473:7;3499:18;;;;;;;;;;;;3399:125::o;2370:93::-;2449:7;2442:14;;;;;;;;-1:-1:-1;;2442:14:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2417:13;;2442:14;;2449:7;;2442:14;;2449:7;2442:14;;;;;;;;;;;;;;;;;;;;;;;;1469:149:6;788:8;;-1:-1:-1;;;;;788:8:6;774:10;:22;766:67;;;;;-1:-1:-1;;;766:67:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1554:21:::1;1560:5;1567:7;1554:5;:21::i;:::-;1591:20;::::0;;;;;;;-1:-1:-1;;;;;1591:20:6;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;1469:149:::0;;:::o;6291:266:2:-;6384:4;6400:129;6409:12;:10;:12::i;:::-;6423:7;6432:96;6471:15;6432:96;;;;;;;;;;;;;;;;;:11;:25;6444:12;:10;:12::i;:::-;-1:-1:-1;;;;;6432:25:2;;;;;;;;;;;;;;;;;-1:-1:-1;6432:25:2;;;:34;;;;;;;;;;;:96;:38;:96::i;3727:172::-;3813:4;3829:42;3839:12;:10;:12::i;:::-;3853:9;3864:6;3829:9;:42::i;267:23:6:-;;;-1:-1:-1;;;;;267:23:6;;:::o;230:31::-;;;;;;-1:-1:-1;;;;;230:31:6;;:::o;3957:149:2:-;-1:-1:-1;;;;;4072:18:2;;;4046:7;4072:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3957:149::o;598:104:4:-;685:10;598:104;:::o;9355:340:2:-;-1:-1:-1;;;;;9456:19:2;;9448:68;;;;-1:-1:-1;;;9448:68:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9534:21:2;;9526:68;;;;-1:-1:-1;;;9526:68:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9605:18:2;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9656:32;;;;;;;;;;;;;;;;;9355:340;;;:::o;7031:530::-;-1:-1:-1;;;;;7136:20:2;;7128:70;;;;-1:-1:-1;;;7128:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7216:23:2;;7208:71;;;;-1:-1:-1;;;7208:71:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7290:47;7311:6;7319:9;7330:6;7290:20;:47::i;:::-;7368:71;7390:6;7368:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7368:17:2;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;7348:17:2;;;:9;:17;;;;;;;;;;;:91;;;;7472:20;;;;;;;:32;;7497:6;7472:24;:32::i;:::-;-1:-1:-1;;;;;7449:20:2;;;:9;:20;;;;;;;;;;;;:55;;;;7519:35;;;;;;;7449:20;;7519:35;;;;;;;;;;;;;7031:530;;;:::o;5432:163:1:-;5518:7;5553:12;5545:6;;;;5537:29;;;;-1:-1:-1;;;5537:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5583:5:1;;;5432:163::o;2690:175::-;2748:7;2779:5;;;2802:6;;;;2794:46;;;;;-1:-1:-1;;;2794:46:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;2857:1;2690:175;-1:-1:-1;;;2690:175:1:o;7832:370:2:-;-1:-1:-1;;;;;7915:21:2;;7907:65;;;;;-1:-1:-1;;;7907:65:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;7983:49;8012:1;8016:7;8025:6;7983:20;:49::i;:::-;8058:12;;:24;;8075:6;8058:16;:24::i;:::-;8043:12;:39;-1:-1:-1;;;;;8113:18:2;;:9;:18;;;;;;;;;;;:30;;8136:6;8113:22;:30::i;:::-;-1:-1:-1;;;;;8092:18:2;;:9;:18;;;;;;;;;;;:51;;;;8158:37;;;;;;;8092:18;;:9;;8158:37;;;;;;;;;;7832:370;;:::o;8522:410::-;-1:-1:-1;;;;;8605:21:2;;8597:67;;;;-1:-1:-1;;;8597:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8675:49;8696:7;8713:1;8717:6;8675:20;:49::i;:::-;8756:68;8779:6;8756:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8756:18:2;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;8735:18:2;;:9;:18;;;;;;;;;;:89;8849:12;;:24;;8866:6;8849:16;:24::i;:::-;8834:12;:39;8888:37;;;;;;;;8914:1;;-1:-1:-1;;;;;8888:37:2;;;;;;;;;;;;8522:410;;:::o;10701:92::-;;;;:::o;3136:155:1:-;3194:7;3226:1;3221;:6;;3213:49;;;;;-1:-1:-1;;;3213:49:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3279:5:1;;;3136:155::o

Swarm Source

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