---
description: Here you will find all the public contracts related to the ProtoFi Ecosystem
---

# Contracts Management

### Presale contracts

**PreProton**: owned by the deployer. Presale is finished and there will be no need for further interaction\
**ProtonRedeem**: owned by the deployer. Presale is finished and there will be no need for further interaction

### NFT contracts

**TheFantoms.art NFT**: owend by TheFantoms.art NFT guys. Not currently interacting with the ProtoFi smart contracts

**ProtofiNFT**: owend by Deployer. Not currently interacting with the ProtoFi smart contracts

### AMM-Related contracts

_**ProtofiFactory**:_ owend by Deployer.

* Deployer can set fees for swaps. (setFeeAmount)
* An address (feeToSetter - currently the owner of the contract) can set another address to be able to change fees. (setFeeToSetter, setFeeTo)
* Fees cannot go over 0.15%

_**ProtofiRouter**:_ owend by Deployer, all the functions are public.

### **Farm-related contracts**

_**ProtofiMasterChef**:_ owend by Deployer. The deployer can execute the following actions:

* add(): adds a farm to the masterchef
* set(): changes parameters to a farm of the masterchef
* updateEmissionRate(): update the whole emission rate of the tokens performed by the MasterChef. This is also the Pause Control mechanism. By setting the emission rate to 0, the owner basically stops the emission of new tokens in case of problem. The time to execution is minimal.
* setPoolAddress(): set the address to which the additional 20% of the tokens will be minted. Used to kickstart the Gauge and will be used at the launch of the NFT Pool.
* updateNftPoolFeeBP(): sets the percentage of emissions going to the poolAddress address.

_**ProtonToken**:_ owend by _**ProtofiMasterChef**_, that can mint new tokens.

_**ElectronToken**:_ owend by _**ProtofiMasterChef**_, that can mint new tokens.

_**xProtonToken**:_ owend by Deployer, that can mint new tokens.

### Gauge and Bribe System

**BribeWhitelist:** owend by Deployer. The deployer can set ROLES. The main role is the MANAGER role, that can decide to whitelist or remove from the whitelist the tokens used for the bribing mechanism.

**lockedELCT**: owend by Deployer. The deployer can execute the following actions:

* setupveELCT(): setup the veELCT address in the lockedELCT contract.
* mint()
* burn()
* burnAll()

Additionally to the owner, there is the Operator that can call:

* setWhiteListed(): set the addresses that can actually receive or send lockedELCT tokens

**veELCT**: owend by Deployer. The deployer can execute the following actions:

* setEmergency(): stops the veELCT contract and let users to withdraw their locked ELECTRON tokens. It's used in case of emergency or protocol upgrade.

**GaugeProxy**: owend by Deployer. The deployer can execute the following actions:

* addGauge(): adds a new farm to the GaugeProxy
* setPID(): sets the PID of the masterchef to get minted tokens
* updateDepositFeeRate(): updates Deposit fees for gauges
* updateTreasury(): updates the treasury address (not used as of now because fees are set to 0)
* updateBribeWhitelist(): changes the address of the BribeWhitelist contract used.
* updateIsDistributeOpen(): changes the possibility to call the distribution function to anyone.
* updateBribesEnabled(): enables or disables the bribing mechanism.

**DualTimeMoneypot**: owend by Deployer. The deployer can execute the following actions:

* stopReward(): stops fission emissions in case of emergency.
* setTimeBoundaries(): sets the first and the last timestamp at which tokens will be emitted
* emergencyRewardWithdraw(): gives the owner the possibility to emergency withdraw stuck tokens in the contract. Never used on any fission currently.
* updateEmissionRate(): update the whole emission rate of the tokens. This is also the Pause Control mechanism.

