mirror of
https://github.com/luxfi/sudoamm.git
synced 2026-07-25 16:17:09 +00:00
router2 tests wip
This commit is contained in:
+3
-19
@@ -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 {}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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 {}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {}
|
||||
|
||||
@@ -4,4 +4,5 @@ RouterSinglePool,RSP
|
||||
PairAndFactory,PAF
|
||||
RouterMultiPool,RMP
|
||||
RouterSinglePoolWithAssetRecipient,RSPWAR
|
||||
RouterRobustSwapWithAssetRecipient,RRSWAR
|
||||
RouterRobustSwapWithAssetRecipient,RRSWAR
|
||||
RouterPartialFill,RPF
|
||||
|
Reference in New Issue
Block a user