Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 418 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint Many | 20614868 | 1 hr ago | IN | 0 ETH | 0.00072865 | ||||
Mint Many | 20613364 | 6 hrs ago | IN | 0 ETH | 0.00100079 | ||||
Mint Many | 20605743 | 32 hrs ago | IN | 0 ETH | 0.00029068 | ||||
Mint Many | 20603236 | 40 hrs ago | IN | 0 ETH | 0.00032575 | ||||
Mint Many | 20601800 | 45 hrs ago | IN | 0 ETH | 0.00069885 | ||||
Mint Many | 20598216 | 2 days ago | IN | 0 ETH | 0.00074071 | ||||
Mint Many | 20590684 | 3 days ago | IN | 0 ETH | 0.00028473 | ||||
Mint Many | 20590127 | 3 days ago | IN | 0 ETH | 0.00028732 | ||||
Mint Many | 20584758 | 4 days ago | IN | 0 ETH | 0.00170979 | ||||
Mint Many | 20581664 | 4 days ago | IN | 0 ETH | 0.00115005 | ||||
Mint Many | 20570356 | 6 days ago | IN | 0 ETH | 0.00390129 | ||||
Mint Many | 20569553 | 6 days ago | IN | 0 ETH | 0.000781 | ||||
Mint Many | 20569146 | 6 days ago | IN | 0 ETH | 0.00050932 | ||||
Mint Many | 20553352 | 8 days ago | IN | 0 ETH | 0.00062368 | ||||
Mint Many | 20551310 | 8 days ago | IN | 0 ETH | 0.00026408 | ||||
Mint Many | 20550231 | 9 days ago | IN | 0 ETH | 0.00030073 | ||||
Mint Many | 20546357 | 9 days ago | IN | 0 ETH | 0.00031672 | ||||
Mint Many | 20529149 | 12 days ago | IN | 0 ETH | 0.00259787 | ||||
Mint Many | 20516667 | 13 days ago | IN | 0 ETH | 0.00179223 | ||||
Mint Many | 20489674 | 17 days ago | IN | 0 ETH | 0.00646268 | ||||
Mint Many | 20482694 | 18 days ago | IN | 0 ETH | 0.00077507 | ||||
Mint Many | 20470840 | 20 days ago | IN | 0 ETH | 0.00330661 | ||||
Mint Many | 20451139 | 22 days ago | IN | 0 ETH | 0.00145349 | ||||
Mint Many | 20450785 | 22 days ago | IN | 0 ETH | 0.00224126 | ||||
Mint Many | 20447310 | 23 days ago | IN | 0 ETH | 0.00037334 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18648421 | 275 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
Minter
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// 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]); } }
// 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); }
// 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; } }
// 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; }
// 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; }
// 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); }
// 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; }
// 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; }
{ "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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.