ETH Price: $2,682.51 (-3.53%)

Contract

0x49f095B38eE6d8541758af51c509332e7793D4b0
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Mint Many206148682024-08-26 19:30:351 hr ago1724700635IN
0x49f095B3...e7793D4b0
0 ETH0.000728652.17560448
Mint Many206133642024-08-26 14:28:356 hrs ago1724682515IN
0x49f095B3...e7793D4b0
0 ETH0.001000793.01226916
Mint Many206057432024-08-25 12:55:4732 hrs ago1724590547IN
0x49f095B3...e7793D4b0
0 ETH0.000290680.97533081
Mint Many206032362024-08-25 4:30:5940 hrs ago1724560259IN
0x49f095B3...e7793D4b0
0 ETH0.000325750.97261366
Mint Many206018002024-08-24 23:41:4745 hrs ago1724542907IN
0x49f095B3...e7793D4b0
0 ETH0.000698850.81369007
Mint Many205982162024-08-24 11:39:472 days ago1724499587IN
0x49f095B3...e7793D4b0
0 ETH0.000740710.93002279
Mint Many205906842024-08-23 10:24:233 days ago1724408663IN
0x49f095B3...e7793D4b0
0 ETH0.000284731.00392475
Mint Many205901272024-08-23 8:31:473 days ago1724401907IN
0x49f095B3...e7793D4b0
0 ETH0.000287320.86482024
Mint Many205847582024-08-22 14:31:474 days ago1724337107IN
0x49f095B3...e7793D4b0
0 ETH0.001709791.83563055
Mint Many205816642024-08-22 4:08:474 days ago1724299727IN
0x49f095B3...e7793D4b0
0 ETH0.001150051.06300394
Mint Many205703562024-08-20 14:13:236 days ago1724163203IN
0x49f095B3...e7793D4b0
0 ETH0.003901293.6524692
Mint Many205695532024-08-20 11:32:116 days ago1724153531IN
0x49f095B3...e7793D4b0
0 ETH0.0007811.61625301
Mint Many205691462024-08-20 10:10:116 days ago1724148611IN
0x49f095B3...e7793D4b0
0 ETH0.000509321.7573196
Mint Many205533522024-08-18 5:14:118 days ago1723958051IN
0x49f095B3...e7793D4b0
0 ETH0.000623681.89208485
Mint Many205513102024-08-17 22:24:598 days ago1723933499IN
0x49f095B3...e7793D4b0
0 ETH0.000264080.89389306
Mint Many205502312024-08-17 18:48:239 days ago1723920503IN
0x49f095B3...e7793D4b0
0 ETH0.000300731.03821681
Mint Many205463572024-08-17 5:48:359 days ago1723873715IN
0x49f095B3...e7793D4b0
0 ETH0.000316720.9696359
Mint Many205291492024-08-14 20:06:4712 days ago1723666007IN
0x49f095B3...e7793D4b0
0 ETH0.002597878.96351611
Mint Many205166672024-08-13 2:18:1113 days ago1723515491IN
0x49f095B3...e7793D4b0
0 ETH0.001792231.86109785
Mint Many204896742024-08-09 7:53:3517 days ago1723190015IN
0x49f095B3...e7793D4b0
0 ETH0.0064626811.81458872
Mint Many204826942024-08-08 8:32:5918 days ago1723105979IN
0x49f095B3...e7793D4b0
0 ETH0.000775072.29579801
Mint Many204708402024-08-06 16:51:4720 days ago1722963107IN
0x49f095B3...e7793D4b0
0 ETH0.003306617.55236481
Mint Many204511392024-08-03 22:55:3522 days ago1722725735IN
0x49f095B3...e7793D4b0
0 ETH0.001453491.63678901
Mint Many204507852024-08-03 21:44:3522 days ago1722721475IN
0x49f095B3...e7793D4b0
0 ETH0.002241261.497073
Mint Many204473102024-08-03 10:06:5923 days ago1722679619IN
0x49f095B3...e7793D4b0
0 ETH0.000373341.3285729
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
186484212023-11-25 11:29:35275 days ago1700911775  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Minter

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
paris EvmVersion
File 1 of 8 : Minter.sol
// SPDX-License-Identifier: GPL-3.0
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

pragma solidity ^0.8.0;

import {IERC20} from "forge-std/interfaces/IERC20.sol";

import {ReentrancyGuard} from "solmate/utils/ReentrancyGuard.sol";

