Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions packages/foundry/src/interfaces/external/IRewarder.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

interface IRewarder {
function pendingTokens(
uint256 _pid,
address _user,
uint256
) external returns (address[] memory rewardTokens, uint256[] memory rewardAmounts);
}
71 changes: 71 additions & 0 deletions packages/foundry/src/interfaces/external/curve/ICurveMetapool.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
// SPDX-License-Identifier: GPL-3.0
// Docgen-SOLC: 0.8.15

pragma solidity ^0.8.15;

interface ICurveMetapool {
function get_virtual_price() external view returns (uint256);

function add_liquidity(uint256[2] calldata amounts, uint256 min_mint_amounts) external returns (uint256);

function add_liquidity(
uint256[2] calldata _amounts,
uint256 _min_mint_amounts,
address _receiver
) external returns (uint256);

function add_liquidity(uint256[3] calldata amounts, uint256 min_mint_amounts) external returns (uint256);

function add_liquidity(
uint256[3] calldata _amounts,
uint256 _min_mint_amounts,
address _receiver
) external returns (uint256);

function add_liquidity(uint256[4] calldata amounts, uint256 min_mint_amounts) external;

function add_liquidity(
uint256[4] calldata _amounts,
uint256 _min_mint_amounts,
address _receiver
) external returns (uint256);

function remove_liquidity_one_coin(
uint256 amount,
int128 i,
uint256 min_underlying_amount
) external;

function remove_liquidity_one_coin(
uint256 amount,
int128 i,
uint256 min_underlying_amount,
bool donate_dust
) external;

function calc_withdraw_one_coin(uint256 _token_amount, int128 i) external view returns (uint256);

//Some pools use exchange (sUsd,3crv)...
function exchange(
uint256 i,
uint256 j,
uint256 dx,
uint256 min_dy
) external returns (uint256);

//...And some others use exchange_underlying (mim,3crv)
function exchange_underlying(
int128 i,
int128 j,
uint256 dx,
uint256 min_dy
) external returns (uint256);

function lp_price() external view returns (uint256);

function price_oracle() external view returns (uint256);

function balances(uint256 i) external view returns (uint256);

function remove_liquidity(uint256 amount, uint256[4] memory min_amounts) external;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

interface IStargateRewarder {
function deposit(uint256 _pid, uint256 _amount) external;

function pendingStargate(uint256 _pid, address _user) external view returns (uint256);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

interface IStargateRouter {
function addLiquidity(
uint256 _pid,
uint256 _amount,
address _to
) external;
}
47 changes: 47 additions & 0 deletions packages/foundry/src/interfaces/external/sushi/IMiniChefV2.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

interface IMiniChefV2 {
struct UserInfo {
uint256 amount;
uint256 rewardDebt;
}

struct PoolInfo {
uint128 accSushiPerShare;
uint64 lastRewardTime;
uint64 allocPoint;
}

function poolLength() external view returns (uint256);

function updatePool(uint256 pid) external returns (IMiniChefV2.PoolInfo memory);

function userInfo(uint256 _pid, address _user) external view returns (uint256, uint256);

function deposit(
uint256 pid,
uint256 amount,
address to
) external;

function withdraw(
uint256 pid,
uint256 amount,
address to
) external;

function harvest(uint256 pid, address to) external;

function pendingSushi(uint256 _pid, address _user) external returns (uint256);

function rewarder(uint256 _pid) external returns (address);

function withdrawAndHarvest(
uint256 pid,
uint256 amount,
address to
) external;

function emergencyWithdraw(uint256 pid, address to) external;
}
98 changes: 98 additions & 0 deletions packages/foundry/src/interfaces/external/uni/IUniswapV2Pair.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.15;

interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint256 value);
event Transfer(address indexed from, address indexed to, uint256 value);

function name() external pure returns (string memory);

function symbol() external pure returns (string memory);

function decimals() external pure returns (uint8);

function totalSupply() external view returns (uint256);

function balanceOf(address owner) external view returns (uint256);

function allowance(address owner, address spender) external view returns (uint256);

function approve(address spender, uint256 value) external returns (bool);

function transfer(address to, uint256 value) external returns (bool);

function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);

function DOMAIN_SEPARATOR() external view returns (bytes32);

function PERMIT_TYPEHASH() external pure returns (bytes32);

function nonces(address owner) external view returns (uint256);

function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;

event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);

function MINIMUM_LIQUIDITY() external pure returns (uint256);

function factory() external view returns (address);

function token0() external view returns (address);

function token1() external view returns (address);

function getReserves()
external
view
returns (
uint112 reserve0,
uint112 reserve1,
uint32 blockTimestampLast
);

function price0CumulativeLast() external view returns (uint256);

function price1CumulativeLast() external view returns (uint256);

function kLast() external view returns (uint256);

function mint(address to) external returns (uint256 liquidity);

function burn(address to) external returns (uint256 amount0, uint256 amount1);

function swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;

function skim(address to) external;

function sync() external;

function initialize(address, address) external;
}
16 changes: 16 additions & 0 deletions packages/foundry/src/interfaces/modules/IUniswapV2Module.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

interface IUniswapV2Module {
function swap(
address _router,
address[] memory _route,
uint256 _amount
) external;

function addLiquidity(
address _router,
address _lpToken0,
address _lpToken1
) external;
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { IAdapter } from "../../../interfaces/vault/IAdapter.sol";
contract WithRewards is EIP165, OnlyStrategy {
function rewardTokens() external view virtual returns (address[] memory) {}

function claim() public virtual onlyStrategy {}
function claim() public virtual {}

/*//////////////////////////////////////////////////////////////
EIP-165 LOGIC
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ contract ConvexAdapter is AdapterBase, WithRewards {
error MiningNotActive();

/// @notice Claim liquidity mining rewards given that it's active
function claim() public override onlyStrategy {
function claim() public override {
convexRewards.getReward(address(this), true);
}

Expand Down
19 changes: 19 additions & 0 deletions packages/foundry/src/vault/strategy/Pool2SingleAssetCompounder.sol
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,22 @@ contract Pool2SingleAssetCompounder is StrategyBase {
IAdapter(address(this)).strategyDeposit(ERC20(asset).balanceOf(address(this)), 0);
}
}


// asset -> asset
// asset -> curve pool2
// asset -> curve pool3
// asset -> curve custom pool -- how many?
// asset -> uniV2
// asset -> uniV3
// asset -> velo?
// asset -> balancer -- how many?
// split asset to mitigate slippage


// Use 1Inch Router
// 1. Get Spot price
// 2. Calc Min
// 3. Trade using router
// 4. Potentially LP
// Trade to usdc first? and than trade all together to asset? Or just each reward on their own
Loading