V2Pair
The V2Pair contracts are responsible for all pair logic including: liquidity provision, swapping, and rebalancing the pair.
The V2Pair contract inherits ERC20 functionality, so all usual ERC20 can be used with pair tokens.
This documentation covers pool specific functionality, where the full contract can be found here.
Code from Uniswap V2 Pair with the following modifications.
Introduce a new requirement in the swap function to allow only one swap per block per swap direction.
The new requirement ensures fair amount of dynamic swap fees are paid to LPs each block, because arbitrageurs are discouraged from splitting their swap in multiple transactions in order to manipulate the dynamic swap fee.
The new requirement also ensures arbitrageurs are protected from sandwich attacks.
Replace the requirement
balance0Adjusted
*balance1Adjusted
>=reserve0
*reserve1
in the swap function with a new requirement: (netamountIn0
) *balance1
>= (netamountOut1
) *balance0
and, (netamountIn1
) *balance0
>= (netamountOut0
) *balance1
.The new requirement implements the dynamic swap fee structure.
Events
Mint
Emitted each time liquidity tokens are created via mint
Burn
Emitted each time liquidity tokens are destroyed via burn.
Swap
Emitted each time a swap occurs via swap.
Sync
Emitted each time reserves are updated via mint, burn, swap, or sync.
Read-Only Functions
MINIMUM_LIQUIDITY
Returns 1000
for all pairs.
To ameliorate rounding errors and increase the theoretical minimum tick size for liquidity provision, pairs burn the first MINIMUM_LIQUIDITY pool tokens.
Happens automatically during the first liquidity provision.
factory
Returns the factory address.
token0
Returns the address of the pair token with the lower sort order.
token1
Returns the address of the pair token with the higher sort order.
getReserves
Returns the reserves of token0 and token1 used to price trades and distribute liquidity. Also returns the block.timestamp
(mod 2**32
) of the last block during which an interaction occurred for the pair.
price0CumulativeLast
Returns the sum of the token's price for every second in the entire history of the contract.
Can be used to track accurate time-weighted average prices (TWAP)s across any time interval.
The TWAP is constructed by reading the cumulative price at the beginning and at the end of the desired TWAP interval. The difference in this cumulative price can then be divided by the length of the interval to create a TWAP for that period.
price1CumulativeLast
Returns the sum of the token's price for every second in the entire history of the contract.
kLast
Returns the product of the reserves as of the most recent liquidity event.
State-Changing Functions
mint
Creates pool tokens.
Parameters
Name | Type | Description |
---|---|---|
| address | address of the receiver of pool tokens |
Returns
Name | Type | Description |
---|---|---|
| uint | amount of liquidity tokens created |
burn
Destroys pool tokens.
Parameters
Name | Type | Description |
---|---|---|
| address | address of the receiver of token0 and token1 |
Returns
Name | Type | Description |
---|---|---|
| uint | amount of token0 returned from burn |
| uint | amount of token1 returned from burn |
swap
Swaps tokens. For regular swaps, data.length
must be 0
.
Either amount0Out or amount1Out will be 0 on calls depending on what the swap is from and to.
Parameters
Name | Type | Description |
---|---|---|
| uint | address of the receiver of pool tokens |
| uint | address of the other token in the pair |
| address | address of the receiver of out token |
| bytes | calldata data to pass forward after the swap |
skim
Allows a user to withdraw the difference between the current balance of the pair and 2^112 - 1
to the caller, if that difference is greater than 0.
Used as a recovery mechanism in case enough tokens are sent to a pair to overflow the two uint112 storage slots for reserves, which could otherwise cause trades to fail.
Parameters
Name | Type | Description |
---|---|---|
| address | address to skim tokens to |
sync
Exists to set the the reserve of the contract to the current balances.
Emits Sync.
Used as recovery mechanism in the case that a token asynchronously deflates the balance of a pair.
Interface
Last updated