Maven Finance Docs
  • Introduction
    • Getting Started
  • Maven Finance
    • Staking
      • Benefits and Fees of Staking
      • How To Stake and Unstake
    • Satellites & Oracles
      • Delegating To Satellites
      • Satellite Registration
      • Oracle Nodes
    • Earn & Borrow
      • Lending & mTokens
      • Multi-Collateral Vaults
        • Liquidation
      • Interest Rate Model
    • Yield Farms
      • Maven Finance's Yield Farms
      • Yield Farming Dashboard
    • Governance
      • Governance Rounds
        • Proposal Round
        • Voting Round
        • Timelock Round
      • Emergency Governance
      • Financial Governance
      • Satellite Governance
    • Council
      • Management of Finances
      • Management of Vestees
    • Treasury
  • Smart Contracts
    • Smart Contracts Overview
      • Doorman Contract
      • Delegation Contract
      • Aggregator Contract
      • Aggregator Factory Contract
      • Farm Contract
      • Farm Factory Contract
      • Governance Contract
      • Governance Financial Contract
      • Governance Satellite Contract
      • Governance Proxy Contract
      • Council Contract
      • Treasury Contract
      • Treasury Factory Contract
      • Break Glass Contract
      • Emergency Governance Contract
      • Lending Controller Contract
      • Vault Contract
      • Vault Factory Contract
      • MVN Token Contract
      • mToken Contract
      • Vesting Contract
  • Glossary
    • Glossary of Terms
Powered by GitBook
On this page
  • Farm Factory Entrypoints
  • Housekeeping Entrypoints
  • BreakGlass Entrypoints
  • View Methods
  1. Smart Contracts
  2. Smart Contracts Overview

Farm Factory Contract

Accelerating DeFi Expansion with Maven Finance's Farm Factory

The Farm Factory Contract on Maven Finance facilitates the creation of new yield farms, contributing to the overall aim of providing robust and diverse yield opportunities to its users.

It serves as a blueprint for launching new farms, ensuring uniformity in implementation and efficiency in deployment.

Whether it's to incentivize liquidity provision, reward platform engagement, or stimulate token distribution, the Farm Factory Contract streamlines the process of setting up new farms within the Maven Finance ecosystem, thereby accelerating the expansion of our DeFi offerings.

Farm Factory Entrypoints

createFarm

function createFarm(string farmName, bool addToGeneralContracts, bool forceRewardFromTransfer, bool infinite, plannedRewardsType plannedRewards, bytes metadata, farmLpTokenType farmLpToken)

Creates a new standard farm contract

Param Name
Type
Description

farmName

string

The reference name of the new farm to be created

addToGeneralContracts

bool

If set to true, the new farm contract will be added to the General Contracts map on the Governance Contract

forceRewardFromTransfer

bool

A boolean to specify if a farm should transfer or mint rewards from the farmTreasury to users. If set to True, there will be no minting of new MVN tokens as rewards.

infinite

bool

A boolean to specify if a farm should run continuously without end

plannedRewards

plannedRewardsType: nat totalBlocks, nat currentRewardPerBlock

Configuration for the rewards planned for the new farm

totalBlocks

nat

Duration that the farm should operate for in block levels

currentRewardPerBlock

nat

Amount of rewards to be distributed every block

metadata

bytes

The hash of the farm metadata

farmLpToken

farmLpTokenType: address tokenContractAddress, nat tokenId, lpStandardType tokenStandard

Configuration for the LP token to be accepted by the farm

tokenContractAddress

address

The token contract address of the LP Token

tokenId

nat

The token id of the LP token

tokenStandard

lpStandardType: | unit Fa12 | unit Fa2

The token type of the LP token, corresponding to either the Fa12 or Fa2 token standard

createFarmMToken

function createFarmMToken(string farmName, string loanTokenName, bool addToGeneralContracts, bool forceRewardFromTransfer, bool infinite, plannedRewardsType plannedRewards, bytes metadata, farmLpTokenType farmLpToken)

