Contract 0x374ad0f47f4ca39c78e5cc54f1c9e426ff8f231a 13

 

Contract Overview

Premia: PREMIA Token
Balance:
0 ETH

EtherValue:
$0.00

Token:
Txn Hash Method
Block
From
To
Value
0xf2b223869f091412dda0e2939031d416ba8da6cb1f2bec8758326c4c94e9dc19Approve1179460842024-03-26 22:09:052 days 13 hrs ago0x7956e7f51f7d1e6f86abd615854ed2f591a3cc15 IN  Premia: PREMIA Token0 ETH0.0000013370390.025348042
0x1ffe826aea475c78c2f6ae14509223dcc80f0fb46194c89a8e5d625d697ed6a6Approve1179388292024-03-26 18:07:152 days 17 hrs ago0xc0a2ef45a5fe6c570c3ed3bbdca31a4a5834c6da IN  Premia: PREMIA Token0 ETH0.0000008824560.015940538
0x18b44ac928944916e58fe52eb4b63a8e7d2f80b4e8152831f5ef2ebb6eb1b39fDecrease Allowan...1177225412024-03-21 17:57:397 days 17 hrs ago0x7c22275848894de82923bd879325ff654197ee43 IN  Premia: PREMIA Token0 ETH0.0000002737860.006367789
0x8a7aefcc77d070f18f5a9e6891e85e4a00b328f6a358f7074c2108e41b443120Approve1172212402024-03-10 3:27:3719 days 8 hrs ago0x14741b0612d52188450b4b293f932d32a8be80e6 IN  Premia: PREMIA Token0 ETH0.0000795375560.000951621
0x0e8c08c6981bb404f15599203a1e42513c53a1b97b05541e46ee25e4ab4484d5Approve1169726532024-03-04 9:21:2325 days 2 hrs ago0x7c020179a29881b2bb28f8b227c1bc6eac488275 IN  Premia: PREMIA Token0 ETH0.0001278121860.002491676
0x150d034359f3e9420e9329264088ca8db77123c1d81719516dbc6926a4e30d69Approve1168074762024-02-29 13:35:2928 days 22 hrs ago0x641ed8498022961ced76e31db6d26412c4f9c46f IN  Premia: PREMIA Token0 ETH0.0001741506290.126962232
0x125343a2594d441a987d4274c4e83c4e5abcf102d209bee9b3c1e716cfa8f8ccApprove1167811102024-02-28 22:56:3729 days 12 hrs ago0xca74f404e0c7bfa35b13b511097df966d5a65597 IN  Premia: PREMIA Token0 ETH0.0001034656350.116011324
0xae7689578d4fba6f3da8880229b2ee02f2b2a7ad8fd780c439607bb6a70a72a6Approve1166710082024-02-26 9:46:3332 days 1 hr ago0x88840c37e8fa21afe5c28f0c704f9dcbd1601a45 IN  Premia: PREMIA Token0 ETH0.0000582459680.013157079
0x51b6315879cbb3b96edce3728172471f3a599d3b12137f2414ff9e35d11a615cApprove1165555222024-02-23 17:37:0134 days 18 hrs ago0x45b99a09deea0ad31523335329e005113ded92dc IN  Premia: PREMIA Token0 ETH0.0000728109180.094331228
0x5d8b0f6d24831b3bd49662bb7b1ea1725065ad7bfb8b301e35b2c07d458026e3Approve1164665182024-02-21 16:10:1336 days 19 hrs ago0x5daa50034968402ae41cccb36e20ab639b1292e4 IN  Premia: PREMIA Token0 ETH0.0001439245580.003861271
0x31aa89e9fd8a256e75e47602e7079c03a4bc66aaed798ec843fdc67eb0ec320dTransfer1163109862024-02-18 1:45:4940 days 9 hrs ago0x6e29e81925e8b7e4ebead1a5f5e176cd55d26edb IN  Premia: PREMIA Token0 ETH0.0000264396090.005192639
0x933758e4db24a8527442b9c955a478798f021136e04ef5549d65b3a7eb55525dApprove1162809442024-02-17 9:04:2541 days 2 hrs ago0xa4618f519ad3fe46476dbfeca927b108dc88cb42 IN  Premia: PREMIA Token0 ETH0.0000323043290.005494157
0x50df9b74617ab6698ec92cab2d61746f64b994a7c86d065a9263373ef3b56c84Approve1162651852024-02-17 0:19:0741 days 11 hrs ago0x6acafd94e1a4348ae82931be77733d2066dd6ba9 IN  Premia: PREMIA Token0 ETH0.0000402205590.008648148
0x61252b596585667f584a79949144064b1cd4e24fee36c58fe44d85c653bbc701Approve1161961502024-02-15 9:57:5743 days 1 hr ago0xe71e956e10ec540551ad2200196f9a834eaf3660 IN  Premia: PREMIA Token0 ETH0.0000556416450.003342554
0x5f8d847a4f20322b11a5a2b0c875cb6cf007b5f8a6badd547dff728c0d0ad745Approve1160533282024-02-12 2:37:1346 days 9 hrs ago0x3e17e32e3680fe5a163bebc71f218c7d3208ea46 IN  Premia: PREMIA Token0 ETH0.0000403911220.009541277
0x6de403ab7dcab15327d5c95e11f93990b112ccad98edd07b308782546a7ba661Approve1160533252024-02-12 2:37:0746 days 9 hrs ago0x3e17e32e3680fe5a163bebc71f218c7d3208ea46 IN  Premia: PREMIA Token0 ETH0.0000413143860.018647358
0xfb19ac067d3647358bc9c2dc2d149daf2bf91d74906897d1728e504ddf54ea2aTransfer1160329932024-02-11 15:19:2346 days 20 hrs ago0x1ea7f91efaeb0f2d2dd28f3c368fc35508df02f4 IN  Premia: PREMIA Token0 ETH0.00005641880.002950595
0x9bfe6631f3875409159aade79d86f9f98b5dc38ca1d0315b02c053064fef6ca5Transfer1160329362024-02-11 15:17:2946 days 20 hrs ago0x1ea7f91efaeb0f2d2dd28f3c368fc35508df02f4 IN  Premia: PREMIA Token0 ETH0.0000555079490.002856272
0x09876e1a296d0c3b651fcbcbf2609e0dd4d60eb66cf65a2b4df8841d19bbf3a4Approve1160173992024-02-11 6:39:3547 days 5 hrs ago0xa06b4f71b94ec6b59e0633c015772d3f1efdf7ca IN  Premia: PREMIA Token0 ETH0.0000409043440.003882861
0xe085efc894a337736b8ee72bdcce51c4b5d0f32117eea9f17bed359c6eda7924Approve1159654362024-02-10 1:47:2948 days 9 hrs ago0xd5f1b812cd928b370e590091d668b2d535214ad3 IN  Premia: PREMIA Token0 ETH0.0000655617530.001829632
0x9af759a70564a582f7ad0bf9683c7389f8da64c115890a19d5e29a6c89d3ff6dApprove1159006372024-02-08 13:47:3149 days 21 hrs ago0xaab49d377152da55b0a26a0c1b067094685a82a9 IN  Premia: PREMIA Token0 ETH0.000091943360.002079366
0x090c22e9e0920eee106eb62706e0ebf90070cbe0721f1f0a1a1fa7bbe2d8e6cbApprove1159004532024-02-08 13:41:2349 days 22 hrs ago0xaab49d377152da55b0a26a0c1b067094685a82a9 IN  Premia: PREMIA Token0 ETH0.0000897249520.001750305
0x3f1ad46733522466406ab1152f667cdf4ff19916c1414251b28e4bcd6cadd5c8Approve1154244782024-01-28 13:15:3360 days 22 hrs ago0x4716f4618b578bb5324db9799a3f1a65a2e6a5e6 IN  Premia: PREMIA Token0 ETH0.0000205207480.004838246
0x57c60427821c8da5d61cb0a15f8adbe8c001cde5266cbcf74ae64191520719acApprove1154053322024-01-28 2:37:2161 days 9 hrs ago0x808212655d2f3886218e1a116883f026ab2ea5ea IN  Premia: PREMIA Token0 ETH0.0000186287890.0056747
0x20db6c18624ef367fa203635c8be090e97e2ed90dbea59ebe89f34dd5162c34cTransfer1154051702024-01-28 2:31:5761 days 9 hrs ago0xc52e003928814974d855941370cb989c6fe4b505 IN  Premia: PREMIA Token0 ETH0.0000182219630.005214435
[ Download CSV Export 

OVERVIEW

PremiaFinance is a Web and native options protocol with market-driven pricing and capital-efficient returns for traders & LPs.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x9c66f78ba48b347187bbef90d2ca0f0bff366606de5442e1c2c1319be60ed5df1075569952023-07-30 10:26:07243 days 1 hr ago 0x30faf22817a2484120e4e8e2951b251681258d00 Premia: PREMIA Token0 ETH
0x9c66f78ba48b347187bbef90d2ca0f0bff366606de5442e1c2c1319be60ed5df1075569952023-07-30 10:26:07243 days 1 hr ago 1inch: Aggregation Router V5 Premia: PREMIA Token0 ETH
0x9c66f78ba48b347187bbef90d2ca0f0bff366606de5442e1c2c1319be60ed5df1075569952023-07-30 10:26:07243 days 1 hr ago 0x30faf22817a2484120e4e8e2951b251681258d00 Premia: PREMIA Token0 ETH
0x690f0b2f7841f6fa0e53414fac65eb4650f4ee5e979cfab8bac56d30cf02c8811075513572023-07-30 7:18:11243 days 4 hrs ago 0xbfdc37499d99046710a9c567016791c71cd25cf6 Premia: PREMIA Token0 ETH
0x690f0b2f7841f6fa0e53414fac65eb4650f4ee5e979cfab8bac56d30cf02c8811075513572023-07-30 7:18:11243 days 4 hrs ago 0xbfdc37499d99046710a9c567016791c71cd25cf6 Premia: PREMIA Token0 ETH
0x690f0b2f7841f6fa0e53414fac65eb4650f4ee5e979cfab8bac56d30cf02c8811075513572023-07-30 7:18:11243 days 4 hrs ago 0xbfdc37499d99046710a9c567016791c71cd25cf6 Premia: PREMIA Token0 ETH
0x690f0b2f7841f6fa0e53414fac65eb4650f4ee5e979cfab8bac56d30cf02c8811075513572023-07-30 7:18:11243 days 4 hrs ago 0xbfdc37499d99046710a9c567016791c71cd25cf6 Premia: PREMIA Token0 ETH
0x64c12bc68b55c12f4556cf93b6cc6dff2bf4f68b4652615d36ec3e9fc1a1542d1075468922023-07-30 4:49:21243 days 6 hrs ago Velodrome Finance: Prices Oracle V2 Premia: PREMIA Token0 ETH
0x64c12bc68b55c12f4556cf93b6cc6dff2bf4f68b4652615d36ec3e9fc1a1542d1075468922023-07-30 4:49:21243 days 6 hrs ago Velodrome Finance: Prices Oracle V2 Premia: PREMIA Token0 ETH
0xbe1c857b5242a469c5ac033f822029b5336a74baa091ab81a03647fe404831f61075339612023-07-29 21:38:19243 days 14 hrs ago 0x30faf22817a2484120e4e8e2951b251681258d00 Premia: PREMIA Token0 ETH
0x707df5d8ffff9ccffc3a84ce8ad60c888e70938e0bc3cfd5d8f8fadb935f0e901075155892023-07-29 11:25:55244 days 15 mins ago Velodrome Finance: Prices Oracle V2 Premia: PREMIA Token0 ETH
0x707df5d8ffff9ccffc3a84ce8ad60c888e70938e0bc3cfd5d8f8fadb935f0e901075155892023-07-29 11:25:55244 days 15 mins ago Velodrome Finance: Prices Oracle V2 Premia: PREMIA Token0 ETH
0xeda405008f91bd43abd8f2806826a9454cf5394b17f3dd8e9e89f68aff74dcf51074993662023-07-29 2:25:09244 days 9 hrs ago 0x30faf22817a2484120e4e8e2951b251681258d00 Premia: PREMIA Token0 ETH
0xeda405008f91bd43abd8f2806826a9454cf5394b17f3dd8e9e89f68aff74dcf51074993662023-07-29 2:25:09244 days 9 hrs ago 1inch: Aggregation Router V5 Premia: PREMIA Token0 ETH
0xeda405008f91bd43abd8f2806826a9454cf5394b17f3dd8e9e89f68aff74dcf51074993662023-07-29 2:25:09244 days 9 hrs ago 0x30faf22817a2484120e4e8e2951b251681258d00 Premia: PREMIA Token0 ETH
0x737cdfeae70708dd4dfe981ab1e8855a7aa196602c800f9da811051650dcf1b41074993022023-07-29 2:23:01244 days 9 hrs ago 0xbfdc37499d99046710a9c567016791c71cd25cf6 Premia: PREMIA Token0 ETH
0x737cdfeae70708dd4dfe981ab1e8855a7aa196602c800f9da811051650dcf1b41074993022023-07-29 2:23:01244 days 9 hrs ago 0xbfdc37499d99046710a9c567016791c71cd25cf6 Premia: PREMIA Token0 ETH
0x737cdfeae70708dd4dfe981ab1e8855a7aa196602c800f9da811051650dcf1b41074993022023-07-29 2:23:01244 days 9 hrs ago 0xbfdc37499d99046710a9c567016791c71cd25cf6 Premia: PREMIA Token0 ETH
0x737cdfeae70708dd4dfe981ab1e8855a7aa196602c800f9da811051650dcf1b41074993022023-07-29 2:23:01244 days 9 hrs ago 0xbfdc37499d99046710a9c567016791c71cd25cf6 Premia: PREMIA Token0 ETH
0x9e37eb7b4d6f96548108ddb629aeeb9aebb0fdaa81bdcc61177eb8ef2b7086f41074693622023-07-28 9:45:01245 days 1 hr ago 0x30faf22817a2484120e4e8e2951b251681258d00 Premia: PREMIA Token0 ETH
0x9e37eb7b4d6f96548108ddb629aeeb9aebb0fdaa81bdcc61177eb8ef2b7086f41074693622023-07-28 9:45:01245 days 1 hr ago Uniswap V3: Router Premia: PREMIA Token0 ETH
0x9e37eb7b4d6f96548108ddb629aeeb9aebb0fdaa81bdcc61177eb8ef2b7086f41074693622023-07-28 9:45:01245 days 1 hr ago 0x30faf22817a2484120e4e8e2951b251681258d00 Premia: PREMIA Token0 ETH
0x9e37eb7b4d6f96548108ddb629aeeb9aebb0fdaa81bdcc61177eb8ef2b7086f41074693622023-07-28 9:45:01245 days 1 hr ago Paraswap v5: Augustus Swapper Premia: PREMIA Token0 ETH
0x9e37eb7b4d6f96548108ddb629aeeb9aebb0fdaa81bdcc61177eb8ef2b7086f41074693622023-07-28 9:45:01245 days 1 hr ago Paraswap v5: Token Transfer Proxy Premia: PREMIA Token0 ETH
0x0d804fbfe92e3e21f39a2b092a4e39b90fa1f44067be0a4148981e375406e4001074681652023-07-28 9:05:07245 days 2 hrs ago 0xbfdc37499d99046710a9c567016791c71cd25cf6 Premia: PREMIA Token0 ETH
[ Download CSV Export 
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x7c6b91d9be155a6db01f749217d76ff02a7227f2
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
L2StandardERC20

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Optimistic.Etherscan.io on 2021-11-28
*/

// File @openzeppelin/contracts/token/ERC20/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

pragma solidity ^0.8.0;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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


// File @openzeppelin/contracts/utils/[email protected]

pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/token/ERC20/[email protected]

pragma solidity ^0.8.0;



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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/introspection/[email protected]

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


// File contracts/standards/IL2StandardERC20.sol

pragma solidity ^0.8.9;


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 contracts/standards/L2StandardERC20.sol

pragma solidity ^0.8.9;


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

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

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

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

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

        emit Mint(_to, _amount);
    }

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

        emit Burn(_from, _amount);
    }
}

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"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a9059cbb11610066578063a9059cbb14610215578063ae1f6aaf14610228578063c01e1bd61461026d578063dd62ed3e1461028d57600080fd5b806370a08231146101b157806395d89b41146101e75780639dc29fac146101ef578063a457c2d71461020257600080fd5b806323b872dd116100d357806323b872dd14610167578063313ce5671461017a578063395093511461018957806340c10f191461019c57600080fd5b806301ffc9a71461010557806306fdde031461012d578063095ea7b31461014257806318160ddd14610155575b600080fd5b610118610113366004610e4a565b6102d3565b60405190151581526020015b60405180910390f35b610135610393565b6040516101249190610e93565b610118610150366004610f2f565b610425565b6002545b604051908152602001610124565b610118610175366004610f59565b61043b565b60405160128152602001610124565b610118610197366004610f2f565b61050c565b6101af6101aa366004610f2f565b610555565b005b6101596101bf366004610f95565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61013561061a565b6101af6101fd366004610f2f565b610629565b610118610210366004610f2f565b6106e2565b610118610223366004610f2f565b6107a0565b6006546102489073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b6005546102489073ffffffffffffffffffffffffffffffffffffffff1681565b61015961029b366004610fb0565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e27f1d1d8b63000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000084167f01ffc9a700000000000000000000000000000000000000000000000000000000148061038b57507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b949350505050565b6060600380546103a290610fe3565b80601f01602080910402602001604051908101604052809291908181526020018280546103ce90610fe3565b801561041b5780601f106103f05761010080835404028352916020019161041b565b820191906000526020600020905b8154815290600101906020018083116103fe57829003601f168201915b5050505050905090565b60006104323384846107ad565b50600192915050565b600061044884848461092d565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452909152902054828110156104f45760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61050185338584036107ad565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091610432918590610550908690611066565b6107ad565b60065473ffffffffffffffffffffffffffffffffffffffff1633146105bc5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e60448201526064016104eb565b6105c68282610b93565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161060e91815260200190565b60405180910390a25050565b6060600480546103a290610fe3565b60065473ffffffffffffffffffffffffffffffffffffffff1633146106905760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e60448201526064016104eb565b61069a8282610c99565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161060e91815260200190565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107895760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016104eb565b61079633858584036107ad565b5060019392505050565b600061043233848461092d565b73ffffffffffffffffffffffffffffffffffffffff83166108355760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016104eb565b73ffffffffffffffffffffffffffffffffffffffff82166108be5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016104eb565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109b65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104eb565b73ffffffffffffffffffffffffffffffffffffffff8216610a3f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016104eb565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610adb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016104eb565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b1f908490611066565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b8591815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610bf65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104eb565b8060026000828254610c089190611066565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610c42908490611066565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610d225760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104eb565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610dbe5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016104eb565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610dfa90849061107e565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610920565b600060208284031215610e5c57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e8c57600080fd5b9392505050565b600060208083528351808285015260005b81811015610ec057858101830151858201604001528201610ea4565b81811115610ed2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2a57600080fd5b919050565b60008060408385031215610f4257600080fd5b610f4b83610f06565b946020939093013593505050565b600080600060608486031215610f6e57600080fd5b610f7784610f06565b9250610f8560208501610f06565b9150604084013590509250925092565b600060208284031215610fa757600080fd5b610e8c82610f06565b60008060408385031215610fc357600080fd5b610fcc83610f06565b9150610fda60208401610f06565b90509250929050565b600181811c90821680610ff757607f821691505b60208210811415611031577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561107957611079611037565b500190565b60008282101561109057611090611037565b50039056fea2646970667358221220cf6f2a647337a3023928b1f0a8286454f8c5755dd6ed9bb72c21a4693b3d555b64736f6c63430008090033

