CurveConvexSynthChef

Git Source

Inherits: IProtocolSynthChef, Initializable, UUPSUpgradeable, AccessControlUpgradeable, OwnableUpgradeable

A contract for managing interactions with Curve Finance and Convex Finance for yield farming purposes.

This contract provides functionalities to interact with Curve pools, deposit and withdraw LP tokens, harvest rewards, and more.

State Variables

masterChef

Address of the Entangle MasterChef contract.

address public masterChef;

ADMIN

Role identifier for the admin.

bytes32 public constant ADMIN = keccak256("ADMIN");

MASTER

Role identifier for the master.

bytes32 public constant MASTER = keccak256("MASTER");

WETH

Address of the Wrapped Ether (WETH) contract.

address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

convexBooster

Address of the Convex booster contract.

address constant convexBooster = 0xF403C135812408BFbE8713b5A23a04b3D48AAE31;

pools

Mapping from Entangle internal pool ID to Curve pool details.

mapping(uint32 poolId => Pool) public pools;

isPoolInitialized

Mapping to track if a pool is initialized.

mapping(uint32 poolId => bool) public isPoolInitialized;

Functions

isPoolExist

Modifier to ensure that the LP token exists.

modifier isPoolExist(address lpToken);

onlyCompounder

Modifier to restrict function access to the Compounder.

modifier onlyCompounder();

constructor

constructor();

initialize

Initializes the CurveConvexSynthChef contract with initial parameters.

This function is called during deployment to set up initial configuration.

function initialize(
    address _admin,
    address _msc,
    uint32[] calldata entanglePoolIds,
    Pool[] calldata convexPoolData
) public initializer;

Parameters

NameTypeDescription

_admin

address

The address of the admin role for managing contract administration.

_msc

address

The address of the Entangle MasterChef contract.

entanglePoolIds

uint32[]

Array of Entangle internal pool IDs.

convexPoolData

Pool[]

Array of Pool struct data containing Curve pool information.

_authorizeUpgrade

function _authorizeUpgrade(address newImplementation) internal override onlyOwner;

addPool

Adds a new Curve pool to the contract.

This function can only be called by the admin.

function addPool(uint32 poolId, bytes calldata poolInfo) external onlyRole(ADMIN);

Parameters

NameTypeDescription

poolId

uint32

Entangle internal poolId.

poolInfo

bytes

Information required to communicate with Curve.

reinvest

Reinvests LP tokens into the farm.

This function can only be called by the Compounder and requires a valid pool ID.

function reinvest(uint32 poolId)
    external
    onlyCompounder
    isPoolExist(pools[poolId].lpToken)
    returns (uint256);

Parameters

NameTypeDescription

poolId

uint32

Entangle internal poolId.

Returns

NameTypeDescription

<none>

uint256

amountLPs The amount of LP tokens reinvested.

_optimalDeposit

Calculates the optimal amount of LP tokens to deposit into the farm.

This function computes the deposit amounts for each token in the pool based on the current balances.

function _optimalDeposit(uint32 poolId) internal returns (uint256);

Parameters

NameTypeDescription

poolId

uint32

Entangle internal poolId.

Returns

NameTypeDescription

<none>

uint256

amountLPs The optimal amount of LP tokens to deposit.

withdraw

Withdraws LP tokens from the farm and removes liquidity.

This function transfers the withdrawn tokens to the recipient address.

function withdraw(uint32 poolId, uint256 lpAmountToWithdraw, address recipient)
    external
    onlyRole(MASTER)
    isPoolExist(pools[poolId].lpToken)
    returns (uint256[] memory amounts);

Parameters

NameTypeDescription

poolId

uint32

Entangle internal poolId.

lpAmountToWithdraw

uint256

Amount of LP tokens to withdraw.

recipient

address

Address to receive the withdrawn tokens.

depositLP

Deposits LP tokens into the farm.

This function can only be called by the MASTER and requires a valid pool ID.

function depositLP(uint32 poolId, uint256 lpAmount)
    external
    onlyRole(MASTER)
    isPoolExist(pools[poolId].lpToken);

Parameters

NameTypeDescription

poolId

uint32

Entangle internal poolId.

lpAmount

uint256

Amount of LP tokens to deposit.

withdrawLP

Withdraws LP tokens from the farm and transfers them to the Entangle MasterChef.