import {IMinter} from "./interfaces/IMinter.sol";
import {ITokenAdmin} from "./interfaces/ITokenAdmin.sol";
import {ILiquidityGauge} from "./interfaces/ILiquidityGauge.sol";
import {IGaugeController} from "./interfaces/IGaugeController.sol";

contract Minter is IMinter, ReentrancyGuard {
    IERC20 private immutable _token;
    ITokenAdmin private immutable _tokenAdmin;
    IGaugeController private immutable _gaugeController;

    // user -> gauge -> value
    mapping(address => mapping(address => uint256)) private _minted;
    // minter -> user -> can mint?
    mapping(address => mapping(address => bool)) private _allowedMinter;

    event MinterApprovalSet(address indexed user, address indexed minter, bool approval);

    constructor(ITokenAdmin tokenAdmin, IGaugeController gaugeController) {
        _token = tokenAdmin.getToken();
        _tokenAdmin = tokenAdmin;
        _gaugeController = gaugeController;
    }

    /**
     * @notice Returns the address of the minted token
     */
    function getToken() external view override returns (IERC20) {
        return _token;
    }

    /**
     * @notice Returns the address of the Token Admin contract
     */
    function getTokenAdmin() external view override returns (ITokenAdmin) {
        return _tokenAdmin;
    }

    /**
     * @notice Returns the address of the Gauge Controller
     */
    function getGaugeController() external view override returns (IGaugeController) {
        return _gaugeController;
    }

    /**
     * @notice Mint everything which belongs to `msg.sender` and send to them
     * @param gauge `LiquidityGauge` address to get mintable amount from
     */
    function mint(address gauge) external override nonReentrant returns (uint256) {
        return _mintFor(gauge, msg.sender);
    }

    /**
     * @notice Mint everything which belongs to `msg.sender` across multiple gauges
     * @param gauges List of `LiquidityGauge` addresses
     */
    function mintMany(address[] calldata gauges) external override nonReentrant returns (uint256) {
        return _mintForMany(gauges, msg.sender);
    }

    /**
     * @notice Mint tokens for `user`
     * @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf
     * @param gauge `LiquidityGauge` address to get mintable amount from
     * @param user Address to mint to
     */
    function mintFor(address gauge, address user) external override nonReentrant returns (uint256) {
        require(_allowedMinter[msg.sender][user], "Caller not allowed to mint for user");
        return _mintFor(gauge, user);
    }

    /**
     * @notice Mint tokens for `user` across multiple gauges
     * @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf
     * @param gauges List of `LiquidityGauge` addresses
     * @param user Address to mint to
     */
    function mintManyFor(address[] calldata gauges, address user) external override nonReentrant returns (uint256) {
        require(_allowedMinter[msg.sender][user], "Caller not allowed to mint for user");
        return _mintForMany(gauges, user);
    }

    /**
     * @notice The total number of tokens minted for `user` from `gauge`
     */
    function minted(address user, address gauge) external view override returns (uint256) {
        return _minted[user][gauge];
    }

    /**
     * @notice Whether `minter` is approved to mint tokens for `user`
     */
    function getMinterApproval(address minter, address user) external view override returns (bool) {
        return _allowedMinter[minter][user];
    }

    /**
     * @notice Set whether `minter` is approved to mint tokens on your behalf
     */
    function setMinterApproval(address minter, bool approval) public override {
        _setMinterApproval(minter, msg.sender, approval);
    }

    function _setMinterApproval(address minter, address user, bool approval) private {
        _allowedMinter[minter][user] = approval;
        emit MinterApprovalSet(user, minter, approval);
    }

    // Internal functions

    function _mintFor(address gauge, address user) internal returns (uint256 tokensToMint) {
        tokensToMint = _updateGauge(gauge, user);
        if (tokensToMint > 0) {
            _tokenAdmin.mint(user, tokensToMint);
        }
    }

    function _mintForMany(address[] calldata gauges, address user) internal returns (uint256 tokensToMint) {
        uint256 length = gauges.length;
        for (uint256 i = 0; i < length;) {
            tokensToMint += _updateGauge(gauges[i], user);

            unchecked {
                ++i;
            }
        }

        if (tokensToMint > 0) {
            _tokenAdmin.mint(user, tokensToMint);
        }
    }

    function _updateGauge(address gauge, address user) internal returns (uint256 tokensToMint) {
        require(_gaugeController.gauge_types(gauge) >= 0, "Gauge does not exist on Controller");

        ILiquidityGauge(gauge).user_checkpoint(user);
        uint256 totalMint = ILiquidityGauge(gauge).integrate_fraction(user);
        tokensToMint = totalMint - _minted[user][gauge];

        if (tokensToMint > 0) {
            _minted[user][gauge] = totalMint;
            emit Minted(user, gauge, totalMint);
        }
    }

    // The below functions are near-duplicates of functions available above.
    // They are included for ABI compatibility with snake_casing as used in vyper contracts.
    // solhint-disable func-name-mixedcase

    /**
     * @notice Whether `minter` is approved to mint tokens for `user`
     */
    function allowed_to_mint_for(address minter, address user) external view override returns (bool) {
        return _allowedMinter[minter][user];
    }

    /**
     * @notice Mint everything which belongs to `msg.sender` across multiple gauges
     * @dev This function is not recommended as `mintMany()` is more flexible and gas efficient
     * @param gauges List of `LiquidityGauge` addresses
     */
    function mint_many(address[8] calldata gauges) external override nonReentrant {
        for (uint256 i = 0; i < 8;) {
            if (gauges[i] == address(0)) {
                break;
            }
            _mintFor(gauges[i], msg.sender);

            unchecked {
                ++i;
            }
        }
    }

    /**
     * @notice Mint tokens for `user`
     * @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf
     * @param gauge `LiquidityGauge` address to get mintable amount from
     * @param user Address to mint to
     */
    function mint_for(address gauge, address user) external override nonReentrant {
        if (_allowedMinter[msg.sender][user]) {
            _mintFor(gauge, user);
        }
    }

    /**
     * @notice Toggle whether `minter` is approved to mint tokens for `user`
     */
    function toggle_approve_mint(address minter) external override {
        setMinterApproval(minter, !_allowedMinter[minter][msg.sender]);
    }
}

