vExchangeReserves
Performs exchange of reserves of between vPair instances
Events
Event ReservesExchanged
emitted after exchange reserves trade is completed.
Event NewIncentivesLimit
Emitted when incentives limit percentage is changed in changeIncentivesLimitPct
State-Changing Functions
function exchange
The two exchanging pools are specified by jkPair1
(Source Pool) and jkPair2
(Target Pool).
The flashAmountOut
of the reserve asset in the Source Pool (Source Asset) is exchanged for a corresponding amount of a specific reserve asset in the Target Pool (target asset). The source asset must be a native asset of the target pool, and the target asset must be a native asset in the source pool.
For each pool, a corresponding reference pool is defined (ikPair1
and ikPair2
respectively). The reference pools are used to create virtual pools that define relative prices of the two assets.
ikPair1
and ikPair2
implicitly define the two assets that are being exchanged. Specifically, Source Asset is the native asset of ikPair1
that is not native to jkPair1
, and Target Asset
is the native asset of ikPair2
that is not native to jkPair2.
Example:
Let's assume we have a pool A/B holding C in reserve: A/B [C]
We also have another pool C/D holding A: C/D [A]
In order to perform the reserve exchange procedure between the two pools, we want to exchange C in pool A/B with A in pool C/D.
In this case, jkPair1 is A/B, jkPair2 in C/D. We also need two virtual pools connecting A and C, one built from jkPair1 and the other built from jkPair2, in order to determine the price of A in terms of C and vice a versa.
The pool ikPair1 should be B/C, so that a virtual pool A/C can be built from jkPair1 and ikPair1, and the pool ikPair2 should be D/A, so that a virtual pool A/C can be built from jkPair2 and ikPair2
Caller Incentives
Exchange is a public function that incentivizes its caller to search for opportunities to exchange pools reserves and pay the gas fees required to perform the exchanges.
The incentive comes from the difference in prices between the two virtual pools involved in the proposed exchange.
Continuing the example above, consider two virtual pools provided by the caller to determine the relative prices of A and C:
- C/A (which consists of jkPair A/B and ikPair B/C)
-A/C (which consists of jkPair C/D and ikPair D/A)
In most cases, the prices will not be exactly equal due to the different native pools they consist of. For example, the A/C price in the first virtual pool may be 0.1 and the price in the second pool may be 0.09938.
Parameters:
jkPair1
address
The source pool of the reserve exchange
ikPair1
address
The reference pool combined with the source pool to create a virtual pool to define the ratio of reserve prices
jkPair2
address
The target pool of the reserve exchange
ikPair2
address
The reference pool combined with the target pool to create a virtual pool to define the ratio of reserve prices
flashAmountOut
uint256
Amount of reserve asset in the source pool to be exchanged
function vFlashSwapCallback
Parameters:
tokenIn
address
Token to be sent
tokenOut
address
Token to be received
requiredBackAmount
uint256
Amount to be sent
data
bytes calldata
function changeIncentivesLimitPct
Sets the percentage of leftovers resulting from a reserve exchange that should be sent back to the caller.
Data Structures
struct ExchangeReserveCallbackParams
Last updated