Skip to main content
added 111 characters in body
Source Link
Chris
  • 449
  • 4
  • 7

While using the 0xAPI I noticed that when executing "MultiHop" swaps against my local mainnet fork it sometimes obtains less than the specified buyAmount without reverting.

Is this expected behaviour? I assumed that a trade with specified buyAmount should revert if it obtains less than that amount, which seems to be true for all other types / liquidity sources.

More Detail: This seems to be true only when I set slippagePercentage > 0. Without slippagePercentage the trade reverts with MultiplexFeature::_multiplexMultiHopSell/UNDERBOUGHT.

However from the Api documentation I assumed that this slippagePercentage only affects the side of the trade that is not "fixed". (i.e. the sellAmount in this case).

For example (at the time of posting this question) with this api query: https://api.0x.org/swap/v1/quote?buyToken=0x6B3595068778DD592e39A122f4f5a5cF09C90fE2&sel lToken=0x6b175474e89094c44da98b954eedeac495271d0f&buyAmount=100000000000000000000000&slippagePercentage=0.2

I got the following "sources" in the api response:

[
  {
    proportion: '1',
    intermediateToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
    hops: [ 'Uniswap_V3', 'SushiSwap' ],
    name: 'MultiHop'
  }
]

But when executing the swap it only obtained 96468.20 instead of the specified 100000 Sushi Tokens.

The code to rerun this Test / Experiment can be found here: https://github.com/ckoopmann/0xApiExperiments/blob/main/test/index.ts

While using the 0xAPI I noticed that when executing "MultiHop" swaps against my local mainnet fork it sometimes obtains less than the specified buyAmount without reverting.

Is this expected behaviour? I assumed that a trade with specified buyAmount should revert if it obtains less than that amount, which seems to be true for all other types / liquidity sources.

More Detail: This seems to be true only when I set slippagePercentage > 0. However from the Api documentation I assumed that this slippagePercentage only affects the side of the trade that is not "fixed". (i.e. the sellAmount in this case).

For example (at the time of posting this question) with this api query: https://api.0x.org/swap/v1/quote?buyToken=0x6B3595068778DD592e39A122f4f5a5cF09C90fE2&sel lToken=0x6b175474e89094c44da98b954eedeac495271d0f&buyAmount=100000000000000000000000&slippagePercentage=0.2

I got the following "sources" in the api response:

[
  {
    proportion: '1',
    intermediateToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
    hops: [ 'Uniswap_V3', 'SushiSwap' ],
    name: 'MultiHop'
  }
]

But when executing the swap it only obtained 96468.20 instead of the specified 100000 Sushi Tokens.

The code to rerun this Test / Experiment can be found here: https://github.com/ckoopmann/0xApiExperiments/blob/main/test/index.ts

While using the 0xAPI I noticed that when executing "MultiHop" swaps against my local mainnet fork it sometimes obtains less than the specified buyAmount without reverting.

Is this expected behaviour? I assumed that a trade with specified buyAmount should revert if it obtains less than that amount, which seems to be true for all other types / liquidity sources.

More Detail: This seems to be true only when I set slippagePercentage > 0. Without slippagePercentage the trade reverts with MultiplexFeature::_multiplexMultiHopSell/UNDERBOUGHT.

However from the Api documentation I assumed that this slippagePercentage only affects the side of the trade that is not "fixed". (i.e. the sellAmount in this case).

For example (at the time of posting this question) with this api query: https://api.0x.org/swap/v1/quote?buyToken=0x6B3595068778DD592e39A122f4f5a5cF09C90fE2&sel lToken=0x6b175474e89094c44da98b954eedeac495271d0f&buyAmount=100000000000000000000000&slippagePercentage=0.2

I got the following "sources" in the api response:

[
  {
    proportion: '1',
    intermediateToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
    hops: [ 'Uniswap_V3', 'SushiSwap' ],
    name: 'MultiHop'
  }
]

But when executing the swap it only obtained 96468.20 instead of the specified 100000 Sushi Tokens.

The code to rerun this Test / Experiment can be found here: https://github.com/ckoopmann/0xApiExperiments/blob/main/test/index.ts

Source Link
Chris
  • 449
  • 4
  • 7

MultiHop swap buying less than specified `buyAmount` without reverting

While using the 0xAPI I noticed that when executing "MultiHop" swaps against my local mainnet fork it sometimes obtains less than the specified buyAmount without reverting.

Is this expected behaviour? I assumed that a trade with specified buyAmount should revert if it obtains less than that amount, which seems to be true for all other types / liquidity sources.

More Detail: This seems to be true only when I set slippagePercentage > 0. However from the Api documentation I assumed that this slippagePercentage only affects the side of the trade that is not "fixed". (i.e. the sellAmount in this case).

For example (at the time of posting this question) with this api query: https://api.0x.org/swap/v1/quote?buyToken=0x6B3595068778DD592e39A122f4f5a5cF09C90fE2&sel lToken=0x6b175474e89094c44da98b954eedeac495271d0f&buyAmount=100000000000000000000000&slippagePercentage=0.2

I got the following "sources" in the api response:

[
  {
    proportion: '1',
    intermediateToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
    hops: [ 'Uniswap_V3', 'SushiSwap' ],
    name: 'MultiHop'
  }
]

But when executing the swap it only obtained 96468.20 instead of the specified 100000 Sushi Tokens.

The code to rerun this Test / Experiment can be found here: https://github.com/ckoopmann/0xApiExperiments/blob/main/test/index.ts