File 2 of 8 : IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2;

/// @dev Interface of the ERC20 standard as defined in the EIP.
/// @dev This includes the optional name, symbol, and decimals metadata.
interface IERC20 {
    /// @dev Emitted when `value` tokens are moved from one account (`from`) to another (`to`).
    event Transfer(address indexed from, address indexed to, uint256 value);

    /// @dev Emitted when the allowance of a `spender` for an `owner` is set, where `value`
    /// is the new allowance.
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /// @notice Returns the amount of tokens in existence.
    function totalSupply() external view returns (uint256);

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

    /// @notice Moves `amount` tokens from the caller's account to `to`.
    function transfer(address to, uint256 amount) external returns (bool);

    /// @notice Returns the remaining number of tokens that `spender` is allowed
    /// to spend on behalf of `owner`
    function allowance(address owner, address spender) external view returns (uint256);

    /// @notice Sets `amount` as the allowance of `spender` over the caller's tokens.
    /// @dev Be aware of front-running risks: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    function approve(address spender, uint256 amount) external returns (bool);

    /// @notice Moves `amount` tokens from `from` to `to` using the allowance mechanism.
    /// `amount` is then deducted from the caller's allowance.
    function transferFrom(address from, address to, uint256 amount) external returns (bool);

    /// @notice Returns the name of the token.
    function name() external view returns (string memory);

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

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

File 3 of 8 : ReentrancyGuard.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Gas optimized reentrancy protection for smart contracts.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/ReentrancyGuard.sol)
/// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/ReentrancyGuard.sol)
abstract contract ReentrancyGuard {
    uint256 private locked = 1;

    modifier nonReentrant() virtual {
        require(locked == 1, "REENTRANCY");

        locked = 2;

        _;

        locked = 1;
    }
}

File 4 of 8 : IMinter.sol
// SPDX-License-Identifier: GPL-3.0-or-later
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

pragma solidity >=0.7.0 <0.9.0;

import {IERC20} from "forge-std/interfaces/IERC20.sol";

import {ITokenAdmin} from "./ITokenAdmin.sol";
import {IGaugeController} from "./IGaugeController.sol";

interface IMinter {
    event Minted(address indexed recipient, address gauge, uint256 minted);

    /**
     * @notice Returns the address of the minted token
     */
    function getToken() external view returns (IERC20);

    /**
     * @notice Returns the address of the Token Admin contract
     */
    function getTokenAdmin() external view returns (ITokenAdmin);

    /**
     * @notice Returns the address of the Gauge Controller
     */
    function getGaugeController() external view returns (IGaugeController);

    /**
     * @notice Mint everything which belongs to `msg.sender` and send to them
     * @param gauge `LiquidityGauge` address to get mintable amount from
     */
    function mint(address gauge) external returns (uint256);

