Contract 0xaFB2820316e7Bc5Ef78d295AB9b8Bb2257534576 9

 

Contract Overview

Raft: R Token
Balance:
0 ETH

EtherValue:
$0.00

Token:
Txn Hash Method
Block
From
To
Value
0x511540e897bcee5f47f93df7ca0210d89740ca7b92baefd5a4ce409c7b8daa06Approve132001882024-04-15 14:02:038 hrs 57 mins ago0xf9f39bdcab51b908c54af7aed284d6523134d71b IN  Raft: R Token0 ETH0.0000025958330.104501287
0xf7dc51dc4d6eeea16b6a91e4d43b1be628b1ffd98d22429e70fdb28b94cf8b8cBurn131811252024-04-15 3:26:3719 hrs 32 mins ago0x8a37b6e721cc4aedeef4b1a6bc0fc66db514709f IN  Raft: R Token0 ETH0.0000004762270.0193
0xc78a35d57ab9c0df052b3d00e640efb41010e1417a459fa2369521216d1977a0Burn131811192024-04-15 3:26:2519 hrs 32 mins ago0x8a37b6e721cc4aedeef4b1a6bc0fc66db514709f IN  Raft: R Token0 ETH0.0000004779060.0194
0x550054ad243a3d671111d6ad9cd984cd37e6b81f45229fe38272dca2f6ec706aApprove131100712024-04-13 11:58:092 days 11 hrs ago0x41f39bf85805740f33677f9f0d45263a19c9984b IN  Raft: R Token0 ETH0.0000012714260.0268
0x9c741e74b4be0fcc6c86ffa146e84e832fc9e695493e0bdfe4aa6e02494d903eBurn130977942024-04-13 5:08:552 days 17 hrs ago0x560dd482c42347e8194bbf1b1e78e0c75c11417d IN  Raft: R Token0 ETH0.0000002886460.0112
0xedae039118388297d6c85bd494ef4fac2e7ce203254af835bcb7621915a51db5Approve127961352024-04-06 5:33:379 days 17 hrs ago0xefa4eb498124bf3b1ba6dde63852aecc07db9aad IN  Raft: R Token0 ETH0.0000003533410.012456913
0xb6f13f949c8e3640a8ebc477e0ad2108ceff7ca37a38e78430941acc324e1a93Approve127960132024-04-06 5:29:339 days 17 hrs ago0x5efa768165b6abd0cc6a1211ab49aafdd103e379 IN  Raft: R Token0 ETH0.0000003541810.012436407
0xa9cdaaf8c5143c758a79bc4ccd1dee3d235ec1b0aa204171eb8238fe0e12f1bbApprove127950052024-04-06 4:55:579 days 18 hrs ago0x676a608c92a9318ce9318b54575dfda615687184 IN  Raft: R Token0 ETH0.0000003391470.011915141
0x38913f3a1bdf8ced0c01c0d8ac656ca1dbed5631c18c8242ea3d0e72686756b7Approve127940612024-04-06 4:24:299 days 18 hrs ago0x78a985a0fa94e108576ffc0852d6d1c037ecc491 IN  Raft: R Token0 ETH0.000000620230.01286869
0x517029b30a66e282995d720da2ad798cf3b805390220eb17f8e21ecf72da2ed9Approve127560572024-04-05 7:17:4110 days 15 hrs ago0x496fbf5f8e6071238f837d977907d74d03aee3f6 IN  Raft: R Token0 ETH0.0000001367190.003893682
0x0550e8c84742759ed934eabf02337ee141f3b05ad0b685f1dbf46540c7ef11feApprove127456592024-04-05 1:31:0510 days 21 hrs ago0xe34f8a01270674748f3f3cd8410e52fc313d7b20 IN  Raft: R Token0 ETH0.0000013627470.028665077
0x6b226e188777c422b0b1fd359e1d2903c3e1d4ac77b85b8635bf579fe35e9d18Approve127400612024-04-04 22:24:2911 days 34 mins ago0xc8e48c4c0c8b0dd3778e2a53e76a1d2f6bfafa33 IN  Raft: R Token0 ETH0.0000011428160.023411444
0x115fb1d8a92c09460a778d3b1e196321093e667b1d39631d57faa584138866b9Approve126705622024-04-03 7:47:5112 days 15 hrs ago0x072dbcd8e60597c64ffed7527c1dfb3138a365a7 IN  Raft: R Token0 ETH0.0000081269080.00264329
0x2ac54e2dafb878f589b01c724d22167b0ebda5d728186bcc2d0ef3a1795c91c9Approve126673062024-04-03 5:59:1912 days 16 hrs ago0x5ab645d2fad370e6bff2557c795392a721fd662a IN  Raft: R Token0 ETH0.0000053127820.002271507
0x06debfa515202de738bd3dbb24aea3cee1c9386be3df924d27985d7c457d5e66Approve126643672024-04-03 4:21:2112 days 18 hrs ago0x993031196ce56e1018c8e22c86e8679f0fb998ab IN  Raft: R Token0 ETH0.0000064146780.001767393
0x6db7f9f5970e3ce9d354c395cf443e691b2ef100800bd7e4e6594695605adb94Approve126626552024-04-03 3:24:1712 days 19 hrs ago0xff4cf0d9110ae1ffa0667ef53ef3083e9de9f17a IN  Raft: R Token0 ETH0.0000053204180.002245008
0xda48cfb018c9c62241d53b4908d68cc453b027110708746410ab25f610eb94a6Approve126622432024-04-03 3:10:3312 days 19 hrs ago0x8b9be10f80f7efe75ecf0ce062e98c1dd5b5389a IN  Raft: R Token0 ETH0.0000057581460.002494265
0xe64ad149101409fbc3dce38189b0a83e04597f9c83611952cf14f00d4b502602Approve126594802024-04-03 1:38:2712 days 21 hrs ago0x38037d1d6da0864263430e9634a7160d13ec98c0 IN  Raft: R Token0 ETH0.0000059000910.005527889
0x9ca5e315e64f40ab6da7a6e09af831adce2def38dcc642f3f069a8b615b10422Approve126589922024-04-03 1:22:1112 days 21 hrs ago0x680c6dd4c42d6074a4901393d5f43f6f51cc2ce5 IN  Raft: R Token0 ETH0.0000026308360.006424685
0x3446ee2deae57dd0b1cfc07c1133cb48bd22f09cb7e345a44d847558d078403aApprove126579812024-04-03 0:48:2912 days 22 hrs ago0x9894278a8d1a32ae911183569e7043d42ce8b496 IN  Raft: R Token0 ETH0.0000053503370.002801976
0x5070add8838da053fa2361dc3f0837c7baf6db50f48ef23e87ca6bfe83eae43fApprove126523552024-04-02 21:40:5713 days 1 hr ago0xc561ae4aa627e1ae52b6ecf7c1c13a9f4b14ed0e IN  Raft: R Token0 ETH0.0000058623420.013362309
0xe0cf62cf94f93cf6fa2c893377d9c0b3f1f3b48a4f0a85b4b1adbd4023e96b31Approve126468702024-04-02 18:38:0713 days 4 hrs ago0x13508bd99465704a3679dc123a153f5433b0cd82 IN  Raft: R Token0 ETH0.000010661920.104036764
0x34c7dea09d0993edfc9bb037bc4328d996ce808c58e807f1aa44cffccf37787aApprove126452462024-04-02 17:43:5913 days 5 hrs ago0x08f83e8860912f8c8186461ea00db5f6030c70f6 IN  Raft: R Token0 ETH0.0000079953490.031722587
0xc39f85b0040f941142e1dbfdf9e5230584dfe80cf170312e2b577298bd865d22Approve126452162024-04-02 17:42:5913 days 5 hrs ago0x167427c8f00a8e975f213161745dc8c240bcf3d1 IN  Raft: R Token0 ETH0.0000080017170.032828961
0x7f447148a4683ab8d0ff515ff9d837350e661954fe8e6669a567921a5627a897Approve126119802024-04-01 23:15:0713 days 23 hrs ago0xe646d9d0460c4b6ea4c26f7b598456f5f1917570 IN  Raft: R Token0 ETH0.0000063507410.033531864
[ Download CSV Export 

OVERVIEW

R is a decentralized USD-pegged stablecoin backed by multiple collateral assets and reserve assets such as CHAI, the yield-bearing version of the DAI stablecoin.

Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RTokenL2

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2023-09-05
*/

// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.19;

// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

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

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

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

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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

/**
 * @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.openzeppelin.com/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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - 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 {}
}

interface IRTokenL2 {
    // --- Functions ---

    /// @dev Mints `amount` tokens to `to`
    /// @param to The address to mint tokens to
    /// @param amount The amount of tokens to mint
    function mint(address to, uint256 amount) external;

    /// @dev Burns `amount` tokens from `msg.sender`
    /// @param amount The amount of tokens to burn
    function burn(uint256 amount) external;
}

// OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol)

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Contract module which provides access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership} and {acceptOwnership}.
 *
 * This module is used through inheritance. It will make available all functions
 * from parent (Ownable).
 */
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Returns the address of the pending owner.
     */
    function pendingOwner() public view virtual returns (address) {
        return _pendingOwner;
    }

    /**
     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    /**
     * @dev The new owner accepts the ownership transfer.
     */
    function acceptOwnership() external {
        address sender = _msgSender();
        require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner");
        _transferOwnership(sender);
    }
}