Deployed ByteCode Sourcemap

17782:1466:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18477:454;;;;;;:::i;:::-;;:::i;:::-;;;516:14:1;;509:22;491:41;;479:2;464:18;18477:454:0;;;;;;;;6451:100;;;:::i;:::-;;;;;;;:::i;8618:169::-;;;;;;:::i;:::-;;:::i;7571:108::-;7659:12;;7571:108;;;1810:25:1;;;1798:2;1783:18;7571:108:0;1664:177:1;9269:492:0;;;;;;:::i;:::-;;:::i;7413:93::-;;;7496:2;2321:36:1;;2309:2;2294:18;7413:93:0;2179:184:1;10170:215:0;;;;;;:::i;:::-;;:::i;18939:146::-;;;;;;:::i;:::-;;:::i;:::-;;7742:127;;;;;;:::i;:::-;7843:18;;7816:7;7843:18;;;;;;;;;;;;7742:127;6670:104;;;:::i;19093:152::-;;;;;;:::i;:::-;;:::i;10888:413::-;;;;;;:::i;:::-;;:::i;8082:175::-;;;;;;:::i;:::-;;:::i;17870:23::-;;;;;;;;;;;;2735:42:1;2723:55;;;2705:74;;2693:2;2678:18;17870:23:0;2559:226:1;17841:22:0;;;;;;;;;8320:151;;;;;;:::i;:::-;8436:18;;;;8409:7;8436:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8320:151;18477:454;18546:4;18603:38;18697:125;18840:39;;;;;;:83;;-1:-1:-1;18883:40:0;;;;;;;;18840:83;18833:90;18477:454;-1:-1:-1;;;;18477:454:0:o;6451:100::-;6505:13;6538:5;6531:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6451:100;:::o;8618:169::-;8701:4;8718:39;4242:10;8741:7;8750:6;8718:8;:39::i;:::-;-1:-1:-1;8775:4:0;8618:169;;;;:::o;9269:492::-;9409:4;9426:36;9436:6;9444:9;9455:6;9426:9;:36::i;:::-;9502:19;;;9475:24;9502:19;;;:11;:19;;;;;;;;4242:10;9502:33;;;;;;;;9554:26;;;;9546:79;;;;-1:-1:-1;;;9546:79:0;;3699:2:1;9546:79:0;;;3681:21:1;3738:2;3718:18;;;3711:30;3777:34;3757:18;;;3750:62;3848:10;3828:18;;;3821:38;3876:19;;9546:79:0;;;;;;;;;9661:57;9670:6;4242:10;9711:6;9692:16;:25;9661:8;:57::i;:::-;-1:-1:-1;9749:4:0;;9269:492;-1:-1:-1;;;;9269:492:0:o;10170:215::-;4242:10;10258:4;10307:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;10258:4;;10275:80;;10298:7;;10307:47;;10344:10;;10307:47;:::i;:::-;10275:8;:80::i;18939:146::-;18404:8;;;;18390:10;:22;18382:67;;;;-1:-1:-1;;;18382:67:0;;4430:2:1;18382:67:0;;;4412:21:1;;;4449:18;;;4442:30;4508:34;4488:18;;;4481:62;4560:18;;18382:67:0;4228:356:1;18382:67:0;19022:19:::1;19028:3;19033:7;19022:5;:19::i;:::-;19064:3;19059:18;;;19069:7;19059:18;;;;1810:25:1::0;;1798:2;1783:18;;1664:177;19059:18:0::1;;;;;;;;18939:146:::0;;:::o;6670:104::-;6726:13;6759:7;6752:14;;;;;:::i;19093:152::-;18404:8;;;;18390:10;:22;18382:67;;;;-1:-1:-1;;;18382:67:0;;4430:2:1;18382:67:0;;;4412:21:1;;;4449:18;;;4442:30;4508:34;4488:18;;;4481:62;4560:18;;18382:67:0;4228:356:1;18382:67:0;19178:21:::1;19184:5;19191:7;19178:5;:21::i;:::-;19222:5;19217:20;;;19229:7;19217:20;;;;1810:25:1::0;;1798:2;1783:18;;1664:177;10888:413:0;4242:10;10981:4;11025:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;11078:35;;;;11070:85;;;;-1:-1:-1;;;11070:85:0;;4791:2:1;11070:85:0;;;4773:21:1;4830:2;4810:18;;;4803:30;4869:34;4849:18;;;4842:62;4940:7;4920:18;;;4913:35;4965:19;;11070:85:0;4589:401:1;11070:85:0;11191:67;4242:10;11214:7;11242:15;11223:16;:34;11191:8;:67::i;:::-;-1:-1:-1;11289:4:0;;10888:413;-1:-1:-1;;;10888:413:0:o;8082:175::-;8168:4;8185:42;4242:10;8209:9;8220:6;8185:9;:42::i;14572:380::-;14708:19;;;14700:68;;;;-1:-1:-1;;;14700:68:0;;5197:2:1;14700:68:0;;;5179:21:1;5236:2;5216:18;;;5209:30;5275:34;5255:18;;;5248:62;5346:6;5326:18;;;5319:34;5370:19;;14700:68:0;4995:400:1;14700:68:0;14787:21;;;14779:68;;;;-1:-1:-1;;;14779:68:0;;5602:2:1;14779:68:0;;;5584:21:1;5641:2;5621:18;;;5614:30;5680:34;5660:18;;;5653:62;5751:4;5731:18;;;5724:32;5773:19;;14779:68:0;5400:398:1;14779:68:0;14860:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14912:32;;1810:25:1;;;14912:32:0;;1783:18:1;14912:32:0;;;;;;;;14572:380;;;:::o;11791:733::-;11931:20;;;11923:70;;;;-1:-1:-1;;;11923:70:0;;6005:2:1;11923:70:0;;;5987:21:1;6044:2;6024:18;;;6017:30;6083:34;6063:18;;;6056:62;6154:7;6134:18;;;6127:35;6179:19;;11923:70:0;5803:401:1;11923:70:0;12012:23;;;12004:71;;;;-1:-1:-1;;;12004:71:0;;6411:2:1;12004:71:0;;;6393:21:1;6450:2;6430:18;;;6423:30;6489:34;6469:18;;;6462:62;6560:5;6540:18;;;6533:33;6583:19;;12004:71:0;6209:399:1;12004:71:0;12172:17;;;12148:21;12172:17;;;;;;;;;;;12208:23;;;;12200:74;;;;-1:-1:-1;;;12200:74:0;;6815:2:1;12200:74:0;;;6797:21:1;6854:2;6834:18;;;6827:30;6893:34;6873:18;;;6866:62;6964:8;6944:18;;;6937:36;6990:19;;12200:74:0;6613:402:1;12200:74:0;12310:17;;;;:9;:17;;;;;;;;;;;12330:22;;;12310:42;;12374:20;;;;;;;;:30;;12346:6;;12310:9;12374:30;;12346:6;;12374:30;:::i;:::-;;;;;;;;12439:9;12422:35;;12431:6;12422:35;;;12450:6;12422:35;;;;1810:25:1;;1798:2;1783:18;;1664:177;12422:35:0;;;;;;;;11912:612;11791:733;;;:::o;12811:399::-;12895:21;;;12887:65;;;;-1:-1:-1;;;12887:65:0;;7222:2:1;12887:65:0;;;7204:21:1;7261:2;7241:18;;;7234:30;7300:33;7280:18;;;7273:61;7351:18;;12887:65:0;7020:355:1;12887:65:0;13043:6;13027:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;13060:18:0;;;:9;:18;;;;;;;;;;:28;;13082:6;;13060:9;:28;;13082:6;;13060:28;:::i;:::-;;;;-1:-1:-1;;13104:37:0;;1810:25:1;;;13104:37:0;;;;13121:1;;13104:37;;1798:2:1;1783:18;13104:37:0;;;;;;;12811:399;;:::o;13543:591::-;13627:21;;;13619:67;;;;-1:-1:-1;;;13619:67:0;;7582:2:1;13619:67:0;;;7564:21:1;7621:2;7601:18;;;7594:30;7660:34;7640:18;;;7633:62;7731:3;7711:18;;;7704:31;7752:19;;13619:67:0;7380:397:1;13619:67:0;13786:18;;;13761:22;13786:18;;;;;;;;;;;13823:24;;;;13815:71;;;;-1:-1:-1;;;13815:71:0;;7984:2:1;13815:71:0;;;7966:21:1;8023:2;8003:18;;;7996:30;8062:34;8042:18;;;8035:62;8133:4;8113:18;;;8106:32;8155:19;;13815:71:0;7782:398:1;13815:71:0;13922:18;;;:9;:18;;;;;;;;;;13943:23;;;13922:44;;13988:12;:22;;13960:6;;13922:9;13988:22;;13960:6;;13988:22;:::i;:::-;;;;-1:-1:-1;;14028:37:0;;1810:25:1;;;14054:1:0;;14028:37;;;;;;1798:2:1;1783:18;14028:37:0;1664:177:1;14:332;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;199:117;335:5;14:332;-1:-1:-1;;;14:332:1:o;543:656::-;655:4;684:2;713;702:9;695:21;745:6;739:13;788:6;783:2;772:9;768:18;761:34;813:1;823:140;837:6;834:1;831:13;823:140;;;932:14;;;928:23;;922:30;898:17;;;917:2;894:26;887:66;852:10;;823:140;;;981:6;978:1;975:13;972:91;;;1051:1;1046:2;1037:6;1026:9;1022:22;1018:31;1011:42;972:91;-1:-1:-1;1115:2:1;1103:15;1120:66;1099:88;1084:104;;;;1190:2;1080:113;;543:656;-1:-1:-1;;;543:656:1:o;1204:196::-;1272:20;;1332:42;1321:54;;1311:65;;1301:93;;1390:1;1387;1380:12;1301:93;1204:196;;;:::o;1405:254::-;1473:6;1481;1534:2;1522:9;1513:7;1509:23;1505:32;1502:52;;;1550:1;1547;1540:12;1502:52;1573:29;1592:9;1573:29;:::i;:::-;1563:39;1649:2;1634:18;;;;1621:32;;-1:-1:-1;;;1405:254:1:o;1846:328::-;1923:6;1931;1939;1992:2;1980:9;1971:7;1967:23;1963:32;1960:52;;;2008:1;2005;1998:12;1960:52;2031:29;2050:9;2031:29;:::i;:::-;2021:39;;2079:38;2113:2;2102:9;2098:18;2079:38;:::i;:::-;2069:48;;2164:2;2153:9;2149:18;2136:32;2126:42;;1846:328;;;;;:::o;2368:186::-;2427:6;2480:2;2468:9;2459:7;2455:23;2451:32;2448:52;;;2496:1;2493;2486:12;2448:52;2519:29;2538:9;2519:29;:::i;2790:260::-;2858:6;2866;2919:2;2907:9;2898:7;2894:23;2890:32;2887:52;;;2935:1;2932;2925:12;2887:52;2958:29;2977:9;2958:29;:::i;:::-;2948:39;;3006:38;3040:2;3029:9;3025:18;3006:38;:::i;:::-;2996:48;;2790:260;;;;;:::o;3055:437::-;3134:1;3130:12;;;;3177;;;3198:61;;3252:4;3244:6;3240:17;3230:27;;3198:61;3305:2;3297:6;3294:14;3274:18;3271:38;3268:218;;;3342:77;3339:1;3332:88;3443:4;3440:1;3433:15;3471:4;3468:1;3461:15;3268:218;;3055:437;;;:::o;3906:184::-;3958:77;3955:1;3948:88;4055:4;4052:1;4045:15;4079:4;4076:1;4069:15;4095:128;4135:3;4166:1;4162:6;4159:1;4156:13;4153:39;;;4172:18;;:::i;:::-;-1:-1:-1;4208:9:1;;4095:128::o;8185:125::-;8225:4;8253:1;8250;8247:8;8244:34;;;8258:18;;:::i;:::-;-1:-1:-1;8295:9:1;;8185:125::o

Swarm Source

ipfs://cf6f2a647337a3023928b1f0a8286454f8c5755dd6ed9bb72c21a4693b3d555b
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.