    /**
     * @notice Mint everything which belongs to `msg.sender` across multiple gauges
     * @param gauges List of `LiquidityGauge` addresses
     */
    function mintMany(address[] calldata gauges) external returns (uint256);

    /**
     * @notice Mint tokens for `user`
     * @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf
     * @param gauge `LiquidityGauge` address to get mintable amount from
     * @param user Address to mint to
     */
    function mintFor(address gauge, address user) external returns (uint256);

    /**
     * @notice Mint tokens for `user` across multiple gauges
     * @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf
     * @param gauges List of `LiquidityGauge` addresses
     * @param user Address to mint to
     */
    function mintManyFor(address[] calldata gauges, address user) external returns (uint256);

    /**
     * @notice The total number of tokens minted for `user` from `gauge`
     */
    function minted(address user, address gauge) external view returns (uint256);

    /**
     * @notice Whether `minter` is approved to mint tokens for `user`
     */
    function getMinterApproval(address minter, address user) external view returns (bool);

    /**
     * @notice Set whether `minter` is approved to mint tokens on your behalf
     */
    function setMinterApproval(address minter, bool approval) external;

    // The below functions are near-duplicates of functions available above.
    // They are included for ABI compatibility with snake_casing as used in vyper contracts.
    // solhint-disable func-name-mixedcase

    /**
     * @notice Whether `minter` is approved to mint tokens for `user`
     */
    function allowed_to_mint_for(address minter, address user) external view returns (bool);

    /**
     * @notice Mint everything which belongs to `msg.sender` across multiple gauges
     * @dev This function is not recommended as `mintMany()` is more flexible and gas efficient
     * @param gauges List of `LiquidityGauge` addresses
     */
    function mint_many(address[8] calldata gauges) external;

    /**
     * @notice Mint tokens for `user`
     * @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf
     * @param gauge `LiquidityGauge` address to get mintable amount from
     * @param user Address to mint to
     */
    function mint_for(address gauge, address user) external;

    /**
     * @notice Toggle whether `minter` is approved to mint tokens for `user`
     */
    function toggle_approve_mint(address minter) external;
}

File 5 of 8 : ITokenAdmin.sol
// SPDX-License-Identifier: GPL-3.0-or-later
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

pragma solidity >=0.7.0 <0.9.0;

import {IERC20Mintable} from "./IERC20Mintable.sol";

interface ITokenAdmin {
    // solhint-disable func-name-mixedcase
    function INITIAL_RATE() external view returns (uint256);

    function RATE_REDUCTION_TIME() external view returns (uint256);

    function RATE_REDUCTION_COEFFICIENT() external view returns (uint256);

    function RATE_DENOMINATOR() external view returns (uint256);

    // solhint-enable func-name-mixedcase
    function getToken() external view returns (IERC20Mintable);

    function activate() external;

    function rate() external view returns (uint256);

    function startEpochTimeWrite() external returns (uint256);

    function mint(address to, uint256 amount) external;
}

File 6 of 8 : ILiquidityGauge.sol
// SPDX-License-Identifier: GPL-3.0-or-later
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

pragma solidity >=0.7.0 <0.9.0;

// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case
// naming convention.
// solhint-disable func-name-mixedcase
// solhint-disable func-param-name-mixedcase

interface ILiquidityGauge {
    // solhint-disable-next-line var-name-mixedcase
    event RelativeWeightCapChanged(uint256 new_relative_weight_cap);

    /**
     * @notice Returns liquidity emissions calculated during checkpoints for the given user.
     * @param user User address.
     * @return uint256 token amount to issue for the address.
     */
    function integrate_fraction(address user) external view returns (uint256);

    /**
     * @notice Record a checkpoint for a given user.
     * @param user User address.
     * @return bool Always true.
     */
    function user_checkpoint(address user) external returns (bool);

    /**
     * @notice Returns true if gauge is killed; false otherwise.
     */
    function is_killed() external view returns (bool);

    /**
     * @notice Kills the gauge so it cannot mint tokens.
     */
    function killGauge() external;

    /**
     * @notice Unkills the gauge so it can mint tokens again.
     */
    function unkillGauge() external;

    /**
     * @notice Uses the Uniswap Poor oracle to decide whether a gauge is alive
     */
    function makeGaugePermissionless() external;

    /**
     * @notice Sets a new relative weight cap for the gauge.
     * The value shall be normalized to 1e18, and not greater than MAX_RELATIVE_WEIGHT_CAP.
     * @param relativeWeightCap New relative weight cap.
     */
    function setRelativeWeightCap(uint256 relativeWeightCap) external;