interface IWhitelistAddress {
    // --- Errors ---

    /// @dev Address is not whitelisted.
    error AddressIsNotWhitelisted(address);

    /// @dev Invalid address for whitelist.
    error InvalidWhitelistAddress();

    // --- Events ---

    /// @dev Address is whitelisted or unwhitelisted.
    /// @param addressForWhitelist Address to whitelist or unwhitelist.
    /// @param whitelisted True if address is whitelisted, false if unwhitelisted.
    event AddressWhitelisted(address indexed addressForWhitelist, bool whitelisted);

    // --- Functions ---

    /// @dev Checks if address is whitelisted.
    /// @param _addressToCheck Address to check is whitelisted.
    function isWhitelisted(address _addressToCheck) external view returns (bool);

    /// @dev Whitelist or unwhitelist address.
    /// @param addressForWhitelist Address to whitelist or unwhitelist.
    /// @param whitelisted True if address is whitelisted, false if unwhitelisted.
    function whitelistAddress(address addressForWhitelist, bool whitelisted) external;
}

abstract contract WhitelistAddress is Ownable2Step, IWhitelistAddress {
    // --- Variables ---

    mapping(address whitelistAddress => bool isWhitelisted) public override isWhitelisted;

    // --- Modifiers ---

    modifier checkWhitelist() {
        if (!isWhitelisted[msg.sender]) {
            revert AddressIsNotWhitelisted(msg.sender);
        }
        _;
    }

    // --- Functions ---

    function whitelistAddress(address addressForWhitelist, bool whitelisted) external override onlyOwner {
        if (addressForWhitelist == address(0)) {
            revert InvalidWhitelistAddress();
        }
        isWhitelisted[addressForWhitelist] = whitelisted;

        emit AddressWhitelisted(addressForWhitelist, whitelisted);
    }
}

