The Minter contract in Curve Finance is responsible for the issuance and distribution of the CRV (Curve's governance token) to liquidity providers. It acts as a mechanism to reward users who provide liquidity to Curve's pools. The Minter contract calculates the amount of CRV tokens to be allocated based on various factors such as the duration and amount of liquidity provided. By incentivizing liquidity provision, the Minter contract promotes the growth and sustainability of the Curve ecosystem.
Function to toggle approval for minting_user to mint CRV on behalf of the caller.
Input
Type
Description
minting_user
address
address to toggle permission for
Source code
# minter -> user -> can mint?allowed_to_mint_for:public(HashMap[address,HashMap[address,bool]])@externaldeftoggle_approve_mint(minting_user:address):""" @notice allow `minting_user` to mint for `msg.sender` @param minting_user Address to toggle permission for """self.allowed_to_mint_for[minting_user][msg.sender]=notself.allowed_to_mint_for[minting_user][msg.sender]
>>>Minter.toggle_approve_mint(todo)'what to put here'
Function to mint allocated tokens for the caller based on a single gauge.
Emits: Minted
Input
Type
Description
gauge_addr
address
gauge address to get mintable amount from
Source code
eventMinted:recipient:indexed(address)gauge:addressminted:uint256@external@nonreentrant('lock')defmint(gauge_addr:address):""" @notice Mint everything which belongs to `msg.sender` and send to them @param gauge_addr `LiquidityGauge` address to get mintable amount from """self._mint_for(gauge_addr,msg.sender)@internaldef_mint_for(gauge_addr:address,_for:address):assertGaugeController(self.controller).gauge_types(gauge_addr)>=0# dev: gauge is not addedLiquidityGauge(gauge_addr).user_checkpoint(_for)total_mint:uint256=LiquidityGauge(gauge_addr).integrate_fraction(_for)to_mint:uint256=total_mint-self.minted[_for][gauge_addr]ifto_mint!=0:MERC20(self.token).mint(_for,to_mint)self.minted[_for][gauge_addr]=total_mintlogMinted(_for,gauge_addr,total_mint)
Function to mint CRV for the caller from multiple gauges.
Emits: Minted
Input
Type
Description
gauge_addrs
address
list of gauge addresses to mint from
Tip
If you wish to mint from less than eight gauges, leave the remaining array entries as ZERO_ADDRESS.
Source code
eventMinted:recipient:indexed(address)gauge:addressminted:uint256@external@nonreentrant('lock')defmint_many(gauge_addrs:address[8]):""" @notice Mint everything which belongs to `msg.sender` across multiple gauges @param gauge_addrs List of `LiquidityGauge` addresses """foriinrange(8):ifgauge_addrs[i]==ZERO_ADDRESS:breakself._mint_for(gauge_addrs[i],msg.sender)@internaldef_mint_for(gauge_addr:address,_for:address):assertGaugeController(self.controller).gauge_types(gauge_addr)>=0# dev: gauge is not addedLiquidityGauge(gauge_addr).user_checkpoint(_for)total_mint:uint256=LiquidityGauge(gauge_addr).integrate_fraction(_for)to_mint:uint256=total_mint-self.minted[_for][gauge_addr]ifto_mint!=0:MERC20(self.token).mint(_for,to_mint)self.minted[_for][gauge_addr]=total_mintlogMinted(_for,gauge_addr,total_mint)
In order to call this function, the caller must have been previously approved by for using toggle_approve_mint.
Input
Type
Description
gauge_addr
address
gaguge address to get mintable amount from
_for
address
address to mint to
Source code
eventMinted:recipient:indexed(address)gauge:addressminted:uint256@external@nonreentrant('lock')defmint_for(gauge_addr:address,_for:address):""" @notice Mint tokens for `_for` @dev Only possible when `msg.sender` has been approved via `toggle_approve_mint` @param gauge_addr `LiquidityGauge` address to get mintable amount from @param _for Address to mint to """ifself.allowed_to_mint_for[msg.sender][_for]:self._mint_for(gauge_addr,_for)@internaldef_mint_for(gauge_addr:address,_for:address):assertGaugeController(self.controller).gauge_types(gauge_addr)>=0# dev: gauge is not addedLiquidityGauge(gauge_addr).user_checkpoint(_for)total_mint:uint256=LiquidityGauge(gauge_addr).integrate_fraction(_for)to_mint:uint256=total_mint-self.minted[_for][gauge_addr]ifto_mint!=0:MERC20(self.token).mint(_for,to_mint)self.minted[_for][gauge_addr]=total_mintlogMinted(_for,gauge_addr,total_mint)