    /**
     * @notice Gets the relative weight cap for the gauge.
     */
    function getRelativeWeightCap() external view returns (uint256);

    /**
     * @notice Returns the gauge's relative weight for a given time, capped to its relative weight cap attribute.
     * @param time Timestamp in the past or present.
     */
    function getCappedRelativeWeight(
        uint256 time
    ) external view returns (uint256);

    function initialize(
        address lpToken,
        uint256 relativeWeightCap,
        address admin
    ) external;

    function change_pending_admin(address newPendingAdmin) external;

    function claim_admin() external;

    function admin() external view returns (address);

    function deposit(uint256 amount) external;

    function deposit(uint256 amount, address recipient) external;

    function withdraw(uint256 amount) external;

    function balanceOf(address account) external view returns (uint256);

    function claim_rewards() external;

    function set_tokenless_production(uint8) external;

    function lp_token() external view returns (address);
}

File 7 of 8 : IGaugeController.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.6.11;

// https://github.com/swervefi/swerve/edit/master/packages/swerve-contracts/interfaces/IGaugeController.sol

interface IGaugeController {
    struct Point {
        uint256 bias;
        uint256 slope;
    }

    struct VotedSlope {
        uint256 slope;
        uint256 power;
        uint256 end;
    }

    // Public variables
    function admin() external view returns (address);

    function token() external view returns (address);

    function voting_escrow() external view returns (address);

    function n_gauge_types() external view returns (int128);

    function n_gauges() external view returns (int128);

    function gauge_type_names(int128) external view returns (string memory);

    function gauges(uint256) external view returns (address);

    function vote_user_slopes(
        address,
        address
    ) external view returns (VotedSlope memory);

    function vote_user_power(address) external view returns (uint256);

    function last_user_vote(address, address) external view returns (uint256);

    function points_weight(
        address,
        uint256
    ) external view returns (Point memory);

    function time_weight(address) external view returns (uint256);

    function points_sum(int128, uint256) external view returns (Point memory);

    function time_sum(uint256) external view returns (uint256);

    function points_total(uint256) external view returns (uint256);

    function time_total() external view returns (uint256);

    function points_type_weight(
        int128,
        uint256
    ) external view returns (uint256);

    function time_type_weight(uint256) external view returns (uint256);

    // Getter functions
    function gauge_types(address) external view returns (int128);

    function gauge_relative_weight(address) external view returns (uint256);

    function gauge_relative_weight(
        address,
        uint256
    ) external view returns (uint256);

    function get_gauge_weight(address) external view returns (uint256);

    function get_type_weight(int128) external view returns (uint256);

    function get_total_weight() external view returns (uint256);

    function get_weights_sum_per_type(int128) external view returns (uint256);

    // External functions
    function add_gauge(address, int128, uint256) external;

    function checkpoint() external;

    function checkpoint_gauge(address) external;

    function gauge_relative_weight_write(address) external returns (uint256);

    function gauge_relative_weight_write(
        address,
        uint256
    ) external returns (uint256);

    function add_type(string memory, uint256) external;

    function change_type_weight(int128, uint256) external;

    function change_gauge_weight(address, uint256) external;

    function vote_for_gauge_weights(address, uint256) external;

    function change_pending_admin(address newPendingAdmin) external;

    function claim_admin() external;

    // vote
    function vote_for_many_gauge_weights(
        address[8] memory gauges,
        uint256[8] memory weights
    ) external;
}

File 8 of 8 : IERC20Mintable.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

import {IERC20} from "forge-std/interfaces/IERC20.sol";

interface IERC20Mintable is IERC20 {
    function mint(address to, uint256 amount) external;
}

