编译器
0.8.17+commit.8df45f5f
文件 1 的 3:IGaugeController.sol
pragma solidity 0.8.17;
interface IGaugeController {
struct Point {
uint256 bias;
uint256 slope;
}
struct VotedSlope {
uint256 slope;
uint256 power;
uint256 end;
}
struct UserPoint {
uint256 bias;
uint256 slope;
uint256 ts;
uint256 blk;
}
event AddType(string name, int128 type_id);
event NewTypeWeight(int128 indexed type_id, uint256 time, uint256 weight, uint256 total_weight);
event NewGaugeWeight(address indexed gauge_address, uint256 time, uint256 weight, uint256 total_weight);
event VoteForGauge(address indexed user, address indexed gauge_address, uint256 time, uint256 weight);
event NewGauge(address indexed gauge_address, int128 gauge_type, uint256 weight);
function gaugeTypes(address _addr) external view returns (int128);
function addGauge(address addr, int128 gaugeType, uint256 weight) external;
function checkpoint() external;
function checkpointGauge(address addr) external;
function gaugeRelativeWeight(address gaugeAddress, uint256 time) external view returns (uint256);
function gaugeRelativeWeightWrite(address gaugeAddress, uint256 time) external returns (uint256);
function addType(string memory _name, uint256 weight) external;
function changeTypeWeight(int128 type_id, uint256 weight) external;
function changeGaugeWeight(address gaugeAddress, uint256 weight) external;
function voteForGaugeWeights(address gaugeAddress, uint256 userWeight) external;
function getGaugeWeight(address addr) external view returns (uint256);
function getTypeWeight(int128 type_id) external view returns (uint256);
function getTotalWeight() external view returns (uint256);
function getWeightsSumPreType(int128 type_id) external view returns (uint256);
function votingEscrow() external view returns (address);
}
文件 2 的 3:ILT.sol
pragma solidity 0.8.17;
interface ILT {
event UpdateMiningParameters(uint256 time, uint256 rate, uint256 supply);
event SetMinter(address indexed minter);
function rate() external view returns (uint256);
function updateMiningParameters() external;
function futureEpochTimeWrite() external returns (uint256);
function availableSupply() external view returns (uint256);
function mintableInTimeframe(uint256 start, uint256 end) external view returns (uint256);
function setMinter(address _minter) external;
function mint(address to, uint256 value) external returns (bool);
function burn(uint256 value) external returns (bool);
}
文件 3 的 3:Minter.sol
pragma solidity 0.8.17;
import "./interfaces/ILT.sol";
import "./interfaces/IGaugeController.sol";
interface LiquidityGauge {
function integrateFraction(address addr) external view returns (uint256);
function userCheckpoint(address addr) external returns (bool);
}
contract Minter {
event Minted(address indexed recipient, address gauge, uint256 minted);
event ToogleApproveMint(address sender, address indexed mintingUser, bool status);
address public immutable token;
address public immutable controller;
mapping(address => mapping(address => uint256)) public minted;
mapping(address => mapping(address => bool)) public allowedToMintFor;
constructor(address _token, address _controller) {
token = _token;
controller = _controller;
}
function mint(address gaugeAddress) external {
_mintFor(gaugeAddress, msg.sender);
}
function mintMany(address[] memory gaugeAddressList) external {
for (uint256 i = 0; i < gaugeAddressList.length && i < 128; i++) {
if (gaugeAddressList[i] == address(0)) {
continue;
}
_mintFor(gaugeAddressList[i], msg.sender);
}
}
function mintFor(address gaugeAddress, address _for) external {
if (allowedToMintFor[msg.sender][_for]) {
_mintFor(gaugeAddress, _for);
}
}
function toggleApproveMint(address mintingUser) external {
bool flag = allowedToMintFor[mintingUser][msg.sender];
allowedToMintFor[mintingUser][msg.sender] = !flag;
emit ToogleApproveMint(msg.sender, mintingUser, !flag);
}
function _mintFor(address gaugeAddr, address _for) internal {
require(IGaugeController(controller).gaugeTypes(gaugeAddr) >= 0, "CE000");
bool success = LiquidityGauge(gaugeAddr).userCheckpoint(_for);
require(success, "CHECK FAILED");
uint256 totalMint = LiquidityGauge(gaugeAddr).integrateFraction(_for);
uint256 toMint = totalMint - minted[_for][gaugeAddr];
if (toMint != 0) {
minted[_for][gaugeAddr] = totalMint;
bool success = ILT(token).mint(_for, toMint);
require(success, "MINT FAILED");
emit Minted(_for, gaugeAddr, toMint);
}
}
}
{
"compilationTarget": {
"contracts/Minter.sol": "Minter"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [],
"viaIR": true
}
[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_controller","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":false,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"mintingUser","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ToogleApproveMint","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowedToMintFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"gaugeAddress","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"gaugeAddress","type":"address"},{"internalType":"address","name":"_for","type":"address"}],"name":"mintFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"gaugeAddressList","type":"address[]"}],"name":"mintMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"mintingUser","type":"address"}],"name":"toggleApproveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]