Curve Adapter (Stable and Crypto Swap) (#29)
* feat: Initial manifest structure * feat: Adapter initial development and price function implementation * feat: Implemented getPoolIDs * feat: Implemented getTokens * feat: Implemented getCapabilities * feat: Implemented getLimits * feat: Implemented swap * feat: Created Adapter version for CurveV2 pools uint256 * fix: Review Fixes * chore: Formatted code and code adjustments * feat: Separated contracts and finished tests for Curve Exchange(Crypto and StableSwap) * feat: Adjusted naming and formatted tests code * chore: Initial merging of swaps * merge CurveCryptoSwapAdapter and CurveStableSwapAdapter into CurveAdapter * Fix and Test: fixes on CurveAdapter.sol and created CurveAdapter.t.sol * review and fixes * removed unused test and parameters * chore: Initial MetaPool underlying swap and ETH native implementation * chore: expanded swap and sell functions to support seap for underlying tokens and LPS * chore: expanded functionalities of CurveAdapter and fixed getTokens function * fix: fixed registry.is_meta * chore: fixes * chore: extended adapter and implementing tests for new pools * chore: updated Adapter, implementing final tests * fixing eth transfer * fix and tests: fixed adapter and finishing tests implementation * using adapter with try catch * feat: Final fixes for pools support, using try-catch * chore: Removed chunk files * chore: Formatted code and removed unused condition * fix: Fixed calculatedAmount in sell function when receiveToken=ETH * chore: Adjusted ETH pools check * corrected metaregistry address * fix: fixed int128 conversion to unit256 * feat: Removed registry from adapter * feat: Implemented price() * fix: Propeller review fixes * review fixes * fix: Final fixes for custom custom int128 pools * chore: Removed unused test * fix: Fixed price error in custom pools * feat: Improved isInt128Pool function to support any coin * fix: Fixed price for custom pools using ETH balance when token0 is WETH * fix: Fixed price function and added AdapterTest support in test * fix: Fixed divisions in getPriceAt * feat: Added secondary ETH pool support, e.g. stETH * refactor(curve-adapter): Avoid calling WETH contract if possible. (#65) * refactor(curve-adapter): Avoid calling WETH contract if possible. This PR aims to use native ETH instead of WETH when possible, this is to avoid having to index WETH contract. * style(adapter): apply `forge fmt` * refactor(curve): change limit factor to 2 --------- Co-authored-by: Florian Pellissier <111426680+flopell@users.noreply.github.com> * refactor: fix Curve Adapter test after rebase * fix: remove PriceFunction capability for Curve This was wrongly implemented: it return the price for a quote and not the marginal price after the swap. * refactor: improve adapter test and fix failing test for etherfi --------- Co-authored-by: domenicodev <domenico.romeo3919@gmail.com> Co-authored-by: mp-web3 <mp.web3.t@gmail.com> Co-authored-by: Zizou <111426680+zizou0x@users.noreply.github.com> Co-authored-by: Florian Pellissier <111426680+flopell@users.noreply.github.com> Co-authored-by: Diana Carvalho <diana@propellerheads.xyz>
This commit is contained in:
@@ -6,9 +6,11 @@ import "openzeppelin-contracts/contracts/interfaces/IERC20.sol";
|
||||
import {ISwapAdapter} from "src/interfaces/ISwapAdapter.sol";
|
||||
import "src/interfaces/ISwapAdapterTypes.sol";
|
||||
import "src/libraries/FractionMath.sol";
|
||||
import "src/libraries/EfficientERC20.sol";
|
||||
|
||||
contract AdapterTest is Test, ISwapAdapterTypes {
|
||||
using FractionMath for Fraction;
|
||||
using EfficientERC20 for IERC20;
|
||||
|
||||
uint256 constant pricePrecision = 10e24;
|
||||
string[] public stringPctgs = ["0%", "0.1%", "50%", "100%"];
|
||||
@@ -29,8 +31,8 @@ contract AdapterTest is Test, ISwapAdapterTypes {
|
||||
);
|
||||
for (uint256 i = 0; i < poolIds.length; i++) {
|
||||
address[] memory tokens = adapter.getTokens(poolIds[i]);
|
||||
IERC20(tokens[0]).approve(address(adapter), type(uint256).max);
|
||||
IERC20(tokens[1]).approve(address(adapter), type(uint256).max);
|
||||
IERC20(tokens[0]).forceApprove(address(adapter), type(uint256).max);
|
||||
IERC20(tokens[1]).forceApprove(address(adapter), type(uint256).max);
|
||||
|
||||
testPricesForPair(
|
||||
adapter, poolIds[i], tokens[0], tokens[1], hasPriceImpact
|
||||
@@ -68,6 +70,9 @@ contract AdapterTest is Test, ISwapAdapterTypes {
|
||||
);
|
||||
uint256[] memory amounts =
|
||||
calculateTestAmounts(sellLimit, hasMarginalPrices);
|
||||
|
||||
// TODO: What if the price function is not available? Do we still want
|
||||
// to run this test?
|
||||
Fraction[] memory prices =
|
||||
adapter.price(poolId, tokenIn, tokenOut, amounts);
|
||||
assertGt(
|
||||
|
||||
Reference in New Issue
Block a user