diff --git a/packages/asset-swapper/CHANGELOG.json b/packages/asset-swapper/CHANGELOG.json index 80b3461a44..e69ee2d1dc 100644 --- a/packages/asset-swapper/CHANGELOG.json +++ b/packages/asset-swapper/CHANGELOG.json @@ -62,6 +62,10 @@ "note": "Added `Mooniswap`", "pr": 2675 }, + { + "note": "Stop requiring takerAddress for RFQ-T indicative quotes", + "pr": 2684 + }, { "note": "Added two-hop support", "pr": 2647 diff --git a/packages/asset-swapper/src/utils/quote_requestor.ts b/packages/asset-swapper/src/utils/quote_requestor.ts index 3143aff02b..d39e9efdcf 100644 --- a/packages/asset-swapper/src/utils/quote_requestor.ts +++ b/packages/asset-swapper/src/utils/quote_requestor.ts @@ -39,18 +39,6 @@ function getTokenAddressOrThrow(assetData: string): string { throw new Error(`Decoded asset data (${JSON.stringify(decodedAssetData)}) does not contain a token address`); } -function assertTakerAddressOrThrow(takerAddress: string | undefined): void { - if ( - takerAddress === undefined || - takerAddress === '' || - takerAddress === '0x' || - !takerAddress || - takerAddress === constants.NULL_ADDRESS - ) { - throw new Error('RFQ-T requires the presence of a taker address'); - } -} - function inferQueryParams( marketOperation: MarketOperation, makerAssetData: string, @@ -137,7 +125,15 @@ export class QuoteRequestor { options: RfqtRequestOpts, ): Promise { const _opts: RfqtRequestOpts = { ...constants.DEFAULT_RFQT_REQUEST_OPTS, ...options }; - assertTakerAddressOrThrow(_opts.takerAddress); + if ( + _opts.takerAddress === undefined || + _opts.takerAddress === '' || + _opts.takerAddress === '0x' || + !_opts.takerAddress || + _opts.takerAddress === constants.NULL_ADDRESS + ) { + throw new Error('RFQ-T firm quotes require the presence of a taker address'); + } const firmQuoteResponses = await this._getQuotesAsync( // not yet BigNumber makerAssetData, @@ -217,7 +213,15 @@ export class QuoteRequestor { options: RfqtRequestOpts, ): Promise { const _opts: RfqtRequestOpts = { ...constants.DEFAULT_RFQT_REQUEST_OPTS, ...options }; - assertTakerAddressOrThrow(_opts.takerAddress); + + // Originally a takerAddress was required for indicative quotes, but + // now we've eliminated that requirement. @0x/quote-server, however, + // is still coded to expect a takerAddress. So if the client didn't + // send one, just use the null address to satisfy the quote server's + // expectations. + if (!_opts.takerAddress) { + _opts.takerAddress = constants.NULL_ADDRESS; + } const responsesWithStringInts = await this._getQuotesAsync( // not yet BigNumber makerAssetData,