contract RTokenL2 is ERC20, WhitelistAddress, IRTokenL2 {
    // --- Constructor ---

    // solhint-disable-next-line no-empty-blocks
    constructor(string memory name_, string memory symbol_) ERC20(name_, symbol_) { }

    // --- Functions ---

    function mint(address to, uint256 amount) external override checkWhitelist {
        _mint(to, amount);
    }

    function burn(uint256 amount) external override checkWhitelist {
        _burn(msg.sender, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AddressIsNotWhitelisted","type":"error"},{"inputs":[],"name":"InvalidWhitelistAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addressForWhitelist","type":"address"},{"indexed":false,"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"AddressWhitelisted","type":"event"},{"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"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":[{"internalType":"address","name":"whitelistAddress","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"isWhitelisted","type":"bool"}],"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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addressForWhitelist","type":"address"},{"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200121a3803806200121a8339810160408190526200003491620001b1565b81816003620000448382620002aa565b506004620000538282620002aa565b505050620000706200006a6200007860201b60201c565b6200007c565b505062000376565b3390565b600680546001600160a01b031916905562000097816200009a565b50565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200011457600080fd5b81516001600160401b0380821115620001315762000131620000ec565b604051601f8301601f19908116603f011681019082821181831017156200015c576200015c620000ec565b816040528381526020925086838588010111156200017957600080fd5b600091505b838210156200019d57858201830151818301840152908201906200017e565b600093810190920192909252949350505050565b60008060408385031215620001c557600080fd5b82516001600160401b0380821115620001dd57600080fd5b620001eb8683870162000102565b935060208501519150808211156200020257600080fd5b50620002118582860162000102565b9150509250929050565b600181811c908216806200023057607f821691505b6020821081036200025157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002a557600081815260208120601f850160051c81016020861015620002805750805b601f850160051c820191505b81811015620002a1578281556001016200028c565b5050505b505050565b81516001600160401b03811115620002c657620002c6620000ec565b620002de81620002d784546200021b565b8462000257565b602080601f831160018114620003165760008415620002fd5750858301515b600019600386901b1c1916600185901b178555620002a1565b600085815260208120601f198616915b82811015620003475788860151825594840194600190910190840162000326565b5085821015620003665787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610e9480620003866000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063715018a6116100ad578063a9059cbb11610071578063a9059cbb1461027d578063b9a45aac14610290578063dd62ed3e146102a3578063e30c3978146102b6578063f2fde38b146102c757600080fd5b8063715018a61461022d57806379ba5097146102355780638da5cb5b1461023d57806395d89b4114610262578063a457c2d71461026a57600080fd5b806339509351116100f457806339509351146101a65780633af32abf146101b957806340c10f19146101dc57806342966c68146101f157806370a082311461020457600080fd5b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017257806323b872dd14610184578063313ce56714610197575b600080fd5b6101396102da565b6040516101469190610c89565b60405180910390f35b61016261015d366004610cf3565b61036c565b6040519015158152602001610146565b6002545b604051908152602001610146565b610162610192366004610d1d565b610386565b60405160128152602001610146565b6101626101b4366004610cf3565b6103aa565b6101626101c7366004610d59565b60076020526000908152604090205460ff1681565b6101ef6101ea366004610cf3565b6103cc565b005b6101ef6101ff366004610d7b565b610411565b610176610212366004610d59565b6001600160a01b031660009081526020819052604090205490565b6101ef610450565b6101ef610464565b6005546001600160a01b03165b6040516001600160a01b039091168152602001610146565b6101396104db565b610162610278366004610cf3565b6104ea565b61016261028b366004610cf3565b610565565b6101ef61029e366004610d94565b610573565b6101766102b1366004610dd0565b610601565b6006546001600160a01b031661024a565b6101ef6102d5366004610d59565b61062c565b6060600380546102e990610e03565b80601f016020809104026020016040519081016040528092919081815260200182805461031590610e03565b80156103625780601f1061033757610100808354040283529160200191610362565b820191906000526020600020905b81548152906001019060200180831161034557829003601f168201915b5050505050905090565b60003361037a81858561069d565b60019150505b92915050565b6000336103948582856107c2565b61039f85858561083c565b506001949350505050565b60003361037a8185856103bd8383610601565b6103c79190610e3d565b61069d565b3360009081526007602052604090205460ff166104035760405163017a339b60e71b81523360048201526024015b60405180910390fd5b61040d82826109e0565b5050565b3360009081526007602052604090205460ff166104435760405163017a339b60e71b81523360048201526024016103fa565b61044d3382610a9f565b50565b610458610bc9565b6104626000610c23565b565b60065433906001600160a01b031681146104d25760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016103fa565b61044d81610c23565b6060600480546102e990610e03565b600033816104f88286610601565b9050838110156105585760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103fa565b61039f828686840361069d565b60003361037a81858561083c565b61057b610bc9565b6001600160a01b0382166105a257604051634d553d1960e01b815260040160405180910390fd5b6001600160a01b038216600081815260076020908152604091829020805460ff191685151590811790915591519182527faf367c7d20ce5b2ab6da56afd0c9c39b00ba995263c60292a3e1ee3781fd4885910160405180910390a25050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610634610bc9565b600680546001600160a01b0383166001600160a01b031990911681179091556106656005546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b0383166106ff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103fa565b6001600160a01b0382166107605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103fa565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006107ce8484610601565b9050600019811461083657818110156108295760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103fa565b610836848484840361069d565b50505050565b6001600160a01b0383166108a05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103fa565b6001600160a01b0382166109025760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103fa565b6001600160a01b0383166000908152602081905260409020548181101561097a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103fa565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610836565b6001600160a01b038216610a365760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103fa565b8060026000828254610a489190610e3d565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610aff5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103fa565b6001600160a01b03821660009081526020819052604090205481811015610b735760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103fa565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016107b5565b6005546001600160a01b031633146104625760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103fa565b600680546001600160a01b031916905561044d81600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b81811015610cb657858101830151858201604001528201610c9a565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610cee57600080fd5b919050565b60008060408385031215610d0657600080fd5b610d0f83610cd7565b946020939093013593505050565b600080600060608486031215610d3257600080fd5b610d3b84610cd7565b9250610d4960208501610cd7565b9150604084013590509250925092565b600060208284031215610d6b57600080fd5b610d7482610cd7565b9392505050565b600060208284031215610d8d57600080fd5b5035919050565b60008060408385031215610da757600080fd5b610db083610cd7565b915060208301358015158114610dc557600080fd5b809150509250929050565b60008060408385031215610de357600080fd5b610dec83610cd7565b9150610dfa60208401610cd7565b90509250929050565b600181811c90821680610e1757607f821691505b602082108103610e3757634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561038057634e487b7160e01b600052601160045260246000fdfea2646970667358221220b9a2692b9f79900c40b51458cb2796646d174c5d8575bcebbe5c7dea995395ad64736f6c6343000813003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c5220537461626c65636f696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015200000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063715018a6116100ad578063a9059cbb11610071578063a9059cbb1461027d578063b9a45aac14610290578063dd62ed3e146102a3578063e30c3978146102b6578063f2fde38b146102c757600080fd5b8063715018a61461022d57806379ba5097146102355780638da5cb5b1461023d57806395d89b4114610262578063a457c2d71461026a57600080fd5b806339509351116100f457806339509351146101a65780633af32abf146101b957806340c10f19146101dc57806342966c68146101f157806370a082311461020457600080fd5b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017257806323b872dd14610184578063313ce56714610197575b600080fd5b6101396102da565b6040516101469190610c89565b60405180910390f35b61016261015d366004610cf3565b61036c565b6040519015158152602001610146565b6002545b604051908152602001610146565b610162610192366004610d1d565b610386565b60405160128152602001610146565b6101626101b4366004610cf3565b6103aa565b6101626101c7366004610d59565b60076020526000908152604090205460ff1681565b6101ef6101ea366004610cf3565b6103cc565b005b6101ef6101ff366004610d7b565b610411565b610176610212366004610d59565b6001600160a01b031660009081526020819052604090205490565b6101ef610450565b6101ef610464565b6005546001600160a01b03165b6040516001600160a01b039091168152602001610146565b6101396104db565b610162610278366004610cf3565b6104ea565b61016261028b366004610cf3565b610565565b6101ef61029e366004610d94565b610573565b6101766102b1366004610dd0565b610601565b6006546001600160a01b031661024a565b6101ef6102d5366004610d59565b61062c565b6060600380546102e990610e03565b80601f016020809104026020016040519081016040528092919081815260200182805461031590610e03565b80156103625780601f1061033757610100808354040283529160200191610362565b820191906000526020600020905b81548152906001019060200180831161034557829003601f168201915b5050505050905090565b60003361037a81858561069d565b60019150505b92915050565b6000336103948582856107c2565b61039f85858561083c565b506001949350505050565b60003361037a8185856103bd8383610601565b6103c79190610e3d565b61069d565b3360009081526007602052604090205460ff166104035760405163017a339b60e71b81523360048201526024015b60405180910390fd5b61040d82826109e0565b5050565b3360009081526007602052604090205460ff166104435760405163017a339b60e71b81523360048201526024016103fa565b61044d3382610a9f565b50565b610458610bc9565b6104626000610c23565b565b60065433906001600160a01b031681146104d25760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016103fa565b61044d81610c23565b6060600480546102e990610e03565b600033816104f88286610601565b9050838110156105585760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103fa565b61039f828686840361069d565b60003361037a81858561083c565b61057b610bc9565b6001600160a01b0382166105a257604051634d553d1960e01b815260040160405180910390fd5b6001600160a01b038216600081815260076020908152604091829020805460ff191685151590811790915591519182527faf367c7d20ce5b2ab6da56afd0c9c39b00ba995263c60292a3e1ee3781fd4885910160405180910390a25050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610634610bc9565b600680546001600160a01b0383166001600160a01b031990911681179091556106656005546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b0383166106ff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103fa565b6001600160a01b0382166107605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103fa565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006107ce8484610601565b9050600019811461083657818110156108295760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103fa565b610836848484840361069d565b50505050565b6001600160a01b0383166108a05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103fa565b6001600160a01b0382166109025760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103fa565b6001600160a01b0383166000908152602081905260409020548181101561097a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103fa565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610836565b6001600160a01b038216610a365760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103fa565b8060026000828254610a489190610e3d565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610aff5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103fa565b6001600160a01b03821660009081526020819052604090205481811015610b735760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103fa565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016107b5565b6005546001600160a01b031633146104625760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103fa565b600680546001600160a01b031916905561044d81600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b81811015610cb657858101830151858201604001528201610c9a565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610cee57600080fd5b919050565b60008060408385031215610d0657600080fd5b610d0f83610cd7565b946020939093013593505050565b600080600060608486031215610d3257600080fd5b610d3b84610cd7565b9250610d4960208501610cd7565b9150604084013590509250925092565b600060208284031215610d6b57600080fd5b610d7482610cd7565b9392505050565b600060208284031215610d8d57600080fd5b5035919050565b60008060408385031215610da757600080fd5b610db083610cd7565b915060208301358015158114610dc557600080fd5b809150509250929050565b60008060408385031215610de357600080fd5b610dec83610cd7565b9150610dfa60208401610cd7565b90509250929050565b600181811c90821680610e1757607f821691505b602082108103610e3757634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561038057634e487b7160e01b600052601160045260246000fdfea2646970667358221220b9a2692b9f79900c40b51458cb2796646d174c5d8575bcebbe5c7dea995395ad64736f6c63430008130033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c5220537461626c65636f696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015200000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): R Stablecoin
Arg [1] : symbol_ (string): R

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [3] : 5220537461626c65636f696e0000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 5200000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

24323:489:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6343:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8694:201;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;8694:201:0;1004:187:1;7463:108:0;7551:12;;7463:108;;;1342:25:1;;;1330:2;1315:18;7463:108:0;1196:177:1;9475:295:0;;;;;;:::i;:::-;;:::i;7305:93::-;;;7388:2;1853:36:1;;1841:2;1826:18;7305:93:0;1711:184:1;10179:238:0;;;;;;:::i;:::-;;:::i;23655:85::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24583:111;;;;;;:::i;:::-;;:::i;:::-;;24702:107;;;;;;:::i;:::-;;:::i;7634:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7735:18:0;7708:7;7735:18;;;;;;;;;;;;7634:127;19816:103;;;:::i;22254:210::-;;;:::i;19168:87::-;19241:6;;-1:-1:-1;;;;;19241:6:0;19168:87;;;-1:-1:-1;;;;;2440:32:1;;;2422:51;;2410:2;2395:18;19168:87:0;2276:203:1;6562:104:0;;;:::i;10920:436::-;;;;;;:::i;:::-;;:::i;7967:193::-;;;;;;:::i;:::-;;:::i;23970:346::-;;;;;;:::i;:::-;;:::i;8223:151::-;;;;;;:::i;:::-;;:::i;21342:101::-;21422:13;;-1:-1:-1;;;;;21422:13:0;21342:101;;21642:181;;;;;;:::i;:::-;;:::i;6343:100::-;6397:13;6430:5;6423:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6343:100;:::o;8694:201::-;8777:4;4233:10;8833:32;4233:10;8849:7;8858:6;8833:8;:32::i;:::-;8883:4;8876:11;;;8694:201;;;;;:::o;9475:295::-;9606:4;4233:10;9664:38;9680:4;4233:10;9695:6;9664:15;:38::i;:::-;9713:27;9723:4;9729:2;9733:6;9713:9;:27::i;:::-;-1:-1:-1;9758:4:0;;9475:295;-1:-1:-1;;;;9475:295:0:o;10179:238::-;10267:4;4233:10;10323:64;4233:10;10339:7;10376:10;10348:25;4233:10;10339:7;10348:9;:25::i;:::-;:38;;;;:::i;:::-;10323:8;:64::i;24583:111::-;23833:10;23819:25;;;;:13;:25;;;;;;;;23814:101;;23868:35;;-1:-1:-1;;;23868:35:0;;23892:10;23868:35;;;2422:51:1;2395:18;;23868:35:0;;;;;;;;23814:101;24669:17:::1;24675:2;24679:6;24669:5;:17::i;:::-;24583:111:::0;;:::o;24702:107::-;23833:10;23819:25;;;;:13;:25;;;;;;;;23814:101;;23868:35;;-1:-1:-1;;;23868:35:0;;23892:10;23868:35;;;2422:51:1;2395:18;;23868:35:0;2276:203:1;23814:101:0;24776:25:::1;24782:10;24794:6;24776:5;:25::i;:::-;24702:107:::0;:::o;19816:103::-;19054:13;:11;:13::i;:::-;19881:30:::1;19908:1;19881:18;:30::i;:::-;19816:103::o:0;22254:210::-;21422:13;;4233:10;;-1:-1:-1;;;;;21422:13:0;22349:24;;22341:78;;;;-1:-1:-1;;;22341:78:0;;3915:2:1;22341:78:0;;;3897:21:1;3954:2;3934:18;;;3927:30;3993:34;3973:18;;;3966:62;-1:-1:-1;;;4044:18:1;;;4037:39;4093:19;;22341:78:0;3713:405:1;22341:78:0;22430:26;22449:6;22430:18;:26::i;6562:104::-;6618:13;6651:7;6644:14;;;;;:::i;10920:436::-;11013:4;4233:10;11013:4;11096:25;4233:10;11113:7;11096:9;:25::i;:::-;11069:52;;11160:15;11140:16;:35;;11132:85;;;;-1:-1:-1;;;11132:85:0;;4325:2:1;11132:85:0;;;4307:21:1;4364:2;4344:18;;;4337:30;4403:34;4383:18;;;4376:62;-1:-1:-1;;;4454:18:1;;;4447:35;4499:19;;11132:85:0;4123:401:1;11132:85:0;11253:60;11262:5;11269:7;11297:15;11278:16;:34;11253:8;:60::i;7967:193::-;8046:4;4233:10;8102:28;4233:10;8119:2;8123:6;8102:9;:28::i;23970:346::-;19054:13;:11;:13::i;:::-;-1:-1:-1;;;;;24086:33:0;::::1;24082:98;;24143:25;;-1:-1:-1::0;;;24143:25:0::1;;;;;;;;;;;24082:98;-1:-1:-1::0;;;;;24190:34:0;::::1;;::::0;;;:13:::1;:34;::::0;;;;;;;;:48;;-1:-1:-1;;24190:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24256:52;;1144:41:1;;;24256:52:0::1;::::0;1117:18:1;24256:52:0::1;;;;;;;23970:346:::0;;:::o;8223:151::-;-1:-1:-1;;;;;8339:18:0;;;8312:7;8339:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8223:151::o;21642:181::-;19054:13;:11;:13::i;:::-;21732::::1;:24:::0;;-1:-1:-1;;;;;21732:24:0;::::1;-1:-1:-1::0;;;;;;21732:24:0;;::::1;::::0;::::1;::::0;;;21797:7:::1;19241:6:::0;;-1:-1:-1;;;;;19241:6:0;;19168:87;21797:7:::1;-1:-1:-1::0;;;;;21772:43:0::1;;;;;;;;;;;21642:181:::0;:::o;14947:380::-;-1:-1:-1;;;;;15083:19:0;;15075:68;;;;-1:-1:-1;;;15075:68:0;;4731:2:1;15075:68:0;;;4713:21:1;4770:2;4750:18;;;4743:30;4809:34;4789:18;;;4782:62;-1:-1:-1;;;4860:18:1;;;4853:34;4904:19;;15075:68:0;4529:400:1;15075:68:0;-1:-1:-1;;;;;15162:21:0;;15154:68;;;;-1:-1:-1;;;15154:68:0;;5136:2:1;15154:68:0;;;5118:21:1;5175:2;5155:18;;;5148:30;5214:34;5194:18;;;5187:62;-1:-1:-1;;;5265:18:1;;;5258:32;5307:19;;15154:68:0;4934:398:1;15154:68:0;-1:-1:-1;;;;;15235:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15287:32;;1342:25:1;;;15287:32:0;;1315:18:1;15287:32:0;;;;;;;;14947:380;;;:::o;15618:453::-;15753:24;15780:25;15790:5;15797:7;15780:9;:25::i;:::-;15753:52;;-1:-1:-1;;15820:16:0;:37;15816:248;;15902:6;15882:16;:26;;15874:68;;;;-1:-1:-1;;;15874:68:0;;5539:2:1;15874:68:0;;;5521:21:1;5578:2;5558:18;;;5551:30;5617:31;5597:18;;;5590:59;5666:18;;15874:68:0;5337:353:1;15874:68:0;15986:51;15995:5;16002:7;16030:6;16011:16;:25;15986:8;:51::i;:::-;15742:329;15618:453;;;:::o;11826:840::-;-1:-1:-1;;;;;11957:18:0;;11949:68;;;;-1:-1:-1;;;11949:68:0;;5897:2:1;11949:68:0;;;5879:21:1;5936:2;5916:18;;;5909:30;5975:34;5955:18;;;5948:62;-1:-1:-1;;;6026:18:1;;;6019:35;6071:19;;11949:68:0;5695:401:1;11949:68:0;-1:-1:-1;;;;;12036:16:0;;12028:64;;;;-1:-1:-1;;;12028:64:0;;6303:2:1;12028:64:0;;;6285:21:1;6342:2;6322:18;;;6315:30;6381:34;6361:18;;;6354:62;-1:-1:-1;;;6432:18:1;;;6425:33;6475:19;;12028:64:0;6101:399:1;12028:64:0;-1:-1:-1;;;;;12178:15:0;;12156:19;12178:15;;;;;;;;;;;12212:21;;;;12204:72;;;;-1:-1:-1;;;12204:72:0;;6707:2:1;12204:72:0;;;6689:21:1;6746:2;6726:18;;;6719:30;6785:34;6765:18;;;6758:62;-1:-1:-1;;;6836:18:1;;;6829:36;6882:19;;12204:72:0;6505:402:1;12204:72:0;-1:-1:-1;;;;;12312:15:0;;;:9;:15;;;;;;;;;;;12330:20;;;12312:38;;12530:13;;;;;;;;;;:23;;;;;;12582:26;;1342:25:1;;;12530:13:0;;12582:26;;1315:18:1;12582:26:0;;;;;;;12621:37;13834:675;12953:548;-1:-1:-1;;;;;13037:21:0;;13029:65;;;;-1:-1:-1;;;13029:65:0;;7114:2:1;13029:65:0;;;7096:21:1;7153:2;7133:18;;;7126:30;7192:33;7172:18;;;7165:61;7243:18;;13029:65:0;6912:355:1;13029:65:0;13185:6;13169:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;13340:18:0;;:9;:18;;;;;;;;;;;:28;;;;;;13395:37;1342:25:1;;;13395:37:0;;1315:18:1;13395:37:0;;;;;;;24583:111;;:::o;13834:675::-;-1:-1:-1;;;;;13918:21:0;;13910:67;;;;-1:-1:-1;;;13910:67:0;;7474:2:1;13910:67:0;;;7456:21:1;7513:2;7493:18;;;7486:30;7552:34;7532:18;;;7525:62;-1:-1:-1;;;7603:18:1;;;7596:31;7644:19;;13910:67:0;7272:397:1;13910:67:0;-1:-1:-1;;;;;14077:18:0;;14052:22;14077:18;;;;;;;;;;;14114:24;;;;14106:71;;;;-1:-1:-1;;;14106:71:0;;7876:2:1;14106:71:0;;;7858:21:1;7915:2;7895:18;;;7888:30;7954:34;7934:18;;;7927:62;-1:-1:-1;;;8005:18:1;;;7998:32;8047:19;;14106:71:0;7674:398:1;14106:71:0;-1:-1:-1;;;;;14213:18:0;;:9;:18;;;;;;;;;;;14234:23;;;14213:44;;14352:12;:22;;;;;;;14403:37;1342:25:1;;;14213:9:0;;:18;14403:37;;1315:18:1;14403:37:0;1196:177:1;19333:132:0;19241:6;;-1:-1:-1;;;;;19241:6:0;4233:10;19397:23;19389:68;;;;-1:-1:-1;;;19389:68:0;;8279:2:1;19389:68:0;;;8261:21:1;;;8298:18;;;8291:30;8357:34;8337:18;;;8330:62;8409:18;;19389:68:0;8077:356:1;22013:156:0;22103:13;22096:20;;-1:-1:-1;;;;;;22096:20:0;;;22127:34;22152:8;20528:6;;;-1:-1:-1;;;;;20545:17:0;;;-1:-1:-1;;;;;;20545:17:0;;;;;;;20578:40;;20528:6;;;20545:17;20528:6;;20578:40;;20509:16;;20578:40;20498:128;20435:191;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;1900:186::-;1959:6;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2051:29;2070:9;2051:29;:::i;:::-;2041:39;1900:186;-1:-1:-1;;;1900:186:1:o;2091:180::-;2150:6;2203:2;2191:9;2182:7;2178:23;2174:32;2171:52;;;2219:1;2216;2209:12;2171:52;-1:-1:-1;2242:23:1;;2091:180;-1:-1:-1;2091:180:1:o;2484:347::-;2549:6;2557;2610:2;2598:9;2589:7;2585:23;2581:32;2578:52;;;2626:1;2623;2616:12;2578:52;2649:29;2668:9;2649:29;:::i;:::-;2639:39;;2728:2;2717:9;2713:18;2700:32;2775:5;2768:13;2761:21;2754:5;2751:32;2741:60;;2797:1;2794;2787:12;2741:60;2820:5;2810:15;;;2484:347;;;;;:::o;2836:260::-;2904:6;2912;2965:2;2953:9;2944:7;2940:23;2936:32;2933:52;;;2981:1;2978;2971:12;2933:52;3004:29;3023:9;3004:29;:::i;:::-;2994:39;;3052:38;3086:2;3075:9;3071:18;3052:38;:::i;:::-;3042:48;;2836:260;;;;;:::o;3101:380::-;3180:1;3176:12;;;;3223;;;3244:61;;3298:4;3290:6;3286:17;3276:27;;3244:61;3351:2;3343:6;3340:14;3320:18;3317:38;3314:161;;3397:10;3392:3;3388:20;3385:1;3378:31;3432:4;3429:1;3422:15;3460:4;3457:1;3450:15;3314:161;;3101:380;;;:::o;3486:222::-;3551:9;;;3572:10;;;3569:133;;;3624:10;3619:3;3615:20;3612:1;3605:31;3659:4;3656:1;3649:15;3687:4;3684:1;3677:15

Swarm Source

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