From 1e6476ada73d1b76b3a3f6e0811a822eefd47f6c Mon Sep 17 00:00:00 2001 From: mzhu25 Date: Wed, 5 May 2021 22:29:24 -0700 Subject: [PATCH] Add ETH pseudo-address when wrapping/unwrapping in Multiplex multihop (#230) * Add ETH pseudo-address when wrapping/unwrapping in Multiplex multihop * Update changelog --- packages/asset-swapper/CHANGELOG.json | 4 ++++ .../quote_consumers/exchange_proxy_swap_quote_consumer.ts | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/asset-swapper/CHANGELOG.json b/packages/asset-swapper/CHANGELOG.json index ec81115449..792c37e01e 100644 --- a/packages/asset-swapper/CHANGELOG.json +++ b/packages/asset-swapper/CHANGELOG.json @@ -5,6 +5,10 @@ { "note": "Tweak compiler settings for smaller sampler bytecode", "pr": 229 + }, + { + "note": "Fix Multiplex multihop encoding for ETH buys/sells", + "pr": 230 } ] }, diff --git a/packages/asset-swapper/src/quote_consumers/exchange_proxy_swap_quote_consumer.ts b/packages/asset-swapper/src/quote_consumers/exchange_proxy_swap_quote_consumer.ts index 5645912f52..6efed0b41d 100644 --- a/packages/asset-swapper/src/quote_consumers/exchange_proxy_swap_quote_consumer.ts +++ b/packages/asset-swapper/src/quote_consumers/exchange_proxy_swap_quote_consumer.ts @@ -565,14 +565,17 @@ export class ExchangeProxySwapQuoteConsumer implements SwapQuoteConsumerBase { private _encodeMultiplexMultiHopFillCalldata(quote: SwapQuote, opts: ExchangeProxyContractOpts): string { const wrappedMultiHopCalls = []; + const tokens: string[] = []; if (opts.isFromETH) { wrappedMultiHopCalls.push({ selector: DUMMY_WETH_CONTRACT.getSelector('deposit'), data: NULL_BYTES, }); + tokens.push(ETH_TOKEN_ADDRESS); } const [firstHopOrder, secondHopOrder] = quote.orders; const intermediateToken = firstHopOrder.makerToken; + tokens.push(quote.takerToken, intermediateToken, quote.makerToken); for (const order of [firstHopOrder, secondHopOrder]) { switch (order.source) { case ERC20BridgeSource.UniswapV2: @@ -607,11 +610,12 @@ export class ExchangeProxySwapQuoteConsumer implements SwapQuoteConsumerBase { selector: DUMMY_WETH_CONTRACT.getSelector('withdraw'), data: NULL_BYTES, }); + tokens.push(ETH_TOKEN_ADDRESS); } return this._exchangeProxy .multiHopFill( { - tokens: [quote.takerToken, intermediateToken, quote.makerToken], + tokens, sellAmount: quote.worstCaseQuoteInfo.totalTakerAmount, calls: wrappedMultiHopCalls, },