This function can only be called by the MASTER and requires a valid pool ID.

function withdrawLP(uint32 poolId, uint256 lpAmount) external onlyRole(MASTER);

Parameters

NameTypeDescription

poolId

uint32

Entangle internal poolId.

lpAmount

uint256

Amount of LP tokens to withdraw.

harvest

Accrues rewards and transfers them to the Compounder.

This function can only be called by the Compounder and requires a valid pool ID.

function harvest(uint32 poolId)
    external
    onlyCompounder
    isPoolExist(pools[poolId].lpToken)
    returns (address[] memory rewardTokens, uint256[] memory amounts);

Parameters

NameTypeDescription

poolId

uint32

Entangle internal poolId.

Returns

NameTypeDescription

rewardTokens

address[]

Array of reward tokens transferred.

amounts

uint256[]

Array of reward amounts transferred.

getTotalLpBalance

Retrieves the total balance of LP tokens on the farm.

This function returns the LP token balance of this contract for a given pool ID.

function getTotalLpBalance(uint32 poolId)
    external
    view
    isPoolExist(pools[poolId].lpToken)
    returns (uint256 amount);

Parameters

NameTypeDescription

poolId

uint32

Entangle internal poolId.

Returns

NameTypeDescription

amount

uint256

Balance of LP tokens of this contract.

getPoolTokens

Retrieves the addresses of tokens in a pool.

This function returns an array of pool token addresses for a given pool ID.

function getPoolTokens(uint32 poolId)
    external
    view
    isPoolExist(pools[poolId].lpToken)
    returns (address[] memory tokens);

Parameters

NameTypeDescription

poolId

uint32

Entangle internal poolId.

Returns

NameTypeDescription

tokens

address[]

Array of pool token addresses.

lpTokenAddress

Retrieves the LP token address for a given pool ID.

This function returns the address of the LP token for a specified pool ID.

function lpTokenAddress(uint32 poolId)
    external
    view
    isPoolExist(pools[poolId].lpToken)
    returns (address lpToken);

Parameters

NameTypeDescription

poolId

uint32

Entangle internal poolId.

Returns

NameTypeDescription

lpToken

address

Address of the LP token.

getAvailableRewards

Retrieves the available rewards for a given pool ID.

This function returns the amount of rewards available for claiming for a specified pool ID.

function getAvailableRewards(uint32 poolId) external view returns (uint256 rewards);

Parameters

NameTypeDescription

poolId

uint32

Entangle internal poolId.

Returns

NameTypeDescription

rewards

uint256

Amount of rewards available.

getPool

Retrieves the details of a pool for a given pool ID.

This function returns the details of the pool including LP token, convex ID, Curve pool, and Convex reward contract.

function getPool(uint32 entPoolId) external view returns (Pool memory);

Parameters

NameTypeDescription

entPoolId

uint32

Entangle internal poolId.

Returns

NameTypeDescription

<none>

Pool

Pool struct containing the details of the pool.

_ensureAllowance

Ensures that the contract has sufficient allowance to spend tokens.

This function ensures that the contract has the required allowance to spend tokens.

function _ensureAllowance(address token, address spender, uint256 amount) internal;

Parameters

NameTypeDescription

token

address

Address of the token.

spender

address

Address of the spender.

amount

uint256

Amount of tokens to spend.

receive

receive() external payable;

Errors

CurveConvexSynthChef__E1

PoolId already exists : CurveConvexSynthChef

error CurveConvexSynthChef__E1();

CurveConvexSynthChef__E2

PoolId doesnot exist : CurveConvexSynthChef

error CurveConvexSynthChef__E2();

CurveConvexSynthChef__E3

Amount eq 0 : CurveConvexSynthChef

error CurveConvexSynthChef__E3();

CurveConvexSynthChef__E4

Withdraw unsuc : CurveConvexSynthChef

error CurveConvexSynthChef__E4();

CurveConvexSynthChef__E5

Pool token balance eq 0 : CurveConvexSynthChef

error CurveConvexSynthChef__E5();

CurveConvexSynthChef__NotACompounder

Caller is not Entangle's Compounder

error CurveConvexSynthChef__NotACompounder();

Structs

Pool

Struct representing Curve pool details.

struct Pool {
    address lpToken;
    uint256 convexID;
    address[] uTokens;
    ICurvePool curvePool;
    IConvexReward convexReward;
}

Last updated