Creates a new standard farm contract

Param Name
Type
Description

farmName

string

The reference name of the new mFarm to be created

loanTokenName

string

The underlying loan token corresponding to the mToken used for the mFarm

addToGeneralContracts

bool

If set to true, the new mFarm contract will be added to the General Contracts map on the Governance Contract

forceRewardFromTransfer

bool

A boolean to specify if a farm should transfer or mint rewards from the farmTreasury to users. If set to True, there will be no minting of new MVN tokens as rewards.

infinite

bool

A boolean to specify if a farm should run continuously without end

plannedRewards

plannedRewardsType: nat totalBlocks, nat currentRewardPerBlock

Configuration for the rewards planned for the new farm

totalBlocks

nat

Duration that the farm should operate for in block levels

currentRewardPerBlock

nat

Amount of rewards to be distributed every block

metadata

bytes

The hash of the farm metadata

farmLpToken

farmLpTokenType: address tokenContractAddress, nat tokenId, lpStandardType tokenStandard

Configuration for the LP token to be accepted by the farm

tokenContractAddress

address

The token contract address of the LP Token

tokenId

nat

The token id of the LP token

tokenStandard

lpStandardType: | unit Fa12 | unit Fa2

The token type of the LP token, corresponding to either the Fa12 or Fa2 token standard

trackFarm

function trackFarm(address farmAddress)

Tracks a farm contract and adds it to the trackedFarms set on the Farm Factory Contract

Can be called only by the admin (i.e. the governance proxy contract)

Param Name
Type
Description

farmAddress

address

The contract address of the farm to be tracked

untrackFarm

function untrackFarm(address farmAddress)

Untracks a farm contract and removes it from the trackedFarms set on the Farm Factory Contract

Can be called only by the admin (i.e. the governance proxy contract)

Param Name
Type
Description

farmAddress

address

The contract address of the farm to be untracked

Housekeeping Entrypoints

setAdmin

function setAdmin(address newAdminAddress)

Sets a new admin address for the contract

Can be called only by the admin or the governance contract address

Param Name
Type
Description

newAdminAddress

address

The address of the new admin

setGovernance

function setGovernance(address newGovernanceAddress)

Sets a new governance contract address

Can be called only by the admin or the governance contract address

Param Name
Type
Description

newGovernanceAddress

address

The address of the new governance contract

updateMetadata

function updateMetadata(string key, bytes hash)

Replace the hash of the contract metadata based on the provided key

Can be called only by the admin (i.e. the governance proxy contract)

Param Name
Type
Description

key

string

The key in the metadata bigmap to be updated

hash

bytes

The hash of the metadata key

updateConfig

function updateConfig(nat newConfigValue, farmFactoryConfigActionType farmFactoryConfigAction)

Updates the config variables on the Farm Factory Contract

Can be called only by the admin (i.e. the governance proxy contract)

Param Name
Type
Description

newConfigValue

nat

The new value of the config parameter

farmFactoryConfigAction

farmFactoryConfigActionType: | unit ConfigFarmNameMaxLength | unit Empty

The variant config variable to be updated

updateWhitelistContracts

function updateWhitelistContracts(address whitelistContractAddress, updateType update)

Add, update or remove a whitelist contract in the whitelistContracts map in the storage

Can be called only by the admin (i.e. the governance proxy contract)

Param Name
Type
Description

whitelistContractAddress

address

The contract address to be updated in the whitelist contracts bigmap

updateType

updateType: | unit Update | unit Remove

Specifies whether the whitelistContractAddress should be updated or removed from the whitelist contracts bigmap

updateGeneralContracts

function updateGeneralContracts(string generalContractName, address generalContractAddress, updateType update)

Add, update or remove a general contract in the generalContracts map in the storage

Can be called only by the admin (i.e. the governance proxy contract)

Param Name
Type
Description

generalContractName

string

The identifier key to be set in the general contracts bigmap which will be the general contract name in camelcase

