Contract 0x2dad3a13ef0c6366220f989157009e501e7938f8 13

 
Txn Hash Method
Block
From
To
Value
0x5e0e68ecb5ffadabe7388462895384fb52e31b83f65492f95880eec60d64cebaApprove1132011422023-12-08 2:04:2120 mins ago0xbff734478f1d1e7a313f174f2444d0e366b034b7 IN  Extra Finance: EXTRA Token0 ETH0.0000729245190.008749612
0x118e394e6f0b2f63668db7dcdd4547a3f2d2ecca10af9f50eb539b3121b714a3Approve1131991542023-12-08 0:58:051 hr 27 mins ago0xff7baf23cabfab34871e34fabc0f583b12a92838 IN  Extra Finance: EXTRA Token0 ETH0.0000770263690.009660025
0xfc5ba775e0ba49724a546831fc630e342895bd14c1e8725ae19e43eb868dca81Approve1131988032023-12-08 0:46:231 hr 38 mins ago0x208a17c5fabe5b90282e5906945ff335e39326c4 IN  Extra Finance: EXTRA Token0 ETH0.0000934731470.008870526
0xd8fe69b585620574208d9406e2061eed8648452b050ed8bf7cc705e5239411dfApprove1131985702023-12-08 0:38:371 hr 46 mins ago0x22c427ba8e7e5b4af6c2fa1d95835ec20bcfc780 IN  Extra Finance: EXTRA Token0 ETH0.0000828774270.009446214
0x9e987f9861cf822e3b7488890097aa92e5a893919d8ab55552ee9ee207ba12ecApprove1131982162023-12-08 0:26:491 hr 58 mins ago0x8ff4f2392be66993f1eec0d8ad1a4b11161331df IN  Extra Finance: EXTRA Token0 ETH0.0000697725260.008059137
0x68d5fef6d38f63c8959513dcd12e95bef714aceb6abc7e828752bbb10ba20a63Approve1131982062023-12-08 0:26:291 hr 58 mins ago0x8ff4f2392be66993f1eec0d8ad1a4b11161331df IN  Extra Finance: EXTRA Token0 ETH0.0000742019540.00861461
0x199c58e351757409907b5261ff52f6e59755428e60db43f71ef7c7530e35dc91Approve1131970232023-12-07 23:47:032 hrs 38 mins ago0xe262d54679746af1526f44a5f5c406f8e3f43bf3 IN  Extra Finance: EXTRA Token0 ETH0.0000923271370.008561669
0xee97c8bd8f2aa39538c9562cfdfd5735f4a4a25a01dae8c87dd51238801c5be7Approve1131967612023-12-07 23:38:192 hrs 46 mins ago0xed3ed33dbd72e0542dcdfa66099609db7c8a90fe IN  Extra Finance: EXTRA Token0 ETH0.0000883056840.008904689
0x06eb8e283bdd6f1e3bae69ae2df024693ab75e454c18aa3b6312d834baf5c0daApprove1131964682023-12-07 23:28:332 hrs 56 mins ago0x7690453f91dbadef8a592a32c679d8f0f5e0116b IN  Extra Finance: EXTRA Token0 ETH0.0000903894160.008396047
0x47aab90a397a9d4de3f3361890cece99cd1482a8a53321156a57b13aa5061511Approve1131964402023-12-07 23:27:372 hrs 57 mins ago0xb48cb3742868bfefe0b29c1f298dae0573e1c79c IN  Extra Finance: EXTRA Token0 ETH0.0000980056060.008240732
0xde6980ed93aa1c8a4bac0e667c6957a8d15539bb6faa858a71c0f9c75e1740ccApprove1131951642023-12-07 22:45:053 hrs 40 mins ago0x84fbeb26f4931f94cecd487bea6f7c88f9109e53 IN  Extra Finance: EXTRA Token0 ETH0.0000818084990.0086142
0x3cc15a7176095364a0d5555476da59e801924a0f02e9aec1cf09c9797b737680Approve1131951572023-12-07 22:44:513 hrs 40 mins ago0xba971f58a00e8ffc7e91c0e8e7efccbfbfe8f09e IN  Extra Finance: EXTRA Token0 ETH0.0000872669660.008588677
0x84f0b5cf8b77450085dfd8564f7a9f53bf14099d89c8c0bccd8f25c96ab931e9Approve1131946222023-12-07 22:27:013 hrs 58 mins ago0x7e5c1a665bfd595a8de3ac91dabb37a65db04096 IN  Extra Finance: EXTRA Token0 ETH0.0000832049670.0091723
0x1a5e48135de8aabc713debae6e006358ff22074f01d9c46621ef3cda4c1ab774Approve1131940202023-12-07 22:06:574 hrs 18 mins ago0xb0430a7e47ce0309c7ba242e5bf548ad0ba989bb IN  Extra Finance: EXTRA Token0 ETH0.0001191981580.008262848
0x87089bf7c09003a0090059500206d1db91e014da749e906b6f00e1a8b2ea729cApprove1131930352023-12-07 21:34:074 hrs 51 mins ago0x2d9f73c98f256870887ecfc2dd9114c9d0f97ae2 IN  Extra Finance: EXTRA Token0 ETH0.0001085380420.009167355
0x8698c414339fc892677d3f5fbf7251a31b5082948bebffb1629eedc70dfb3ec1Approve1131919542023-12-07 20:58:055 hrs 27 mins ago0x45854310c3302c5dab9c0c745e8058d485a4ae8a IN  Extra Finance: EXTRA Token0 ETH0.0001052602310.0162055
0x9610b1c434cb785fdc26bf29506f9886c01e0d8a4e561d07a85dd4f280b2ea8fApprove1131914272023-12-07 20:40:315 hrs 44 mins ago0xb4a0c27d79d54fd2eccb6dc9ef9eb49ec706626e IN  Extra Finance: EXTRA Token0 ETH0.0001253765870.01057659
0xb4a028dd3dc40c760863d41f25ac891ce3ea62a511d8163fe770982e1fa55a2bApprove1131909862023-12-07 20:25:495 hrs 59 mins ago0x77e1892fd956c6df5a283804d57ba4c6e2803766 IN  Extra Finance: EXTRA Token0 ETH0.0000937743510.008038883
0x44c0200836d54347ee331d43ff3bfdaed755425165a01199daf5a5e2ef5c66a7Approve1131909422023-12-07 20:24:216 hrs ago0x77e1892fd956c6df5a283804d57ba4c6e2803766 IN  Extra Finance: EXTRA Token0 ETH0.0000960403730.007561118
0x3fce7f394f6c94c26607a5830050ebc4a9d74c38b7939876281e77bdbd2c8392Approve1131908882023-12-07 20:22:336 hrs 2 mins ago0x77e1892fd956c6df5a283804d57ba4c6e2803766 IN  Extra Finance: EXTRA Token0 ETH0.000102877830.007494594
0x1995624aa53e7aef4a555418cd4f27e58059323e2b131d71dbbf82325cdae6b0Approve1131908792023-12-07 20:22:156 hrs 2 mins ago0x77e1892fd956c6df5a283804d57ba4c6e2803766 IN  Extra Finance: EXTRA Token0 ETH0.0001082825550.007871122
0x1e86cc0c2889c1bf8c02eee5b634ed45c159485758a51ca0699f1eb5bd70360fApprove1131908592023-12-07 20:21:356 hrs 3 mins ago0x77e1892fd956c6df5a283804d57ba4c6e2803766 IN  Extra Finance: EXTRA Token0 ETH0.0001098969540.008241782
0xaab36d3ba46d681485e2e561ddcadeac95403cb7c9024e7913bdfd411c7e9446Approve1131908492023-12-07 20:21:156 hrs 3 mins ago0x77e1892fd956c6df5a283804d57ba4c6e2803766 IN  Extra Finance: EXTRA Token0 ETH0.0001069381950.008387571
0x8a4e82acd689b607f70b2e87c7985856dce292a4fbce6815b352dcdcc59b3f42Approve1131908282023-12-07 20:20:336 hrs 4 mins ago0x77e1892fd956c6df5a283804d57ba4c6e2803766 IN  Extra Finance: EXTRA Token0 ETH0.0001143433810.00829178
0x34f6199a0b70d601110f517df554f5914091a3546890c62c62bf8cf4e61ff311Approve1131908042023-12-07 20:19:456 hrs 5 mins ago0x77e1892fd956c6df5a283804d57ba4c6e2803766 IN  Extra Finance: EXTRA Token0 ETH0.0001202279410.008092887
[ Download CSV Export 

OVERVIEW

A community-driven lending & leveraged yield farming protocol built on Optimism.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x2a524a52b2b1e7f07ea8bc196a93b49d53010336509408df379b9ba95ac7b45b1075583882023-07-30 11:12:33130 days 15 hrs ago 0x477fa18b063b7728409570d274f7a055e3da0d6e Extra Finance: EXTRA Token0 ETH
0x2a524a52b2b1e7f07ea8bc196a93b49d53010336509408df379b9ba95ac7b45b1075583882023-07-30 11:12:33130 days 15 hrs ago 0x477fa18b063b7728409570d274f7a055e3da0d6e Extra Finance: EXTRA Token0 ETH
0x2a524a52b2b1e7f07ea8bc196a93b49d53010336509408df379b9ba95ac7b45b1075583882023-07-30 11:12:33130 days 15 hrs ago 0x477fa18b063b7728409570d274f7a055e3da0d6e Extra Finance: EXTRA Token0 ETH
0x2a524a52b2b1e7f07ea8bc196a93b49d53010336509408df379b9ba95ac7b45b1075583882023-07-30 11:12:33130 days 15 hrs ago Velodrome Finance: Router V2 Extra Finance: EXTRA Token0 ETH
0xa91c80505c0f980771244b91b1d41249dde61ef3ea0669359218cc0b73d66f131075583792023-07-30 11:12:15130 days 15 hrs ago 0x477fa18b063b7728409570d274f7a055e3da0d6e Extra Finance: EXTRA Token0 ETH
0xa91c80505c0f980771244b91b1d41249dde61ef3ea0669359218cc0b73d66f131075583792023-07-30 11:12:15130 days 15 hrs ago 0x477fa18b063b7728409570d274f7a055e3da0d6e Extra Finance: EXTRA Token0 ETH
0xa91c80505c0f980771244b91b1d41249dde61ef3ea0669359218cc0b73d66f131075583792023-07-30 11:12:15130 days 15 hrs ago 0x477fa18b063b7728409570d274f7a055e3da0d6e Extra Finance: EXTRA Token0 ETH
0xa91c80505c0f980771244b91b1d41249dde61ef3ea0669359218cc0b73d66f131075583792023-07-30 11:12:15130 days 15 hrs ago Velodrome Finance: Router V2 Extra Finance: EXTRA Token0 ETH
0xe8e073dd6d6e3cbd3b0506abfe66112a40bfac6544d60095bec22b81f09dd2571075583462023-07-30 11:11:09130 days 15 hrs ago 0xe61662c09c30e1f3f3cbaeb9bc1f13838ed18957 Extra Finance: EXTRA Token0 ETH
0xe3d14bc315424d494eb8ef21341a7b8cdebec489064e19dfa188e7157ec540ae1075583372023-07-30 11:10:51130 days 15 hrs ago 0xfffa58e51dac79ae767a65b81a0c73b6b461c46a Extra Finance: EXTRA Token0 ETH
0xe3d14bc315424d494eb8ef21341a7b8cdebec489064e19dfa188e7157ec540ae1075583372023-07-30 11:10:51130 days 15 hrs ago 0x06e5f3bb950940f6897cee7b48577a67a879fff4 Extra Finance: EXTRA Token0 ETH
0xc0f1b2c11e5934a62ca33134a173e9dfbfdf749f39203ed8b90aaf519d5e6de41075583372023-07-30 11:10:51130 days 15 hrs ago 0x477fa18b063b7728409570d274f7a055e3da0d6e Extra Finance: EXTRA Token0 ETH
0xc0f1b2c11e5934a62ca33134a173e9dfbfdf749f39203ed8b90aaf519d5e6de41075583372023-07-30 11:10:51130 days 15 hrs ago 0x477fa18b063b7728409570d274f7a055e3da0d6e Extra Finance: EXTRA Token0 ETH
0xc0f1b2c11e5934a62ca33134a173e9dfbfdf749f39203ed8b90aaf519d5e6de41075583372023-07-30 11:10:51130 days 15 hrs ago 0x477fa18b063b7728409570d274f7a055e3da0d6e Extra Finance: EXTRA Token0 ETH
0xc0f1b2c11e5934a62ca33134a173e9dfbfdf749f39203ed8b90aaf519d5e6de41075583372023-07-30 11:10:51130 days 15 hrs ago Velodrome Finance: Router V2 Extra Finance: EXTRA Token0 ETH
0xe3c4d37c8c1e21ff2fa00845224e8e1eb735af02f9c9ec6fbe2e31b5b9e997e21075583282023-07-30 11:10:33130 days 15 hrs ago 0x4f91f529c62f4f72dd06f0424ac52a151b25688b Extra Finance: EXTRA Token0 ETH
0xe3c4d37c8c1e21ff2fa00845224e8e1eb735af02f9c9ec6fbe2e31b5b9e997e21075583282023-07-30 11:10:33130 days 15 hrs ago Extra Finance: Lending Extra Finance: EXTRA Token0 ETH
0xe3c4d37c8c1e21ff2fa00845224e8e1eb735af02f9c9ec6fbe2e31b5b9e997e21075583282023-07-30 11:10:33130 days 15 hrs ago Extra Finance: Lending Extra Finance: EXTRA Token0 ETH
0xe3c4d37c8c1e21ff2fa00845224e8e1eb735af02f9c9ec6fbe2e31b5b9e997e21075583282023-07-30 11:10:33130 days 15 hrs ago Extra Finance: Lending Extra Finance: EXTRA Token0 ETH
0xe3c4d37c8c1e21ff2fa00845224e8e1eb735af02f9c9ec6fbe2e31b5b9e997e21075583282023-07-30 11:10:33130 days 15 hrs ago 0x4f91f529c62f4f72dd06f0424ac52a151b25688b Extra Finance: EXTRA Token0 ETH
0xe3c4d37c8c1e21ff2fa00845224e8e1eb735af02f9c9ec6fbe2e31b5b9e997e21075583282023-07-30 11:10:33130 days 15 hrs ago 0x4f91f529c62f4f72dd06f0424ac52a151b25688b Extra Finance: EXTRA Token0 ETH
0xe3c4d37c8c1e21ff2fa00845224e8e1eb735af02f9c9ec6fbe2e31b5b9e997e21075583282023-07-30 11:10:33130 days 15 hrs ago 0x4f91f529c62f4f72dd06f0424ac52a151b25688b Extra Finance: EXTRA Token0 ETH
0xe3c4d37c8c1e21ff2fa00845224e8e1eb735af02f9c9ec6fbe2e31b5b9e997e21075583282023-07-30 11:10:33130 days 15 hrs ago 0x477fa18b063b7728409570d274f7a055e3da0d6e Extra Finance: EXTRA Token0 ETH
0xe3c4d37c8c1e21ff2fa00845224e8e1eb735af02f9c9ec6fbe2e31b5b9e997e21075583282023-07-30 11:10:33130 days 15 hrs ago 0x477fa18b063b7728409570d274f7a055e3da0d6e Extra Finance: EXTRA Token0 ETH
0xe3c4d37c8c1e21ff2fa00845224e8e1eb735af02f9c9ec6fbe2e31b5b9e997e21075583282023-07-30 11:10:33130 days 15 hrs ago 0x477fa18b063b7728409570d274f7a055e3da0d6e Extra Finance: EXTRA Token0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EXTRA

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.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);
    }
}

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

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.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 {}
}