Settings
{
  "remappings": [
    "solmate/=lib/solmate/src/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "openzeppelin-contracts-upgradeable/=lib/popcorn/lib/openzeppelin-contracts-upgradeable/contracts/",
    "create3-factory/=lib/create3-factory/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin/=lib/popcorn/lib/openzeppelin-contracts-upgradeable/contracts/",
    "popcorn/=lib/popcorn/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 1000000
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract ITokenAdmin","name":"tokenAdmin","type":"address"},{"internalType":"contract IGaugeController","name":"gaugeController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"address","name":"gauge","type":"address"},{"indexed":false,"internalType":"uint256","name":"minted","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"bool","name":"approval","type":"bool"}],"name":"MinterApprovalSet","type":"event"},{"inputs":[{"internalType":"address","name":"minter","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"allowed_to_mint_for","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGaugeController","outputs":[{"internalType":"contract IGaugeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getMinterApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenAdmin","outputs":[{"internalType":"contract ITokenAdmin","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"gauge","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"gauge","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"mintFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"gauges","type":"address[]"}],"name":"mintMany","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"gauges","type":"address[]"},{"internalType":"address","name":"user","type":"address"}],"name":"mintManyFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"gauge","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"mint_for","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[8]","name":"gauges","type":"address[8]"}],"name":"mint_many","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"gauge","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"},{"internalType":"bool","name":"approval","type":"bool"}],"name":"setMinterApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"toggle_approve_mint","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e060405260016000553480156200001657600080fd5b5060405162001261380380620012618339810160408190526200003991620000d5565b816001600160a01b03166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000078573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009e919062000114565b6001600160a01b0390811660805291821660a0521660c0526200013b565b6001600160a01b0381168114620000d257600080fd5b50565b60008060408385031215620000e957600080fd5b8251620000f681620000bc565b60208401519092506200010981620000bc565b809150509250929050565b6000602082840312156200012757600080fd5b81516200013481620000bc565b9392505050565b60805160a05160c0516110e162000180600039600081816101e20152610b1b015260008181610165015281816109660152610a6c0152600061010601526110e16000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806358de9ade1161008c5780638b752bb0116100665780638b752bb01461022c578063a0990033146101bd578063a51e190414610272578063dd289d601461028557600080fd5b806358de9ade146101e05780636a627842146102065780637504a15d1461021957600080fd5b80632ac555f8116100c85780632ac555f814610163578063397ada21146101895780633b9f7384146101aa5780633c543bc6146101bd57600080fd5b80630de54ba0146100ef57806321df0da71461010457806327f18ae314610150575b600080fd5b6101026100fd366004610e35565b610298565b005b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61010261015e366004610e6c565b6102a7565b7f0000000000000000000000000000000000000000000000000000000000000000610126565b61019c610197366004610eeb565b610367565b604051908152602001610147565b61019c6101b8366004610f2d565b6103f0565b6101d06101cb366004610e6c565b610536565b6040519015158152602001610147565b7f0000000000000000000000000000000000000000000000000000000000000000610126565b61019c610214366004610f81565b610573565b61019c610227366004610e6c565b6105fa565b61019c61023a366004610e6c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b610102610280366004610fa3565b610732565b610102610293366004610f81565b610828565b6102a382338361086b565b5050565b600054600114610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600260008181553381526020918252604080822073ffffffffffffffffffffffffffffffffffffffff85168352909252205460ff161561035e5761035c8282610906565b505b50506001600055565b600080546001146103d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161030f565b60026000556103e48383336109c8565b60016000559392505050565b6000805460011461045d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161030f565b600260008181553381526020918252604080822073ffffffffffffffffffffffffffffffffffffffff86168352909252205460ff1661051e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f43616c6c6572206e6f7420616c6c6f77656420746f206d696e7420666f72207560448201527f7365720000000000000000000000000000000000000000000000000000000000606482015260840161030f565b6105298484846109c8565b6001600055949350505050565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526002602090815260408083209385168352929052205460ff165b92915050565b600080546001146105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161030f565b60026000556105ef8233610906565b600160005592915050565b60008054600114610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161030f565b600260008181553381526020918252604080822073ffffffffffffffffffffffffffffffffffffffff86168352909252205460ff16610728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f43616c6c6572206e6f7420616c6c6f77656420746f206d696e7420666f72207560448201527f7365720000000000000000000000000000000000000000000000000000000000606482015260840161030f565b6103e48383610906565b60005460011461079e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161030f565b600260009081555b600881101561035e5760008282600881106107c3576107c3610fce565b6020020160208101906107d69190610f81565b73ffffffffffffffffffffffffffffffffffffffff161461035e5761081f82826008811061080657610806610fce565b6020020160208101906108199190610f81565b33610906565b506001016107a6565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604080832033845290915290205461086890829060ff1615610298565b50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526002602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182529192917fa3ffb51320bbca4e61e7423e3c97dd7bd7e31b6ea7429eb26ef92780e84572a0910160405180910390a3505050565b60006109128383610ad1565b9050801561056d576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b5050505092915050565b600082815b81811015610a1957610a058686838181106109ea576109ea610fce565b90506020020160208101906109ff9190610f81565b85610ad1565b610a0f908461102c565b92506001016109cd565b508115610ac9576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490527f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b158015610ab057600080fd5b505af1158015610ac4573d6000803e3d6000fd5b505050505b509392505050565b6040517f3f9095b700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009182917f00000000000000000000000000000000000000000000000000000000000000001690633f9095b790602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061103f565b600f0b1215610c17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476175676520646f6573206e6f74206578697374206f6e20436f6e74726f6c6c60448201527f6572000000000000000000000000000000000000000000000000000000000000606482015260840161030f565b6040517f4b82009300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690634b820093906024016020604051808303816000875af1158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190611062565b506040517f0940070700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009190851690630940070790602401602060405180830381865afa158015610d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3e919061107f565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093891683529290522054909150610d7e9082611098565b91508115610df75773ffffffffffffffffffffffffffffffffffffffff8381166000818152600160209081526040808320948916808452948252918290208590558151938452830184905290917f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0910160405180910390a25b5092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2257600080fd5b919050565b801515811461086857600080fd5b60008060408385031215610e4857600080fd5b610e5183610dfe565b91506020830135610e6181610e27565b809150509250929050565b60008060408385031215610e7f57600080fd5b610e8883610dfe565b9150610e9660208401610dfe565b90509250929050565b60008083601f840112610eb157600080fd5b50813567ffffffffffffffff811115610ec957600080fd5b6020830191508360208260051b8501011115610ee457600080fd5b9250929050565b60008060208385031215610efe57600080fd5b823567ffffffffffffffff811115610f1557600080fd5b610f2185828601610e9f565b90969095509350505050565b600080600060408486031215610f4257600080fd5b833567ffffffffffffffff811115610f5957600080fd5b610f6586828701610e9f565b9094509250610f78905060208501610dfe565b90509250925092565b600060208284031215610f9357600080fd5b610f9c82610dfe565b9392505050565b6000610100808385031215610fb757600080fd5b838184011115610fc657600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561056d5761056d610ffd565b60006020828403121561105157600080fd5b815180600f0b8114610f9c57600080fd5b60006020828403121561107457600080fd5b8151610f9c81610e27565b60006020828403121561109157600080fd5b5051919050565b8181038181111561056d5761056d610ffd56fea264697066735822122059b33b15c3b53d61fb2584599130495baf08ffc193c299dc1cb6fb4f6144439c64736f6c6343000813003300000000000000000000000003d103c547b43b5a76df7e652bd0bb61be0bd70d000000000000000000000000d57d8eec36f0ba7d8fd693b9d97e02d8353eb1f4

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806358de9ade1161008c5780638b752bb0116100665780638b752bb01461022c578063a0990033146101bd578063a51e190414610272578063dd289d601461028557600080fd5b806358de9ade146101e05780636a627842146102065780637504a15d1461021957600080fd5b80632ac555f8116100c85780632ac555f814610163578063397ada21146101895780633b9f7384146101aa5780633c543bc6146101bd57600080fd5b80630de54ba0146100ef57806321df0da71461010457806327f18ae314610150575b600080fd5b6101026100fd366004610e35565b610298565b005b7f000000000000000000000000afa52e3860b4371ab9d8f08e801e9ea1027c0ca25b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61010261015e366004610e6c565b6102a7565b7f00000000000000000000000003d103c547b43b5a76df7e652bd0bb61be0bd70d610126565b61019c610197366004610eeb565b610367565b604051908152602001610147565b61019c6101b8366004610f2d565b6103f0565b6101d06101cb366004610e6c565b610536565b6040519015158152602001610147565b7f000000000000000000000000d57d8eec36f0ba7d8fd693b9d97e02d8353eb1f4610126565b61019c610214366004610f81565b610573565b61019c610227366004610e6c565b6105fa565b61019c61023a366004610e6c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b610102610280366004610fa3565b610732565b610102610293366004610f81565b610828565b6102a382338361086b565b5050565b600054600114610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600260008181553381526020918252604080822073ffffffffffffffffffffffffffffffffffffffff85168352909252205460ff161561035e5761035c8282610906565b505b50506001600055565b600080546001146103d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161030f565b60026000556103e48383336109c8565b60016000559392505050565b6000805460011461045d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161030f565b600260008181553381526020918252604080822073ffffffffffffffffffffffffffffffffffffffff86168352909252205460ff1661051e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f43616c6c6572206e6f7420616c6c6f77656420746f206d696e7420666f72207560448201527f7365720000000000000000000000000000000000000000000000000000000000606482015260840161030f565b6105298484846109c8565b6001600055949350505050565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526002602090815260408083209385168352929052205460ff165b92915050565b600080546001146105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161030f565b60026000556105ef8233610906565b600160005592915050565b60008054600114610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161030f565b600260008181553381526020918252604080822073ffffffffffffffffffffffffffffffffffffffff86168352909252205460ff16610728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f43616c6c6572206e6f7420616c6c6f77656420746f206d696e7420666f72207560448201527f7365720000000000000000000000000000000000000000000000000000000000606482015260840161030f565b6103e48383610906565b60005460011461079e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e435900000000000000000000000000000000000000000000604482015260640161030f565b600260009081555b600881101561035e5760008282600881106107c3576107c3610fce565b6020020160208101906107d69190610f81565b73ffffffffffffffffffffffffffffffffffffffff161461035e5761081f82826008811061080657610806610fce565b6020020160208101906108199190610f81565b33610906565b506001016107a6565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604080832033845290915290205461086890829060ff1615610298565b50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526002602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182529192917fa3ffb51320bbca4e61e7423e3c97dd7bd7e31b6ea7429eb26ef92780e84572a0910160405180910390a3505050565b60006109128383610ad1565b9050801561056d576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f00000000000000000000000003d103c547b43b5a76df7e652bd0bb61be0bd70d16906340c10f1990604401600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b5050505092915050565b600082815b81811015610a1957610a058686838181106109ea576109ea610fce565b90506020020160208101906109ff9190610f81565b85610ad1565b610a0f908461102c565b92506001016109cd565b508115610ac9576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490527f00000000000000000000000003d103c547b43b5a76df7e652bd0bb61be0bd70d16906340c10f1990604401600060405180830381600087803b158015610ab057600080fd5b505af1158015610ac4573d6000803e3d6000fd5b505050505b509392505050565b6040517f3f9095b700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009182917f000000000000000000000000d57d8eec36f0ba7d8fd693b9d97e02d8353eb1f41690633f9095b790602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061103f565b600f0b1215610c17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476175676520646f6573206e6f74206578697374206f6e20436f6e74726f6c6c60448201527f6572000000000000000000000000000000000000000000000000000000000000606482015260840161030f565b6040517f4b82009300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690634b820093906024016020604051808303816000875af1158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca99190611062565b506040517f0940070700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260009190851690630940070790602401602060405180830381865afa158015610d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3e919061107f565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093891683529290522054909150610d7e9082611098565b91508115610df75773ffffffffffffffffffffffffffffffffffffffff8381166000818152600160209081526040808320948916808452948252918290208590558151938452830184905290917f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0910160405180910390a25b5092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2257600080fd5b919050565b801515811461086857600080fd5b60008060408385031215610e4857600080fd5b610e5183610dfe565b91506020830135610e6181610e27565b809150509250929050565b60008060408385031215610e7f57600080fd5b610e8883610dfe565b9150610e9660208401610dfe565b90509250929050565b60008083601f840112610eb157600080fd5b50813567ffffffffffffffff811115610ec957600080fd5b6020830191508360208260051b8501011115610ee457600080fd5b9250929050565b60008060208385031215610efe57600080fd5b823567ffffffffffffffff811115610f1557600080fd5b610f2185828601610e9f565b90969095509350505050565b600080600060408486031215610f4257600080fd5b833567ffffffffffffffff811115610f5957600080fd5b610f6586828701610e9f565b9094509250610f78905060208501610dfe565b90509250925092565b600060208284031215610f9357600080fd5b610f9c82610dfe565b9392505050565b6000610100808385031215610fb757600080fd5b838184011115610fc657600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561056d5761056d610ffd565b60006020828403121561105157600080fd5b815180600f0b8114610f9c57600080fd5b60006020828403121561107457600080fd5b8151610f9c81610e27565b60006020828403121561109157600080fd5b5051919050565b8181038181111561056d5761056d610ffd56fea264697066735822122059b33b15c3b53d61fb2584599130495baf08ffc193c299dc1cb6fb4f6144439c64736f6c63430008130033

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

00000000000000000000000003d103c547b43b5a76df7e652bd0bb61be0bd70d000000000000000000000000d57d8eec36f0ba7d8fd693b9d97e02d8353eb1f4

-----Decoded View---------------
Arg [0] : tokenAdmin (address): 0x03d103c547B43b5a76df7e652BD0Bb61bE0BD70d
Arg [1] : gaugeController (address): 0xD57d8EEC36F0Ba7D8Fd693B9D97e02D8353EB1F4

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000003d103c547b43b5a76df7e652bd0bb61be0bd70d
Arg [1] : 000000000000000000000000d57d8eec36f0ba7d8fd693b9d97e02d8353eb1f4


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.