router2 tests wip

This commit is contained in:
Owen
2022-08-26 23:29:15 -07:00
parent 1244c8798f
commit f82834a9de
73 changed files with 379 additions and 357 deletions
+3 -19
View File
@@ -8,12 +8,6 @@ import {LSSVMPair} from "./LSSVMPair.sol";
import {ILSSVMPairFactoryLike} from "./ILSSVMPairFactoryLike.sol";
import {CurveErrorCodes} from "./bonding-curves/CurveErrorCodes.sol";
/*
- add erc20 support
- add sell support (for tokens)
- add test cases
*/
contract LSSVMRouter2 {
using SafeTransferLib for address payable;
using SafeTransferLib for ERC20;
@@ -96,7 +90,7 @@ contract LSSVMRouter2 {
(, , , fullPrice, ) = pair.getSellNFTQuote(numNFTs);
}
prices[numNFTs - 1] = fullPrice;
for (uint256 i = 0; i < numNFTs; i++) {
for (uint256 i = 0; i < numNFTs - 1; i++) {
uint256 currentPrice;
if (isBuy) {
(, , , currentPrice, ) = pair.getBuyNFTQuote(numNFTs - i - 1);
@@ -108,18 +102,6 @@ contract LSSVMRouter2 {
return prices;
}
/**
TODO:
test cases:
Buys:
- everything to buy is fillable
- pricing is within budget (i.e. large slippage was used), but not all items exist in the pair
- pricing for some items are within budget, and all items exist in the pair
- pricing for some items are within budget, but not all items exist in the pair, but enough to fill the desired amt
- pricing for some items are within budget, but not all items exist in the pair, and less than the desired amt
- pricing for no items are within budget
*/
/**
@dev Performs a batch of buys and sells, avoids performing swaps where the price is beyond
maxCostPerNumNFTs is 0-indexed, i.e. maxCostPerNumNFTs[0] is the max price to buy 1 NFT, and so on
@@ -566,4 +548,6 @@ contract LSSVMRouter2 {
}
}
}
receive() external payable {}
}
+192
View File
@@ -0,0 +1,192 @@
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.0;
import {DSTest} from "ds-test/test.sol";
import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import {ICurve} from "../../bonding-curves/ICurve.sol";
import {LSSVMPairFactory} from "../../LSSVMPairFactory.sol";
import {LSSVMPair} from "../../LSSVMPair.sol";
import {LSSVMPairETH} from "../../LSSVMPairETH.sol";
import {LSSVMPairERC20} from "../../LSSVMPairERC20.sol";
import {LSSVMPairEnumerableETH} from "../../LSSVMPairEnumerableETH.sol";
import {LSSVMPairMissingEnumerableETH} from "../../LSSVMPairMissingEnumerableETH.sol";
import {LSSVMPairEnumerableERC20} from "../../LSSVMPairEnumerableERC20.sol";
import {LSSVMPairMissingEnumerableERC20} from "../../LSSVMPairMissingEnumerableERC20.sol";
import {LSSVMRouter2} from "../../LSSVMRouter2.sol";
import {LSSVMRouter} from "../../LSSVMRouter.sol";
import {IERC721Mintable} from "../interfaces/IERC721Mintable.sol";
import {Configurable} from "../mixins/Configurable.sol";
import {RouterCaller} from "../mixins/RouterCaller.sol";
/** Handles test cases where users try to buy multiple NFTs from a pool, but only get partially filled
> $ forge test --match-contract RPF* -vvvvv
*/
abstract contract RouterPartialFill is
DSTest,
ERC721Holder,
Configurable,
RouterCaller
{
IERC721Mintable test721;
ICurve bondingCurve;
LSSVMPairFactory factory;
LSSVMRouter2 router;
LSSVMPair pair;
address payable constant feeRecipient = payable(address(69));
uint256 constant protocolFeeMultiplier = 0;
uint256 numInitialNFTs = 10;
uint128 SPOT_PRICE;
function setUp() public {
bondingCurve = setupCurve();
test721 = setup721();
LSSVMPairEnumerableETH enumerableETHTemplate = new LSSVMPairEnumerableETH();
LSSVMPairMissingEnumerableETH missingEnumerableETHTemplate = new LSSVMPairMissingEnumerableETH();
LSSVMPairEnumerableERC20 enumerableERC20Template = new LSSVMPairEnumerableERC20();
LSSVMPairMissingEnumerableERC20 missingEnumerableERC20Template = new LSSVMPairMissingEnumerableERC20();
factory = new LSSVMPairFactory(
enumerableETHTemplate,
missingEnumerableETHTemplate,
enumerableERC20Template,
missingEnumerableERC20Template,
feeRecipient,
protocolFeeMultiplier
);
router = new LSSVMRouter2(factory);
factory.setBondingCurveAllowed(bondingCurve, true);
factory.setRouterAllowed(LSSVMRouter(payable(address(router))), true);
// set NFT approvals
test721.setApprovalForAll(address(factory), true);
test721.setApprovalForAll(address(router), true);
// mint NFT #1-10 to caller
for (uint256 i = 1; i <= numInitialNFTs; i++) {
test721.mint(address(this), i);
}
// create the pair
uint256[] memory empty = new uint256[](0);
(uint128 spotPrice, uint128 delta) = getParamsForPartialFillTest();
SPOT_PRICE = spotPrice;
pair = this.setupPair{value: 10 ether}(
factory,
test721,
bondingCurve,
payable(address(0)),
LSSVMPair.PoolType.TRADE,
delta,
0,
spotPrice,
empty,
10 ether,
address(router)
);
// mint NFTs #11-20 to the pair
for (uint256 i = numInitialNFTs + 1; i <= numInitialNFTs * 2; i++) {
test721.mint(address(pair), i);
}
}
function compareStrings(string memory a, string memory b)
public
pure
returns (bool)
{
return (keccak256(abi.encodePacked((a))) ==
keccak256(abi.encodePacked((b))));
}
/**
Test Properties:
- Is Buy vs Sell
If Buy:
- All items are present vs all items not present
- All items are within price target vs all items not in price target
Cases:
- All items present, all items within price target (normall fill)
- All items present, not all items within price target (normal partiall fill)
- Not all items present, all items within price target (restricted partial fill)
- Not all items present, not all items within price target (restricted-restricted partial fill)
- (Degenerate case): Whether or not all all items present, no items within price target (should skip)
If Sell:
- Enough ETH to cover all items vs not enough ETH to cover all items
- All items are within price target vs not all items in price target
Cases:
- Enough ETH, all items within price target (normall fill)
- Enough ETH, not all items within price target (normal partial fill)
- Not enough ETH, all items within price target (restricted partial fill)
- Not enough ETH, not all items within price target (restricted-restricted partial fill)
- (Degenerate cases): Not enough ETH to cover even selling one, or no items within price target (should skip)
*/
// The "base" case where no partial fill is needed, i.e. we buy all of the NFTs
function test_swapTokenForSpecificNFTsFullFill() public {
// Run all cases from 1 to 10
for (uint numNFTs = 1; numNFTs <= 10; numNFTs++) {
this.setUp();
uint256 NUM_NFTS = numNFTs;
uint256 startNFTBalance = test721.balanceOf(address(this));
// Only 1 entry
LSSVMRouter2.PairSwapSpecificPartialFill[]
memory buyList = new LSSVMRouter2.PairSwapSpecificPartialFill[](
1
);
uint256[] memory ids = new uint256[](NUM_NFTS);
// Get IDS to buy (#11 and onwards)
for (uint256 i = 1; i <= NUM_NFTS; i++) {
ids[i - 1] = 10 + i;
}
// Get partial fill prices
uint256[] memory partialFillPrices = router
.getNFTQuoteForPartialFill(pair, NUM_NFTS, true);
// Create the partial fill args
LSSVMRouter2.PairSwapSpecific memory swapInfo = LSSVMRouter2
.PairSwapSpecific({pair: pair, nftIds: ids});
buyList[0] = LSSVMRouter2.PairSwapSpecificPartialFill({
swapInfo: swapInfo,
expectedSpotPrice: SPOT_PRICE,
maxCostPerNumNFTs: partialFillPrices
});
// Create empty sell list
LSSVMRouter2.PairSwapSpecificPartialFillForToken[] memory emptySellList = new LSSVMRouter2.PairSwapSpecificPartialFillForToken[](0);
string memory UNIMPLEMENTED = "Unimplemented";
// See if last value of maxCost is the same as getBuyNFTQuote(NUM_NFTS)
(, , , uint256 correctQuote, ) = pair.getBuyNFTQuote(NUM_NFTS);
require(
correctQuote == partialFillPrices[NUM_NFTS - 1],
"Incorrect quote"
);
try
this.buyAndSellWithPartialFill{
value: partialFillPrices[NUM_NFTS - 1]
}(router, buyList, emptySellList)
{
uint256 endNFTBalance = test721.balanceOf(address(this));
require(
(endNFTBalance - startNFTBalance) == NUM_NFTS,
"Too few NFTs acquired"
);
} catch Error(string memory reason) {
if (this.compareStrings(reason, UNIMPLEMENTED)) {
return;
}
}
}
}
// All the other cases
}
+5
View File
@@ -43,5 +43,10 @@ abstract contract Configurable {
function withdrawProtocolFees(LSSVMPairFactory factory) public virtual;
function getParamsForPartialFillTest()
public
virtual
returns (uint128 spotPrice, uint128 delta);
receive() external payable {}
}
+7
View File
@@ -2,6 +2,7 @@
pragma solidity ^0.8.0;
import {LSSVMRouter} from "../../LSSVMRouter.sol";
import {LSSVMRouter2} from "../../LSSVMRouter2.sol";
abstract contract RouterCaller {
function swapTokenForAnyNFTs(
@@ -64,4 +65,10 @@ abstract contract RouterCaller {
LSSVMRouter router,
LSSVMRouter.RobustPairNFTsFoTokenAndTokenforNFTsTrade calldata params
) public payable virtual returns (uint256, uint256);
function buyAndSellWithPartialFill(
LSSVMRouter2 router,
LSSVMRouter2.PairSwapSpecificPartialFill[] calldata buyList,
LSSVMRouter2.PairSwapSpecificPartialFillForToken[] calldata sellList
) public payable virtual;
}
+9
View File
@@ -10,6 +10,7 @@ import {NoArbBondingCurve} from "../base/NoArbBondingCurve.sol";
import {LSSVMPair} from "../../LSSVMPair.sol";
import {LSSVMPairERC20} from "../../LSSVMPairERC20.sol";
import {LSSVMRouter} from "../../LSSVMRouter.sol";
import {LSSVMRouter2} from "../../LSSVMRouter2.sol";
import {Test20} from "../../mocks/Test20.sol";
import {IMintable} from "../interfaces/IMintable.sol";
import {LSSVMPairFactory} from "../../LSSVMPairFactory.sol";
@@ -204,4 +205,12 @@ abstract contract UsingERC20 is Configurable, RouterCaller {
) public payable override returns (uint256, uint256) {
return router.robustSwapERC20ForSpecificNFTsAndNFTsToToken(params);
}
function buyAndSellWithPartialFill(
LSSVMRouter2 router,
LSSVMRouter2.PairSwapSpecificPartialFill[] calldata buyList,
LSSVMRouter2.PairSwapSpecificPartialFillForToken[] calldata sellList
) public payable override {
require(false, "Unimplemented");
}
}
+15 -1
View File
@@ -6,6 +6,7 @@ import {ICurve} from "../../bonding-curves/ICurve.sol";
import {LSSVMPair} from "../../LSSVMPair.sol";
import {LSSVMPairFactory} from "../../LSSVMPairFactory.sol";
import {LSSVMRouter} from "../../LSSVMRouter.sol";
import {LSSVMRouter2} from "../../LSSVMRouter2.sol";
import {LSSVMPairETH} from "../../LSSVMPairETH.sol";
import {Configurable} from "./Configurable.sol";
import {RouterCaller} from "./RouterCaller.sol";
@@ -172,6 +173,19 @@ abstract contract UsingETH is Configurable, RouterCaller {
LSSVMRouter router,
LSSVMRouter.RobustPairNFTsFoTokenAndTokenforNFTsTrade calldata params
) public payable override returns (uint256, uint256) {
return router.robustSwapETHForSpecificNFTsAndNFTsToToken{value: msg.value}(params);
return
router.robustSwapETHForSpecificNFTsAndNFTsToToken{value: msg.value}(
params
);
}
function buyAndSellWithPartialFill(
LSSVMRouter2 router,
LSSVMRouter2.PairSwapSpecificPartialFill[] calldata buyList,
LSSVMRouter2.PairSwapSpecificPartialFillForToken[] calldata sellList
) public payable override {
return router.robustBuySellWithETHAndPartialFill{value: msg.value}(
buyList, sellList
);
}
}
@@ -33,4 +33,9 @@ abstract contract UsingExponentialCurve is Configurable {
return spotPrice;
}
}
// Return 1 eth as spot price and 10% as the delta scaling
function getParamsForPartialFillTest() public pure override returns (uint128 spotPrice, uint128 delta) {
return (10**18, 11**18);
}
}
+5
View File
@@ -25,4 +25,9 @@ abstract contract UsingLinearCurve is Configurable {
{
return spotPrice;
}
// Return 1 eth as spot price and 0.1 eth as the delta scaling
function getParamsForPartialFillTest() public pure override returns (uint128 spotPrice, uint128 delta) {
return (10**18, 10**17);
}
}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract NoArbExponentialCurveEnumerableERC20Test is
NoArbBondingCurve,
UsingExponentialCurve,
UsingEnumerable,
UsingERC20
{}
contract NoArbExponentialCurveEnumerableERC20Test is NoArbBondingCurve, UsingExponentialCurve, UsingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract NoArbExponentialCurveEnumerableETHTest is
NoArbBondingCurve,
UsingExponentialCurve,
UsingEnumerable,
UsingETH
{}
contract NoArbExponentialCurveEnumerableETHTest is NoArbBondingCurve, UsingExponentialCurve, UsingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract NoArbExponentialCurveMissingEnumerableERC20Test is
NoArbBondingCurve,
UsingExponentialCurve,
UsingMissingEnumerable,
UsingERC20
{}
contract NoArbExponentialCurveMissingEnumerableERC20Test is NoArbBondingCurve, UsingExponentialCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract NoArbExponentialCurveMissingEnumerableETHTest is
NoArbBondingCurve,
UsingExponentialCurve,
UsingMissingEnumerable,
UsingETH
{}
contract NoArbExponentialCurveMissingEnumerableETHTest is NoArbBondingCurve, UsingExponentialCurve, UsingMissingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract NoArbLinearCurveEnumerableERC20Test is
NoArbBondingCurve,
UsingLinearCurve,
UsingEnumerable,
UsingERC20
{}
contract NoArbLinearCurveEnumerableERC20Test is NoArbBondingCurve, UsingLinearCurve, UsingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract NoArbLinearCurveEnumerableETHTest is
NoArbBondingCurve,
UsingLinearCurve,
UsingEnumerable,
UsingETH
{}
contract NoArbLinearCurveEnumerableETHTest is NoArbBondingCurve, UsingLinearCurve, UsingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract NoArbLinearCurveMissingEnumerableERC20Test is
NoArbBondingCurve,
UsingLinearCurve,
UsingMissingEnumerable,
UsingERC20
{}
contract NoArbLinearCurveMissingEnumerableERC20Test is NoArbBondingCurve, UsingLinearCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract NoArbLinearCurveMissingEnumerableETHTest is
NoArbBondingCurve,
UsingLinearCurve,
UsingMissingEnumerable,
UsingETH
{}
contract NoArbLinearCurveMissingEnumerableETHTest is NoArbBondingCurve, UsingLinearCurve, UsingMissingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract PAFExponentialCurveEnumerableERC20Test is
PairAndFactory,
UsingExponentialCurve,
UsingEnumerable,
UsingERC20
{}
contract PAFExponentialCurveEnumerableERC20Test is PairAndFactory, UsingExponentialCurve, UsingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract PAFExponentialCurveEnumerableETHTest is
PairAndFactory,
UsingExponentialCurve,
UsingEnumerable,
UsingETH
{}
contract PAFExponentialCurveEnumerableETHTest is PairAndFactory, UsingExponentialCurve, UsingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract PAFExponentialCurveMissingEnumerableERC20Test is
PairAndFactory,
UsingExponentialCurve,
UsingMissingEnumerable,
UsingERC20
{}
contract PAFExponentialCurveMissingEnumerableERC20Test is PairAndFactory, UsingExponentialCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract PAFExponentialCurveMissingEnumerableETHTest is
PairAndFactory,
UsingExponentialCurve,
UsingMissingEnumerable,
UsingETH
{}
contract PAFExponentialCurveMissingEnumerableETHTest is PairAndFactory, UsingExponentialCurve, UsingMissingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract PAFLinearCurveEnumerableERC20Test is
PairAndFactory,
UsingLinearCurve,
UsingEnumerable,
UsingERC20
{}
contract PAFLinearCurveEnumerableERC20Test is PairAndFactory, UsingLinearCurve, UsingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract PAFLinearCurveEnumerableETHTest is
PairAndFactory,
UsingLinearCurve,
UsingEnumerable,
UsingETH
{}
contract PAFLinearCurveEnumerableETHTest is PairAndFactory, UsingLinearCurve, UsingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract PAFLinearCurveMissingEnumerableERC20Test is
PairAndFactory,
UsingLinearCurve,
UsingMissingEnumerable,
UsingERC20
{}
contract PAFLinearCurveMissingEnumerableERC20Test is PairAndFactory, UsingLinearCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract PAFLinearCurveMissingEnumerableETHTest is
PairAndFactory,
UsingLinearCurve,
UsingMissingEnumerable,
UsingETH
{}
contract PAFLinearCurveMissingEnumerableETHTest is PairAndFactory, UsingLinearCurve, UsingMissingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RMPExponentialCurveEnumerableERC20Test is
RouterMultiPool,
UsingExponentialCurve,
UsingEnumerable,
UsingERC20
{}
contract RMPExponentialCurveEnumerableERC20Test is RouterMultiPool, UsingExponentialCurve, UsingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RMPExponentialCurveEnumerableETHTest is
RouterMultiPool,
UsingExponentialCurve,
UsingEnumerable,
UsingETH
{}
contract RMPExponentialCurveEnumerableETHTest is RouterMultiPool, UsingExponentialCurve, UsingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RMPExponentialCurveMissingEnumerableERC20Test is
RouterMultiPool,
UsingExponentialCurve,
UsingMissingEnumerable,
UsingERC20
{}
contract RMPExponentialCurveMissingEnumerableERC20Test is RouterMultiPool, UsingExponentialCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RMPExponentialCurveMissingEnumerableETHTest is
RouterMultiPool,
UsingExponentialCurve,
UsingMissingEnumerable,
UsingETH
{}
contract RMPExponentialCurveMissingEnumerableETHTest is RouterMultiPool, UsingExponentialCurve, UsingMissingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RMPLinearCurveEnumerableERC20Test is
RouterMultiPool,
UsingLinearCurve,
UsingEnumerable,
UsingERC20
{}
contract RMPLinearCurveEnumerableERC20Test is RouterMultiPool, UsingLinearCurve, UsingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RMPLinearCurveEnumerableETHTest is
RouterMultiPool,
UsingLinearCurve,
UsingEnumerable,
UsingETH
{}
contract RMPLinearCurveEnumerableETHTest is RouterMultiPool, UsingLinearCurve, UsingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RMPLinearCurveMissingEnumerableERC20Test is
RouterMultiPool,
UsingLinearCurve,
UsingMissingEnumerable,
UsingERC20
{}
contract RMPLinearCurveMissingEnumerableERC20Test is RouterMultiPool, UsingLinearCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RMPLinearCurveMissingEnumerableETHTest is
RouterMultiPool,
UsingLinearCurve,
UsingMissingEnumerable,
UsingETH
{}
contract RMPLinearCurveMissingEnumerableETHTest is RouterMultiPool, UsingLinearCurve, UsingMissingEnumerable, UsingETH {}
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {RouterPartialFill} from "../base/RouterPartialFill.sol";
import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RPFExponentialCurveEnumerableERC20Test is RouterPartialFill, UsingExponentialCurve, UsingEnumerable, UsingERC20 {}
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {RouterPartialFill} from "../base/RouterPartialFill.sol";
import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RPFExponentialCurveEnumerableETHTest is RouterPartialFill, UsingExponentialCurve, UsingEnumerable, UsingETH {}
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {RouterPartialFill} from "../base/RouterPartialFill.sol";
import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RPFExponentialCurveMissingEnumerableERC20Test is RouterPartialFill, UsingExponentialCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {RouterPartialFill} from "../base/RouterPartialFill.sol";
import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RPFExponentialCurveMissingEnumerableETHTest is RouterPartialFill, UsingExponentialCurve, UsingMissingEnumerable, UsingETH {}
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {RouterPartialFill} from "../base/RouterPartialFill.sol";
import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RPFLinearCurveEnumerableERC20Test is RouterPartialFill, UsingLinearCurve, UsingEnumerable, UsingERC20 {}
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {RouterPartialFill} from "../base/RouterPartialFill.sol";
import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RPFLinearCurveEnumerableETHTest is RouterPartialFill, UsingLinearCurve, UsingEnumerable, UsingETH {}
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {RouterPartialFill} from "../base/RouterPartialFill.sol";
import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RPFLinearCurveMissingEnumerableERC20Test is RouterPartialFill, UsingLinearCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {RouterPartialFill} from "../base/RouterPartialFill.sol";
import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RPFLinearCurveMissingEnumerableETHTest is RouterPartialFill, UsingLinearCurve, UsingMissingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RRSExponentialCurveEnumerableERC20Test is
RouterRobustSwap,
UsingExponentialCurve,
UsingEnumerable,
UsingERC20
{}
contract RRSExponentialCurveEnumerableERC20Test is RouterRobustSwap, UsingExponentialCurve, UsingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RRSExponentialCurveEnumerableETHTest is
RouterRobustSwap,
UsingExponentialCurve,
UsingEnumerable,
UsingETH
{}
contract RRSExponentialCurveEnumerableETHTest is RouterRobustSwap, UsingExponentialCurve, UsingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RRSExponentialCurveMissingEnumerableERC20Test is
RouterRobustSwap,
UsingExponentialCurve,
UsingMissingEnumerable,
UsingERC20
{}
contract RRSExponentialCurveMissingEnumerableERC20Test is RouterRobustSwap, UsingExponentialCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RRSExponentialCurveMissingEnumerableETHTest is
RouterRobustSwap,
UsingExponentialCurve,
UsingMissingEnumerable,
UsingETH
{}
contract RRSExponentialCurveMissingEnumerableETHTest is RouterRobustSwap, UsingExponentialCurve, UsingMissingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RRSLinearCurveEnumerableERC20Test is
RouterRobustSwap,
UsingLinearCurve,
UsingEnumerable,
UsingERC20
{}
contract RRSLinearCurveEnumerableERC20Test is RouterRobustSwap, UsingLinearCurve, UsingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RRSLinearCurveEnumerableETHTest is
RouterRobustSwap,
UsingLinearCurve,
UsingEnumerable,
UsingETH
{}
contract RRSLinearCurveEnumerableETHTest is RouterRobustSwap, UsingLinearCurve, UsingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RRSLinearCurveMissingEnumerableERC20Test is
RouterRobustSwap,
UsingLinearCurve,
UsingMissingEnumerable,
UsingERC20
{}
contract RRSLinearCurveMissingEnumerableERC20Test is RouterRobustSwap, UsingLinearCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RRSLinearCurveMissingEnumerableETHTest is
RouterRobustSwap,
UsingLinearCurve,
UsingMissingEnumerable,
UsingETH
{}
contract RRSLinearCurveMissingEnumerableETHTest is RouterRobustSwap, UsingLinearCurve, UsingMissingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RRSWARExponentialCurveEnumerableERC20Test is
RouterRobustSwapWithAssetRecipient,
UsingExponentialCurve,
UsingEnumerable,
UsingERC20
{}
contract RRSWARExponentialCurveEnumerableERC20Test is RouterRobustSwapWithAssetRecipient, UsingExponentialCurve, UsingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RRSWARExponentialCurveEnumerableETHTest is
RouterRobustSwapWithAssetRecipient,
UsingExponentialCurve,
UsingEnumerable,
UsingETH
{}
contract RRSWARExponentialCurveEnumerableETHTest is RouterRobustSwapWithAssetRecipient, UsingExponentialCurve, UsingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RRSWARExponentialCurveMissingEnumerableERC20Test is
RouterRobustSwapWithAssetRecipient,
UsingExponentialCurve,
UsingMissingEnumerable,
UsingERC20
{}
contract RRSWARExponentialCurveMissingEnumerableERC20Test is RouterRobustSwapWithAssetRecipient, UsingExponentialCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RRSWARExponentialCurveMissingEnumerableETHTest is
RouterRobustSwapWithAssetRecipient,
UsingExponentialCurve,
UsingMissingEnumerable,
UsingETH
{}
contract RRSWARExponentialCurveMissingEnumerableETHTest is RouterRobustSwapWithAssetRecipient, UsingExponentialCurve, UsingMissingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RRSWARLinearCurveEnumerableERC20Test is
RouterRobustSwapWithAssetRecipient,
UsingLinearCurve,
UsingEnumerable,
UsingERC20
{}
contract RRSWARLinearCurveEnumerableERC20Test is RouterRobustSwapWithAssetRecipient, UsingLinearCurve, UsingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RRSWARLinearCurveEnumerableETHTest is
RouterRobustSwapWithAssetRecipient,
UsingLinearCurve,
UsingEnumerable,
UsingETH
{}
contract RRSWARLinearCurveEnumerableETHTest is RouterRobustSwapWithAssetRecipient, UsingLinearCurve, UsingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RRSWARLinearCurveMissingEnumerableERC20Test is
RouterRobustSwapWithAssetRecipient,
UsingLinearCurve,
UsingMissingEnumerable,
UsingERC20
{}
contract RRSWARLinearCurveMissingEnumerableERC20Test is RouterRobustSwapWithAssetRecipient, UsingLinearCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RRSWARLinearCurveMissingEnumerableETHTest is
RouterRobustSwapWithAssetRecipient,
UsingLinearCurve,
UsingMissingEnumerable,
UsingETH
{}
contract RRSWARLinearCurveMissingEnumerableETHTest is RouterRobustSwapWithAssetRecipient, UsingLinearCurve, UsingMissingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RSPExponentialCurveEnumerableERC20Test is
RouterSinglePool,
UsingExponentialCurve,
UsingEnumerable,
UsingERC20
{}
contract RSPExponentialCurveEnumerableERC20Test is RouterSinglePool, UsingExponentialCurve, UsingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RSPExponentialCurveEnumerableETHTest is
RouterSinglePool,
UsingExponentialCurve,
UsingEnumerable,
UsingETH
{}
contract RSPExponentialCurveEnumerableETHTest is RouterSinglePool, UsingExponentialCurve, UsingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RSPExponentialCurveMissingEnumerableERC20Test is
RouterSinglePool,
UsingExponentialCurve,
UsingMissingEnumerable,
UsingERC20
{}
contract RSPExponentialCurveMissingEnumerableERC20Test is RouterSinglePool, UsingExponentialCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RSPExponentialCurveMissingEnumerableETHTest is
RouterSinglePool,
UsingExponentialCurve,
UsingMissingEnumerable,
UsingETH
{}
contract RSPExponentialCurveMissingEnumerableETHTest is RouterSinglePool, UsingExponentialCurve, UsingMissingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RSPLinearCurveEnumerableERC20Test is
RouterSinglePool,
UsingLinearCurve,
UsingEnumerable,
UsingERC20
{}
contract RSPLinearCurveEnumerableERC20Test is RouterSinglePool, UsingLinearCurve, UsingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RSPLinearCurveEnumerableETHTest is
RouterSinglePool,
UsingLinearCurve,
UsingEnumerable,
UsingETH
{}
contract RSPLinearCurveEnumerableETHTest is RouterSinglePool, UsingLinearCurve, UsingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RSPLinearCurveMissingEnumerableERC20Test is
RouterSinglePool,
UsingLinearCurve,
UsingMissingEnumerable,
UsingERC20
{}
contract RSPLinearCurveMissingEnumerableERC20Test is RouterSinglePool, UsingLinearCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RSPLinearCurveMissingEnumerableETHTest is
RouterSinglePool,
UsingLinearCurve,
UsingMissingEnumerable,
UsingETH
{}
contract RSPLinearCurveMissingEnumerableETHTest is RouterSinglePool, UsingLinearCurve, UsingMissingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RSPWARExponentialCurveEnumerableERC20Test is
RouterSinglePoolWithAssetRecipient,
UsingExponentialCurve,
UsingEnumerable,
UsingERC20
{}
contract RSPWARExponentialCurveEnumerableERC20Test is RouterSinglePoolWithAssetRecipient, UsingExponentialCurve, UsingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RSPWARExponentialCurveEnumerableETHTest is
RouterSinglePoolWithAssetRecipient,
UsingExponentialCurve,
UsingEnumerable,
UsingETH
{}
contract RSPWARExponentialCurveEnumerableETHTest is RouterSinglePoolWithAssetRecipient, UsingExponentialCurve, UsingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RSPWARExponentialCurveMissingEnumerableERC20Test is
RouterSinglePoolWithAssetRecipient,
UsingExponentialCurve,
UsingMissingEnumerable,
UsingERC20
{}
contract RSPWARExponentialCurveMissingEnumerableERC20Test is RouterSinglePoolWithAssetRecipient, UsingExponentialCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingExponentialCurve} from "../mixins/UsingExponentialCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RSPWARExponentialCurveMissingEnumerableETHTest is
RouterSinglePoolWithAssetRecipient,
UsingExponentialCurve,
UsingMissingEnumerable,
UsingETH
{}
contract RSPWARExponentialCurveMissingEnumerableETHTest is RouterSinglePoolWithAssetRecipient, UsingExponentialCurve, UsingMissingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RSPWARLinearCurveEnumerableERC20Test is
RouterSinglePoolWithAssetRecipient,
UsingLinearCurve,
UsingEnumerable,
UsingERC20
{}
contract RSPWARLinearCurveEnumerableERC20Test is RouterSinglePoolWithAssetRecipient, UsingLinearCurve, UsingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingEnumerable} from "../mixins/UsingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RSPWARLinearCurveEnumerableETHTest is
RouterSinglePoolWithAssetRecipient,
UsingLinearCurve,
UsingEnumerable,
UsingETH
{}
contract RSPWARLinearCurveEnumerableETHTest is RouterSinglePoolWithAssetRecipient, UsingLinearCurve, UsingEnumerable, UsingETH {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingERC20} from "../mixins/UsingERC20.sol";
contract RSPWARLinearCurveMissingEnumerableERC20Test is
RouterSinglePoolWithAssetRecipient,
UsingLinearCurve,
UsingMissingEnumerable,
UsingERC20
{}
contract RSPWARLinearCurveMissingEnumerableERC20Test is RouterSinglePoolWithAssetRecipient, UsingLinearCurve, UsingMissingEnumerable, UsingERC20 {}
@@ -7,9 +7,4 @@ import {UsingLinearCurve} from "../mixins/UsingLinearCurve.sol";
import {UsingMissingEnumerable} from "../mixins/UsingMissingEnumerable.sol";
import {UsingETH} from "../mixins/UsingETH.sol";
contract RSPWARLinearCurveMissingEnumerableETHTest is
RouterSinglePoolWithAssetRecipient,
UsingLinearCurve,
UsingMissingEnumerable,
UsingETH
{}
contract RSPWARLinearCurveMissingEnumerableETHTest is RouterSinglePoolWithAssetRecipient, UsingLinearCurve, UsingMissingEnumerable, UsingETH {}
+2 -1
View File
@@ -4,4 +4,5 @@ RouterSinglePool,RSP
PairAndFactory,PAF
RouterMultiPool,RMP
RouterSinglePoolWithAssetRecipient,RSPWAR
RouterRobustSwapWithAssetRecipient,RRSWAR
RouterRobustSwapWithAssetRecipient,RRSWAR
RouterPartialFill,RPF
1 NoArbBondingCurve NoArb
4 PairAndFactory PAF
5 RouterMultiPool RMP
6 RouterSinglePoolWithAssetRecipient RSPWAR
7 RouterRobustSwapWithAssetRecipient RRSWAR
8 RouterPartialFill RPF