From dabe6fd7935192342e1f5254ed842f32b63d6815 Mon Sep 17 00:00:00 2001 From: Alex Kroeger Date: Thu, 11 Mar 2021 18:05:16 -0800 Subject: [PATCH] add tx origin blacklist to RFQ options (#169) * add tx origin blacklist to RFQ options * Fix typo * use set instead of array * make sure tx origin is lower case * changed default blacklist value from array to set --- packages/asset-swapper/src/constants.ts | 1 + packages/asset-swapper/src/swap_quoter.ts | 21 +++++++++++++++++++++ packages/asset-swapper/src/types.ts | 1 + 3 files changed, 23 insertions(+) diff --git a/packages/asset-swapper/src/constants.ts b/packages/asset-swapper/src/constants.ts index 496a76fe49..3cd262b4c8 100644 --- a/packages/asset-swapper/src/constants.ts +++ b/packages/asset-swapper/src/constants.ts @@ -52,6 +52,7 @@ const DEFAULT_SWAP_QUOTER_OPTS: SwapQuoterOpts = { rfqt: { takerApiKeyWhitelist: [], makerAssetOfferings: {}, + txOriginBlacklist: new Set(), }, tokenAdjacencyGraph: DEFAULT_TOKEN_ADJACENCY_GRAPH, }; diff --git a/packages/asset-swapper/src/swap_quoter.ts b/packages/asset-swapper/src/swap_quoter.ts index a514d78609..692da34b5f 100644 --- a/packages/asset-swapper/src/swap_quoter.ts +++ b/packages/asset-swapper/src/swap_quoter.ts @@ -410,6 +410,14 @@ export class SwapQuoter { return whitelistedApiKeys.includes(apiKey); } + private _isTxOriginBlacklisted(txOrigin: string | undefined): boolean { + if (!txOrigin) { + return false; + } + const blacklistedTxOrigins = this._rfqtOptions ? this._rfqtOptions.txOriginBlacklist : new Set(); + return blacklistedTxOrigins.has(txOrigin.toLowerCase()); + } + private _validateRfqtOpts( sourceFilters: SourceFilters, rfqt: RfqtRequestOpts | undefined, @@ -438,6 +446,19 @@ export class SwapQuoter { return undefined; } + // If the requested tx origin is blacklisted, raise a warning and disable RFQ + if (this._isTxOriginBlacklisted(txOrigin)) { + if (this._rfqtOptions && this._rfqtOptions.warningLogger) { + this._rfqtOptions.warningLogger( + { + txOrigin, + }, + 'Attempt at using a tx Origin that is blacklisted. Disabling RFQ for the request lifetime.', + ); + } + return undefined; + } + // Otherwise check other RFQ options if ( intentOnFilling && // The requestor is asking for a firm quote diff --git a/packages/asset-swapper/src/types.ts b/packages/asset-swapper/src/types.ts index 306ea4e8dd..2a83b33b33 100644 --- a/packages/asset-swapper/src/types.ts +++ b/packages/asset-swapper/src/types.ts @@ -286,6 +286,7 @@ export interface RfqtFirmQuoteValidator { export interface SwapQuoterRfqtOpts { takerApiKeyWhitelist: string[]; makerAssetOfferings: RfqtMakerAssetOfferings; + txOriginBlacklist: Set; altRfqCreds?: { altRfqApiKey: string; altRfqProfile: string;