generalContractAddress

address

The contract address to be updated in the general contracts bigmap

updateType

updateType: | unit Update | unit Remove

Specifies whether the generalContractAddress should be updated or removed from the general contracts bigmap

mistakenTransfer

function mistakenTransfer(transferActionType transferList)

Transfers any mav or token that may have mistakenly been sent to this contract

Can be called only by the admin or the governance satellite contract

Param Name
Type
Description

transferList

transferActionType:

list(address to_, nat tokenAmount, token tokenType)

A list of transfers of tokens to recipients

to_

address

The recipient of the mistaken transfer

tokenAmount

nat

The amount of tokens to be transferred

token

tokenType: | unit Mav | (address tokenContractAddress) Fa12 | (address tokenContractAddress, nat tokenId) Fa2

The token type of the token to be transferred, corresponding to either Mav, MRC-10, or MRC-20

setLambda

function setLambda(string lambdaName, bytes func_bytes)

Sets a lambda in the Farm Factory contract with the given bytes and name

Can be called only by the admin (i.e. the governance proxy contract)

Param Name
Type
Description

lambdaName

string

The name of the lambda to be set

func_bytes

bytes

The data of the lambda in Michelson bytes format

setProductLambda

function setProductLambda(string lambdaName, bytes func_bytes, farmType farm)

Sets a lambda in the contract with the given bytes and name

Can be called only by the admin (i.e. the governance proxy contract)

Param Name
Type
Description

lambdaName

string

The name of the lambda to be set

func_bytes

bytes

The data of the lambda in Michelson bytes format

farm

farmType: | unit Farm | unit MFarm

Specifies the type of farm on which the lambda will be stored for

BreakGlass Entrypoints

pauseAll

function pauseAll()

Pauses all entrypoints in the farm factory contract, and also calls the pauseAll entrypoint in each tracked farm contract

Can be called only by the admin or the governance contract address

unpauseAll

function unpauseAll()

Unpauses all entrypoints in the farm factory contract, and also calls the unpauseAll entrypoint in each tracked farm contract

Can be called only by the admin or the governance contract address

togglePauseEntrypoint

function togglePauseEntrypoint(farmFactoryPausableEntrypointType targetEntrypoint, unit empty)

Toggles the pausing of a specific entrypoint in the contract

Can be called only by the admin (i.e. the governance proxy contract)

Param Name
Type
Description

targetEntrypoint

farmFactoryPausableEntrypointType: | bool CreateFarm | bool CreateFarmMToken | bool UntrackFarm | bool TrackFarm

The target entrypoint to be paused, and its corresponding pause boolean. If the boolean is set to True, the entrypoint will be paused.

empty

unit

A null param used to prettify interactions with this entrypoint on blockchain explorers such as better-call-dev

View Methods

getAdmin

function getAdmin()

Returns the contract admin

getGovernanceAddress

function getGovernanceAddress()

Returns the contract governance address

getConfig

function getConfig()

Returns the contract configuration parameters

getBreakGlassConfig

function getBreakGlassConfig()

Returns the contract configuration parameters

getWhitelistContractOpt

function getWhitelistContractOpt(address contractAddress)

Returns unit if contract address is whitelisted, else returns none

checkFarmExists

function checkFarmExists(address farmContractAddress)

Returns True if the farm contract address is found in the trackedFarms set

getTrackedFarms

function getTrackedFarms()

Returns the trackedFarms set

getLambdaOpt

function getLambdaOpt(string lambdaName)

Returns a lambda in the contract for the given lambda name, else returns none

getFarmLambdaOpt

function getFarmLambdaOpt(string lambdaName)

Returns a lambda in the farm lambda ledger for the given lambda name, else returns none

getMFarmLambdaOpt

function getMFarmLambdaOpt(string lambdaName)

Returns a lambda in the mFarm lambda ledger for the given lambda name, else returns none

PreviousFarm ContractNextGovernance Contract

Last updated 6 months ago