Skip to content

Commit

Permalink
Merge pull request #97 from stabilitydao/95-proposed-ichi-retro-merkl…
Browse files Browse the repository at this point in the history
…-farm

IRMF 1.0.1, LPStrategyBase 1.0.2
  • Loading branch information
a17 authored Feb 25, 2024
2 parents d547062 + df38d93 commit 71ac9d2
Show file tree
Hide file tree
Showing 6 changed files with 171 additions and 7 deletions.
74 changes: 70 additions & 4 deletions chains/PolygonLib.sol
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ library PolygonLib {
address public constant POOL_RETRO_WETH_RETRO_1000 = 0x35394eED0Be676ec6470fE6531daD809265310ff;
address public constant POOL_RETRO_USDCe_RETRO_1000 = 0xc7d8B9c270D0E31A6a0Cf4496fe019766Be42E15;
address public constant POOL_RETRO_WMATIC_USDCe_500 = 0xEC15624FBB314eb05BaaD4cA49b7904C0Cb6b645;
address public constant POOL_RETRO_WBTC_WETH_500 = 0xb694E3bdd4BCdF843510983D257679D1E627C474;

// Gelato
address public constant GELATO_AUTOMATE = 0x527a819db1eb0e34426297b03bae11F2f8B3A19E;
Expand Down Expand Up @@ -118,8 +119,11 @@ library PolygonLib {
address public constant ICHI_QUICKSWAP_WMATIC_USDT = 0x5D73D117Ffb8AD26e6CC9f2621d52f479AAA8C5B;
address public constant ICHI_QUICKSWAP_WBTC_WETH = 0x5D1b077212b624fe580a84384Ffea44da752ccb3;
address public constant ICHI_QUICKSWAP_WETH_USDT = 0xc46FAb3Af8aA7A56feDa351a22B56749dA313473;
address public constant ICHI_RETRO_WMATIC_WETH = 0x38F41FDe5cABC569E808537FdaF390cD7f0dC0f6;
address public constant ICHI_RETRO_WMATIC_USDCe = 0x91f935892355C8CA4468C44D2c4bAE1A23c60c14;
address public constant ICHI_RETRO_WMATIC_WETH_MATIC = 0x38F41FDe5cABC569E808537FdaF390cD7f0dC0f6;
address public constant ICHI_RETRO_WMATIC_WETH_ETH = 0xE9BD439259DE0347DC26B86b3E73437E93858283;
address public constant ICHI_RETRO_WMATIC_USDCe_MATIC = 0x91f935892355C8CA4468C44D2c4bAE1A23c60c14;
address public constant ICHI_RETRO_WMATIC_USDCe_USDC = 0x5Ef5630195164956d394fF8093C1B6964cb5814B;
address public constant ICHI_RETRO_WBTC_WETH_ETH = 0x0B0302014DD4FB6A77da03bF9034db5FEcB68eA8;

// DeX aggregators
address public constant ONE_INCH = 0x1111111254EEB25477B68fb85Ed929f73A960582;
Expand Down Expand Up @@ -220,6 +224,7 @@ library PolygonLib {
factory.addFarms(farms2());
factory.addFarms(farms3());
factory.addFarms(farms4());
factory.addFarms(farms5());
DeployLib.logAddedFarms(address(factory), showLog);
//endregion -- Add farms -----

Expand Down Expand Up @@ -665,6 +670,7 @@ library PolygonLib {
});
}

// retro part 1
function farms4() public pure returns (IFactory.Farm[] memory _farms) {
_farms = new IFactory.Farm[](2);
address[] memory rewardAssets;
Expand All @@ -676,7 +682,7 @@ library PolygonLib {
rewardAssets = new address[](1);
rewardAssets[0] = TOKEN_oRETRO;
addresses = new address[](1);
addresses[0] = ICHI_RETRO_WMATIC_WETH;
addresses[0] = ICHI_RETRO_WMATIC_WETH_MATIC;
nums = new uint[](0);
ticks = new int24[](0);
_farms[0] = IFactory.Farm({
Expand All @@ -693,7 +699,7 @@ library PolygonLib {
rewardAssets = new address[](1);
rewardAssets[0] = TOKEN_oRETRO;
addresses = new address[](1);
addresses[0] = ICHI_RETRO_WMATIC_USDCe;
addresses[0] = ICHI_RETRO_WMATIC_USDCe_MATIC;
nums = new uint[](0);
ticks = new int24[](0);
_farms[1] = IFactory.Farm({
Expand All @@ -707,6 +713,66 @@ library PolygonLib {
});
}

// retro part 2
function farms5() public pure returns (IFactory.Farm[] memory _farms) {
_farms = new IFactory.Farm[](3);
address[] memory rewardAssets;
address[] memory addresses;
uint[] memory nums;
int24[] memory ticks;

// [26]
rewardAssets = new address[](1);
rewardAssets[0] = TOKEN_oRETRO;
addresses = new address[](1);
addresses[0] = ICHI_RETRO_WMATIC_WETH_ETH;
nums = new uint[](0);
ticks = new int24[](0);
_farms[0] = IFactory.Farm({
status: 0,
pool: POOL_RETRO_WMATIC_WETH_500,
strategyLogicId: StrategyIdLib.ICHI_RETRO_MERKL_FARM,
rewardAssets: rewardAssets,
addresses: addresses,
nums: nums,
ticks: ticks
});

// [27]
rewardAssets = new address[](1);
rewardAssets[0] = TOKEN_oRETRO;
addresses = new address[](1);
addresses[0] = ICHI_RETRO_WMATIC_USDCe_USDC;
nums = new uint[](0);
ticks = new int24[](0);
_farms[1] = IFactory.Farm({
status: 0,
pool: POOL_RETRO_WMATIC_USDCe_500,
strategyLogicId: StrategyIdLib.ICHI_RETRO_MERKL_FARM,
rewardAssets: rewardAssets,
addresses: addresses,
nums: nums,
ticks: ticks
});

// [28]
rewardAssets = new address[](1);
rewardAssets[0] = TOKEN_oRETRO;
addresses = new address[](1);
addresses[0] = ICHI_RETRO_WBTC_WETH_ETH;
nums = new uint[](0);
ticks = new int24[](0);
_farms[2] = IFactory.Farm({
status: 0,
pool: POOL_RETRO_WBTC_WETH_500,
strategyLogicId: StrategyIdLib.ICHI_RETRO_MERKL_FARM,
rewardAssets: rewardAssets,
addresses: addresses,
nums: nums,
ticks: ticks
});
}

function _makeGammaQuickSwapMerklFarm(
address rewardAsset0,
address hypervisor,
Expand Down
94 changes: 94 additions & 0 deletions script/DeployUpdateStrategyIRMF.Polygon.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.23;

import "forge-std/Script.sol";
import "../src/strategies/IchiRetroMerklFarmStrategy.sol";

/// @dev Deploy script for operator
contract DeployUpdateStrategyIRMFPolygon is Script {
address public constant PLATFORM = 0xb2a0737ef27b5Cc474D24c779af612159b1c3e60;
address public constant TOKEN_oRETRO = 0x3A29CAb2E124919d14a6F735b6033a3AaD2B260F;
address public constant ICHI_RETRO_WMATIC_WETH_ETH = 0xE9BD439259DE0347DC26B86b3E73437E93858283;
address public constant ICHI_RETRO_WMATIC_USDCe_USDC = 0x5Ef5630195164956d394fF8093C1B6964cb5814B;
address public constant ICHI_RETRO_WBTC_WETH_ETH = 0x0B0302014DD4FB6A77da03bF9034db5FEcB68eA8;
address public constant POOL_RETRO_WBTC_WETH_500 = 0xb694E3bdd4BCdF843510983D257679D1E627C474;
address public constant POOL_RETRO_WMATIC_WETH_500 = 0x1a34EaBbe928Bf431B679959379b2225d60D9cdA;
address public constant POOL_RETRO_WMATIC_USDCe_500 = 0xEC15624FBB314eb05BaaD4cA49b7904C0Cb6b645;

function run() external {
IFactory factory = IFactory(IPlatform(PLATFORM).factory());
IFactory.Farm[] memory _farms = _farms5();

uint deployerPrivateKey = vm.envUint("PRIVATE_KEY");
vm.startBroadcast(deployerPrivateKey);

// v 1.0.1 with bugfix
new IchiRetroMerklFarmStrategy();

// farms
factory.addFarms(_farms);

vm.stopBroadcast();
}

function testDeployPolygon() external {}

function _farms5() internal pure returns (IFactory.Farm[] memory _farms) {
_farms = new IFactory.Farm[](3);
address[] memory rewardAssets;
address[] memory addresses;
uint[] memory nums;
int24[] memory ticks;

// [26]
rewardAssets = new address[](1);
rewardAssets[0] = TOKEN_oRETRO;
addresses = new address[](1);
addresses[0] = ICHI_RETRO_WMATIC_WETH_ETH;
nums = new uint[](0);
ticks = new int24[](0);
_farms[0] = IFactory.Farm({
status: 0,
pool: POOL_RETRO_WMATIC_WETH_500,
strategyLogicId: StrategyIdLib.ICHI_RETRO_MERKL_FARM,
rewardAssets: rewardAssets,
addresses: addresses,
nums: nums,
ticks: ticks
});

// [27]
rewardAssets = new address[](1);
rewardAssets[0] = TOKEN_oRETRO;
addresses = new address[](1);
addresses[0] = ICHI_RETRO_WMATIC_USDCe_USDC;
nums = new uint[](0);
ticks = new int24[](0);
_farms[1] = IFactory.Farm({
status: 0,
pool: POOL_RETRO_WMATIC_USDCe_500,
strategyLogicId: StrategyIdLib.ICHI_RETRO_MERKL_FARM,
rewardAssets: rewardAssets,
addresses: addresses,
nums: nums,
ticks: ticks
});

// [28]
rewardAssets = new address[](1);
rewardAssets[0] = TOKEN_oRETRO;
addresses = new address[](1);
addresses[0] = ICHI_RETRO_WBTC_WETH_ETH;
nums = new uint[](0);
ticks = new int24[](0);
_farms[2] = IFactory.Farm({
status: 0,
pool: POOL_RETRO_WBTC_WETH_500,
strategyLogicId: StrategyIdLib.ICHI_RETRO_MERKL_FARM,
rewardAssets: rewardAssets,
addresses: addresses,
nums: nums,
ticks: ticks
});
}
}
2 changes: 1 addition & 1 deletion src/strategies/IchiRetroMerklFarmStrategy.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ contract IchiRetroMerklFarmStrategy is LPStrategyBase, FarmingStrategyBase {
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

/// @inheritdoc IControllable
string public constant VERSION = "1.0.0";
string public constant VERSION = "1.0.1";

uint internal constant PRECISION = 10 ** 18;

Expand Down
2 changes: 1 addition & 1 deletion src/strategies/base/LPStrategyBase.sol
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ abstract contract LPStrategyBase is StrategyBase, ILPStrategy {
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

/// @dev Version of LPStrategyBase implementation
string public constant VERSION_LP_STRATEGY_BASE = "1.0.1";
string public constant VERSION_LP_STRATEGY_BASE = "1.0.2";

// keccak256(abi.encode(uint256(keccak256("erc7201:stability.LPStrategyBase")) - 1)) & ~bytes32(uint256(0xff));
bytes32 private constant LPSTRATEGYBASE_STORAGE_LOCATION =
Expand Down
3 changes: 2 additions & 1 deletion src/strategies/libs/LPStrategyLib.sol
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ library LPStrategyLib {
vars.threshold1 = vars.swapper.threshold(assets[1]);
if (vars.balance0 > vars.threshold0 || vars.balance1 > vars.threshold1) {
uint balance1PricedInAsset0 = vars.balance1 * vars.price / 10 ** vars.asset1decimals;

// nosemgrep
if (!(vars.balance1 > 0 && balance1PricedInAsset0 == 0)) {
uint prop0Balances =
Expand All @@ -211,7 +212,7 @@ library LPStrategyLib {
assets[0], assets[1], toSwapAsset0, ConstantsLib.SWAP_REVENUE_PRICE_IMPACT_TOLERANCE
);
}
} else {
} else if (prop0Pool > 0) {
// extra assets[1]
uint correctAsset1Balance = vars.balance0 * 1e18 / prop0Pool * (1e18 - prop0Pool) / 1e18
* 10 ** vars.asset1decimals / vars.price;
Expand Down
3 changes: 3 additions & 0 deletions test/strategies/IRMF.Polygon.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ contract IchiRetroMerklFarmStrategyTest is PolygonSetup, UniversalTest {
function testIRMF() public universalTest {
_addStrategy(24);
_addStrategy(25);
_addStrategy(26);
_addStrategy(27);
_addStrategy(28);
}

function _addStrategy(uint farmId) internal {
Expand Down

0 comments on commit 71ac9d2

Please sign in to comment.