Comment on page
UnifiRouter.sol
Primary Uses - The uTrade V2 Router is the 'brain' of uTrade. The router finds the optimal path for exchanging one token for another. Whenever a trade is made, your wallet sends funds to the router address. The router will then carry out as many transactions as necessary to acquire the desired token. The router also handles adding liquidity to liquidity pools, and sending the corresponding LP tokens to liquidity providers.
Network | Address |
Harmony | 0x: 0xbfd48577e368322966cfda94c0a63078ce2f0402
one: 0xbfd48577e368322966cfda94c0a63078ce2f0402 (Link) |
function factory() external pure returns (address);
A call to the
factory
function returns the address of the current Factory used by uTrade v2. The current factory address for uTrade V2 on Harmony is 0x7aB6ef0cE51a2aDc5B673Bad7218C01AE9B04695
.function WETH() external pure returns (address);
A call to the
WETH
function returns the address of Wrapped ONE (WONE) on Harmony in 0x format. As this address does not change, it will always return 0xcf664087a5bb0237a0bad6742852ec6c8d69a27a
.function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
A call to the
quote
function returns the amount of tokenB that will be received for an amount of tokenA. This can be used to calculate the exchange rate between two tokens without factoring in slippage or fees. By entering the amount of tokenA, the total amount of reserves of tokenA as reserveA, and the total amount of reserves of tokenB as reserveB, the call will return the equivalent amount of tokenB.function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut, uint fee) external pure returns (uint amountOut);
A call to the
getAmountOut
function with the amount of the token being sent will return the maximum amount of a token to be received, accounting for fees and the total amount of reserves.function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, uint fee) external pure returns (uint amountIn);
A call to the
getAmountIn
function with the amount of the token you wish to receive will return the minimum amount required of the token you wish to send, accounting for fees and the total amount of reserves.function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
A call to the
getAmountsOut
function with the amount of the token being sent will return the maximum amount to be received of multiple different tokens. By entering multiple LP addresses in the address array, the function will return the maximum amount of each token that will be received. A call to this function uses the getReserves
function from UnifiPair.sol to determine the reserves of the liquidity pool. Then, it calls the getAmountOut
function to determine the amount of each token in the array that will be received for the amountIn value of a token.function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
A call to the
getAmountsIn
function with the desired amount of the token to be received will return the minimum amount required to be sent of multiple tokens. By entering multiple LP addresses in the address array, the function will return the minimum amount of each token that will need to be sent to receive the desired amount of a token. A call to this function uses the getReserves
function from UnifiPair.sol to determine the reserves of the liquidity pool. Then, it calls the getAmountIn
function to determine the amount of each token in the array that will need to be sent for the amountOut value of a token. function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
The
addLiquidity
function adds the two tokens that make up the liquidity pool - tokenA and tokenB - at the proper ratio based on the reserves of the pool. For example, if the pool contains 50 USDT / 1000 ONE, a user's liquidity will be added at the ratio of 1 USDT to 5 ONE provided there is no price movements in the pair between when the user broadcasts the transaction to when it is mined. In the event of a price movement, the amountADesired, amountBDesired, amountAMin, and amountBMin act as a security measure against an adverse price movement. After the liquidity is added, the function sends the corresponding LP tokens to the sender.In the case of a pool not existing for the two assets, one will be created using UnifiFactory.sol at the ratio of the assets supplied.
Parameter | Type | Description |
tokenA | address | Token address of the first asset in the token pair. |
tokenB | address | Token address of the second asset in the token pair. |
amountADesired | uint | The amount of tokenA to be added to liquidity if the value of tokenA goes down in comparison to tokenB. |
amountBDesired | uint | The amount of tokenB to be added to liquidity if the value of tokenB goes down in comparison to tokenA. |
amountAMin | uint | Sets the minimum amount of tokenA that can added to the pool before the transaction reverts. This acts as a safeguard.
|
amountBMin | uint | Sets the minimum amount of tokenB that can added to the pool before the transaction reverts. This acts as a safeguard. ​
|
to | address | The address to which the LP tokens for the uTrade V2 pool will be sent. |
deadline | uint | The UNIX timestamp for which this transaction must be completed. If the transaction is mined after this deadline, the transaction will revert. |
Parameter | Type | Description |
amountA | uint | The exact amount of tokenA that was sent to the pool. |
amountB | uint | The exact amount of tokenB that was sent to the pool. |
liquidity | uint | The exact amount of liquidity tokens minted and sent to the address provided in the to parameter. |
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
The
addLiquidityEth
function is similar to the addLiquidity
function except it accounts for one token being a native asset. In the case of Harmony, this native asset would be ONE. This function will convert ONE to WONE, will pair that WONE with the supplied other token, and add the liquidity to the pool. This function will add at the ideal ratio based on when the transaction is mined.
In the case of a pool not existing for WONE and the token provided, one will be created using UnifiFactory.sol at the ratio of the assets supplied.- This function requires a msg.value with the amount of ONE to be added.
- The msg.value acts as the amountETHDesired. As in, if the ratio between ONE and the token being paired with it change, this is the number of ONE that will be added to the pool.
- Any leftover ONE is returned to the msg.sender address.
Parameter | Type | Description |
token | address | The address of the supplied token for the liquidity pool. In other words, the asset that ONE is paired with. |
amountTokenDesired | uint | The amount of the supplied token to be added to liquidity if the value of token goes down in comparison to ONE. |
(amountETHDesired) msg.value | uint | Sent as the msg.value, the amount of ONE to be added to liquidity if the value of ONE goes down in comparison to token. |
amountTokenMin | uint | Sets the minimum amount of the supplied token that can added to the pool before the transaction reverts. This acts as a safeguard. ​
|
amountETHMin | uint | ​ Sets the minimum amount of ONE that can added to the pool before the transaction reverts. This acts as a safeguard. ​
|
to | address | The address to which the LP tokens for the uTrade V2 pool will be sent. |
deadline | uint | The UNIX timestamp for which this transaction must be completed. If the transaction is mined after this deadline, the transaction will revert. |
Parameter | Type | Description |
amountToken | uint | The exact amount of the supplied token sent to the pool. |
amountETH | uint | The exact amount of ONE converted to WONE, and then added to the pool. |
liquidity | uint | The exact amount of liquidity tokens minted and sent to the address provided in the to parameter. |
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
The
removeLiquidity
function removes the two tokens that make up liquidity from a pool. In other words, this function is used when the pool consists of two HRC-20 tokens.- In the event one of the assets is paired with ONE, ONE will have been wrapped and paired with WONE (Wrapped ONE). If the user wishes to withdraw WONE instead of withdrawing as ONE, this function should be used instead of
removeLiquidityETH
.
Parameter | Type | Description |
tokenA | address | Token address of the first asset in the pair. |
tokenB | address | Token address of the second asset in the pair. |
liquidity | uint | The amount of liquidity tokens to be redeemed and removed. |
amountAMin | uint | Sets the minimum amount of tokenA to be removed from the the pool. This acts as a safeguard against removing liquidity during a spike in value. If the removed amount falls below this value, the transaction reverts. |
amountBMin | uint | Sets the minimum amount of tokenB to be removed from the the pool. This acts as a safeguard against removing liquidity during a spike in value. If the removed amount falls below this value, the transaction reverts. |
to | address | The address to where the redeemed tokens will be sent. |
deadline | uint | The UNIX timestamp for which this transaction must be completed. If the transaction is mined after this deadline, the transaction will revert. |
Parameter | Title | Description |
amountA | uint | The exact amount of tokenA sent to the address provided in the to parameter. |
amountB | uint | The exact amount of tokenB sent to the address provided in the to parameter. |
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
The
removeLiquidityETH
function removes ONE as well as the corresponding paired token in the liquidity pool. In other words, this function is used when the pool consists of WONE and a HRC-20 token.- In the event one of the assets is paired with ONE, ONE has been wrapped into WONE (Wrapped ONE). This function will unwrap the WONE as the liquidity removed. If the user wishes to withdraw WONE instead of withdrawing as ONE, the
removeLiquidity
function should be used.
Parameter | Type | Description |
token | address | Token address of the HRC-20 asset in the pair. |
liquidity | uint | The amount of liquidity tokens to be redeemed and removed. |
amountTokenMin | uint | Sets the minimum amount of token to be removed from the the pool. This acts as a safeguard against removing liquidity during a spike in value. If the removed amount falls below this value, the transaction reverts. |
amountETHMin | uint | Sets the minimum amount of ONE to be removed from the the pool. This acts as a safeguard against removing liquidity during a spike in value. If the removed amount falls below this value, the transaction reverts. |
to | address | The address to where ONE and token will be sent. |
deadline | uint | The UNIX timestamp for which this transaction must be completed. If the transaction is mined after this deadline, the transaction will revert. |
Parameter | Value | Description |
amountToken | uint | The exact amount of token sent to the address provided in the to parameter. |
amountETH | uint | The exact amount of ONE sent to the address provided in the to parameter. |
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
The
removeLiquidityWithPermit
functions removes the two tokens that make up liquidity from a pool. In other words, this function is used when the pool consists of two HRC-20 tokens. This function operates similarly to the removeLiquidity
function with the added benefit of not requiring pre-approvals using permit function from the HRC-20 contract.- In the event one of the assets is paired with ONE, ONE will have been wrapped and paired with WONE (Wrapped ONE). If the user wishes to withdraw WONE instead of withdrawing as ONE, this function should be used instead of
removeLiquidityETHWithPermit
.
Parameter | Type | Description |
tokenA | address | Token address of the first asset in the pair. |
tokenB | address | Token address of the second asset in the pair. |
liquidity | uint | The amount of liquidity tokens to be redeemed and removed. |
amountAMin | uint | Sets the minimum amount of tokenA to be removed from the the pool. This acts as a safeguard against removing liquidity during a spike in value. If the removed amount falls below this value, the transaction reverts. |
amountBMin | uint | Sets the minimum amount of tokenB to be removed from the the pool. This acts as a safeguard against removing liquidity during a spike in value. If the removed amount falls below this value, the transaction reverts. |
to | address | The address to where the redeemed tokens will be sent. |
deadline | uint | The UNIX timestamp for which this transaction must be completed. If the transaction is mined after this deadline, the transaction will revert. |
approveMax | bool | Sets a true or false value on if approval amount in the signature is for liquidity or for uint(-1). |
v | uint8 | The v value of the permit. This is one of the three values that makes up the approval signature. |
r | bytes32 | The r value of the permit. This is one of the three values that makes up the approval signature. |
s | bytes32 | The s value of the permit. This is one of the three values that makes up the approval signature. |
Parameter | Title | Description |
amountA | uint | The exact amount of tokenA sent to the address provided in the to parameter. |
amountB | uint | The exact amount of tokenB sent to the address provided in the to parameter. |
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
The
removeLiquidityETHWithPermit
function removes ONE as well as the corresponding paired token in the liquidity pool. In other words, this function is used when the pool consists of WONE and a HRC-20 token. This function operates similarly to the removeLiquidityETH
function with the added benefit of not requiring pre-approvals using permit function from the HRC-20 contract.- In the event one of the assets is paired with ONE, ONE has been wrapped into WONE (Wrapped ONE). This function will unwrap the WONE as the liquidity removed. If the user wishes to withdraw WONE instead of withdrawing as ONE, the
removeLiquidityWithPermit
function should be used.
Parameter | Type | Description |
token | address | Token address of the HRC-20 asset in the pair. |
liquidity | uint | The amount of liquidity tokens to be redeemed and removed. |
amountTokenMin | uint | Sets the minimum amount of token to be removed from the the pool. This acts as a safeguard against removing liquidity during a spike in value. If the removed amount falls below this value, the transaction reverts. |
amountETHMin | uint | Sets the minimum amount of ONE to be removed from the the pool. This acts as a safeguard against removing liquidity during a spike in value. If the removed amount falls below this value, the transaction reverts. |
to | address | The address to where ONE and token will be sent. |
deadline | uint | The UNIX timestamp for which this transaction must be completed. If the transaction is mined after this deadline, the transaction will revert. |
v | uint8 | The v value of the permit. This is one of the three values that makes up the approval signature. |
r | bytes32 | The r value of the permit. This is one of the three values that makes up the approval signature. |
s | bytes32 | The s value of the permit. This is one of the three values that makes up the approval signature. |
Parameter | Value | Description |
amountToken | uint | The exact amount of token sent to the address provided in the to parameter. |
amountETH | uint | The exact amount of ONE sent to the address provided in the to parameter. |
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
The
removeLiquidityETHSupportingFeeOnTransferTokens
function is similar to the removeLiquidityETH
function, and contains the same call parameters. This function removes ONE as well as the corresponding paired token in the liquidity pool. In other words, this function is used when the pool consists of WONE and a HRC-20 token. However, this function allows for fee on transfer tokens, such as PAXG, to be used on uTrade.
Parameter | Type | Description |
token | address | Token address of the HRC-20 asset in the pair. |
liquidity | uint | The amount of liquidity tokens to be redeemed and removed. |
amountTokenMin | uint | Sets the minimum amount of token to be removed from the the pool. This acts as a safeguard against removing liquidity during a spike in value. If the removed amount falls below this value, the transaction reverts. |
amountETHMin | uint | Sets the minimum amount of BNB to be removed from the the pool. This acts as a safeguard against removing liquidity during a spike in value. If the removed amount falls below this value, the transaction reverts. |
to | address | The address to where ONE and the paired token will be sent. |
deadline | uint | The UNIX timestamp for which this transaction must be completed. If the transaction is mined after this deadline, the transaction will revert. |
Parameter | Value | Description |
amountETH | uint | The exact amount of ONE sent to the address provided in the to parameter. Note that the amountToken parameter is not returned. The amount of fee on transfer that a token may have is not available prior to transaction. |
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
The
removeLiquidityETHWithPermitSupportingFeeOnTransferTokens
function is similar to the removeLiquidityETHWithPermit
function. This function removes ONE as well as the corresponding paired token in the liquidity pool. In other words, this function is used when the pool consists of WONE and a HRC-20 token. This function operates similarly to the removeLiquidityETHfunction
with the added benefit of not requiring pre-approvals using permit function from the HRC-20 contract. In addition, this function allows for fee on transfer tokens, such as PAXG, to be used on uTrade. Parameter | Type | Description |
token | address | Token address of the HRC-20 asset in the pair. |
liquidity | uint | The amount of liquidity tokens to be redeemed and removed. |
amountTokenMin | uint | Sets the minimum amount of token to be removed from the the pool. This acts as a safeguard against removing liquidity during a spike in value. If the removed amount falls below this value, the transaction reverts. |
amountETHMin | uint | Sets the minimum amount of ONE to be removed from the the pool. This acts as a safeguard against removing liquidity during a spike in value. If the removed amount falls below this value, the transaction reverts. |
to | address | The address to where ONE and token will be sent. |
deadline | uint | The UNIX timestamp for which this transaction must be completed. If the transaction is mined after this deadline, the transaction will revert. |
v | uint8 | The v value of the permit. This is one of the three values that makes up the approval signature. |
r | bytes32 | The r value of the permit. This is one of the three values that makes up the approval signature. |
s | bytes32 | The s value of the permit. This is one of the three values that makes up the approval signature. |
Parameter | Value | Description |
amountETH | uint | The exact amount of ONE sent to the address provided in the to parameter. Note that the amountToken parameter is not returned. The amount of fee on transfer that a token may have is not available prior to transaction. |
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
The
swapExactTokensForTokens
function sends an exact amount of tokens for the maximum amount of another token. Parameter | Type | Description |
amountIn | uint | The amount of tokens being sent to swap into another token |
amountOutMin | uint | Sets the minimum amount of the desired token to receive. This acts as a safeguard against removing liquidity during a spike in value. If the amount to be received falls below this value, the transaction reverts. |
path | address[] calldata | The pathway to change one token to another, consisting of an array of addresses. Each token must have an existing liquidity pool, as well as have liquidity.
The path represents the pathway from one token to another. If a pair exists for the two tokens you wish to exchange, this will contain two values inside of an array. However, if there is no direct pair, multiple addresses may be required. |
to | address | The address to where the desired token will be sent. |
deadline | uint | The UNIX timestamp for which this transaction must be completed. If the transaction is mined after this deadline, the transaction will revert. |
Parameter | Type | Description |
amounts | uint[] memory | The exact amount of tokens sent into the swap, as well as the exact return amount of all subsequent swaps. |
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
The
swapTokensForExactTokens
function sends the minimum amount of tokens for the exact amount of another token. Parameter | Type | Description |
amountOut | uint | The exact amount of the desired tokens to be received. |
amountInMax | uint | Sets the maximum amount of token to be sent in. This acts as a safeguard against removing liquidity during a spike in value. If the amount to be sent rises above this value, the transaction reverts. |
path | address[] calldata | The pathway to change one token to another, consisting of an array of addresses. Each token must have an existing liquidity pool, as well as have liquidity.
The path represents the pathway from one token to another. If a pair exists for the two tokens you wish to exchange, this will contain two values inside of an array. However, if there is no direct pair, multiple addresses may be required. |
to | address | The address to where the desired token will be sent. |
deadline | uint | The UNIX timestamp for which this transaction must be completed. If the transaction is mined after this deadline, the transaction will revert. |
Parameter | Type | Description |
amounts | uint[] memory | The exact amount of tokens sent into the swap, as well as the exact return amount of all subsequent swaps. |
function swapExactETHForTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline)
external
payable
returns (uint[] memory amounts);
The
swapExactETHForTokens
function sends an exact amount of ONE for a desired token.Parameter | Type | Description |
(amountIn) msg.value | uint | Sent as the msg.value, the amount of ONE to be swapped. |
amountOutMin | uint | Sets the minimum amount of the desired token to receive. This acts as a safeguard against removing liquidity during a spike in value. If the amount to be received falls below this value, the transaction reverts. |
path | address[] calldata | The pathway to change one token to another, consisting of an array of addresses. Each token must have an existing liquidity pool, as well as have liquidity.
The path represents the pathway from one token to another. If a pair exists for the two tokens you wish to exchange, this will contain two values inside of an array. However, if there is no direct pair, multiple addresses may be required. ​ As the first swap is swapping ONE to WONE, the first address must be WONE. |
to | address | The address to where the desired token will be sent. |
deadline | uint | The UNIX timestamp for which this transaction must be completed. If the transaction is mined after this deadline, the transaction will revert. |
Parameter | Type | Description |
amounts | uint[] memory | The exact amount of ONE sent into the swap, as well as the exact return amount of all subsequent swaps. |
function swapTokensForExactETH(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline)
external
returns (uint[] memory amounts);
The
swapTokensForExactETH
function sends an amount of tokens for an exact amount of ONE.Parameter | Type | Description |
amountOut | uint | The exact amount of the ONE to be received. |
amountInMax | uint | Sets the maximum amount of token to be sent in. This acts as a safeguard against removing liquidity during a spike in value. If the amount to be sent rises above this value, the transaction reverts. |
path | address[] calldata | The pathway to change one token to another, consisting of an array of addresses. Each token must have an existing liquidity pool, as well as have liquidity.
The path represents the pathway from one token to another. If a pair exists for the two tokens you wish to exchange, this will contain two values inside of an array. However, if there is no direct pair, multiple addresses may be required. |
to | address | The address to where the desired token will be sent. |
deadline | uint | The UNIX timestamp for which this transaction must be completed. If the transaction is mined after this deadline, the transaction will revert. |
Parameter | Type | Description |
amounts | uint[] memory | The exact amount of tokens sent into the swap, as well as the exact amount of all subsequent swaps. |
function swapExactTokensForETH(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline)
external
returns (uint[] memory amounts);
The
swapExactTokensForETH
function sends an exact amount of tokens for ONE.Parameter | Type | Description |
amountIn | uint | The amount of tokens being sent to swap into ONE. |
amountOutMin | uint | Sets the minimum amount of the ONE to receive. This acts as a safeguard against removing liquidity during a spike in value. If the amount to be received falls below this value, the transaction reverts. |
path | address[] calldata | The pathway to change one token to another, consisting of an array of addresses. Each token must have an existing liquidity pool, as well as have liquidity.
The path represents the pathway from one token to another. If a pair exists for the two tokens you wish to exchange, this will contain two values inside of an array. However, if there is no direct pair, multiple addresses may be required. |
to | address | The address to where the desired token will be sent. |
deadline | uint | The UNIX timestamp for which this transaction must be completed. If the transaction is mined after this deadline, the transaction will revert. |