File 3 of 6 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.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);
}

File 4 of 6 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

File 5 of 6 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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 6 of 6 : EXTRA.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./external/openzeppelin/contracts/token/ERC20/ERC20.sol";
import "./external/openzeppelin/contracts/access/Ownable.sol";

contract EXTRA is ERC20, Ownable {
    uint256 internal immutable supplyCap;

    constructor(
        string memory name,
        string memory symbol,
        uint256 _supplyCap
    ) ERC20(name, symbol) {
        supplyCap = _supplyCap;
    }

    function cap() public view returns (uint256) {
        return supplyCap;
    }

    function mint(uint256 amount) public onlyOwner {
        require(totalSupply() + amount <= cap(), "suplly cap exceeded");

        _mint(msg.sender, amount);
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"_supplyCap","type":"uint256"}],"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":"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":[{"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":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":"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"}]

60a06040523480156200001157600080fd5b5060405162000f3e38038062000f3e833981016040819052620000349162000197565b8282600362000044838262000299565b50600462000053828262000299565b505050620000706200006a6200007c60201b60201c565b62000080565b60805250620003659050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000fa57600080fd5b81516001600160401b0380821115620001175762000117620000d2565b604051601f8301601f19908116603f01168101908282118183101715620001425762000142620000d2565b816040528381526020925086838588010111156200015f57600080fd5b600091505b8382101562000183578582018301518183018401529082019062000164565b600093810190920192909252949350505050565b600080600060608486031215620001ad57600080fd5b83516001600160401b0380821115620001c557600080fd5b620001d387838801620000e8565b94506020860151915080821115620001ea57600080fd5b50620001f986828701620000e8565b925050604084015190509250925092565b600181811c908216806200021f57607f821691505b6020821081036200024057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029457600081815260208120601f850160051c810160208610156200026f5750805b601f850160051c820191505b8181101562000290578281556001016200027b565b5050505b505050565b81516001600160401b03811115620002b557620002b5620000d2565b620002cd81620002c684546200020a565b8462000246565b602080601f831160018114620003055760008415620002ec5750858301515b600019600386901b1c1916600185901b17855562000290565b600085815260208120601f198616915b82811015620003365788860151825594840194600190910190840162000315565b5085821015620003555787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051610bb6620003886000396000818161017c01526103870152610bb66000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063a457c2d711610066578063a457c2d71461021c578063a9059cbb1461022f578063dd62ed3e14610242578063f2fde38b1461025557600080fd5b8063715018a6146101dc5780638da5cb5b146101e657806395d89b4114610201578063a0712d681461020957600080fd5b8063313ce567116100d3578063313ce5671461016b578063355274ea1461017a57806339509351146101a057806370a08231146101b357600080fd5b806306fdde0314610105578063095ea7b31461012357806318160ddd1461014657806323b872dd14610158575b600080fd5b61010d610268565b60405161011a91906109e7565b60405180910390f35b610136610131366004610a51565b6102fa565b604051901515815260200161011a565b6002545b60405190815260200161011a565b610136610166366004610a7b565b610314565b6040516012815260200161011a565b7f000000000000000000000000000000000000000000000000000000000000000061014a565b6101366101ae366004610a51565b610338565b61014a6101c1366004610ab7565b6001600160a01b031660009081526020819052604090205490565b6101e461035a565b005b6005546040516001600160a01b03909116815260200161011a565b61010d61036e565b6101e4610217366004610ad9565b61037d565b61013661022a366004610a51565b610410565b61013661023d366004610a51565b61048b565b61014a610250366004610af2565b610499565b6101e4610263366004610ab7565b6104c4565b60606003805461027790610b25565b80601f01602080910402602001604051908101604052809291908181526020018280546102a390610b25565b80156102f05780601f106102c5576101008083540402835291602001916102f0565b820191906000526020600020905b8154815290600101906020018083116102d357829003601f168201915b5050505050905090565b60003361030881858561053a565b60019150505b92915050565b60003361032285828561065e565b61032d8585856106d8565b506001949350505050565b60003361030881858561034b8383610499565b6103559190610b5f565b61053a565b61036261087c565b61036c60006108d6565b565b60606004805461027790610b25565b61038561087c565b7f0000000000000000000000000000000000000000000000000000000000000000816103b060025490565b6103ba9190610b5f565b11156104035760405162461bcd60e51b81526020600482015260136024820152721cdd5c1b1b1e4818d85c08195e18d959591959606a1b60448201526064015b60405180910390fd5b61040d3382610928565b50565b6000338161041e8286610499565b90508381101561047e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103fa565b61032d828686840361053a565b6000336103088185856106d8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6104cc61087c565b6001600160a01b0381166105315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103fa565b61040d816108d6565b6001600160a01b03831661059c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103fa565b6001600160a01b0382166105fd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103fa565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061066a8484610499565b905060001981146106d257818110156106c55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103fa565b6106d2848484840361053a565b50505050565b6001600160a01b03831661073c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103fa565b6001600160a01b03821661079e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103fa565b6001600160a01b038316600090815260208190526040902054818110156108165760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103fa565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36106d2565b6005546001600160a01b0316331461036c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103fa565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661097e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103fa565b80600260008282546109909190610b5f565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b81811015610a14578581018301518582016040015282016109f8565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610a4c57600080fd5b919050565b60008060408385031215610a6457600080fd5b610a6d83610a35565b946020939093013593505050565b600080600060608486031215610a9057600080fd5b610a9984610a35565b9250610aa760208501610a35565b9150604084013590509250925092565b600060208284031215610ac957600080fd5b610ad282610a35565b9392505050565b600060208284031215610aeb57600080fd5b5035919050565b60008060408385031215610b0557600080fd5b610b0e83610a35565b9150610b1c60208401610a35565b90509250929050565b600181811c90821680610b3957607f821691505b602082108103610b5957634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561030e57634e487b7160e01b600052601160045260246000fdfea2646970667358221220ac9b90eda17dd34c2664876ba6aeec5e921c0edfc55f3183b1edb9a44ebe12ff64736f6c63430008120033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000033b2e3c9fd0803ce8000000000000000000000000000000000000000000000000000000000000000000000d45787472612046696e616e63650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054558545241000000000000000000000000000000000000000000000000000000

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000033b2e3c9fd0803ce8000000000000000000000000000000000000000000000000000000000000000000000d45787472612046696e616e63650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054558545241000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Extra Finance
Arg [1] : symbol (string): EXTRA
Arg [2] : _supplyCap (uint256): 1000000000000000000000000000

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [4] : 45787472612046696e616e636500000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 4558545241000000000000000000000000000000000000000000000000000000


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.