Compare commits

...

1 Commits

Author SHA1 Message Date
Romain Butteaud
f3b3ab05ea WIP Clipper new weth router test 2021-09-23 11:41:49 -07:00
2 changed files with 72 additions and 85 deletions

View File

@@ -326,6 +326,7 @@ const MIRROR_WRAPPED_TOKENS = {
// Mainnet tokens // Mainnet tokens
// Not an exhaustive list, just enough so we don't repeat ourselves // Not an exhaustive list, just enough so we don't repeat ourselves
export const MAINNET_TOKENS = { export const MAINNET_TOKENS = {
ETH: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',
WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
// Stable Coins // Stable Coins
DAI: '0x6b175474e89094c44da98b954eedeac495271d0f', DAI: '0x6b175474e89094c44da98b954eedeac495271d0f',
@@ -1205,20 +1206,32 @@ export const KYBER_CONFIG_BY_CHAIN_ID = valueByChainId<KyberSamplerOpts>(
export const LIQUIDITY_PROVIDER_REGISTRY_BY_CHAIN_ID = valueByChainId<LiquidityProviderRegistry>( export const LIQUIDITY_PROVIDER_REGISTRY_BY_CHAIN_ID = valueByChainId<LiquidityProviderRegistry>(
{ {
[ChainId.Mainnet]: { [ChainId.Mainnet]: {
['0x1d0d407c5af8c86f0a6494de86e56ae21e46a951']: { // ['0x1d0d407c5af8c86f0a6494de86e56ae21e46a951']: {
// tokens: [
// MAINNET_TOKENS.WETH,
// MAINNET_TOKENS.USDC,
// MAINNET_TOKENS.USDT,
// MAINNET_TOKENS.WBTC,
// MAINNET_TOKENS.PAX,
// MAINNET_TOKENS.LINK,
// MAINNET_TOKENS.KNC,
// MAINNET_TOKENS.MANA,
// MAINNET_TOKENS.DAI,
// MAINNET_TOKENS.BUSD,
// MAINNET_TOKENS.AAVE,
// MAINNET_TOKENS.HT,
// ],
// gasCost: (takerToken: string, makerToken: string) =>
// [takerToken, makerToken].includes(MAINNET_TOKENS.WETH) ? 160e3 : 280e3,
// },
['0xe82906b6b1b04f631d126c974af57a3a7b6a99d9']: {
tokens: [ tokens: [
MAINNET_TOKENS.WETH, // MAINNET_TOKENS.WETH, // technically ETH but our sampler and mixin handle this
MAINNET_TOKENS.ETH,
MAINNET_TOKENS.WBTC,
MAINNET_TOKENS.USDC, MAINNET_TOKENS.USDC,
MAINNET_TOKENS.USDT, MAINNET_TOKENS.USDT,
MAINNET_TOKENS.WBTC,
MAINNET_TOKENS.PAX,
MAINNET_TOKENS.LINK,
MAINNET_TOKENS.KNC,
MAINNET_TOKENS.MANA,
MAINNET_TOKENS.DAI, MAINNET_TOKENS.DAI,
MAINNET_TOKENS.BUSD,
MAINNET_TOKENS.AAVE,
MAINNET_TOKENS.HT,
], ],
gasCost: (takerToken: string, makerToken: string) => gasCost: (takerToken: string, makerToken: string) =>
[takerToken, makerToken].includes(MAINNET_TOKENS.WETH) ? 160e3 : 280e3, [takerToken, makerToken].includes(MAINNET_TOKENS.WETH) ? 160e3 : 280e3,

View File

@@ -364,7 +364,7 @@ export class SamplerOperations {
return new SamplerContractOperation({ return new SamplerContractOperation({
source, source,
fillData: { fillData: {
poolAddress: providerAddress, poolAddress: '0xe3a207e4225d459095491ea75d30b31968dff887',
gasCost, gasCost,
}, },
contract: this._samplerContract, contract: this._samplerContract,
@@ -1258,18 +1258,29 @@ export class SamplerOperations {
this.getShellSellQuotes(pool, makerToken, takerToken, takerFillAmounts, source), this.getShellSellQuotes(pool, makerToken, takerToken, takerFillAmounts, source),
); );
case ERC20BridgeSource.LiquidityProvider: case ERC20BridgeSource.LiquidityProvider:
return getLiquidityProvidersForPair( const { poolAddress: clipperPoolAddress, tokens: clipperTokens } = CLIPPER_INFO_BY_CHAIN[
this.liquidityProviderRegistry, this.chainId
takerToken, ];
makerToken, if (
).map(({ providerAddress, gasCost }) => clipperPoolAddress === NULL_ADDRESS ||
this.getLiquidityProviderSellQuotes( !clipperTokens.includes(makerToken) ||
providerAddress, !clipperTokens.includes(takerToken)
makerToken, ) {
takerToken, return [];
takerFillAmounts, }
gasCost, // Clipper requires WETH to be represented as address(0)
), const adjustedMakerToken =
makerToken === NATIVE_FEE_TOKEN_BY_CHAIN_ID[this.chainId] ? NULL_ADDRESS : makerToken;
const adjustedTakerToken =
takerToken === NATIVE_FEE_TOKEN_BY_CHAIN_ID[this.chainId] ? NULL_ADDRESS : takerToken;
// Supports the PLP interface
return this.getLiquidityProviderSellQuotes(
clipperPoolAddress,
adjustedMakerToken,
adjustedTakerToken,
takerFillAmounts,
// tslint:disable-next-line: custom-no-magic-numbers
0, // Not used for Clipper
); );
case ERC20BridgeSource.MStable: case ERC20BridgeSource.MStable:
return getShellLikeInfosForPair(this.chainId, takerToken, makerToken, source).map(pool => return getShellLikeInfosForPair(this.chainId, takerToken, makerToken, source).map(pool =>
@@ -1417,31 +1428,7 @@ export class SamplerOperations {
return this.getLidoSellQuotes(lidoInfo, makerToken, takerToken, takerFillAmounts); return this.getLidoSellQuotes(lidoInfo, makerToken, takerToken, takerFillAmounts);
} }
case ERC20BridgeSource.Clipper: case ERC20BridgeSource.Clipper:
const { poolAddress: clipperPoolAddress, tokens: clipperTokens } = CLIPPER_INFO_BY_CHAIN[ return [];
this.chainId
];
if (
clipperPoolAddress === NULL_ADDRESS ||
!clipperTokens.includes(makerToken) ||
!clipperTokens.includes(takerToken)
) {
return [];
}
// Clipper requires WETH to be represented as address(0)
const adjustedMakerToken =
makerToken === NATIVE_FEE_TOKEN_BY_CHAIN_ID[this.chainId] ? NULL_ADDRESS : makerToken;
const adjustedTakerToken =
takerToken === NATIVE_FEE_TOKEN_BY_CHAIN_ID[this.chainId] ? NULL_ADDRESS : takerToken;
// Supports the PLP interface
return this.getLiquidityProviderSellQuotes(
clipperPoolAddress,
adjustedMakerToken,
adjustedTakerToken,
takerFillAmounts,
// tslint:disable-next-line: custom-no-magic-numbers
0, // Not used for Clipper
ERC20BridgeSource.Clipper,
);
default: default:
throw new Error(`Unsupported sell sample source: ${source}`); throw new Error(`Unsupported sell sample source: ${source}`);
} }
@@ -1553,18 +1540,29 @@ export class SamplerOperations {
this.getShellBuyQuotes(pool, makerToken, takerToken, makerFillAmounts, source), this.getShellBuyQuotes(pool, makerToken, takerToken, makerFillAmounts, source),
); );
case ERC20BridgeSource.LiquidityProvider: case ERC20BridgeSource.LiquidityProvider:
return getLiquidityProvidersForPair( const { poolAddress: clipperPoolAddress, tokens: clipperTokens } = CLIPPER_INFO_BY_CHAIN[
this.liquidityProviderRegistry, this.chainId
takerToken, ];
makerToken, if (
).map(({ providerAddress, gasCost }) => clipperPoolAddress === NULL_ADDRESS ||
this.getLiquidityProviderBuyQuotes( !clipperTokens.includes(makerToken) ||
providerAddress, !clipperTokens.includes(takerToken)
makerToken, ) {
takerToken, return [];
makerFillAmounts, }
gasCost, // Clipper requires WETH to be represented as address(0)
), const adjustedMakerToken =
makerToken === NATIVE_FEE_TOKEN_BY_CHAIN_ID[this.chainId] ? NULL_ADDRESS : makerToken;
const adjustedTakerToken =
takerToken === NATIVE_FEE_TOKEN_BY_CHAIN_ID[this.chainId] ? NULL_ADDRESS : takerToken;
// Supports the PLP interface
return this.getLiquidityProviderBuyQuotes(
clipperPoolAddress,
adjustedMakerToken,
adjustedTakerToken,
makerFillAmounts,
// tslint:disable-next-line: custom-no-magic-numbers
0, // Not used for Clipper
); );
case ERC20BridgeSource.MStable: case ERC20BridgeSource.MStable:
return getShellLikeInfosForPair(this.chainId, takerToken, makerToken, source).map(pool => return getShellLikeInfosForPair(this.chainId, takerToken, makerToken, source).map(pool =>
@@ -1707,31 +1705,7 @@ export class SamplerOperations {
return this.getLidoBuyQuotes(lidoInfo, makerToken, takerToken, makerFillAmounts); return this.getLidoBuyQuotes(lidoInfo, makerToken, takerToken, makerFillAmounts);
} }
case ERC20BridgeSource.Clipper: case ERC20BridgeSource.Clipper:
const { poolAddress: clipperPoolAddress, tokens: clipperTokens } = CLIPPER_INFO_BY_CHAIN[ return [];
this.chainId
];
if (
clipperPoolAddress === NULL_ADDRESS ||
!clipperTokens.includes(makerToken) ||
!clipperTokens.includes(takerToken)
) {
return [];
}
// Clipper requires WETH to be represented as address(0)
const adjustedMakerToken =
makerToken === NATIVE_FEE_TOKEN_BY_CHAIN_ID[this.chainId] ? NULL_ADDRESS : makerToken;
const adjustedTakerToken =
takerToken === NATIVE_FEE_TOKEN_BY_CHAIN_ID[this.chainId] ? NULL_ADDRESS : takerToken;
// Supports the PLP interface
return this.getLiquidityProviderBuyQuotes(
clipperPoolAddress,
adjustedMakerToken,
adjustedTakerToken,
makerFillAmounts,
// tslint:disable-next-line: custom-no-magic-numbers
0, // Not used for Clipper
ERC20BridgeSource.Clipper,
);
default: default:
throw new Error(`Unsupported buy sample source: ${source}`); throw new Error(`Unsupported buy sample source: ${source}`);
} }