Contract 0xc40f949f8a4e094d1b49a23ea9241d289b7b2819 1

 

Contract Overview

Balance:
0 Ether

EtherValue:
$0.00
Txn Hash Method
Index
From
To
Value
0xcb1c35618ed49048880ba0967c31b981eb694addb845f7086ff89514d5e24628Approve198360692022-08-19 23:08:441 hr 9 mins ago0x4e3a5f79334cc91409472683cb8ef60269d1f86e IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000443023680.‍001000154
0x571661ed1cec62c223015b5185df854f93493e21f91d8e0d20da86e0de5c9dd8Approve198172072022-08-19 20:45:303 hrs 32 mins ago0xa529dbf959fc80f9db66d990b47eb33e26c416a0 IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000520195060.‍001043428
0x45e2c841fe5530afec3a81b0412fa430fed0a1559b76e920990f6fc61b9b20cfApprove198045612022-08-19 18:22:115 hrs 56 mins ago 0xc7f4cdb175b1885e95b8f49ccbbd3f929ab7d1ba IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000971639370.‍001043428
0xe8675384eedacc9a28d12ec9e2f90f66f2e64ca048bd03186c15a7ac3f0ff5cfApprove197534862022-08-19 10:53:2713 hrs 24 mins ago0x4d625af9ff62fe8f88669d8ae5bb0a0577412b24 IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000554612990.‍001043428
0x78a83f5c68bd645316835857ac86474c6f0459308323083f7b3b5232b4ebe16fTransfer197363502022-08-19 8:18:5415 hrs 59 mins ago0x0593cfeddb672a12e12beaf86e8542e0fb26ba54 IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000534813360.‍001043428
0xfa5a234ecb2258fac49c78ba4f8cb6b6061f9dd158e5c45501c16f4411c6edb6Approve196753282022-08-18 23:49:331 day 28 mins ago0x224910152ff0b9cf2dfcf1931a4866f5d336fc9c IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000638139480.‍001
0x7ce2e415ba071a309dd487ed1ed5ef1251e2688735427b9ae00c787047650734Approve196750352022-08-18 23:46:231 day 31 mins ago0x224910152ff0b9cf2dfcf1931a4866f5d336fc9c IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000467852580.‍001
0x2cfddfba70f871602734c523369c6f80437c5e04dee25f4e0d0442de3f248646Approve196748202022-08-18 23:44:211 day 33 mins ago0x224910152ff0b9cf2dfcf1931a4866f5d336fc9c IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000381307970.‍001
0x74f0c41944752b14d88c0f0af4db2d6d3414c7e4252782a0c1e1152a73ffb8bcApprove196374682022-08-18 16:03:401 day 8 hrs ago0xffebf6747d8b46852e552d0ffebe71d47ac9fcae IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0001357000250.‍001
0xb7e20faa7b717fcfcbe3aefc04c0f01a61b8d14884aa20b1690614fa51c786deApprove196263022022-08-18 13:37:181 day 10 hrs ago0xa734288da3ace7f9a5e5caa6df929126f2e67d52 IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000571798690.‍001
0xfa923e23d421c5b13a05772cce6a3139a13274832b266b47a85fc9fbbdf9e02bApprove196165312022-08-18 11:43:311 day 12 hrs ago0xaa63b6c5383781d7ae6bbc4de1346061dc5740d5 IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000166208970.‍001
0x30bfe4677aeb87b1c9a7ffe059d1a95937884056a33f8382a6fbbd53cd5d6e0bApprove195951942022-08-18 6:37:201 day 17 hrs ago0xcea077172675bf31e879bba71fb46c3188591070 IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍000027717860.‍001
0x9d675470047cf3bc99526b9aab02bc2a12408ad66f2ae928e69aa5304e088006Approve195948932022-08-18 6:33:291 day 17 hrs ago0xcea077172675bf31e879bba71fb46c3188591070 IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000387492850.‍001
0xbeec76b8f6a5eccffdbcfbe198979bbd5b7ce1470818c2b71d8b7d1dad7a92b3Approve195819162022-08-18 3:30:441 day 20 hrs ago0x7df706d4f1b12c453a13c4736e6af757d3e778e2 IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000335119270.‍001
0xb715f7cec646197253a3a94875ef4af2bb341ea334b862e956c192aadc482825Approve195817702022-08-18 3:28:101 day 20 hrs ago0x7df706d4f1b12c453a13c4736e6af757d3e778e2 IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000531085040.‍001
0x74c7c3ee2b91b5c570e266dd468e7ac416cf0dd22e32491209914e423d4f59d4Approve195816832022-08-18 3:26:001 day 20 hrs ago0x7df706d4f1b12c453a13c4736e6af757d3e778e2 IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000430546480.‍001
0xb6ca6343a3074648dff11747fcb9b9db5a1951576cecf0389a6c9e5968528706Approve195760112022-08-18 2:03:191 day 22 hrs ago0xf6a10e74ca923ffc9900105c084d0cd2fd6c90d7 IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000539844140.‍001
0x36434e738ef4a9b4ee367314b3b62fe28f2d9487472b8f259afd47f2b5886a30Approve195081252022-08-17 13:53:002 days 10 hrs ago0x14730014eea880f2d52ac0b67442c485242d9b9c IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0001042082630.‍001
0x8458121f9bfd95d394e9aebe987a0d690e94e2ed242c5fa84ccf599593a1703dApprove194816732022-08-17 10:13:332 days 14 hrs ago0x6fd5a849cc4bb26fde7737395e3b4a91f3b78a5a IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000298196360.‍001
0xb9e6a16237e5b02bb490749aec53912f17fdb070f73c2c83597b26d88697cdb2Approve194407072022-08-17 2:40:182 days 21 hrs ago0xd3d3ed63544f4d0c62d9cc4269c2d4e3bee859bf IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000410811550.‍001
0xc14eb812548dc82fd412db5257bbf2da25562584933fabac1bbd3ab45d395003Approve194400462022-08-17 2:35:252 days 21 hrs ago0xd3d3ed63544f4d0c62d9cc4269c2d4e3bee859bf IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000387440080.‍001
0xe18d76de8d162d1a792487276f7886afe828d73d425a3ca34bc3a544292a9919Approve194378342022-08-17 2:06:262 days 22 hrs ago0xcd75281aab13da6fd25d3f04a17fa1f769859edc IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000178728920.‍001
0x174f5c3bfdb1c49f833a2743132f8e4806e0e3b6dfde4694c409f9795e11f402Approve194279322022-08-16 23:59:253 days 18 mins ago0xd2f7d417667ce1d9b7a0b43e52d792789eb523b0 IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000369154960.‍001
0x3cf891a53a7c6586a0e35c46c019101b4267397a27e088589570b1c86cf62296Approve194253232022-08-16 23:18:263 days 59 mins ago0x5736d2bdc9483d5b4c654fdf7aeceee6c5959c92 IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000365152640.‍001
0x0a4e8d2a4e2b3277dd1e12f326560c2328db260f89834866a3ab20c9eec13141Approve194110212022-08-16 19:07:093 days 5 hrs ago0x7af5f42225980f3793c0ac0b6d3c80b7a02435f2 IN  0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether0.‍0000305628880.‍001
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x3bb6672fdd292bdbfd0aab23e6ed00ac1b22d3170e1812d88863d633976950a6198274132022-08-19 22:14:172 hrs 3 mins ago 0x207addb05c548f262219f6bfc6e11c02d0f7fdbe 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x3bb6672fdd292bdbfd0aab23e6ed00ac1b22d3170e1812d88863d633976950a6198274132022-08-19 22:14:172 hrs 3 mins ago 0x207addb05c548f262219f6bfc6e11c02d0f7fdbe 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x3bb6672fdd292bdbfd0aab23e6ed00ac1b22d3170e1812d88863d633976950a6198274132022-08-19 22:14:172 hrs 3 mins ago 0x207addb05c548f262219f6bfc6e11c02d0f7fdbe 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x3bb6672fdd292bdbfd0aab23e6ed00ac1b22d3170e1812d88863d633976950a6198274132022-08-19 22:14:172 hrs 3 mins ago 0x6637a050c48b249a8b3ae493e5142480ed473040 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x3bb6672fdd292bdbfd0aab23e6ed00ac1b22d3170e1812d88863d633976950a6198274132022-08-19 22:14:172 hrs 3 mins ago 0x6637a050c48b249a8b3ae493e5142480ed473040 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x3bb6672fdd292bdbfd0aab23e6ed00ac1b22d3170e1812d88863d633976950a6198274132022-08-19 22:14:172 hrs 3 mins ago 0x88835af27c7a22bded54033c5fad482a913981bc 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x3bb6672fdd292bdbfd0aab23e6ed00ac1b22d3170e1812d88863d633976950a6198274132022-08-19 22:14:172 hrs 3 mins ago 0x88835af27c7a22bded54033c5fad482a913981bc 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x3bb6672fdd292bdbfd0aab23e6ed00ac1b22d3170e1812d88863d633976950a6198274132022-08-19 22:14:172 hrs 3 mins ago 0x88835af27c7a22bded54033c5fad482a913981bc 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x52504c1e632ec8bc8fe580699521eca0f7e03ced3dce662fae02f7e90c516ddf198172322022-08-19 20:45:453 hrs 32 mins ago 0x207addb05c548f262219f6bfc6e11c02d0f7fdbe 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x52504c1e632ec8bc8fe580699521eca0f7e03ced3dce662fae02f7e90c516ddf198172322022-08-19 20:45:453 hrs 32 mins ago 0x207addb05c548f262219f6bfc6e11c02d0f7fdbe 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x52504c1e632ec8bc8fe580699521eca0f7e03ced3dce662fae02f7e90c516ddf198172322022-08-19 20:45:453 hrs 32 mins ago 0x207addb05c548f262219f6bfc6e11c02d0f7fdbe 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x52504c1e632ec8bc8fe580699521eca0f7e03ced3dce662fae02f7e90c516ddf198172322022-08-19 20:45:453 hrs 32 mins ago 0x9c12939390052919af3155f41bf4160fd3666a6f 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x5e1d86b025c2f9ca0393efebe5b72a016a52daff4f420edb1634a0b4dfd732f9198171272022-08-19 20:43:503 hrs 34 mins ago 0x207addb05c548f262219f6bfc6e11c02d0f7fdbe 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x5e1d86b025c2f9ca0393efebe5b72a016a52daff4f420edb1634a0b4dfd732f9198171272022-08-19 20:43:503 hrs 34 mins ago 0x207addb05c548f262219f6bfc6e11c02d0f7fdbe 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x5e1d86b025c2f9ca0393efebe5b72a016a52daff4f420edb1634a0b4dfd732f9198171272022-08-19 20:43:503 hrs 34 mins ago 0x207addb05c548f262219f6bfc6e11c02d0f7fdbe 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0xafb809e111c810568d045f7d84b82683a2f4adda199396548dcd645a82240d5e198059582022-08-19 18:40:285 hrs 37 mins ago 0x0d693efd716021878d5979fab4cf8f6c1b7ce450 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0xafb809e111c810568d045f7d84b82683a2f4adda199396548dcd645a82240d5e198059582022-08-19 18:40:285 hrs 37 mins ago 0x9c12939390052919af3155f41bf4160fd3666a6f 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x10ec1c12ee2d1b8bd5dcbb87ca150ce960a4d7d940a4b30f513950b2a52dc453198055512022-08-19 18:36:525 hrs 41 mins ago 0x207addb05c548f262219f6bfc6e11c02d0f7fdbe 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x10ec1c12ee2d1b8bd5dcbb87ca150ce960a4d7d940a4b30f513950b2a52dc453198055512022-08-19 18:36:525 hrs 41 mins ago 0x207addb05c548f262219f6bfc6e11c02d0f7fdbe 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x10ec1c12ee2d1b8bd5dcbb87ca150ce960a4d7d940a4b30f513950b2a52dc453198055512022-08-19 18:36:525 hrs 41 mins ago 0x207addb05c548f262219f6bfc6e11c02d0f7fdbe 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x2c980442bc0a4993099fef9cc4c7293d19de5f255627cc9ec8487f9c0f61f943198053712022-08-19 18:33:395 hrs 44 mins ago 0xdef171fe48cf0115b1d80b88dc8eab59176fee57 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x2c980442bc0a4993099fef9cc4c7293d19de5f255627cc9ec8487f9c0f61f943198053712022-08-19 18:33:395 hrs 44 mins ago 0xdef171fe48cf0115b1d80b88dc8eab59176fee57 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x2c980442bc0a4993099fef9cc4c7293d19de5f255627cc9ec8487f9c0f61f943198053712022-08-19 18:33:395 hrs 44 mins ago 0x207addb05c548f262219f6bfc6e11c02d0f7fdbe 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x2c980442bc0a4993099fef9cc4c7293d19de5f255627cc9ec8487f9c0f61f943198053712022-08-19 18:33:395 hrs 44 mins ago 0x207addb05c548f262219f6bfc6e11c02d0f7fdbe 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
0x2c980442bc0a4993099fef9cc4c7293d19de5f255627cc9ec8487f9c0f61f943198053712022-08-19 18:33:395 hrs 44 mins ago 0x207addb05c548f262219f6bfc6e11c02d0f7fdbe 0xc40f949f8a4e094d1b49a23ea9241d289b7b28190 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Genesis Bytecode Match Only)

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.