Skip to content

Commit

Permalink
fix: multiples fixes generic-rfq
Browse files Browse the repository at this point in the history
Resolves BACK-760.
  • Loading branch information
Louis-Amas committed Nov 22, 2022
1 parent 0aff140 commit 1346e0a
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 55 deletions.
2 changes: 1 addition & 1 deletion src/dex-helper/dummy-dex-helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ class DummyCache implements ICache {
): void {}
}

class DummyRequestWrapper implements IRequestWrapper {
export class DummyRequestWrapper implements IRequestWrapper {
async get(
url: string,
timeout?: number,
Expand Down
61 changes: 32 additions & 29 deletions src/dex/generic-rfq/example-api.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
TokenWithInfo,
TokensResponse,
PairsResponse,
RatesResponse,
} from './types';
import { reversePrice } from './rate-fetcher';

Expand Down Expand Up @@ -59,24 +60,26 @@ const addressToTokenMap = Object.keys(tokens.tokens).reduce((acc, key) => {
return acc;
}, {} as Record<string, TokenWithInfo>);

const prices: Record<string, PairPriceResponse> = {
'WETH/DAI': {
bids: [
['1333.425240000000000000', '1.166200000000000000'],
['1333.024812000000000000', '1.166200000000000000'],
['1332.624384000000000000', '1.166200000000000000'],
['1332.223956000000000000', '1.166200000000000000'],
['1331.823528000000000000', '1.166200000000000000'],
['1331.423100000000000000', '1.169000000000000000'],
],
asks: [
['1336.745410000000000000', '1.166200000000000000'],
['1337.146033000000000000', '1.166200000000000000'],
['1337.546656000000000000', '1.166200000000000000'],
['1337.947279000000000000', '1.166200000000000000'],
['1338.347902000000000000', '1.166200000000000000'],
['1338.748525000000000000', '1.169000000000000000'],
],
const prices: RatesResponse = {
prices: {
'WETH/DAI': {
bids: [
['1333.425240000000000000', '1.166200000000000000'],
['1333.024812000000000000', '1.166200000000000000'],
['1332.624384000000000000', '1.166200000000000000'],
['1332.223956000000000000', '1.166200000000000000'],
['1331.823528000000000000', '1.166200000000000000'],
['1331.423100000000000000', '1.169000000000000000'],
],
asks: [
['1336.745410000000000000', '1.166200000000000000'],
['1337.146033000000000000', '1.166200000000000000'],
['1337.546656000000000000', '1.166200000000000000'],
['1337.947279000000000000', '1.166200000000000000'],
['1338.347902000000000000', '1.166200000000000000'],
['1338.748525000000000000', '1.169000000000000000'],
],
},
},
};

Expand Down Expand Up @@ -134,8 +137,8 @@ export const startTestServer = (account: ethers.Wallet) => {
payload.makerAsset = payload.makerAsset.toLowerCase();
payload.takerAsset = payload.takerAsset.toLowerCase();

const makerAssetSymbol = addressToTokenMap[payload.makerAsset].symbol;
const takerAssetSymbol = addressToTokenMap[payload.takerAsset].symbol;
const makerAssetSymbol = addressToTokenMap[payload.makerAsset].symbol!;
const takerAssetSymbol = addressToTokenMap[payload.takerAsset].symbol!;

let reversed = false;

Expand All @@ -144,17 +147,17 @@ export const startTestServer = (account: ethers.Wallet) => {
if (payload.makerAmount) {
// buy
let _prices: PairPriceResponse =
prices[`${makerAssetSymbol}/${takerAssetSymbol}`];
prices.prices[`${makerAssetSymbol}/${takerAssetSymbol}`];
if (!_prices) {
_prices = prices[`${takerAssetSymbol}/${makerAssetSymbol}`];
_prices = prices.prices[`${takerAssetSymbol}/${makerAssetSymbol}`];
reversed = true;
}
if (!reversed) {
value = new BigNumber(payload.makerAmount).times(
new BigNumber(_prices.asks[0][0]),
new BigNumber(_prices.asks![0][0]),
);
} else {
const reversedPrices = _prices.bids.map(price =>
const reversedPrices = _prices.bids!.map(price =>
reversePrice([new BigNumber(price[0]), new BigNumber(price[1])]),
);
value = new BigNumber(payload.makerAmount).times(
Expand All @@ -164,18 +167,18 @@ export const startTestServer = (account: ethers.Wallet) => {
} else if (payload.takerAmount) {
// sell
let _prices: PairPriceResponse =
prices[`${takerAssetSymbol}/${makerAssetSymbol}`];
prices.prices[`${takerAssetSymbol}/${makerAssetSymbol}`];

if (!_prices) {
_prices = prices[`${makerAssetSymbol}/${takerAssetSymbol}`];
_prices = prices.prices[`${makerAssetSymbol}/${takerAssetSymbol}`];
reversed = true;
}
if (!reversed) {
value = new BigNumber(payload.takerAmount).times(
new BigNumber(_prices.bids[0][0]),
new BigNumber(_prices.bids![0][0]),
);
} else {
const reversedPrices = _prices.bids.map(price =>
const reversedPrices = _prices.bids!.map(price =>
reversePrice([new BigNumber(price[0]), new BigNumber(price[1])]),
);
value = new BigNumber(payload.takerAmount).times(
Expand All @@ -186,7 +189,7 @@ export const startTestServer = (account: ethers.Wallet) => {

const order = {
maker: account.address,
taker: payload.txOrigin,
taker: payload.userAddress,
expiry: 0,
makerAsset: payload.makerAsset,
takerAsset: payload.takerAsset,
Expand Down
30 changes: 14 additions & 16 deletions src/dex/generic-rfq/rate-fetcher.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import BigNumber from 'bignumber.js';
import { info } from 'console';
import { ethers } from 'ethers';
import { SwapSide } from 'paraswap-core';
import { BN_0, BN_1 } from '../../bignumber-constants';
Expand Down Expand Up @@ -38,8 +37,6 @@ export const reversePrice = (price: PriceAndAmountBigNumber) =>
] as PriceAndAmountBigNumber;

export class RateFetcher {
private augustusAddress: Address;

private tokensFetcher: Fetcher<TokensResponse>;
private pairsFetcher: Fetcher<PairsResponse>;
private rateFetcher: Fetcher<RatesResponse>;
Expand All @@ -59,8 +56,6 @@ export class RateFetcher {
private dexKey: string,
private logger: Logger,
) {
this.augustusAddress = dexHelper.config.data.augustusAddress.toLowerCase();

this.tokensFetcher = new Fetcher<TokensResponse>(
dexHelper.httpRequest,
{
Expand Down Expand Up @@ -110,6 +105,7 @@ export class RateFetcher {
info: {
requestOptions: config.blacklistConfig.reqParams,
caster: this.casteBlacklistResponse.bind(this),
authenticate: authHttp(config.rateConfig.secret),
},
handler: this.handleBlackListResponse.bind(this),
},
Expand Down Expand Up @@ -236,19 +232,23 @@ export class RateFetcher {

private handleRatesResponse(resp: RatesResponse) {
const pairs = this.pairs;
for (const pairName of Object.keys(resp)) {
Object.keys(resp.prices).forEach(pairName => {
const pair = pairs[pairName];
if (!pair) {
continue;
return;
}
const prices = resp.prices[pairName];

if (!prices.asks || !prices.bids) {
return;
}
const prices = resp[pairName];

const baseToken = this.tokens[pair.base];
const quoteToken = this.tokens[pair.quote];

if (!baseToken || !quoteToken) {
this.logger.warn(`missing base or quote token`);
continue;
return;
}

if (prices.bids.length) {
Expand All @@ -270,7 +270,7 @@ export class RateFetcher {
JSON.stringify(prices.asks),
);
}
}
});
}

checkHealth(): boolean {
Expand Down Expand Up @@ -377,7 +377,7 @@ export class RateFetcher {
destToken: Token,
amount: string,
side: SwapSide,
txOrigin: Address,
userAddress: Address,
) {
let orderPrices: PriceAndAmountBigNumber[] | null = null;
try {
Expand All @@ -398,11 +398,9 @@ export class RateFetcher {
const payload: RFQPayload = {
makerAsset: destToken.address,
takerAsset: srcToken.address,
model: 'firm',
makerAmount: side === SwapSide.BUY ? amount : undefined,
takerAmount: side === SwapSide.SELL ? amount : undefined,
taker: this.augustusAddress,
txOrigin,
userAddress,
};

return {
Expand Down Expand Up @@ -470,7 +468,7 @@ export class RateFetcher {
_destToken: Token,
srcAmount: string,
side: SwapSide,
txOrigin: Address,
userAddress: Address,
): Promise<OrderInfo> {
const srcToken = this.dexHelper.config.wrapETH(_srcToken);
const destToken = this.dexHelper.config.wrapETH(_destToken);
Expand All @@ -484,7 +482,7 @@ export class RateFetcher {
destToken,
srcAmount,
side,
txOrigin,
userAddress,
);

if (!result) {
Expand Down
12 changes: 4 additions & 8 deletions src/dex/generic-rfq/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ export type PriceAndAmount = [string, string];
export type PriceAndAmountBigNumber = [BigNumber, BigNumber];

export type PairPriceResponse = {
bids: PriceAndAmount[];
asks: PriceAndAmount[];
bids?: PriceAndAmount[];
asks?: PriceAndAmount[];
};

export type RatesResponse = {
[pair: string]: PairPriceResponse;
prices: { [pair: string]: PairPriceResponse };
};

export type RFQSecret = {
Expand All @@ -60,8 +60,6 @@ export type Rates = Array<[string, string]>;
export type BigNumberRate = [BigNumber, BigNumber];
export type BigNumberRates = Array<BigNumberRate>;

export type RFQModel = 'firm' | 'indicative';

type RequestConfigWithAuth = RequestConfig & {
secret?: RFQSecret;
};
Expand All @@ -82,11 +80,9 @@ export type TokenWithAmount = Token & {
export type RFQPayload = {
makerAsset: Address;
takerAsset: Address;
model: RFQModel;
makerAmount?: string;
takerAmount?: string;
taker: Address;
txOrigin: Address;
userAddress: Address;
};

export type AugustusOrderWithStringAndSignature = AugustusOrderWithString & {
Expand Down
6 changes: 6 additions & 0 deletions tests/constants-e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import {
balanceOfFn,
allowanceFn,
SmartToken,
balancesFn,
allowedFn,
} from '../tests/smart-tokens';
import { Address } from '../src/types';
import { ETHER_ADDRESS, Network } from '../src/constants';
Expand Down Expand Up @@ -34,10 +36,14 @@ export const Tokens: {
USDC: {
address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
decimals: 6,
addBalance: balancesFn,
addAllowance: allowedFn,
},
WBTC: {
address: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599',
decimals: 8,
addBalance: balancesFn,
addAllowance: allowedFn,
},
BADGER: {
address: '0x3472A5A71965499acd81997a54BBA8D852C6E53d',
Expand Down
2 changes: 2 additions & 0 deletions tests/smart-tokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ const constructAddBAllowanceFn = (varName: string): AddAllowanceFn => {
};

export const balanceOfFn = constructAddBalanceFn('balanceOf');
export const balancesFn = constructAddBalanceFn('balances');
export const allowanceFn = constructAddBAllowanceFn('allowance');
export const allowedFn = constructAddBAllowanceFn('allowed');

export type SmartTokenParams = Token & {
addBalance?: AddBalanceFn;
Expand Down
7 changes: 6 additions & 1 deletion tests/utils-e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import { constructSimpleSDK, SimpleFetchSDK } from '@paraswap/sdk';
import axios from 'axios';
import { SmartToken, StateOverrides } from './smart-tokens';
import { GIFTER_ADDRESS } from './constants-e2e';
import { sleep } from './utils';

export const testingEndpoint = process.env.E2E_TEST_ENDPOINT;

Expand Down Expand Up @@ -288,6 +289,7 @@ export type TestParamE2E = {
srcTokenAllowanceOverrides?: Record<Address, string>;
destTokenBalanceOverrides?: Record<Address, string>;
destTokenAllowanceOverrides?: Record<Address, string>;
sleepMs?: number;
};

const makeFakeTransferToSenderAddress = (
Expand Down Expand Up @@ -320,6 +322,7 @@ export async function newTestE2E({
poolIdentifiers,
limitOrderProvider,
transferFees,
sleepMs,
}: TestParamE2E) {
const amount = BigInt(_amount);
const twiceAmount = BigInt(_amount) * 2n;
Expand Down Expand Up @@ -407,7 +410,9 @@ export async function newTestE2E({

if (paraswap.initializePricing) await paraswap.initializePricing();

// await sleep(5000);
if (sleepMs) {
await sleep(sleepMs);
}
try {
const priceRoute = await paraswap.getPrices(
srcToken.token,
Expand Down

0 comments on commit 1346e0a

Please sign in to comment.